void LoadAddonImages (void) { PrintLog ("Loading extra images\n"); PrintLog (" Loading corona image\n"); LoadCorona (); PrintLog (" Loading glare image\n"); LoadGlare (); PrintLog (" Loading halo image\n"); LoadHalo (); PrintLog (" Loading thruster image\n"); LoadThruster (1); LoadThruster (2); PrintLog (" Loading shield image\n"); LoadShield (); PrintLog (" Loading explosion blast image\n"); LoadExplBlast (); PrintLog (" Loading spark image\n"); LoadSparks (); PrintLog (" Loading deadzone image\n"); LoadDeadzone (); PrintLog (" Loading zoom image\n"); LoadScope (); PrintLog (" Loading damage icons\n"); LoadDamageIcons (); PrintLog (" Loading joystick emulator image\n"); LoadJoyMouse (); }
void RenderLaserCorona (CObject *objP, tRgbaColorf *colorP, float alpha, float fScale) { if (!SHOW_OBJ_FX) return; if (SHOW_SHADOWS && (gameStates.render.nShadowPass != 1)) return; if (gameOpts->render.coronas.bShots && LoadGlare ()) { tHitbox* phb = &gameData.models.hitboxes [objP->rType.polyObjInfo.nModel].hitboxes [0]; float fLength = X2F (phb->vMax [Z] - phb->vMin [Z]) / 2; tRgbaColorf color; static CFloatVector vEye = CFloatVector::ZERO; colorP->alpha = alpha; float fScale = coronaIntensities [gameOpts->render.coronas.nObjIntensity] / 2; color = *colorP; colorP = &color; color.red *= fScale; color.green *= fScale; color.blue *= fScale; bmpGlare->SetColor (colorP); ogl.RenderSprite (bmpGlare, objP->info.position.vPos + objP->info.position.mOrient.FVec () * (F2X (fLength - 0.5f)), I2X (1), I2X (1), alpha, LIGHTTRAIL_BLENDMODE, 1); bmpGlare->SetColor (NULL); } }
void RenderPowerupCorona (CObject *objP, float red, float green, float blue, float alpha) { if ((IsEnergyPowerup (objP->info.nId) ? gameOpts->render.coronas.bPowerups : gameOpts->render.coronas.bWeapons) && LoadGlare ()) { static tRgbaColorf keyColors [3] = { {0.2f, 0.2f, 0.9f, 0.2f}, {0.9f, 0.2f, 0.2f, 0.2f}, {0.9f, 0.8f, 0.2f, 0.2f} }; tRgbaColorf color; fix xSize; float fScale; if ((objP->info.nId >= POW_KEY_BLUE) && (objP->info.nId <= POW_KEY_GOLD)) { int i = objP->info.nId - POW_KEY_BLUE; color = keyColors [(((i < 0) || (i > 2)) ? 3 : i)]; xSize = I2X (12); } else { float b = (float) sqrt ((red * 3 + green * 5 + blue * 2) / 10); color.red = red / b; color.green = green / b; color.blue = blue / b; xSize = 2 * objP->info.xSize; //I2X (8); } color.alpha = alpha; fScale = coronaIntensities [gameOpts->render.coronas.nObjIntensity] / 2; color.red *= fScale; color.green *= fScale; color.blue *= fScale; bmpGlare->SetColor (&color); ogl.RenderSprite (bmpGlare, objP->info.position.vPos, xSize, xSize, alpha, LIGHTTRAIL_BLENDMODE, 5); bmpGlare->SetColor (NULL); } }
void RenderLightTrail (CObject *objP) { tRgbaColorf color, *colorP; int nTrailItem = -1, /*nCoronaItem = -1,*/ bGatling = 0; if (!SHOW_OBJ_FX) return; if (!gameData.objs.bIsWeapon [objP->info.nId]) return; if (SHOW_SHADOWS && (gameStates.render.nShadowPass != 1)) return; bGatling = (objP->info.nId == VULCAN_ID) || (objP->info.nId == GAUSS_ID); if (objP->info.renderType == RT_POLYOBJ) colorP = gameData.weapons.color + objP->info.nId; else { tRgbColorb *pcb = VClipColor (objP); color.red = pcb->red / 255.0f; color.green = pcb->green / 255.0f; color.blue = pcb->blue / 255.0f; colorP = &color; } if (!gameData.objs.bIsSlowWeapon [objP->info.nId] && gameStates.app.bHaveExtraGameInfo [IsMultiGame] && EGI_FLAG (bLightTrails, 0, 0, 0)) { if (gameOpts->render.particles.bPlasmaTrails) ;//DoObjectSmoke (objP); else if (EGI_FLAG (bLightTrails, 1, 1, 0) && (objP->info.nType == OBJ_WEAPON) && !gameData.objs.bIsSlowWeapon [objP->info.nId] && (!objP->mType.physInfo.velocity.IsZero ()) && LoadGlare ()) { CFloatVector vNorm, vCenter, vOffs, vTrailVerts [8]; float h, l, r, dx, dy; static CFloatVector vEye = CFloatVector::ZERO; static tRgbaColorf trailColor = {0,0,0,0.33f}; static tTexCoord2f tTexCoordTrail [8] = { //{{0.1f,0.1f}},{{0.9f,0.1f}},{{0.9f,0.9f}},{{0.1f,0.9f}} {{0.0f,0.0f}},{{1.0f,0.0f}},{{1.0f,0.5f}},{{0.0f,0.5f}}, {{0.0f,0.5f}},{{1.0f,0.5f}},{{1.0f,1.0f}},{{0.0f,1.0f}} }; vCenter.Assign (objP->info.position.vPos); vOffs.Assign (objP->info.position.mOrient.FVec ()); if (objP->info.renderType == RT_POLYOBJ) { tHitbox* phb = &gameData.models.hitboxes [objP->rType.polyObjInfo.nModel].hitboxes [0]; l = X2F (phb->vMax [Z] - phb->vMin [Z]); dx = X2F (phb->vMax [X] - phb->vMin [X]); dy = X2F (phb->vMax [Y] - phb->vMin [Y]); r = float (sqrt (dx * dx + dy * dy)) * ((objP->info.nId == FUSION_ID) ? 1.5f : 3.0f); vCenter += vOffs * (l / 2.0f); } else { r = WeaponBlobSize (objP->info.nId); l = r * 1.5f; r *= 2; } memcpy (&trailColor, colorP, 3 * sizeof (float)); float fScale = coronaIntensities [gameOpts->render.coronas.nObjIntensity] / 2; trailColor.red *= fScale; trailColor.green *= fScale; trailColor.blue *= fScale; vTrailVerts [0] = vCenter + vOffs * l; h = X2F (CFixVector::Dist (objP->info.position.vPos, objP->Origin ())); if (h > 50.0f) h = 50.0f; else if (h < 1.0f) h = 1.0f; vTrailVerts [7] = vTrailVerts [0] - vOffs * (h + l); transformation.Transform (vCenter, vCenter, 0); transformation.Transform (vTrailVerts [0], vTrailVerts [0], 0); transformation.Transform (vTrailVerts [7], vTrailVerts [7], 0); vNorm = CFloatVector::Normal (vTrailVerts [0], vTrailVerts [7], vEye); vNorm *= r; vTrailVerts [2] = vTrailVerts [5] = vCenter + vNorm; vTrailVerts [3] = vTrailVerts [4] = vCenter - vNorm; //vNorm /= 4; vTrailVerts [6] = vTrailVerts [7] + vNorm; vTrailVerts [7] -= vNorm; vNorm = CFloatVector::Normal (vTrailVerts [2], vTrailVerts [3], vEye); vNorm *= r; vTrailVerts [0] = vTrailVerts [3] - vNorm; vTrailVerts [1] = vTrailVerts [2] - vNorm; transparencyRenderer.AddPoly (NULL, NULL, bmpGlare, vTrailVerts, 8, tTexCoordTrail, &trailColor, NULL, 1, 0, GL_QUADS, GL_CLAMP, LIGHTTRAIL_BLENDMODE, -1); } } if ((objP->info.renderType != RT_POLYOBJ) || (objP->info.nId == FUSION_ID)) RenderWeaponCorona (objP, colorP, 0.5f, 0, 2.0f + X2F (d_rand() % (I2X (1) / 8)), 1, 0, 1); else RenderWeaponCorona (objP, colorP, 0.75f, 0, bGatling ? 1.0f : 2.0f, 0, 0, 0); }