diff options
Diffstat (limited to 'asm/fldeff_pc.s')
-rwxr-xr-x | asm/fldeff_pc.s | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/asm/fldeff_pc.s b/asm/fldeff_pc.s new file mode 100755 index 000000000..32afe2050 --- /dev/null +++ b/asm/fldeff_pc.s @@ -0,0 +1,190 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start FldEff_PCTurnOn +FldEff_PCTurnOn: @ 80C6718 + push {r4,lr} + sub sp, 0x4 + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + ldr r0, _080C6758 @ =sub_80C6760 + movs r1, 0 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C675C @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + mov r0, sp + ldrh r0, [r0] + movs r2, 0 + strh r0, [r1, 0x8] + ldrh r0, [r4] + strh r0, [r1, 0xA] + strh r2, [r1, 0xC] + movs r0, 0 + add sp, 0x4 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C6758: .4byte sub_80C6760 +_080C675C: .4byte gTasks + thumb_func_end FldEff_PCTurnOn + + thumb_func_start sub_80C6760 +sub_80C6760: @ 80C6760 + push {r4,r5,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _080C6788 @ =gTasks + 0x8 + adds r4, r0, r1 + ldrh r0, [r4, 0x4] + subs r0, 0x4 + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x10 + bhi _080C682E + lsls r0, 2 + ldr r1, _080C678C @ =_080C6790 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080C6788: .4byte gTasks + 0x8 +_080C678C: .4byte _080C6790 + .align 2, 0 +_080C6790: + .4byte _080C67D4 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C67E2 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C67D4 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C67E2 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C6800 +_080C67D4: + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + movs r2, 0x89 + lsls r2, 2 + b _080C67EE +_080C67E2: + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + movs r2, 0x88 + lsls r2, 2 +_080C67EE: + bl MapGridSetMetatileIdAt + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + b _080C682E +_080C6800: + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + movs r2, 0x89 + lsls r2, 2 + bl MapGridSetMetatileIdAt + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + movs r0, 0x3D + bl FieldEffectActiveListRemove + bl EnableBothScriptContexts + adds r0, r5, 0 + bl DestroyTask + b _080C6834 +_080C682E: + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] +_080C6834: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80C6760 + + thumb_func_start sub_80C683C +sub_80C683C: @ 80C683C + push {r4,lr} + sub sp, 0x4 + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + movs r0, 0x3 + bl PlaySE + ldr r0, _080C6874 @ =0x00004054 + bl VarGet + lsls r0, 16 + cmp r0, 0 + bne _080C6878 + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + movs r2, 0xE2 + lsls r2, 4 + bl MapGridSetMetatileIdAt + b _080C6888 + .align 2, 0 +_080C6874: .4byte 0x00004054 +_080C6878: + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + ldr r2, _080C68A0 @ =0x00000e21 + bl MapGridSetMetatileIdAt +_080C6888: + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C68A0: .4byte 0x00000e21 + thumb_func_end sub_80C683C + + .align 2, 0 @ Don't pad with nop. |