235 s32 pathPointLifetime;
246 primAlpha = data->
alpha;
259 if (variation >= 2) {
273 baseTexOffset = (lifeTime & 0x3F) << 5;
289 vtx = &vtxBuffer[i * 2];
290 fadeOutPhase = phase / numPoints;
293 a =
sin_deg(fadeOutPhase) * 255.0f;
302 if (firstPointIdx == -1) {
321 deltaAngle = prevAngle - nextAngle;
322 if (deltaAngle > 180.0f) {
324 }
else if (deltaAngle < -180.0f) {
327 angle = nextAngle + prevAngle;
331 pathPointX = data->
pathX[idx];
332 pathPointY = data->
pathY[idx];
333 pathPointZ = data->
pathZ[idx];
335 width =
sin_deg((lifeTime - data->
pathTimestamp[idx] * 80) * 4) * 3.0f + 16.0f + pathPointLifetime;
338 if (variation >= 0) {
339 texOffsetX = (data->
pathLength[idx] * 24.0f) + baseTexOffset;
341 texOffsetX = (data->
pathLength[idx] * 24.0f) + baseTexOffset;
346 b = 255 - pathPointLifetime * 100;
348 g = (f32) b * 0.8 + 255.0;
351 r = (f32) g * 0.4 + 255.0;
359 deltaX = width *
sin_deg(angle);
360 deltaY = width *
cos_deg(angle);
363 vtx->ob[0] = pathPointX + deltaX;
364 vtx->ob[1] = pathPointY + deltaY;
365 vtx->ob[2] = pathPointZ + deltaZ;
366 vtx->tc[0] = texOffsetX;
374 vtx->ob[0] = pathPointX - deltaX;
375 vtx->ob[1] = pathPointY - deltaY;
376 vtx->ob[2] = pathPointZ + deltaZ;
377 vtx->tc[0] = texOffsetX;
389 for (i = firstPointIdx; i <
MAX_POINTS - 1; i++) {
391 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
EffectInstance * effect_65_main(s32 variation, f32 posX, f32 posY, f32 posZ, f32 scale, s32 duration)