decompile fldeff_decoration

This commit is contained in:
sceptillion
2017-11-19 14:54:29 -08:00
parent 1c89a72946
commit 6db242de73
5 changed files with 320 additions and 913 deletions

View File

@@ -1,907 +0,0 @@
.include "constants/gba_constants.inc"
.include "constants/species_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_80C68A4
sub_80C68A4: @ 80C68A4
push {r4-r6,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r6, r2, 0
lsls r4, 16
lsrs r4, 16
lsls r5, 16
lsrs r5, 16
lsls r6, 16
lsrs r6, 16
ldr r0, _080C68E4 @ =sub_80C68EC
movs r1, 0
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _080C68E8 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
movs r0, 0
strh r4, [r1, 0x8]
strh r5, [r1, 0xA]
strh r6, [r1, 0xC]
strh r0, [r1, 0xE]
movs r0, 0x1
strh r0, [r1, 0x10]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C68E4: .4byte sub_80C68EC
_080C68E8: .4byte gTasks
thumb_func_end sub_80C68A4
thumb_func_start sub_80C68EC
sub_80C68EC: @ 80C68EC
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
ldr r1, _080C690C @ =gTasks + 0x8
adds r4, r0, r1
ldrh r1, [r4, 0x6]
movs r2, 0x6
ldrsh r0, [r4, r2]
cmp r0, 0x6
bne _080C6910
movs r0, 0
b _080C6912
.align 2, 0
_080C690C: .4byte gTasks + 0x8
_080C6910:
adds r0, r1, 0x1
_080C6912:
strh r0, [r4, 0x6]
movs r3, 0x6
ldrsh r0, [r4, r3]
cmp r0, 0
bne _080C6964
movs r1, 0x8
ldrsh r0, [r4, r1]
cmp r0, 0x2
bne _080C692C
movs r2, 0
ldrsh r0, [r4, r2]
bl DoBalloonSoundEffect
_080C692C:
movs r3, 0x2
ldrsh r0, [r4, r3]
movs r2, 0x4
ldrsh r1, [r4, r2]
ldrh r2, [r4, 0x8]
ldrh r3, [r4]
adds r2, r3
lsls r2, 16
lsrs r2, 16
bl MapGridSetMetatileIdAt
movs r1, 0x2
ldrsh r0, [r4, r1]
movs r2, 0x4
ldrsh r1, [r4, r2]
bl CurrentMapDrawMetatileAt
ldrh r1, [r4, 0x8]
movs r3, 0x8
ldrsh r0, [r4, r3]
cmp r0, 0x3
bne _080C6960
adds r0, r5, 0
bl DestroyTask
b _080C6964
_080C6960:
adds r0, r1, 0x1
strh r0, [r4, 0x8]
_080C6964:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80C68EC
thumb_func_start DoBalloonSoundEffect
DoBalloonSoundEffect: @ 80C696C
push {lr}
lsls r0, 16
asrs r1, r0, 16
movs r0, 0xCE
lsls r0, 2
cmp r1, r0
beq _080C6998
cmp r1, r0
bgt _080C6988
movs r0, 0x8A
lsls r0, 2
cmp r1, r0
beq _080C69B0
b _080C69B6
_080C6988:
movs r0, 0xCF
lsls r0, 2
cmp r1, r0
beq _080C69A0
adds r0, 0x4
cmp r1, r0
beq _080C69A8
b _080C69B6
_080C6998:
movs r0, 0x4A
bl PlaySE
b _080C69B6
_080C69A0:
movs r0, 0x4B
bl PlaySE
b _080C69B6
_080C69A8:
movs r0, 0x4C
bl PlaySE
b _080C69B6
_080C69B0:
movs r0, 0x4E
bl PlaySE
_080C69B6:
pop {r0}
bx r0
thumb_func_end DoBalloonSoundEffect
thumb_func_start FldEff_Nop47
FldEff_Nop47: @ 80C69BC
movs r0, 0
bx lr
thumb_func_end FldEff_Nop47
thumb_func_start FldEff_Nop48
FldEff_Nop48: @ 80C69C0
movs r0, 0
bx lr
thumb_func_end FldEff_Nop48
thumb_func_start sub_80C69C4
sub_80C69C4: @ 80C69C4
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
lsls r5, 16
lsrs r5, 16
lsls r4, 16
lsrs r4, 16
movs r0, 0x4D
bl PlaySE
lsls r5, 16
asrs r5, 16
lsls r4, 16
asrs r4, 16
ldr r2, _080C6A0C @ =0x00000276
adds r0, r5, 0
adds r1, r4, 0
bl MapGridSetMetatileIdAt
subs r6, r4, 0x1
ldr r2, _080C6A10 @ =0x0000026e
adds r0, r5, 0
adds r1, r6, 0
bl MapGridSetMetatileIdAt
adds r0, r5, 0
adds r1, r4, 0
bl CurrentMapDrawMetatileAt
adds r0, r5, 0
adds r1, r6, 0
bl CurrentMapDrawMetatileAt
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C6A0C: .4byte 0x00000276
_080C6A10: .4byte 0x0000026e
thumb_func_end sub_80C69C4
thumb_func_start sub_80C6A14
sub_80C6A14: @ 80C6A14
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
ldr r1, _080C6A44 @ =gTasks
lsls r0, r4, 2
adds r0, r4
lsls r0, 3
adds r1, r0, r1
ldrh r2, [r1, 0x8]
movs r3, 0x8
ldrsh r0, [r1, r3]
cmp r0, 0x7
bne _080C6A48
movs r2, 0xA
ldrsh r0, [r1, r2]
movs r3, 0xC
ldrsh r1, [r1, r3]
bl sub_80C69C4
adds r0, r4, 0
bl DestroyTask
b _080C6A4C
.align 2, 0
_080C6A44: .4byte gTasks
_080C6A48:
adds r0, r2, 0x1
strh r0, [r1, 0x8]
_080C6A4C:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80C6A14
thumb_func_start sub_80C6A54
sub_80C6A54: @ 80C6A54
push {r4-r7,lr}
lsls r0, 16
lsrs r5, r0, 16
adds r7, r5, 0
lsls r1, 16
lsrs r4, r1, 16
adds r6, r4, 0
bl player_get_direction_lower_nybble
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080C6A7C
lsls r0, r5, 16
asrs r0, 16
lsls r1, r4, 16
asrs r1, 16
bl sub_80C69C4
b _080C6A9E
_080C6A7C:
cmp r0, 0x2
bne _080C6A9E
ldr r0, _080C6AA4 @ =sub_80C6A14
movs r1, 0x5
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _080C6AA8 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
movs r0, 0
strh r0, [r1, 0x8]
strh r7, [r1, 0xA]
strh r6, [r1, 0xC]
_080C6A9E:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080C6AA4: .4byte sub_80C6A14
_080C6AA8: .4byte gTasks
thumb_func_end sub_80C6A54
thumb_func_start Task_DecorationSoundEffect
Task_DecorationSoundEffect: @ 80C6AAC
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
ldr r1, _080C6AE4 @ =gTasks
lsls r0, r4, 2
adds r0, r4
lsls r0, 3
adds r1, r0, r1
ldrh r2, [r1, 0xA]
movs r3, 0xA
ldrsh r0, [r1, r3]
cmp r0, 0x7
beq _080C6AC8
b _080C6C26
_080C6AC8:
ldr r2, _080C6AE8 @ =0xfffffd88
adds r0, r2, 0
ldrh r1, [r1, 0x8]
adds r0, r1
lsls r0, 16
asrs r0, 16
cmp r0, 0x3B
bls _080C6ADA
b _080C6C1E
_080C6ADA:
lsls r0, 2
ldr r1, _080C6AEC @ =_080C6AF0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080C6AE4: .4byte gTasks
_080C6AE8: .4byte 0xfffffd88
_080C6AEC: .4byte _080C6AF0
.align 2, 0
_080C6AF0:
.4byte _080C6BE0
.4byte _080C6BE8
.4byte _080C6BF0
.4byte _080C6BF8
.4byte _080C6C00
.4byte _080C6C08
.4byte _080C6C10
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C1E
.4byte _080C6C18
_080C6BE0:
movs r0, 0x3E
bl PlaySE
b _080C6C1E
_080C6BE8:
movs r0, 0x3F
bl PlaySE
b _080C6C1E
_080C6BF0:
movs r0, 0x40
bl PlaySE
b _080C6C1E
_080C6BF8:
movs r0, 0x41
bl PlaySE
b _080C6C1E
_080C6C00:
movs r0, 0x42
bl PlaySE
b _080C6C1E
_080C6C08:
movs r0, 0x43
bl PlaySE
b _080C6C1E
_080C6C10:
movs r0, 0x44
bl PlaySE
b _080C6C1E
_080C6C18:
movs r0, 0x45
bl PlaySE
_080C6C1E:
adds r0, r4, 0
bl DestroyTask
b _080C6C2A
_080C6C26:
adds r0, r2, 0x1
strh r0, [r1, 0xA]
_080C6C2A:
pop {r4}
pop {r0}
bx r0
thumb_func_end Task_DecorationSoundEffect
thumb_func_start DoDecorationSoundEffect
DoDecorationSoundEffect: @ 80C6C30
push {r4,lr}
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
ldr r0, _080C6C5C @ =Task_DecorationSoundEffect
movs r1, 0x5
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _080C6C60 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
movs r0, 0
strh r4, [r1, 0x8]
strh r0, [r1, 0xA]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C6C5C: .4byte Task_DecorationSoundEffect
_080C6C60: .4byte gTasks
thumb_func_end DoDecorationSoundEffect
thumb_func_start SpriteCB_YellowCave4Sparkle
SpriteCB_YellowCave4Sparkle: @ 80C6C64
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0x8
bne _080C6C7C
movs r0, 0xC3
bl PlaySE
_080C6C7C:
movs r1, 0x2E
ldrsh r0, [r4, r1]
cmp r0, 0x1F
ble _080C6C8A
adds r0, r4, 0
bl DestroySprite
_080C6C8A:
pop {r4}
pop {r0}
bx r0
thumb_func_end SpriteCB_YellowCave4Sparkle
thumb_func_start DoYellowCave4Sparkle
DoYellowCave4Sparkle: @ 80C6C90
push {r4,lr}
sub sp, 0x4
ldr r3, _080C6D28 @ =gMapObjects
ldr r2, _080C6D2C @ =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
adds r0, r3
ldrh r1, [r0, 0x10]
mov r0, sp
strh r1, [r0]
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
adds r0, r3
ldrh r0, [r0, 0x12]
mov r4, sp
adds r4, 0x2
strh r0, [r4]
mov r0, sp
adds r1, r4, 0
movs r2, 0x8
movs r3, 0x4
bl sub_8060470
ldr r0, _080C6D30 @ =gFieldEffectObjectTemplatePointers
ldr r0, [r0, 0x58]
mov r1, sp
movs r2, 0
ldrsh r1, [r1, r2]
movs r3, 0
ldrsh r2, [r4, r3]
movs r3, 0
bl CreateSpriteAtEnd
lsls r0, 24
lsrs r0, 24
cmp r0, 0x40
beq _080C6D1E
ldr r3, _080C6D34 @ =gSprites
lsls r2, r0, 4
adds r2, r0
lsls r2, 2
adds r4, r2, r3
movs r0, 0x3E
adds r0, r4
mov r12, r0
ldrb r0, [r0]
movs r1, 0x2
orrs r0, r1
mov r1, r12
strb r0, [r1]
ldrb r1, [r4, 0x5]
movs r0, 0xD
negs r0, r0
ands r0, r1
movs r1, 0x4
orrs r0, r1
movs r1, 0xF
ands r0, r1
movs r1, 0x50
orrs r0, r1
strb r0, [r4, 0x5]
adds r3, 0x1C
adds r2, r3
ldr r0, _080C6D38 @ =SpriteCB_YellowCave4Sparkle
str r0, [r2]
movs r0, 0
strh r0, [r4, 0x2E]
_080C6D1E:
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C6D28: .4byte gMapObjects
_080C6D2C: .4byte gPlayerAvatar
_080C6D30: .4byte gFieldEffectObjectTemplatePointers
_080C6D34: .4byte gSprites
_080C6D38: .4byte SpriteCB_YellowCave4Sparkle
thumb_func_end DoYellowCave4Sparkle
thumb_func_start FldEff_SandPillar
FldEff_SandPillar: @ 80C6D3C
push {r4,lr}
sub sp, 0x4
bl ScriptContext2_Enable
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
ldr r1, _080C6D78 @ =gFieldEffectArguments
mov r0, sp
movs r2, 0
ldrsh r0, [r0, r2]
str r0, [r1, 0x14]
movs r3, 0
ldrsh r0, [r4, r3]
str r0, [r1, 0x18]
bl player_get_direction_lower_nybble
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
beq _080C6DBC
cmp r0, 0x2
bgt _080C6D7C
cmp r0, 0x1
beq _080C6D86
b _080C6E4C
.align 2, 0
_080C6D78: .4byte gFieldEffectArguments
_080C6D7C:
cmp r0, 0x3
beq _080C6DEC
cmp r0, 0x4
beq _080C6E24
b _080C6E4C
_080C6D86:
ldr r0, _080C6DB0 @ =gSpriteTemplate_83D26A0
ldr r3, _080C6DB4 @ =gSprites
ldr r1, _080C6DB8 @ =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
lsls r2, 2
adds r2, r3
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 7
movs r3, 0x80
lsls r3, 12
adds r1, r3
asrs r1, 16
ldrb r2, [r2]
adds r2, 0x20
movs r3, 0
bl CreateSprite
b _080C6E4C
.align 2, 0
_080C6DB0: .4byte gSpriteTemplate_83D26A0
_080C6DB4: .4byte gSprites
_080C6DB8: .4byte gPlayerAvatar
_080C6DBC:
ldr r0, _080C6DE0 @ =gSpriteTemplate_83D26A0
ldr r3, _080C6DE4 @ =gSprites
ldr r1, _080C6DE8 @ =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
lsls r2, 2
adds r2, r3
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 7
movs r3, 0x80
lsls r3, 12
adds r1, r3
asrs r1, 16
ldrb r2, [r2]
b _080C6E0C
.align 2, 0
_080C6DE0: .4byte gSpriteTemplate_83D26A0
_080C6DE4: .4byte gSprites
_080C6DE8: .4byte gPlayerAvatar
_080C6DEC:
ldr r0, _080C6E14 @ =gSpriteTemplate_83D26A0
ldr r3, _080C6E18 @ =gSprites
ldr r1, _080C6E1C @ =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
lsls r2, 2
adds r2, r3
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 7
ldr r3, _080C6E20 @ =0xfff80000
adds r1, r3
asrs r1, 16
ldrb r2, [r2]
adds r2, 0x10
_080C6E0C:
movs r3, 0x94
bl CreateSprite
b _080C6E4C
.align 2, 0
_080C6E14: .4byte gSpriteTemplate_83D26A0
_080C6E18: .4byte gSprites
_080C6E1C: .4byte gPlayerAvatar
_080C6E20: .4byte 0xfff80000
_080C6E24:
ldr r0, _080C6E58 @ =gSpriteTemplate_83D26A0
ldr r3, _080C6E5C @ =gSprites
ldr r1, _080C6E60 @ =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
lsls r2, 2
adds r2, r3
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 7
movs r3, 0xC0
lsls r3, 13
adds r1, r3
asrs r1, 16
ldrb r2, [r2]
adds r2, 0x10
movs r3, 0x94
bl CreateSprite
_080C6E4C:
movs r0, 0
add sp, 0x4
pop {r4}
pop {r1}
bx r1
.align 2, 0
_080C6E58: .4byte gSpriteTemplate_83D26A0
_080C6E5C: .4byte gSprites
_080C6E60: .4byte gPlayerAvatar
thumb_func_end FldEff_SandPillar
thumb_func_start SpriteCB_SandPillar_0
SpriteCB_SandPillar_0: @ 80C6E64
push {r4,r5,lr}
adds r5, r0, 0
movs r0, 0x83
bl PlaySE
ldr r4, _080C6E90 @ =gFieldEffectArguments
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
subs r1, 0x1
bl MapGridGetMetatileIdAt
ldr r1, _080C6E94 @ =0x00000286
cmp r0, r1
bne _080C6E9C
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
subs r1, 0x1
ldr r2, _080C6E98 @ =0x00000e02
bl MapGridSetMetatileIdAt
b _080C6EAA
.align 2, 0
_080C6E90: .4byte gFieldEffectArguments
_080C6E94: .4byte 0x00000286
_080C6E98: .4byte 0x00000e02
_080C6E9C:
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
subs r1, 0x1
movs r2, 0xA1
lsls r2, 2
bl MapGridSetMetatileIdAt
_080C6EAA:
ldr r4, _080C6ED8 @ =gFieldEffectArguments
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
ldr r2, _080C6EDC @ =0x0000020a
bl MapGridSetMetatileIdAt
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
subs r1, 0x1
bl CurrentMapDrawMetatileAt
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
bl CurrentMapDrawMetatileAt
movs r0, 0
strh r0, [r5, 0x2E]
ldr r0, _080C6EE0 @ =SpriteCB_SandPillar_1
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080C6ED8: .4byte gFieldEffectArguments
_080C6EDC: .4byte 0x0000020a
_080C6EE0: .4byte SpriteCB_SandPillar_1
thumb_func_end SpriteCB_SandPillar_0
thumb_func_start SpriteCB_SandPillar_1
SpriteCB_SandPillar_1: @ 80C6EE4
push {r4,r5,lr}
adds r5, r0, 0
ldrh r1, [r5, 0x2E]
movs r2, 0x2E
ldrsh r0, [r5, r2]
cmp r0, 0x11
bgt _080C6EF8
adds r0, r1, 0x1
strh r0, [r5, 0x2E]
b _080C6F14
_080C6EF8:
ldr r4, _080C6F1C @ =gFieldEffectArguments
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
ldr r2, _080C6F20 @ =0x00000e8c
bl MapGridSetMetatileIdAt
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
bl CurrentMapDrawMetatileAt
movs r0, 0
strh r0, [r5, 0x2E]
ldr r0, _080C6F24 @ =SpriteCB_SandPillar_2
str r0, [r5, 0x1C]
_080C6F14:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080C6F1C: .4byte gFieldEffectArguments
_080C6F20: .4byte 0x00000e8c
_080C6F24: .4byte SpriteCB_SandPillar_2
thumb_func_end SpriteCB_SandPillar_1
thumb_func_start SpriteCB_SandPillar_2
SpriteCB_SandPillar_2: @ 80C6F28
push {lr}
movs r1, 0x34
bl FieldEffectStop
bl EnableBothScriptContexts
pop {r0}
bx r0
thumb_func_end SpriteCB_SandPillar_2
thumb_func_start GetShieldToyTVDecorationInfo
GetShieldToyTVDecorationInfo: @ 80C6F38
push {r4,lr}
sub sp, 0x4
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
mov r0, sp
movs r1, 0
ldrsh r0, [r0, r1]
movs r2, 0
ldrsh r1, [r4, r2]
bl MapGridGetMetatileIdAt
adds r1, r0, 0
ldr r0, _080C6F70 @ =0x000002f5
cmp r1, r0
beq _080C6FE8
cmp r1, r0
bgt _080C6F74
subs r0, 0x17
cmp r1, r0
beq _080C6FB0
adds r0, 0x16
cmp r1, r0
beq _080C6FDC
b _080C6FFA
.align 2, 0
_080C6F70: .4byte 0x000002f5
_080C6F74:
ldr r0, _080C6F9C @ =0x000002f6
cmp r1, r0
beq _080C6FF4
adds r0, 0x40
cmp r1, r0
bne _080C6FFA
ldr r0, _080C6FA0 @ =gStringVar1
movs r1, 0x64
movs r2, 0
movs r3, 0x3
bl ConvertIntToDecimalStringN
ldr r0, _080C6FA4 @ =gStringVar2
ldr r1, _080C6FA8 @ =gSecretBaseText_GoldRank
bl StringCopy
ldr r1, _080C6FAC @ =gScriptResult
movs r0, 0
b _080C6FF8
.align 2, 0
_080C6F9C: .4byte 0x000002f6
_080C6FA0: .4byte gStringVar1
_080C6FA4: .4byte gStringVar2
_080C6FA8: .4byte gSecretBaseText_GoldRank
_080C6FAC: .4byte gScriptResult
_080C6FB0:
ldr r0, _080C6FCC @ =gStringVar1
movs r1, 0x32
movs r2, 0
movs r3, 0x2
bl ConvertIntToDecimalStringN
ldr r0, _080C6FD0 @ =gStringVar2
ldr r1, _080C6FD4 @ =gSecretBaseText_SilverRank
bl StringCopy
ldr r1, _080C6FD8 @ =gScriptResult
movs r0, 0
b _080C6FF8
.align 2, 0
_080C6FCC: .4byte gStringVar1
_080C6FD0: .4byte gStringVar2
_080C6FD4: .4byte gSecretBaseText_SilverRank
_080C6FD8: .4byte gScriptResult
_080C6FDC:
ldr r1, _080C6FE4 @ =gScriptResult
movs r0, 0x1
b _080C6FF8
.align 2, 0
_080C6FE4: .4byte gScriptResult
_080C6FE8:
ldr r1, _080C6FF0 @ =gScriptResult
movs r0, 0x2
b _080C6FF8
.align 2, 0
_080C6FF0: .4byte gScriptResult
_080C6FF4:
ldr r1, _080C7004 @ =gScriptResult
movs r0, 0x3
_080C6FF8:
strh r0, [r1]
_080C6FFA:
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C7004: .4byte gScriptResult
thumb_func_end GetShieldToyTVDecorationInfo
.align 2, 0 @ Don't pad with nop.

View File

@@ -0,0 +1,9 @@
#ifndef GUARD_FLDEFF_DECORATION_H
#define GUARD_FLDEFF_DECORATION_H
void sub_80C68A4(s16 metatileId, s16 x, s16 y);
void sub_80C6A54(s16 x, s16 y);
void DoDecorationSoundEffect(s16 metatileId);
void DoYellowCave4Sparkle(void);
#endif // GUARD_FLDEFF_DECORATION_H

View File

@@ -161,7 +161,7 @@ SECTIONS {
asm/pc_screen_effect.o(.text);
src/field/fldeff_secretpower.o(.text);
src/field/fldeff_secret_base_pc.o(.text);
asm/fldeff_decoration.o(.text);
src/field/fldeff_decoration.o(.text);
src/field/fldeff_poison.o(.text);
src/field/fldeff_berrytree.o(.text);
src/field/fldeff_recordmixing.o(.text);

View File

@@ -0,0 +1,309 @@
#include "global.h"
#include "event_data.h"
#include "field_camera.h"
#include "field_effect.h"
#include "field_map_obj.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "text.h"
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36];
extern const struct SpriteTemplate gSpriteTemplate_83D26A0;
static void sub_80C68EC(u8);
static void DoBalloonSoundEffect(s16);
void SpriteCB_SandPillar_0(struct Sprite *);
void SpriteCB_SandPillar_1(struct Sprite *);
void SpriteCB_SandPillar_2(struct Sprite *);
void sub_80C68A4(s16 metatileId, s16 x, s16 y)
{
u8 taskId = CreateTask(sub_80C68EC, 0);
gTasks[taskId].data[0] = metatileId;
gTasks[taskId].data[1] = x;
gTasks[taskId].data[2] = y;
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = 1;
}
static void sub_80C68EC(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[3] == 6)
data[3] = 0;
else
data[3]++;
if (data[3] == 0)
{
if (data[4] == 2)
DoBalloonSoundEffect(data[0]);
MapGridSetMetatileIdAt(data[1], data[2], data[0] + data[4]);
CurrentMapDrawMetatileAt(data[1], data[2]);
if (data[4] == 3)
DestroyTask(taskId);
else
data[4]++;
}
}
static void DoBalloonSoundEffect(s16 metatileId)
{
switch (metatileId)
{
case 824:
PlaySE(SE_FUUSEN1);
break;
case 828:
PlaySE(SE_FUUSEN2);
break;
case 832:
PlaySE(SE_FUUSEN3);
break;
case 552:
PlaySE(SE_TOY_DANGO);
break;
}
}
bool8 FldEff_Nop47(void)
{
return FALSE;
}
bool8 FldEff_Nop48(void)
{
return FALSE;
}
static void sub_80C69C4(s16 x, s16 y)
{
PlaySE(SE_TOY_KABE);
MapGridSetMetatileIdAt(x, y, 630);
MapGridSetMetatileIdAt(x, y - 1, 622);
CurrentMapDrawMetatileAt(x, y);
CurrentMapDrawMetatileAt(x, y - 1);
}
static void sub_80C6A14(u8 taskId)
{
if (gTasks[taskId].data[0] == 7)
{
sub_80C69C4(gTasks[taskId].data[1], gTasks[taskId].data[2]);
DestroyTask(taskId);
}
else
{
gTasks[taskId].data[0]++;
}
}
void sub_80C6A54(s16 x, s16 y)
{
u8 dir = player_get_direction_lower_nybble();
if (dir == 1)
{
sub_80C69C4(x, y);
}
else if (dir == 2)
{
u8 taskId = CreateTask(sub_80C6A14, 5);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = x;
gTasks[taskId].data[2] = y;
}
}
static void Task_DecorationSoundEffect(u8 taskId)
{
if (gTasks[taskId].data[1] == 7)
{
switch (gTasks[taskId].data[0])
{
case 632:
PlaySE(SE_TOY_C);
break;
case 633:
PlaySE(SE_TOY_D);
break;
case 634:
PlaySE(SE_TOY_E);
break;
case 635:
PlaySE(SE_TOY_F);
break;
case 636:
PlaySE(SE_TOY_G);
break;
case 637:
PlaySE(SE_TOY_A);
break;
case 638:
PlaySE(SE_TOY_B);
break;
case 691:
PlaySE(SE_TOY_C1);
break;
}
DestroyTask(taskId);
}
else
{
gTasks[taskId].data[1]++;
}
}
void DoDecorationSoundEffect(s16 arg)
{
u8 taskId = CreateTask(Task_DecorationSoundEffect, 5);
gTasks[taskId].data[0] = arg;
gTasks[taskId].data[1] = 0;
}
void SpriteCB_YellowCave4Sparkle(struct Sprite *sprite)
{
sprite->data[0]++;
if (sprite->data[0] == 8)
PlaySE(SE_W215);
if (sprite->data[0] >= 32)
DestroySprite(sprite);
}
void DoYellowCave4Sparkle(void)
{
s16 x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x;
s16 y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y;
u8 spriteId;
sub_8060470(&x, &y, 8, 4);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].coordOffsetEnabled = TRUE;
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].oam.paletteNum = 5;
gSprites[spriteId].callback = SpriteCB_YellowCave4Sparkle;
gSprites[spriteId].data[0] = 0;
}
}
bool8 FldEff_SandPillar(void)
{
s16 x, y;
ScriptContext2_Enable();
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
gFieldEffectArguments[5] = x;
gFieldEffectArguments[6] = y;
switch (player_get_direction_lower_nybble())
{
case 1:
CreateSprite(
&gSpriteTemplate_83D26A0,
gSprites[gPlayerAvatar.spriteId].oam.x + 8,
gSprites[gPlayerAvatar.spriteId].oam.y + 32,
0);
break;
case 2:
CreateSprite(
&gSpriteTemplate_83D26A0,
gSprites[gPlayerAvatar.spriteId].oam.x + 8,
gSprites[gPlayerAvatar.spriteId].oam.y,
148);
break;
case 3:
CreateSprite(
&gSpriteTemplate_83D26A0,
gSprites[gPlayerAvatar.spriteId].oam.x - 8,
gSprites[gPlayerAvatar.spriteId].oam.y + 16,
148);
break;
case 4:
CreateSprite(
&gSpriteTemplate_83D26A0,
gSprites[gPlayerAvatar.spriteId].oam.x + 24,
gSprites[gPlayerAvatar.spriteId].oam.y + 16,
148);
break;
}
return FALSE;
}
void SpriteCB_SandPillar_0(struct Sprite *sprite)
{
PlaySE(SE_W088);
if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == 646)
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 3586);
else
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 644);
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 522);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
sprite->data[0] = 0;
sprite->callback = SpriteCB_SandPillar_1;
}
void SpriteCB_SandPillar_1(struct Sprite *sprite)
{
if (sprite->data[0] < 18)
{
sprite->data[0]++;
}
else
{
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 3724);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
sprite->data[0] = 0;
sprite->callback = SpriteCB_SandPillar_2;
}
}
void SpriteCB_SandPillar_2(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SAND_PILLAR);
EnableBothScriptContexts();
}
void GetShieldToyTVDecorationInfo(void)
{
s16 x, y;
s32 metatileId;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
metatileId = MapGridGetMetatileIdAt(x, y);
switch (metatileId)
{
case 822:
ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3);
StringCopy(gStringVar2, gSecretBaseText_GoldRank);
gScriptResult = 0;
break;
case 734:
ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2);
StringCopy(gStringVar2, gSecretBaseText_SilverRank);
gScriptResult = 0;
break;
case 756:
gScriptResult = 1;
break;
case 757:
gScriptResult = 2;
break;
case 758:
gScriptResult = 3;
break;
}
}

View File

@@ -12,6 +12,7 @@
#include "field_specials.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "fldeff_decoration.h"
#include "link.h"
#include "main.h"
#include "sound.h"
@@ -47,11 +48,6 @@ static void sub_80BCBF8(u8 taskId);
static void sub_80BCC54(u8 taskId);
static void Task_SecretBasePC_Registry(u8 taskId);
extern void DoDecorationSoundEffect(s16 metatileId);
extern void sub_80C6A54(s16 x, s16 y);
extern void sub_80C68A4(s16 metatileId, s16 x, s16 y);
extern void DoYellowCave4Sparkle(void);
extern u8 gUnknown_0815F399[];
extern u8 gUnknown_0815F49A[];
extern u8 gUnknown_020387DC;