diff --git a/src/k_kart.c b/src/k_kart.c index 7297f46ae..03dd6c79f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3763,59 +3763,56 @@ void K_SpawnBoostTrail(player_t *player) } } -mobj_t *K_SpawnSparkleTrail(mobj_t *mo) +void K_SpawnSparkleTrail(mobj_t *mo) { const INT32 rad = (mo->radius*3)/FRACUNIT; mobj_t *sparkle; + INT32 i; + UINT8 invanimnum; // Current sparkle animation number + INT32 invtime;// Invincibility time left, in seconds + UINT8 index = 1; fixed_t newx, newy, newz; I_Assert(mo != NULL); I_Assert(!P_MobjWasRemoved(mo)); - newx = mo->x + (P_RandomRange(-rad, rad)*FRACUNIT); - newy = mo->y + (P_RandomRange(-rad, rad)*FRACUNIT); - newz = mo->z + (P_RandomRange(0, mo->height>>FRACBITS)*FRACUNIT); - - sparkle = P_SpawnMobj(newx, newy, newz, MT_SPARKLETRAIL); - sparkle->angle = R_PointToAngle2(mo->x, mo->y, sparkle->x, sparkle->y); - sparkle->movefactor = R_PointToDist2(mo->x, mo->y, sparkle->x, sparkle->y); // Save the distance we spawned away from the player. - CONS_Printf("movefactor: %d\n", sparkle->movefactor/FRACUNIT); - sparkle->extravalue1 = (sparkle->z - mo->z); // Keep track of our Z position relative to the player's, I suppose. - sparkle->extravalue2 = P_RandomRange(0, 1) ? 1 : -1; // Rotation direction? - sparkle->cvmem = P_RandomRange(-25, 25)*mo->scale; // Vertical "angle" - K_FlipFromObject(sparkle, mo); - - //if (i == 0) - //P_SetMobjState(sparkle, S_KARTINVULN_LARGE1); - - P_SetTarget(&sparkle->target, mo); - sparkle->destscale = mo->destscale; - P_SetScale(sparkle, mo->scale); - sparkle->colorized = true; - sparkle->color = mo->color; - return sparkle; -} - -void K_SparkleTrailHandling(mobj_t *mo, player_t *player) -{ - UINT8 invanimnum; // Current sparkle animation number - INT32 invtime;// Invincibility time left, in seconds - UINT8 index = 1; - if (leveltime & 2) index = 2; - invtime = player->kartstuff[k_invincibilitytimer]/TICRATE+1; + invtime = mo->player->kartstuff[k_invincibilitytimer]/TICRATE+1; //CONS_Printf("%d\n", index); + for (i = 0; i < 8; i++) + { + newx = mo->x + (P_RandomRange(-rad, rad)*FRACUNIT); + newy = mo->y + (P_RandomRange(-rad, rad)*FRACUNIT); + newz = mo->z + (P_RandomRange(0, mo->height>>FRACBITS)*FRACUNIT); + + sparkle = P_SpawnMobj(newx, newy, newz, MT_SPARKLETRAIL); + sparkle->angle = R_PointToAngle2(mo->x, mo->y, sparkle->x, sparkle->y); + sparkle->movefactor = R_PointToDist2(mo->x, mo->y, sparkle->x, sparkle->y); // Save the distance we spawned away from the player. + CONS_Printf("movefactor: %d\n", sparkle->movefactor/FRACUNIT); + sparkle->extravalue1 = (sparkle->z - mo->z); // Keep track of our Z position relative to the player's, I suppose. + sparkle->extravalue2 = P_RandomRange(0, 1) ? 1 : -1; // Rotation direction? + sparkle->cvmem = P_RandomRange(-25, 25)*mo->scale; // Vertical "angle" + K_FlipFromObject(sparkle, mo); + + //if (i == 0) + //P_SetMobjState(sparkle, S_KARTINVULN_LARGE1); + + P_SetTarget(&sparkle->target, mo); + sparkle->destscale = mo->destscale; + P_SetScale(sparkle, mo->scale); + } + invanimnum = (invtime >= 11) ? 11 : invtime; //CONS_Printf("%d\n", invanimnum); - - P_SetMobjState(mo, K_SparkleTrailStartStates[invanimnum][index]); + P_SetMobjState(sparkle, K_SparkleTrailStartStates[invanimnum][index]); + sparkle->colorized = true; + sparkle->color = mo->color; } - void K_SpawnInvincibilitySpeedLines(mobj_t *mo) { mobj_t *fast = P_SpawnMobjFromMobj(mo, diff --git a/src/k_kart.h b/src/k_kart.h index 2734ed1d7..348ca84b7 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -64,8 +64,7 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color); void K_RunFinishLineBeam(void); UINT16 K_DriftSparkColor(player_t *player, INT32 charge); void K_SpawnBoostTrail(player_t *player); -mobj_t *K_SpawnSparkleTrail(mobj_t *mo); -void K_SparkleTrailHandling(mobj_t *mo, player_t *player); +void K_SpawnSparkleTrail(mobj_t *mo); void K_SpawnInvincibilitySpeedLines(mobj_t *mo); void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent); void K_SpawnDraftDust(mobj_t *mo); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index c7dcab07b..035d930de 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -3493,20 +3493,7 @@ static int lib_kSpawnSparkleTrail(lua_State *L) NOHUD if (!mo) return LUA_ErrInvalid(L, "mobj_t"); - LUA_PushUserdata(L, K_SpawnSparkleTrail(mo), META_MOBJ); - return 1; -} - -static int lib_kSparkleTrailHandling(lua_State *L) -{ - mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); - player_t *player = *((player_t **)luaL_checkudata(L, 2, META_PLAYER)); - NOHUD - if (!mo) - return LUA_ErrInvalid(L, "mobj_t"); - if (!player) - return LUA_ErrInvalid(L, "player_t"); - K_SparkleTrailHandling(mo, player); + K_SpawnSparkleTrail(mo); return 0; } @@ -3938,7 +3925,6 @@ static luaL_Reg lib[] = { {"K_SpawnMineExplosion",lib_kSpawnMineExplosion}, {"K_SpawnBoostTrail",lib_kSpawnBoostTrail}, {"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail}, - {"K_SparkleTrailHandling", lib_kSparkleTrailHandling}, {"K_SpawnWipeoutTrail",lib_kSpawnWipeoutTrail}, {"K_DriftDustHandling",lib_kDriftDustHandling}, {"K_DoSneaker",lib_kDoSneaker}, diff --git a/src/p_user.c b/src/p_user.c index aeed8dfae..a89bec290 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2376,9 +2376,7 @@ void P_MovePlayer(player_t *player) if (player->kartstuff[k_invincibilitytimer] > 0) { - mobj_t *sparkle; - sparkle = K_SpawnSparkleTrail(player->mo); - K_SparkleTrailHandling(sparkle, player); + K_SpawnSparkleTrail(player->mo); if (player->kartstuff[k_invincibilitytimer] > 5*TICRATE && player->speed > 10*player->mo->scale && (leveltime % 8) == 0) K_SpawnInvincibilitySpeedLines(player->mo); }