summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Willems (M17.1) <progreon@gmail.com>2018-01-06 00:06:06 +0100
committerMarco Willems (M17.1) <progreon@gmail.com>2018-01-06 00:06:06 +0100
commit0bbbc1c6dfc6c2b8646276de94cedab9ddc8bc4b (patch)
treebf9c11fdadb64868f33a0a590deed7f7238d6ac9
parent04bf8d9603be30c6b226148d5d4318ac64b477af (diff)
Started decompiling wisp_fire.s
-rwxr-xr-xasm/wisp_fire.s144
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle/anim/wisp_fire.c48
3 files changed, 49 insertions, 144 deletions
diff --git a/asm/wisp_fire.s b/asm/wisp_fire.s
index a6407589f..5fc7a07ab 100755
--- a/asm/wisp_fire.s
+++ b/asm/wisp_fire.s
@@ -7,150 +7,6 @@
@ wisp_fire
- thumb_func_start sub_80D5CC0
-sub_80D5CC0: @ 80D5CC0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080D5CD8
- ldr r0, _080D5D4C @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x30]
- adds r0, r1, 0x1
- strh r0, [r4, 0x2E]
-_080D5CD8:
- movs r0, 0xC0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r4, 0x34]
- adds r1, r2
- strh r1, [r4, 0x34]
- ldrh r0, [r4, 0x36]
- adds r0, 0xA0
- strh r0, [r4, 0x36]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- lsls r1, 16
- asrs r1, 24
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- ldrh r1, [r4, 0x36]
- lsls r1, 16
- asrs r1, 24
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- adds r2, r0, 0x7
- movs r0, 0xFF
- ands r2, r0
- strh r2, [r4, 0x30]
- ldr r0, _080D5D50 @ =gMain
- ldr r1, _080D5D54 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D5D84
- adds r0, r2, 0
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x83
- bls _080D5D5C
- ldr r0, _080D5D58 @ =gAnimBankTarget
- ldrb r0, [r0]
- bl sub_8079ED4
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- b _080D5DA0
- .align 2, 0
-_080D5D4C: .4byte gBattleAnimArgs
-_080D5D50: .4byte gMain
-_080D5D54: .4byte 0x0000043d
-_080D5D58: .4byte gAnimBankTarget
-_080D5D5C:
- ldr r0, _080D5D80 @ =gAnimBankTarget
- ldrb r0, [r0]
- bl sub_8079ED4
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r4, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x5]
- b _080D5DA0
- .align 2, 0
-_080D5D80: .4byte gAnimBankTarget
-_080D5D84:
- adds r0, r2, 0
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x83
- bls _080D5D98
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1D
- b _080D5D9E
-_080D5D98:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1F
-_080D5D9E:
- strb r0, [r1]
-_080D5DA0:
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080D5DC8
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_080D5DC8:
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- cmp r0, 0x1E
- bne _080D5DD6
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080D5DD6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D5CC0
-
thumb_func_start sub_80D5DDC
sub_80D5DDC: @ 80D5DDC
push {r4,lr}
diff --git a/ld_script.txt b/ld_script.txt
index af6e248d2..4eeaab513 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -283,6 +283,7 @@ SECTIONS {
src/battle/anim/fire_2.o(.text);
src/battle/anim/heated_rock.o(.text);
src/battle/anim/wisp_orb.o(.text);
+ src/battle/anim/wisp_fire.o(.text);
asm/wisp_fire.o(.text);
src/battle/anim/thunder.o(.text);
src/battle/anim/beta_beat_up.o(.text);
diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c
new file mode 100644
index 000000000..e31c15d9c
--- /dev/null
+++ b/src/battle/anim/wisp_fire.c
@@ -0,0 +1,48 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "main.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankTarget;
+// extern u8 gAnimBankAttacker;
+
+void sub_80D5CC0(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[0] += 1;
+ }
+
+ sprite->data[3] += 0xC0 * 2;
+ sprite->data[4] += 0xA0;
+
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[3] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[4] >> 8);
+
+ sprite->data[1] = (sprite->data[1] + 7) & 0xFF;
+
+ if (gMain.inBattle)
+ if ((u16) (sprite->data[1] - 0x40) > 0x83)
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ else
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
+ else
+ if ((u16) (sprite->data[1] - 0x40) > 0x83)
+ sprite->subpriority = 0x1D;
+ else
+ sprite->subpriority = 0x1F;
+
+ if (++sprite->data[2] > 0x14)
+ sprite->invisible ^= 1;
+
+ if (sprite->data[2] == 0x1E)
+ DestroyAnimSprite(sprite);
+}
+
+// void sub_80D5DDC(struct Sprite *sprite)
+// {
+
+// } \ No newline at end of file