mirror of
https://github.com/halpz/re3.git
synced 2025-07-10 18:28:52 +00:00
clean up
This commit is contained in:
@ -1229,7 +1229,9 @@ void CParticle::Update()
|
||||
moveStep.z = point.point.z;
|
||||
if ( psystem->m_Type == PARTICLE_DEBRIS2 )
|
||||
{
|
||||
particle->m_vecVelocity *= CVector(0.8f, 0.8f, -0.4f);
|
||||
particle->m_vecVelocity.x *= 0.8f;
|
||||
particle->m_vecVelocity.y *= 0.8f;
|
||||
particle->m_vecVelocity.z *= -0.4f;
|
||||
if ( particle->m_vecVelocity.z < 0.005f )
|
||||
particle->m_vecVelocity.z = 0.0f;
|
||||
}
|
||||
|
252
src/render/ParticleMgr.cpp
Normal file
252
src/render/ParticleMgr.cpp
Normal file
@ -0,0 +1,252 @@
|
||||
#include "common.h"
|
||||
#include "patcher.h"
|
||||
#include "FileMgr.h"
|
||||
#include "ParticleMgr.h"
|
||||
|
||||
_TODO("work_buff");
|
||||
UInt8 work_buff[55000];
|
||||
|
||||
cParticleSystemMgr mod_ParticleSystemManager;
|
||||
|
||||
const Char *ParticleFilename = "PARTICLE.CFG";
|
||||
|
||||
//cParticleSystemMgr::cParticleSystemMgr()
|
||||
void cParticleSystemMgr::ctor()
|
||||
{
|
||||
memset(this, 0, sizeof(*this));
|
||||
}
|
||||
|
||||
void cParticleSystemMgr::Initialise()
|
||||
{
|
||||
LoadParticleData();
|
||||
|
||||
for ( Int32 i = 0; i < MAX_PARTICLES; i++ )
|
||||
m_aParticles[i].m_pParticles = NULL;
|
||||
}
|
||||
|
||||
void cParticleSystemMgr::LoadParticleData()
|
||||
{
|
||||
CFileMgr::SetDir("DATA");
|
||||
CFileMgr::LoadFile(ParticleFilename, work_buff, ARRAY_SIZE(work_buff), "r");
|
||||
CFileMgr::SetDir("");
|
||||
|
||||
tParticleSystemData *entry = NULL;
|
||||
Int32 type = PARTICLE_FIRST;
|
||||
|
||||
Char *lineStart = (Char *)work_buff;
|
||||
Char *lineEnd = lineStart + 1;
|
||||
|
||||
Char line[500];
|
||||
Char delims[4];
|
||||
|
||||
while ( true )
|
||||
{
|
||||
ASSERT(lineStart != NULL);
|
||||
ASSERT(lineEnd != NULL);
|
||||
|
||||
while ( *lineEnd != '\n' )
|
||||
++lineEnd;
|
||||
|
||||
Int32 lineLength = lineEnd - lineStart;
|
||||
|
||||
ASSERT(lineLength < 500);
|
||||
|
||||
strncpy(line, lineStart, lineLength);
|
||||
|
||||
line[lineLength] = '\0';
|
||||
|
||||
if ( !strcmp(line, ";the end") )
|
||||
break;
|
||||
|
||||
if ( *line != ';' )
|
||||
{
|
||||
Int32 param = CFG_PARAM_FIRST;
|
||||
|
||||
strcpy(delims, " \t");
|
||||
|
||||
Char *value = strtok(line, delims);
|
||||
|
||||
ASSERT(value != NULL);
|
||||
|
||||
do
|
||||
{
|
||||
switch ( param )
|
||||
{
|
||||
case CFG_PARAM_PARTICLE_TYPE_NAME:
|
||||
ASSERT(type < MAX_PARTICLES);
|
||||
entry = &m_aParticles[type];
|
||||
ASSERT(entry != NULL);
|
||||
entry->m_Type = (tParticleType)type++;
|
||||
strcpy(entry->m_aName, value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_RENDER_COLOURING_R:
|
||||
entry->m_RenderColouring.red = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_RENDER_COLOURING_G:
|
||||
entry->m_RenderColouring.green = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_RENDER_COLOURING_B:
|
||||
entry->m_RenderColouring.blue = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_INITIAL_COLOR_VARIATION:
|
||||
entry->m_InitialColorVariation = min(atoi(value), 100);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_DESTINATION_COLOR_R:
|
||||
entry->m_FadeDestinationColor.red = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_DESTINATION_COLOR_G:
|
||||
entry->m_FadeDestinationColor.green = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_DESTINATION_COLOR_B:
|
||||
entry->m_FadeDestinationColor.blue = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_COLOR_FADE_TIME:
|
||||
entry->m_ColorFadeTime = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_DEFAULT_INITIAL_RADIUS:
|
||||
entry->m_fDefaultInitialRadius = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_EXPANSION_RATE:
|
||||
entry->m_fExpansionRate = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_INITIAL_INTENSITY:
|
||||
entry->m_nFadeToBlackInitialIntensity = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_TIME:
|
||||
entry->m_nFadeToBlackTime = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_AMOUNT:
|
||||
entry->m_nFadeToBlackAmount = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_INITIAL_ALPHA_INTENSITY:
|
||||
entry->m_nFadeAlphaInitialIntensity = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_ALPHA_TIME:
|
||||
entry->m_nFadeAlphaTime = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FADE_ALPHA_AMOUNT:
|
||||
entry->m_nFadeAlphaAmount = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_INITIAL_ANGLE:
|
||||
entry->m_nZRotationInitialAngle = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_CHANGE_TIME:
|
||||
entry->m_nZRotationChangeTime = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_ANGLE_CHANGE_AMOUNT:
|
||||
entry->m_nZRotationAngleChangeAmount = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_INITIAL_Z_RADIUS:
|
||||
entry->m_fInitialZRadius = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_Z_RADIUS_CHANGE_TIME:
|
||||
entry->m_nZRadiusChangeTime = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_Z_RADIUS_CHANGE_AMOUNT:
|
||||
entry->m_fZRadiusChangeAmount = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_ANIMATION_SPEED:
|
||||
entry->m_nAnimationSpeed = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_START_ANIMATION_FRAME:
|
||||
entry->m_nStartAnimationFrame = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FINAL_ANIMATION_FRAME:
|
||||
entry->m_nFinalAnimationFrame = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_ROTATION_SPEED:
|
||||
entry->m_nRotationSpeed = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_GRAVITATIONAL_ACCELERATION:
|
||||
entry->m_fGravitationalAcceleration = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FRICTION_DECCELERATION:
|
||||
entry->m_nFrictionDecceleration = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_LIFE_SPAN:
|
||||
entry->m_nLifeSpan = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_POSITION_RANDOM_ERROR:
|
||||
entry->m_fPositionRandomError = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_VELOCITY_RANDOM_ERROR:
|
||||
entry->m_fVelocityRandomError = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_EXPANSION_RATE_ERROR:
|
||||
entry->m_fExpansionRateError = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_ROTATION_RATE_ERROR:
|
||||
entry->m_nRotationRateError = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_LIFE_SPAN_ERROR_SHAPE:
|
||||
entry->m_nLifeSpanErrorShape = atoi(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_TRAIL_LENGTH_MULTIPLIER:
|
||||
entry->m_fTrailLengthMultiplier = atof(value);
|
||||
break;
|
||||
|
||||
case CFG_PARAM_PARTICLE_CREATE_RANGE:
|
||||
entry->m_fCreateRange = SQR(atof(value));
|
||||
break;
|
||||
|
||||
case CFG_PARAM_FLAGS:
|
||||
entry->Flags = atoi(value);
|
||||
break;
|
||||
}
|
||||
|
||||
value = strtok(NULL, delims);
|
||||
|
||||
param++;
|
||||
|
||||
if ( param > CFG_PARAM_LAST )
|
||||
param = CFG_PARAM_FIRST;
|
||||
|
||||
} while ( value != NULL );
|
||||
}
|
||||
|
||||
lineEnd++;
|
||||
lineStart = lineEnd;
|
||||
lineEnd++;
|
||||
}
|
||||
}
|
||||
|
||||
STARTPATCHES
|
||||
InjectHook(0x50FCB0, &cParticleSystemMgr::ctor, PATCH_JUMP);
|
||||
InjectHook(0x50FCD0, &cParticleSystemMgr::Initialise, PATCH_JUMP);
|
||||
InjectHook(0x50FDF0, &cParticleSystemMgr::LoadParticleData, PATCH_JUMP);
|
||||
ENDPATCHES
|
206
src/render/ParticleMgr.h
Normal file
206
src/render/ParticleMgr.h
Normal file
@ -0,0 +1,206 @@
|
||||
#pragma once
|
||||
|
||||
class CParticle;
|
||||
|
||||
enum tParticleType
|
||||
{
|
||||
PARTICLE_SPARK = 0,
|
||||
PARTICLE_SPARK_SMALL,
|
||||
PARTICLE_WHEEL_DIRT,
|
||||
PARTICLE_WHEEL_WATER,
|
||||
PARTICLE_BLOOD,
|
||||
PARTICLE_BLOOD_SMALL,
|
||||
PARTICLE_BLOOD_SPURT,
|
||||
PARTICLE_DEBRIS,
|
||||
PARTICLE_DEBRIS2,
|
||||
PARTICLE_WATER,
|
||||
PARTICLE_FLAME,
|
||||
PARTICLE_FIREBALL,
|
||||
PARTICLE_GUNFLASH,
|
||||
PARTICLE_GUNFLASH_NOANIM,
|
||||
PARTICLE_GUNSMOKE,
|
||||
PARTICLE_GUNSMOKE2,
|
||||
PARTICLE_SMOKE,
|
||||
PARTICLE_SMOKE_SLOWMOTION,
|
||||
PARTICLE_GARAGEPAINT_SPRAY,
|
||||
PARTICLE_SHARD,
|
||||
PARTICLE_SPLASH,
|
||||
PARTICLE_CARFLAME,
|
||||
PARTICLE_STEAM,
|
||||
PARTICLE_STEAM2,
|
||||
PARTICLE_STEAM_NY,
|
||||
PARTICLE_STEAM_NY_SLOWMOTION,
|
||||
PARTICLE_ENGINE_STEAM,
|
||||
PARTICLE_RAINDROP,
|
||||
PARTICLE_RAINDROP_SMALL,
|
||||
PARTICLE_RAIN_SPLASH,
|
||||
PARTICLE_RAIN_SPLASH_BIGGROW,
|
||||
PARTICLE_RAIN_SPLASHUP,
|
||||
PARTICLE_WATERSPRAY,
|
||||
PARTICLE_EXPLOSION_MEDIUM,
|
||||
PARTICLE_EXPLOSION_LARGE,
|
||||
PARTICLE_EXPLOSION_MFAST,
|
||||
PARTICLE_EXPLOSION_LFAST,
|
||||
PARTICLE_CAR_SPLASH,
|
||||
PARTICLE_BOAT_SPLASH,
|
||||
PARTICLE_BOAT_THRUSTJET,
|
||||
PARTICLE_BOAT_WAKE,
|
||||
PARTICLE_WATER_HYDRANT,
|
||||
PARTICLE_WATER_CANNON,
|
||||
PARTICLE_EXTINGUISH_STEAM,
|
||||
PARTICLE_PED_SPLASH,
|
||||
PARTICLE_PEDFOOT_DUST,
|
||||
PARTICLE_HELI_DUST,
|
||||
PARTICLE_HELI_ATTACK,
|
||||
PARTICLE_ENGINE_SMOKE,
|
||||
PARTICLE_ENGINE_SMOKE2,
|
||||
PARTICLE_CARFLAME_SMOKE,
|
||||
PARTICLE_FIREBALL_SMOKE,
|
||||
PARTICLE_PAINT_SMOKE,
|
||||
PARTICLE_TREE_LEAVES,
|
||||
PARTICLE_CARCOLLISION_DUST,
|
||||
PARTICLE_CAR_DEBRIS,
|
||||
PARTICLE_HELI_DEBRIS,
|
||||
PARTICLE_EXHAUST_FUMES,
|
||||
PARTICLE_RUBBER_SMOKE,
|
||||
PARTICLE_BURNINGRUBBER_SMOKE,
|
||||
PARTICLE_BULLETHIT_SMOKE,
|
||||
PARTICLE_GUNSHELL_FIRST,
|
||||
PARTICLE_GUNSHELL,
|
||||
PARTICLE_GUNSHELL_BUMP1,
|
||||
PARTICLE_GUNSHELL_BUMP2,
|
||||
PARTICLE_TEST,
|
||||
PARTICLE_BIRD_FRONT,
|
||||
PARTICLE_RAINDROP_2D,
|
||||
|
||||
MAX_PARTICLES,
|
||||
PARTICLE_FIRST = PARTICLE_SPARK,
|
||||
PARTICLE_LAST = PARTICLE_RAINDROP_2D
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ZCHECK_FIRST = BIT(0),
|
||||
ZCHECK_STEP = BIT(1),
|
||||
DRAW_OPAQUE = BIT(2),
|
||||
SCREEN_TRAIL = BIT(3),
|
||||
SPEED_TRAIL = BIT(4),
|
||||
RAND_VERT_V = BIT(5),
|
||||
CYCLE_ANIM = BIT(6),
|
||||
DRAW_DARK = BIT(7),
|
||||
VERT_TRAIL = BIT(8),
|
||||
_FLAG9 = BIT(9), // unused
|
||||
DRAWTOP2D = BIT(10),
|
||||
CLIPOUT2D = BIT(11),
|
||||
ZCHECK_BUMP = BIT(12),
|
||||
ZCHECK_BUMP_FIRST = BIT(13)
|
||||
};
|
||||
|
||||
|
||||
struct tParticleSystemData
|
||||
{
|
||||
tParticleType m_Type;
|
||||
Char m_aName[20];
|
||||
Float m_fCreateRange;
|
||||
Float m_fDefaultInitialRadius;
|
||||
Float m_fExpansionRate;
|
||||
UInt16 m_nZRotationInitialAngle;
|
||||
Int16 m_nZRotationAngleChangeAmount;
|
||||
UInt16 m_nZRotationChangeTime;
|
||||
UInt16 m_nZRadiusChangeTime;
|
||||
Float m_fInitialZRadius;
|
||||
Float m_fZRadiusChangeAmount;
|
||||
UInt16 m_nFadeToBlackTime;
|
||||
Int16 m_nFadeToBlackAmount;
|
||||
UInt8 m_nFadeToBlackInitialIntensity;
|
||||
UInt8 m_nFadeAlphaInitialIntensity;
|
||||
UInt16 m_nFadeAlphaTime;
|
||||
Int16 m_nFadeAlphaAmount;
|
||||
UInt16 m_nStartAnimationFrame;
|
||||
UInt16 m_nFinalAnimationFrame;
|
||||
UInt16 m_nAnimationSpeed;
|
||||
UInt16 m_nRotationSpeed;
|
||||
char _pad1[2];
|
||||
Float m_fGravitationalAcceleration;
|
||||
Int32 m_nFrictionDecceleration;
|
||||
Int32 m_nLifeSpan;
|
||||
Float m_fPositionRandomError;
|
||||
Float m_fVelocityRandomError;
|
||||
Float m_fExpansionRateError;
|
||||
Int32 m_nRotationRateError;
|
||||
UInt32 m_nLifeSpanErrorShape;
|
||||
Float m_fTrailLengthMultiplier;
|
||||
UInt32 Flags;
|
||||
RwRGBA m_RenderColouring;
|
||||
UInt8 m_InitialColorVariation;
|
||||
RwRGBA m_FadeDestinationColor;
|
||||
char _pad2[3];
|
||||
UInt32 m_ColorFadeTime;
|
||||
|
||||
RwRaster **m_ppRaster;
|
||||
CParticle *m_pParticles;
|
||||
};
|
||||
VALIDATE_SIZE(tParticleSystemData, 0x88);
|
||||
|
||||
|
||||
class cParticleSystemMgr
|
||||
{
|
||||
enum
|
||||
{
|
||||
CFG_PARAM_PARTICLE_TYPE_NAME = 0,
|
||||
CFG_PARAM_RENDER_COLOURING_R,
|
||||
CFG_PARAM_RENDER_COLOURING_G,
|
||||
CFG_PARAM_RENDER_COLOURING_B,
|
||||
CFG_PARAM_INITIAL_COLOR_VARIATION,
|
||||
CFG_PARAM_FADE_DESTINATION_COLOR_R,
|
||||
CFG_PARAM_FADE_DESTINATION_COLOR_G,
|
||||
CFG_PARAM_FADE_DESTINATION_COLOR_B,
|
||||
CFG_PARAM_COLOR_FADE_TIME,
|
||||
CFG_PARAM_DEFAULT_INITIAL_RADIUS,
|
||||
CFG_PARAM_EXPANSION_RATE,
|
||||
CFG_PARAM_INITIAL_INTENSITY,
|
||||
CFG_PARAM_FADE_TIME,
|
||||
CFG_PARAM_FADE_AMOUNT,
|
||||
CFG_PARAM_INITIAL_ALPHA_INTENSITY,
|
||||
CFG_PARAM_FADE_ALPHA_TIME,
|
||||
CFG_PARAM_FADE_ALPHA_AMOUNT,
|
||||
CFG_PARAM_INITIAL_ANGLE,
|
||||
CFG_PARAM_CHANGE_TIME,
|
||||
CFG_PARAM_ANGLE_CHANGE_AMOUNT,
|
||||
CFG_PARAM_INITIAL_Z_RADIUS,
|
||||
CFG_PARAM_Z_RADIUS_CHANGE_TIME,
|
||||
CFG_PARAM_Z_RADIUS_CHANGE_AMOUNT,
|
||||
CFG_PARAM_ANIMATION_SPEED,
|
||||
CFG_PARAM_START_ANIMATION_FRAME,
|
||||
CFG_PARAM_FINAL_ANIMATION_FRAME,
|
||||
CFG_PARAM_ROTATION_SPEED,
|
||||
CFG_PARAM_GRAVITATIONAL_ACCELERATION,
|
||||
CFG_PARAM_FRICTION_DECCELERATION,
|
||||
CFG_PARAM_LIFE_SPAN,
|
||||
CFG_PARAM_POSITION_RANDOM_ERROR,
|
||||
CFG_PARAM_VELOCITY_RANDOM_ERROR,
|
||||
CFG_PARAM_EXPANSION_RATE_ERROR,
|
||||
CFG_PARAM_ROTATION_RATE_ERROR,
|
||||
CFG_PARAM_LIFE_SPAN_ERROR_SHAPE,
|
||||
CFG_PARAM_TRAIL_LENGTH_MULTIPLIER,
|
||||
CFG_PARAM_PARTICLE_CREATE_RANGE,
|
||||
CFG_PARAM_FLAGS,
|
||||
|
||||
MAX_CFG_PARAMS,
|
||||
CFG_PARAM_FIRST = CFG_PARAM_PARTICLE_TYPE_NAME,
|
||||
CFG_PARAM_LAST = CFG_PARAM_FLAGS
|
||||
};
|
||||
|
||||
public:
|
||||
tParticleSystemData m_aParticles[MAX_PARTICLES];
|
||||
|
||||
cParticleSystemMgr() { ctor(); } void ctor();
|
||||
|
||||
void Initialise();
|
||||
void LoadParticleData();
|
||||
//void RangeCheck(tParticleSystemData *pData);
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cParticleSystemMgr, 0x2420);
|
||||
|
||||
extern cParticleSystemMgr mod_ParticleSystemManager;
|
@ -4,12 +4,6 @@
|
||||
#include "Camera.h"
|
||||
#include "Sprite.h"
|
||||
|
||||
// Get rid of bullshit windows definitions, we're not running on an 8086
|
||||
#ifdef far
|
||||
#undef far
|
||||
#undef near
|
||||
#endif
|
||||
|
||||
float &CSprite::m_f2DNearScreenZ = *(float*)0x8F1ABC;
|
||||
float &CSprite::m_f2DFarScreenZ = *(float*)0x8F2C94;
|
||||
float &CSprite::m_fRecipNearClipPlane = *(float*)0x8F5FFC;
|
||||
|
@ -4,12 +4,6 @@
|
||||
#include "Camera.h"
|
||||
#include "Sprite2d.h"
|
||||
|
||||
// Get rid of bullshit windows definitions, we're not running on an 8086
|
||||
#ifdef far
|
||||
#undef far
|
||||
#undef near
|
||||
#endif
|
||||
|
||||
RwIm2DVertex *CSprite2d::maVertices = (RwIm2DVertex*)0x6E9168;
|
||||
float &CSprite2d::RecipNearClip = *(float*)0x880DB4;
|
||||
int32 &CSprite2d::mCurrentBank = *(int32*)0x8F1AF4;
|
||||
@ -18,7 +12,6 @@ int32 *CSprite2d::mCurrentSprite = (int32*)0x6F4500;
|
||||
int32 *CSprite2d::mBankStart = (int32*)0x774BE8;
|
||||
RwIm2DVertex *CSprite2d::maBankVertices = (RwIm2DVertex*)0x8429F8;
|
||||
|
||||
|
||||
void
|
||||
CSprite2d::SetRecipNearClip(void)
|
||||
{
|
||||
|
Reference in New Issue
Block a user