diff options
-rw-r--r-- | asm/field_effect_helpers.s | 105 | ||||
-rw-r--r-- | src/field_effect_helpers.c | 30 |
2 files changed, 30 insertions, 105 deletions
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 1c799bc49..4630bf6b2 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,111 +6,6 @@ .text - thumb_func_start sub_81282E0 -sub_81282E0: @ 81282E0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0812831A - ldr r2, _08128324 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - ldrb r0, [r1, 0x2] - lsls r0, 27 - cmp r0, 0 - blt _08128328 -_0812831A: - adds r0, r4, 0 - movs r1, 0x27 - bl FieldEffectStop - b _0812839A - .align 2, 0 -_08128324: .4byte gMapObjects -_08128328: - ldr r2, _081283A4 @ =gSprites - ldrb r1, [r1, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r5, [r0, 0x22] - ldrh r6, [r0, 0x20] - movs r2, 0x20 - ldrsh r1, [r0, r2] - movs r2, 0x34 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08128350 - lsls r0, r5, 16 - asrs r0, 16 - movs r2, 0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - beq _0812836A -_08128350: - strh r6, [r4, 0x34] - strh r5, [r4, 0x36] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0812836A - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_0812836A: - strh r6, [r4, 0x20] - strh r5, [r4, 0x22] - ldr r3, _081283A4 @ =gSprites - ldr r2, _081283A8 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x43 - ldrb r0, [r0] - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C -_0812839A: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081283A4: .4byte gSprites -_081283A8: .4byte gMapObjects - thumb_func_end sub_81282E0 - thumb_func_start FldEff_Bubbles FldEff_Bubbles: @ 81283AC push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3cb89a7dc..367d08cc0 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1253,3 +1253,33 @@ u8 FldEff_SandPile(void) } return 0; } + +void sub_81282E0(struct Sprite *sprite) +{ + u8 mapObjectId; + s16 x; + s16 y; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20) + { + FieldEffectStop(sprite, FLDEFF_SAND_PILE); + } + else + { + y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y; + x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x; + if (x != sprite->data3 || y != sprite->data4) + { + sprite->data3 = x; + sprite->data4 = y; + if (sprite->animEnded) + { + StartSpriteAnim(sprite, 0); + } + } + sprite->pos1.x = x; + sprite->pos1.y = y; + sprite->subpriority = gSprites[gMapObjects[mapObjectId].spriteId].subpriority; + sub_806487C(sprite, FALSE); + } +} |