diff --git a/asm/code_08078778.s b/asm/code_08078778.s index dfdd37f6..c4a20565 100644 --- a/asm/code_08078778.s +++ b/asm/code_08078778.s @@ -5113,7 +5113,7 @@ _0807AEA8: bne _0807AEDE adds r0, r4, #0 movs r1, #4 - bl sub_080A2A84 + bl CreateRandomWaterTrace b _0807AEDE .align 2, 0 _0807AEC8: .4byte gRoomTransition diff --git a/asm/non_matching/lilypadLarge/sub_080855E8.inc b/asm/non_matching/lilypadLarge/sub_080855E8.inc index 36a3e7e8..2c8e391c 100644 --- a/asm/non_matching/lilypadLarge/sub_080855E8.inc +++ b/asm/non_matching/lilypadLarge/sub_080855E8.inc @@ -288,7 +288,7 @@ _08085808: cmp r0, #0 bne _0808581A adds r0, r7, #0 - bl sub_080A2AD4 + bl CreateLargeWaterTrace _0808581A: ldr r0, [r7, #0x2c] ldr r1, [r7, #0x6c] diff --git a/asm/object/object37.s b/asm/object/object37.s index 2d133d7e..40535c2b 100644 --- a/asm/object/object37.s +++ b/asm/object/object37.s @@ -63,7 +63,7 @@ sub_0808BE2C: @ 0x0808BE2C adds r0, r2, #0 movs r1, #0x58 movs r2, #0 - bl sub_080A2A20 + bl CreateGroundItem adds r1, r0, #0 cmp r1, #0 beq _0808BE6C diff --git a/asm/objectUtils.s b/asm/objectUtils.s index f90b70e4..e29638fa 100644 --- a/asm/objectUtils.s +++ b/asm/objectUtils.s @@ -5,66 +5,7 @@ .text - thumb_func_start sub_080A2A84 -sub_080A2A84: @ 0x080A2A84 - push {r4, r5, r6, r7, lr} - adds r5, r1, #0 - bl CreateWaterTrace - adds r6, r0, #0 - cmp r6, #0 - beq _080A2AD2 - bl Random - adds r4, r0, #0 - adds r5, #1 - adds r1, r5, #0 - bl __modsi3 - adds r1, r0, #0 - lsrs r4, r4, #8 - movs r7, #1 - adds r0, r4, #0 - ands r0, r7 - cmp r0, #0 - beq _080A2AB0 - rsbs r1, r1, #0 -_080A2AB0: - ldrh r0, [r6, #0x2e] - adds r0, r0, r1 - strh r0, [r6, #0x2e] - lsrs r4, r4, #8 - adds r0, r4, #0 - adds r1, r5, #0 - bl __modsi3 - adds r1, r0, #0 - lsrs r4, r4, #8 - ands r4, r7 - cmp r4, #0 - beq _080A2ACC - rsbs r1, r1, #0 -_080A2ACC: - ldrh r0, [r6, #0x32] - adds r0, r0, r1 - strh r0, [r6, #0x32] -_080A2AD2: - pop {r4, r5, r6, r7, pc} - thumb_func_start sub_080A2AD4 -sub_080A2AD4: @ 0x080A2AD4 - push {lr} - movs r1, #0x21 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _080A2AF0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r0, [r3] - movs r1, #7 - orrs r0, r1 - strb r0, [r3] -_080A2AF0: - adds r0, r2, #0 - pop {pc} thumb_func_start sub_080A2AF4 sub_080A2AF4: @ 0x080A2AF4 @@ -73,7 +14,7 @@ sub_080A2AF4: @ 0x080A2AF4 push {r7} adds r5, r1, #0 adds r4, r2, #0 - bl sub_080A2AD4 + bl CreateLargeWaterTrace adds r6, r0, #0 cmp r6, #0 beq _080A2B74 diff --git a/include/functions.h b/include/functions.h index 4762afda..7b55c2d6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -198,9 +198,9 @@ extern void sub_0809EABC(Entity*); extern void sub_0809EAD8(Entity*); extern void sub_0809EB30(Entity*); extern void sub_080A1ED0(u32, u32, u32); -extern Entity* sub_080A2A20(Entity*, u32, u32); -extern Entity* sub_080A2A3C(Entity*, u32, u32, u32); -extern Entity* sub_080A2AD4(Entity*); +extern Entity* CreateGroundItem(Entity*, u32, u32); +extern Entity* CreateGroundItemWithFlags(Entity*, u32, u32, u32); +extern Entity* CreateLargeWaterTrace(Entity*); extern void sub_080A2AF4(Entity*, u32, u32); extern void sub_080A2CC0(Entity*, Entity**, u16*); extern void sub_080A57F4(void); diff --git a/src/object/bigIceBlock.c b/src/object/bigIceBlock.c index 916f83fa..b5580c12 100644 --- a/src/object/bigIceBlock.c +++ b/src/object/bigIceBlock.c @@ -91,7 +91,7 @@ void BigIceBlock_Action2(BigIceBlockEntity* this) { if (super->type != 2) { SetFlag(this->unk_86); } else { - sub_080A2A3C(super, 0x53, 0, this->unk_86); + CreateGroundItemWithFlags(super, 0x53, 0, this->unk_86); } } super->action = 3; diff --git a/src/object/object68.c b/src/object/object68.c index b178b6ba..83913606 100644 --- a/src/object/object68.c +++ b/src/object/object68.c @@ -66,7 +66,7 @@ void sub_08094774(Object68Entity* this) { } break; case 2: - child = sub_080A2A20(&gPlayerEntity, 0x60, 0); + child = CreateGroundItem(&gPlayerEntity, 0x60, 0); super->child = child; if (child != NULL) { child->actionDelay = 1; diff --git a/src/object/smallIceBlock.c b/src/object/smallIceBlock.c index e5c467cc..9e2cf781 100644 --- a/src/object/smallIceBlock.c +++ b/src/object/smallIceBlock.c @@ -138,10 +138,10 @@ void SmallIceBlock_Action3(SmallIceBlockEntity* this) { } sub_0805EC9C(super, 0x100, gUnk_08123748[super->actionDelay >> 5], 0); if (super->type == 1) { - sub_080A2A3C(super, 0x53, 0, this->unk_86); + CreateGroundItemWithFlags(super, 0x53, 0, this->unk_86); SoundReq(SFX_SECRET); } else if (super->type == 2) { - sub_080A2A3C(super, 0x52, 0, this->unk_86); + CreateGroundItemWithFlags(super, 0x52, 0, this->unk_86); SoundReq(SFX_SECRET); } super->action = 4; diff --git a/src/objectUtils.c b/src/objectUtils.c index 745bd0fd..f394b912 100644 --- a/src/objectUtils.c +++ b/src/objectUtils.c @@ -97,20 +97,20 @@ u32 LoadObjectSprite(Entity* this, s32 type, const ObjectDefinition* definition) return 2; } -Entity* CreateObject(u32 subtype, u32 form, u32 parameter) { +Entity* CreateObject(u32 subtype, u32 form, u32 type2) { Entity* entity = GetEmptyEntity(); if (entity != NULL) { entity->kind = OBJECT; entity->id = subtype; entity->type = form; - entity->type2 = parameter; + entity->type2 = type2; AppendEntityToList(entity, 6); } return entity; } -Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter) { - Entity* entity = CreateObject(subtype, form, parameter); +Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 type2) { + Entity* entity = CreateObject(subtype, form, type2); if (entity != NULL) { entity->parent = parent; CopyPosition(parent, entity); @@ -150,23 +150,23 @@ void CreateWaterSplash(Entity* parent) { CreateFx(parent, FX_WATER_SPLASH, 0); } -Entity* sub_080A2A20(Entity* parent, u32 form, u32 parameter) { +Entity* CreateGroundItem(Entity* parent, u32 form, u32 subtype) { Entity* ent; - ent = CreateObjectWithParent(parent, GROUND_ITEM, form, parameter); + ent = CreateObjectWithParent(parent, GROUND_ITEM, form, subtype); if (ent != NULL) { ent->actionDelay = 5; } return ent; } -Entity* sub_080A2A3C(Entity* parent, u32 form, u32 subtype, u32 param_4) { +Entity* CreateGroundItemWithFlags(Entity* parent, u32 form, u32 subtype, u32 flags) { Entity* ent; ent = CreateObjectWithParent(parent, GROUND_ITEM, form, subtype); if (ent != NULL) { ent->actionDelay = 5; - ent->field_0x86.HWORD = param_4; + ent->field_0x86.HWORD = flags; } return ent; } @@ -180,3 +180,37 @@ Entity* CreateWaterTrace(Entity* parent) { } return ent; } + +void CreateRandomWaterTrace(Entity* parent, int range) { + s32 sVar1, sVar2, sVar3; + Entity* ent; + u32 uVar3; + + ent = CreateWaterTrace(parent); + if (ent != NULL) { + uVar3 = Random(); + sVar1 = (int)uVar3 % (++range); + uVar3 >>= 8; + if ((uVar3 & 1) != 0) { + sVar1 = -sVar1; + } + ent->x.HALF.HI += sVar1; + uVar3 >>= 8; + sVar2 = (int)uVar3 % range; + uVar3 >>= 8; + if ((uVar3 & 1) != 0) { + sVar2 = -sVar2; + } + ent->y.HALF.HI += sVar2; + } +} + +Entity* CreateLargeWaterTrace(Entity* parent) { + Entity* ent; + + ent = CreateFx(parent, FX_RIPPLE_LARGE, 0); + if (ent != NULL) { + ent->spritePriority.b0 = 7; + } + return ent; +}