diff options
author | YamaArashi <shadow962@live.com> | 2016-12-07 23:23:11 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-12-07 23:34:37 -0800 |
commit | f0f0d85ab6ade1e3ec3ac39f426d55e0e19f02e7 (patch) | |
tree | 7741aa0152fec62735fffd5afc2743c765082df5 | |
parent | 3fde5ec96437126e8ecb140b180ac42082c0a569 (diff) |
decompile fldeff_strength.c
-rw-r--r-- | asm/fldeff_strength.s | 152 | ||||
-rw-r--r-- | include/asm.inc.h | 9 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/fldeff_strength.c | 74 |
4 files changed, 84 insertions, 153 deletions
diff --git a/asm/fldeff_strength.s b/asm/fldeff_strength.s deleted file mode 100644 index e595a5fc9..000000000 --- a/asm/fldeff_strength.s +++ /dev/null @@ -1,152 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start SetUpFieldMove_Strength -SetUpFieldMove_Strength: @ 811A99C - push {lr} - bl sub_81474C8 - lsls r0, 24 - cmp r0, 0 - beq _0811A9D4 - ldr r1, _0811A9BC @ =gScriptResult - ldr r0, _0811A9C0 @ =gUnknown_03005CE0 - ldrb r0, [r0] - strh r0, [r1] - ldr r1, _0811A9C4 @ =gUnknown_0300485C - ldr r0, _0811A9C8 @ =sub_808AB90 - str r0, [r1] - ldr r1, _0811A9CC @ =gUnknown_03005CE4 - ldr r0, _0811A9D0 @ =sub_811AA38 - b _0811A9F8 - .align 2, 0 -_0811A9BC: .4byte gScriptResult -_0811A9C0: .4byte gUnknown_03005CE0 -_0811A9C4: .4byte gUnknown_0300485C -_0811A9C8: .4byte sub_808AB90 -_0811A9CC: .4byte gUnknown_03005CE4 -_0811A9D0: .4byte sub_811AA38 -_0811A9D4: - movs r0, 0x57 - bl npc_before_player_of_type - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811A9E6 - movs r0, 0 - b _0811A9FC -_0811A9E6: - ldr r1, _0811AA00 @ =gScriptResult - ldr r0, _0811AA04 @ =gUnknown_03005CE0 - ldrb r0, [r0] - strh r0, [r1] - ldr r1, _0811AA08 @ =gUnknown_0300485C - ldr r0, _0811AA0C @ =sub_808AB90 - str r0, [r1] - ldr r1, _0811AA10 @ =gUnknown_03005CE4 - ldr r0, _0811AA14 @ =sub_811AA18 -_0811A9F8: - str r0, [r1] - movs r0, 0x1 -_0811A9FC: - pop {r1} - bx r1 - .align 2, 0 -_0811AA00: .4byte gScriptResult -_0811AA04: .4byte gUnknown_03005CE0 -_0811AA08: .4byte gUnknown_0300485C -_0811AA0C: .4byte sub_808AB90 -_0811AA10: .4byte gUnknown_03005CE4 -_0811AA14: .4byte sub_811AA18 - thumb_func_end SetUpFieldMove_Strength - - thumb_func_start sub_811AA18 -sub_811AA18: @ 811AA18 - push {lr} - ldr r1, _0811AA2C @ =gUnknown_0202FF84 - ldr r0, _0811AA30 @ =gUnknown_03005CE0 - ldrb r0, [r0] - str r0, [r1] - ldr r0, _0811AA34 @ =UseStrengthScript - bl ScriptContext1_SetupScript - pop {r0} - bx r0 - .align 2, 0 -_0811AA2C: .4byte gUnknown_0202FF84 -_0811AA30: .4byte gUnknown_03005CE0 -_0811AA34: .4byte UseStrengthScript - thumb_func_end sub_811AA18 - - thumb_func_start sub_811AA38 -sub_811AA38: @ 811AA38 - push {lr} - ldr r0, _0811AA4C @ =gUnknown_0202FF84 - ldr r1, _0811AA50 @ =gUnknown_03005CE0 - ldrb r1, [r1] - str r1, [r0] - movs r0, 0x28 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_0811AA4C: .4byte gUnknown_0202FF84 -_0811AA50: .4byte gUnknown_03005CE0 - thumb_func_end sub_811AA38 - - thumb_func_start FldEff_UseStrength -FldEff_UseStrength: @ 811AA54 - push {lr} - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811AA88 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _0811AA8C @ =sub_811AA9C - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - ldr r0, _0811AA90 @ =gUnknown_0202FF84 - ldr r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0811AA94 @ =gPlayerParty - adds r0, r1 - ldr r1, _0811AA98 @ =gStringVar1 - bl GetMonNickname - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811AA88: .4byte gTasks -_0811AA8C: .4byte sub_811AA9C -_0811AA90: .4byte gUnknown_0202FF84 -_0811AA94: .4byte gPlayerParty -_0811AA98: .4byte gStringVar1 - thumb_func_end FldEff_UseStrength - - thumb_func_start sub_811AA9C -sub_811AA9C: @ 811AA9C - push {lr} - bl sub_81474C8 - lsls r0, 24 - cmp r0, 0 - beq _0811AAAE - bl sub_8147514 - b _0811AAB8 -_0811AAAE: - movs r0, 0x28 - bl FieldEffectActiveListRemove - bl EnableBothScriptContexts -_0811AAB8: - pop {r0} - bx r0 - thumb_func_end sub_811AA9C - - .align 2, 0 @ Don't pad with nop. diff --git a/include/asm.inc.h b/include/asm.inc.h index 795e68f34..9b8b7e966 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -200,6 +200,7 @@ void DoTimeBasedEvents(void); void CB2_InitResetRtcScreen(void); // asm/rom_806D7F8.o +void GetMonNickname(struct Pokemon *mon, u8 *nickname); bool8 pokemon_has_move(struct Pokemon *, u16); // asm/rom_8074BAC.o @@ -243,6 +244,7 @@ void sub_80895F8(u32 i, u32 i1, u32 i2); void sub_8089668(void); void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6); void sub_8089A70(void); +void sub_808AB90(void); // asm/rom_8094928.o void sub_80961D8(void); @@ -390,6 +392,9 @@ void PlaySlotMachine(u8, void *); void sub_8106630(u32); // asm/rom6.o +bool8 npc_before_player_of_type(u8); +u8 oei_task_add(void); + void sub_810C994(void); void sub_810CA6C(s32); s16 sub_810CAE4(u8, struct Pokeblock *); @@ -466,6 +471,10 @@ void CB2_InitMysteryEventMenu(void); // asm/save_failed_screen.o void fullscreen_save_activate(); +// asm/rom_81473B8.s +bool8 sub_81474C8(void); +void sub_8147514(void); + // asm/rom_8148B8C.o void load_intro_part2_graphics(/*TODO: arg types*/); void sub_8148C78(/*TODO: arg types*/); diff --git a/ld_script.txt b/ld_script.txt index 3d24f98f3..ceb6126c3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -170,7 +170,7 @@ SECTIONS { asm/pokedex_cry_screen.o(.text); src/coins.o(.text); src/landmark.o(.text); - asm/fldeff_strength.o(.text); + src/fldeff_strength.o(.text); asm/battle_transition.o(.text); asm/battle_811DA74.o(.text); asm/battle_message.o(.text); diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c new file mode 100644 index 000000000..3cc33e3c1 --- /dev/null +++ b/src/fldeff_strength.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "field_effect.h" +#include "asm.h" +#include "pokemon.h" +#include "script.h" +#include "task.h" + +static void sub_811AA18(void); +static void sub_811AA38(void); +static void sub_811AA9C(void); + +extern u32 gUnknown_0202FF84; + +extern u8 gUnknown_03005CE0; +extern u16 gScriptResult; +extern void (*gUnknown_0300485C)(void); +extern void (*gUnknown_03005CE4)(void); + +extern u8 UseStrengthScript[]; + +bool8 SetUpFieldMove_Strength(void) +{ + if (sub_81474C8()) + { + gScriptResult = gUnknown_03005CE0; + gUnknown_0300485C = sub_808AB90; + gUnknown_03005CE4 = sub_811AA38; + } + else + { + if (npc_before_player_of_type(87) != TRUE) + return 0; + gScriptResult = gUnknown_03005CE0; + gUnknown_0300485C = sub_808AB90; + gUnknown_03005CE4 = sub_811AA18; + } + + return TRUE; +} + +static void sub_811AA18(void) +{ + gUnknown_0202FF84 = gUnknown_03005CE0; + ScriptContext1_SetupScript(UseStrengthScript); +} + +static void sub_811AA38(void) +{ + gUnknown_0202FF84 = gUnknown_03005CE0; + 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], gStringVar1); + return FALSE; +} + +static void sub_811AA9C(void) +{ + if (sub_81474C8()) + { + sub_8147514(); + } + else + { + FieldEffectActiveListRemove(40); + EnableBothScriptContexts(); + } +} |