diff options
Diffstat (limited to 'asm/fldeff_cut.s')
-rw-r--r-- | asm/fldeff_cut.s | 797 |
1 files changed, 797 insertions, 0 deletions
diff --git a/asm/fldeff_cut.s b/asm/fldeff_cut.s new file mode 100644 index 000000000..530e8034f --- /dev/null +++ b/asm/fldeff_cut.s @@ -0,0 +1,797 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start SetUpFieldMove_Cut +SetUpFieldMove_Cut: @ 80A2504 + push {r4-r7,lr} + mov r7, r8 + push {r7} + movs r0, 0x52 + bl npc_before_player_of_type + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080A2534 + ldr r1, _080A2524 @ =gUnknown_0300485C + ldr r0, _080A2528 @ =sub_808AB90 + str r0, [r1] + ldr r1, _080A252C @ =gUnknown_03005CE4 + ldr r0, _080A2530 @ =sub_80A2634 + b _080A25A8 + .align 2, 0 +_080A2524: .4byte gUnknown_0300485C +_080A2528: .4byte sub_808AB90 +_080A252C: .4byte gUnknown_03005CE4 +_080A2530: .4byte sub_80A2634 +_080A2534: + ldr r4, _080A25B0 @ =gUnknown_0203923C + adds r1, r4, 0x2 + adds r0, r4, 0 + bl PlayerGetDestCoords + movs r7, 0 + mov r8, r4 +_080A2542: + ldr r1, _080A25B4 @ =0x0000ffff + adds r0, r7, r1 + mov r2, r8 + ldrh r2, [r2, 0x2] + adds r0, r2 + movs r6, 0 + lsls r0, 16 + asrs r5, r0, 16 +_080A2552: + ldr r1, _080A25B4 @ =0x0000ffff + adds r0, r6, r1 + mov r2, r8 + ldrh r2, [r2] + adds r0, r2 + lsls r0, 16 + asrs r4, r0, 16 + adds r0, r4, 0 + adds r1, r5, 0 + bl MapGridGetZCoordAt + lsls r0, 24 + lsrs r0, 24 + mov r2, r8 + movs r1, 0x4 + ldrsb r1, [r2, r1] + cmp r0, r1 + bne _080A25C8 + adds r0, r4, 0 + adds r1, r5, 0 + bl MapGridGetMetatileBehaviorAt + lsls r0, 24 + lsrs r4, r0, 24 + adds r0, r4, 0 + bl sub_8056E14 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + beq _080A259E + adds r0, r4, 0 + bl MetatileBehavior_IsAsh + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080A25C8 +_080A259E: + ldr r1, _080A25B8 @ =gUnknown_0300485C + ldr r0, _080A25BC @ =sub_808AB90 + str r0, [r1] + ldr r1, _080A25C0 @ =gUnknown_03005CE4 + ldr r0, _080A25C4 @ =sub_80A25E8 +_080A25A8: + str r0, [r1] + movs r0, 0x1 + b _080A25DE + .align 2, 0 +_080A25B0: .4byte gUnknown_0203923C +_080A25B4: .4byte 0x0000ffff +_080A25B8: .4byte gUnknown_0300485C +_080A25BC: .4byte sub_808AB90 +_080A25C0: .4byte gUnknown_03005CE4 +_080A25C4: .4byte sub_80A25E8 +_080A25C8: + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + cmp r6, 0x2 + bls _080A2552 + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + cmp r7, 0x2 + bls _080A2542 + movs r0, 0 +_080A25DE: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end SetUpFieldMove_Cut + + thumb_func_start sub_80A25E8 +sub_80A25E8: @ 80A25E8 + push {lr} + movs r0, 0x1 + bl FieldEffectStart + ldr r0, _080A25FC @ =gUnknown_0202FF84 + ldr r1, _080A2600 @ =gUnknown_03005CE0 + ldrb r1, [r1] + str r1, [r0] + pop {r0} + bx r0 + .align 2, 0 +_080A25FC: .4byte gUnknown_0202FF84 +_080A2600: .4byte gUnknown_03005CE0 + thumb_func_end sub_80A25E8 + + thumb_func_start FldEff_UseCutOnGrass +FldEff_UseCutOnGrass: @ 80A2604 + push {lr} + bl oei_task_add + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080A262C @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + ldr r2, _080A2630 @ =sub_80A2684 + lsrs r0, r2, 16 + strh r0, [r1, 0x18] + strh r2, [r1, 0x1A] + movs r0, 0x12 + bl sav12_xor_increment + movs r0, 0 + pop {r1} + bx r1 + .align 2, 0 +_080A262C: .4byte gTasks +_080A2630: .4byte sub_80A2684 + thumb_func_end FldEff_UseCutOnGrass + + thumb_func_start sub_80A2634 +sub_80A2634: @ 80A2634 + push {lr} + ldr r1, _080A2648 @ =gUnknown_0202FF84 + ldr r0, _080A264C @ =gUnknown_03005CE0 + ldrb r0, [r0] + str r0, [r1] + ldr r0, _080A2650 @ =UseCutScript + bl ScriptContext1_SetupScript + pop {r0} + bx r0 + .align 2, 0 +_080A2648: .4byte gUnknown_0202FF84 +_080A264C: .4byte gUnknown_03005CE0 +_080A2650: .4byte UseCutScript + thumb_func_end sub_80A2634 + + thumb_func_start FldEff_UseCutOnTree +FldEff_UseCutOnTree: @ 80A2654 + push {lr} + bl oei_task_add + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080A267C @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + ldr r2, _080A2680 @ =sub_80A2B00 + lsrs r0, r2, 16 + strh r0, [r1, 0x18] + strh r2, [r1, 0x1A] + movs r0, 0x12 + bl sav12_xor_increment + movs r0, 0 + pop {r1} + bx r1 + .align 2, 0 +_080A267C: .4byte gTasks +_080A2680: .4byte sub_80A2B00 + thumb_func_end FldEff_UseCutOnTree + + thumb_func_start sub_80A2684 +sub_80A2684: @ 80A2684 + push {lr} + movs r0, 0x1 + bl FieldEffectActiveListRemove + movs r0, 0x3A + bl FieldEffectStart + pop {r0} + bx r0 + thumb_func_end sub_80A2684 + + thumb_func_start FldEff_CutGrass +FldEff_CutGrass: @ 80A2698 + push {r4-r7,lr} + mov r7, r8 + push {r7} + movs r7, 0 + movs r0, 0x80 + bl PlaySE + ldr r4, _080A2790 @ =gUnknown_0203923C + adds r1, r4, 0x2 + adds r0, r4, 0 + bl PlayerGetDestCoords + mov r8, r4 +_080A26B2: + ldr r1, _080A2794 @ =0x0000ffff + adds r0, r7, r1 + mov r2, r8 + ldrh r2, [r2, 0x2] + adds r0, r2 + movs r6, 0 + lsls r0, 16 + asrs r5, r0, 16 +_080A26C2: + ldr r1, _080A2794 @ =0x0000ffff + adds r0, r6, r1 + mov r2, r8 + ldrh r2, [r2] + adds r0, r2 + lsls r0, 16 + asrs r4, r0, 16 + adds r0, r4, 0 + adds r1, r5, 0 + bl MapGridGetZCoordAt + lsls r0, 24 + lsrs r0, 24 + mov r2, r8 + movs r1, 0x4 + ldrsb r1, [r2, r1] + cmp r0, r1 + bne _080A270E + adds r0, r4, 0 + adds r1, r5, 0 + bl MapGridGetMetatileBehaviorAt + lsls r0, 24 + lsrs r0, 24 + bl sub_80578F8 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080A270E + adds r0, r4, 0 + adds r1, r5, 0 + bl sub_80A27A8 + adds r0, r4, 0 + adds r1, r5, 0 + bl sub_805BCC0 +_080A270E: + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + cmp r6, 0x2 + bls _080A26C2 + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + cmp r7, 0x2 + bls _080A26B2 + ldr r1, _080A2790 @ =gUnknown_0203923C + ldrh r0, [r1] + subs r0, 0x1 + lsls r0, 16 + asrs r0, 16 + ldrh r1, [r1, 0x2] + subs r1, 0x2 + lsls r1, 16 + asrs r1, 16 + bl sub_80A28F4 + bl DrawWholeMapView + movs r7, 0 + ldr r4, _080A2798 @ =gSprites +_080A2740: + ldr r0, _080A279C @ =gPlayerAvatar + ldrb r1, [r0, 0x4] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + ldrh r1, [r0, 0x2] + lsls r1, 23 + lsrs r1, 7 + movs r2, 0x80 + lsls r2, 12 + adds r1, r2 + asrs r1, 16 + ldrb r2, [r0] + adds r2, 0x14 + ldr r0, _080A27A0 @ =gSpriteTemplate_CutGrass + movs r3, 0 + bl CreateSprite + ldr r1, _080A27A4 @ =0x0201fff0 + adds r1, r7, r1 + strb r0, [r1] + ldrb r1, [r1] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + lsls r1, r7, 5 + strh r1, [r0, 0x32] + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + cmp r7, 0x7 + bls _080A2740 + movs r0, 0 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 +_080A2790: .4byte gUnknown_0203923C +_080A2794: .4byte 0x0000ffff +_080A2798: .4byte gSprites +_080A279C: .4byte gPlayerAvatar +_080A27A0: .4byte gSpriteTemplate_CutGrass +_080A27A4: .4byte 0x0201fff0 + thumb_func_end FldEff_CutGrass + + thumb_func_start sub_80A27A8 +sub_80A27A8: @ 80A27A8 + push {r4-r7,lr} + lsls r0, 16 + lsls r1, 16 + lsrs r6, r0, 16 + asrs r4, r0, 16 + lsrs r7, r1, 16 + asrs r5, r1, 16 + adds r0, r4, 0 + adds r1, r5, 0 + bl MapGridGetMetatileIdAt + adds r1, r0, 0 + ldr r0, _080A27E0 @ =0x00000207 + cmp r1, r0 + bgt _080A27F4 + subs r0, 0x1 + cmp r1, r0 + bge _080A286C + cmp r1, 0x25 + beq _080A288E + cmp r1, 0x25 + bgt _080A27E4 + cmp r1, 0xD + beq _080A2834 + cmp r1, 0x15 + beq _080A2834 + b _080A2898 + .align 2, 0 +_080A27E0: .4byte 0x00000207 +_080A27E4: + movs r0, 0xE3 + lsls r0, 1 + cmp r1, r0 + beq _080A2844 + adds r0, 0x1 + cmp r1, r0 + beq _080A284A + b _080A2898 +_080A27F4: + ldr r0, _080A280C @ =0x00000212 + cmp r1, r0 + beq _080A287C + cmp r1, r0 + bgt _080A2810 + subs r0, 0xA + cmp r1, r0 + beq _080A2834 + adds r0, 0x2 + cmp r1, r0 + beq _080A287C + b _080A2898 + .align 2, 0 +_080A280C: .4byte 0x00000212 +_080A2810: + ldr r0, _080A2824 @ =0x00000282 + cmp r1, r0 + beq _080A285C + cmp r1, r0 + bgt _080A2828 + subs r0, 0x1 + cmp r1, r0 + beq _080A2854 + b _080A2898 + .align 2, 0 +_080A2824: .4byte 0x00000282 +_080A2828: + ldr r0, _080A2830 @ =0x00000283 + cmp r1, r0 + beq _080A2864 + b _080A2898 + .align 2, 0 +_080A2830: .4byte 0x00000283 +_080A2834: + lsls r0, r6, 16 + asrs r0, 16 + lsls r1, r7, 16 + asrs r1, 16 + movs r2, 0x1 + bl MapGridSetMetatileIdAt + b _080A2898 +_080A2844: + movs r2, 0xE7 + lsls r2, 1 + b _080A286E +_080A284A: + ldr r2, _080A2850 @ =0x000001cf + b _080A286E + .align 2, 0 +_080A2850: .4byte 0x000001cf +_080A2854: + ldr r2, _080A2858 @ =0x00000279 + b _080A286E + .align 2, 0 +_080A2858: .4byte 0x00000279 +_080A285C: + ldr r2, _080A2860 @ =0x0000027a + b _080A286E + .align 2, 0 +_080A2860: .4byte 0x0000027a +_080A2864: + ldr r2, _080A2868 @ =0x0000027b + b _080A286E + .align 2, 0 +_080A2868: .4byte 0x0000027b +_080A286C: + ldr r2, _080A2878 @ =0x00000271 +_080A286E: + adds r0, r4, 0 + adds r1, r5, 0 + bl MapGridSetMetatileIdAt + b _080A2898 + .align 2, 0 +_080A2878: .4byte 0x00000271 +_080A287C: + lsls r0, r6, 16 + asrs r0, 16 + lsls r1, r7, 16 + asrs r1, 16 + movs r2, 0x86 + lsls r2, 2 + bl MapGridSetMetatileIdAt + b _080A2898 +_080A288E: + adds r0, r4, 0 + adds r1, r5, 0 + movs r2, 0xE + bl MapGridSetMetatileIdAt +_080A2898: + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80A27A8 + + thumb_func_start sub_80A28A0 +sub_80A28A0: @ 80A28A0 + push {lr} + lsls r0, 16 + asrs r0, 16 + lsls r1, 16 + asrs r1, 16 + bl MapGridGetMetatileIdAt + lsls r0, 16 + lsrs r1, r0, 16 + adds r2, r1, 0 + cmp r1, 0x1 + bne _080A28BC + movs r0, 0x1 + b _080A28EE +_080A28BC: + ldr r0, _080A28C8 @ =0x00000279 + cmp r1, r0 + bne _080A28CC + movs r0, 0x2 + b _080A28EE + .align 2, 0 +_080A28C8: .4byte 0x00000279 +_080A28CC: + ldr r0, _080A28D8 @ =0x0000027a + cmp r1, r0 + bne _080A28DC + movs r0, 0x3 + b _080A28EE + .align 2, 0 +_080A28D8: .4byte 0x0000027a +_080A28DC: + ldr r0, _080A28E8 @ =0x0000027b + cmp r2, r0 + beq _080A28EC + movs r0, 0 + b _080A28EE + .align 2, 0 +_080A28E8: .4byte 0x0000027b +_080A28EC: + movs r0, 0x4 +_080A28EE: + pop {r1} + bx r1 + thumb_func_end sub_80A28A0 + + thumb_func_start sub_80A28F4 +sub_80A28F4: @ 80A28F4 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + lsls r0, 16 + lsrs r0, 16 + mov r10, r0 + lsls r1, 16 + movs r2, 0xC0 + lsls r2, 10 + adds r0, r1, r2 + lsrs r0, 16 + mov r9, r0 + movs r4, 0 + asrs r7, r1, 16 +_080A2914: + mov r1, r10 + lsls r0, r1, 16 + asrs r0, 16 + lsls r4, 16 + asrs r1, r4, 16 + adds r0, r1 + lsls r0, 16 + lsrs r6, r0, 16 + asrs r5, r0, 16 + adds r0, r5, 0 + adds r1, r7, 0 + bl MapGridGetMetatileIdAt + mov r8, r4 + cmp r0, 0x15 + bne _080A2996 + adds r4, r7, 0x1 + lsls r1, r4, 16 + asrs r1, 16 + adds r0, r5, 0 + bl sub_80A28A0 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x2 + beq _080A296A + cmp r0, 0x2 + bgt _080A2952 + cmp r0, 0x1 + beq _080A295C + b _080A2996 +_080A2952: + cmp r0, 0x3 + beq _080A297C + cmp r0, 0x4 + beq _080A298C + b _080A2996 +_080A295C: + adds r0, r5, 0 + adds r1, r4, 0 + movs r2, 0x82 + lsls r2, 2 + bl MapGridSetMetatileIdAt + b _080A2996 +_080A296A: + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _080A2978 @ =0x00000281 + bl MapGridSetMetatileIdAt + b _080A2996 + .align 2, 0 +_080A2978: .4byte 0x00000281 +_080A297C: + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _080A2988 @ =0x00000282 + bl MapGridSetMetatileIdAt + b _080A2996 + .align 2, 0 +_080A2988: .4byte 0x00000282 +_080A298C: + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _080A2A30 @ =0x00000283 + bl MapGridSetMetatileIdAt +_080A2996: + lsls r0, r6, 16 + asrs r5, r0, 16 + mov r2, r9 + lsls r0, r2, 16 + asrs r4, r0, 16 + adds r0, r5, 0 + adds r1, r4, 0 + bl MapGridGetMetatileIdAt + cmp r0, 0x1 + bne _080A2A10 + adds r4, 0x1 + adds r0, r5, 0 + adds r1, r4, 0 + bl MapGridGetMetatileIdAt + movs r1, 0x82 + lsls r1, 2 + cmp r0, r1 + bne _080A29C8 + adds r0, r5, 0 + adds r1, r4, 0 + movs r2, 0x1 + bl MapGridSetMetatileIdAt +_080A29C8: + adds r0, r5, 0 + adds r1, r4, 0 + bl MapGridGetMetatileIdAt + ldr r1, _080A2A34 @ =0x00000281 + cmp r0, r1 + bne _080A29E0 + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _080A2A38 @ =0x00000279 + bl MapGridSetMetatileIdAt +_080A29E0: + adds r0, r5, 0 + adds r1, r4, 0 + bl MapGridGetMetatileIdAt + ldr r1, _080A2A3C @ =0x00000282 + cmp r0, r1 + bne _080A29F8 + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _080A2A40 @ =0x0000027a + bl MapGridSetMetatileIdAt +_080A29F8: + adds r0, r5, 0 + adds r1, r4, 0 + bl MapGridGetMetatileIdAt + ldr r1, _080A2A30 @ =0x00000283 + cmp r0, r1 + bne _080A2A10 + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _080A2A44 @ =0x0000027b + bl MapGridSetMetatileIdAt +_080A2A10: + movs r0, 0x80 + lsls r0, 9 + add r0, r8 + lsrs r4, r0, 16 + asrs r0, 16 + cmp r0, 0x2 + bgt _080A2A20 + b _080A2914 +_080A2A20: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080A2A30: .4byte 0x00000283 +_080A2A34: .4byte 0x00000281 +_080A2A38: .4byte 0x00000279 +_080A2A3C: .4byte 0x00000282 +_080A2A40: .4byte 0x0000027a +_080A2A44: .4byte 0x0000027b + thumb_func_end sub_80A28F4 + + thumb_func_start sub_80A2A48 +sub_80A2A48: @ 80A2A48 + movs r2, 0 + movs r1, 0x8 + strh r1, [r0, 0x2E] + strh r2, [r0, 0x30] + strh r2, [r0, 0x34] + ldr r1, _080A2A58 @ =objc_8097BBC + str r1, [r0, 0x1C] + bx lr + .align 2, 0 +_080A2A58: .4byte objc_8097BBC + thumb_func_end sub_80A2A48 + + thumb_func_start objc_8097BBC +objc_8097BBC: @ 80A2A5C + push {r4,lr} + adds r4, r0, 0 + movs r1, 0x32 + ldrsh r0, [r4, r1] + movs r2, 0x2E + ldrsh r1, [r4, r2] + bl Sin + strh r0, [r4, 0x24] + movs r1, 0x32 + ldrsh r0, [r4, r1] + movs r2, 0x2E + ldrsh r1, [r4, r2] + bl Cos + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x32] + adds r0, 0x8 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x32] + ldrh r1, [r4, 0x2E] + adds r1, 0x1 + ldrh r2, [r4, 0x34] + lsls r0, r2, 16 + asrs r0, 18 + adds r1, r0 + strh r1, [r4, 0x2E] + adds r2, 0x1 + strh r2, [r4, 0x34] + ldrh r1, [r4, 0x30] + movs r2, 0x30 + ldrsh r0, [r4, r2] + cmp r0, 0x1C + beq _080A2AA8 + adds r0, r1, 0x1 + strh r0, [r4, 0x30] + b _080A2AAC +_080A2AA8: + ldr r0, _080A2AB4 @ =sub_80A2AB8 + str r0, [r4, 0x1C] +_080A2AAC: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080A2AB4: .4byte sub_80A2AB8 + thumb_func_end objc_8097BBC + + thumb_func_start sub_80A2AB8 +sub_80A2AB8: @ 80A2AB8 + push {r4-r6,lr} + movs r4, 0x1 +_080A2ABC: + ldr r6, _080A2AF8 @ =0x0201fff0 + adds r0, r4, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r5, _080A2AFC @ =gSprites + adds r0, r5 + bl DestroySprite + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x7 + bls _080A2ABC + ldrb r1, [r6] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + movs r1, 0x3A + bl FieldEffectStop + bl sub_8064E2C + bl ScriptContext2_Disable + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080A2AF8: .4byte 0x0201fff0 +_080A2AFC: .4byte gSprites + thumb_func_end sub_80A2AB8 + + thumb_func_start sub_80A2B00 +sub_80A2B00: @ 80A2B00 + push {lr} + movs r0, 0x80 + bl PlaySE + movs r0, 0x2 + bl FieldEffectActiveListRemove + bl EnableBothScriptContexts + pop {r0} + bx r0 + thumb_func_end sub_80A2B00 + + .align 2, 0 @ Don't pad with nop. |