diff options
| -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(); +    } +} | 
