summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_effect_helpers.s97
-rw-r--r--src/field_effect_helpers.c24
2 files changed, 24 insertions, 97 deletions
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
index 5a2c0c4fb..3e82ba573 100644
--- a/asm/field_effect_helpers.s
+++ b/asm/field_effect_helpers.s
@@ -6,103 +6,6 @@
.text
- thumb_func_start oamc_shadow
-oamc_shadow: @ 8126D10
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r5, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _08126D3E
- adds r0, r5, 0
- movs r1, 0x3
- bl FieldEffectStop
- b _08126DC4
-_08126D3E:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08126DCC @ =gMapObjects
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08126DD0 @ =gSprites
- adds r1, r0
- ldrb r0, [r1, 0x5]
- movs r2, 0xC
- ands r2, r0
- ldrb r3, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r5, 0x5]
- ldrh r0, [r1, 0x20]
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x34]
- ldrh r1, [r1, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- ldr r0, [r4]
- ldr r1, _08126DD4 @ =0x00400001
- ands r0, r1
- cmp r0, r1
- bne _08126DBC
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsPokeGrass
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- beq _08126DC4
-_08126DBC:
- adds r0, r5, 0
- movs r1, 0x3
- bl FieldEffectStop
-_08126DC4:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126DCC: .4byte gMapObjects
-_08126DD0: .4byte gSprites
-_08126DD4: .4byte 0x00400001
- thumb_func_end oamc_shadow
-
thumb_func_start FldEff_TallGrass
FldEff_TallGrass: @ 8126DD8
push {r4,r5,lr}
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index b7dded198..e10eeca52 100644
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -258,3 +258,27 @@ bool8 FldEff_Shadow(void)
}
return FALSE;
}
+
+void oamc_shadow(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ {
+ FieldEffectStop(sprite, 3);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + sprite->data3;
+ if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F))
+ {
+ FieldEffectStop(sprite, 3);
+ }
+ }
+}