diff options
Diffstat (limited to 'src/render/Particle.cpp')
-rw-r--r-- | src/render/Particle.cpp | 110 |
1 files changed, 76 insertions, 34 deletions
diff --git a/src/render/Particle.cpp b/src/render/Particle.cpp index 6a42bc4d..0ad4681d 100644 --- a/src/render/Particle.cpp +++ b/src/render/Particle.cpp @@ -213,19 +213,19 @@ RwTexture *gpSparkTex; RwTexture *gpNewspaperTex; RwTexture *gpGunSmokeTex; RwTexture *gpDotTex; -RwTexture *gpHeathazeTex; +RwTexture *gpHeatHazeTex; RwTexture *gpBeastieTex; -RwTexture *gpRaindripTex1[MAX_RAINDRIP_FILES]; -RwTexture *gpRaindripTex2[MAX_RAINDRIP_FILES]; +RwTexture *gpRainDripTex[MAX_RAINDRIP_FILES]; +RwTexture *gpRainDripDarkTex[MAX_RAINDRIP_FILES]; RwRaster *gpSparkRaster; RwRaster *gpNewspaperRaster; RwRaster *gpGunSmokeRaster; RwRaster *gpDotRaster; -RwRaster *gpHeathazeRaster; +RwRaster *gpHeatHazeRaster; RwRaster *gpBeastieRaster; -RwRaster *gpRaindripRaster1[MAX_RAINDRIP_FILES]; -RwRaster *gpRaindripRaster2[MAX_RAINDRIP_FILES]; +RwRaster *gpRainDripRaster[MAX_RAINDRIP_FILES]; +RwRaster *gpRainDripDarkRaster[MAX_RAINDRIP_FILES]; float CParticle::ms_afRandTable[CParticle::RAND_TABLE_SIZE]; CParticle *CParticle::m_pUnusedListHead; @@ -411,9 +411,11 @@ void CParticle::Initialise() gpFlame5Tex = RwTextureRead("flame5", nil); -#ifdef FIX_BUGS +//#ifdef FIX_BUGS +#if 0 gpFlame5Raster = RwTextureGetRaster(gpFlame5Tex); #else + // this seems to have become more of a design choice gpFlame5Raster = RwTextureGetRaster(gpFlame1Tex); // copy-paste bug ? #endif @@ -465,23 +467,23 @@ void CParticle::Initialise() gpDotTex = RwTextureRead("dot", nil); gpDotRaster = RwTextureGetRaster(gpDotTex); - gpHeathazeTex = RwTextureRead("heathaze", nil); - gpHeathazeRaster = RwTextureGetRaster(gpHeathazeTex); + gpHeatHazeTex = RwTextureRead("heathaze", nil); + gpHeatHazeRaster = RwTextureGetRaster(gpHeatHazeTex); gpBeastieTex = RwTextureRead("beastie", nil); gpBeastieRaster = RwTextureGetRaster(gpBeastieTex); - gpRaindripTex1[0] = RwTextureRead("raindrip64", nil); - gpRaindripRaster1[0] = RwTextureGetRaster(gpRaindripTex1[0]); + gpRainDripTex[0] = RwTextureRead("raindrip64", nil); + gpRainDripRaster[0] = RwTextureGetRaster(gpRainDripTex[0]); - gpRaindripTex1[1] = RwTextureRead("raindripb64", nil); - gpRaindripRaster1[1] = RwTextureGetRaster(gpRaindripTex1[1]); + gpRainDripTex[1] = RwTextureRead("raindripb64", nil); + gpRainDripRaster[1] = RwTextureGetRaster(gpRainDripTex[1]); - gpRaindripTex2[0] = RwTextureRead("raindrip64_d", nil); - gpRaindripRaster2[0] = RwTextureGetRaster(gpRaindripTex2[0]); + gpRainDripDarkTex[0] = RwTextureRead("raindrip64_d", nil); + gpRainDripDarkRaster[0] = RwTextureGetRaster(gpRainDripDarkTex[0]); - gpRaindripTex2[1] = RwTextureRead("raindripb64_d", nil); - gpRaindripRaster2[1] = RwTextureGetRaster(gpRaindripTex2[1]); + gpRainDripDarkTex[1] = RwTextureRead("raindripb64_d", nil); + gpRainDripDarkRaster[1] = RwTextureGetRaster(gpRainDripDarkTex[1]); CTxdStore::PopCurrentTxd(); @@ -586,7 +588,7 @@ void CParticle::Initialise() break; case PARTICLE_TEARGAS: - entry->m_ppRaster = &gpHeathazeRaster; + entry->m_ppRaster = &gpHeatHazeRaster; break; case PARTICLE_SHARD: @@ -749,11 +751,11 @@ void CParticle::Shutdown() for ( int32 i = 0; i < MAX_RAINDRIP_FILES; i++ ) { - RwTextureDestroy(gpRaindripTex1[i]); - gpRaindripTex1[i] = nil; + RwTextureDestroy(gpRainDripTex[i]); + gpRainDripTex[i] = nil; - RwTextureDestroy(gpRaindripTex2[i]); - gpRaindripTex2[i] = nil; + RwTextureDestroy(gpRainDripDarkTex[i]); + gpRainDripDarkTex[i] = nil; } RwTextureDestroy(gpBoatWakeTex); @@ -812,8 +814,8 @@ void CParticle::Shutdown() RwTextureDestroy(gpDotTex); gpDotTex = nil; - RwTextureDestroy(gpHeathazeTex); - gpHeathazeTex = nil; + RwTextureDestroy(gpHeatHazeTex); + gpHeatHazeTex = nil; RwTextureDestroy(gpBeastieTex); gpBeastieTex = nil; @@ -941,7 +943,7 @@ CParticle *CParticle::AddParticle(tParticleType type, CVector const &vecPos, CVe CVector screen; float w, h; - if ( !CSprite::CalcScreenCoors(vecPos, screen, &w, &h, true) ) + if ( !CSprite::CalcScreenCoors(vecPos, &screen, &w, &h, true) ) return nil; pParticle->m_vecPosition = screen; @@ -1913,9 +1915,9 @@ void CParticle::Render() FxType fxtype; if ( particle->m_nCurrentFrame != 0 ) - fxtype = FXTYPE_1; + fxtype = FXTYPE_WATER2; else - fxtype = FXTYPE_0; + fxtype = FXTYPE_WATER1; CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, fxtype); @@ -1939,9 +1941,9 @@ void CParticle::Render() FxType fxtype; if ( particle->m_nCurrentFrame ) - fxtype = FXTYPE_3; + fxtype = FXTYPE_BLOOD2; else - fxtype = FXTYPE_2; + fxtype = FXTYPE_BLOOD1; CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, fxtype); @@ -1957,7 +1959,7 @@ void CParticle::Render() rect.w = int32(particle->m_vecPosition.x + SCREEN_STRETCH_X(particle->m_fSize * stretchTexW)); rect.h = int32(particle->m_vecPosition.y + SCREEN_STRETCH_Y(particle->m_fSize * stretchTexH * 0.15f)); - CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, FXTYPE_4); + CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, FXTYPE_HEATHAZE); canDraw = false; } @@ -1993,7 +1995,7 @@ void CParticle::Render() break; } - CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, FXTYPE_4); + CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, FXTYPE_HEATHAZE); canDraw = false; } @@ -2034,7 +2036,7 @@ void CParticle::Render() float w; float h; - if ( CSprite::CalcScreenCoors(particle->m_vecPosition, coors, &w, &h, true) ) + if ( CSprite::CalcScreenCoors(particle->m_vecPosition, &coors, &w, &h, true) ) { if ( i == PARTICLE_ENGINE_STEAM @@ -2115,7 +2117,7 @@ void CParticle::Render() * (CSprite::GetFarScreenZ() - CSprite::GetNearScreenZ()) * CDraw::GetFarClipZ() / ( (CDraw::GetFarClipZ() - CDraw::GetNearClipZ()) * coors.z ) + CSprite::GetNearScreenZ(); - CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, FXTYPE_5); + CMBlur::AddRenderFx(Scene.camera, &rect, screenZ, FXTYPE_SPLASH1); } else { @@ -2189,7 +2191,7 @@ void CParticle::Render() float fTrailLength; CVector vecScreenPosition; - if ( CSprite::CalcScreenCoors(vecPrevPos, vecScreenPosition, &fTrailLength, &fRotation, true) ) + if ( CSprite::CalcScreenCoors(vecPrevPos, &vecScreenPosition, &fTrailLength, &fRotation, true) ) { CVector2D vecDist ( @@ -2470,3 +2472,43 @@ void CParticle::HandleShootableBirdsStuff(CEntity *entity, CVector const&camPos) } } + +void +CEntity::AddSteamsFromGround(CVector *unused) +{ + int i, n; + C2dEffect *effect; + CVector pos; + + n = CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects(); + for(i = 0; i < n; i++){ + effect = CModelInfo::GetModelInfo(GetModelIndex())->Get2dEffect(i); + if(effect->type != EFFECT_PARTICLE) + continue; + + pos = GetMatrix() * effect->pos; + switch(effect->particle.particleType){ + case 0: + CParticleObject::AddObject(POBJECT_PAVEMENT_STEAM, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 1: + CParticleObject::AddObject(POBJECT_WALL_STEAM, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 2: + CParticleObject::AddObject(POBJECT_DRY_ICE, pos, effect->particle.scale, false); + break; + case 3: + CParticleObject::AddObject(POBJECT_SMALL_FIRE, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 4: + CParticleObject::AddObject(POBJECT_DARK_SMOKE, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 5: + CParticleObject::AddObject(POBJECT_WATER_FOUNTAIN_VERT, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 6: + CParticleObject::AddObject(POBJECT_WATER_FOUNTAIN_HORIZ, pos, effect->particle.dir, effect->particle.scale, false); + break; + } + } +} |