* Move Boss_9 data to C

* sRGB_080D8E20 hex -> dec

* First pass on CreateTrueArea53Boss

* Move CreateTrueArea53Boss into non-matching

* Rename remaining MoveBossPositionFuncs

* Move TrueArea53BossMove into non-match

* Match Task_EggmanKidnapsVanilla

* Match Task_TrueArea53BossMain

* Match sub_804D8E0

* Match Task_804D9DC

* Match Task_804DB34

* More Boss 9 progress

* Make upper bound in PseudoRandBetween() exclusive, since many calls suggest this being the original pattern

* Match sub_804E078

* Move sub_804E15C into non-matching

* Start sub_804E4CC

* Move sub_804E4CC into non-match

* Match sub_804E66C

* Match sub_804E74C

* Match sub_804E974

* Move sub_804F1EC into non-matching

* Match sub_804F47C

* Match sub_804F5BC

* More progress

* Move sub_804F850 into non-matching

* Match sub_804FD58

* Match sub_804FE24, sub_804FEFC and sub_804FF9C

* Move sub_8050030 and sub_8050104 into non-matching

* Temporarily move sub_8050104 and sub_80501D4 into non-matching

* Almost match sub_8050958

* Remove boss_9.s

* Remove old stubs

* Minor cleanup and fix crash in Zone 3's background

* Add missing pointer refs in CreateTrueArea53Boss

* Almost match sub_80505B8 (basically on-par with sub_80501D4

* Ollie matched sub_80501D4 and sub_80505B8

Co-authored-by: Oliver Bell <freshollie@gmail.com>

* Tilemap unknown_stars -> music_plant_moving_stars

* Add DEBUG macro

* Progress on CreateTrueArea53Boss

* Some fixes for CreateTrueArea53Boss

---------

Co-authored-by: Oliver Bell <freshollie@gmail.com>
This commit is contained in:
JaceCearandOliver Bell authored and GitHub committed 2024-06-19 12:37:24 +02:00
1 parent 43b4bd8fa7
commit fcbaf7b7c1
48 files changed
+6193 -8321

No files matched your search

+1
View File
@@ -138,6 +138,7 @@ endif
ifeq ($(DEBUG),1)
CC1FLAGS += -g3 -O0
CPPFLAGS += -D DEBUG=1
else
CC1FLAGS += -O2
endif
-8089
View File
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,837 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0xc8
ldr r2, _0804D2A8 @ =gStageFlags
ldrh r0, [r2]
movs r1, #0x20
orrs r0, r1
strh r0, [r2] @ gStageFlags |= EXTRA_STATE__DISABLE_PAUSE_MENU
ldr r4, _0804D2AC @ =gActiveBossTask
ldr r0, [r4]
cmp r0, #0
bne _0804CEF8
ldr r0, _0804D2B0 @ =Task_TrueArea53BossMain
movs r1, #0x94
lsls r1, r1, #4
movs r2, #0x80
lsls r2, r2, #7
ldr r3, _0804D2B4 @ =TaskDestructor_TrueArea53BossGfx
str r3, [sp]
movs r3, #0
bl TaskCreate
str r0, [r4] @ gActiveBossTask = TaskCreate(Task_TrueArea53BossMain, ...)
_0804CEF8:
ldr r0, [r4]
ldrh r4, [r0, #6]
movs r0, #0xc0
lsls r0, r0, #0x12
adds r0, r4, r0
str r0, [sp, #4] @ sp04 = boss
ldr r0, _0804D2B8 @ =IWRAM_START + 0x1C
adds r2, r4, r0 @ r2 = &boss->unk1C
ldr r1, _0804D2BC @ =IWRAM_START + 0x48
adds r6, r4, r1 @ r6 = &boss->unk48
ldr r5, _0804D2C0 @ =IWRAM_START + 0x98
adds r5, r4, r5 @ r5 = &boss->unk98
str r5, [sp, #8] @ sp08 = unk98 = &boss->unk98
ldr r7, _0804D2C4 @ =IWRAM_START + 0x558
adds r7, r7, r4
mov r8, r7 @ r8 = r7 = boss->unk558
ldr r0, _0804D2C8 @ =IWRAM_START + 0x594
adds r7, r4, r0 @ r7 = &boss->unk594
ldr r1, _0804D2CC @ =IWRAM_START + 0x654
adds r1, r4, r1
str r1, [sp, #0xc] @ sp0C = &boss->unk654
movs r3, #0
movs r0, #0xc
ldr r5, [sp, #4] @ r5 = boss
strb r0, [r5, #0xc]
strb r3, [r5, #0xd]
movs r1, #0
movs r0, #1
mov sb, r0 @ sb = 1
mov r0, sb
strh r0, [r5, #0x10]
movs r0, #0x50
strh r0, [r5, #0x12]
strb r1, [r5, #0xe]
strb r1, [r5, #0xf]
str r3, [r5, #0x14]
str r3, [r5, #0x18]
strh r3, [r5]
strh r3, [r5, #4]
mov r0, sb
strh r0, [r5, #2]
movs r0, #0x14
strh r0, [r5, #6]
movs r0, #0xbf
strh r0, [r5, #8]
strh r3, [r5, #0xa]
ldr r0, _0804D2D0 @ =sub_8050DC8
mov r5, r8 @ r5 = r8 = &boss->unk558
str r0, [r5]
movs r0, #0xc8
strh r0, [r5, #6]
strb r1, [r5, #4] @ r2 = &boss->unk1C
ldr r0, [r2, #0x18]
ldr r1, _0804D2D4 @ =0x00000FFF
ands r0, r1
str r0, [r2, #0x18] @ boss->unk18 &= 0xFFF;
ldr r1, _0804D2D8 @ =gUnknown_080D8DCC
ldr r0, [r1]
str r0, [r2] @ unk1C->unk0 = gUnknown_080D8DCC;
ldr r0, [r1, #4]
str r0, [r2, #0x1c] @ unk1C->unk1C = gUnknown_080D8DCC->ref;
ldrh r1, [r1, #8]
strh r1, [r2, #0x16] @ unk1C->unk16 = gUnknown_080D8DCC->unk8;
ldr r0, _0804D2DC @ =0x0004F300
str r0, [r2, #0x24]
movs r0, #0xe0
lsls r0, r0, #7
str r0, [r2, #0x28]
strh r3, [r2, #0x20]
strh r3, [r2, #0x22]
strh r1, [r2, #0x14]
str r3, [r2, #0x18]
movs r0, #0
mov ip, r0 @ ip = 0
ldr r3, _0804D2E0 @ =gUnknown_080D8D6C
ldr r2, _0804D2E4 @ =gUnknown_080D8C64
ldr r1, _0804D2E8 @ =gUnknown_080D8C4C
ldr r5, _0804D2EC @ =IWRAM_START + 0x20
adds r4, r4, r5
_0804CF96:
ldrh r0, [r1]
strh r0, [r4]
ldrh r0, [r2]
strh r0, [r4, #8]
adds r2, #2
adds r1, #2
adds r4, #2
movs r0, #1
add ip, r0
mov r5, ip
cmp r5, #3
bls _0804CF96
ldr r0, [r6, #0x30]
ldr r1, _0804D2D4 @ =0x00000FFF
ands r0, r1
str r0, [r6, #0x30]
ldr r0, [r3, #0xc]
str r0, [r6] @ unk48->unk0 = gUnknown_080D8D6C->unkC
ldr r0, [r3, #0x10]
str r0, [r6, #0x34]
ldrh r0, [r3, #0x14]
movs r1, #0
strh r0, [r6, #0x2e]
adds r2, r6, #0
adds r2, #0x4c
movs r0, #1
strb r0, [r2]
strh r1, [r6, #0x38]
str r1, [r6, #0x44]
str r1, [r6, #0x48]
ldrh r0, [r3, #8]
strh r0, [r6, #0x2c]
str r1, [r6, #0x30] @ unk48->unk30 = 0;
mov ip, r1 @ ip = r1 = 0
adds r0, r6, #4
mov sl, r0 @ sl = &unk48->unk4[0]
movs r1, #0xc
adds r1, r1, r6 @ r1 = unk48->unkC[0]
mov sb, r1 @ sb = r1
adds r5, r6, #0
adds r5, #0x14 @ r5 = &unk48->unk14[0]
adds r3, r6, #0
adds r3, #0x1c @ r3 = &unk48->unk1C[0]
adds r4, r6, #0
adds r4, #0x24 @ r4 = &unk48->unk24[0]
adds r2, r7, #4
str r2, [sp, #0x1c] @ sp1C = &unk594->unk4[0]
adds r6, r7, #0
adds r6, #0xe
str r6, [sp, #0x34] @ sp34 = &unk594->unkE[0]
adds r0, r7, #0
adds r0, #0x18
str r0, [sp, #0x3c] @ sp3C = &unk594->unk18[0]
adds r1, r7, #0
adds r1, #0x1a
str r1, [sp, #0x40] @ sp40 = &unk594->unk1A
adds r2, #0x3c
str r2, [sp, #0x60] @ sp60 = &unk594->unk40
adds r6, #0x36
str r6, [sp, #0xc0] @ spC0 = &unk594->unk44
ldr r0, [sp, #0xc] @ r0 = &boss->unk654
adds r0, #0xe
str r0, [sp, #0x38] @ sp38 = &unk654->unkE
ldr r1, [sp, #0xc]
adds r1, #0x1e
str r1, [sp, #0x44] @ sp44 = &unk654->unk1E
ldr r2, [sp, #0xc]
adds r2, #0x2e
str r2, [sp, #0x54] @ sp54 = &unk654->unk2E
ldr r6, [sp, #0xc]
adds r6, #0x30
str r6, [sp, #0x5c] @ sp5C = &unk654->unk30
ldr r0, [sp, #0xc]
adds r0, #0x70
str r0, [sp, #0x74] @ sp74 = &unk654->unk70 @ someX?
ldr r1, [sp, #0xc]
adds r1, #0x74
str r1, [sp, #0x78] @ sp78 = &unk654->unk74 @ someY?
ldr r6, _0804D2F0 @ =0x000007D4
ldr r2, [sp, #4]
adds r6, r2, r6
str r6, [sp, #0x7c] @ sp7C = &boss->spr7B4.variant
ldr r0, _0804D2F4 @ =0x000007D5
adds r0, r2, r0
str r0, [sp, #0x80] @ sp80 = &boss->spr7B4.prevVariant
ldr r1, _0804D2F8 @ =0x000007D6
adds r1, r2, r1
str r1, [sp, #0x88] @ sp88 = &boss->spr7B4.animSpeed
ldr r6, _0804D2FC @ =0x000007D9
adds r6, r2, r6
str r6, [sp, #0x8c] @ sp8C = &boss->spr7B4.palId
mov r0, r8 @ r0 = r8 = &boss->unk558
adds r0, #0xc @ r0 = &boss->unk558->s @ Sprite ?
str r0, [sp, #0x2c] @ sp2C = &boss->unk558->s
mov r1, r8
adds r1, #0x2c
str r1, [sp, #0x48] @ sp48 = &boss->unk558->s.variant
mov r2, r8
adds r2, #0x2d
str r2, [sp, #0x4c] @ sp4C = &boss->unk558->s.prevVariant
mov r6, r8
adds r6, #0x2e
str r6, [sp, #0x50] @ sp50 = &boss->unk558->s.animSpeed
adds r0, #0x25
str r0, [sp, #0x58] @ sp58 = &boss->unk558->s.palId
adds r1, r7, #0
adds r1, #0x90
str r1, [sp, #0x84] @ sp84 = &unk594->spr90
adds r2, r7, #0
adds r2, #0xb0
str r2, [sp, #0x90] @ sp90 = &unk594->spr90.variant
adds r6, r7, #0
adds r6, #0xb1
str r6, [sp, #0x94] @ sp90 = &unk594->spr90.prevVariant
adds r0, r7, #0
adds r0, #0xb2
str r0, [sp, #0x98] @ sp90 = &unk594->spr90.animSpeed
adds r1, #0x25
str r1, [sp, #0x9c] @ sp90 = &unk594->spr90.animId
ldr r2, [sp, #0xc]
adds r2, #0xf0
str r2, [sp, #0xa0] @ spA0 = &unk654->sprF0
movs r0, #0x88
lsls r0, r0, #1
ldr r6, [sp, #0xc] @ r6 = sp0C = &boss->unk654
adds r0, r6, r0
str r0, [sp, #0x20] @ sp20 = &unk654->sprF0.variant
ldr r1, _0804D300 @ =0x00000111
adds r1, r6, r1
str r1, [sp, #0x24] @ sp24 = &unk654->sprF0.prevVariant
movs r2, #0x89
lsls r2, r2, #1
adds r2, r6, r2
str r2, [sp, #0x28] @ sp28 = &unk654->sprF0.animSpeed
ldr r0, _0804D304 @ =0x00000115
adds r0, r6, r0
str r0, [sp, #0x30] @ sp30 = &unk654->sprF0.palId
movs r1, #0xa4
lsls r1, r1, #1
adds r1, r6, r1
str r1, [sp, #0x64] @ sp64 = &unk654->sprF0.palId
ldr r2, _0804D308 @ =0x00000149
adds r2, r6, r2
str r2, [sp, #0x68] @ sp68 = &unk654->sprF0.palId
movs r0, #0xa5
lsls r0, r0, #1
adds r0, r6, r0
str r0, [sp, #0x6c] @ sp6C = &unk654->sprF0.palId
ldr r1, _0804D30C @ =0x0000014D
adds r1, r6, r1
str r1, [sp, #0x70] @ sp70 = &unk654->sprF0.palId
_0804D0C4:
mov r2, ip @ r2 = ip = i = 0
lsls r1, r2, #1
mov r6, sl
adds r2, r6, r1
ldr r6, _0804D310 @ =gUnknown_080D8A1C
adds r0, r1, r6
ldrh r0, [r0]
strh r0, [r2] @ unk48->unk4[i] = gUnknown_080D8A1C[i]
mov r0, sb @ r0 = sb = unk48->unkC[0]
adds r2, r0, r1
ldr r6, _0804D314 @ =gUnknown_080D8A34
adds r0, r1, r6
ldrh r0, [r0]
strh r0, [r2] @ unk48->unkC[i] = gUnknown_080D8A34[i]
adds r2, r5, r1
ldr r6, _0804D318 @ =gUnknown_080D8A4C
adds r0, r1, r6
ldrh r0, [r0]
strh r0, [r2] @ unk48->unk14[i] = gUnknown_080D8A4C[i]
adds r2, r3, r1
ldr r6, _0804D31C @ =gUnknown_080D8A64
adds r0, r1, r6
ldrh r0, [r0]
strh r0, [r2] @ unk48->unk1C[i] = gUnknown_080D8A64[i]
adds r2, r4, r1
ldr r0, _0804D320 @ =gUnknown_080D8A7C
adds r1, r1, r0
ldrh r0, [r1]
strh r0, [r2] @ unk48->unk24[i] = gUnknown_080D8A7C[i]
movs r1, #1
add ip, r1
mov r2, ip
cmp r2, #3
bls _0804D0C4
ldr r5, _0804D324 @ =sub_804DFB0
str r5, [r7]
movs r6, #0
mov sb, r6
ldr r5, [sp, #0x1c]
movs r2, #0
ldr r4, [sp, #0x34]
ldr r3, [sp, #0x3c]
_0804D118:
mov r7, sb
adds r0, r5, r7
strb r2, [r0] @ unk594->unk4[i] = 0;
adds r0, r4, r7
strb r2, [r0] @ unk594->unkE[i] = 0;
lsls r0, r7, #2
strh r2, [r3] @ unk594->unk18[i][0] = 0;
ldr r1, [sp, #0x40]
adds r0, r1, r0
strh r2, [r0] @ unk594->unk18[i][1] = 0;
lsls r1, r7, #3
ldr r6, [sp, #0x60]
adds r0, r6, r1
str r2, [r0] @ unk594->unk40[i].x = 0
ldr r7, [sp, #0xc0]
adds r1, r7, r1
str r2, [r1] @ unk594->unk40[i].y = 0
adds r3, #4
movs r0, #1
add sb, r0
mov r1, sb
cmp r1, #9
bls _0804D118
ldr r2, _0804D328 @ =sub_804FF9C
ldr r5, [sp, #0xc]
str r2, [r5] @ boss->unk654 = sub_804FF9C
ldr r6, _0804D32C @ =sub_804F768
str r6, [r5, #4]
movs r0, #0x96
lsls r0, r0, #1
strh r0, [r5, #8]
adds r0, #0xd4
strh r0, [r5, #0xa]
movs r7, #0
mov sb, r7 @ sb = r7 = i = 0
ldr r5, [sp, #0x38] @ r5 = &unk654->unkE
movs r2, #0
ldr r4, [sp, #0x44] @ r4 = &unk654->unk1E
ldr r3, [sp, #0x54] @ r3 = &unk654->unk2E
_0804D166:
mov r1, sb
adds r0, r5, r1
strb r2, [r0]
adds r0, r4, r1
strb r2, [r0]
lsls r0, r1, #2
strh r2, [r3]
ldr r6, [sp, #0x5c] @ r6 = &unk654->unk30
adds r0, r6, r0
strh r2, [r0]
lsls r1, r1, #3
ldr r7, [sp, #0x74] @ r7 = &unk654->unk70[0].x
adds r0, r7, r1
str r2, [r0]
ldr r0, [sp, #0x78] @ r0 = &unk654->unk70[0].y
adds r1, r0, r1
str r2, [r1]
adds r3, #4
movs r1, #1
add sb, r1
mov r6, sb
cmp r6, #0xf
bls _0804D166
__0804D194:
ldr r7, _0804D330 @ =sub_804E66C
ldr r0, [sp, #8]
str r7, [r0] @ unk98->unk0 = sub_804E66C
movs r0, #0
movs r1, #0x96
lsls r1, r1, #1
ldr r2, [sp, #8] @ r2 = &boss->unk98
strh r1, [r2, #4] @ unk98->unk4 = 300
adds r1, #0xd4
strh r1, [r2, #6] @ unk98->unk6 = 512
str r0, [r2, #8] @ unk98->unk8 = 0
str r0, [r2, #0xc] @ unk98->unkC = 0
movs r0, #0x20
bl VramMalloc
str r0, [sp, #0x10] @ sp10 = vram
movs r5, #0
mov sb, r5 @ sb = r5 = 0
movs r4, #0
ldr r6, [sp, #8] @ r6 = unk98
adds r6, #0x8c
str r6, [sp, #0xa4] @ spA4 = unk98->unk8C
ldr r7, [sp, #8]
adds r7, #0x88
str r7, [sp, #0xa8] @ spA8 = unkA8 + 0x98
ldr r0, [sp, #8]
adds r0, #0x74
str r0, [sp, #0xac]
ldr r1, [sp, #8]
adds r1, #0x72
str r1, [sp, #0xb0]
ldr r2, [sp, #8] @ r2 = unk98
adds r2, #0x6c
str r2, [sp, #0xb4] @ spB4 = unkA8->unk5C
ldr r5, [sp, #8]
adds r5, #0x68 @ r5 = &unkA8->unk58
str r5, [sp, #0xb8] @ spB8 = &unkA8->unk58
ldr r6, [sp, #8]
adds r6, #0x51
mov sl, r6
ldr r7, [sp, #8] @ r7 = unk98
adds r7, #0x14
mov r8, r7 @ r8 = unk98->unk10[i].unk4
ldr r0, [sp, #8]
adds r0, #0x10
str r0, [sp, #0xbc] @ spBC = unkA8 = unk98->unk10[i];
_0804D1F0:
ldr r7, [sp, #0xbc]
adds r7, #0x20 @ r7 = s = &unkA8->spr20
mov r1, r8 @ r1 = r8 = &unk98->unk10.unk4
strb r4, [r1] @ unk98->unk10.unk4 = 0
strh r4, [r1, #6] @ unk98->unk10.unkA = 0
strh r4, [r1, #0xa] @ unk98->unk10.unkE = 0
strh r4, [r1, #0xc] @ unk98->unk10.unk10 = 0
str r4, [r1, #0x10] @ unk98->unk10.qUnk14 = 0
str r4, [r1, #0x14] @ unk98->unk10.qUnk18 = 0
strh r4, [r7, #0x16] @ s->x = 0
strh r4, [r7, #0x18] @ s->y = 0
movs r0, #0x10
bl VramMalloc
str r0, [r7, #4]
ldr r1, _0804D334 @ =gUnknown_080D8918
ldrh r0, [r1, #4]
strh r0, [r7, #0xa]
ldrb r1, [r1, #6]
adds r0, r7, #0
adds r0, #0x20
strb r1, [r0]
movs r0, #0xff
mov r2, sl
strb r0, [r2]
movs r0, #0x88
lsls r0, r0, #3
strh r0, [r7, #0x1a]
strh r4, [r7, #8]
strh r4, [r7, #0x14]
strh r4, [r7, #0x1c]
movs r0, #0x10
strb r0, [r2, #1]
movs r0, #6
strb r0, [r2, #4]
subs r0, #7
str r0, [r7, #0x28]
movs r0, #0x80
lsls r0, r0, #6
str r0, [r7, #0x10]
ldr r0, _0804D338 @ =sub_804DD9C
mov r5, r8 @ r5 = r8 = &unkA8->unk4
str r0, [r5, #0x54] @ unkA8->unk58
movs r6, #0
mov ip, r6 @ ip = r6 = 0
ldr r1, [sp, #0xb8] @ r1 = &unkA8->unk58
adds r1, #0x50 @ r1 = &unkA8->sprA0[0] + 0x8
ldr r7, [sp, #0xb8]
adds r7, #0x48
str r7, [sp, #0xc4] @ r7 = s = &unkA8->sprA0[0]
ldr r6, [sp, #0xa4] @ r6 = &unk98->unk8C
ldr r5, [sp, #0xa8] @ r5 = unkA8 + 0x98
ldr r3, [sp, #0xac]
ldr r2, [sp, #0xb0] @ r2 = unkA8->unk62
_0804D25C:
ldr r0, [sp, #0xb4] @ r0 = +0x104
add r0, ip
strb r4, [r0] @ r0 = (boss+0x104+i) = 0
strh r4, [r2] @ r2 = (boss+0x10A) = 0
strh r4, [r3] @ r3 = (boss+0x10C) = 0
str r4, [r5] @ r5 = (boss+0x120) = 0
str r4, [r6] @ r6 = (boss+0x124) = 0
strh r4, [r1, #0xe]
strh r4, [r1, #0x10]
ldr r0, [sp, #0x10] @ r0 = vram
ldr r7, [sp, #0xc4] @ r7 = (boss+0x148) = 0
str r0, [r7, #4]
ldr r0, _0804D33C @ =0x000002CA
strh r0, [r1, #2]
strb r4, [r1, #0x18]
movs r0, #1
rsbs r0, r0, #0
mov r7, sp
strb r0, [r7, #0x14] @ sp14 = -1
movs r0, #0xff
strb r0, [r1, #0x19]
movs r0, #0x80
lsls r0, r0, #3
strh r0, [r1, #0x12]
strh r4, [r1]
strh r4, [r1, #0xc]
strh r4, [r1, #0x14]
movs r7, #0x10
strb r7, [r1, #0x1a]
movs r0, #6
strb r0, [r1, #0x1d]
subs r0, #7
str r0, [r1, #0x20]
movs r7, #0x80
lsls r7, r7, #6
str r7, [r1, #8]
b _0804D340
.align 2, 0
_0804D2A8: .4byte gStageFlags
_0804D2AC: .4byte gActiveBossTask
_0804D2B0: .4byte Task_TrueArea53BossMain
_0804D2B4: .4byte TaskDestructor_TrueArea53BossGfx
_0804D2B8: .4byte IWRAM_START + 0x1C
_0804D2BC: .4byte IWRAM_START + 0x48
_0804D2C0: .4byte IWRAM_START + 0x98
_0804D2C4: .4byte IWRAM_START + 0x558
_0804D2C8: .4byte IWRAM_START + 0x594
_0804D2CC: .4byte IWRAM_START + 0x654
_0804D2D0: .4byte sub_8050DC8
_0804D2D4: .4byte 0x00000FFF
_0804D2D8: .4byte gUnknown_080D8DCC
_0804D2DC: .4byte 0x0004F300
_0804D2E0: .4byte gUnknown_080D8D6C
_0804D2E4: .4byte gUnknown_080D8C64
_0804D2E8: .4byte gUnknown_080D8C4C
_0804D2EC: .4byte IWRAM_START + 0x20
_0804D2F0: .4byte 0x000007D4
_0804D2F4: .4byte 0x000007D5
_0804D2F8: .4byte 0x000007D6
_0804D2FC: .4byte 0x000007D9
_0804D300: .4byte 0x00000111
_0804D304: .4byte 0x00000115
_0804D308: .4byte 0x00000149
_0804D30C: .4byte 0x0000014D
_0804D310: .4byte gUnknown_080D8A1C
_0804D314: .4byte gUnknown_080D8A34
_0804D318: .4byte gUnknown_080D8A4C
_0804D31C: .4byte gUnknown_080D8A64
_0804D320: .4byte gUnknown_080D8A7C
_0804D324: .4byte sub_804DFB0
_0804D328: .4byte sub_804FF9C
_0804D32C: .4byte sub_804F768
_0804D330: .4byte sub_804E66C
_0804D334: .4byte gUnknown_080D8918
_0804D338: .4byte sub_804DD9C
_0804D33C: .4byte 0x000002CA
_0804D340:
adds r1, #0x30
ldr r0, [sp, #0xc4]
adds r0, #0x30
str r0, [sp, #0xc4]
adds r6, #8
adds r5, #8
adds r3, #4
adds r2, #4
movs r7, #1
add ip, r7
mov r0, ip
cmp r0, #4
bhi _0804D35C
b _0804D25C
_0804D35C:
ldr r1, [sp, #0xa4]
movs r2, #0xc8
lsls r2, r2, #1
adds r1, r1, r2
str r1, [sp, #0xa4]
ldr r5, [sp, #0xa8]
adds r5, r5, r2
str r5, [sp, #0xa8]
ldr r6, [sp, #0xac]
adds r6, r6, r2
str r6, [sp, #0xac]
ldr r7, [sp, #0xb0]
adds r7, r7, r2
str r7, [sp, #0xb0]
ldr r0, [sp, #0xb4]
adds r0, r0, r2
str r0, [sp, #0xb4]
ldr r1, [sp, #0xb8]
adds r1, r1, r2
str r1, [sp, #0xb8]
add sl, r2
add r8, r2
ldr r5, [sp, #0xbc]
adds r5, r5, r2
str r5, [sp, #0xbc]
movs r6, #1
add sb, r6
mov r7, sb
cmp r7, #2
bhi _0804D39A
b _0804D1F0
_0804D39A:
ldr r0, [sp, #4] @ r0 = sp04 = boss
ldr r1, _0804D57C @ =0x000007B4
adds r7, r0, r1 @ r7 = s = boss->spr7B4
movs r6, #0
movs r5, #0
strh r5, [r7, #0x16]
strh r5, [r7, #0x18]
ldr r4, _0804D580 @ =gUnknown_080D88F0
ldr r0, [r4, #0x20]
bl VramMalloc
str r0, [r7, #4]
ldrh r0, [r4, #0x24]
strh r0, [r7, #0xa]
adds r4, #0x26
ldrb r0, [r4]
ldr r2, [sp, #0x7c] @ sp7C = &boss->spr7B4.variant
strb r0, [r2]
ldr r1, [sp, #0x80]
ldrb r0, [r1]
mov r2, sp
ldrb r2, [r2, #0x14]
orrs r0, r2
strb r0, [r1]
movs r0, #0x98
lsls r0, r0, #3
strh r0, [r7, #0x1a]
strh r5, [r7, #8]
strh r5, [r7, #0x14]
strh r5, [r7, #0x1c]
movs r0, #0x10
ldr r5, [sp, #0x88]
strb r0, [r5] @ boss->spr7B4.animSpeed = SPRITE_ANIM_SPEED(1.0)
ldr r1, [sp, #0x8c]
strb r6, [r1]
movs r2, #1
rsbs r2, r2, #0
str r2, [r7, #0x28]
movs r5, #0x80
lsls r5, r5, #6
str r5, [r7, #0x10]
movs r6, #0
mov sb, r6
movs r7, #0
mov r8, r7
ldr r0, [sp, #4]
movs r1, #0xff
lsls r1, r1, #3
adds r5, r0, r1
movs r2, #0xfe
lsls r2, r2, #3
adds r7, r0, r2
_0804D402:
strh r6, [r5, #0xe]
strh r6, [r5, #0x10]
ldr r0, _0804D580 @ =gUnknown_080D88F0
mov r1, sb
lsls r4, r1, #3
adds r4, r4, r0
ldr r0, [r4]
bl VramMalloc
str r0, [r7, #4]
ldrh r0, [r4, #4]
strh r0, [r5, #2]
ldrb r0, [r4, #6]
strb r0, [r5, #0x18]
movs r0, #1
rsbs r0, r0, #0
mov r2, sp
strb r0, [r2, #0x18]
movs r0, #0xff
strb r0, [r5, #0x19]
mov r0, sb
adds r0, #0x14
lsls r0, r0, #6
strh r0, [r5, #0x12]
strh r6, [r5]
strh r6, [r5, #0xc]
strh r6, [r5, #0x14]
movs r1, #0x10
strb r1, [r5, #0x1a]
mov r2, r8
strb r2, [r5, #0x1d]
movs r0, #1
rsbs r0, r0, #0
mov sl, r0
str r0, [r5, #0x20]
movs r0, #0x84
lsls r0, r0, #6
str r0, [r5, #8]
adds r5, #0x44
adds r7, #0x44
movs r1, #1
add sb, r1
mov r2, sb
cmp r2, #3
bls _0804D402
movs r4, #0
ldr r7, [sp, #0x2c]
movs r5, #0
strh r4, [r7, #0x16]
strh r4, [r7, #0x18]
movs r0, #0x10
bl VramMalloc
str r0, [r7, #4]
ldr r0, _0804D584 @ =0x000002CE
strh r0, [r7, #0xa]
ldr r6, [sp, #0x48]
strb r5, [r6]
ldr r1, [sp, #0x4c]
ldrb r0, [r1]
mov r2, sp
ldrb r2, [r2, #0x18]
orrs r0, r2
strb r0, [r1]
movs r0, #0xa8
lsls r0, r0, #3
strh r0, [r7, #0x1a]
strh r4, [r7, #8]
strh r4, [r7, #0x14]
strh r4, [r7, #0x1c]
movs r0, #0x10
ldr r6, [sp, #0x50]
strb r0, [r6]
ldr r1, [sp, #0x58]
strb r5, [r1]
mov r2, sl
str r2, [r7, #0x28]
movs r0, #0x80
lsls r0, r0, #6
str r0, [r7, #0x10]
ldr r7, [sp, #0x84] @ r7 = sp84 = &unk594->spr90
strh r4, [r7, #0x16]
strh r4, [r7, #0x18]
movs r0, #4
bl VramMalloc
str r0, [r7, #4]
ldr r0, _0804D588 @ =0x00000467
strh r0, [r7, #0xa]
movs r0, #8
ldr r6, [sp, #0x90]
strb r0, [r6]
ldr r1, [sp, #0x94]
ldrb r0, [r1]
mov r2, sp
ldrb r2, [r2, #0x18]
orrs r0, r2
strb r0, [r1]
movs r0, #0xc0
lsls r0, r0, #1
strh r0, [r7, #0x1a]
strh r4, [r7, #8]
strh r4, [r7, #0x14]
strh r4, [r7, #0x1c]
movs r0, #0x10
ldr r6, [sp, #0x98]
strb r0, [r6]
ldr r1, [sp, #0x9c]
strb r5, [r1]
mov r2, sl
str r2, [r7, #0x28]
movs r6, #0x80
lsls r6, r6, #5
str r6, [r7, #0x10]
ldr r7, [sp, #0xa0] @ r7 = spA0 = &unk654->sprF0
strh r4, [r7, #0x16] @ Yellow Projectile
strh r4, [r7, #0x18]
movs r0, #9
bl VramMalloc
str r0, [r7, #4]
ldr r0, _0804D58C @ =0x000002CD
strh r0, [r7, #0xa]
ldr r0, [sp, #0x20]
strb r5, [r0]
ldr r1, [sp, #0x24]
ldrb r0, [r1]
mov r2, sp
ldrb r2, [r2, #0x18]
orrs r0, r2
strb r0, [r1]
movs r0, #0xe0
lsls r0, r0, #1
mov r8, r0
mov r1, r8
strh r1, [r7, #0x1a]
strh r4, [r7, #8]
strh r4, [r7, #0x14]
strh r4, [r7, #0x1c]
movs r0, #0x10
ldr r2, [sp, #0x28]
strb r0, [r2]
ldr r1, [sp, #0x30]
strb r5, [r1]
mov r2, sl
str r2, [r7, #0x28]
str r6, [r7, #0x10]
ldr r0, [sp, #0xc] @ r0 = boss->unk654
movs r1, #0x94
lsls r1, r1, #1
adds r7, r0, r1
strh r4, [r7, #0x16]
strh r4, [r7, #0x18]
movs r0, #4
bl VramMalloc
str r0, [r7, #4]
ldr r0, _0804D590 @ =0x000002CF
strh r0, [r7, #0xa]
ldr r2, [sp, #0x64]
strb r5, [r2]
ldr r1, [sp, #0x68]
ldrb r0, [r1]
mov r2, sp
ldrb r2, [r2, #0x18]
orrs r0, r2
strb r0, [r1]
mov r0, r8
strh r0, [r7, #0x1a]
strh r4, [r7, #8]
strh r4, [r7, #0x14]
strh r4, [r7, #0x1c]
movs r2, #0x10
ldr r1, [sp, #0x6c]
strb r2, [r1]
ldr r0, [sp, #0x70]
strb r5, [r0]
mov r1, sl
str r1, [r7, #0x28]
str r6, [r7, #0x10]
add sp, #0xc8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804D57C: .4byte 0x000007B4
_0804D580: .4byte gUnknown_080D88F0
_0804D584: .4byte 0x000002CE
_0804D588: .4byte 0x00000467
_0804D58C: .4byte 0x000002CD
_0804D590: .4byte 0x000002CF
.syntax divided
@@ -0,0 +1,146 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0xc
adds r7, r0, #0 @ r7 = dX
adds r6, r1, #0 @ r6 = dY
ldr r0, _0804D694 @ =gActiveBossTask
ldr r0, [r0]
cmp r0, #0
beq _0804D684
ldrh r2, [r0, #6]
movs r3, #0xc0
lsls r3, r3, #0x12
adds r3, r2, r3 @ r3 = boss
ldr r0, _0804D698 @ =IWRAM_START + 0x1C
adds r1, r2, r0 @ r1 = &boss->unk1C
adds r0, #0x7c
adds r0, r0, r2
mov sb, r0 @ sb = r0 = &boss->unk98
ldr r0, [r1, #0x24]
adds r0, r0, r7
str r0, [r1, #0x24]
ldr r0, [r1, #0x28]
adds r0, r0, r6
str r0, [r1, #0x28]
ldr r0, [r3, #0x14]
adds r0, r0, r7
str r0, [r3, #0x14]
ldr r0, [r3, #0x18]
adds r0, r0, r6
str r0, [r3, #0x18] @ boss->pos14.y += dY;
movs r4, #0
ldr r0, _0804D69C @ =IWRAM_START + 0x5D4
adds r0, r2, r0
str r0, [sp, #4] @ sp04 = &boss->unk594.unk40[0].x
ldr r0, _0804D6A0 @ =IWRAM_START + 0x5D8
adds r0, r0, r2
mov sl, r0 @ sl = &boss->unk594.unk40[0].y
ldr r0, _0804D6A4 @ =IWRAM_START + 0x6C4
adds r0, r2, r0
str r0, [sp, #8] @ sp08 = &boss->unk654.unk70[0].x
ldr r0, _0804D6A8 @ =IWRAM_START + 0x6C8
adds r0, r2, r0
str r0, [sp] @ sp00 = &boss->unk654.unk70[0].y
asrs r0, r7, #8
mov r8, r0 @ r8 = I(dX)
asrs r0, r6, #8
mov ip, r0 @ ip = I(dY)
_0804D5F8:
lsls r1, r4, #1
adds r1, r1, r4
lsls r1, r1, #3
adds r1, r1, r4
lsls r1, r1, #4 @ r1 = i*0x190
adds r1, #0x10
add r1, sb @ r1 = &boss->unk98.unk10[i]
ldr r0, [r1, #0x14]
adds r0, r0, r7
str r0, [r1, #0x14]
ldr r0, [r1, #0x18]
adds r0, r0, r6
str r0, [r1, #0x18]
movs r5, #0
lsls r2, r4, #3 @ r2 = i * 8
adds r0, r1, #0
adds r0, #0x78
adds r3, r0, r2
adds r1, #0x7c
adds r1, r1, r2
_0804D620:
ldr r0, [r3]
add r0, r8
str r0, [r3]
ldr r0, [r1]
add r0, ip
str r0, [r1]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #4
bls _0804D620
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #2
bls _0804D5F8
movs r4, #0
ldr r5, [sp, #4] @ r5 = sp04 = &boss->unk594.unk40[0].x
mov r3, sl
_0804D646:
lsls r1, r4, #3
adds r2, r5, r1
ldr r0, [r2]
adds r0, r0, r7
str r0, [r2]
adds r1, r3, r1
ldr r0, [r1]
adds r0, r0, r6
str r0, [r1]
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #9
bls _0804D646
movs r4, #0
ldr r5, [sp, #8] @ r5 = &boss->unk654.unk70[0].x
ldr r3, [sp]
_0804D668:
lsls r1, r4, #3
adds r2, r5, r1
ldr r0, [r2]
adds r0, r0, r7
str r0, [r2]
adds r1, r3, r1
ldr r0, [r1]
adds r0, r0, r6
str r0, [r1]
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #0xf
bls _0804D668
_0804D684:
add sp, #0xc
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804D694: .4byte gActiveBossTask
_0804D698: .4byte IWRAM_START + 0x1C
_0804D69C: .4byte IWRAM_START + 0x5D4
_0804D6A0: .4byte IWRAM_START + 0x5D8
_0804D6A4: .4byte IWRAM_START + 0x6C4
_0804D6A8: .4byte IWRAM_START + 0x6C8
.syntax divided
@@ -0,0 +1,424 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x24
adds r7, r0, #0 @ r7 = unk48
ldr r0, _0804E1B8 @ =gCurTask
ldr r0, [r0]
ldrh r0, [r0, #6]
ldr r1, _0804E1BC @ =IWRAM_START + 0x558
adds r1, r0, r1
str r1, [sp, #0x10] @ sp10 = unk558 = &boss->unk558
ldr r2, _0804E1C0 @ =IWRAM_START + 0x1C
adds r4, r0, r2 @ r4 = unk1C
adds r0, r7, #0
bl sub_8050030
lsls r0, r0, #0x18
cmp r0, #0
beq _0804E1DC
ldr r0, [r7, #0x30]
ldr r1, _0804E1C4 @ =0x00000FFF
ands r0, r1
str r0, [r7, #0x30]
ldr r1, _0804E1C8 @ =gUnknown_080D8D6C
ldr r0, [r1]
str r0, [r7]
ldr r0, [r1, #4]
str r0, [r7, #0x34]
ldrh r0, [r1, #8]
movs r2, #0
strh r0, [r7, #0x2e]
ldr r3, _0804E1CC @ =gDispCnt
ldrh r1, [r3]
ldr r0, _0804E1D0 @ =0x0000DFFF
ands r0, r1
strh r0, [r3]
ldr r0, _0804E1D4 @ =gWinRegs
strh r2, [r0, #8]
strh r2, [r0, #0xa]
ldr r0, _0804E1D8 @ =gBldRegs
strh r2, [r0]
strh r2, [r0, #2]
strh r2, [r0, #4]
b sub_804E15C__return
.align 2, 0
_0804E1B8: .4byte gCurTask
_0804E1BC: .4byte IWRAM_START + 0x558
_0804E1C0: .4byte IWRAM_START + 0x1C
_0804E1C4: .4byte 0x00000FFF
_0804E1C8: .4byte gUnknown_080D8D6C
_0804E1CC: .4byte gDispCnt
_0804E1D0: .4byte 0x0000DFFF
_0804E1D4: .4byte gWinRegs
_0804E1D8: .4byte gBldRegs
_0804E1DC:
ldr r0, [r7, #0x30]
lsrs r0, r0, #0xc
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #0x14] @ sp14 = (unk48->unk30 >> 12);
cmp r0, #2
bhi _0804E1EC
b sub_804E15C__return
_0804E1EC:
movs r3, #0x20
ldrsh r0, [r4, r3] @ r4 = unk1C
lsls r0, r0, #8 @ r0 = Q(unk1C->unk20)
ldr r1, [r4, #0x24]
adds r1, r1, r0
mov sb, r1 @ sb = sb
movs r6, #0x22
ldrsh r0, [r4, r6]
lsls r0, r0, #8 @ r0 = Q(unk1C->unk22)
ldr r1, [r4, #0x28]
adds r1, r1, r0
mov r8, r1 @ r8 = r8
ldr r0, [r7, #0x44]
asrs r0, r0, #8
ldrh r1, [r7, #0x3a]
adds r5, r0, r1 @ r5
ldr r2, _0804E3F8 @ =0x000003FF
adds r0, r2, #0
ands r5, r0
ldr r3, _0804E3FC @ =gSineTable
movs r2, #0x80
lsls r2, r2, #1
adds r0, r5, r2
lsls r0, r0, #1
adds r0, r0, r3
movs r4, #0
ldrsh r0, [r0, r4] @ r0 = COS(r5)
ldr r4, _0804E400 @ =gUnknown_080D89A5
ldrb r1, [r4]
muls r0, r1, r0
asrs r0, r0, #6 @ r0 = (COS(r5) * gUnknown_080D89A5) >> 6
add sb, r0
lsls r0, r5, #1
adds r0, r0, r3
movs r6, #0
ldrsh r0, [r0, r6]
muls r0, r1, r0
asrs r0, r0, #6
add r8, r0
adds r5, #0x8c
ldr r0, _0804E404 @ =0xFFFFFF00
adds r1, r5, r0
ldr r0, _0804E3F8 @ =0x000003FF
ands r1, r0
adds r2, r1, r2
lsls r2, r2, #1
adds r2, r2, r3
movs r6, #0
ldrsh r0, [r2, r6]
asrs r0, r0, #2
add sb, r0
lsls r1, r1, #1
adds r1, r1, r3
movs r2, #0
ldrsh r0, [r1, r2]
asrs r0, r0, #2
add r8, r0
movs r0, #0
mov sl, r4 @ sl = r4 = gUnknown_080D89A5
adds r3, r7, #0
adds r3, #0x3a
str r3, [sp, #0x1c] @ sp1C = unk48->unk3A
adds r4, r7, #0
adds r4, #0x42
str r4, [sp, #0x20] @ sp20 = unk48->unk42
mov r6, sp
adds r6, #0xc
str r6, [sp, #0x18]
ldr r1, _0804E3FC @ =gSineTable
mov ip, r1
_0804E278:
adds r3, r0, #1
lsls r0, r3, #1 @ r0 = (i + 1) * 2
ldr r2, [sp, #0x1c]
adds r0, r2, r0
ldrh r0, [r0] @ r0 = unk48->unk3A[i + 1]
adds r5, r5, r0 @ r5 += unk48->unk3A[i + 1]
ldr r4, _0804E3F8 @ =0x000003FF
ands r5, r4
movs r6, #0x80
lsls r6, r6, #1
adds r0, r5, r6
lsls r6, r0, #1
mov r1, ip @ r1 = ip = gSineTable
adds r0, r6, r1
movs r2, #0
ldrsh r1, [r0, r2] @ r1 = COS(r5)
mov r4, sl @ r4 = sl = gUnknown_080D89A5
adds r0, r3, r4
ldrb r2, [r0]
adds r0, r1, #0
muls r0, r2, r0
asrs r0, r0, #6
add sb, r0
lsls r4, r5, #1
mov r1, ip
adds r0, r4, r1
movs r1, #0
ldrsh r0, [r0, r1]
muls r0, r2, r0
asrs r0, r0, #6
add r8, r0
lsls r3, r3, #0x18
lsrs r0, r3, #0x18
cmp r0, #2
bls _0804E278
ldr r2, _0804E3FC @ =gSineTable
adds r0, r6, r2 @ r0 = gSineTable +
movs r3, #0
ldrsh r0, [r0, r3] @ r0 = COS(r5)
mov r6, sl @ r6 = sl = gUnknown_080D89A5
ldrb r1, [r6, #4]
muls r0, r1, r0
asrs r0, r0, #6
add sb, r0
adds r0, r4, r2
movs r2, #0
ldrsh r0, [r0, r2]
muls r0, r1, r0
asrs r0, r0, #6
add r8, r0
ldr r3, [sp, #0x20]
ldrh r0, [r3]
adds r5, r5, r0
ldr r4, _0804E3F8 @ =0x000003FF
ands r5, r4
ldr r6, [sp, #0x14]
cmp r6, #5
bhi _0804E2EE
b _0804E43C
_0804E2EE:
ldr r0, _0804E408 @ =gMPlayTable
ldr r1, [r0, #0x18]
ldr r0, _0804E40C @ =gSongTable
ldr r2, _0804E410 @ =0x00000868
adds r0, r0, r2
ldr r1, [r1]
ldr r0, [r0]
cmp r1, r0
beq _0804E30A
cmp r6, #6
bne _0804E30A
ldr r0, _0804E414 @ =0x0000010D
bl m4aSongNumStart
_0804E30A:
add r0, sp, #8
ldr r1, [sp, #0x18]
bl SuperSonicGetPos
ldrh r0, [r7, #0x38] @ r0 = unk48->unk38
adds r6, r5, r0
ldr r3, _0804E3F8 @ =0x000003FF
adds r0, r3, #0
ands r6, r0
ldr r0, [sp, #0xc]
mov r4, r8 @ r4 = r8 = r8
subs r0, r0, r4
lsls r0, r0, #8 @
asrs r0, r0, #0x10
ldr r1, [sp, #8]
mov r2, sb
subs r1, r1, r2
lsls r1, r1, #8
asrs r1, r1, #0x10
bl sub_8004418
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
adds r0, r5, #0
adds r0, #0x10
cmp r6, r0
bge _0804E350
subs r0, #0x20
cmp r6, r0
ble _0804E350
bl sub_802BB54
ldr r0, _0804E418 @ =sub_804F1EC
ldr r3, [sp, #0x10]
str r0, [r3]
_0804E350:
ldr r2, _0804E41C @ =gDispCnt
ldrh r0, [r2]
movs r4, #0x80
lsls r4, r4, #6
adds r1, r4, #0
orrs r0, r1
strh r0, [r2]
ldr r1, _0804E420 @ =gWinRegs
movs r0, #0xa0
strh r0, [r1]
movs r0, #0xf0
strh r0, [r1, #4]
movs r0, #0x3f
strh r0, [r1, #8]
movs r0, #0x15
strh r0, [r1, #0xa]
ldr r1, _0804E424 @ =gBldRegs
ldr r0, _0804E428 @ =0x00003FBF
strh r0, [r1]
movs r5, #8
strh r5, [r1, #2]
strh r5, [r1, #4]
ldr r2, _0804E42C @ =gPseudoRandom
ldr r1, [r2]
ldr r0, _0804E430 @ =0x00196225
muls r0, r1, r0
ldr r1, _0804E434 @ =0x3C6EF35F
adds r0, r0, r1
str r0, [r2]
movs r1, #8
bl Mod
lsls r0, r0, #0x18
asrs r4, r0, #0x18
cmp r4, #0
bge _0804E39A
rsbs r4, r4, #0
_0804E39A:
ldr r3, _0804E3FC @ =gSineTable
movs r2, #0x80
lsls r2, r2, #1
adds r0, r6, r2
lsls r0, r0, #1
adds r0, r0, r3
movs r2, #0
ldrsh r1, [r0, r2] @ r1 = COS(r6)
ldr r0, _0804E400 @ =gUnknown_080D89A5
ldrb r2, [r0, #5]
adds r0, r1, #0
muls r0, r2, r0
asrs r0, r0, #6
add sb, r0
lsls r0, r6, #1
adds r0, r0, r3
movs r3, #0
ldrsh r0, [r0, r3]
muls r0, r2, r0
asrs r0, r0, #6
add r8, r0
lsls r0, r4, #0x18
asrs r0, r0, #0x18
movs r1, #0x1a
subs r1, r1, r0
lsls r1, r1, #0x10
lsrs r1, r1, #0x10
mov r4, sb
asrs r3, r4, #8
ldr r2, _0804E438 @ =gCamera
ldr r0, [r2]
subs r3, r3, r0
lsls r3, r3, #0x10
asrs r3, r3, #0x10
mov r4, r8
asrs r0, r4, #8
ldr r2, [r2, #4]
subs r0, r0, r2
lsls r0, r0, #0x10
asrs r0, r0, #0x10
str r0, [sp]
str r5, [sp, #4]
adds r0, r6, #0
movs r2, #0x10
bl sub_802E784
b sub_804E15C__return
.align 2, 0
_0804E3F8: .4byte 0x000003FF
_0804E3FC: .4byte gSineTable
_0804E400: .4byte gUnknown_080D89A5
_0804E404: .4byte 0xFFFFFF00
_0804E408: .4byte gMPlayTable
_0804E40C: .4byte gSongTable
_0804E410: .4byte 0x00000868
_0804E414: .4byte 0x0000010D
_0804E418: .4byte sub_804F1EC
_0804E41C: .4byte gDispCnt
_0804E420: .4byte gWinRegs
_0804E424: .4byte gBldRegs
_0804E428: .4byte 0x00003FBF
_0804E42C: .4byte gPseudoRandom
_0804E430: .4byte 0x00196225
_0804E434: .4byte 0x3C6EF35F
_0804E438: .4byte gCamera
_0804E43C:
movs r0, #8
add r1, sp, #8
ldr r2, [sp, #0x18]
bl sub_802C704
ldr r0, [sp, #0xc]
mov r6, r8
subs r0, r0, r6
lsls r0, r0, #8
asrs r0, r0, #0x10
ldr r1, [sp, #8]
mov r2, sb
subs r1, r1, r2
lsls r1, r1, #8
asrs r1, r1, #0x10
bl sub_8004418
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
ldrh r0, [r7, #0x38]
adds r0, r5, r0
ldr r3, _0804E490 @ =0x000003FF
ands r0, r3
adds r1, r6, #0
movs r2, #0xa
bl sub_808558C
lsls r0, r0, #0x10
cmp r0, #0
bge _0804E498
ldrh r1, [r7, #0x38]
adds r2, r1, #0
movs r0, #0x80
lsls r0, r0, #2
cmp r2, r0
bls _0804E494 @ unk48->unk38 > Q(2)
movs r0, #0xe0
lsls r0, r0, #2
cmp r2, r0
bls _0804E4AA @ unk48->unk38 > Q(3.5)
subs r0, r1, #4
b _0804E4A8
.align 2, 0
_0804E490: .4byte 0x000003FF
_0804E494:
subs r0, r1, #4
b _0804E4A8
_0804E498:
ldrh r1, [r7, #0x38]
adds r2, r1, #0
ldr r0, _0804E4C4 @ =0x000001FF
cmp r2, r0
bhi _0804E4A6
cmp r2, #0x7f
bhi _0804E4AA
_0804E4A6:
adds r0, r1, #4
_0804E4A8:
strh r0, [r7, #0x38]
_0804E4AA:
ldrh r1, [r7, #0x38]
ldr r0, _0804E4C8 @ =0x000003FF
ands r0, r1
strh r0, [r7, #0x38]
sub_804E15C__return:
add sp, #0x24
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804E4C4: .4byte 0x000001FF
_0804E4C8: .4byte 0x000003FF
.syntax divided
@@ -0,0 +1,209 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r4, r0, #0
bl sub_8050030
ldr r0, [r4, #0x30]
ldr r6, _0804E504 @ =0x00000FFF
adds r1, r0, #0
ands r1, r6
adds r3, r1, #0
adds r5, r3, #0 @ r5 = r3 = unk48->unk30 & 0xFFF
lsls r0, r0, #4
lsrs r0, r0, #0x10
adds r2, r0, #0
cmp r0, #4
bne _0804E50C
str r1, [r4, #0x30]
ldr r1, _0804E508 @ =gUnknown_080D8D6C
ldr r0, [r1]
str r0, [r4]
ldr r0, [r1, #4]
str r0, [r4, #0x34]
ldrh r0, [r1, #8]
strh r0, [r4, #0x2e]
b sub_804E4CC__return
.align 2, 0
_0804E504: .4byte 0x00000FFF
_0804E508: .4byte gUnknown_080D8D6C
_0804E50C:
cmp r0, #3
bne _0804E5B0
ldr r2, _0804E598 @ =_0804E50C
ldrh r1, [r2]
ldr r0, _0804E59C @ =0x0000FDFF
ands r0, r1
strh r0, [r2]
adds r6, r3, #0 @ r6 = r3 = r5
movs r5, #0
adds r4, #0x4c
mov r8, r4
ldr r0, _0804E5A0 @ =sRGB_080D8E20
mov ip, r0
movs r7, #0x1f @ r7 = 0x1F
movs r1, #0x92
add r1, ip
mov sl, r1 @ sl = r1 = sRGB_080D8E20[i][]
ldr r2, _0804E5A4 @ =gObjPalette
mov sb, r2
_0804E532:
lsls r4, r5, #1
adds r1, r4, r5 @ r1 = i * 3
mov r0, ip
adds r0, #0x90
adds r0, r1, r0
ldrb r3, [r0] @ r3 = sRGB_080D8E20[i]
muls r3, r6, r3
asrs r3, r3, #0xc
ands r3, r7
mov r0, ip
adds r0, #0x91
adds r0, r1, r0
ldrb r2, [r0]
muls r2, r6, r2
asrs r2, r2, #0xc
ands r2, r7
add r1, sl
ldrb r0, [r1]
muls r0, r6, r0
asrs r0, r0, #0xc
ands r0, r7
adds r1, r5, #0
adds r1, #0x80
lsls r1, r1, #1
add r1, sb
lsls r0, r0, #0xa
lsls r2, r2, #5
orrs r0, r2
orrs r0, r3
strh r0, [r1]
ldr r3, _0804E5A8 @ =gBgPalette
adds r4, r4, r3
strh r0, [r4]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0xf
bls _0804E532
ldr r1, _0804E5AC @ =gFlags
ldr r0, [r1]
movs r1, #2
orrs r0, r1
movs r1, #1
orrs r0, r1
ldr r2, _0804E5AC @ =gFlags
str r0, [r2]
movs r0, #0
mov r3, r8
strb r0, [r3]
b sub_804E4CC__return
.align 2, 0
_0804E598: .4byte gDispCnt
_0804E59C: .4byte 0x0000FDFF
_0804E5A0: .4byte sRGB_080D8E20
_0804E5A4: .4byte gObjPalette
_0804E5A8: .4byte gBgPalette
_0804E5AC: .4byte gFlags
_0804E5B0:
cmp r2, #2
bne sub_804E4CC__return
movs r0, #0xe0
lsls r0, r0, #4
cmp r5, r0
bls sub_804E4CC__return
__0804E5BC:
ldr r2, _0804E658 @ =gDispCnt
ldrh r0, [r2]
movs r3, #0x80
lsls r3, r3, #2
adds r1, r3, #0
orrs r0, r1
strh r0, [r2]
subs r0, r6, r5 @ r0 = 0xFFF - r5
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
movs r2, #0 @ r2 = i = 0
ldr r0, _0804E65C @ =sRGB_080D8E20
mov r8, r0
movs r4, #0x1f
ldr r1, _0804E660 @ =gBgPalette
mov sl, r1
_0804E5DC:
movs r5, #0 @ r5 = c = 0
lsls r0, r2, #1
lsls r1, r2, #4
adds r3, r2, #1
mov sb, r3
adds r0, r0, r2
lsls r0, r0, #4
mov ip, r0 @ ip = r0 = i * 0x30
adds r7, r1, #0
adds r7, #0x70
_0804E5F0:
lsls r1, r5, #1
adds r1, r1, r5
add r1, ip @ r1 = ((i * 0x30) + (c * 3))
mov r2, r8
adds r0, r1, r2
ldrb r3, [r0] @ r3 = sRGB_080D8E20[i][c][0]
muls r3, r6, r3
asrs r3, r3, #9
ands r3, r4 @ r3 = r
mov r0, r8
adds r0, #1
adds r0, r1, r0
ldrb r2, [r0]
muls r2, r6, r2
asrs r2, r2, #9
ands r2, r4 @ r2 = g
ldr r0, _0804E664 @ =sRGB_080D8E20+0x2
adds r1, r1, r0
ldrb r0, [r1]
muls r0, r6, r0
asrs r0, r0, #9
ands r0, r4 @ r0 = b
adds r1, r5, r7
lsls r1, r1, #1
add r1, sl
lsls r0, r0, #0xa
lsls r2, r2, #5
orrs r0, r2
orrs r0, r3
strh r0, [r1]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0xf
bls _0804E5F0
mov r1, sb
lsls r0, r1, #0x18
lsrs r2, r0, #0x18
cmp r2, #2
bls _0804E5DC
ldr r2, _0804E668 @ =gFlags
ldr r0, [r2]
movs r1, #1
orrs r0, r1
str r0, [r2]
sub_804E4CC__return:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804E658: .4byte gDispCnt
_0804E65C: .4byte sRGB_080D8E20
_0804E660: .4byte gBgPalette
_0804E664: .4byte sRGB_080D8E20+0x2
_0804E668: .4byte gFlags
.syntax divided
@@ -0,0 +1,316 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x18
mov r8, r0 @ r8 = unk558
ldr r0, _0804F348 @ =gCurTask
ldr r0, [r0]
ldrh r0, [r0, #6]
movs r1, #0xc0
lsls r1, r1, #0x12
adds r1, r0, r1 @ r1 = boss
ldr r2, _0804F34C @ =IWRAM_START + 0x1C
adds r4, r0, r2 @ r4 = unk1C
ldr r3, _0804F350 @ =IWRAM_START + 0x48
adds r5, r0, r3 @ r5 = unk48
ldr r6, _0804F354 @ =IWRAM_START + 0x98
adds r6, r0, r6 @ r6 = unk98
str r6, [sp, #0x10] @ sp10 = unk98
mov r0, r8
adds r0, #0xc
str r0, [sp, #0x14] @ sp14 = s = unk558->s
ldrb r0, [r1, #0xc]
cmp r0, #0
bne _0804F222
b sub_804F1EC__return
_0804F222:
mov r1, r8 @ r1 = r8 = unk558
ldrh r0, [r1, #6]
subs r0, #1
strh r0, [r1, #6]
lsls r0, r0, #0x10
cmp r0, #0
bne _0804F23C
ldr r0, _0804F358 @ =sub_8050DC8
str r0, [r1]
movs r0, #0x87
lsls r0, r0, #1
bl m4aSongNumStop
_0804F23C:
mov r2, r8 @ r2 = r8 = unk558
ldr r0, [r2, #8]
adds r7, r0, #2
movs r0, #0xe8
lsls r0, r0, #1
cmp r7, r0
ble _0804F24C
adds r7, r0, #0
_0804F24C:
mov r3, r8 @ r3 = r8 = unk558
str r7, [r3, #8]
movs r6, #0x20
ldrsh r0, [r4, r6]
lsls r0, r0, #8 @ r0 = Q(unk1C->unk20)
ldr r1, [r4, #0x24]
adds r1, r1, r0
mov sl, r1 @ sl = qX = unk1C->qPos.x + Q(unk1C->unk20);
movs r1, #0x22
ldrsh r0, [r4, r1]
lsls r0, r0, #8
ldr r1, [r4, #0x28]
adds r1, r1, r0
mov sb, r1 @ sb = qY = unk1C->qPos.y + Q(unk1C->unk22);
ldr r1, [r5, #0x44]
asrs r1, r1, #8
ldrh r5, [r5, #0x3a]
adds r1, r1, r5
movs r2, #0xc0
lsls r2, r2, #2
mov ip, r2
add r1, ip
ldr r3, _0804F35C @ =0x000003FF
adds r4, r3, #0
ands r1, r4
ldr r3, _0804F360 @ =gSineTable
movs r5, #0x80
lsls r5, r5, #1
adds r0, r1, r5
lsls r0, r0, #1
adds r0, r0, r3
movs r6, #0
ldrsh r2, [r0, r6]
lsls r0, r2, #3
adds r0, r0, r2
asrs r0, r0, #6
add sl, r0 @ qX +=
lsls r0, r1, #1
adds r0, r0, r3
movs r6, #0
ldrsh r2, [r0, r6]
lsls r0, r2, #3
adds r0, r0, r2
asrs r0, r0, #6
add sb, r0 @ qY +=
add r1, ip
ands r1, r4
adds r0, r1, r5
lsls r0, r0, #1
adds r0, r0, r3
movs r2, #0
ldrsh r0, [r0, r2]
movs r2, #0x26
muls r0, r2, r0
asrs r0, r0, #6
add sl, r0 @ qX +=
lsls r1, r1, #1
adds r1, r1, r3
movs r3, #0
ldrsh r0, [r1, r3]
muls r0, r2, r0
asrs r0, r0, #6
add sb, r0
add r1, sp, #0xc @ sp0C = sonicY
add r0, sp, #8 @ sp08 ? sonicX
bl SuperSonicGetPos
ldr r0, [sp, #8]
movs r1, #0xa0
lsls r1, r1, #4
add r1, sl
movs r4, #2
str r4, [sp]
adds r2, r7, #0
movs r3, #0xa
bl sub_8085698
str r0, [sp, #8]
ldr r0, [sp, #0xc]
adds r5, r7, r5
str r4, [sp]
mov r1, sb
adds r2, r5, #0
movs r3, #0xa
bl sub_8085698
adds r1, r0, #0
str r1, [sp, #0xc]
ldr r0, [sp, #8]
bl SuperSonicSetPos
mov r6, sl @ r6 = sl = qX
asrs r4, r6, #8
mov r0, sb @ r0 = sb = qY
asrs r5, r0, #8
ldr r0, [sp, #0x14] @ r0 = s
adds r1, r4, #0
adds r2, r5, #0
movs r3, #0
bl sub_804F010
cmp r0, #1
bne _0804F36C
bl sub_802C798
ldr r0, _0804F364 @ =sub_804F47C
mov r1, r8 @ r1 = r8 = unk558
str r0, [r1]
movs r0, #0x78
strh r0, [r1, #6]
movs r0, #0xa
strb r0, [r1, #4]
ldr r0, _0804F368 @ =0x000002CB
ldr r2, [sp, #0x14] @ r2 = s
strh r0, [r2, #0xa]
adds r1, #0x2c
movs r0, #0
strb r0, [r1]
adds r1, #1
movs r0, #0xff
strb r0, [r1]
movs r0, #0x80
lsls r0, r0, #6
str r0, [r2, #0x10]
b sub_804F1EC__return
.align 2, 0
_0804F348: .4byte gCurTask
_0804F34C: .4byte IWRAM_START + 0x1C
_0804F350: .4byte IWRAM_START + 0x48
_0804F354: .4byte IWRAM_START + 0x98
_0804F358: .4byte sub_8050DC8
_0804F35C: .4byte 0x000003FF
_0804F360: .4byte gSineTable
_0804F364: .4byte sub_804F47C
_0804F368: .4byte 0x000002CB
_0804F36C:
movs r0, #0x87
lsls r0, r0, #1
bl m4aSongNumStartOrContinue
ldr r1, _0804F474 @ =gCamera
ldr r0, [r1]
subs r0, r4, r0
ldr r3, [sp, #0x14] @ r3 = s
strh r0, [r3, #0x16]
ldr r0, [r1, #4]
subs r0, r5, r0
strh r0, [r3, #0x18]
ldr r0, [sp, #0x14]
bl UpdateSpriteAnimation
ldr r0, [sp, #0x14]
bl DisplaySprite
movs r6, #0
movs r4, #2
mov r8, r4 @ r8 = r4 = 2
_0804F396:
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #3
adds r0, r0, r6
lsls r0, r0, #4
adds r0, #0x10
ldr r1, [sp, #0x10] @ r1 = sp10 = unk98
adds r5, r1, r0 @ r5 = unkA8 = unk98->unk10
ldrb r1, [r5, #4]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _0804F458
ldr r0, [r5, #0x18]
mov r2, sb
subs r0, r0, r2
lsls r0, r0, #8
asrs r0, r0, #0x10 @ r0 = Q()
ldr r1, [r5, #0x14]
mov r3, sl
subs r1, r1, r3
lsls r1, r1, #8
asrs r1, r1, #0x10
bl sub_8004418
lsls r0, r0, #0x10
ldr r4, _0804F478 @ =0xFED30000
adds r0, r0, r4
movs r1, #0xd3
lsls r1, r1, #0x11
cmp r0, r1
bls _0804F3DC
ldrb r0, [r5, #6]
cmp r0, #0
beq _0804F430
_0804F3DC:
ldr r4, [r5, #0x1c]
adds r7, r4, #0
adds r7, #0xa
movs r0, #1
strb r0, [r5, #6]
str r7, [r5, #0x1c]
ldr r0, [r5, #0x14]
mov r1, r8
str r1, [sp]
movs r1, #0xb0
lsls r1, r1, #5
add r1, sl
adds r2, r7, #0
movs r3, #0xa
bl sub_8085698
str r0, [r5, #0x14]
ldr r0, [r5, #0x18]
adds r4, #0xaa
mov r2, r8
str r2, [sp]
mov r1, sb
adds r2, r4, #0
movs r3, #0xa
bl sub_8085698
str r0, [r5, #0x18]
movs r3, #0xe
ldrsh r0, [r5, r3]
movs r4, #0x5a
muls r0, r4, r0
movs r1, #0x64
bl Div
strh r0, [r5, #0xe]
movs r1, #0x10
ldrsh r0, [r5, r1]
muls r0, r4, r0
movs r1, #0x64
bl Div
strh r0, [r5, #0x10]
_0804F430:
adds r0, r5, #0
adds r0, #0x20 @ r0 = unkA8->spr20
ldr r1, [r5, #0x14]
asrs r1, r1, #8
ldr r2, [r5, #0x18]
asrs r2, r2, #8
mov r4, sl @ r4 = sl = qX
asrs r3, r4, #8
adds r3, #0x10
str r3, [sp]
mov r4, sb
asrs r3, r4, #8
str r3, [sp, #4]
ldr r3, [sp, #0x14] @ r3 = s
bl sub_804EF68
cmp r0, #1
bne _0804F458
movs r0, #0
strb r0, [r5, #4]
_0804F458:
adds r0, r6, #1
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
cmp r6, #2
bls _0804F396
sub_804F1EC__return:
add sp, #0x18
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804F474: .4byte gCamera
_0804F478: .4byte 0xFED30000
.syntax divided
@@ -0,0 +1,190 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x20
str r0, [sp, #8] @ sp08 = qX
str r1, [sp, #0xc] @ sp0C = qY
lsls r3, r3, #0x10
lsrs r6, r3, #0x10 @ r6 = sinIndex = sinIndex_;
ldr r0, _0804F8C4 @ =gCurTask
ldr r0, [r0]
ldrh r0, [r0, #6]
ldr r1, _0804F8C8 @ =IWRAM_START + 0x654
adds r4, r0, r1 @ r4 = unk654
mov r1, sp
movs r5, #0
movs r3, #0
movs r2, #0
ldr r7, _0804F8CC @ =IWRAM_START + 0x662
adds r0, r0, r7
ldrb r0, [r0]
cmp r0, #0
bne _0804F886
strb r5, [r1]
adds r1, #1
movs r3, #1
_0804F886:
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #0xf
bhi _0804F8AA
adds r0, r4, #0
adds r0, #0xe
adds r0, r0, r2
ldrb r0, [r0]
cmp r0, #0
bne _0804F886
strb r2, [r1]
adds r1, #1
adds r0, r3, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
cmp r3, #8
bne _0804F886
_0804F8AA:
cmp r3, #8
bne _0804F8B0
movs r5, #1
_0804F8B0:
cmp r5, #0
beq sub_804F850__return
mov r0, sp
ldrb r0, [r0, #7]
cmp r0, #7
bhi _0804F8D0
adds r0, r6, #0
adds r0, #0x3c
b _0804F8D4
.align 2, 0
_0804F8C4: .4byte gCurTask
_0804F8C8: .4byte IWRAM_START + 0x654
_0804F8CC: .4byte IWRAM_START + 0x662
_0804F8D0:
adds r0, r6, #0
subs r0, #0x3c
_0804F8D4:
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
ldr r0, _0804F9B4 @ =0x000003FF
ands r6, r0
__0804F8DC:
movs r5, #0 @ i = 0
adds r0, r4, #0
adds r0, #0xe
str r0, [sp, #0x10] @ sp10 = &unk654->unkE[0]
adds r1, r4, #0
adds r1, #0x1e
str r1, [sp, #0x14] @ sp14 = &unk654->unk1E[0]
adds r2, r4, #0
adds r2, #0x2e
str r2, [sp, #0x18] @ sp18 = &unk654->unk2E[0][0]
adds r7, r4, #0
adds r7, #0x30
str r7, [sp, #0x1c] @ sp1C = &unk654->unk2E[0][1]
movs r0, #0x70
adds r0, r0, r4
mov sl, r0 @ sl = &unk654->qPos70[0].x
adds r4, #0x74
mov sb, r4 @ sb = &unk654->qPos70[0].y
movs r1, #0x80
lsls r1, r1, #1
mov ip, r1 @ ip = 0x100
adds r0, r6, r1
lsls r0, r0, #1
ldr r2, _0804F9B8 @ =gSineTable
adds r0, r0, r2
movs r4, #0
ldrsh r1, [r0, r4]
lsls r0, r1, #1
adds r0, r0, r1
asrs r0, r0, #6
mov r8, r0 @ r8 = (COS(sinIndex) * 3) >> 6
_0804F91A:
mov r7, sp
adds r0, r7, r5
ldrb r2, [r0]
ldr r0, [sp, #0x10]
adds r1, r0, r2
movs r0, #1
strb r0, [r1]
ldr r4, [sp, #0x14]
adds r1, r4, r2
movs r0, #0xff
strb r0, [r1]
lsls r3, r2, #2
ldr r7, [sp, #0x18]
adds r4, r7, r3
mov r0, r8
strh r0, [r4]
ldr r1, [sp, #0x1c]
adds r3, r1, r3
lsls r0, r6, #1
ldr r7, _0804F9B8 @ =gSineTable
adds r0, r0, r7
movs r7, #0
ldrsh r1, [r0, r7]
lsls r0, r1, #1
adds r0, r0, r1
asrs r0, r0, #6
strh r0, [r3]
lsls r0, r5, #7 @ r0 = (i * 128)
add r0, ip
lsls r0, r0, #1
ldr r1, _0804F9B8 @ =gSineTable
adds r0, r0, r1
movs r7, #0
ldrsh r1, [r0, r7]
lsls r0, r1, #1
adds r0, r0, r1
asrs r0, r0, #8
ldrh r1, [r4]
adds r0, r0, r1
strh r0, [r4]
lsls r0, r5, #8
ldr r4, _0804F9B8 @ =gSineTable
adds r0, r0, r4
movs r7, #0
ldrsh r1, [r0, r7]
lsls r0, r1, #1
adds r0, r0, r1
asrs r0, r0, #8
ldrh r1, [r3]
adds r0, r0, r1
strh r0, [r3]
lsls r2, r2, #3
mov r4, sl
adds r0, r4, r2
ldr r7, [sp, #8]
str r7, [r0]
add r2, sb
ldr r0, [sp, #0xc]
str r0, [r2]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #7
bls _0804F91A
movs r0, #0x81
lsls r0, r0, #1
bl m4aSongNumStart
sub_804F850__return:
add sp, #0x20
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804F9B4: .4byte 0x000003FF
_0804F9B8: .4byte gSineTable
.syntax divided
@@ -0,0 +1,193 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x20
str r0, [sp, #8]
str r1, [sp, #0xc]
ldr r0, _0804FB18 @ =gCurTask
ldr r0, [r0]
ldrh r0, [r0, #6]
ldr r1, _0804FB1C @ =IWRAM_START + 0x654
adds r4, r0, r1
lsls r3, r3, #0x16
lsrs r3, r3, #0x16
mov ip, r3
mov r1, sp
movs r5, #0
movs r3, #0
movs r2, #0
ldr r6, _0804FB20 @ =IWRAM_START + 0x662
adds r0, r0, r6
ldrb r0, [r0]
cmp r0, #0
bne _0804FADC
strb r5, [r1]
adds r1, #1
movs r3, #1
_0804FADC:
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #0xf
bhi _0804FB00
adds r0, r4, #0
adds r0, #0xe
adds r0, r0, r2
ldrb r0, [r0]
cmp r0, #0
bne _0804FADC
strb r2, [r1]
adds r1, #1
adds r0, r3, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
cmp r3, #8
bne _0804FADC
_0804FB00:
cmp r3, #8
bne _0804FB06
movs r5, #1
_0804FB06:
cmp r5, #0
beq sub_804FAA4__return
mov r0, sp
ldrb r0, [r0, #7]
cmp r0, #7
bhi _0804FB24
mov r0, ip
adds r0, #0x46
b _0804FB28
.align 2, 0
_0804FB18: .4byte gCurTask
_0804FB1C: .4byte IWRAM_START + 0x654
_0804FB20: .4byte IWRAM_START + 0x662
_0804FB24:
mov r0, ip
subs r0, #0x46
_0804FB28:
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov ip, r0
ldr r0, _0804FB88 @ =0x000003FF
mov r1, ip
ands r1, r0
mov ip, r1
movs r7, #0
adds r2, r4, #0
adds r2, #0xe
str r2, [sp, #0x10]
adds r3, r4, #0
adds r3, #0x1e
str r3, [sp, #0x14]
adds r6, r4, #0
adds r6, #0x2e
str r6, [sp, #0x18]
adds r1, r4, #0
adds r1, #0x30
str r1, [sp, #0x1c]
movs r2, #0x70
adds r2, r2, r4
mov sl, r2
adds r4, #0x74
mov sb, r4
ldr r3, _0804FB8C @ =gSineTable
mov r8, r3
_0804FB5E:
mov r6, sp
adds r0, r6, r7
ldrb r6, [r0]
ldr r0, [sp, #0x10]
adds r1, r0, r6
movs r0, #1
strb r0, [r1]
ldr r2, [sp, #0x14]
adds r1, r2, r6
movs r0, #0xff
strb r0, [r1]
cmp r7, #3
bhi _0804FB90
lsls r0, r7, #4
add r0, ip
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
lsls r0, r7, #1
adds r0, r0, r7
lsls r5, r0, #4
b _0804FBA4
.align 2, 0
_0804FB88: .4byte 0x000003FF
_0804FB8C: .4byte gSineTable
_0804FB90:
subs r0, r7, #4
lsls r1, r0, #4
mov r3, ip
subs r1, r3, r1
lsls r1, r1, #0x10
lsrs r4, r1, #0x10
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #0x14
lsrs r5, r1, #0x10
_0804FBA4:
ldr r0, _0804FC0C @ =0x000003FF
ands r4, r0
lsls r2, r6, #2
ldr r1, [sp, #0x18]
adds r3, r1, r2
movs r1, #0x80
lsls r1, r1, #1
adds r0, r4, r1
lsls r0, r0, #1
add r0, r8
movs r1, #0
ldrsh r0, [r0, r1]
movs r1, #0xa0
lsls r1, r1, #2
subs r1, r1, r5
muls r0, r1, r0
asrs r0, r0, #0xe
strh r0, [r3]
ldr r3, [sp, #0x1c]
adds r2, r3, r2
lsls r0, r4, #1
add r0, r8
movs r3, #0
ldrsh r0, [r0, r3]
muls r0, r1, r0
asrs r0, r0, #0xe
strh r0, [r2]
lsls r1, r6, #3
mov r6, sl
adds r0, r6, r1
ldr r2, [sp, #8]
str r2, [r0]
add r1, sb
ldr r3, [sp, #0xc]
str r3, [r1]
adds r0, r7, #1
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
cmp r7, #7
bls _0804FB5E
movs r0, #0x81
lsls r0, r0, #1
bl m4aSongNumStart
sub_804FAA4__return:
add sp, #0x20
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804FC0C: .4byte 0x000003FF
.syntax divided
@@ -0,0 +1,175 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x24
str r0, [sp, #8]
str r1, [sp, #0xc]
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
str r3, [sp, #0x10]
ldr r0, _0804FC88 @ =gCurTask
ldr r0, [r0]
ldrh r0, [r0, #6]
ldr r1, _0804FC8C @ =IWRAM_START + 0x654
adds r1, r1, r0
mov ip, r1
movs r6, #0
_0804FC34:
mov r1, sp
movs r4, #0
movs r3, #0
movs r2, #0
mov r5, ip
ldrb r0, [r5, #0xe]
cmp r0, #0
bne _0804FC4A
strb r4, [r1]
adds r1, #1
movs r3, #1
_0804FC4A:
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #0xf
bhi _0804FC6E
mov r0, ip
adds r0, #0xe
adds r0, r0, r2
ldrb r0, [r0]
cmp r0, #0
bne _0804FC4A
strb r2, [r1]
adds r1, #1
adds r0, r3, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
cmp r3, #8
bne _0804FC4A
_0804FC6E:
cmp r3, #8
bne _0804FC74
movs r4, #1
_0804FC74:
cmp r4, #0
beq _0804FD40
mov r0, sp
ldrb r0, [r0, #7]
cmp r0, #7
bhi _0804FC90
ldr r0, [sp, #0x10]
adds r0, #0x28
b _0804FC94
.align 2, 0
_0804FC88: .4byte gCurTask
_0804FC8C: .4byte IWRAM_START + 0x654
_0804FC90:
ldr r0, [sp, #0x10]
subs r0, #0x28
_0804FC94:
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldr r0, _0804FD50 @ =0x000003FF
ands r2, r0
movs r5, #0
mov r0, ip
adds r0, #0xe
str r0, [sp, #0x1c]
mov r1, ip
adds r1, #0x1e
str r1, [sp, #0x20]
mov r3, ip
adds r3, #0x2e
str r3, [sp, #0x14]
movs r0, #0x30
add r0, ip
mov sl, r0
movs r1, #0x70
add r1, ip
mov sb, r1
movs r3, #0x74
add r3, ip
mov r8, r3
adds r6, #1
str r6, [sp, #0x18]
ldr r1, _0804FD54 @ =gSineTable
movs r3, #0x80
lsls r3, r3, #1
adds r0, r2, r3
lsls r0, r0, #1
adds r0, r0, r1
movs r3, #0
ldrsh r7, [r0, r3]
lsls r0, r2, #1
adds r0, r0, r1
movs r1, #0
ldrsh r6, [r0, r1]
_0804FCDE:
mov r3, sp
adds r0, r3, r5
ldrb r2, [r0]
ldr r0, [sp, #0x1c]
adds r1, r0, r2
movs r0, #1
strb r0, [r1]
ldr r3, [sp, #0x20]
adds r1, r3, r2
movs r0, #0xff
strb r0, [r1]
lsls r0, r5, #6
lsls r3, r2, #2
ldr r1, [sp, #0x14]
adds r4, r1, r3
movs r1, #0x80
lsls r1, r1, #3
subs r1, r1, r0
adds r0, r7, #0
muls r0, r1, r0
asrs r0, r0, #0xe
strh r0, [r4]
add r3, sl
adds r0, r6, #0
muls r0, r1, r0
asrs r0, r0, #0xe
strh r0, [r3]
lsls r2, r2, #3
mov r3, sb
adds r0, r3, r2
ldr r1, [sp, #8]
str r1, [r0]
add r2, r8
ldr r3, [sp, #0xc]
str r3, [r2]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #7
bls _0804FCDE
ldr r5, [sp, #0x18]
lsls r0, r5, #0x18
lsrs r6, r0, #0x18
cmp r6, #1
bhi _0804FD3A
b _0804FC34
_0804FD3A:
movs r0, #0x9c
bl m4aSongNumStart
_0804FD40:
add sp, #0x24
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804FD50: .4byte 0x000003FF
_0804FD54: .4byte gSineTable
.syntax divided
@@ -0,0 +1,114 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r6, r0, #0 @ r6 = unk48
ldr r0, [r6, #0x34]
mov ip, r0 @ ip = unk48->unk34
adds r4, r6, #4 @ r4 = &unk48[2]
movs r1, #0x3a
adds r1, r1, r6
mov r8, r1 @ r8 = unk48->unk3A
ldrh r3, [r6, #0x2e]
mov sb, r3 @ sb = unk48->unk2E
movs r0, #0
mov sl, r0 @ sl = result = FALSE
ldr r5, [r6, #0x30]
lsrs r2, r5, #0xc @ r2 = (unk48->unk30 >> 12)
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
cmp r3, #7
bls _08050062
movs r1, #1
mov sl, r1 @ sl = result = TRUE
_08050062:
movs r1, #7
movs r0, #7
ands r3, r0
ldr r7, _080500FC @ =0x00000FFF
ands r7, r5
ands r2, r1
ldrh r0, [r6, #0x2c]
subs r0, r5, r0
lsrs r0, r0, #0xc
ands r0, r1
cmp r2, r0
beq _080500B0
movs r5, #0 @ r5 = i = 0
adds r2, r4, #0 @ r2 = r4 = &unk48[2]
lsls r1, r3, #1
_08050080:
ldrh r0, [r4, #2]
strh r0, [r4]
adds r4, #2
ldrh r0, [r4, #2]
strh r0, [r4]
adds r4, #2
ldrh r0, [r4, #2]
strh r0, [r4]
adds r4, #2
mov r3, ip
adds r3, #4
mov ip, r3
subs r3, #4
ldm r3!, {r0}
adds r0, r1, r0
ldrh r0, [r0]
strh r0, [r4]
adds r4, #2
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #4
bls _08050080
adds r4, r2, #0
_080500B0:
movs r5, #0
lsls r7, r7, #0x10
_080500B4:
lsls r0, r5, #3
adds r0, r4, r0
lsrs r1, r7, #0x10
bl sub_80859F4
mov r1, r8
strh r0, [r1]
movs r3, #2
add r8, r3
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #4
bls _080500B4
ldrh r0, [r6, #0x2c]
mov r1, sb
subs r0, r0, r1
movs r1, #0xfa
muls r0, r1, r0
asrs r0, r0, #8
add r0, sb
strh r0, [r6, #0x2c]
ldrh r1, [r6, #0x2c]
ldr r0, [r6, #0x30]
adds r0, r0, r1
ldr r1, _08050100 @ =0x00007FFF
ands r0, r1
str r0, [r6, #0x30]
mov r0, sl
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_080500FC: .4byte 0x00000FFF
_08050100: .4byte 0x00007FFF
.syntax divided
@@ -0,0 +1,112 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r6, r0, #0
ldr r0, [r6, #0x1c]
mov ip, r0
adds r4, r6, #4
adds r7, r6, #0
adds r7, #0x20
ldrh r1, [r6, #0x16]
mov sb, r1
movs r3, #0
mov sl, r3
ldr r5, [r6, #0x18]
lsrs r2, r5, #0xc
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
cmp r3, #7
bls _08050134
movs r0, #1
mov sl, r0
_08050134:
movs r1, #7
movs r0, #7
ands r3, r0
ldr r0, _080501CC @ =0x00000FFF
mov r8, r0
ands r0, r5
mov r8, r0
ands r2, r1
ldrh r0, [r6, #0x14]
subs r0, r5, r0
lsrs r0, r0, #0xc
ands r0, r1
cmp r2, r0
beq _08050186
movs r5, #0
adds r2, r4, #0
lsls r1, r3, #1
_08050156:
ldrh r0, [r4, #2]
strh r0, [r4]
adds r4, #2
ldrh r0, [r4, #2]
strh r0, [r4]
adds r4, #2
ldrh r0, [r4, #2]
strh r0, [r4]
adds r4, #2
mov r3, ip
adds r3, #4
mov ip, r3
subs r3, #4
ldm r3!, {r0}
adds r0, r1, r0
ldrh r0, [r0]
strh r0, [r4]
adds r4, #2
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #1
bls _08050156
adds r4, r2, #0
_08050186:
movs r5, #0
_08050188:
lsls r0, r5, #3
adds r0, r4, r0
mov r1, r8
bl sub_8085968
strh r0, [r7]
adds r7, #2
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #1
bls _08050188
ldrh r0, [r6, #0x14]
mov r1, sb
subs r0, r0, r1
movs r1, #0xfa
muls r0, r1, r0
asrs r0, r0, #8
add r0, sb
strh r0, [r6, #0x14]
ldrh r1, [r6, #0x14]
ldr r0, [r6, #0x18]
adds r0, r0, r1
ldr r1, _080501D0 @ =0x00007FFF
ands r0, r1
str r0, [r6, #0x18]
mov r0, sl
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_080501CC: .4byte 0x00000FFF
_080501D0: .4byte 0x00007FFF
.syntax divided
@@ -0,0 +1,148 @@
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r1, r0, #0 @ r1 = boss
ldrb r0, [r1, #0xd]
cmp r0, #0
beq _08050A5C
subs r0, #1
strb r0, [r1, #0xd]
lsls r0, r0, #0x18
cmp r0, #0
bne _080509B0
movs r5, #0
ldr r0, _080509A0 @ =gFlags
mov sl, r0
ldr r6, _080509A4 @ =gObjPalette
ldr r4, _080509A8 @ =gUnknown_080D8EF0+0x20
ldr r3, _080509AC @ =gBgPalette
_08050980:
adds r1, r5, #0
adds r1, #0x80
lsls r1, r1, #1
adds r1, r1, r6 @ r1 = &gObjPalette[8*16 + i]
lsls r2, r5, #1
adds r0, r2, r4
ldrh r0, [r0]
strh r0, [r1]
adds r2, r2, r3
strh r0, [r2]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0xf
bls _08050980
b _08050A4C
.align 2, 0
_080509A0: .4byte gFlags
_080509A4: .4byte gObjPalette
_080509A8: .4byte gUnknown_080D8EF0+0x20
_080509AC: .4byte gBgPalette
_080509B0:
ldr r0, _080509F8 @ =gStageTime
ldr r0, [r0]
lsrs r6, r0, #1
movs r0, #0xf
ands r6, r0
ldrb r0, [r1, #0xc]
cmp r0, #3
bhi _08050A0C
movs r5, #0
ldr r1, _080509FC @ =gFlags
mov sl, r1
ldr r0, _08050A00 @ =gObjPalette
mov ip, r0
movs r7, #0xf
ldr r4, _08050A04 @ =gUnknown_080D8EF0
ldr r3, _08050A08 @ =gBgPalette
_080509D0:
adds r1, r5, r6
ands r1, r7 @ r1 = bgPalId = (r6 + i) % 16u
adds r2, r1, #0
adds r2, #0x80
lsls r2, r2, #1
add r2, ip @ r2 = &gObjPalette[8*16 + colId]
lsls r0, r5, #1
adds r0, r0, r4
ldrh r0, [r0]
lsrs r0, r0, #5
strh r0, [r2]
lsls r1, r1, #1
adds r1, r1, r3
strh r0, [r1]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0xf
bls _080509D0
b _08050A4C
.align 2, 0
_080509F8: .4byte gStageTime
_080509FC: .4byte gFlags
_08050A00: .4byte gObjPalette
_08050A04: .4byte gUnknown_080D8EF0
_08050A08: .4byte gBgPalette
_08050A0C:
movs r5, #0
ldr r1, _08050A6C @ =gFlags
mov sl, r1
ldr r0, _08050A70 @ =gObjPalette
mov sb, r0
ldr r1, _08050A74 @ =gUnknown_080D8EF0
mov r8, r1
ldr r0, _08050A78 @ =gBgPalette
mov ip, r0
movs r7, #0xf
_08050A20:
adds r3, r5, r6
ands r3, r7 @ r3 = (r6 + i) % 16u
adds r4, r3, #0
adds r4, #0x80
lsls r4, r4, #1
add r4, sb
lsls r0, r5, #1
add r0, r8
ldrh r1, [r0]
lsls r2, r1, #5
lsrs r0, r1, #5
orrs r2, r0
orrs r2, r1
strh r2, [r4]
lsls r3, r3, #1
add r3, ip
strh r2, [r3]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0xf
bls _08050A20
_08050A4C:
mov r1, sl
ldr r0, [r1]
movs r1, #2
orrs r0, r1
movs r1, #1
orrs r0, r1
mov r1, sl
str r0, [r1]
_08050A5C:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08050A6C: .4byte gFlags
_08050A70: .4byte gObjPalette
_08050A74: .4byte gUnknown_080D8EF0
_08050A78: .4byte gBgPalette
.syntax divided
@@ -73,7 +73,7 @@ _0802BD0E:
lsls r5, r0, #8
adds r0, r4, #0
adds r1, r5, #0
bl sub_804D594
bl TrueArea53BossMove
movs r3, #0
ldr r0, [sp, #4]
mov sl, r0
@@ -0,0 +1,23 @@
#include "global.h"
#include "core.h"
const u16 Palette_music_plant_moving_stars[]
= INCBIN_U16("data/tilemaps/music_plant_moving_stars/palette.gbapal");
const u8 Tiles_music_plant_moving_stars[]
= INCBIN_U8("data/tilemaps/music_plant_moving_stars/tiles.4bpp");
const u16 Tilemap_music_plant_moving_stars[]
= INCBIN_U16("data/tilemaps/music_plant_moving_stars/tilemap.tilemap2");
const Tilemap music_plant_moving_stars = {
.xTiles = 32,
.yTiles = 32,
.animTileSize = 0,
.animFrameCount = 0,
.animDelay = 0,
.tiles = Tiles_music_plant_moving_stars,
.tilesSize = sizeof(Tiles_music_plant_moving_stars),
.palette = Palette_music_plant_moving_stars,
.palOffset = 0,
.palLength = sizeof(Palette_music_plant_moving_stars) / sizeof(u16),
.map = Tilemap_music_plant_moving_stars,
};
-22
View File
@@ -1,22 +0,0 @@
#include "global.h"
#include "core.h"
const u16 Palette_unknown_stars[]
= INCBIN_U16("data/tilemaps/unknown_stars/palette.gbapal");
const u8 Tiles_unknown_stars[] = INCBIN_U8("data/tilemaps/unknown_stars/tiles.4bpp");
const u16 Tilemap_unknown_stars[]
= INCBIN_U16("data/tilemaps/unknown_stars/tilemap.tilemap2");
const Tilemap unknown_stars = {
.xTiles = 32,
.yTiles = 32,
.animTileSize = 0,
.animFrameCount = 0,
.animDelay = 0,
.tiles = Tiles_unknown_stars,
.tilesSize = sizeof(Tiles_unknown_stars),
.palette = Palette_unknown_stars,
.palOffset = 0,
.palLength = sizeof(Palette_unknown_stars) / sizeof(u16),
.map = Tilemap_unknown_stars,
};
+19
View File
@@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 16 0
0 32 0
131 41 0
0 65 0
0 82 0
0 98 0
131 106 0
0 131 0
0 148 0
0 164 0
131 172 0
0 197 0
0 213 0
0 230 0
131 238 0
0 255 0
+19
View File
@@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 98 115
255 255 255
255 180 57
123 57 255
90 16 180
32 16 16
205 238 255
164 189 205
98 115 156
49 74 98
65 0 123
255 115 32
222 65 0
189 32 0
131 32 0
82 32 0
+19
View File
@@ -398,6 +398,23 @@
#define SA2_ANIM_SUPER_EGG_ROBO_Z_PROJ 706
#define SA2_ANIM_SUPER_EGG_ROBO_Z_CLOUD 707
#define SA2_ANIM_TRUE_AREA_53_BOSS_COCKPIT 708
#define SA2_ANIM_TRUE_AREA_53_BOSS_SEGMENT_0 709
#define SA2_ANIM_TRUE_AREA_53_BOSS_SEGMENT_1 710
#define SA2_ANIM_TRUE_AREA_53_BOSS_SEGMENT_2 711
#define SA2_ANIM_TRUE_AREA_53_BOSS_CANNON 712
#define SA2_ANIM_TRUE_AREA_53_BOSS_EXPLOSION 713
#define SA2_ANIM_TRUE_AREA_53_BOSS_CLOUD 714
#define SA2_ANIM_TRUE_AREA_53_BOSS_MOUTH 715
#define SA2_ANIM_TRUE_AREA_53_BOSS_ROCKET 716
#define SA2_ANIM_TRUE_AREA_53_BOSS_PROJ_YELLOW 717
#define SA2_ANIM_TRUE_AREA_53_BOSS_SUCK_FX 718
#define SA2_ANIM_TRUE_AREA_53_BOSS_PROJ_RED 719
#define SA2_ANIM_TRUE_AREA_53_BOSS_PARTICLE_0 720
#define SA2_ANIM_TRUE_AREA_53_BOSS_PARTICLE_1 721
#define SA2_ANIM_TRUE_AREA_53_BOSS_PARTICLE_2 722
#define SA2_ANIM_TRUE_AREA_53_BOSS_COCKPIT_SEPERATED 723
#define SA2_ANIM_ITEMBOX 724
#define SA2_ANIM_ITEMBOX_TYPE 725
@@ -448,6 +465,8 @@
#define SA2_ANIM_ZONEX_NAME 762
#define SA2_ANIM_EXTRA_CUTSCENE_CAPSULE 791
// NOTE: Reused from SA1's character selection screen
#define SA2_ANIM_AMY_UNLOCKED 810
+1 -1
View File
@@ -292,7 +292,7 @@
#define TM_STORYFRAME_TAILS_UNLOCK_3_DLG_ES 366
#define TM_STORYFRAME_TAILS_UNLOCKED_ES 367
#define TM_REGULAR_FINAL_BOSS 368
#define TM_UNKNOWN_STARS 369
#define TM_MUSIC_PLANT_MOVING_STARS 369
#define TM_SKY_CANYON_CLOUDS_FOREGROUND 370
#define TM_SPOTLIGHT_SNOW 371
#define TM_EXTRA_BOSS_BACKGROUND 372
+1 -1
View File
@@ -166,7 +166,7 @@ struct SpriteTables {
gMultiplayerPseudoRandom = (gMultiplayerPseudoRandom * 0x196225) + 0x3C6EF35F; \
gMultiplayerPseudoRandom; \
})
#define PseudoRandBetween(min, max) ((PseudoRandom32() & ((-min) + (max))) + (min))
#define PseudoRandBetween(min, max) ((PseudoRandom32() & ((-min) + (max - 1))) + (min))
extern u32 gFlags;
extern u32 gFlagsPreVBlank;
+1 -1
View File
@@ -371,7 +371,7 @@ extern const Tilemap storyframe_tails_unlock_2_dlg_es;
extern const Tilemap storyframe_tails_unlock_3_dlg_es;
extern const Tilemap storyframe_tails_unlocked_es;
extern const Tilemap regular_final_boss;
extern const Tilemap unknown_stars;
extern const Tilemap music_plant_moving_stars;
extern const Tilemap sky_canyon_clouds_foreground;
extern const Tilemap spotlight_snow;
extern const Tilemap extra_boss_background;
+1 -1
View File
@@ -2,6 +2,6 @@
#define GUARD_GAME_BOSS_6_H
extern void CreateEggGoRound(void);
extern void sub_8047224(s32, s32);
extern void EggGoRoundMove(s32, s32);
#endif // GUARD_GAME_BOSS_6_H
+1 -1
View File
@@ -2,6 +2,6 @@
#define GUARD_GAME_BOSS_7_H
extern void CreateEggFrog(void);
extern void sub_8048EB4(s32, s32);
extern void EggFrogMove(s32, s32);
#endif // GUARD_GAME_BOSS_7_H
+173 -9
View File
@@ -1,21 +1,185 @@
#ifndef GUARD_GAME_BOSS_9_H
#define GUARD_GAME_BOSS_9_H
#include "global.h" // for Vec2_16/32
#include "sprite.h" // Sprite
#include "game/stage/screen_fade.h"
// NOTE:
// struct TA53Boss and all the structs referenced in it have to be declared in the .h
// file because the stage background function of the TA53 references it, mainly becaue
// the boss's cockpit is rendered in a background layer.
#define TA53_BOSS_BACKGROUND_ID 1
#define TA53_BOSS_SCREENBASE 28
extern void CreateTrueArea53Boss(void);
extern bool32 ExtraBossIsDead(void);
extern void sub_804D594(s32, s32);
extern void TrueArea53BossMove(s32, s32);
// TODO: Parameter types
// On the initial run sub_804F6AC only matched usign u32 as last param,
// but for other functions it seems like it should be u16.
// sub_804FD58 might have the solution? (index % 1024)
typedef void (*TA53SubFunc)(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804F6AC(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804F768(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804F850(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804F9BC(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804FAA4(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804FC10(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
void sub_804FD58(u32 qX, u32 qY, s16 param2, u32 sinIndex_);
typedef struct TA53_unk1C {
/* 0x00 */ void (*callback)(struct TA53_unk1C *);
/* 0x04 */ s16 unk4[4];
/* 0x0C */ s16 unkC[4];
/* 0x14 */ u16 unk14;
/* 0x16 */ u16 unk16;
/* 0x18 */ s32 unk18;
/* 0x1C */ s16 **unk1C;
// Maybe a direction vector?
/* 0x20 */ s16 unk20;
/* 0x22 */ s16 unk22;
/* 0x24 */ Vec2_32 qPos;
} TA53_unk1C; /* size: 0x2C */
typedef struct TA53_unk48 {
void (*callback)(struct TA53_unk48 *);
s16 unk4[4];
s16 unkC[4];
u16 unk14[4];
u16 unk1C[4];
u16 unk24[4];
u16 unk2C;
u16 unk2E;
u32 unk30;
s16 **unk34;
u16 unk38;
u16 unk3A[4];
u16 unk42; // related to unk3A[]? Maybe 5th element?
Vec2_32 qPos44; // maybe this is not a Vec2_32 ?
u8 unk4C;
} TA53_unk48; /* size: 0x4D ? */
// TODO: Move back into boss_9.c once decompiled.
typedef struct {
void *func;
void *ref;
u16 unk4;
void (*callback)(struct TA53_unk48 *);
void *data;
u16 unk8;
} TA53_Data0;
typedef struct {
u8 filler0[0x10];
// flags
u16 unk10;
} Sprite_TrueArea53Boss; /* size: 0x940 */
void (*callback)(struct TA53_unk1C *);
void *data;
u16 unk8;
} TA53_Data1;
struct TA53_unkA8;
typedef void (*TA53_Rocket_Callback)(struct TA53_unkA8 *);
typedef struct TA53_RocketExhaust {
/* 0x58 */ void (*callback)(struct TA53_RocketExhaust *);
/* 0x5C */ u8 unk4[5];
/* 0x62 */ s16 unkA[5][2]; // NOTE: Would be Vec2_16, but alignment doesn't work
/* 0x78 */ Vec2_32 pos[5];
/* 0xA0 */ Sprite s[5];
} TA53_RocketExhaust;
// TODO: Name ("TA53_Rocket"?)
typedef struct TA53_unkA8 {
/* 0x00 */ TA53_Rocket_Callback callback;
/* 0x04 */ u8 unk4;
/* 0x05 */ u8 unk5;
/* 0x06 */ u8 unk6;
/* 0x07 */ u8 unk7;
/* 0x08 */ u16 unk8;
/* 0x0A */ u16 unkA;
/* 0x0C */ u16 unkC;
/* 0x0E */ s16 unkE;
/* 0x10 */ s16 unk10;
/* 0x12 */ u8 filler12[0x2];
/* 0x14 */ Vec2_32 pos14;
/* 0x1C */ s32 unk1C;
/* 0x20 */ Sprite spr20;
/* 0x50 */ Hitbox reserved;
/* 0x58 */ TA53_RocketExhaust exhaust;
} TA53_unkA8; /* size: 0x190 */
typedef struct TA53_unk98 {
/* 0x00 */ void (*callback)(struct TA53_unk98 *);
/* 0x04 */ u16 unk4; // some counter
/* 0x06 */ u16 unk6;
/* 0x08 */ s32 qUnk8;
/* 0x0C */ s32 qUnkC;
/* 0x10 */ TA53_unkA8 unk10[3];
} TA53_unk98; /* size: 0x4C0 */
// TA53_Mouth ?
typedef struct TA53_unk558 {
/* 0x00 */ void (*callback)(struct TA53_unk558 *); // void func (TA53_unk558 *)
/* 0x04 */ u8 unk4;
/* 0x05 */ u8 unk5;
/* 0x06 */ u16 unk6;
/* 0x08 */ s32 unk8;
/* 0x0C */ Sprite s;
} TA53_unk558; /* size: 0x3C */
typedef struct TA53_unk594 {
void (*callback)(struct TA53_unk594 *);
u8 unk4[10];
u8 unkE[10];
s16 unk18[10][2];
Vec2_32 unk40[10];
Sprite spr90;
} TA53_unk594; /* size: 0xC0 */
typedef struct TA53_unk654 {
/* 0x00 */ void (*callback)(struct TA53_unk654 *);
/* 0x04 */ TA53SubFunc func4;
/* 0x08 */ u16 unk8;
/* 0x0A */ u16 unkA;
/* 0x0C */ u16 unkC;
/* 0x0E */ u8 unkE[16];
/* 0x1E */ u8 unk1E[16];
/* 0x2E */ s16 unk2E[16][2];
/* 0x70 */ Vec2_32 qPos70[16];
/* 0xF0 */ Sprite sprF0;
/* 0x120 */ Hitbox hbSprF0;
/* 0x128 */ Sprite spr128;
/* 0x158 */ Hitbox hbSpr128;
} TA53_unk654; /* size: 0x160 */
typedef struct {
/* 0x00 */ Sprite s;
/* 0x30 */ Hitbox reserved;
/* 0x38 */ SpriteTransform transform;
} CapsuleParts; /* size: 0x44 */
typedef struct TA53Boss {
/* 0x000 */ ScreenFade fade;
/* 0x00C */ u8 lives;
/* 0x00D */ u8 unkD;
/* 0x00E */ u8 unkE;
/* 0x00F */ u8 unkF;
/* 0x010 */ u16 unk10;
/* 0x012 */ u16 unk12;
/* 0x014 */ Vec2_32 qPos;
/* 0x01C */ TA53_unk1C unk1C;
/* 0x048 */ TA53_unk48 unk48;
/* 0x098 */ TA53_unk98 unk98;
/* 0x558 */ TA53_unk558 unk558;
/* 0x594 */ TA53_unk594 unk594;
/* 0x654 */ TA53_unk654 unk654;
// Sprite used for the capsule Sonic rescues in the Extra cutscene
/* 0x7B4 */ Sprite spr7B4;
/* 0x7E4 */ u8 filler7E4[0xC];
/* 0x7F0 */ CapsuleParts capsule[4];
/* 0x900 */ Background bg900;
} TA53Boss; /* size: 0x940 */
#endif // GUARD_GAME_BOSS_9_H
+6 -1
View File
@@ -64,7 +64,12 @@ extern void SuperSonicInit(void);
extern u32 SuperSonicGetFlags(void);
extern void SuperSonicGetPos(s32 *outX, s32 *outY);
extern void SuperSonicSetPos(s32 x, s32 y);
extern u32 SuperSonicGetFlags();
extern Sprite *SuperSonicGetSprite(void);
extern u16 SuperSonicGetRotation(void);
extern void sub_802B81C(void);
extern bool32 sub_802BA8C(void);
extern void sub_802BB54(void);
extern void sub_802C704(u8 index, s32 *outX, s32 *outY);
extern void sub_802C798(void);
#endif // GUARD_PLAYER_SUPER_SONIC_H
+2
View File
@@ -79,6 +79,7 @@ extern uint8_t VRAM[VRAM_SIZE];
#define BG_VRAM VRAM
#define BG_CHAR_ADDR(n) (BG_VRAM + (0x4000 * (n)))
// TODO: Maybe rename BG_SCREEN_ADDR
#define BG_SCREEN_ADDR(n) (BG_VRAM + (0x800 * (n)))
#define BG_TILE_ADDR(n) (BG_VRAM + (0x80 * (n)))
@@ -107,6 +108,7 @@ extern uint8_t VRAM[VRAM_SIZE];
#define TOTAL_OBJ_TILE_COUNT 1024
#define RGB16(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
#define RGB16_REV(r, g, b) (((b) << 10) | ((g) << 5) | (r))
#define RGB_BLACK RGB16(0, 0, 0)
#define RGB_WHITE RGB16(31, 31, 31)
+1 -1
View File
@@ -13,7 +13,7 @@
// PACKED(struct test { char a; int b; }); - good
// PACKED(struct test { char a; int b; };); - bad
#define PACKED(name, struct_body) \
typedef struct __attribute__((packed)) struct_body name;
typedef struct __attribute__((packed)) name struct_body name;
#endif
+2
View File
@@ -21,6 +21,8 @@ typedef void (*VoidFn)(void);
#if !(defined NON_MATCHING)
#define NON_MATCHING 1
#endif
#elif defined(DEBUG)
#define NON_MATCHING 1
#endif
#ifdef NON_MATCHING
+6 -7
View File
@@ -21,7 +21,11 @@ SECTIONS
src/lib/m4a.o(.bss.code);
src/multi_boot.o(.bss);
. = 0x00000410;
. = 0x00000408;
src/game/stage/background/zone_3.o(.data);
src/game/stage/background/zone_3.o(.bss);
. = 0x00000410;
src/game/stage/collision.o(.bss);
src/lib/agb_flash.o(.bss);
@@ -227,9 +231,6 @@ SECTIONS
#endif
src/game/bosses/boss_8.o(.text);
src/game/bosses/boss_9.o(.text);
#if (CPU_ARCH_ARM == 1)
asm/boss_9.o(.text);
#endif
src/game/enemies/projectiles.o(.text);
src/game/enemies/mon.o(.text);
src/game/enemies/gohla.o(.text);
@@ -498,9 +499,7 @@ SECTIONS
asm/boss_run.o(.rodata);
#endif
src/game/bosses/boss_8.o(.rodata);
#if (CPU_ARCH_ARM == 1)
asm/boss_9.o(.rodata);
#endif
src/game/bosses/boss_9.o(.rodata);
src/game/enemies/kubinaga.o(.rodata);
src/game/enemies/koura.o(.rodata);
src/game/enemies/geji_geji.o(.rodata);
+1 -1
View File
@@ -45,7 +45,7 @@
// zone_3_act_2_bg shares the pointer with zone_3_act_1_bg.
// zone_3_act_boss_bg shares the pointer with zone_3_act_2_bg.
// zone_1_act_dummy_bg shares the pointer with zone_3_act_boss_bg.
#include "../data/tilemaps/unknown_stars/header.c"
#include "../data/tilemaps/music_plant_moving_stars/header.c"
#include "../data/maps/zone_4/act_1/tilemaps/bg/header.c"
// zone_4_act_2_bg shares the pointer with zone_4_act_1_bg.
// zone_4_act_boss_bg shares the pointer with zone_4_act_2_bg.
+3 -3
View File
@@ -770,8 +770,8 @@ static void sub_804683C(EggGoRound *boss)
}
} else {
boss->state
= sStateChoices[Mod(PseudoRandBetween(0, 255), ARRAY_COUNT(sStateChoices))];
boss->unk26 = Mod(PseudoRandBetween(0, 255), 10);
= sStateChoices[Mod(PseudoRandBetween(0, 256), ARRAY_COUNT(sStateChoices))];
boss->unk26 = Mod(PseudoRandBetween(0, 256), 10);
boss->unk1E = gUnknown_080D804E[boss->health < 5 ? 1 : 0][boss->unk26];
boss->unk24 = 30;
@@ -1047,7 +1047,7 @@ static void sub_8047138(EggGoRound *boss)
}
}
void sub_8047224(s32 dX, s32 dY)
void EggGoRoundMove(s32 dX, s32 dY)
{
DestructionProps *destruction;
EggGoRound *boss;
+1 -1
View File
@@ -956,7 +956,7 @@ static void sub_8048E64(EggFrog *boss)
}
}
void sub_8048EB4(s32 dX, s32 dY)
void EggFrogMove(s32 dX, s32 dY)
{
EggFrog *boss = TASK_DATA(gActiveBossTask);
boss->x += dX;
+8 -8
View File
@@ -1052,9 +1052,9 @@ void sub_804C080(SuperEggRoboZ *boss)
info.spawnX = gCamera.x + (rand & 0xFF);
info.spawnY = gCamera.y + (PseudoRandom32() & 0xFF);
info.velocity = Q(18. / 256.);
info.rotation = (PseudoRandBetween(0, SIN_PERIOD - 1));
info.rotation = (PseudoRandBetween(0, SIN_PERIOD));
// '= rand =' needed for matching
info.speed = rand = (PseudoRandBetween(Q(2), Q(4) - 1));
info.speed = rand = (PseudoRandBetween(Q(2), Q(4)));
info.vram = (OBJ_VRAM0 + 0x2980);
info.anim = SA2_ANIM_EXPLOSION;
info.variant = 0;
@@ -1153,8 +1153,8 @@ void sub_804C3AC(SuperEggRoboZ *boss)
Vec2_32 sp00;
Vec2_32 sp08;
sp08.x = Q(PseudoRandBetween(-3, 4));
sp08.y = Q(PseudoRandBetween(-3, 4));
sp08.x = Q(PseudoRandBetween(-3, 5));
sp08.y = Q(PseudoRandBetween(-3, 5));
gBgScrollRegs[0][0] = gCamera.x - I(boss->qPos.x + sp08.x);
gBgScrollRegs[0][1] = gCamera.y - I(boss->qPos.y + sp08.y);
@@ -1228,11 +1228,11 @@ void sub_804C5B8(SuperEggRoboZ *boss)
if (boss->unkB > 0) {
if (boss->unkB < 32) {
sp08.x = Q(PseudoRandBetween(-3, 4));
sp08.y = Q(PseudoRandBetween(-3, 4));
sp08.x = Q(PseudoRandBetween(-3, 5));
sp08.y = Q(PseudoRandBetween(-3, 5));
} else {
sp08.x = Q(PseudoRandBetween(-7, 8));
sp08.y = Q(PseudoRandBetween(-7, 8));
sp08.x = Q(PseudoRandBetween(-7, 9));
sp08.y = Q(PseudoRandBetween(-7, 9));
}
} else {
sp08.x = 0;
+2994 -115
View File
File diff suppressed because it is too large. Load diff
+3 -1
View File
@@ -29,9 +29,11 @@ const VoidFn sBossCreationFuncs[] = {
CreateEggFrog, CreateSuperEggRoboZ, CreateTrueArea53Boss,
};
// NOTE:
// "Super Egg Robo Z" does not having a 'Move' function, because it's static.
const TranslateBossFunction MoveBossPositionFuncs[] = {
EggHammerTankIIMove, EggBomberTankMove, EggTotemMove, AeroEggMove,
EggSaucerMove, sub_8047224, sub_8048EB4, sub_804D594,
EggSaucerMove, EggGoRoundMove, EggFrogMove, TrueArea53BossMove,
};
// Anims for screws etc.
+3 -3
View File
@@ -567,12 +567,12 @@ void CreateSuperSonicSpark(s32 x, s32 y)
Sprite *s;
struct Task *t
= TaskCreate(Task_SuperSonicSpark, sizeof(SuperSonicSpark), 0x7000, 0, NULL);
u32 type = PseudoRandBetween(2, 3);
u32 type = PseudoRandBetween(2, 4);
SuperSonicSpark *spark = TASK_DATA(t);
spark->animFrame = 40;
spark->x = x + (s16)Q(PseudoRandBetween(-16, 15));
spark->y = y + (s16)Q(PseudoRandBetween(-16, 15));
spark->x = x + (s16)Q(PseudoRandBetween(-16, 16));
spark->y = y + (s16)Q(PseudoRandBetween(-16, 16));
spark->speedX = 0;
spark->speedY = 0;
+16 -11
View File
@@ -77,21 +77,26 @@ static bool32 sub_8081010(Sprite_SpecialRing *ring)
if (flags & 0xF0000) {
return TRUE;
} else {
s32 somePosX, somePosY;
u16 posX, posY;
somePosX = I(cheese->posX) + 16;
somePosX -= ring->worldX;
#ifdef BUG_FIX
if (cheese != NULL)
#endif
{
s32 somePosX, somePosY;
u16 posX, posY;
somePosX = I(cheese->posX) + 16;
somePosX -= ring->worldX;
somePosY = I(cheese->posY) + 32;
somePosY -= ring->worldY;
somePosY = I(cheese->posY) + 32;
somePosY -= ring->worldY;
posY = somePosY;
posX = somePosX;
posY = somePosY;
posX = somePosX;
if ((posX <= 32) && (posY <= 32)) {
gCurTask->unk15 = 0;
if ((posX <= 32) && (posY <= 32)) {
gCurTask->unk15 = 0;
return TRUE;
return TRUE;
}
}
}
}
+10 -13
View File
@@ -8,6 +8,8 @@
#include "game/stage/background/callbacks.h"
#include "game/stage/player.h"
#include "constants/tilemaps.h"
extern const Background gStageCameraBgTemplates[4];
// TODO: make this static!
@@ -97,6 +99,8 @@ const u8 gUnknown_080D5B50[DISPLAY_HEIGHT] = {
0
};
static s16 sUnknown_03000408 = 0;
void CreateStageBg_Zone3(void)
{
Background *background = &gStageBackgroundsRam.unk0;
@@ -105,7 +109,7 @@ void CreateStageBg_Zone3(void)
*background = gStageCameraBgTemplates[3];
background->tilemapId = 0x171;
background->tilemapId = TM_MUSIC_PLANT_MOVING_STARS;
background->graphics.dest = (void *)BG_SCREEN_ADDR(24);
background->layoutVram = (void *)BG_SCREEN_ADDR(27);
background->targetTilesX = 0x20;
@@ -118,11 +122,6 @@ void CreateStageBg_Zone3(void)
gBgScrollRegs[3][1] = 0;
}
typedef struct {
u8 filler[0x408];
s16 unk408;
} Unk3000408;
// (85.02%) https://decomp.me/scratch/Esyzr
#if 01
NONMATCH("asm/non_matching/game/stage/background/StageBgUpdate_Zone3Acts12.inc",
@@ -154,15 +153,13 @@ void StageBgUpdate_Zone3Acts12(s32 a, s32 b)
if (IS_SINGLE_PLAYER) {
if ((gPlayer.moveState & MOVESTATE_8000000)
&& (gSpecialRingCount >= SPECIAL_STAGE_REQUIRED_SP_RING_COUNT)) {
Unk3000408 *unk = IWRAM_PTR(NULL);
if (unk->unk408 == 0) {
unk->unk408 = a;
if (sUnknown_03000408 == 0) {
sUnknown_03000408 = a;
}
unk->unk408 += I(gPlayer.speedGroundX);
a = unk->unk408;
sUnknown_03000408 += I(gPlayer.speedGroundX);
a = sUnknown_03000408;
} else {
Unk3000408 *unk = IWRAM_PTR(NULL);
unk->unk408 = 0;
sUnknown_03000408 = 0;
}
// _0801CC72
i = 0;
+4 -4
View File
@@ -16,20 +16,20 @@ void StageBgUpdate_ZoneFinalActTA53(void)
int_vcount y;
if (gActiveBossTask != NULL) {
Sprite_TrueArea53Boss *boss = TASK_DATA(gActiveBossTask);
TA53Boss *boss = TASK_DATA(gActiveBossTask);
aBool = boss->unk10 & 0x1;
}
if (aBool) {
u16 *ptr;
u16 *offset;
gFlags |= FLAGS_4;
gUnknown_03002878 = (void *)&REG_BG1HOFS;
gUnknown_03002A80 = 2;
ptr = (u16 *)gBgOffsetsHBlank;
offset = (u16 *)gBgOffsetsHBlank;
for (y = 0; y < DISPLAY_HEIGHT - 1; y++) {
s16 val = SIN(((y + gStageTime) * 40) & ONE_CYCLE) >> 12;
*ptr++ = val;
*offset++ = val;
}
}
}
+6 -6
View File
@@ -380,7 +380,7 @@ NONMATCH("asm/non_matching/game/super_sonic__sub_802BCCC.inc",
someY = (gUnknown_080D661C[gCurrentLevel].y);
ssx += Q(someX);
sub_804D594(Q(someX), Q(someY));
TrueArea53BossMove(Q(someX), Q(someY));
for (i = 0; i < ARRAY_COUNT(sonic->unk28); i++) {
sonic->unk28[i].x += Q(someX);
@@ -673,13 +673,13 @@ static void sub_802C55C(struct SuperSonic *sonic)
}
}
void SuperSonicGetPos(s32 *outX, s32 *outY)
void SuperSonicGetPos(s32 *qOutX, s32 *qOutY)
{
if (sSuperSonicTask) {
struct SuperSonic *sonic = TASK_DATA(sSuperSonicTask);
*outX = sonic->worldX;
*outY = sonic->worldY;
*qOutX = sonic->worldX;
*qOutY = sonic->worldY;
if (!(sonic->flags & SUPER_FLAG__10)) {
gPlayer.moveState = 0;
@@ -687,8 +687,8 @@ void SuperSonicGetPos(s32 *outX, s32 *outY)
gPlayer.moveState = MOVESTATE_DEAD;
}
} else {
*outX = 0;
*outY = 0;
*qOutX = 0;
*qOutY = 0;
gPlayer.moveState = MOVESTATE_DEAD;
}
+1 -1
View File
@@ -378,7 +378,7 @@ const Tilemap *const gTilemaps[] = {
[TM_STORYFRAME_TAILS_UNLOCK_3_DLG_ES] = &storyframe_tails_unlock_3_dlg_es,
[TM_STORYFRAME_TAILS_UNLOCKED_ES] = &storyframe_tails_unlocked_es,
[TM_REGULAR_FINAL_BOSS] = &regular_final_boss,
[TM_UNKNOWN_STARS] = &unknown_stars,
[TM_MUSIC_PLANT_MOVING_STARS] = &music_plant_moving_stars,
[TM_SKY_CANYON_CLOUDS_FOREGROUND] = &sky_canyon_clouds_foreground,
[TM_SPOTLIGHT_SNOW] = &spotlight_snow,
[TM_EXTRA_BOSS_BACKGROUND] = &zone_final_act_ta53_bg,
+1 -1
View File
@@ -22,7 +22,7 @@ void *EwramMalloc(u32 req)
return NULL;
}
return malloc(req);
return calloc(req, 1);
#else
struct EwramNode *node;
s32 requestedSpace = req;
-17
View File
@@ -37,23 +37,6 @@ const s32 gUnknown_080D8840[][2] = { { 0, 0 } };
void sub_804A6B4(struct Task *t) {};
// boss_9
const s16 gUnknown_080D8A94[4] = { 0 };
const s16 gUnknown_080D8AAC[4] = { 0 };
const s16 gUnknown_080D8AC4[4] = { 0 };
const s16 gUnknown_080D8ADC[4] = { 0 };
const s16 gUnknown_080D8AF4[4] = { 0 };
const s16 gUnknown_080D8C7C[4] = { 0 };
const s16 gUnknown_080D8C94[4] = { 0 };
const TA53_Data0 gUnknown_080D8D6C[8] = { 0 };
const TA53_Data0 gUnknown_080D8DCC[8] = { 0 };
void CreateTrueArea53Boss(void) {};
void Task_EggmanKidnapsVanilla(void) { TaskDestroy(gCurTask); }
void sub_804D594(s32 qx, s32 qy) { }
void TaskDestructor_TrueArea53BossGfx(struct Task *t) { }
void sub_8050B2C(s32 *a, s32 *b) { }
bool32 ExtraBossIsDead(void) { return TRUE; }
// math
void sub_80835E0(struct UNK_8085F1C *p0, s32 *p1) { }
void sub_8083B88(struct UNK_8085F1C_1 *p0, struct UNK_8085F1C_1 *p1,
+1 -1
View File
@@ -231,7 +231,7 @@ void *IwramMalloc(u16 req)
return NULL;
}
void *result = malloc(req);
void *result = calloc(req, 1);
assert(result != NULL);
return result;
#else