mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
Boss 9 (#146)
* 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:
1 parent
43b4bd8fa7
commit
fcbaf7b7c1
48 files changed
+6193
-8321
No files matched your search
@@ -138,6 +138,7 @@ endif
|
||||
|
||||
ifeq ($(DEBUG),1)
|
||||
CC1FLAGS += -g3 -O0
|
||||
CPPFLAGS += -D DEBUG=1
|
||||
else
|
||||
CC1FLAGS += -O2
|
||||
endif
|
||||
|
||||
-8089
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,
|
||||
};
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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,
|
||||
};
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
File diff suppressed because it is too large.
Load diff
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 *)®_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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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] = ®ular_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
@@ -22,7 +22,7 @@ void *EwramMalloc(u32 req)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return malloc(req);
|
||||
return calloc(req, 1);
|
||||
#else
|
||||
struct EwramNode *node;
|
||||
s32 requestedSpace = req;
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user