Merge pull request #523 from cbt6/field-effect-helpers
Document src/field_effect_helpers.c
This commit is contained in:
+12
-12
@@ -21,10 +21,10 @@ gFieldEffectScriptPointers::
|
||||
.4byte gFldEffScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH
|
||||
.4byte gFldEffScript_LongGrass @ FLDEFF_LONG_GRASS
|
||||
.4byte gFldEffScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS
|
||||
.4byte gFldEffScript_Unknown19 @ FLDEFF_UNKNOWN_19
|
||||
.4byte gFldEffScript_Unknown20 @ FLDEFF_UNKNOWN_20
|
||||
.4byte gFldEffScript_Unknown21 @ FLDEFF_UNKNOWN_21
|
||||
.4byte gFldEffScript_Unknown22 @ FLDEFF_UNKNOWN_22
|
||||
.4byte gFldEffScript_UnusedGrass @ FLDEFF_UNUSED_GRASS
|
||||
.4byte gFldEffScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2
|
||||
.4byte gFldEffScript_UnusedSand @ FLDEFF_UNUSED_SAND
|
||||
.4byte gFldEffScript_UnusedWaterSurfacing @ FLDEFF_UNUSED_WATER_SURFACING
|
||||
.4byte gFldEffScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE
|
||||
.4byte gFldEffScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS
|
||||
.4byte gFldEffScript_PokecenterHeal @ FLDEFF_POKECENTER_HEAL
|
||||
@@ -148,20 +148,20 @@ gFldEffScript_JumpLongGrass::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpLongGrass
|
||||
end
|
||||
|
||||
gFldEffScript_Unknown19::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Unknown19
|
||||
gFldEffScript_UnusedGrass::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass
|
||||
end
|
||||
|
||||
gFldEffScript_Unknown20::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_Unknown20
|
||||
gFldEffScript_UnusedGrass2::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass2
|
||||
end
|
||||
|
||||
gFldEffScript_Unknown21::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Unknown21
|
||||
gFldEffScript_UnusedSand::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_UnusedSand
|
||||
end
|
||||
|
||||
gFldEffScript_Unknown22::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_Unknown22
|
||||
gFldEffScript_UnusedWaterSurfacing::
|
||||
loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_UnusedWaterSurfacing
|
||||
end
|
||||
|
||||
gFldEffScript_BerryTreeGrowthSparkle::
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
#define FLDEFF_JUMP_SMALL_SPLASH 16
|
||||
#define FLDEFF_LONG_GRASS 17
|
||||
#define FLDEFF_JUMP_LONG_GRASS 18
|
||||
#define FLDEFF_UNKNOWN_19 19
|
||||
#define FLDEFF_UNKNOWN_20 20
|
||||
#define FLDEFF_UNKNOWN_21 21
|
||||
#define FLDEFF_UNKNOWN_22 22
|
||||
#define FLDEFF_UNUSED_GRASS 19
|
||||
#define FLDEFF_UNUSED_GRASS_2 20
|
||||
#define FLDEFF_UNUSED_SAND 21
|
||||
#define FLDEFF_UNUSED_WATER_SURFACING 22
|
||||
#define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23
|
||||
#define FLDEFF_DEEP_SAND_FOOTPRINTS 24
|
||||
#define FLDEFF_POKECENTER_HEAL 25
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
enum {
|
||||
BOB_NONE,
|
||||
BOB_PLAYER_AND_MON,
|
||||
BOB_MON_ONLY, // when player has jumped / flown off
|
||||
};
|
||||
|
||||
u8 CreateWarpArrowSprite(void);
|
||||
void SetSurfBlob_BobState(u8, u8);
|
||||
void SetSurfBlob_DontSyncAnim(u8, u8);
|
||||
void SetSurfBlob_BobState(u8 spriteId, u8 bobState);
|
||||
void SetSurfBlob_DontSyncAnim(u8 spriteId, bool8 value);
|
||||
void StartAshFieldEffect(s16, s16, u16, s16);
|
||||
void StartRevealDisguise(struct ObjectEvent *);
|
||||
bool8 UpdateRevealDisguise(struct ObjectEvent *);
|
||||
@@ -24,7 +24,7 @@ u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
|
||||
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
|
||||
void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y);
|
||||
void SetSpriteInvisible(u8 spriteId);
|
||||
void SetSurfBlob_PlayerOffset(u8 spriteId, u8 hasOffset, s16 offset);
|
||||
void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset);
|
||||
void UpdateJumpImpactEffect(struct Sprite * sprite);
|
||||
void UpdateShadowFieldEffect(struct Sprite * sprite);
|
||||
void UpdateBubblesFieldEffect(struct Sprite * sprite);
|
||||
|
||||
+5
-5
@@ -3055,7 +3055,7 @@ static void UseSurfEffect_5(struct Task * task)
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE;
|
||||
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
|
||||
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, 1);
|
||||
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON);
|
||||
UnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_SURF);
|
||||
@@ -3256,8 +3256,8 @@ static void FlyOutFieldEffect_BirdLeaveBall(struct Task *task)
|
||||
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
{
|
||||
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, 2);
|
||||
SetSurfBlob_DontSyncAnim(objectEvent->fieldEffectSpriteId, 0);
|
||||
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_MON_ONLY);
|
||||
SetSurfBlob_DontSyncAnim(objectEvent->fieldEffectSpriteId, FALSE);
|
||||
}
|
||||
task->tBirdSpriteId = CreateFlyBirdSprite();
|
||||
task->tState++;
|
||||
@@ -3538,7 +3538,7 @@ static void FlyInFieldEffect_BirdSwoopDown(struct Task *task)
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
|
||||
if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
SetSurfBlob_BobState(playerObj->fieldEffectSpriteId, 0);
|
||||
SetSurfBlob_BobState(playerObj->fieldEffectSpriteId, BOB_NONE);
|
||||
ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
|
||||
CameraObjectReset2();
|
||||
ObjectEventTurn(playerObj, DIR_WEST);
|
||||
@@ -3630,7 +3630,7 @@ static void FlyInFieldEffect_End(struct Task *task)
|
||||
if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
{
|
||||
state = PLAYER_AVATAR_GFX_RIDE;
|
||||
SetSurfBlob_BobState(playerObj->fieldEffectSpriteId, 1);
|
||||
SetSurfBlob_BobState(playerObj->fieldEffectSpriteId, BOB_PLAYER_AND_MON);
|
||||
}
|
||||
ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(state));
|
||||
ObjectEventTurn(playerObj, DIR_SOUTH);
|
||||
|
||||
+86
-70
@@ -3,6 +3,7 @@
|
||||
#include "event_object_movement.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_effect_helpers.h"
|
||||
#include "field_weather.h"
|
||||
#include "fieldmap.h"
|
||||
#include "metatile_behavior.h"
|
||||
@@ -800,10 +801,10 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite * sprite)
|
||||
}
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown19(void)
|
||||
u32 FldEff_UnusedGrass(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
@@ -812,15 +813,15 @@ u32 FldEff_Unknown19(void)
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_19;
|
||||
sprite->data[0] = FLDEFF_UNUSED_GRASS;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown20(void)
|
||||
u32 FldEff_UnusedGrass2(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS_2], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
@@ -829,15 +830,15 @@ u32 FldEff_Unknown20(void)
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_20;
|
||||
sprite->data[0] = FLDEFF_UNUSED_GRASS_2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown21(void)
|
||||
u32 FldEff_UnusedSand(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_SAND], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
@@ -846,15 +847,15 @@ u32 FldEff_Unknown21(void)
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_21;
|
||||
sprite->data[0] = FLDEFF_UNUSED_SAND;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown22(void)
|
||||
u32 FldEff_UnusedWaterSurfacing(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_WATER_SURFACING], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
@@ -863,7 +864,7 @@ u32 FldEff_Unknown22(void)
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_22;
|
||||
sprite->data[0] = FLDEFF_UNUSED_WATER_SURFACING;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -939,20 +940,27 @@ static void UpdateAshFieldEffect_Step2(struct Sprite * sprite)
|
||||
FieldEffectStop(sprite, FLDEFF_ASH);
|
||||
}
|
||||
|
||||
// Sprite data for surf blob
|
||||
#define sBitfield data[0]
|
||||
#define sPlayerOffset data[1]
|
||||
#define sPlayerObjectId data[2]
|
||||
#define sBobDirection data[3]
|
||||
#define sTimer data[4]
|
||||
|
||||
u32 FldEff_SurfBlob(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
|
||||
if (spriteId !=MAX_SPRITES)
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.paletteNum = 0;
|
||||
sprite->data[2] = gFieldEffectArguments[2];
|
||||
sprite->data[3] = 0;
|
||||
sprite->sPlayerObjectId = gFieldEffectArguments[2];
|
||||
sprite->sBobDirection = 0;
|
||||
sprite->data[6] = -1;
|
||||
sprite->data[7] = -1;
|
||||
}
|
||||
@@ -960,51 +968,51 @@ u32 FldEff_SurfBlob(void)
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
void SetSurfBlob_BobState(u8 spriteId, u8 value)
|
||||
void SetSurfBlob_BobState(u8 spriteId, u8 bobState)
|
||||
{
|
||||
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF);
|
||||
gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF) | (bobState & 0xF);
|
||||
}
|
||||
|
||||
void SetSurfBlob_DontSyncAnim(u8 spriteId, u8 value)
|
||||
void SetSurfBlob_DontSyncAnim(u8 spriteId, bool8 value)
|
||||
{
|
||||
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4);
|
||||
gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF0) | ((value & 0xF) << 4);
|
||||
}
|
||||
|
||||
void SetSurfBlob_PlayerOffset(u8 spriteId, u8 hasOffset, s16 offset)
|
||||
void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset)
|
||||
{
|
||||
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((hasOffset & 0xF) << 8);
|
||||
gSprites[spriteId].data[1] = offset;
|
||||
gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF00) | ((hasOffset & 0xF) << 8);
|
||||
gSprites[spriteId].sPlayerOffset = offset;
|
||||
}
|
||||
|
||||
static u8 GetSurfBlob_BobState(struct Sprite * sprite)
|
||||
static u8 GetSurfBlob_BobState(struct Sprite *sprite)
|
||||
{
|
||||
return sprite->data[0] & 0xF;
|
||||
return sprite->sBitfield & 0xF;
|
||||
}
|
||||
|
||||
static u8 GetSurfBlob_DontSyncAnim(struct Sprite * sprite)
|
||||
static bool8 GetSurfBlob_DontSyncAnim(struct Sprite *sprite)
|
||||
{
|
||||
return (sprite->data[0] & 0xF0) >> 4;
|
||||
return (sprite->sBitfield & 0xF0) >> 4;
|
||||
}
|
||||
|
||||
static u8 GetSurfBlob_HasPlayerOffset(struct Sprite * sprite)
|
||||
static bool8 GetSurfBlob_HasPlayerOffset(struct Sprite *sprite)
|
||||
{
|
||||
return (sprite->data[0] & 0xF00) >> 8;
|
||||
return (sprite->sBitfield & 0xF00) >> 8;
|
||||
}
|
||||
|
||||
void UpdateSurfBlobFieldEffect(struct Sprite * sprite)
|
||||
void UpdateSurfBlobFieldEffect(struct Sprite *sprite)
|
||||
{
|
||||
struct ObjectEvent * objectEvent;
|
||||
struct Sprite * linkedSprite;
|
||||
struct ObjectEvent *playerObject;
|
||||
struct Sprite *playerSprite;
|
||||
|
||||
objectEvent = &gObjectEvents[sprite->data[2]];
|
||||
linkedSprite = &gSprites[objectEvent->spriteId];
|
||||
SynchroniseSurfAnim(objectEvent, sprite);
|
||||
SynchroniseSurfPosition(objectEvent, sprite);
|
||||
CreateBobbingEffect(objectEvent, linkedSprite, sprite);
|
||||
sprite->oam.priority = linkedSprite->oam.priority;
|
||||
playerObject = &gObjectEvents[sprite->sPlayerObjectId];
|
||||
playerSprite = &gSprites[playerObject->spriteId];
|
||||
SynchroniseSurfAnim(playerObject, sprite);
|
||||
SynchroniseSurfPosition(playerObject, sprite);
|
||||
CreateBobbingEffect(playerObject, playerSprite, sprite);
|
||||
sprite->oam.priority = playerSprite->oam.priority;
|
||||
}
|
||||
|
||||
static void SynchroniseSurfAnim(struct ObjectEvent * objectEvent, struct Sprite * sprite)
|
||||
static void SynchroniseSurfAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
u8 surfBlobDirectionAnims[] = {
|
||||
[DIR_NONE] = 0,
|
||||
@@ -1014,62 +1022,70 @@ static void SynchroniseSurfAnim(struct ObjectEvent * objectEvent, struct Sprite
|
||||
[DIR_EAST] = 3
|
||||
};
|
||||
|
||||
if (GetSurfBlob_DontSyncAnim(sprite) == 0)
|
||||
if (GetSurfBlob_DontSyncAnim(sprite) == FALSE)
|
||||
StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[objectEvent->movementDirection]);
|
||||
}
|
||||
|
||||
void SynchroniseSurfPosition(struct ObjectEvent * objectEvent, struct Sprite * sprite)
|
||||
void SynchroniseSurfPosition(struct ObjectEvent *playerObject, struct Sprite *surfBlobSprite)
|
||||
{
|
||||
u8 i;
|
||||
s16 x = objectEvent->currentCoords.x;
|
||||
s16 y = objectEvent->currentCoords.y;
|
||||
s32 spriteY = sprite->y2;
|
||||
s16 x = playerObject->currentCoords.x;
|
||||
s16 y = playerObject->currentCoords.y;
|
||||
s32 yOffset = surfBlobSprite->y2;
|
||||
|
||||
if (spriteY == 0 && (x != sprite->data[6] || y != sprite->data[7]))
|
||||
if (yOffset == 0 && (x != surfBlobSprite->data[6] || y != surfBlobSprite->data[7]))
|
||||
{
|
||||
sprite->data[5] = spriteY;
|
||||
sprite->data[6] = x;
|
||||
sprite->data[7] = y;
|
||||
for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7])
|
||||
surfBlobSprite->data[5] = yOffset;
|
||||
surfBlobSprite->data[6] = x;
|
||||
surfBlobSprite->data[7] = y;
|
||||
for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = surfBlobSprite->data[6], y = surfBlobSprite->data[7])
|
||||
{
|
||||
MoveCoords(i, &x, &y);
|
||||
if (MapGridGetZCoordAt(x, y) == 3)
|
||||
{
|
||||
sprite->data[5]++;
|
||||
surfBlobSprite->data[5]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateBobbingEffect(struct ObjectEvent * objectEvent, struct Sprite * linkedSprite, struct Sprite * sprite)
|
||||
static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite *playerSprite, struct Sprite *surfBlobSprite)
|
||||
{
|
||||
u16 unk_83FECFA[] = {7, 15};
|
||||
u8 v0 = GetSurfBlob_BobState(sprite);
|
||||
if (v0 != 0)
|
||||
u16 intervals[] = {7, 15};
|
||||
u8 bobState = GetSurfBlob_BobState(surfBlobSprite);
|
||||
if (bobState != BOB_NONE)
|
||||
{
|
||||
if (((u16)(++ sprite->data[4]) & unk_83FECFA[sprite->data[5]]) == 0)
|
||||
// the surf blob sprite never bobs since sBobDirection will always be 0
|
||||
|
||||
if (((u16)(++surfBlobSprite->sTimer) & intervals[surfBlobSprite->data[5]]) == 0)
|
||||
surfBlobSprite->y2 += surfBlobSprite->sBobDirection;
|
||||
|
||||
if ((surfBlobSprite->sTimer & 0x1F) == 0)
|
||||
surfBlobSprite->sBobDirection = -surfBlobSprite->sBobDirection;
|
||||
|
||||
if (bobState != BOB_MON_ONLY)
|
||||
{
|
||||
sprite->y2 += sprite->data[3];
|
||||
}
|
||||
if ((sprite->data[4] & 0x1F) == 0)
|
||||
{
|
||||
sprite->data[3] = -sprite->data[3];
|
||||
}
|
||||
if (v0 != 2)
|
||||
{
|
||||
if (GetSurfBlob_HasPlayerOffset(sprite) == 0)
|
||||
linkedSprite->y2 = sprite->y2;
|
||||
if (GetSurfBlob_HasPlayerOffset(surfBlobSprite) == FALSE)
|
||||
playerSprite->y2 = surfBlobSprite->y2;
|
||||
else
|
||||
linkedSprite->y2 = sprite->data[1] + sprite->y2;
|
||||
if (sprite->animCmdIndex != 0)
|
||||
linkedSprite->y2++;
|
||||
sprite->x = linkedSprite->x;
|
||||
sprite->y = linkedSprite->y + 8;
|
||||
playerSprite->y2 = surfBlobSprite->sPlayerOffset + surfBlobSprite->y2;
|
||||
|
||||
if (surfBlobSprite->animCmdIndex != 0)
|
||||
playerSprite->y2++;
|
||||
|
||||
surfBlobSprite->x = playerSprite->x;
|
||||
surfBlobSprite->y = playerSprite->y + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#undef sBitfield
|
||||
#undef sPlayerOffset
|
||||
#undef sPlayerObjectId
|
||||
#undef sBobDirection
|
||||
#undef sTimer
|
||||
|
||||
u8 StartUnderwaterSurfBlobBobbing(u8 oldSpriteId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
@@ -1619,7 +1619,7 @@ static void Task_StopSurfingInit(u8 taskId)
|
||||
if (!ObjectEventClearHeldMovementIfFinished(playerObjEvent))
|
||||
return;
|
||||
}
|
||||
SetSurfBlob_BobState(playerObjEvent->fieldEffectSpriteId, 2);
|
||||
SetSurfBlob_BobState(playerObjEvent->fieldEffectSpriteId, BOB_MON_ONLY);
|
||||
QL_TryRecordPlayerStepWithDuration0(playerObjEvent, GetJumpSpecialWithEffectMovementAction((u8)gTasks[taskId].data[0]));
|
||||
gTasks[taskId].func = Task_WaitStopSurfing;
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ static void QL_GfxTransition_StartSurf(void)
|
||||
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
|
||||
fieldEffectId = FieldEffectStart(FLDEFF_SURF_BLOB);
|
||||
objectEvent->fieldEffectSpriteId = fieldEffectId;
|
||||
SetSurfBlob_BobState(fieldEffectId, 1);
|
||||
SetSurfBlob_BobState(fieldEffectId, BOB_PLAYER_AND_MON);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user