Decompile SS Anne
This commit is contained in:
-400
@@ -5,404 +5,4 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start sub_815D334
|
|
||||||
sub_815D334: @ 815D334
|
|
||||||
push {lr}
|
|
||||||
movs r0, 0xF9
|
|
||||||
bl PlaySE
|
|
||||||
ldr r0, _0815D35C @ =sub_815D364
|
|
||||||
movs r1, 0x8
|
|
||||||
bl CreateTask
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
ldr r2, _0815D360 @ =gTasks
|
|
||||||
lsls r1, r0, 2
|
|
||||||
adds r1, r0
|
|
||||||
lsls r1, 3
|
|
||||||
adds r1, r2
|
|
||||||
movs r0, 0x32
|
|
||||||
strh r0, [r1, 0x8]
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0815D35C: .4byte sub_815D364
|
|
||||||
_0815D360: .4byte gTasks
|
|
||||||
thumb_func_end sub_815D334
|
|
||||||
|
|
||||||
thumb_func_start sub_815D364
|
|
||||||
sub_815D364: @ 815D364
|
|
||||||
push {r4,r5,lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
lsls r1, r0, 2
|
|
||||||
adds r1, r0
|
|
||||||
lsls r4, r1, 3
|
|
||||||
ldr r5, _0815D39C @ =gTasks+0x8
|
|
||||||
adds r1, r4, r5
|
|
||||||
ldrh r0, [r1]
|
|
||||||
subs r0, 0x1
|
|
||||||
strh r0, [r1]
|
|
||||||
lsls r0, 16
|
|
||||||
cmp r0, 0
|
|
||||||
bne _0815D394
|
|
||||||
ldr r0, _0815D3A0 @ =gUnknown_8479C58
|
|
||||||
bl LoadSpriteSheets
|
|
||||||
bl sub_815D498
|
|
||||||
adds r0, r5, 0
|
|
||||||
subs r0, 0x8
|
|
||||||
adds r0, r4, r0
|
|
||||||
ldr r1, _0815D3A4 @ =sub_815D3A8
|
|
||||||
str r1, [r0]
|
|
||||||
_0815D394:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0815D39C: .4byte gTasks+0x8
|
|
||||||
_0815D3A0: .4byte gUnknown_8479C58
|
|
||||||
_0815D3A4: .4byte sub_815D3A8
|
|
||||||
thumb_func_end sub_815D364
|
|
||||||
|
|
||||||
thumb_func_start sub_815D3A8
|
|
||||||
sub_815D3A8: @ 815D3A8
|
|
||||||
push {r4-r7,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
lsls r1, r0, 2
|
|
||||||
adds r1, r0
|
|
||||||
lsls r6, r1, 3
|
|
||||||
ldr r7, _0815D424 @ =gTasks+0x8
|
|
||||||
adds r5, r6, r7
|
|
||||||
ldrh r1, [r5, 0x2]
|
|
||||||
adds r1, 0x1
|
|
||||||
strh r1, [r5, 0x2]
|
|
||||||
ldrh r0, [r5, 0x4]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r5, 0x4]
|
|
||||||
lsls r1, 16
|
|
||||||
asrs r1, 16
|
|
||||||
cmp r1, 0x46
|
|
||||||
bne _0815D3D6
|
|
||||||
movs r0, 0
|
|
||||||
strh r0, [r5, 0x2]
|
|
||||||
bl sub_815D5A4
|
|
||||||
_0815D3D6:
|
|
||||||
ldr r0, _0815D428 @ =gSaveBlock1Ptr
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
ldrb r2, [r0, 0x4]
|
|
||||||
movs r0, 0x1
|
|
||||||
mov r3, sp
|
|
||||||
bl TryGetFieldObjectIdByLocalIdAndMap
|
|
||||||
mov r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _0815D42C @ =gMapObjects
|
|
||||||
adds r0, r1
|
|
||||||
ldr r2, _0815D430 @ =gSprites
|
|
||||||
ldrb r1, [r0, 0x4]
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
adds r4, r0, r2
|
|
||||||
movs r1, 0x20
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
movs r2, 0x24
|
|
||||||
ldrsh r1, [r4, r2]
|
|
||||||
adds r0, r1
|
|
||||||
movs r1, 0x78
|
|
||||||
negs r1, r1
|
|
||||||
cmp r0, r1
|
|
||||||
bge _0815D438
|
|
||||||
movs r0, 0xF9
|
|
||||||
bl PlaySE
|
|
||||||
adds r0, r7, 0
|
|
||||||
subs r0, 0x8
|
|
||||||
adds r0, r6, r0
|
|
||||||
ldr r1, _0815D434 @ =sub_815D454
|
|
||||||
str r1, [r0]
|
|
||||||
b _0815D44A
|
|
||||||
.align 2, 0
|
|
||||||
_0815D424: .4byte gTasks+0x8
|
|
||||||
_0815D428: .4byte gSaveBlock1Ptr
|
|
||||||
_0815D42C: .4byte gMapObjects
|
|
||||||
_0815D430: .4byte gSprites
|
|
||||||
_0815D434: .4byte sub_815D454
|
|
||||||
_0815D438:
|
|
||||||
movs r1, 0x4
|
|
||||||
ldrsh r0, [r5, r1]
|
|
||||||
movs r1, 0x5
|
|
||||||
bl __divsi3
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r0, 16
|
|
||||||
negs r0, r0
|
|
||||||
strh r0, [r4, 0x24]
|
|
||||||
_0815D44A:
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end sub_815D3A8
|
|
||||||
|
|
||||||
thumb_func_start sub_815D454
|
|
||||||
sub_815D454: @ 815D454
|
|
||||||
push {r4,lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r4, r0, 24
|
|
||||||
lsls r1, r4, 2
|
|
||||||
adds r1, r4
|
|
||||||
lsls r1, 3
|
|
||||||
ldr r0, _0815D490 @ =gTasks+0x8
|
|
||||||
adds r1, r0
|
|
||||||
ldrh r0, [r1, 0x6]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r1, 0x6]
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r0, 16
|
|
||||||
cmp r0, 0x28
|
|
||||||
bne _0815D48A
|
|
||||||
movs r0, 0xFA
|
|
||||||
lsls r0, 4
|
|
||||||
bl FreeSpriteTilesByTag
|
|
||||||
ldr r0, _0815D494 @ =0x00000fa1
|
|
||||||
bl FreeSpriteTilesByTag
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl DestroyTask
|
|
||||||
bl EnableBothScriptContexts
|
|
||||||
_0815D48A:
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0815D490: .4byte gTasks+0x8
|
|
||||||
_0815D494: .4byte 0x00000fa1
|
|
||||||
thumb_func_end sub_815D454
|
|
||||||
|
|
||||||
thumb_func_start sub_815D498
|
|
||||||
sub_815D498: @ 815D498
|
|
||||||
push {r4,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
ldr r0, _0815D508 @ =gSaveBlock1Ptr
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
ldrb r2, [r0, 0x4]
|
|
||||||
movs r0, 0x1
|
|
||||||
mov r3, sp
|
|
||||||
bl TryGetFieldObjectIdByLocalIdAndMap
|
|
||||||
mov r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _0815D50C @ =gMapObjects
|
|
||||||
adds r0, r1
|
|
||||||
ldr r4, _0815D510 @ =gSprites
|
|
||||||
ldrb r1, [r0, 0x4]
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r4
|
|
||||||
ldrh r1, [r0, 0x24]
|
|
||||||
ldrh r0, [r0, 0x20]
|
|
||||||
adds r1, r0
|
|
||||||
adds r1, 0x50
|
|
||||||
ldr r0, _0815D514 @ =gUnknown_8479C88
|
|
||||||
lsls r1, 16
|
|
||||||
asrs r1, 16
|
|
||||||
movs r2, 0x6D
|
|
||||||
movs r3, 0xFF
|
|
||||||
bl CreateSprite
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
lsls r1, r0, 4
|
|
||||||
adds r1, r0
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r4
|
|
||||||
ldrb r2, [r1, 0x5]
|
|
||||||
movs r0, 0xD
|
|
||||||
negs r0, r0
|
|
||||||
ands r0, r2
|
|
||||||
movs r2, 0x8
|
|
||||||
orrs r0, r2
|
|
||||||
movs r2, 0xF
|
|
||||||
ands r0, r2
|
|
||||||
movs r2, 0xA0
|
|
||||||
orrs r0, r2
|
|
||||||
strb r0, [r1, 0x5]
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0815D508: .4byte gSaveBlock1Ptr
|
|
||||||
_0815D50C: .4byte gMapObjects
|
|
||||||
_0815D510: .4byte gSprites
|
|
||||||
_0815D514: .4byte gUnknown_8479C88
|
|
||||||
thumb_func_end sub_815D498
|
|
||||||
|
|
||||||
thumb_func_start sub_815D518
|
|
||||||
sub_815D518: @ 815D518
|
|
||||||
push {r4,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
adds r4, r0, 0
|
|
||||||
ldr r0, _0815D598 @ =gSaveBlock1Ptr
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
ldrb r2, [r0, 0x4]
|
|
||||||
movs r0, 0x1
|
|
||||||
mov r3, sp
|
|
||||||
bl TryGetFieldObjectIdByLocalIdAndMap
|
|
||||||
mov r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _0815D59C @ =gMapObjects
|
|
||||||
adds r0, r1
|
|
||||||
ldr r2, _0815D5A0 @ =gSprites
|
|
||||||
ldrb r1, [r0, 0x4]
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r2
|
|
||||||
ldrh r1, [r0, 0x24]
|
|
||||||
ldrh r0, [r0, 0x20]
|
|
||||||
adds r1, r0
|
|
||||||
adds r1, 0x50
|
|
||||||
strh r1, [r4, 0x20]
|
|
||||||
movs r1, 0x2E
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
movs r1, 0x6
|
|
||||||
bl __divsi3
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r0, 16
|
|
||||||
cmp r0, 0x15
|
|
||||||
bgt _0815D56A
|
|
||||||
ldrh r0, [r4, 0x2E]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0x2E]
|
|
||||||
_0815D56A:
|
|
||||||
movs r2, 0x2E
|
|
||||||
ldrsh r0, [r4, r2]
|
|
||||||
movs r1, 0x6
|
|
||||||
bl __divsi3
|
|
||||||
strh r0, [r4, 0x24]
|
|
||||||
movs r1, 0x20
|
|
||||||
ldrsh r0, [r4, r1]
|
|
||||||
movs r2, 0x24
|
|
||||||
ldrsh r1, [r4, r2]
|
|
||||||
adds r0, r1
|
|
||||||
movs r1, 0x12
|
|
||||||
negs r1, r1
|
|
||||||
cmp r0, r1
|
|
||||||
bge _0815D58E
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl DestroySprite
|
|
||||||
_0815D58E:
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0815D598: .4byte gSaveBlock1Ptr
|
|
||||||
_0815D59C: .4byte gMapObjects
|
|
||||||
_0815D5A0: .4byte gSprites
|
|
||||||
thumb_func_end sub_815D518
|
|
||||||
|
|
||||||
thumb_func_start sub_815D5A4
|
|
||||||
sub_815D5A4: @ 815D5A4
|
|
||||||
push {r4,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
ldr r0, _0815D614 @ =gSaveBlock1Ptr
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldrb r1, [r0, 0x5]
|
|
||||||
ldrb r2, [r0, 0x4]
|
|
||||||
movs r0, 0x1
|
|
||||||
mov r3, sp
|
|
||||||
bl TryGetFieldObjectIdByLocalIdAndMap
|
|
||||||
mov r0, sp
|
|
||||||
ldrb r1, [r0]
|
|
||||||
lsls r0, r1, 3
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, _0815D618 @ =gMapObjects
|
|
||||||
adds r0, r1
|
|
||||||
ldr r4, _0815D61C @ =gSprites
|
|
||||||
ldrb r0, [r0, 0x4]
|
|
||||||
lsls r1, r0, 4
|
|
||||||
adds r1, r0
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r4
|
|
||||||
ldrh r0, [r1, 0x24]
|
|
||||||
ldrh r1, [r1, 0x20]
|
|
||||||
adds r0, r1
|
|
||||||
adds r0, 0x31
|
|
||||||
lsls r0, 16
|
|
||||||
asrs r1, r0, 16
|
|
||||||
movs r0, 0x20
|
|
||||||
negs r0, r0
|
|
||||||
cmp r1, r0
|
|
||||||
blt _0815D60C
|
|
||||||
ldr r0, _0815D620 @ =gUnknown_8479CC0
|
|
||||||
movs r2, 0x4E
|
|
||||||
movs r3, 0x8
|
|
||||||
bl CreateSprite
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r1, r0, 24
|
|
||||||
cmp r1, 0x40
|
|
||||||
beq _0815D60C
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r4
|
|
||||||
ldrb r2, [r0, 0x5]
|
|
||||||
movs r1, 0xF
|
|
||||||
ands r1, r2
|
|
||||||
movs r2, 0xA0
|
|
||||||
orrs r1, r2
|
|
||||||
strb r1, [r0, 0x5]
|
|
||||||
_0815D60C:
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0815D614: .4byte gSaveBlock1Ptr
|
|
||||||
_0815D618: .4byte gMapObjects
|
|
||||||
_0815D61C: .4byte gSprites
|
|
||||||
_0815D620: .4byte gUnknown_8479CC0
|
|
||||||
thumb_func_end sub_815D5A4
|
|
||||||
|
|
||||||
thumb_func_start sub_815D624
|
|
||||||
sub_815D624: @ 815D624
|
|
||||||
push {lr}
|
|
||||||
adds r2, r0, 0
|
|
||||||
ldrh r0, [r2, 0x2E]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r2, 0x2E]
|
|
||||||
movs r1, 0x2E
|
|
||||||
ldrsh r0, [r2, r1]
|
|
||||||
cmp r0, 0
|
|
||||||
bge _0815D638
|
|
||||||
adds r0, 0x3
|
|
||||||
_0815D638:
|
|
||||||
asrs r0, 2
|
|
||||||
strh r0, [r2, 0x24]
|
|
||||||
adds r0, r2, 0
|
|
||||||
adds r0, 0x3F
|
|
||||||
ldrb r1, [r0]
|
|
||||||
movs r0, 0x10
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _0815D650
|
|
||||||
adds r0, r2, 0
|
|
||||||
bl DestroySprite
|
|
||||||
_0815D650:
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end sub_815D624
|
|
||||||
|
|
||||||
.align 2, 0 @ Don't pad with nop.
|
.align 2, 0 @ Don't pad with nop.
|
||||||
|
|||||||
+6
-2
@@ -138,10 +138,14 @@ gUnknown_846D953:: @ 846D953
|
|||||||
.incbin "baserom.gba", 0x46D953, 0xD
|
.incbin "baserom.gba", 0x46D953, 0xD
|
||||||
|
|
||||||
gUnknown_846D960:: @ 846D960
|
gUnknown_846D960:: @ 846D960
|
||||||
.incbin "baserom.gba", 0x46D960, 0x8
|
obj_tiles gUnknown_8479688, 0, 800
|
||||||
|
|
||||||
gUnknown_846D968:: @ 846D968
|
gUnknown_846D968:: @ 846D968
|
||||||
.incbin "baserom.gba", 0x46D968, 0x40
|
obj_pal gUnknown_8479668, 800
|
||||||
|
|
||||||
|
gUnknown_846D970::
|
||||||
|
.2byte 0x0006, 0x0008, 0x0010, 0x0008, 0x0006, 0x0008, 0x000b, 0x0006, 0x0010, 0x0008, 0x0002, 0x0006
|
||||||
|
.2byte 0x0006, 0x0008, 0x0010, 0x0008, 0x0014, 0x0006, 0x0002, 0x0006, 0x0006, 0x0008, 0x000b, 0x0006, 0x0010, 0x0008, 0x0014, 0x0006
|
||||||
|
|
||||||
gUnknown_846D9A8:: @ 846D9A8
|
gUnknown_846D9A8:: @ 846D9A8
|
||||||
.incbin "baserom.gba", 0x46D9A8, 0x2C
|
.incbin "baserom.gba", 0x46D9A8, 0x2C
|
||||||
|
|||||||
+8
-7
@@ -219,16 +219,17 @@ gUnknown_84792D0:: @ 84792D0
|
|||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gUnknown_8479668:: @ 8479668
|
gUnknown_8479668:: @ 8479668
|
||||||
.incbin "baserom.gba", 0x479668, 0x5F0
|
.incbin "graphics/misc/unk_8479688.gbapal"
|
||||||
|
|
||||||
gUnknown_8479C58:: @ 8479C58
|
gUnknown_8479688::
|
||||||
.incbin "baserom.gba", 0x479C58, 0x30
|
.incbin "graphics/misc/unk_8479688.4bpp.lz"
|
||||||
|
|
||||||
gUnknown_8479C88:: @ 8479C88
|
gUnknown_8479748::
|
||||||
.incbin "baserom.gba", 0x479C88, 0x38
|
.incbin "baserom.gba", 0x479748, 0xF0
|
||||||
|
|
||||||
gUnknown_8479CC0:: @ 8479CC0
|
.section .rodata.cereader_tool
|
||||||
.incbin "baserom.gba", 0x479CC0, 0x18
|
|
||||||
|
// cereader_tool
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gUnknown_8479CD8:: @ 8479CD8
|
gUnknown_8479CD8:: @ 8479CD8
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ SSAnne_Exterior_160859:: @ 8160859
|
|||||||
call_if 4, EventScript_1608AC
|
call_if 4, EventScript_1608AC
|
||||||
fadenewbgm BGM_FRLG_SURF
|
fadenewbgm BGM_FRLG_SURF
|
||||||
delay 50
|
delay 50
|
||||||
special sub_815D334
|
special Special_SSAnneDepartureCutscene
|
||||||
waitstate
|
waitstate
|
||||||
removeobject 1
|
removeobject 1
|
||||||
applymovement 255, Movement_1608B7
|
applymovement 255, Movement_1608B7
|
||||||
|
|||||||
+1
-1
@@ -410,7 +410,7 @@ gSpecials:: @ 815FD60
|
|||||||
def_special sub_8127888
|
def_special sub_8127888
|
||||||
def_special sub_80803FC
|
def_special sub_80803FC
|
||||||
def_special sub_812B35C
|
def_special sub_812B35C
|
||||||
def_special sub_815D334
|
def_special Special_SSAnneDepartureCutscene
|
||||||
def_special sub_8149A18
|
def_special sub_8149A18
|
||||||
def_special sub_806E25C
|
def_special sub_806E25C
|
||||||
def_special sub_815D9E8
|
def_special sub_815D9E8
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ EVENTOBJGFXDIR := graphics/event_objects
|
|||||||
MISCGFXDIR := graphics/misc
|
MISCGFXDIR := graphics/misc
|
||||||
TEXTWINDOWGFXDIR := graphics/text_window
|
TEXTWINDOWGFXDIR := graphics/text_window
|
||||||
TEACHYTVGFXDIR := graphics/teachy_tv
|
TEACHYTVGFXDIR := graphics/teachy_tv
|
||||||
|
SSANNEGFXDIR := graphics/ss_anne
|
||||||
|
|
||||||
types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark
|
types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark
|
||||||
contest_types := cool beauty cute smart tough
|
contest_types := cool beauty cute smart tough
|
||||||
@@ -478,3 +479,6 @@ $(TEXTWINDOWGFXDIR)/unk_8470B0C.4bpp: %.4bpp: %.png
|
|||||||
|
|
||||||
$(TEACHYTVGFXDIR)/tiles.4bpp: %.4bpp: %.png
|
$(TEACHYTVGFXDIR)/tiles.4bpp: %.4bpp: %.png
|
||||||
$(GFX) $< $@ -num_tiles 233
|
$(GFX) $< $@ -num_tiles 233
|
||||||
|
|
||||||
|
$(SSANNEGFXDIR)/unk_8479A38.4bpp: %.4bpp: %.png
|
||||||
|
$(GFX) $< $@ -num_tiles 17
|
||||||
|
|||||||
@@ -251,7 +251,7 @@
|
|||||||
#define SE_W114 246
|
#define SE_W114 246
|
||||||
#define SE_W063B 247
|
#define SE_W063B 247
|
||||||
#define SE_CASHIER 248
|
#define SE_CASHIER 248
|
||||||
|
#define SE_SHIP_HORN 249
|
||||||
#define SE_HELP_OPEN 250
|
#define SE_HELP_OPEN 250
|
||||||
#define SE_HELP_CLOSE 251
|
#define SE_HELP_CLOSE 251
|
||||||
#define SE_HELP_PAGE 252
|
#define SE_HELP_PAGE 252
|
||||||
|
|||||||
@@ -280,6 +280,7 @@ SECTIONS {
|
|||||||
src/teachy_tv.o(.text);
|
src/teachy_tv.o(.text);
|
||||||
asm/ereader_helpers.o(.text);
|
asm/ereader_helpers.o(.text);
|
||||||
src/unk_815C980.o(.text);
|
src/unk_815C980.o(.text);
|
||||||
|
src/ss_anne.o(.text);
|
||||||
asm/ss_anne.o(.text);
|
asm/ss_anne.o(.text);
|
||||||
asm/cereader_tool.o(.text);
|
asm/cereader_tool.o(.text);
|
||||||
src/trainer_tower.o(.text);
|
src/trainer_tower.o(.text);
|
||||||
@@ -454,6 +455,8 @@ SECTIONS {
|
|||||||
src/teachy_tv.o(.rodata);
|
src/teachy_tv.o(.rodata);
|
||||||
src/unk_815C980.o(.rodata);
|
src/unk_815C980.o(.rodata);
|
||||||
data/data_8471F00.o(.rodata.8479668);
|
data/data_8471F00.o(.rodata.8479668);
|
||||||
|
src/ss_anne.o(.rodata);
|
||||||
|
data/data_8471F00.o(.rodata.cereader_tool);
|
||||||
src/trainer_tower.o(.rodata);
|
src/trainer_tower.o(.rodata);
|
||||||
data/data_8471F00.o(.rodata.after_trainer_tower);
|
data/data_8471F00.o(.rodata.after_trainer_tower);
|
||||||
src/mystery_event_msg.o(.rodata);
|
src/mystery_event_msg.o(.rodata);
|
||||||
|
|||||||
+200
@@ -0,0 +1,200 @@
|
|||||||
|
#include "global.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "sound.h"
|
||||||
|
#include "field_map_obj.h"
|
||||||
|
#include "script.h"
|
||||||
|
#include "constants/songs.h"
|
||||||
|
|
||||||
|
// Tasks governing the ship's departure after you've gotten HM01 CUT
|
||||||
|
|
||||||
|
#define SPRITE_TAG_WAKE 4000
|
||||||
|
#define SPRITE_TAG_SMOKE 4001
|
||||||
|
|
||||||
|
static void Task_SSAnneInit(u8 taskId);
|
||||||
|
static void Task_SSAnneRun(u8 taskId);
|
||||||
|
static void Task_SSAnneFinish(u8 taskId);
|
||||||
|
static void CreateWakeBehindBoat(void);
|
||||||
|
static void WakeSpriteCallback(struct Sprite * sprite);
|
||||||
|
static void CreateSmokeSprite(void);
|
||||||
|
static void SmokeSpriteCallback(struct Sprite * sprite);
|
||||||
|
|
||||||
|
static const u16 sWakeTiles[] = INCBIN_U16("graphics/ss_anne/unk_8479838.4bpp");
|
||||||
|
static const u16 sSmokeTiles[] = INCBIN_U16("graphics/ss_anne/unk_8479A38.4bpp");
|
||||||
|
|
||||||
|
static const struct SpriteSheet sSpriteSheets[] = {
|
||||||
|
{(const void *)sWakeTiles, sizeof(sWakeTiles), SPRITE_TAG_WAKE},
|
||||||
|
{(const void *)sSmokeTiles, sizeof(sSmokeTiles), SPRITE_TAG_SMOKE},
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const union AnimCmd sWakeAnim[] = {
|
||||||
|
ANIMCMD_FRAME(0, 12),
|
||||||
|
ANIMCMD_FRAME(8, 12),
|
||||||
|
ANIMCMD_JUMP(0)
|
||||||
|
};
|
||||||
|
|
||||||
|
static const union AnimCmd *const sWakeAnimTable[] = {
|
||||||
|
sWakeAnim
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct OamData sWakeOamData = {
|
||||||
|
.shape = ST_OAM_V_RECTANGLE,
|
||||||
|
.size = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct SpriteTemplate sWakeSpriteTemplate = {
|
||||||
|
SPRITE_TAG_WAKE,
|
||||||
|
0xFFFF,
|
||||||
|
&sWakeOamData,
|
||||||
|
sWakeAnimTable,
|
||||||
|
NULL,
|
||||||
|
gDummySpriteAffineAnimTable,
|
||||||
|
WakeSpriteCallback
|
||||||
|
};
|
||||||
|
|
||||||
|
static const union AnimCmd sSmokeAnim[] = {
|
||||||
|
ANIMCMD_FRAME( 0, 10),
|
||||||
|
ANIMCMD_FRAME( 4, 20),
|
||||||
|
ANIMCMD_FRAME( 8, 20),
|
||||||
|
ANIMCMD_FRAME(12, 30),
|
||||||
|
ANIMCMD_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static const union AnimCmd *const sSmokeAnimTable[] = {
|
||||||
|
sSmokeAnim
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct OamData sSmokeOamData = {
|
||||||
|
.shape = ST_OAM_SQUARE,
|
||||||
|
.size = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct SpriteTemplate sSmokeSpriteTemplate = {
|
||||||
|
SPRITE_TAG_SMOKE,
|
||||||
|
0xFFFF,
|
||||||
|
&sSmokeOamData,
|
||||||
|
sSmokeAnimTable,
|
||||||
|
NULL,
|
||||||
|
gDummySpriteAffineAnimTable,
|
||||||
|
SmokeSpriteCallback
|
||||||
|
};
|
||||||
|
|
||||||
|
void Special_SSAnneDepartureCutscene(void)
|
||||||
|
{
|
||||||
|
u8 taskId;
|
||||||
|
|
||||||
|
PlaySE(SE_SHIP_HORN);
|
||||||
|
taskId = CreateTask(Task_SSAnneInit, 8);
|
||||||
|
gTasks[taskId].data[0] = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Task_SSAnneInit(u8 taskId)
|
||||||
|
{
|
||||||
|
s16 * data = gTasks[taskId].data;
|
||||||
|
|
||||||
|
if (--data[0] == 0)
|
||||||
|
{
|
||||||
|
LoadSpriteSheets(sSpriteSheets);
|
||||||
|
CreateWakeBehindBoat();
|
||||||
|
gTasks[taskId].func = Task_SSAnneRun;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Task_SSAnneRun(u8 taskId)
|
||||||
|
{
|
||||||
|
s16 * data = gTasks[taskId].data;
|
||||||
|
u8 mapObjectId;
|
||||||
|
struct MapObject * boatObject;
|
||||||
|
s16 x;
|
||||||
|
|
||||||
|
data[1]++;
|
||||||
|
data[2]++;
|
||||||
|
if (data[1] == 70)
|
||||||
|
{
|
||||||
|
data[1] = 0;
|
||||||
|
CreateSmokeSprite();
|
||||||
|
}
|
||||||
|
TryGetFieldObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectId);
|
||||||
|
boatObject = &gMapObjects[mapObjectId];
|
||||||
|
if (gSprites[boatObject->spriteId].pos1.x + gSprites[boatObject->spriteId].pos2.x < -120)
|
||||||
|
{
|
||||||
|
PlaySE(SE_SHIP_HORN);
|
||||||
|
gTasks[taskId].func = Task_SSAnneFinish;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = data[2] / 5;
|
||||||
|
gSprites[boatObject->spriteId].pos2.x = -x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Task_SSAnneFinish(u8 taskId)
|
||||||
|
{
|
||||||
|
s16 * data = gTasks[taskId].data;
|
||||||
|
|
||||||
|
if (++data[3] == 40)
|
||||||
|
{
|
||||||
|
FreeSpriteTilesByTag(SPRITE_TAG_WAKE);
|
||||||
|
FreeSpriteTilesByTag(SPRITE_TAG_SMOKE);
|
||||||
|
DestroyTask(taskId);
|
||||||
|
EnableBothScriptContexts();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CreateWakeBehindBoat(void)
|
||||||
|
{
|
||||||
|
u8 mapObjectId;
|
||||||
|
struct MapObject * boatObject;
|
||||||
|
u16 x;
|
||||||
|
u8 spriteId;
|
||||||
|
|
||||||
|
TryGetFieldObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectId);
|
||||||
|
boatObject = &gMapObjects[mapObjectId];
|
||||||
|
x = gSprites[boatObject->spriteId].pos1.x + gSprites[boatObject->spriteId].pos2.x + 80;
|
||||||
|
spriteId = CreateSprite(&sWakeSpriteTemplate, x, 109, 0xFF);
|
||||||
|
gSprites[spriteId].oam.priority = 2;
|
||||||
|
gSprites[spriteId].oam.paletteNum = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void WakeSpriteCallback(struct Sprite * sprite)
|
||||||
|
{
|
||||||
|
u8 mapObjectId;
|
||||||
|
struct MapObject * boatObject;
|
||||||
|
u16 x;
|
||||||
|
|
||||||
|
TryGetFieldObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectId);
|
||||||
|
boatObject = &gMapObjects[mapObjectId];
|
||||||
|
x = gSprites[boatObject->spriteId].pos1.x + gSprites[boatObject->spriteId].pos2.x + 80;
|
||||||
|
sprite->pos1.x = x;
|
||||||
|
if (sprite->data[0] / 6 < 22)
|
||||||
|
sprite->data[0]++;
|
||||||
|
sprite->pos2.x = sprite->data[0] / 6;
|
||||||
|
if (sprite->pos1.x + sprite->pos2.x < -18)
|
||||||
|
DestroySprite(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CreateSmokeSprite(void)
|
||||||
|
{
|
||||||
|
u8 mapObjectId;
|
||||||
|
struct MapObject * boatObject;
|
||||||
|
u16 x;
|
||||||
|
u8 spriteId;
|
||||||
|
|
||||||
|
TryGetFieldObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectId);
|
||||||
|
boatObject = &gMapObjects[mapObjectId];
|
||||||
|
x = gSprites[boatObject->spriteId].pos1.x + gSprites[boatObject->spriteId].pos2.x + 49;
|
||||||
|
if ((s16)x >= -32)
|
||||||
|
{
|
||||||
|
spriteId = CreateSprite(&sSmokeSpriteTemplate, x, 78, 8);
|
||||||
|
if (spriteId != MAX_SPRITES)
|
||||||
|
gSprites[spriteId].oam.paletteNum = 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SmokeSpriteCallback(struct Sprite * sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0]++;
|
||||||
|
sprite->pos2.x = sprite->data[0] / 4;
|
||||||
|
if (sprite->animEnded)
|
||||||
|
DestroySprite(sprite);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user