summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgolem galvanize <golemgalvanize@github.com>2018-01-11 11:41:33 -0500
committergolem galvanize <golemgalvanize@github.com>2018-01-11 11:41:33 -0500
commitbde368e439b3a279df18efcf563ec908f3e84330 (patch)
tree4e90c87b0e2f34826c4d833c03a62fb04ca4759b /src
parent690021476f3ec334e06b0dfc95267114949ecfc7 (diff)
finish splitting and decompiling dragon.s
Diffstat (limited to 'src')
-rwxr-xr-xsrc/battle/anim/dark.c138
-rwxr-xr-xsrc/battle/anim/dragon.c42
2 files changed, 166 insertions, 14 deletions
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
new file mode 100755
index 000000000..306784609
--- /dev/null
+++ b/src/battle/anim/dark.c
@@ -0,0 +1,138 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "scanline_effect.h"
+
+void sub_80DFE90(struct Sprite *sprite);
+
+void sub_80DFC9C(u8 taskId);
+void sub_80DFD58(u8 taskId);
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u8 gObjectBankIDs[];
+
+// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage
+
+void sub_80DFC24(u8 taskId)
+{
+ int bank;
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ bank = gAnimBankAttacker;
+ gTasks[taskId].data[1] = 16;
+ REG_BLDALPHA = 16;
+ if (GetBankIdentity_permutated(bank) == 1)
+ REG_BLDCNT = 0x3F42;
+ else
+ REG_BLDCNT = 0x3F44;
+ gTasks[taskId].func = sub_80DFC9C;
+}
+
+void sub_80DFC9C(u8 taskId)
+{
+ u8 r2 = gTasks[taskId].data[1] >> 8;
+ u8 r1 = gTasks[taskId].data[1];
+ if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0])
+ {
+ r2++;
+ r1--;
+ gTasks[taskId].data[1] = (r2 << 8) | r1;
+ REG_BLDALPHA = (r2 << 8) | r1;
+ gTasks[taskId].data[2] = 0;
+ if (r2 == 16)
+ {
+ gSprites[gObjectBankIDs[gAnimBankAttacker]].invisible = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ else
+ gTasks[taskId].data[2]++;
+}
+
+void sub_80DFD24(u8 taskId)
+{
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = 0x1000;
+ gTasks[taskId].func = sub_80DFD58;
+ REG_BLDALPHA = 0x1000;
+}
+
+void sub_80DFD58(u8 taskId)
+{
+ u8 r1 = gTasks[taskId].data[1] >> 8;
+ u8 r5 = gTasks[taskId].data[1];
+ if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0])
+ {
+ r1--;
+ r5++;
+ gTasks[taskId].data[1] = (r1 << 8) | r5;
+ REG_BLDALPHA = (r1 << 8) | r5;
+ gTasks[taskId].data[2] = 0;
+ if (r1 == 0)
+ {
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ else
+ gTasks[taskId].data[2]++;
+}
+
+// unlike the above is only used in Feint Attack
+
+void sub_80DFDC0(u8 taskId)
+{
+ REG_BLDALPHA = 0x1000;
+ if (GetBankIdentity_permutated(gAnimBankAttacker) == 1)
+ REG_BLDCNT = 0x3F42;
+ else
+ REG_BLDCNT = 0x3F44;
+ DestroyAnimVisualTask(taskId);
+}
+
+// unused sprite template's callback
+
+void sub_80DFE14(struct Sprite *sprite)
+{
+ sprite->data[1] = GetBankPosition(gAnimBankTarget, 2);
+ sprite->data[2] = GetBankPosition(gAnimBankAttacker, 2);
+ sprite->data[3] = GetBankPosition(gAnimBankTarget, 3);
+ sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3);
+ sprite->data[0] = 0x7E;
+ sub_8078A5C(sprite);
+ sprite->data[3] = -sprite->data[1];
+ sprite->data[4] = -sprite->data[2];
+ sprite->data[6] = 0xFFD8;
+ sprite->callback = sub_80DFE90;
+ sub_80DFE90(sprite);
+}
+
+void sub_80DFE90(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x = sprite->data[3] >> 8;
+ sprite->pos2.y = sprite->data[4] >> 8;
+ if (sprite->data[7] == 0)
+ {
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x = sprite->data[3] >> 8;
+ sprite->pos2.y = sprite->data[4] >> 8;
+ sprite->data[0]--;
+ }
+ sprite->pos2.y += Sin(sprite->data[5], sprite->data[6]);
+ sprite->data[5] = (sprite->data[5] + 3) & 0xFF;
+ if (sprite->data[5] > 0x7F)
+ {
+ sprite->data[5] = 0;
+ sprite->data[6] += 20;
+ sprite->data[7]++;
+ }
+ if (--sprite->data[0] == 0)
+ DestroyAnimSprite(sprite);
+} \ No newline at end of file
diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c
index 04859e39f..0feb27dac 100755
--- a/src/battle/anim/dragon.c
+++ b/src/battle/anim/dragon.c
@@ -3,7 +3,7 @@
#include "trig.h"
#include "battle_anim.h"
#include "sound.h"
-#include "unknown_task.h"
+#include "scanline_effect.h"
void sub_80DF81C(struct Sprite *sprite);
void sub_80DFBD8(struct Sprite *sprite);
@@ -19,9 +19,10 @@ extern u8 gBankAttacker;
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u16 gUnknown_03000730[];
-
+extern u8 gObjectBankIDs[];
// Outrage
+
void sub_80DF5A0(struct Sprite *sprite)
{
sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2);
@@ -44,6 +45,8 @@ void sub_80DF5A0(struct Sprite *sprite)
sprite->callback = sub_8078504;
}
+// part of Dragon Breath
+
void sub_80DF63C(struct Sprite *sprite)
{
sub_8078650(sprite);
@@ -69,6 +72,8 @@ void sub_80DF63C(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
}
+// Dragon Rage
+
void sub_80DF6F0(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
@@ -87,6 +92,8 @@ void sub_80DF6F0(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
}
+// Dragon Breath init
+
void sub_80DF760(struct Sprite *sprite)
{
if (GetBankSide(gAnimBankAttacker))
@@ -94,6 +101,8 @@ void sub_80DF760(struct Sprite *sprite)
sub_80DF63C(sprite);
}
+//next 2 tasks might be Dragon Dance orbs?
+
void sub_80DF78C(struct Sprite *sprite)
{
u16 r5;
@@ -152,25 +161,27 @@ void sub_80DF81C(struct Sprite *sprite)
}
}
+// Dragon Dance scanline eff
+
void sub_80DF924(u8 taskId)
{
- struct UnknownTaskStruct sp;
+ struct ScanlineEffectParams sp;
struct Task *task = &gTasks[taskId];
u16 i;
u8 r1;
if (GetBankIdentity_permutated(gAnimBankAttacker) == 1)
{
- sp.dest = &REG_BG1HOFS;
+ sp.dmaDest = &REG_BG1HOFS;
task->data[2] = gBattle_BG1_X;
}
else
{
- sp.dest = &REG_BG2HOFS;
+ sp.dmaDest = &REG_BG2HOFS;
task->data[2] = gBattle_BG2_X;
}
- sp.control = 0xA2600001;
- sp.unk8 = 1;
- sp.unk9 = 0;
+ sp.dmaControl = 0xA2600001;
+ sp.initState = 1;
+ sp.unused9 = 0;
r1 = sub_8077FC0(gAnimBankAttacker);
task->data[3] = r1 - 32;
task->data[4] = r1 + 32;
@@ -178,10 +189,10 @@ void sub_80DF924(u8 taskId)
task->data[3] = 0;
for(i = task->data[3];i <= task->data[4];i++)
{
- gUnknown_03004DE0[0][i] = task->data[2];
- gUnknown_03004DE0[1][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = task->data[2];
+ gScanlineEffectRegBuffers[1][i] = task->data[2];
}
- sub_80895F8(sp);
+ ScanlineEffect_SetParams(sp);
task->func = sub_80DF9F4;
}
@@ -214,7 +225,7 @@ void sub_80DF9F4(u8 taskId)
sub_80DFAB0(task);
break;
case 3:
- gUnknown_03004DC0.unk15 = 3;
+ gScanlineEffect.state = 3;
task->data[0]++;
break;
case 4:
@@ -229,12 +240,14 @@ void sub_80DFAB0(struct Task *task)
u16 i;
for (i = task->data[3]; i <= task->data[4]; i++)
{
- gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2];
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2];
r3 = (r3 + 8) & 0xFF;
}
task->data[5] = (task->data[5] + 9) & 0xFF;
}
+// Overheat
+
void sub_80DFB28(struct Sprite *sprite)
{
int r6 = (gBattleAnimArgs[2] * 3) / 5;
@@ -259,4 +272,5 @@ void sub_80DFBD8(struct Sprite *sprite)
sprite->pos2.y = sprite->data[5] / 10;
if (++sprite->data[0] > sprite->data[3])
DestroyAnimSprite(sprite);
-} \ No newline at end of file
+}
+