diff options
Diffstat (limited to 'asm/field_effect.s')
-rw-r--r-- | asm/field_effect.s | 501 |
1 files changed, 501 insertions, 0 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s new file mode 100644 index 000000000..c4deb8d98 --- /dev/null +++ b/asm/field_effect.s @@ -0,0 +1,501 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start FieldEffectStart +@ u8 FieldEffectStart(u8 id) +FieldEffectStart: @ 80B5B18 + push {r4,r5,lr} + sub sp, 0x8 + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + adds r0, r4, 0 + bl FieldEffectActiveListAdd + ldr r0, =gFieldEffectScriptPointers + lsls r4, 2 + adds r4, r0 + ldr r0, [r4] + str r0, [sp] + add r4, sp, 0x4 + ldr r5, =gUnknown_0855C1F0 +_080B5B36: + ldr r0, [sp] + ldrb r0, [r0] + lsls r0, 2 + adds r0, r5 + ldr r2, [r0] + mov r0, sp + adds r1, r4, 0 + bl _call_via_r2 + lsls r0, 24 + cmp r0, 0 + bne _080B5B36 + ldr r0, [sp, 0x4] + add sp, 0x8 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end FieldEffectStart + + thumb_func_start FieldEffectCmd_loadtiles +@ bool8 FieldEffectCmd_loadtiles(u8 **script, u8 *returnValue) +FieldEffectCmd_loadtiles: @ 80B5B60 + push {lr} + ldr r1, [r0] + adds r1, 0x1 + str r1, [r0] + bl FieldEffectScript_LoadTiles + movs r0, 0x1 + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_loadtiles + + thumb_func_start FieldEffectCmd_loadfadedpal +@ bool8 FieldEffectCmd_loadfadedpal(u8 **script, u8 *returnValue) +FieldEffectCmd_loadfadedpal: @ 80B5B74 + push {lr} + ldr r1, [r0] + adds r1, 0x1 + str r1, [r0] + bl FieldEffectScript_LoadFadedPalette + movs r0, 0x1 + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_loadfadedpal + + thumb_func_start FieldEffectCmd_loadpal +@ bool8 FieldEffectCmd_loadpal(u8 **script, u8 *returnValue) +FieldEffectCmd_loadpal: @ 80B5B88 + push {lr} + ldr r1, [r0] + adds r1, 0x1 + str r1, [r0] + bl FieldEffectScript_LoadPalette + movs r0, 0x1 + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_loadpal + + thumb_func_start FieldEffectCmd_callnative +@ bool8 FieldEffectCmd_callnative(u8 **script, u8 *returnValue) +FieldEffectCmd_callnative: @ 80B5B9C + push {lr} + ldr r2, [r0] + adds r2, 0x1 + str r2, [r0] + bl FieldEffectScript_CallNative + movs r0, 0x1 + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_callnative + + thumb_func_start FieldEffectCmd_end +@ bool8 FieldEffectCmd_end(u8 **script, u8 *returnValue) +FieldEffectCmd_end: @ 80B5BB0 + movs r0, 0 + bx lr + thumb_func_end FieldEffectCmd_end + + thumb_func_start FieldEffectCmd_loadgfx_callnative +@ bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u8 *returnValue) +FieldEffectCmd_loadgfx_callnative: @ 80B5BB4 + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + ldr r0, [r4] + adds r0, 0x1 + str r0, [r4] + adds r0, r4, 0 + bl FieldEffectScript_LoadTiles + adds r0, r4, 0 + bl FieldEffectScript_LoadFadedPalette + adds r0, r4, 0 + adds r1, r5, 0 + bl FieldEffectScript_CallNative + movs r0, 0x1 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_loadgfx_callnative + + thumb_func_start FieldEffectCmd_loadtiles_callnative +@ bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u8 *returnValue) +FieldEffectCmd_loadtiles_callnative: @ 80B5BDC + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + ldr r0, [r4] + adds r0, 0x1 + str r0, [r4] + adds r0, r4, 0 + bl FieldEffectScript_LoadTiles + adds r0, r4, 0 + adds r1, r5, 0 + bl FieldEffectScript_CallNative + movs r0, 0x1 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_loadtiles_callnative + + thumb_func_start FieldEffectCmd_loadfadedpal_callnative +@ bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u8 *returnValue) +FieldEffectCmd_loadfadedpal_callnative: @ 80B5C00 + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + ldr r0, [r4] + adds r0, 0x1 + str r0, [r4] + adds r0, r4, 0 + bl FieldEffectScript_LoadFadedPalette + adds r0, r4, 0 + adds r1, r5, 0 + bl FieldEffectScript_CallNative + movs r0, 0x1 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end FieldEffectCmd_loadfadedpal_callnative + + thumb_func_start FieldEffectScript_ReadWord +@ u32 FieldEffectScript_ReadWord(u8 **script) +FieldEffectScript_ReadWord: @ 80B5C24 + ldr r2, [r0] + ldrb r0, [r2] + ldrb r1, [r2, 0x1] + lsls r1, 8 + adds r0, r1 + ldrb r1, [r2, 0x2] + lsls r1, 16 + adds r0, r1 + ldrb r1, [r2, 0x3] + lsls r1, 24 + adds r0, r1 + bx lr + thumb_func_end FieldEffectScript_ReadWord + + thumb_func_start FieldEffectScript_LoadTiles +@ void FieldEffectScript_LoadTiles(u8 **script) +FieldEffectScript_LoadTiles: @ 80B5C3C + push {r4,r5,lr} + adds r4, r0, 0 + bl FieldEffectScript_ReadWord + adds r5, r0, 0 + ldrh r0, [r5, 0x6] + bl GetObjectTileRangeStartByTag + lsls r0, 16 + ldr r1, =0xffff0000 + cmp r0, r1 + bne _080B5C5A + adds r0, r5, 0 + bl LoadObjectPic +_080B5C5A: + ldr r0, [r4] + adds r0, 0x4 + str r0, [r4] + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end FieldEffectScript_LoadTiles + + thumb_func_start FieldEffectScript_LoadFadedPalette +@ void FieldEffectScript_LoadFadedPalette(u8 **script) +FieldEffectScript_LoadFadedPalette: @ 80B5C6C + push {r4,r5,lr} + adds r5, r0, 0 + bl FieldEffectScript_ReadWord + adds r4, r0, 0 + bl LoadTaggedObjectPalette + ldrh r0, [r4, 0x4] + bl IndexOfObjectPaletteTag + lsls r0, 24 + lsrs r0, 24 + bl sub_80ABE18 + ldr r0, [r5] + adds r0, 0x4 + str r0, [r5] + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end FieldEffectScript_LoadFadedPalette + + thumb_func_start FieldEffectScript_LoadPalette +@ void FieldEffectScript_LoadPalette(u8 **script) +FieldEffectScript_LoadPalette: @ 80B5C94 + push {r4,lr} + adds r4, r0, 0 + bl FieldEffectScript_ReadWord + bl LoadTaggedObjectPalette + ldr r0, [r4] + adds r0, 0x4 + str r0, [r4] + pop {r4} + pop {r0} + bx r0 + thumb_func_end FieldEffectScript_LoadPalette + + thumb_func_start FieldEffectScript_CallNative +@ void FieldEffectScript_CallNative(u8 **script, u8 *returnValue) +FieldEffectScript_CallNative: @ 80B5CAC + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + bl FieldEffectScript_ReadWord + bl _call_via_r0 + str r0, [r5] + ldr r0, [r4] + adds r0, 0x4 + str r0, [r4] + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end FieldEffectScript_CallNative + + thumb_func_start FieldEffectFreeGraphicsResources +@ void FieldEffectFreeGraphicsResources(struct obj *object) +FieldEffectFreeGraphicsResources: @ 80B5CC8 + push {r4,r5,lr} + adds r1, r0, 0 + adds r1, 0x40 + ldrh r5, [r1] + ldrb r4, [r0, 0x5] + lsrs r4, 4 + bl RemoveObjectAndFreeTiles + adds r0, r5, 0 + bl FieldEffectFreeTilesIfUnused + adds r0, r4, 0 + bl FieldEffectFreePaletteIfUnused + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end FieldEffectFreeGraphicsResources + + thumb_func_start FieldEffectStop +@ void FieldEffectStop(struct obj *object, u8 id) +FieldEffectStop: @ 80B5CEC + push {r4,lr} + lsls r4, r1, 24 + lsrs r4, 24 + bl FieldEffectFreeGraphicsResources + adds r0, r4, 0 + bl FieldEffectActiveListRemove + pop {r4} + pop {r0} + bx r0 + thumb_func_end FieldEffectStop + + thumb_func_start FieldEffectFreeTilesIfUnused +@ void FieldEffectFreeTilesIfUnused(u16 tileRangeStart) +FieldEffectFreeTilesIfUnused: @ 80B5D04 + push {r4,r5,lr} + lsls r0, 16 + lsrs r4, r0, 16 + adds r0, r4, 0 + bl GetTagByObjectTileRangeStart + lsls r0, 16 + lsrs r3, r0, 16 + ldr r0, =0x0000ffff + cmp r3, r0 + beq _080B5D58 + movs r2, 0 + ldr r5, =0x02020630 +_080B5D1E: + lsls r0, r2, 4 + adds r0, r2 + lsls r0, 2 + adds r1, r0, r5 + adds r0, r1, 0 + adds r0, 0x3E + ldrb r0, [r0] + lsls r0, 31 + cmp r0, 0 + beq _080B5D48 + adds r0, r1, 0 + adds r0, 0x3F + ldrb r0, [r0] + lsls r0, 25 + cmp r0, 0 + bge _080B5D48 + adds r0, r1, 0 + adds r0, 0x40 + ldrh r0, [r0] + cmp r4, r0 + beq _080B5D58 +_080B5D48: + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x3F + bls _080B5D1E + adds r0, r3, 0 + bl FreeObjectTilesByTag +_080B5D58: + pop {r4,r5} + pop {r0} + bx r0 + .pool + thumb_func_end FieldEffectFreeTilesIfUnused + + thumb_func_start FieldEffectFreePaletteIfUnused +@ void FieldEffectFreePaletteIfUnused(u8 paletteSlot) +FieldEffectFreePaletteIfUnused: @ 80B5D68 + push {r4-r6,lr} + lsls r0, 24 + lsrs r4, r0, 24 + adds r0, r4, 0 + bl GetObjectPaletteTagBySlot + lsls r0, 16 + lsrs r5, r0, 16 + ldr r0, =0x0000ffff + cmp r5, r0 + beq _080B5DB0 + movs r2, 0 + ldr r6, =0x02020630 + adds r3, r4, 0 +_080B5D84: + lsls r0, r2, 4 + adds r0, r2 + lsls r0, 2 + adds r1, r0, r6 + adds r0, r1, 0 + adds r0, 0x3E + ldrb r0, [r0] + lsls r0, 31 + cmp r0, 0 + beq _080B5DA0 + ldrb r0, [r1, 0x5] + lsrs r0, 4 + cmp r0, r3 + beq _080B5DB0 +_080B5DA0: + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x3F + bls _080B5D84 + adds r0, r5, 0 + bl FreeObjectPaletteByTag +_080B5DB0: + pop {r4-r6} + pop {r0} + bx r0 + .pool + thumb_func_end FieldEffectFreePaletteIfUnused + + thumb_func_start FieldEffectActiveListClear +@ void FieldEffectActiveListClear() +FieldEffectActiveListClear: @ 80B5DC0 + push {r4,lr} + movs r2, 0 + ldr r4, =0x03000f58 + movs r3, 0xFF +_080B5DC8: + adds r0, r2, r4 + ldrb r1, [r0] + orrs r1, r3 + strb r1, [r0] + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x1F + bls _080B5DC8 + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end FieldEffectActiveListClear + + thumb_func_start FieldEffectActiveListAdd +@ void FieldEffectActiveListAdd(u8 id) +FieldEffectActiveListAdd: @ 80B5DE4 + push {r4,lr} + lsls r0, 24 + lsrs r3, r0, 24 + movs r2, 0 + ldr r4, =0x03000f58 +_080B5DEE: + adds r1, r2, r4 + ldrb r0, [r1] + cmp r0, 0xFF + bne _080B5E00 + strb r3, [r1] + b _080B5E0A + .pool +_080B5E00: + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x1F + bls _080B5DEE +_080B5E0A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end FieldEffectActiveListAdd + + thumb_func_start FieldEffectActiveListRemove +@ void FieldEffectActiveListRemove(u8 id) +FieldEffectActiveListRemove: @ 80B5E10 + push {r4,r5,lr} + lsls r0, 24 + lsrs r3, r0, 24 + movs r2, 0 + ldr r4, =0x03000f58 + movs r5, 0xFF +_080B5E1C: + adds r1, r2, r4 + ldrb r0, [r1] + cmp r0, r3 + bne _080B5E30 + orrs r0, r5 + strb r0, [r1] + b _080B5E3A + .pool +_080B5E30: + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x1F + bls _080B5E1C +_080B5E3A: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end FieldEffectActiveListRemove + + thumb_func_start FieldEffectActiveListContains +@ void FieldEffectActiveListContains(u8 id) +FieldEffectActiveListContains: @ 80B5E40 + push {lr} + lsls r0, 24 + lsrs r2, r0, 24 + movs r1, 0 + ldr r3, =0x03000f58 +_080B5E4A: + adds r0, r1, r3 + ldrb r0, [r0] + cmp r0, r2 + bne _080B5E5C + movs r0, 0x1 + b _080B5E68 + .pool +_080B5E5C: + adds r0, r1, 0x1 + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0x1F + bls _080B5E4A + movs r0, 0 +_080B5E68: + pop {r1} + bx r1 + thumb_func_end FieldEffectActiveListContains + + .align 2, 0 @ Don't pad with nop. |