2019-08-25 04:46:40 +00:00
|
|
|
#ifndef ENVFX_SNOW_H
|
|
|
|
#define ENVFX_SNOW_H
|
|
|
|
|
2020-06-02 16:44:34 +00:00
|
|
|
#include <PR/ultratypes.h>
|
2019-08-25 04:46:40 +00:00
|
|
|
#include "types.h"
|
|
|
|
|
|
|
|
#define ENVFX_MODE_NONE 0 // no effects
|
|
|
|
#define ENVFX_SNOW_NORMAL 1 // CCM, SL
|
|
|
|
#define ENVFX_SNOW_WATER 2 // Secret Aquarium, Sunken Ship
|
|
|
|
#define ENVFX_SNOW_BLIZZARD 3 // unused
|
|
|
|
|
|
|
|
#define ENVFX_BUBBLE_START 10 // Separates snow effects and flower/bubble effects
|
|
|
|
|
|
|
|
#define ENVFX_FLOWERS 11 // unused
|
|
|
|
#define ENVFX_LAVA_BUBBLES 12 // LLL, BitFS, Bowser 2
|
|
|
|
#define ENVFX_WHIRLPOOL_BUBBLES 13 // DDD
|
|
|
|
#define ENVFX_JETSTREAM_BUBBLES 14 // JRB, DDD (submarine area)
|
|
|
|
|
|
|
|
struct EnvFxParticle {
|
|
|
|
s8 isAlive;
|
|
|
|
s16 animFrame; // lava bubbles and flowers have frame animations
|
|
|
|
s32 xPos;
|
|
|
|
s32 yPos;
|
|
|
|
s32 zPos;
|
|
|
|
s32 angleAndDist[2]; // for whirpools, [0] = angle from center, [1] = distance from center
|
|
|
|
s32 unusedBubbleVar; // set to zero for bubbles when respawning, never used elsewhere
|
|
|
|
s32 bubbleY; // for Bubbles, yPos is always set to this
|
2020-07-29 01:28:12 +00:00
|
|
|
//s8 filler20[56 - 0x20];
|
|
|
|
u32 spawnTimestamp;
|
2019-08-25 04:46:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern s8 gEnvFxMode;
|
|
|
|
extern UNUSED s32 D_80330644;
|
|
|
|
|
|
|
|
extern struct EnvFxParticle *gEnvFxBuffer;
|
|
|
|
extern Vec3i gSnowCylinderLastPos;
|
|
|
|
extern s16 gSnowParticleCount;
|
|
|
|
|
|
|
|
Gfx *envfx_update_particles(s32 snowMode, Vec3s marioPos, Vec3s camTo, Vec3s camFrom);
|
|
|
|
void orbit_from_positions(Vec3s from, Vec3s to, s16 *radius, s16 *pitch, s16 *yaw);
|
|
|
|
void rotate_triangle_vertices(Vec3s vertex1, Vec3s vertex2, Vec3s vertex3, s16 pitch, s16 yaw);
|
|
|
|
|
|
|
|
#endif // ENVFX_SNOW_H
|