//----------------------------------------------------------------------------- float CMultiPoisonProjectile::Render(LPDIRECT3DDEVICE7 m_pd3dDevice) { for (UINT i = 0 ; i < uiNumber ; i++) { float fa = pTab[i]->Render(m_pd3dDevice); CPoisonProjectile * pPoisonProjectile = (CPoisonProjectile *) pTab[i]; if (pPoisonProjectile->lLightId != -1) { long id = pPoisonProjectile->lLightId; DynLight[id].exist = 1; DynLight[id].intensity = 2.3f * fa; DynLight[id].fallend = 250.f; DynLight[id].fallstart = 150.f; DynLight[id].rgb.r = 0.f; DynLight[id].rgb.g = 1.0f; DynLight[id].rgb.b = 0.f; DynLight[id].pos.x = pPoisonProjectile->eCurPos.x; DynLight[id].pos.y = pPoisonProjectile->eCurPos.y; DynLight[id].pos.z = pPoisonProjectile->eCurPos.z; DynLight[id].time_creation = ARXTimeUL(); DynLight[id].duration = 200; } long t = ARX_DAMAGES_GetFree(); AddPoisonFog(&pPoisonProjectile->eCurPos, spells[spellinstance].caster_level + 7); if ((t != -1) && (spells[pTab[i]->spellinstance].timcreation + 1600 < ARXTimeUL())) { damages[t].pos.x = pPoisonProjectile->eCurPos.x; damages[t].pos.y = pPoisonProjectile->eCurPos.y; damages[t].pos.z = pPoisonProjectile->eCurPos.z; damages[t].radius = 120.f; float v = spells[spellinstance].caster_level; v = 4.f + v * DIV10 * 6.f ; damages[t].damages = v * DIV1000 * _framedelay; damages[t].area = DAMAGE_FULL; damages[t].duration = ARX_CLEAN_WARN_CAST_LONG(FrameDiff); damages[t].source = spells[spellinstance].caster; damages[t].flags = 0; damages[t].type = DAMAGE_TYPE_MAGICAL | DAMAGE_TYPE_POISON; damages[t].exist = TRUE; } } return 1; }
//----------------------------------------------------------------------------- float CMultiPoisonProjectile::Render() { for (unsigned int i = 0 ; i < uiNumber ; i++) { float fa = pTab[i]->Render(); CPoisonProjectile * pPoisonProjectile = (CPoisonProjectile *) pTab[i]; if (pPoisonProjectile->lLightId != -1) { long id = pPoisonProjectile->lLightId; DynLight[id].exist = 1; DynLight[id].intensity = 2.3f * fa; DynLight[id].fallend = 250.f; DynLight[id].fallstart = 150.f; DynLight[id].rgb = Color3f::green; DynLight[id].pos = pPoisonProjectile->eCurPos; DynLight[id].time_creation = (unsigned long)(arxtime); DynLight[id].duration = 200; } long t = ARX_DAMAGES_GetFree(); AddPoisonFog(&pPoisonProjectile->eCurPos, spells[spellinstance].caster_level + 7); if ((t != -1) && (spells[pTab[i]->spellinstance].timcreation + 1600 < (unsigned long)(arxtime))) { damages[t].pos = pPoisonProjectile->eCurPos; damages[t].radius = 120.f; float v = spells[spellinstance].caster_level; v = 4.f + v * ( 1.0f / 10 ) * 6.f ; damages[t].damages = v * ( 1.0f / 1000 ) * framedelay; damages[t].area = DAMAGE_FULL; damages[t].duration = static_cast<long>(FrameDiff); damages[t].source = spells[spellinstance].caster; damages[t].flags = 0; damages[t].type = DAMAGE_TYPE_MAGICAL | DAMAGE_TYPE_POISON; damages[t].exist = true; } } return 1; }
void PoisonProjectileSpell::Update(float timeDelta) { for(size_t i = 0; i < m_projectiles.size(); i++) { CPoisonProjectile * projectile = m_projectiles[i]; projectile->Update(timeDelta); } for(size_t i = 0; i < m_projectiles.size(); i++) { CPoisonProjectile * projectile = m_projectiles[i]; projectile->Render(); if(lightHandleIsValid(projectile->lLightId)) { EERIE_LIGHT * light = lightHandleGet(projectile->lLightId); light->intensity = 2.3f * projectile->lightIntensityFactor; light->fallend = 250.f; light->fallstart = 150.f; light->rgb = Color3f::green; light->pos = projectile->eCurPos; light->time_creation = (unsigned long)(arxtime); light->duration = 200; } AddPoisonFog(projectile->eCurPos, m_level + 7); if(m_timcreation + 1600 < (unsigned long)(arxtime)) { DamageParameters damage; damage.pos = projectile->eCurPos; damage.radius = 120.f; float v = 4.f + m_level * ( 1.0f / 10 ) * 6.f ; damage.damages = v * ( 1.0f / 1000 ) * framedelay; damage.area = DAMAGE_FULL; damage.duration = static_cast<long>(framedelay); damage.source = m_caster; damage.flags = 0; damage.type = DAMAGE_TYPE_MAGICAL | DAMAGE_TYPE_POISON; DamageCreate(damage); } } }
void PoisonProjectileSpell::Update() { for(size_t i = 0; i < m_projectiles.size(); i++) { CPoisonProjectile * projectile = m_projectiles[i]; projectile->Update(g_gameTime.lastFrameDuration()); } for(size_t i = 0; i < m_projectiles.size(); i++) { CPoisonProjectile * projectile = m_projectiles[i]; projectile->Render(); EERIE_LIGHT * light = lightHandleGet(projectile->lLightId); if(light) { light->intensity = 2.3f * projectile->lightIntensityFactor; light->fallend = 250.f; light->fallstart = 150.f; light->rgb = Color3f::green; light->pos = projectile->eCurPos; light->creationTime = g_gameTime.now(); light->duration = GameDurationMs(200); } AddPoisonFog(projectile->eCurPos, m_level + 7); if(m_elapsed > GameDurationMs(1600)) { DamageParameters damage; damage.pos = projectile->eCurPos; damage.radius = 120.f; damage.damages = (4.f + m_level * 0.6f) * 0.001f * g_framedelay; damage.area = DAMAGE_FULL; damage.duration = g_gameTime.lastFrameDuration(); damage.source = m_caster; damage.flags = 0; damage.type = DAMAGE_TYPE_MAGICAL | DAMAGE_TYPE_POISON; DamageCreate(damage); } } }