summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsceptillion <33798691+sceptillion@users.noreply.github.com>2017-11-19 00:20:19 -0800
committersceptillion <33798691+sceptillion@users.noreply.github.com>2017-11-19 00:20:19 -0800
commit557fd1958dca6dfed792e584bd16e47282697963 (patch)
tree9126d1eebc51c569892188132132ce8f342b73b7
parent9baa39f7082acfb1eb8b75603e440773504ad206 (diff)
decompile fldeff_poison
-rwxr-xr-xasm/fldeff_poison.s99
-rw-r--r--ld_script.txt2
-rw-r--r--src/field/fldeff_poison.c43
3 files changed, 44 insertions, 100 deletions
diff --git a/asm/fldeff_poison.s b/asm/fldeff_poison.s
deleted file mode 100755
index e76ccba05..000000000
--- a/asm/fldeff_poison.s
+++ /dev/null
@@ -1,99 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start Task_FieldPoisonEffect
-Task_FieldPoisonEffect: @ 80C7008
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080C702C @ =gTasks + 0x8
- adds r1, r0, r1
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0x1
- beq _080C7046
- cmp r0, 0x1
- bgt _080C7030
- cmp r0, 0
- beq _080C7036
- b _080C7062
- .align 2, 0
-_080C702C: .4byte gTasks + 0x8
-_080C7030:
- cmp r0, 0x2
- beq _080C705A
- b _080C7062
-_080C7036:
- ldrh r0, [r1, 0x2]
- adds r0, 0x2
- strh r0, [r1, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _080C7062
- b _080C7052
-_080C7046:
- ldrh r0, [r1, 0x2]
- subs r0, 0x2
- strh r0, [r1, 0x2]
- lsls r0, 16
- cmp r0, 0
- bne _080C7062
-_080C7052:
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _080C7062
-_080C705A:
- adds r0, r2, 0
- bl DestroyTask
- b _080C706C
-_080C7062:
- ldr r2, _080C7070 @ =REG_MOSAIC
- ldrh r1, [r1, 0x2]
- lsls r0, r1, 4
- orrs r0, r1
- strh r0, [r2]
-_080C706C:
- pop {r0}
- bx r0
- .align 2, 0
-_080C7070: .4byte REG_MOSAIC
- thumb_func_end Task_FieldPoisonEffect
-
- thumb_func_start DoFieldPoisonEffect
-DoFieldPoisonEffect: @ 80C7074
- push {lr}
- movs r0, 0x4F
- bl PlaySE
- ldr r0, _080C7088 @ =Task_FieldPoisonEffect
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080C7088: .4byte Task_FieldPoisonEffect
- thumb_func_end DoFieldPoisonEffect
-
- thumb_func_start FieldPoisonEffectIsRunning
-FieldPoisonEffectIsRunning: @ 80C708C
- push {lr}
- ldr r0, _080C709C @ =Task_FieldPoisonEffect
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080C709C: .4byte Task_FieldPoisonEffect
- thumb_func_end FieldPoisonEffectIsRunning
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index 100afadf9..773714819 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -162,7 +162,7 @@ SECTIONS {
asm/fldeff_secretpower.o(.text);
asm/fldeff_pc.o(.text);
asm/fldeff_decoration.o(.text);
- asm/fldeff_poison.o(.text);
+ src/field/fldeff_poison.o(.text);
asm/fldeff_berrytree.o(.text);
src/field/fldeff_recordmixing.o(.text);
src/field/field_special_scene.o(.text);
diff --git a/src/field/fldeff_poison.c b/src/field/fldeff_poison.c
new file mode 100644
index 000000000..b751ee564
--- /dev/null
+++ b/src/field/fldeff_poison.c
@@ -0,0 +1,43 @@
+#include "global.h"
+#include "task.h"
+#include "songs.h"
+#include "sound.h"
+
+static void Task_FieldPoisonEffect(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ data[1] += 2;
+ if (data[1] > 8)
+ {
+ data[0]++;
+ }
+ break;
+ case 1:
+ data[1] -= 2;
+ if (data[1] == 0)
+ {
+ data[0]++;
+ }
+ break;
+ case 2:
+ DestroyTask(taskId);
+ return;
+ }
+
+ REG_MOSAIC = (data[1] << 4) | data[1];
+}
+
+void DoFieldPoisonEffect()
+{
+ PlaySE(SE_DOKU);
+ CreateTask(Task_FieldPoisonEffect, 80);
+}
+
+bool8 FieldPoisonEffectIsRunning(void)
+{
+ return FuncIsActiveTask(Task_FieldPoisonEffect);
+}