diff options
-rwxr-xr-x | asm/fldeff_decoration.s | 907 | ||||
-rw-r--r-- | include/fldeff_decoration.h | 9 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field/fldeff_decoration.c | 309 | ||||
-rw-r--r-- | src/field/secret_base.c | 6 |
5 files changed, 320 insertions, 913 deletions
diff --git a/asm/fldeff_decoration.s b/asm/fldeff_decoration.s deleted file mode 100755 index 38c5a6e61..000000000 --- a/asm/fldeff_decoration.s +++ /dev/null @@ -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. diff --git a/include/fldeff_decoration.h b/include/fldeff_decoration.h new file mode 100644 index 000000000..50b075b89 --- /dev/null +++ b/include/fldeff_decoration.h @@ -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 diff --git a/ld_script.txt b/ld_script.txt index 21c80dcc4..631ec894a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -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); diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c new file mode 100644 index 000000000..d754aed43 --- /dev/null +++ b/src/field/fldeff_decoration.c @@ -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; + } +} diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 8c1b7c8c1..34352f39a 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -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; |