mirror of
https://github.com/nzp-team/dquakeplus.git
synced 2024-11-22 03:41:35 +00:00
Merge pull request #29 from shpuld/feat/horizon-fog-blend
This commit is contained in:
commit
85b63809fc
11 changed files with 264 additions and 355 deletions
|
@ -62,6 +62,9 @@ qboolean con_initialized;
|
|||
|
||||
int con_notifylines; // scan lines to clear for notify lines
|
||||
|
||||
#define MAXGAMEDIRLEN 1000
|
||||
char debuglogfile[MAXGAMEDIRLEN + 1];
|
||||
|
||||
extern void M_Menu_Main_f (void);
|
||||
|
||||
void M_OSK_Draw (void);
|
||||
|
@ -218,8 +221,6 @@ Con_Init
|
|||
*/
|
||||
void Con_Init (void)
|
||||
{
|
||||
#define MAXGAMEDIRLEN 1000
|
||||
char temp[MAXGAMEDIRLEN+1];
|
||||
char *t2 = "/condebug.log";
|
||||
|
||||
con_debuglog = COM_CheckParm("-condebug");
|
||||
|
@ -228,8 +229,8 @@ void Con_Init (void)
|
|||
{
|
||||
if (strlen (com_gamedir) < (MAXGAMEDIRLEN - strlen (t2)))
|
||||
{
|
||||
sprintf (temp, "%s%s", com_gamedir, t2);
|
||||
unlink (temp);
|
||||
sprintf (debuglogfile, "%s%s", com_gamedir, t2);
|
||||
unlink (debuglogfile);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -396,7 +397,7 @@ void Con_Printf (char *fmt, ...)
|
|||
|
||||
// log all messages to file
|
||||
if (con_debuglog)
|
||||
Con_DebugLog(va("%s/condebug.log",com_gamedir), "%s", msg);
|
||||
Con_DebugLog(debuglogfile, "%s", msg);
|
||||
|
||||
if (!con_initialized)
|
||||
return;
|
||||
|
|
|
@ -36,6 +36,7 @@ int GL_LoadTextureLM (const char *identifier, int width, int height, const byte
|
|||
int GL_LoadImages (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level, int bpp);
|
||||
int GL_LoadTexturePixels (byte *data, char *identifier, int width, int height, int mode);
|
||||
int loadtextureimage (char* filename, int matchwidth, int matchheight, qboolean complain, int filter);
|
||||
int loadskyboxsideimage (char* filename, int matchwidth, int matchheight, qboolean complain, int filter);
|
||||
int GL_LoadPaletteTexture (const char *identifier, int width, int height, const byte *data, byte *palette, int paltype, qboolean stretch_to_power_of_two, int filter, int mipmap_level);
|
||||
|
||||
//Crow_bar
|
||||
|
@ -195,7 +196,7 @@ extern mleaf_t *r_viewleaf, *r_oldviewleaf;
|
|||
extern texture_t *r_notexture_mip;
|
||||
extern int d_lightstylevalue[256]; // 8.8 fraction of base light value
|
||||
|
||||
extern int skyimage[6]; // Where sky images are stored
|
||||
extern int skyimage[5]; // Where sky images are stored
|
||||
extern int lightmap_index[MAX_LIGHTMAPS]; // Where lightmaps are stored
|
||||
|
||||
extern int reloaded_pallete;
|
||||
|
@ -239,6 +240,7 @@ extern cvar_t r_asynch;
|
|||
extern cvar_t cl_loadmapcfg;
|
||||
extern cvar_t r_fastsky;
|
||||
extern cvar_t r_skycolor;
|
||||
extern cvar_t r_skyfogblend;
|
||||
extern cvar_t r_waterripple;
|
||||
extern cvar_t r_norefresh;
|
||||
extern cvar_t r_drawentities;
|
||||
|
@ -422,6 +424,7 @@ int D_DrawParticleBuffered (psp_particle* vertices, particle2_t *pparticl
|
|||
|
||||
|
||||
extern int zombie_skins[2][2];
|
||||
extern qpic_t* sniper_scope;
|
||||
|
||||
extern int faces_rejected, faces_checked, faces_clipped;
|
||||
|
||||
|
|
|
@ -64,7 +64,6 @@ typedef enum
|
|||
p_blood2,
|
||||
p_blood3,
|
||||
p_bloodcloud,
|
||||
p_q3blood,
|
||||
p_flame,
|
||||
p_lavatrail,
|
||||
p_bubble2,
|
||||
|
@ -86,15 +85,7 @@ typedef enum
|
|||
p_muzzleflash3,
|
||||
|
||||
#endif // SLIM
|
||||
|
||||
p_q3blood_trail,
|
||||
p_q3blood_decal,
|
||||
p_q3rocketsmoke,
|
||||
p_q3grenadesmoke,
|
||||
p_q3explosion,
|
||||
p_q3flame,
|
||||
p_q3gunshot,
|
||||
p_q3teleport,
|
||||
num_particletypes
|
||||
} part_type_t;
|
||||
|
||||
|
@ -132,10 +123,6 @@ typedef enum
|
|||
#endif // SLIM
|
||||
|
||||
ptex_bloodcloud,
|
||||
ptex_q3blood,
|
||||
ptex_q3blood_trail,
|
||||
ptex_q3smoke,
|
||||
ptex_q3explosion,
|
||||
ptex_q3flame,
|
||||
num_particletextures
|
||||
} part_tex_t;
|
||||
|
@ -268,15 +255,7 @@ static byte *ColorForParticle (part_type_t type)
|
|||
color[3] = 64;
|
||||
break;
|
||||
|
||||
case p_q3rocketsmoke:
|
||||
case p_q3grenadesmoke:
|
||||
color[0] = color[1] = color[2] = 160;
|
||||
break;
|
||||
|
||||
case p_q3explosion:
|
||||
case p_q3flame:
|
||||
case p_q3gunshot: // not used
|
||||
case p_q3teleport: // not used
|
||||
color[0] = color[1] = color[2] = 255;
|
||||
break;
|
||||
|
||||
|
@ -354,13 +333,6 @@ static byte *ColorForParticle (part_type_t type)
|
|||
color[3] = 200;
|
||||
break;
|
||||
|
||||
case p_q3blood:
|
||||
case p_q3blood_trail:
|
||||
case p_q3blood_decal:
|
||||
color[0] = 180;
|
||||
color[1] = color[2] = 0;
|
||||
break;
|
||||
|
||||
case p_flame:
|
||||
color[0] = 255;
|
||||
color[1] = 100;
|
||||
|
@ -471,32 +443,6 @@ void QMB_InitParticles (void)
|
|||
|
||||
loading_cur_step++;
|
||||
SCR_UpdateScreen ();
|
||||
|
||||
// load the rest of the images
|
||||
if(!(particleimage = loadtextureimage("textures/particles/q3particlefont", 0, 0, qfalse, GU_LINEAR)))
|
||||
{
|
||||
//Clear_LoadingFill ();
|
||||
return;
|
||||
}
|
||||
|
||||
GL_MarkTextureAsPermanent(particleimage);
|
||||
|
||||
max_s = 384.0; max_t = 192.0;
|
||||
for (i = 0, ti = 0 ; i < 2 ; i++)
|
||||
for (j = 0 ; j < 4 ; j++, ti++)
|
||||
ADD_PARTICLE_TEXTURE(ptex_q3explosion, particleimage, ti, 8, j * 64, i * 64, (j + 1) * 64, (i + 1) * 64);
|
||||
|
||||
|
||||
loading_cur_step++;
|
||||
SCR_UpdateScreen ();
|
||||
|
||||
for (i = 0 ; i < 5 ; i++)
|
||||
ADD_PARTICLE_TEXTURE(ptex_q3blood, particleimage, i, 5, i * 64, 128, (i + 1) * 64, 192);
|
||||
ADD_PARTICLE_TEXTURE(ptex_q3smoke, particleimage, 0, 1, 256, 0, 384, 128);
|
||||
ADD_PARTICLE_TEXTURE(ptex_q3blood_trail, particleimage, 0, 1, 320, 128, 384, 192);
|
||||
|
||||
loading_cur_step++;
|
||||
SCR_UpdateScreen ();
|
||||
|
||||
max_s = max_t = 128.0;
|
||||
|
||||
|
@ -507,13 +453,9 @@ void QMB_InitParticles (void)
|
|||
}
|
||||
|
||||
GL_MarkTextureAsPermanent(particleimage);
|
||||
|
||||
/*max_s = max_t = 128.0;
|
||||
for (i = 0, ti = 0 ; i < 2 ; i++)
|
||||
for (j = 0 ; j < 2 ; j++, ti++)
|
||||
ADD_PARTICLE_TEXTURE(ptex_q3flame, particleimage, ti, 8, j * 64, i * 64, (j + 1) * 64, (i + 1) * 64);*/
|
||||
max_s = max_t = 64.0;
|
||||
ADD_PARTICLE_TEXTURE(ptex_q3flame, particleimage, 0, 1, 0, 0, 64, 64);
|
||||
|
||||
max_s = max_t = 64.0;
|
||||
loading_cur_step++;
|
||||
SCR_UpdateScreen ();
|
||||
|
||||
|
@ -690,19 +632,10 @@ void QMB_InitParticles (void)
|
|||
|
||||
//shpuldeditedthis(GI_ONE_MINUS_DST_ALPHA->GL_ONE_MINUS_SRC_ALPHA) (edited one right after this comment)
|
||||
ADD_PARTICLE_TYPE(p_bloodcloud, pd_billboard, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, ptex_bloodcloud, 255, -2, 0, pm_normal, 0);
|
||||
ADD_PARTICLE_TYPE(p_q3blood, pd_billboard, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, ptex_q3blood, 255, 0, 0, pm_static, -1);
|
||||
ADD_PARTICLE_TYPE(p_q3blood_trail, pd_billboard, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, ptex_q3blood_trail, 255, -1.5, 0, pm_die, -1);
|
||||
ADD_PARTICLE_TYPE(p_q3rocketsmoke, pd_billboard, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, ptex_q3smoke, 80, 0, 0, pm_die, 0);
|
||||
|
||||
loading_cur_step++;
|
||||
SCR_UpdateScreen();
|
||||
|
||||
ADD_PARTICLE_TYPE(p_q3grenadesmoke, pd_billboard, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, ptex_q3smoke, 80, 0, 0, pm_die, 0);
|
||||
ADD_PARTICLE_TYPE(p_q3explosion, pd_billboard, GU_SRC_ALPHA, GU_ONE_MINUS_DST_ALPHA, ptex_q3explosion, 204, 0, 0, pm_static, -1);
|
||||
//old: ADD_PARTICLE_TYPE(p_q3flame, pd_q3flame, GU_SRC_ALPHA, GU_ONE_MINUS_DST_ALPHA, ptex_q3flame, 204, 0, 0, pm_static, -1);
|
||||
ADD_PARTICLE_TYPE(p_q3flame, pd_billboard, GU_SRC_ALPHA, GU_FIX, ptex_q3flame, 180, 0.66, 0, pm_nophysics, 0);
|
||||
ADD_PARTICLE_TYPE(p_q3gunshot, pd_q3gunshot, GU_SRC_ALPHA, GU_ONE_MINUS_DST_ALPHA, ptex_none, 255, 0, 0, pm_static, -1);
|
||||
ADD_PARTICLE_TYPE(p_q3teleport, pd_q3teleport, GU_SRC_ALPHA, GU_ONE_MINUS_DST_ALPHA, ptex_none, 255, 0, 0, pm_static, -1);
|
||||
|
||||
loading_cur_step++;
|
||||
strcpy(loading_name, "particles");
|
||||
|
@ -817,7 +750,6 @@ __inline static void AddParticle (part_type_t type, vec3_t org, int count, float
|
|||
case p_streak:
|
||||
case p_streakwave:
|
||||
case p_shockwave:
|
||||
case p_q3teleport:
|
||||
VectorCopy (org, p->org);
|
||||
VectorCopy (dir, p->vel);
|
||||
break;
|
||||
|
@ -858,24 +790,6 @@ __inline static void AddParticle (part_type_t type, vec3_t org, int count, float
|
|||
p->growth = -30;
|
||||
break;
|
||||
|
||||
case p_q3explosion:
|
||||
p->texindex = 0;
|
||||
VectorCopy (org, p->org);
|
||||
VectorClear (p->vel);
|
||||
p->growth = 50;
|
||||
for (j=1 ; j<8 ; j++)
|
||||
{
|
||||
INIT_NEW_PARTICLE(pt, p, color, size, time);
|
||||
p->size = size + j * 2;
|
||||
p->start = cl.time + (j * time / 2.0);
|
||||
p->die = p->start + time;
|
||||
p->texindex = j;
|
||||
VectorCopy (org, p->org);
|
||||
VectorClear (p->vel);
|
||||
p->growth = 50;
|
||||
}
|
||||
break;
|
||||
|
||||
case p_sparkray:
|
||||
VectorCopy (org, p->endorg);
|
||||
VectorCopy (dir, p->org);
|
||||
|
@ -942,23 +856,6 @@ __inline static void AddParticle (part_type_t type, vec3_t org, int count, float
|
|||
p->vel[j] = (rand() % 40) - 20;
|
||||
break;
|
||||
|
||||
case p_q3blood:
|
||||
p->texindex = q3blood_texindex++ % 5;
|
||||
for (k=0 ; k<3 ; k++)
|
||||
p->org[k] = org[k] + (rand() & 15) - 8;
|
||||
VectorClear (p->vel);
|
||||
for (j=1 ; j<3 ; j++)
|
||||
{
|
||||
INIT_NEW_PARTICLE(pt, p, color, size, time);
|
||||
p->start = cl.time + (j * time);
|
||||
p->die = p->start + time;
|
||||
p->texindex = q3blood_texindex++ % 5;
|
||||
for (k=0 ; k<3 ; k++)
|
||||
p->org[k] = org[k] + (rand() & 15) - 8;
|
||||
VectorClear (p->vel);
|
||||
}
|
||||
break;
|
||||
|
||||
case p_flame:
|
||||
VectorCopy (org, p->org);
|
||||
p->growth = -p->size / 2;
|
||||
|
@ -975,19 +872,6 @@ __inline static void AddParticle (part_type_t type, vec3_t org, int count, float
|
|||
p->growth = 6;
|
||||
break;
|
||||
|
||||
case p_q3gunshot:
|
||||
p->texindex = 0; // used for animation here
|
||||
VectorCopy (org, p->org);
|
||||
for (j=1 ; j<3 ; j++)
|
||||
{
|
||||
INIT_NEW_PARTICLE(pt, p, color, size, time);
|
||||
p->start = cl.time + (j * time / 2.0);
|
||||
p->die = p->start + time;
|
||||
p->texindex = j + 1;
|
||||
VectorCopy (org, p->org);
|
||||
}
|
||||
break;
|
||||
|
||||
case p_torch_flame:
|
||||
for (j=0 ; j<3 ; j++)
|
||||
p->org[j] = org[j] + (rand() & 3) - 2;
|
||||
|
@ -1048,16 +932,6 @@ __inline static void AddParticleTrail (part_type_t type, vec3_t start, vec3_t en
|
|||
|
||||
switch (type)
|
||||
{
|
||||
|
||||
case p_q3blood_trail:
|
||||
case p_q3rocketsmoke:
|
||||
count = length / 40.0;
|
||||
break;
|
||||
|
||||
case p_q3grenadesmoke:
|
||||
count = length / 12.0;
|
||||
break;
|
||||
|
||||
case p_alphatrail:
|
||||
case p_trailpart:
|
||||
case p_lavatrail:
|
||||
|
@ -1119,15 +993,6 @@ __inline static void AddParticleTrail (part_type_t type, vec3_t start, vec3_t en
|
|||
p->growth = 6;
|
||||
break;
|
||||
|
||||
case p_q3blood_trail:
|
||||
VectorCopy (point, p->org);
|
||||
for (j=0 ; j<3 ; j++)
|
||||
p->org[j] += ((rand() & 15) - 8) / 8.0;
|
||||
for (j=0 ; j<3 ; j++)
|
||||
p->vel[j] = ((rand() & 15) - 8) / 2.0;
|
||||
p->growth = 6;
|
||||
break;
|
||||
|
||||
case p_bubble2:
|
||||
VectorCopy(point, p->org);
|
||||
for (j=0 ; j<3 ; j++)
|
||||
|
@ -1158,19 +1023,6 @@ __inline static void AddParticleTrail (part_type_t type, vec3_t start, vec3_t en
|
|||
p->rotspeed = (rand() & 63) + 96;
|
||||
break;
|
||||
|
||||
case p_q3rocketsmoke:
|
||||
case p_q3grenadesmoke:
|
||||
VectorCopy (point, p->org);
|
||||
for (j=0 ; j<3 ; j++)
|
||||
p->org[j] += ((rand() & 7) - 4) / 8.0;
|
||||
VectorClear (p->vel);
|
||||
p->growth = 30;
|
||||
if (rotangle >= 360)
|
||||
rotangle = 0;
|
||||
p->rotangle = rotangle;
|
||||
rotangle += 30;
|
||||
break;
|
||||
|
||||
case p_dpsmoke:
|
||||
VectorCopy (point, p->org);
|
||||
for (j=0 ; j<3 ; j++)
|
||||
|
@ -1290,25 +1142,6 @@ inline static void QMB_UpdateParticles(void)
|
|||
|
||||
switch (pt->id)
|
||||
{
|
||||
|
||||
case p_q3blood: // avoid alpha for q3blood
|
||||
p->color[3] = 255;
|
||||
break;
|
||||
|
||||
case p_q3explosion:
|
||||
case p_q3gunshot:
|
||||
if (particle_time < (p->start + (p->die - p->start) / 2.0))
|
||||
{
|
||||
if (pt->id == p_q3gunshot && !p->texindex)
|
||||
p->color[3] = 255;
|
||||
else
|
||||
p->color[3] = pt->startalpha * ((particle_time - p->start) / (p->die - p->start) * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
p->color[3] = pt->startalpha * ((p->die - particle_time) / (p->die - p->start) * 2);
|
||||
}
|
||||
break;
|
||||
case p_streaktrail://R00k
|
||||
case p_lightningbeam:
|
||||
p->color[3] = p->bounces * ((p->die - particle_time) / (p->die - p->start));
|
||||
|
@ -1415,8 +1248,6 @@ inline static void QMB_UpdateParticles(void)
|
|||
R_SpawnDecal (p->org, normal, tangent, decal_blood1, 12, 0);
|
||||
else if (pt->id == p_blood2 && r_decal_blood.value)
|
||||
R_SpawnDecal (p->org, normal, tangent, decal_blood2, 12, 0);
|
||||
else if (pt->id == p_q3blood_trail && r_decal_blood.value)
|
||||
R_SpawnDecal (p->org, normal, tangent, decal_q3blood, 48, 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1546,7 +1377,7 @@ void R_CalcBeamVerts (float *vert, vec3_t org1, vec3_t org2, float width)
|
|||
}
|
||||
|
||||
#define DRAW_PARTICLE_BILLBOARD(_ptex, _p, _coord) \
|
||||
sceGumPushMatrix (); \
|
||||
sceGumPushMatrix (); \
|
||||
\
|
||||
const ScePspFVector3 translation = \
|
||||
{ \
|
||||
|
@ -1560,7 +1391,7 @@ void R_CalcBeamVerts (float *vert, vec3_t org1, vec3_t org2, float width)
|
|||
}; \
|
||||
sceGumScale(&scale); \
|
||||
\
|
||||
if (_p->rotspeed || pt->id == p_q3rocketsmoke || pt->id == p_q3grenadesmoke)\
|
||||
if (_p->rotspeed) \
|
||||
{ \
|
||||
const ScePspFVector3 rotation = \
|
||||
{ \
|
||||
|
@ -2049,25 +1880,11 @@ void QMB_ParticleExplosion (vec3_t org)
|
|||
AddParticle (p_bubble, org, 6, 3.0, 2.5, NULL, zerodir);
|
||||
AddParticle (p_bubble, org, 4, 2.35, 2.5, NULL, zerodir);
|
||||
|
||||
if (r_part_explosions.value == 2)
|
||||
AddParticle (p_fire, org, 16, 120, 1, NULL, zerodir);
|
||||
if (r_explosiontype.value != 1)
|
||||
{
|
||||
AddParticle (p_q3explosion, org, 1, 36, 0.2, NULL, zerodir);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (r_part_explosions.value == 2)
|
||||
{
|
||||
AddParticle (p_q3explosion, org, 1, 36, 0.2, NULL, zerodir);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddParticle (p_fire, org, 16, 120, 1, NULL, zerodir);
|
||||
if (r_explosiontype.value != 1)
|
||||
{
|
||||
AddParticle (p_spark, org, 50, 250, 0.925f, NULL, zerodir);
|
||||
AddParticle (p_spark, org, 25, 150, 0.925f, NULL, zerodir);
|
||||
}
|
||||
}
|
||||
AddParticle (p_spark, org, 50, 250, 0.925f, NULL, zerodir);
|
||||
AddParticle (p_spark, org, 25, 150, 0.925f, NULL, zerodir);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2316,10 +2133,7 @@ void QMB_RunParticleEffect (vec3_t org, vec3_t dir, int col, int count)
|
|||
{
|
||||
color[0] = 200; color[1] = 200; color[2] = 125;
|
||||
|
||||
if (r_part_spikes.value == 2)
|
||||
AddParticle (p_q3gunshot, org, 1, 1, 0.3, NULL, zerodir);
|
||||
else
|
||||
AddParticle (p_spark, org, 6, 70, 0.6, NULL, zerodir);
|
||||
AddParticle (p_spark, org, 6, 70, 0.6, NULL, zerodir);
|
||||
|
||||
AddParticle (p_chunk, org, 3, 1, 0.75, NULL, zerodir);
|
||||
|
||||
|
@ -2340,11 +2154,7 @@ void QMB_RunParticleEffect (vec3_t org, vec3_t dir, int col, int count)
|
|||
case 20://super nailgun
|
||||
color[0] = 200; color[1] = 200; color[2] = 125;
|
||||
|
||||
if (r_part_spikes.value == 2)
|
||||
AddParticle (p_q3gunshot, org, 1, 1, 0.3, NULL, zerodir);
|
||||
else
|
||||
//AddParticle (p_spark, org, 2, 85, 0.4, color, zerodir);
|
||||
AddParticle (p_spark, org, 22, 100, 0.2, NULL, zerodir);
|
||||
AddParticle (p_spark, org, 22, 100, 0.2, NULL, zerodir);
|
||||
|
||||
//AddParticle (p_chunk, org, 6, 2, 0.75, NULL, zerodir);
|
||||
|
||||
|
@ -2362,12 +2172,6 @@ void QMB_RunParticleEffect (vec3_t org, vec3_t dir, int col, int count)
|
|||
break;
|
||||
|
||||
case 24:// gunshot
|
||||
if (r_part_gunshots.value == 2)
|
||||
{
|
||||
AddParticle (p_q3gunshot, org, 1, 1, 0.3, NULL, zerodir);
|
||||
}
|
||||
else
|
||||
{
|
||||
particlecount = count >> 1;
|
||||
AddParticle (p_gunblast, org, 1, 1.04, 0.2, NULL, zerodir);
|
||||
for (i=0 ; i<particlecount ; i++)
|
||||
|
@ -2392,19 +2196,11 @@ void QMB_RunParticleEffect (vec3_t org, vec3_t dir, int col, int count)
|
|||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 30:
|
||||
if (r_part_spikes.value == 2)
|
||||
{
|
||||
AddParticle (p_q3gunshot, org, 1, 1, 0.3, NULL, zerodir);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddParticle (p_chunk, org, 10, 1, 4, NULL, zerodir);
|
||||
AddParticle (p_spark, org, 8, 105, 0.9, NULL, zerodir);
|
||||
}
|
||||
AddParticle (p_chunk, org, 10, 1, 4, NULL, zerodir);
|
||||
AddParticle (p_spark, org, 8, 105, 0.9, NULL, zerodir);
|
||||
break;
|
||||
|
||||
case 128: // electric sparks (R00k added from QMB)
|
||||
|
@ -2756,10 +2552,7 @@ void QMB_RocketTrail (vec3_t start, vec3_t end, trail_type_t type)
|
|||
|
||||
case BLOOD_TRAIL:
|
||||
case SLIGHT_BLOOD_TRAIL:
|
||||
if (r_part_trails.value == 2)
|
||||
AddParticleTrail (p_q3blood_trail, start, end, 15, 2, NULL);
|
||||
else
|
||||
AddParticleTrail (p_blood3, start, end, type == BLOOD_TRAIL ? 1.35 : 2.4, 2, NULL);
|
||||
AddParticleTrail (p_blood3, start, end, type == BLOOD_TRAIL ? 1.35 : 2.4, 2, NULL);
|
||||
break;
|
||||
|
||||
case TRACER1_TRAIL:
|
||||
|
@ -2979,12 +2772,6 @@ void QMB_TeleportSplash (vec3_t org)
|
|||
vec3_t neworg, angle;
|
||||
col_t color;
|
||||
|
||||
if (r_part_telesplash.value == 2)
|
||||
{
|
||||
AddParticle (p_q3teleport, org, 1, 1, 1.0, NULL, zerodir);
|
||||
return;
|
||||
}
|
||||
|
||||
//QMB_Shockwave_Splash(org, 120);
|
||||
for (i=-12 ; i<=12 ; i+=6)
|
||||
{
|
||||
|
|
|
@ -23,8 +23,6 @@ extern "C"
|
|||
{
|
||||
#include "../quakedef.h"
|
||||
}
|
||||
|
||||
#include <list>
|
||||
#include <pspgu.h>
|
||||
|
||||
#include "clipping.hpp"
|
||||
|
@ -33,8 +31,6 @@ extern "C"
|
|||
using namespace std;
|
||||
using namespace quake;
|
||||
|
||||
list<int> TempDecalTextureList;
|
||||
|
||||
#ifdef SLIM
|
||||
#define DEFAULT_NUM_DECALS 1024 //*4
|
||||
#else
|
||||
|
@ -115,23 +111,7 @@ void R_InitDecals (void)
|
|||
|
||||
if (!qmb_initialized)
|
||||
return;
|
||||
/*
|
||||
decal_blood1 = loadtextureimage("textures/decals/blood_splat01", 0, 0, qfalse, GU_LINEAR);
|
||||
decal_blood2 = loadtextureimage("textures/decals/blood_splat02", 0, 0, qfalse, GU_LINEAR);
|
||||
decal_blood3 = loadtextureimage("textures/decals/blood_splat03", 0, 0, qfalse, GU_LINEAR);
|
||||
decal_q3blood = loadtextureimage("textures/decals/blood_stain", 0, 0, qfalse, GU_LINEAR);
|
||||
decal_burn = loadtextureimage("textures/decals/explo_burn01", 0, 0, qfalse, GU_LINEAR);
|
||||
decal_mark = loadtextureimage("textures/decals/particle_burn01", 0, 0, qfalse, GU_LINEAR);
|
||||
decal_glow = loadtextureimage("textures/decals/glow2", 0, 0, qfalse, GU_LINEAR);
|
||||
|
||||
decal_blood1 = GL_LoadTextureImage ("textures/decals/blood_splat01", "decals:blood_splat01", 128, 128, TEX_ALPHA | TEX_COMPLAIN);
|
||||
decal_blood2 = GL_LoadTextureImage ("textures/decals/blood_splat02", "decals:blood_splat02", 128, 128, TEX_ALPHA | TEX_COMPLAIN);
|
||||
decal_blood3 = GL_LoadTextureImage ("textures/decals/blood_splat03", "decals:blood_splat03", 128, 128, TEX_ALPHA | TEX_COMPLAIN);
|
||||
decal_q3blood = GL_LoadTextureImage ("textures/decals/blood_stain", "decals:blood_stain", 64, 64, TEX_ALPHA | TEX_COMPLAIN);
|
||||
decal_burn = GL_LoadTextureImage ("textures/decals/explo_burn01", "decals:explo_burn01", 128, 128, TEX_ALPHA | TEX_COMPLAIN);
|
||||
decal_mark = GL_LoadTextureImage ("textures/decals/particle_burn01", "decals:particle_burn01", 64, 64, TEX_ALPHA | TEX_COMPLAIN);
|
||||
decal_glow = GL_LoadTextureImage ("textures/decals/glow2", "decals:glow2", 64, 64, TEX_ALPHA | TEX_COMPLAIN);
|
||||
*/
|
||||
if ((i = COM_CheckParm("-decals")) && i + 1 < com_argc)
|
||||
{
|
||||
r_numdecals = Q_atoi(com_argv[i+1]);
|
||||
|
@ -167,12 +147,6 @@ void R_ClearDecals (void)
|
|||
|
||||
decals[r_numdecals-1].next = NULL;
|
||||
|
||||
while (TempDecalTextureList.size() > 0)
|
||||
{
|
||||
int index = TempDecalTextureList.front();
|
||||
TempDecalTextureList.pop_front();
|
||||
GL_UnloadTexture(index);
|
||||
}
|
||||
wadreload = 1;
|
||||
}
|
||||
|
||||
|
@ -404,19 +378,6 @@ void R_SpawnDecalBSP (vec3_t org, char *texname, int size)
|
|||
}
|
||||
}
|
||||
|
||||
//don't free static decals
|
||||
if((tex != decal_q3blood) &&
|
||||
(tex != decal_blood1) &&
|
||||
(tex != decal_blood2) &&
|
||||
(tex != decal_blood3) &&
|
||||
(tex != decal_q3blood) &&
|
||||
(tex != decal_burn) &&
|
||||
(tex != decal_mark) &&
|
||||
(tex != decal_glow))
|
||||
{
|
||||
TempDecalTextureList.push_back(tex); //write to list ,for unload
|
||||
}
|
||||
|
||||
VectorClear (bestorg);
|
||||
VectorClear (bestnormal);
|
||||
VectorClear(tempVec);
|
||||
|
|
|
@ -528,27 +528,6 @@ void Draw_Init (void)
|
|||
GL_MarkTextureAsPermanent(char_texture);
|
||||
if (char_texture == 0)// did not find a matching TGA...
|
||||
Sys_Error ("Could not load charset, make sure you have every folder and file installed properly\nDouble check that all of your files are in their correct places\nAnd that you have installed the game properly.\nRefer to the readme.txt file for help\n");
|
||||
|
||||
sniper_scope = Draw_CachePic ("gfx/hud/scope_256");
|
||||
// GL_MarkTextureAsPermanent(sniper_scope);
|
||||
|
||||
zombie_skins[0][0] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[0][0]);
|
||||
// PSP PHAT: Only have 1 Zombie skin.. this saves 192kB of VRAM, well worth it.
|
||||
|
||||
#ifdef SLIM
|
||||
|
||||
zombie_skins[0][1] = loadtextureimage ("models/ai/zfull.mdl_1", 0, 0, qtrue, GU_LINEAR);
|
||||
zombie_skins[1][0] = loadtextureimage ("models/ai/zfull.mdl_2", 0, 0, qtrue, GU_LINEAR);
|
||||
zombie_skins[1][1] = loadtextureimage ("models/ai/zfull.mdl_3", 0, 0, qtrue, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[0][1]);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[1][0]);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[1][1]);
|
||||
#else
|
||||
zombie_skins[0][1] = zombie_skins[0][0];
|
||||
zombie_skins[1][0] = zombie_skins[0][0];
|
||||
zombie_skins[1][1] = zombie_skins[0][0];
|
||||
#endif // SLIM
|
||||
|
||||
Clear_LoadingFill ();
|
||||
}
|
||||
|
@ -3114,7 +3093,7 @@ int GL_LoadImages (const char *identifier, int width, int height, const byte *da
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// HACK HACK: Force use of DXT5 for the mbox glow
|
||||
char specChar = identifier[strlen(identifier) - 7];
|
||||
if (specChar == '$')
|
||||
|
@ -3220,7 +3199,6 @@ int GL_LoadImages (const char *identifier, int width, int height, const byte *da
|
|||
//FIXME: this isn't completely clearing out the normal ram stuff :s
|
||||
if (texture.vram && texture.ram)
|
||||
{
|
||||
Con_Printf("Put %s into VRAM (%dkB)\n", identifier, buffer_size/1024);
|
||||
free(texture.ram);
|
||||
texture.ram = NULL;
|
||||
} else {
|
||||
|
|
|
@ -239,7 +239,7 @@ Fog_SetupFrame
|
|||
called at the beginning of each frame
|
||||
=============
|
||||
*/
|
||||
void Fog_SetupFrame (void)
|
||||
void Fog_SetupFrame (bool worldgeom)
|
||||
{
|
||||
float c[4];
|
||||
float f, s, e;
|
||||
|
@ -268,7 +268,11 @@ void Fog_SetupFrame (void)
|
|||
if(e == 0)
|
||||
e = -1;
|
||||
|
||||
sceGuFog ( s, e, GU_COLOR( c[0]* 0.01f, c[1]* 0.01f, c[2]* 0.01f, c[3] ) );
|
||||
// If we have normal color fog for world geom + lightmap, then the resulting color when fully fogged is wrong.
|
||||
// If we have exactly 0.5 0.5 0.5 gray for world game and normal fog for lightmap, the end result of fully fogged
|
||||
// stuff is the actual fog color.
|
||||
unsigned int color = worldgeom ? GU_COLOR(0.5f, 0.5f, 0.5f, c[3]) : GU_COLOR(c[0]* 0.01f, c[1]* 0.01f, c[2]* 0.01f, c[3]);
|
||||
sceGuFog(s, e, color);
|
||||
|
||||
if(s == 0 || e < 0)
|
||||
sceGuDisable(GU_FOG);
|
||||
|
|
|
@ -1088,6 +1088,34 @@ int loadtextureimage (char* filename, int matchwidth, int matchheight, qboolean
|
|||
return texture_index;
|
||||
}
|
||||
|
||||
// Hacky thing to only load a top half of an image for skybox sides, hard to imagine other use for this
|
||||
int loadskyboxsideimage (char* filename, int matchwidth, int matchheight, qboolean complain, int filter)
|
||||
{
|
||||
int texture_index;
|
||||
byte *data;
|
||||
|
||||
int hunk_start = Hunk_LowMark();
|
||||
data = loadimagepixels (filename, complain, matchwidth, matchheight);
|
||||
int hunk_stop = Hunk_LowMark();
|
||||
|
||||
if(!data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int newheight = image_height * 0.5;
|
||||
|
||||
texture_index = GL_LoadImages (filename, image_width, newheight, data, qtrue, filter, 0, 4);
|
||||
|
||||
// Only free the hunk if it was used.
|
||||
if (hunk_start != hunk_stop)
|
||||
Hunk_FreeToLowMark(hunk_start);
|
||||
else
|
||||
free(data);
|
||||
|
||||
return texture_index;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
loadrgbafrompal
|
||||
|
|
|
@ -38,7 +38,7 @@ using namespace quake;
|
|||
//prototypes
|
||||
extern "C" void V_CalcBlend (void);
|
||||
|
||||
void Fog_SetupFrame (void);
|
||||
void Fog_SetupFrame (bool worldgeom);
|
||||
void Fog_EnableGFog (void);
|
||||
void Fog_DisableGFog (void);
|
||||
void R_DrawDecals (void);
|
||||
|
@ -141,6 +141,7 @@ cvar_t r_showbboxes_full = {"r_showbboxes_full", "0",qtrue};
|
|||
cvar_t r_showtris = {"r_showtris", "0"};
|
||||
cvar_t r_showtris_full = {"r_showtris_full", "0",qtrue};
|
||||
cvar_t r_polyblend = {"r_polyblend", "1",qtrue};
|
||||
cvar_t r_skyfogblend = {"r_skyfogblend", "0.6", qtrue};
|
||||
|
||||
//QMB
|
||||
cvar_t r_explosiontype = {"r_explosiontype", "0",qtrue};
|
||||
|
@ -3693,7 +3694,7 @@ void R_RenderScene (void)
|
|||
vrect_t* renderrect = &r_refdef.vrect;
|
||||
|
||||
//setupframe
|
||||
Fog_SetupFrame();
|
||||
Fog_SetupFrame(false);
|
||||
R_AnimateLight();
|
||||
++r_framecount;
|
||||
|
||||
|
@ -3789,7 +3790,8 @@ void R_RenderScene (void)
|
|||
}
|
||||
}
|
||||
|
||||
sceGumPerspective(fovy, fovx, 4, r_maxrange.value);
|
||||
float farplanedist = (r_refdef.fog_start == 0 || r_refdef.fog_end < 0) ? 4096 : (r_refdef.fog_end + 16);
|
||||
sceGumPerspective(fovy, fovx, 4, farplanedist);
|
||||
|
||||
if (mirror)
|
||||
{
|
||||
|
@ -3839,7 +3841,7 @@ void R_RenderScene (void)
|
|||
|
||||
sceGumMatrixMode(GU_PROJECTION);
|
||||
sceGumLoadIdentity();
|
||||
sceGumPerspective(fovy, fovx, 4, r_maxrange.value);
|
||||
sceGumPerspective(fovy, fovx, 4, farplanedist);
|
||||
sceGumUpdateMatrix();
|
||||
sceGumMatrixMode(GU_MODEL);
|
||||
|
||||
|
|
|
@ -43,17 +43,29 @@ R_InitOtherTextures
|
|||
*/
|
||||
void R_InitOtherTextures (void)
|
||||
{
|
||||
//static decals
|
||||
decal_blood1 = loadtextureimage ("textures/decals/blood_splat01", 0, 0, qfalse, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(decal_blood1);
|
||||
decal_blood2 = loadtextureimage ("textures/decals/blood_splat02", 0, 0, qfalse, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(decal_blood2);
|
||||
decal_blood3 = loadtextureimage ("textures/decals/blood_splat03", 0, 0, qfalse, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(decal_blood3);
|
||||
decal_q3blood = loadtextureimage ("textures/decals/blood_stain", 0, 0, qfalse, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(decal_blood1);
|
||||
sniper_scope = Draw_CachePic ("gfx/hud/scope_256");
|
||||
|
||||
zombie_skins[0][0] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[0][0]);
|
||||
// PSP PHAT: Only have 1 Zombie skin.. this saves 192kB of VRAM, well worth it.
|
||||
|
||||
#ifdef SLIM
|
||||
|
||||
zombie_skins[0][1] = loadtextureimage ("models/ai/zfull.mdl_1", 0, 0, qtrue, GU_LINEAR);
|
||||
zombie_skins[1][0] = loadtextureimage ("models/ai/zfull.mdl_2", 0, 0, qtrue, GU_LINEAR);
|
||||
zombie_skins[1][1] = loadtextureimage ("models/ai/zfull.mdl_3", 0, 0, qtrue, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[0][1]);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[1][0]);
|
||||
GL_MarkTextureAsPermanent(zombie_skins[1][1]);
|
||||
#else
|
||||
zombie_skins[0][1] = zombie_skins[0][0];
|
||||
zombie_skins[1][0] = zombie_skins[0][0];
|
||||
zombie_skins[1][1] = zombie_skins[0][0];
|
||||
#endif // SLIM
|
||||
|
||||
decal_burn = loadtextureimage ("textures/decals/explo_burn01", 0, 0, qfalse, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(decal_burn);
|
||||
decal_blood1 = decal_blood2 = decal_blood3 = decal_q3blood = decal_burn;
|
||||
decal_mark = loadtextureimage ("textures/decals/particle_burn01", 0, 0, qfalse, GU_LINEAR);
|
||||
GL_MarkTextureAsPermanent(decal_mark);
|
||||
decal_glow = loadtextureimage ("textures/decals/glow2", 0, 0, qfalse, GU_LINEAR);
|
||||
|
@ -318,6 +330,7 @@ void R_Init (void)
|
|||
|
||||
Cvar_RegisterVariable (&r_fastsky);
|
||||
Cvar_RegisterVariable (&r_skycolor);
|
||||
Cvar_RegisterVariable (&r_skyfogblend);
|
||||
|
||||
Cvar_RegisterVariable (&r_loadq3models);
|
||||
Cvar_RegisterVariable (&r_farclip);
|
||||
|
|
|
@ -93,6 +93,8 @@ void VID_SetPaletteLM();
|
|||
void VID_SetPaletteTX();
|
||||
// switch palette for textures
|
||||
|
||||
void Fog_SetupFrame (bool worldgeom);
|
||||
|
||||
/*
|
||||
===============
|
||||
R_AddDynamicLights
|
||||
|
@ -1117,7 +1119,7 @@ static void DrawTextureChains (void)
|
|||
if (!s)
|
||||
continue;
|
||||
if (i == skytexturenum)
|
||||
R_DrawSkyChain (s);
|
||||
continue; // R_DrawSkyChain (s);
|
||||
else if (i == mirrortexturenum && r_mirroralpha.value != 1.0)
|
||||
{
|
||||
R_MirrorChain (s);
|
||||
|
@ -1586,20 +1588,21 @@ void R_DrawWorld (void)
|
|||
num_lightmapped_faces = 0;
|
||||
|
||||
R_ClearSkyBox ();
|
||||
if (strcmp(skybox_name, "") != 0)
|
||||
R_DrawSkyBox();
|
||||
|
||||
R_RecursiveWorldNode (cl.worldmodel->nodes, false);
|
||||
|
||||
R_AddStaticBrushModelsToChains ();
|
||||
|
||||
Fog_SetupFrame(true);
|
||||
DrawTextureChains ();
|
||||
|
||||
Fog_SetupFrame(false);
|
||||
R_BlendLightmaps ();
|
||||
|
||||
//dr_mabuse1981: commented out, this was the one who caused the epic lag
|
||||
//DrawFullBrightTextures (cl.worldmodel->surfaces, cl.worldmodel->numsurfaces);
|
||||
//dr_mabuse1981: commented out, this was the one who caused the epic lag
|
||||
if (strcmp(skybox_name, "") != 0)
|
||||
R_DrawSkyBox();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -40,10 +40,11 @@ int alphaskytexture = -1;
|
|||
|
||||
float speedscale; // for top sky and bottom sky
|
||||
|
||||
int skytexorder[6] = {0,2,1,3,4,5};
|
||||
int skyimage[6]; // Where sky images are stored
|
||||
int skytexorder[5] = {0,2,1,3,4};
|
||||
int skyimage[5]; // Where sky images are stored
|
||||
char skybox_name[32] = ""; //name of current skybox, or "" if no skybox
|
||||
char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"};
|
||||
// cut off down for half skybox
|
||||
char *suf[5] = {"rt", "bk", "lf", "ft", "up" };
|
||||
|
||||
msurface_t *warpface;
|
||||
|
||||
|
@ -871,7 +872,7 @@ void R_DrawFlat_SkyChain (msurface_t *s)
|
|||
*/
|
||||
void UnloadSkyTexture (void)
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
if (skyimage[i])
|
||||
GL_UnloadTexture(skyimage[i]);
|
||||
|
@ -888,6 +889,9 @@ extern int nonetexture;
|
|||
void Sky_LoadSkyBox (char *name)
|
||||
{
|
||||
|
||||
// shpuld: is this still actually needed?
|
||||
// vram use has been reduced a lot, all textures including skybox already fit vram
|
||||
// on ndu for example. ram difference shouldn't then make a difference
|
||||
#ifdef SLIM
|
||||
|
||||
if (strcmp(skybox_name, name) == 0)
|
||||
|
@ -910,15 +914,16 @@ void Sky_LoadSkyBox (char *name)
|
|||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
// Do sides one way and top another, bottom is not done
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
int mark = Hunk_LowMark ();
|
||||
|
||||
if(!(skyimage[i] = loadtextureimage (va("gfx/env/%s%s", name, suf[i]), 0, 0, qfalse, GU_LINEAR)) &&
|
||||
!(skyimage[i] = loadtextureimage (va("gfx/env/%s_%s", name, suf[i]), 0, 0, qfalse, GU_LINEAR)))
|
||||
if(!(skyimage[i] = loadskyboxsideimage (va("gfx/env/%s%s", name, suf[i]), 0, 0, qfalse, GU_LINEAR)) &&
|
||||
!(skyimage[i] = loadskyboxsideimage (va("gfx/env/%s_%s", name, suf[i]), 0, 0, qfalse, GU_LINEAR)))
|
||||
{
|
||||
Con_Printf("Sky: %s[%s] not found, used std\n", name, suf[i]);
|
||||
if(!(skyimage[i] = loadtextureimage (va("gfx/env/skybox%s", suf[i]), 0, 0, qfalse, GU_LINEAR)))
|
||||
if(!(skyimage[i] = loadskyboxsideimage (va("gfx/env/skybox%s", suf[i]), 0, 0, qfalse, GU_LINEAR)))
|
||||
{
|
||||
Sys_Error("STD SKY NOT FOUND!");
|
||||
}
|
||||
|
@ -926,6 +931,20 @@ void Sky_LoadSkyBox (char *name)
|
|||
}
|
||||
Hunk_FreeToLowMark (mark);
|
||||
}
|
||||
|
||||
int mark = Hunk_LowMark ();
|
||||
if(!(skyimage[4] = loadtextureimage (va("gfx/env/%sup", name), 0, 0, qfalse, GU_LINEAR)) &&
|
||||
!(skyimage[4] = loadtextureimage (va("gfx/env/%s_up", name), 0, 0, qfalse, GU_LINEAR)))
|
||||
{
|
||||
Con_Printf("Sky: %s[%s] not found, used std\n", name, suf[4]);
|
||||
if(!(skyimage[4] = loadtextureimage (va("gfx/env/skybox%s", suf[4]), 0, 0, qfalse, GU_LINEAR)))
|
||||
{
|
||||
Sys_Error("STD SKY NOT FOUND!");
|
||||
}
|
||||
|
||||
}
|
||||
Hunk_FreeToLowMark (mark);
|
||||
|
||||
strcpy(skybox_name, name);
|
||||
|
||||
#endif // SLIM
|
||||
|
@ -1029,7 +1048,7 @@ void Sky_Init (void)
|
|||
|
||||
Cmd_AddCommand ("sky",Sky_SkyCommand_f);
|
||||
|
||||
for (i=0; i<6; i++)
|
||||
for (i=0; i<5; i++)
|
||||
skyimage[i] = NULL;
|
||||
}
|
||||
|
||||
|
@ -1278,11 +1297,115 @@ void Fog_EnableGFog (void);
|
|||
void Fog_DisableGFog (void);
|
||||
void Fog_SetColorForSkyS (void);
|
||||
void Fog_SetColorForSkyE (void);
|
||||
|
||||
void DrawSkyFogBlend (float skydepth) {
|
||||
float skyfogblend = r_skyfogblend.value;
|
||||
if (skyfogblend <= 0) return;
|
||||
|
||||
float endheight = skydepth * skyfogblend;
|
||||
float startheight = MIN(skydepth * 0.075f, endheight * 0.3f);
|
||||
|
||||
sceGuDisable(GU_TEXTURE_2D);
|
||||
sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGBA);
|
||||
sceGuShadeModel(GU_SMOOTH);
|
||||
sceGuEnable(GU_BLEND);
|
||||
|
||||
float r = MIN(1.0f, r_refdef.fog_red * 0.01f);
|
||||
float g = MIN(1.0f, r_refdef.fog_green * 0.01f);
|
||||
float b = MIN(1.0f, r_refdef.fog_blue * 0.01f);
|
||||
unsigned int fogcol1 = GU_COLOR(r, g, b, 1.0f);
|
||||
unsigned int fogcol2 = GU_COLOR(r, g, b, 0.0f);
|
||||
|
||||
for (int i = -2; i < 2; i++) {
|
||||
for (int j = 0; j < 2; j++) {
|
||||
// Allocate memory for fake fog polys.
|
||||
struct fogvert {
|
||||
unsigned int color;
|
||||
vec3_t xyz;
|
||||
};
|
||||
const int unclipped_vertex_count = 4;
|
||||
fogvert* const verts = static_cast<fogvert*>(sceGuGetMemory(sizeof(fogvert) * unclipped_vertex_count));
|
||||
|
||||
vec3_t angles, forward, right;
|
||||
angles[PITCH] = 0.f;
|
||||
angles[YAW] = r_refdef.viewangles[YAW];
|
||||
angles[ROLL] = 0.f;
|
||||
AngleVectors(angles, forward, right, NULLVEC);
|
||||
|
||||
float forwardamount = skydepth * (0.7f - abs(i*i) * 0.15f);
|
||||
float forwardamount2 = skydepth * (0.7f - abs((i + 1)*(i + 1)) * 0.15f);
|
||||
unsigned int uppercolor = j > 0 ? fogcol2 : fogcol1;
|
||||
|
||||
float bottomheight = j > 0 ? startheight : -1.0f;
|
||||
float topheight = j > 0 ? endheight : startheight;
|
||||
|
||||
verts[0].xyz[0] = r_origin[0] + forward[0] * forwardamount + i * right[0] * skydepth;
|
||||
verts[0].xyz[1] = r_origin[1] + forward[1] * forwardamount + i * right[1] * skydepth;
|
||||
verts[0].xyz[2] = r_origin[2] + forward[2] * forwardamount + i * right[2] * skydepth + bottomheight;
|
||||
verts[0].color = fogcol1;
|
||||
|
||||
verts[1].xyz[0] = r_origin[0] + forward[0] * forwardamount + i * right[0] * skydepth;
|
||||
verts[1].xyz[1] = r_origin[1] + forward[1] * forwardamount + i * right[1] * skydepth;
|
||||
verts[1].xyz[2] = r_origin[2] + forward[2] * forwardamount + i * right[2] * skydepth + topheight;
|
||||
verts[1].color = uppercolor;
|
||||
|
||||
verts[2].xyz[0] = r_origin[0] + forward[0] * forwardamount2 + (i + 1) * right[0] * skydepth;
|
||||
verts[2].xyz[1] = r_origin[1] + forward[1] * forwardamount2 + (i + 1) * right[1] * skydepth;
|
||||
verts[2].xyz[2] = r_origin[2] + forward[2] * forwardamount2 + (i + 1) * right[2] * skydepth + topheight;
|
||||
verts[2].color = uppercolor;
|
||||
|
||||
verts[3].xyz[0] = r_origin[0] + forward[0] * forwardamount2 + (i + 1) * right[0] * skydepth;
|
||||
verts[3].xyz[1] = r_origin[1] + forward[1] * forwardamount2 + (i + 1) * right[1] * skydepth;
|
||||
verts[3].xyz[2] = r_origin[2] + forward[2] * forwardamount2 + (i + 1) * right[2] * skydepth + bottomheight;
|
||||
verts[3].color = fogcol1;
|
||||
|
||||
// Draw the poly directly.
|
||||
sceGuDrawArray(
|
||||
GU_TRIANGLE_FAN,
|
||||
GU_COLOR_8888 | GU_VERTEX_32BITF,
|
||||
unclipped_vertex_count, 0, verts);
|
||||
}
|
||||
}
|
||||
sceGuEnable(GU_TEXTURE_2D);
|
||||
sceGuDisable(GU_BLEND);
|
||||
//sceGuDepthRange(0, 65535);
|
||||
Fog_SetColorForSkyE(); //setup for Sky
|
||||
Fog_EnableGFog(); //setup for Sky
|
||||
|
||||
sceGuDepthMask(false);
|
||||
sceGuEnable(GU_DEPTH_TEST);
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
R_DrawSkyBox
|
||||
==============
|
||||
*/
|
||||
|
||||
float skynormals[5][3] = {
|
||||
{ 1.f, 0.f, 0.f },
|
||||
{ -1.f, 0.f, 0.f },
|
||||
{ 0.f, 1.f, 0.f },
|
||||
{ 0.f, -1.f, 0.f },
|
||||
{ 0.f, 0.f, 1.f }
|
||||
};
|
||||
|
||||
float skyrt[5][3] = {
|
||||
{ 0.f, -1.f, 0.f },
|
||||
{ 0.f, 1.f, 0.f },
|
||||
{ 1.f, 0.f, 0.f },
|
||||
{ -1.f, 0.f, 0.f },
|
||||
{ 0.f, -1.f, 0.f }
|
||||
};
|
||||
|
||||
float skyup[5][3] = {
|
||||
{ 0.f, 0.f, 1.f },
|
||||
{ 0.f, 0.f, 1.f },
|
||||
{ 0.f, 0.f, 1.f },
|
||||
{ 0.f, 0.f, 1.f },
|
||||
{ -1.f, 0.f, 0.f }
|
||||
};
|
||||
|
||||
void R_DrawSkyBox (void)
|
||||
{
|
||||
int i;
|
||||
|
@ -1291,51 +1414,55 @@ void R_DrawSkyBox (void)
|
|||
Fog_SetColorForSkyS(); //setup for Sky
|
||||
|
||||
//sceGuDepthRange(32767, 65535); //not used
|
||||
sceGuDepthMask(true);
|
||||
sceGuDisable(GU_DEPTH_TEST);
|
||||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
float skydepth = 256.f;
|
||||
|
||||
for (i=0 ; i<5 ; i++)
|
||||
{
|
||||
// Allocate memory for this polygon.
|
||||
const int unclipped_vertex_count = 4;
|
||||
glvert_t* const unclipped_vertices =
|
||||
static_cast<glvert_t*>(sceGuGetMemory(sizeof(glvert_t) * unclipped_vertex_count));
|
||||
|
||||
if (skymins[0][i] >= skymaxs[0][i]
|
||||
|| skymins[1][i] >= skymaxs[1][i])
|
||||
continue;
|
||||
|
||||
// check if poly needs to be drawn at all
|
||||
float dot = DotProduct(skynormals[i], vpn);
|
||||
// < 0 check would work at fov 90 or less, just guess a value that's high enough?
|
||||
if (dot < -0.25f) continue;
|
||||
|
||||
GL_Bind (skyimage[skytexorder[i]]);
|
||||
|
||||
MakeSkyVec (skymins[0][i], skymins[1][i], i);
|
||||
// if direction is not up, cut "down" vector to zero to only render half cube
|
||||
float upnegfact = i == 4 ? 1.0f : 0.0f;
|
||||
|
||||
unclipped_vertices[0].st[0] = s_axis;
|
||||
unclipped_vertices[0].st[1] = t_axis;
|
||||
unclipped_vertices[0].xyz[0] = v_axis[0];
|
||||
unclipped_vertices[0].xyz[1] = v_axis[1];
|
||||
unclipped_vertices[0].xyz[2] = v_axis[2];
|
||||
float skyboxtexsize = 256.f;
|
||||
// move ever so slightly less towards forward to make edges overlap a bit, just to not have shimmering pixels between sky edges
|
||||
float forwardfact = 0.99f;
|
||||
|
||||
MakeSkyVec (skymins[0][i], skymaxs[1][i], i);
|
||||
unclipped_vertices[0].st[0] = 0.5f / skyboxtexsize;
|
||||
unclipped_vertices[0].st[1] = (skyboxtexsize - .5f) / skyboxtexsize;
|
||||
unclipped_vertices[0].xyz[0] = r_origin[0] + (forwardfact * skynormals[i][0] - skyrt[i][0] - skyup[i][0] * upnegfact) * skydepth;
|
||||
unclipped_vertices[0].xyz[1] = r_origin[1] + (forwardfact * skynormals[i][1] - skyrt[i][1] - skyup[i][1] * upnegfact) * skydepth;
|
||||
unclipped_vertices[0].xyz[2] = r_origin[2] + (forwardfact * skynormals[i][2] - skyrt[i][2] - skyup[i][2] * upnegfact) * skydepth;
|
||||
|
||||
unclipped_vertices[1].st[0] = s_axis;
|
||||
unclipped_vertices[1].st[1] = t_axis;
|
||||
unclipped_vertices[1].xyz[0] = v_axis[0];
|
||||
unclipped_vertices[1].xyz[1] = v_axis[1];
|
||||
unclipped_vertices[1].xyz[2] = v_axis[2];
|
||||
unclipped_vertices[1].st[0] = 0.5f / skyboxtexsize;
|
||||
unclipped_vertices[1].st[1] = 0.5f / skyboxtexsize;
|
||||
unclipped_vertices[1].xyz[0] = r_origin[0] + (forwardfact * skynormals[i][0] - skyrt[i][0] + skyup[i][0]) * skydepth;
|
||||
unclipped_vertices[1].xyz[1] = r_origin[1] + (forwardfact * skynormals[i][1] - skyrt[i][1] + skyup[i][1]) * skydepth;
|
||||
unclipped_vertices[1].xyz[2] = r_origin[2] + (forwardfact * skynormals[i][2] - skyrt[i][2] + skyup[i][2]) * skydepth;
|
||||
|
||||
MakeSkyVec (skymaxs[0][i], skymaxs[1][i], i);
|
||||
unclipped_vertices[2].st[0] = (skyboxtexsize - .5f) / skyboxtexsize;
|
||||
unclipped_vertices[2].st[1] = 0.5f / skyboxtexsize;
|
||||
unclipped_vertices[2].xyz[0] = r_origin[0] + (forwardfact * skynormals[i][0] + skyrt[i][0] + skyup[i][0]) * skydepth;
|
||||
unclipped_vertices[2].xyz[1] = r_origin[1] + (forwardfact * skynormals[i][1] + skyrt[i][1] + skyup[i][1]) * skydepth;
|
||||
unclipped_vertices[2].xyz[2] = r_origin[2] + (forwardfact * skynormals[i][2] + skyrt[i][2] + skyup[i][2]) * skydepth;
|
||||
|
||||
unclipped_vertices[2].st[0] = s_axis;
|
||||
unclipped_vertices[2].st[1] = t_axis;
|
||||
unclipped_vertices[2].xyz[0] = v_axis[0];
|
||||
unclipped_vertices[2].xyz[1] = v_axis[1];
|
||||
unclipped_vertices[2].xyz[2] = v_axis[2];
|
||||
|
||||
MakeSkyVec (skymaxs[0][i], skymins[1][i], i);
|
||||
|
||||
unclipped_vertices[3].st[0] = s_axis;
|
||||
unclipped_vertices[3].st[1] = t_axis;
|
||||
unclipped_vertices[3].xyz[0] = v_axis[0];
|
||||
unclipped_vertices[3].xyz[1] = v_axis[1];
|
||||
unclipped_vertices[3].xyz[2] = v_axis[2];
|
||||
unclipped_vertices[3].st[0] = (skyboxtexsize - .5f) / skyboxtexsize;
|
||||
unclipped_vertices[3].st[1] = (skyboxtexsize - .5f) / skyboxtexsize;
|
||||
unclipped_vertices[3].xyz[0] = r_origin[0] + (forwardfact * skynormals[i][0] + skyrt[i][0] - skyup[i][0] * upnegfact) * skydepth;
|
||||
unclipped_vertices[3].xyz[1] = r_origin[1] + (forwardfact * skynormals[i][1] + skyrt[i][1] - skyup[i][1] * upnegfact) * skydepth;
|
||||
unclipped_vertices[3].xyz[2] = r_origin[2] + (forwardfact * skynormals[i][2] + skyrt[i][2] - skyup[i][2] * upnegfact) * skydepth;
|
||||
|
||||
if (clipping::is_clipping_required(
|
||||
unclipped_vertices,
|
||||
|
@ -1374,10 +1501,12 @@ void R_DrawSkyBox (void)
|
|||
unclipped_vertex_count, 0, unclipped_vertices);
|
||||
}
|
||||
}
|
||||
//sceGuDepthRange(0, 65535);
|
||||
|
||||
DrawSkyFogBlend(skydepth);
|
||||
|
||||
//sceGuDepthRange(0, 65535);
|
||||
Fog_SetColorForSkyE(); //setup for Sky
|
||||
Fog_EnableGFog(); //setup for Sky
|
||||
|
||||
}
|
||||
|
||||
//===============================================================
|
||||
|
|
Loading…
Reference in a new issue