summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-12-07 23:23:11 -0800
committerYamaArashi <shadow962@live.com>2016-12-07 23:34:37 -0800
commitf0f0d85ab6ade1e3ec3ac39f426d55e0e19f02e7 (patch)
tree7741aa0152fec62735fffd5afc2743c765082df5
parent3fde5ec96437126e8ecb140b180ac42082c0a569 (diff)
decompile fldeff_strength.c
-rw-r--r--asm/fldeff_strength.s152
-rw-r--r--include/asm.inc.h9
-rw-r--r--ld_script.txt2
-rw-r--r--src/fldeff_strength.c74
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();
+ }
+}