summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-09-10 12:07:57 -0400
committerscnorton <scnorton@biociphers.org>2017-09-10 12:07:57 -0400
commitdc1f3024931e92253f36f0b150fb177e418392ea (patch)
tree7fee4b538781424238cc4660f61de5a4f94a96a9
parentad5a3e758fab2a51b1624e51834cd1ef04977cd1 (diff)
Disguise effects
-rw-r--r--asm/field_effect_helpers.s128
-rw-r--r--src/field_effect_helpers.c94
2 files changed, 69 insertions, 153 deletions
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
index c5a2a0308..adb0e2ec2 100644
--- a/asm/field_effect_helpers.s
+++ b/asm/field_effect_helpers.s
@@ -6,134 +6,6 @@
.text
- thumb_func_start FldEff_TreeDisguise
-FldEff_TreeDisguise: @ 81284C4
- push {lr}
- movs r0, 0x1C
- movs r1, 0x18
- movs r2, 0x4
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end FldEff_TreeDisguise
-
- thumb_func_start FldEff_MountainDisguise
-FldEff_MountainDisguise: @ 81284D4
- push {lr}
- movs r0, 0x1D
- movs r1, 0x19
- movs r2, 0x3
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end FldEff_MountainDisguise
-
- thumb_func_start FldEff_SandDisguise
-FldEff_SandDisguise: @ 81284E4
- push {lr}
- movs r0, 0x24
- movs r1, 0x1C
- movs r2, 0x2
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end FldEff_SandDisguise
-
- thumb_func_start ShowDisguiseFieldEffect
-ShowDisguiseFieldEffect: @ 81284F4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- mov r8, r4
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r5, _08128528 @ =gFieldEffectSpawnParams
- ldrb r0, [r5]
- ldrb r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _0812852C
- adds r0, r4, 0
- bl FieldEffectActiveListRemove
- movs r0, 0x40
- b _08128598
- .align 2, 0
-_08128528: .4byte gFieldEffectSpawnParams
-_0812852C:
- ldr r1, _081285A4 @ =gFieldEffectObjectTemplatePointers
- lsls r0, r6, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- mov r1, sp
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08128594
- mov r0, sp
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _081285A8 @ =gSprites
- adds r2, r0
- movs r0, 0x3E
- adds r0, r2
- mov r12, r0
- ldrb r3, [r0]
- lsls r1, r3, 30
- lsrs r1, 31
- adds r1, 0x1
- movs r0, 0x1
- ands r1, r0
- lsls r1, 1
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- lsls r3, r7, 4
- ldrb r1, [r2, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r3
- strb r0, [r2, 0x5]
- mov r0, r8
- strh r0, [r2, 0x30]
- ldr r0, [r5]
- strh r0, [r2, 0x32]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x34]
- ldr r0, [r5, 0x8]
- strh r0, [r2, 0x36]
-_08128594:
- mov r0, sp
- ldrb r0, [r0]
-_08128598:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081285A4: .4byte gFieldEffectObjectTemplatePointers
-_081285A8: .4byte gSprites
- thumb_func_end ShowDisguiseFieldEffect
-
thumb_func_start sub_81285AC
sub_81285AC: @ 81285AC
push {r4,r5,lr}
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index 347eb18a5..da406daeb 100644
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -38,6 +38,7 @@ static void sub_8127FD4(struct MapObject *, struct Sprite *);
static void sub_812800C(struct MapObject *, struct Sprite *);
static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *);
static void sub_8128174(struct Sprite *);
+static u32 ShowDisguiseFieldEffect(u8, u8, u8);
// .rodata
@@ -251,7 +252,7 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y)
}
}
-u8 FldEff_Shadow(void)
+u32 FldEff_Shadow(void)
{
u8 mapObjectId;
const struct MapObjectGraphicsInfo *graphicsInfo;
@@ -295,7 +296,7 @@ void oamc_shadow(struct Sprite *sprite)
}
}
-u8 FldEff_TallGrass(void)
+u32 FldEff_TallGrass(void)
{
s16 x;
s16 y;
@@ -367,7 +368,7 @@ void unc_grass_normal(struct Sprite *sprite)
}
}
-u8 FldEff_JumpTallGrass(void)
+u32 FldEff_JumpTallGrass(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -404,7 +405,7 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
return MAX_SPRITES;
}
-u8 FldEff_LongGrass(void)
+u32 FldEff_LongGrass(void)
{
s16 x;
s16 y;
@@ -471,7 +472,7 @@ void unc_grass_tall(struct Sprite *sprite)
}
}
-u8 FldEff_JumpLongGrass(void)
+u32 FldEff_JumpLongGrass(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -489,7 +490,7 @@ u8 FldEff_JumpLongGrass(void)
return 0;
}
-u8 FldEff_ShortGrass(void)
+u32 FldEff_ShortGrass(void)
{
u8 mapObjectId;
struct MapObject *mapObject;
@@ -549,7 +550,7 @@ void sub_8127334(struct Sprite *sprite)
}
}
-u8 FldEff_SandFootprints(void)
+u32 FldEff_SandFootprints(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -567,7 +568,7 @@ u8 FldEff_SandFootprints(void)
return 0;
}
-u8 FldEff_DeepSandFootprints(void)
+u32 FldEff_DeepSandFootprints(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -585,7 +586,7 @@ u8 FldEff_DeepSandFootprints(void)
return spriteId;
}
-u8 FldEff_BikeTireTracks(void)
+u32 FldEff_BikeTireTracks(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -628,7 +629,7 @@ static void sub_81275C4(struct Sprite *sprite)
}
}
-u8 FldEff_Splash(void)
+u32 FldEff_Splash(void)
{
u8 mapObjectId;
struct MapObject *mapObject;
@@ -672,7 +673,7 @@ void sub_81276B4(struct Sprite *sprite)
}
}
-u8 FldEff_JumpSmallSplash(void)
+u32 FldEff_JumpSmallSplash(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -690,7 +691,7 @@ u8 FldEff_JumpSmallSplash(void)
return 0;
}
-u8 FldEff_JumpBigSplash(void)
+u32 FldEff_JumpBigSplash(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -708,7 +709,7 @@ u8 FldEff_JumpBigSplash(void)
return 0;
}
-u8 FldEff_FeetInFlowingWater(void)
+u32 FldEff_FeetInFlowingWater(void)
{
u8 mapObjectId;
struct MapObject *mapObject;
@@ -767,7 +768,7 @@ static void sub_81278D8(struct Sprite *sprite)
}
}
-u8 FldEff_Ripple(void)
+u32 FldEff_Ripple(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -783,7 +784,7 @@ u8 FldEff_Ripple(void)
return 0;
}
-u8 FldEff_HotSpringsWater(void)
+u32 FldEff_HotSpringsWater(void)
{
u8 mapObjectId;
struct MapObject *mapObject;
@@ -828,7 +829,7 @@ void sub_8127A7C(struct Sprite *sprite)
}
}
-u8 FldEff_Unknown19(void)
+u32 FldEff_Unknown19(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -845,7 +846,7 @@ u8 FldEff_Unknown19(void)
return 0;
}
-u8 FldEff_Unknown20(void)
+u32 FldEff_Unknown20(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -862,7 +863,7 @@ u8 FldEff_Unknown20(void)
return 0;
}
-u8 FldEff_Unknown21(void)
+u32 FldEff_Unknown21(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -879,7 +880,7 @@ u8 FldEff_Unknown21(void)
return 0;
}
-u8 FldEff_Unknown22(void)
+u32 FldEff_Unknown22(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -907,7 +908,7 @@ void ash(s16 x, s16 y, u16 c, s16 d)
FieldEffectStart(FLDEFF_ASH);
}
-u8 FldEff_Ash(void)
+u32 FldEff_Ash(void)
{
s16 x;
s16 y;
@@ -965,7 +966,7 @@ static void sub_8127E30(struct Sprite *sprite)
}
}
-u8 FldEff_SurfBlob(void)
+u32 FldEff_SurfBlob(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1208,7 +1209,7 @@ static void sub_8128174(struct Sprite *sprite)
}
}
-u8 FldEff_Dust(void)
+u32 FldEff_Dust(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1226,7 +1227,7 @@ u8 FldEff_Dust(void)
return 0;
}
-u8 FldEff_SandPile(void)
+u32 FldEff_SandPile(void)
{
u8 mapObjectId;
struct MapObject *mapObject;
@@ -1284,7 +1285,7 @@ void sub_81282E0(struct Sprite *sprite)
}
}
-u8 FldEff_Bubbles(void)
+u32 FldEff_Bubbles(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1312,7 +1313,7 @@ void sub_8128410(struct Sprite *sprite)
}
}
-u8 FldEff_BerryTreeGrowthSparkle(void)
+u32 FldEff_BerryTreeGrowthSparkle(void)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1329,3 +1330,46 @@ u8 FldEff_BerryTreeGrowthSparkle(void)
}
return 0;
}
+
+u32 FldEff_TreeDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 0x18, 0x04);
+}
+
+
+u32 FldEff_MountainDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 0x19, 0x03);
+}
+
+
+u32 FldEff_SandDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 0x1C, 0x02);
+}
+
+static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2], &spriteId))
+ {
+ FieldEffectActiveListRemove(fldEff);
+ return MAX_SPRITES;
+ }
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled ++;
+ sprite->oam.paletteNum = paletteNum;
+ sprite->data1 = fldEff;
+ sprite->data2 = gFieldEffectSpawnParams[0];
+ sprite->data3 = gFieldEffectSpawnParams[1];
+ sprite->data4 = gFieldEffectSpawnParams[2];
+ }
+ return spriteId;
+}
+
+