diff --git a/Source/Client/Entities.c b/Source/Client/Entities.c index 8c7bf9f1..4e06e445 100755 --- a/Source/Client/Entities.c +++ b/Source/Client/Entities.c @@ -138,11 +138,21 @@ void CSQC_Ent_Update( float flIsNew ) { self.color_y = 1.0f - ( readbyte() / 255 ); self.color_z = 1.0f - ( readbyte() / 255 ); self.classname = readstring(); - decalname = sprintf("decal_%s", self.classname); - decalshader = sprintf("{\npolygonOffset\n{\nclampmap %s\nblendFunc filter\n}\n}", self.classname); - shaderforname(decalname, decalshader); self.size = drawgetimagesize(self.classname); - self.classname = decalname; + + if (serverkeyfloat("*bspversion") != 30) { + decalname = sprintf("decal_%s", self.classname); + decalshader = sprintf("{\npolygonOffset\n{\nclampmap %s\nblendFunc filter\n}\n}", self.classname); + shaderforname(decalname, decalshader); + self.classname = decalname; + } + + makevectors( self.angles ); + float surf = getsurfacenearpoint(world, self.origin); + vector s_dir = getsurfacepointattribute(world, surf, 0, SPA_S_AXIS); + vector t_dir = getsurfacepointattribute(world, surf, 0, SPA_T_AXIS); + self.mins = v_up / self.size[0]; + self.maxs = t_dir / self.size[1]; self.predraw = Effect_Decal; self.drawmask = MASK_ENGINE; diff --git a/Source/Makefile b/Source/Makefile new file mode 100644 index 00000000..dfaa4ae4 --- /dev/null +++ b/Source/Makefile @@ -0,0 +1,6 @@ +CC=fteqcc + +qc-progs: + $(CC) Client/progs.src + $(CC) Server/progs.src + $(CC) Menu/progs.src diff --git a/Source/Server/Defs.h b/Source/Server/Defs.h index 07a581bf..7e0bb0ea 100755 --- a/Source/Server/Defs.h +++ b/Source/Server/Defs.h @@ -49,7 +49,6 @@ var int autocvar_fcs_penalty_pain = -150; var int autocvar_fcs_penalty_kill = -1500; var int autocvar_fcs_maxmoney = 16000; var int autocvar_fcs_fillweapons = FALSE; // This will automatically get ammo for the weapon you buy -var int autocvar_fcs_autoreload = FALSE; // When pressing fire and the gun is empty, it will reload instead // Mapcycle features var string autocvar_mapcyclefile = "mapcycle.txt"; diff --git a/Source/Server/InfoDecal.c b/Source/Server/InfoDecal.c index 08c8fa2e..b861d2d4 100644 --- a/Source/Server/InfoDecal.c +++ b/Source/Server/InfoDecal.c @@ -57,6 +57,15 @@ void infodecal(void) int b = 0; float frac = 1.0f; vector vpos = self.origin; + + if (serverkeyfloat("*bspversion") != 30) { + self.texture = sprintf( "materials/%s", self.texture ); + } + + if (!self.texture) { + remove(self); + return; + } /* Unrolled because I'm lazy */ makevectors([0, 0, 0]); diff --git a/Source/Shared/BaseGun.c b/Source/Shared/BaseGun.c index 48562f20..1bf24cb7 100755 --- a/Source/Shared/BaseGun.c +++ b/Source/Shared/BaseGun.c @@ -141,9 +141,6 @@ Returns whether or not to play an animation float BaseGun_PrimaryFire( void ) { // Nothing in the clip anymore? Don't even attempt if ( ( self.(wptTable[ self.weapon ].iMagfld) - 1 ) < 0 ) { - if ( autocvar_fcs_autoreload == TRUE ) { - Weapon_Reload( self.weapon ); - } return FALSE; } diff --git a/Source/Shared/Effects.c b/Source/Shared/Effects.c index 77a4b4f0..15677ecf 100755 --- a/Source/Shared/Effects.c +++ b/Source/Shared/Effects.c @@ -426,13 +426,7 @@ void Effect_BreakModel( vector vMins, vector vMaxs, vector vVel, float fStyle ) #ifdef CSQC float Effect_Decal( void ) { - makevectors( self.angles ); - - float surf = getsurfacenearpoint(world, self.origin); - vector s_dir = getsurfacepointattribute(world, surf, 0, SPA_S_AXIS); - vector t_dir = getsurfacepointattribute(world, surf, 0, SPA_T_AXIS); - - adddecal( self.classname, self.origin, v_up / self.size[0], t_dir / self.size[1], self.color, 1.0f ); + adddecal( self.classname, self.origin, self.mins, self.maxs, self.color, 1.0f ); addentity( self ); return PREDRAW_NEXT; } diff --git a/Source/Shared/Weapons.c b/Source/Shared/Weapons.c index 965b6473..725748eb 100755 --- a/Source/Shared/Weapons.c +++ b/Source/Shared/Weapons.c @@ -256,6 +256,10 @@ void Weapon_Release( void ) { WeaponSMOKEGRENADE_Release(); } else if ( self.weapon == WEAPON_C4BOMB ) { WeaponC4BOMB_Release(); + } else { + if (self.(wptTable[ self.weapon ].iMagfld) == 0 && self.(wptTable[ self.weapon ].iCaliberfld)) { + Weapon_Reload(self.weapon); + } } } diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat index b7af2940..738aab01 100644 Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ diff --git a/freecs/glsl/defaultskin.glsl b/freecs/glsl/defaultskin.glsl new file mode 100644 index 00000000..b2db3a46 --- /dev/null +++ b/freecs/glsl/defaultskin.glsl @@ -0,0 +1,36 @@ +!!ver 110 +!!permu FRAMEBLEND +!!permu SKELETAL +!!permu FOG +!!samps diffuse + +#include "sys/defs.h" + +varying vec2 tex_c; +varying vec3 light; + +#ifdef VERTEX_SHADER + #include "sys/skeletal.h" + + float hl( vec3 normal, vec3 dir ) { + return ( dot( normal, dir ) * 0.5 ) + 0.5; + } + + void main () + { + vec3 n, s, t, w; + gl_Position = skeletaltransform_wnst(w,n,s,t); + tex_c = v_texcoord; + light = ( hl( n, e_light_dir ) * e_light_mul ) + e_light_ambient; + } +#endif + + +#ifdef FRAGMENT_SHADER + void main () + { + vec4 diffuse_f = texture2D( s_diffuse, tex_c ); + diffuse_f.rgb *= light; + gl_FragColor = diffuse_f * e_colourident; + } +#endif diff --git a/freecs/glsl/defaultsky.glsl b/freecs/glsl/defaultsky.glsl new file mode 100644 index 00000000..f6492899 --- /dev/null +++ b/freecs/glsl/defaultsky.glsl @@ -0,0 +1,15 @@ +!!ver 110 + +#ifdef VERTEX_SHADER +void main () +{ + gl_Position = ftetransform(); +} +#endif + +#ifdef FRAGMENT_SHADER +void main () +{ + discard; +} +#endif diff --git a/freecs/glsl/defaultskybox.glsl b/freecs/glsl/defaultskybox.glsl new file mode 100644 index 00000000..2cf51804 --- /dev/null +++ b/freecs/glsl/defaultskybox.glsl @@ -0,0 +1,23 @@ +!!ver 110 +!!permu FOG +!!samps reflectcube + +#include "sys/defs.h" +#include "sys/fog.h" + +varying vec3 pos; +#ifdef VERTEX_SHADER +void main () +{ + pos = v_position.xyz - e_eyepos; + pos.y = -pos.y; + gl_Position = ftetransform(); +} +#endif +#ifdef FRAGMENT_SHADER +void main () +{ + vec4 skybox = textureCube(s_reflectcube, pos); + gl_FragColor = vec4(fog3(skybox.rgb), 1.0); +} +#endif diff --git a/freecs/glsl/defaultwall.glsl b/freecs/glsl/defaultwall.glsl new file mode 100644 index 00000000..8039d073 --- /dev/null +++ b/freecs/glsl/defaultwall.glsl @@ -0,0 +1,32 @@ +!!ver 110 +!!samps diffuse lightmap + +#include "sys/defs.h" + +varying vec2 tex_c; +varying vec2 lm_c; + +#ifdef VERTEX_SHADER + void main () + { + tex_c = v_texcoord; + lm_c = v_lmcoord; + gl_Position = ftetransform(); + } +#endif + +#ifdef FRAGMENT_SHADER + void main ( void ) + { + vec4 diffuse_f = texture2D( s_diffuse, tex_c ); + + if ( diffuse_f.a < 0.5 ) { + discard; + } + + diffuse_f.rgb *= texture2D( s_lightmap, lm_c ).rgb * e_lmscale.rgb; + diffuse_f *= e_colourident; + + gl_FragColor = diffuse_f; + } +#endif diff --git a/freecs/progs.dat b/freecs/progs.dat index 80d05df0..ca2ed773 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ