diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-10 11:51:13 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-10 11:51:13 -0500 |
commit | 3f54c7caa1c40692f3f8c2b7660b0459dac38c0e (patch) | |
tree | 98953676ecc3acea0fe02a7cc3813ffa3a20063e | |
parent | 5734043a202bb831609736802de615687531f7f3 (diff) |
Port script_pokemon_util_80A0058
-rw-r--r-- | asm/link_rfu_3.s | 8 | ||||
-rw-r--r-- | asm/overworld.s | 2 | ||||
-rw-r--r-- | asm/script_pokemon_util_80A0058.s | 535 | ||||
-rw-r--r-- | data/event_scripts.s | 26 | ||||
-rw-r--r-- | data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/PalletTown_ProfessorOaksLab/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/PokemonTower_5F/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/SevenIsland_House_Room1/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/SevenIsland_House_Room2/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc | 2 | ||||
-rw-r--r-- | data/specials.inc | 6 | ||||
-rw-r--r-- | include/script_pokemon_util_80A0058.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_setup.c | 2 | ||||
-rw-r--r-- | src/post_battle_event_funcs.c | 2 | ||||
-rw-r--r-- | src/script_pokemon_util_80A0058.c | 232 |
16 files changed, 263 insertions, 566 deletions
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 1f47f7214..96a599bc9 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -3272,7 +3272,7 @@ sub_81173C0: @ 81173C0 adds r6, r0, 0 lsls r6, 16 lsrs r6, 16 - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r5, _0811742C @ =gLinkPlayers @@ -3660,7 +3660,7 @@ _081177A0: ldr r0, _081177C4 @ =gBlockSendBuffer movs r1, 0x1 bl sub_8117594 - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag movs r0, 0x1 @@ -3673,7 +3673,7 @@ _081177A0: _081177C4: .4byte gBlockSendBuffer _081177C8: bl CleanupOverworldWindowsAndTilemaps - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r0, _081177EC @ =gBlockSendBuffer @@ -3689,7 +3689,7 @@ _081177C8: _081177EC: .4byte gBlockSendBuffer _081177F0: bl CleanupOverworldWindowsAndTilemaps - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r0, _08117814 @ =gBlockSendBuffer diff --git a/asm/overworld.s b/asm/overworld.s index 4fbe39153..9939296af 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -19,7 +19,7 @@ sub_8054BC8: @ 8054BC8 adds r1, r0, 0 adds r0, r4, 0 bl RemoveMoney - bl sp000_heal_pokemon + bl HealPlayerParty bl sub_8054DD8 bl sub_80554BC bl WarpIntoMap diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s deleted file mode 100644 index 6f451b90a..000000000 --- a/asm/script_pokemon_util_80A0058.s +++ /dev/null @@ -1,535 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sp000_heal_pokemon -sp000_heal_pokemon: @ 80A0058 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - mov r8, r0 - ldr r0, _080A0114 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r8, r0 - bcs _080A0104 - ldr r1, _080A0118 @ =gPlayerParty - mov r10, r1 - mov r6, sp -_080A0076: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - add r4, r10 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - lsls r1, r0, 16 - strb r0, [r6] - lsrs r1, 24 - strb r1, [r6, 0x1] - adds r0, r4, 0 - movs r1, 0x39 - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x15 - bl GetMonData - lsls r0, 24 - lsrs r7, r0, 24 - movs r5, 0 - movs r1, 0x1 - add r1, r8 - mov r9, r1 -_080A00AC: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r7, 0 - adds r2, r5, 0 - bl CalculatePPWithBonus - strb r0, [r6] - adds r1, r5, 0 - adds r1, 0x11 - adds r0, r4, 0 - mov r2, sp - bl SetMonData - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _080A00AC - movs r0, 0 - strb r0, [r6] - strb r0, [r6, 0x1] - strb r0, [r6, 0x2] - strb r0, [r6, 0x3] - movs r1, 0x64 - mov r0, r8 - muls r0, r1 - add r0, r10 - movs r1, 0x37 - mov r2, sp - bl SetMonData - mov r1, r9 - lsls r0, r1, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _080A0114 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r8, r0 - bcc _080A0076 -_080A0104: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A0114: .4byte gPlayerPartyCount -_080A0118: .4byte gPlayerParty - thumb_func_end sp000_heal_pokemon - - thumb_func_start ScriptGiveMon -ScriptGiveMon: @ 80A011C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r6, 16 - lsrs r6, 16 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r0, r5, 16 - mov r8, r0 - movs r0, 0x64 - bl AllocZeroed - adds r7, r0, 0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r4, 0 - movs r3, 0x20 - bl CreateMon - add r0, sp, 0x10 - mov r1, r8 - strb r1, [r0] - lsrs r5, 24 - strb r5, [r0, 0x1] - adds r0, r7, 0 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData - adds r0, r7, 0 - bl GiveMonToPlayer - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r6, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r5, r0, 16 - cmp r4, 0x1 - bgt _080A0196 - cmp r4, 0 - blt _080A0196 - adds r0, r5, 0 - movs r1, 0x2 - bl GetSetPokedexFlag - adds r0, r5, 0 - movs r1, 0x3 - bl GetSetPokedexFlag -_080A0196: - adds r0, r7, 0 - bl Free - adds r0, r4, 0 - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ScriptGiveMon - - thumb_func_start ScriptGiveEgg -ScriptGiveEgg: @ 80A01AC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x64 - bl AllocZeroed - adds r5, r0, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl CreateEgg - movs r1, 0x1 - mov r0, sp - strb r1, [r0] - adds r0, r5, 0 - movs r1, 0x2D - mov r2, sp - bl SetMonData - adds r0, r5, 0 - bl GiveMonToPlayer - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl Free - adds r0, r4, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end ScriptGiveEgg - - thumb_func_start CheckForAlivePartyMons -CheckForAlivePartyMons: @ 80A01F4 - push {lr} - bl GetMonsStateToDoubles - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1 - beq _080A0210 - cmp r1, 0x1 - bgt _080A020C - cmp r1, 0 - beq _080A0210 - b _080A0214 -_080A020C: - cmp r1, 0x2 - bne _080A0214 -_080A0210: - ldr r0, _080A0218 @ =gSpecialVar_Result - strh r1, [r0] -_080A0214: - pop {r0} - bx r0 - .align 2, 0 -_080A0218: .4byte gSpecialVar_Result - thumb_func_end CheckForAlivePartyMons - - thumb_func_start CheckPartyMonHasHeldItem -CheckPartyMonHasHeldItem: @ 80A021C - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - movs r5, 0 - movs r7, 0xCE - lsls r7, 1 -_080A0228: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080A0258 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _080A025C - cmp r0, r7 - beq _080A025C - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - cmp r0, r6 - bne _080A025C - movs r0, 0x1 - b _080A0264 - .align 2, 0 -_080A0258: .4byte gPlayerParty -_080A025C: - adds r5, 0x1 - cmp r5, 0x5 - ble _080A0228 - movs r0, 0 -_080A0264: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckPartyMonHasHeldItem - - thumb_func_start GetNameOfEnigmaBerryInPlayerParty -GetNameOfEnigmaBerryInPlayerParty: @ 80A026C - push {r4,lr} - movs r0, 0xAF - bl CheckPartyMonHasHeldItem - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r4, 0x1 - bne _080A028E - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080A0298 @ =gStringVar1 - bl GetBerryNameByBerryType -_080A028E: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080A0298: .4byte gStringVar1 - thumb_func_end GetNameOfEnigmaBerryInPlayerParty - - thumb_func_start CreateScriptedWildMon -CreateScriptedWildMon: @ 80A029C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - lsls r7, r2, 16 - lsrs r6, r7, 16 - bl ZeroEnemyPartyMons - ldr r0, _080A02F8 @ =gEnemyParty - mov r8, r0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - mov r0, r8 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x20 - bl CreateMon - cmp r6, 0 - beq _080A02EA - add r0, sp, 0x10 - strb r6, [r0] - adds r1, r0, 0 - lsrs r0, r7, 24 - strb r0, [r1, 0x1] - mov r0, r8 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData -_080A02EA: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A02F8: .4byte gEnemyParty - thumb_func_end CreateScriptedWildMon - - thumb_func_start ScriptSetMonMoveSlot -ScriptSetMonMoveSlot: @ 80A02FC - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r2, 24 - cmp r3, 0x6 - bls _080A0318 - ldr r0, _080A032C @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 -_080A0318: - movs r0, 0x64 - muls r0, r3 - ldr r1, _080A0330 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl SetMonMoveSlot - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A032C: .4byte gPlayerPartyCount -_080A0330: .4byte gPlayerParty - thumb_func_end ScriptSetMonMoveSlot - - thumb_func_start sub_80A0334 -sub_80A0334: @ 80A0334 - push {lr} - ldr r1, _080A0348 @ =gMain - ldr r0, _080A034C @ =sub_80A0350 - str r0, [r1, 0x8] - movs r0, 0 - bl InitChooseHalfPartyForBattle - pop {r0} - bx r0 - .align 2, 0 -_080A0348: .4byte gMain -_080A034C: .4byte sub_80A0350 - thumb_func_end sub_80A0334 - - thumb_func_start sub_80A0350 -sub_80A0350: @ 80A0350 - push {lr} - ldr r0, _080A0360 @ =gSelectedOrderFromParty - ldrb r1, [r0] - cmp r1, 0 - bne _080A0368 - ldr r0, _080A0364 @ =gSpecialVar_Result - strh r1, [r0] - b _080A036E - .align 2, 0 -_080A0360: .4byte gSelectedOrderFromParty -_080A0364: .4byte gSpecialVar_Result -_080A0368: - ldr r1, _080A0378 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080A036E: - ldr r0, _080A037C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080A0378: .4byte gSpecialVar_Result -_080A037C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80A0350 - - thumb_func_start ChooseBattleTowerPlayerParty -ChooseBattleTowerPlayerParty: @ 80A0380 - push {lr} - ldr r1, _080A0394 @ =gMain - ldr r0, _080A0398 @ =sub_80A039C - str r0, [r1, 0x8] - movs r0, 0x1 - bl InitChooseHalfPartyForBattle - pop {r0} - bx r0 - .align 2, 0 -_080A0394: .4byte gMain -_080A0398: .4byte sub_80A039C - thumb_func_end ChooseBattleTowerPlayerParty - - thumb_func_start sub_80A039C -sub_80A039C: @ 80A039C - push {r4,lr} - ldr r0, _080A03B0 @ =gSelectedOrderFromParty - ldrb r4, [r0] - cmp r4, 0 - bne _080A03B8 - bl LoadPlayerParty - ldr r0, _080A03B4 @ =gSpecialVar_Result - strh r4, [r0] - b _080A03C2 - .align 2, 0 -_080A03B0: .4byte gSelectedOrderFromParty -_080A03B4: .4byte gSpecialVar_Result -_080A03B8: - bl ReducePlayerPartyToThree - ldr r1, _080A03D0 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080A03C2: - ldr r0, _080A03D4 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A03D0: .4byte gSpecialVar_Result -_080A03D4: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80A039C - - thumb_func_start ReducePlayerPartyToThree -ReducePlayerPartyToThree: @ 80A03D8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r0, 0x96 - lsls r0, 1 - bl AllocZeroed - adds r7, r0, 0 - movs r5, 0 - movs r0, 0x64 - mov r8, r0 - ldr r6, _080A0454 @ =gPlayerParty - adds r4, r7, 0 -_080A03F4: - ldr r0, _080A0458 @ =gSelectedOrderFromParty - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _080A040E - subs r0, 0x1 - mov r1, r8 - muls r1, r0 - adds r1, r6 - adds r0, r4, 0 - movs r2, 0x64 - bl memcpy -_080A040E: - adds r4, 0x64 - adds r5, 0x1 - cmp r5, 0x2 - ble _080A03F4 - movs r0, 0 - str r0, [sp] - ldr r4, _080A0454 @ =gPlayerParty - ldr r2, _080A045C @ =0x05000096 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - adds r5, r7, 0 - adds r6, r7, 0 - adds r6, 0xC8 -_080A042C: - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - adds r5, 0x64 - adds r4, 0x64 - cmp r5, r6 - ble _080A042C - bl CalculatePlayerPartyCount - adds r0, r7, 0 - bl Free - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A0454: .4byte gPlayerParty -_080A0458: .4byte gSelectedOrderFromParty -_080A045C: .4byte 0x05000096 - thumb_func_end ReducePlayerPartyToThree - - .align 2, 0 @ Don't pad with nop. diff --git a/data/event_scripts.s b/data/event_scripts.s index 21fdffe43..13bba19f8 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -871,7 +871,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 81A4EE9 specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F20 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F19 special PlayTrainerEncounterMusic @@ -923,7 +923,7 @@ EventScript_TryDoDoubleRematchBattle:: @ 81A4F73 specialvar VAR_RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A4FB0 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4FB1 special PlayTrainerEncounterMusic @@ -1617,7 +1617,7 @@ EventScript_1A65CE:: @ 81A65CE waitfieldeffect 25 applymovement VAR_LAST_TALKED, Movement_1A75ED waitmovement 0 - special sp000_heal_pokemon + special HealPlayerParty return EventScript_1A65EC:: @ 81A65EC @@ -2161,7 +2161,7 @@ EventScript_FadeOut_Heal_FadeIn:: @ 81A6C26 fadescreen 1 playfanfare MUS_ME_ASA waitfanfare - special sp000_heal_pokemon + special HealPlayerParty fadescreen 0 return @@ -8644,7 +8644,7 @@ EventScript_1BB519:: @ 81BB519 end EventScript_1BB51A:: @ 81BB51A - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1BB533 setvar VAR_0x8004, 2 @@ -8693,7 +8693,7 @@ EventScript_1BB54C:: @ 81BB54C end EventScript_1BB5B3:: @ 81BB5B3 - special sp000_heal_pokemon + special HealPlayerParty special SavePlayerParty special LoadPlayerBag copyvar VAR_0x406F, VAR_0x8004 @@ -9019,7 +9019,7 @@ UnknownMap_00_00_EventScript_1BB8CF:: @ 81BB8CF gUnknown_81BB8DB:: @ 81BB8DB UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9032,7 +9032,7 @@ UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB gUnknown_81BB8F8:: @ 81BB8F8 UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9045,7 +9045,7 @@ UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8 gUnknown_81BB915:: @ 81BB915 UnknownMap_00_03_EventScript_1BB915:: @ 81BB915 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9058,7 +9058,7 @@ UnknownMap_00_03_EventScript_1BB915:: @ 81BB915 gUnknown_81BB932:: @ 81BB932 UnknownMap_00_03_EventScript_1BB932:: @ 81BB932 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9217,7 +9217,7 @@ EventScript_1BBA94:: @ 81BBA94 goto_if eq, EventScript_1BB82F msgbox gUnknown_81BD86A closemessage - special sp000_heal_pokemon + special HealPlayerParty setvar VAR_0x8004, 6 copyvar VAR_0x406F, VAR_0x8004 special HelpSystem_Disable @@ -9368,7 +9368,7 @@ EventScript_1BBCF4:: @ 81BBCF4 end EventScript_1BBCF5:: @ 81BBCF5 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1BBD0E setvar VAR_0x8004, 1 @@ -14241,7 +14241,7 @@ EventScript_1C52D7: end EventScript_1C52E0:: @ 81C52E0 - special sp000_heal_pokemon + special HealPlayerParty setvar VAR_0x8004, 11 special sub_815D9E8 warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 9, 7 diff --git a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc index 71c8cf0ee..a713b044f 100644 --- a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc +++ b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc @@ -45,7 +45,7 @@ EventScript_1653C5:: @ 81653C5 OneIsland_KindleRoad_EmberSpa_EventScript_1653CF:: @ 81653CF lockall fadescreen 3 - special sp000_heal_pokemon + special HealPlayerParty fadescreen 2 msgbox gUnknown_817D450 setvar VAR_0x4001, 1 diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc index 850182c08..38d85f0d1 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -488,7 +488,7 @@ Movement_1694BE:: @ 81694BE step_end EventScript_1694C2:: @ 81694C2 - special sp000_heal_pokemon + special HealPlayerParty msgbox gUnknown_818DE38 closemessage playbgm MUS_RIVAL2, 0 diff --git a/data/maps/PokemonTower_5F/scripts.inc b/data/maps/PokemonTower_5F/scripts.inc index 85517e241..dee5b5bbd 100644 --- a/data/maps/PokemonTower_5F/scripts.inc +++ b/data/maps/PokemonTower_5F/scripts.inc @@ -8,7 +8,7 @@ PokemonTower_5F_EventScript_163433:: @ 8163433 PokemonTower_5F_EventScript_16343C:: @ 816343C lockall fadescreen 3 - special sp000_heal_pokemon + special HealPlayerParty fadescreen 2 msgbox gUnknown_817A1FA setvar VAR_0x4001, 1 diff --git a/data/maps/SevenIsland_House_Room1/scripts.inc b/data/maps/SevenIsland_House_Room1/scripts.inc index fd83fa051..f136b8de2 100644 --- a/data/maps/SevenIsland_House_Room1/scripts.inc +++ b/data/maps/SevenIsland_House_Room1/scripts.inc @@ -128,7 +128,7 @@ EventScript_170A11:: @ 8170A11 EventScript_170A1E:: @ 8170A1E msgbox gUnknown_81A06AB fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate return diff --git a/data/maps/SevenIsland_House_Room2/scripts.inc b/data/maps/SevenIsland_House_Room2/scripts.inc index f2928f916..0ca956c55 100644 --- a/data/maps/SevenIsland_House_Room2/scripts.inc +++ b/data/maps/SevenIsland_House_Room2/scripts.inc @@ -29,7 +29,7 @@ EventScript_170A97:: @ 8170A97 compare_var_to_value VAR_RESULT, 2 call_if eq, EventScript_170B17 closemessage - special sp000_heal_pokemon + special HealPlayerParty applymovement 255, Movement_170B28 waitmovement 0 special LoadPlayerParty diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc index 142f33ee3..b0074f4b3 100644 --- a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc +++ b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc @@ -196,7 +196,7 @@ EventScript_164A53:: @ 8164A53 EventScript_164AA0:: @ 8164AA0 copyvar VAR_0x8005, VAR_RESULT setvar VAR_MAP_SCENE_TRAINER_TOWER, 1 - special sp000_heal_pokemon + special HealPlayerParty msgbox gUnknown_817C8BF setvar VAR_0x8004, 6 special sub_815D9E8 diff --git a/data/specials.inc b/data/specials.inc index f7ca055ef..514acc0fc 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -8,7 +8,7 @@ .set __special__, 0 .align 2 gSpecials:: @ 815FD60 - def_special sp000_heal_pokemon + def_special HealPlayerParty def_special SetCableClubWarp def_special DoCableClubWarp def_special sub_807E704 @@ -49,7 +49,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special SavePlayerParty def_special LoadPlayerParty - def_special sub_80A0334 + def_special ChooseHalfPartyForBattle def_special sp02A_crash_sound def_special nullsub_75 def_special nullsub_75 @@ -69,7 +69,7 @@ gSpecials:: @ 815FD60 def_special ScrSpecial_GetTrainerEyeRematchFlag def_special ScrSpecial_StartTrainerEyeRematch def_special ShowPokemonStorageSystem - def_special CheckForAlivePartyMons + def_special HasEnoughMonsForDoubleBattle def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index b63a7b0ef..d0b8949e4 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -4,7 +4,7 @@ bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); -void sp000_heal_pokemon(void); +void HealPlayerParty(void); void ReducePlayerPartyToThree(void); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/ld_script.txt b/ld_script.txt index 614bc4c93..995bed11f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -145,7 +145,7 @@ SECTIONS { src/script_menu.o(.text); asm/naming_screen.o(.text); src/money.o(.text); - asm/script_pokemon_util_80A0058.o(.text); + src/script_pokemon_util_80A0058.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); asm/pc_screen_effect.o(.text); diff --git a/src/battle_setup.c b/src/battle_setup.c index 17da53083..dee0c492b 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -901,7 +901,7 @@ static void CB2_EndTrainerBattle(void) gSpecialVar_Result = 1; if (gUnknown_20386CC & 1) { - sp000_heal_pokemon(); + HealPlayerParty(); } else { diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 6d4652f35..1e61b9b77 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -14,7 +14,7 @@ bool8 Special_HallOfFame(void) bool8 *r7; int i; bool8 gaveAtLeastOneRibbon; - sp000_heal_pokemon(); + HealPlayerParty(); if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) { gHasHallOfFameRecords = TRUE; diff --git a/src/script_pokemon_util_80A0058.c b/src/script_pokemon_util_80A0058.c new file mode 100644 index 000000000..9a9fd37a5 --- /dev/null +++ b/src/script_pokemon_util_80A0058.c @@ -0,0 +1,232 @@ +#include "global.h" +#include "battle.h" +#include "battle_gfx_sfx_util.h" +#include "berry.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "link.h" +#include "link_rfu.h" +#include "load_save.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "party_menu.h" +#include "pokedex.h" +#include "pokemon.h" +#include "random.h" +#include "script.h" +#include "script_menu.h" +#include "script_pokemon_util_80A0058.h" +#include "sprite.h" +#include "string_util.h" +#include "constants/items.h" +#include "constants/species.h" +#include "constants/vars.h" + +static void CB2_ReturnFromChooseHalfParty(void); +static void CB2_ReturnFromChooseBattleTowerParty(void); + +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 < MAX_MON_MOVES; 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 = AllocZeroed(sizeof(struct Pokemon)); + + CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 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, FLAG_SET_SEEN); + GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); + break; + } + + Free(mon); + return sentToPc; +} + +u8 ScriptGiveEgg(u16 species) +{ + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + u8 isEgg; + bool8 sentToPc; + + CreateEgg(mon, species, TRUE); + isEgg = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); + + sentToPc = GiveMonToPlayer(mon); + Free(mon); + return sentToPc; +} + +void HasEnoughMonsForDoubleBattle(void) +{ + switch (GetMonsStateToDoubles()) + { + case PLAYER_HAS_TWO_USABLE_MONS: + gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; + break; + case PLAYER_HAS_ONE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_MON; + break; + case PLAYER_HAS_ONE_USABLE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; + break; + } +} + +static bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < PARTY_SIZE; 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, 32, 0, 0, OT_ID_PLAYER_ID, 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 > PARTY_SIZE) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +// Note: When control returns to the event script, gSpecialVar_Result will be +// TRUE if the party selection was successful. +void ChooseHalfPartyForBattle(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseHalfParty; +// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); + InitChooseHalfPartyForBattle(0); +} + +static void CB2_ReturnFromChooseHalfParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + gSpecialVar_Result = FALSE; + break; + default: + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ChooseBattleTowerPlayerParty(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty; + InitChooseHalfPartyForBattle(1); +} + +static void CB2_ReturnFromChooseBattleTowerParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + LoadPlayerParty(); + gSpecialVar_Result = FALSE; + break; + default: + ReducePlayerPartyToThree(); + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ReducePlayerPartyToThree(void) +{ + struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon)); + int i; + + // 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 + + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 4 with the order copied to. + for (i = 0; i < 3; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); + Free(party); +} |