This repository has been archived by the owner. It is now read-only.
Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
with
2,847 additions
and 121 deletions.
- +251 −0 src/ParticleMgr.cpp
- +205 −0 src/ParticleMgr.h
- +13 −0 src/ParticleObject.cpp
- +2 −0 src/ParticleObject.h
- +1 −0 src/Timer.h
- +7 −0 src/audio/AudioScriptObject.cpp
- +131 −0 src/audio/AudioScriptObject.h
- +63 −4 src/common.h
- +78 −0 src/math/Vector.cpp
- +123 −42 src/math/Vector.h
- +1,862 −4 src/render/Particle.cpp
- +95 −71 src/render/Particle.h
- +7 −0 src/render/Shadows.cpp
- +9 −0 src/render/Shadows.h
There are no files selected for viewing
| @@ -0,0 +1,251 @@ | ||
| #include "common.h" | ||
| #include "patcher.h" | ||
| #include "FileMgr.h" | ||
| #include "ParticleMgr.h" | ||
|
|
||
| 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 |
Oops, something went wrong.