diff --git a/source/console.c b/source/console.c index 72a75c6..6665eee 100644 --- a/source/console.c +++ b/source/console.c @@ -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; diff --git a/source/psp/video_hardware.h b/source/psp/video_hardware.h index 0bd1584..c3d1f8f 100644 --- a/source/psp/video_hardware.h +++ b/source/psp/video_hardware.h @@ -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; diff --git a/source/psp/video_hardware_QMB.cpp b/source/psp/video_hardware_QMB.cpp index d068780..4b8e2c6 100644 --- a/source/psp/video_hardware_QMB.cpp +++ b/source/psp/video_hardware_QMB.cpp @@ -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 #include #include "clipping.hpp" @@ -33,8 +31,6 @@ extern "C" using namespace std; using namespace quake; -list 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); diff --git a/source/psp/video_hardware_draw.cpp b/source/psp/video_hardware_draw.cpp index d9c1ada..ad9c72f 100644 --- a/source/psp/video_hardware_draw.cpp +++ b/source/psp/video_hardware_draw.cpp @@ -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 { diff --git a/source/psp/video_hardware_fog.cpp b/source/psp/video_hardware_fog.cpp index 3cb356a..ae81138 100644 --- a/source/psp/video_hardware_fog.cpp +++ b/source/psp/video_hardware_fog.cpp @@ -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); diff --git a/source/psp/video_hardware_images.cpp b/source/psp/video_hardware_images.cpp index 38e46b8..ce22ae9 100644 --- a/source/psp/video_hardware_images.cpp +++ b/source/psp/video_hardware_images.cpp @@ -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 diff --git a/source/psp/video_hardware_main.cpp b/source/psp/video_hardware_main.cpp index 76b9734..244cfcc 100644 --- a/source/psp/video_hardware_main.cpp +++ b/source/psp/video_hardware_main.cpp @@ -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); diff --git a/source/psp/video_hardware_misc.cpp b/source/psp/video_hardware_misc.cpp index 2df3f3c..81468a2 100644 --- a/source/psp/video_hardware_misc.cpp +++ b/source/psp/video_hardware_misc.cpp @@ -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); diff --git a/source/psp/video_hardware_surface.cpp b/source/psp/video_hardware_surface.cpp index 6d6f6fb..831ec92 100644 --- a/source/psp/video_hardware_surface.cpp +++ b/source/psp/video_hardware_surface.cpp @@ -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(); } diff --git a/source/psp/video_hardware_warp.cpp b/source/psp/video_hardware_warp.cpp index e48f931..f751971 100644 --- a/source/psp/video_hardware_warp.cpp +++ b/source/psp/video_hardware_warp.cpp @@ -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(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(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 - } //===============================================================