From 691a895d56f36614de903d429c5e1eb3d5cf9ee9 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 3 Feb 2009 06:46:34 +0000 Subject: [PATCH] 1. bring prandom back, this time maybe in a working manner (if it does work, will later change it to distribute a random seed to clients) 2. cl_gibs_velocity_* cvars git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5723 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 3 +++ data/qcsrc/client/casings.qc | 4 ++-- data/qcsrc/client/gibs.qc | 38 +++++++++++++++--------------- data/qcsrc/client/miscfunctions.qc | 10 ++++++++ data/qcsrc/client/prandom.qc | 31 +++++++++++++++++++----- data/qcsrc/client/prandom.qh | 3 +++ 6 files changed, 62 insertions(+), 27 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 7c95c6d80..bf327a241 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -683,6 +683,9 @@ cl_decals_time 2 seta cl_nogibs 0 seta cl_gibs_damageforcescale 3.5 "force to push around gibs" seta cl_gibs_lifetime 14 "average lifetime of gibs" +seta cl_gibs_velocity_scale 1 "gib throw velocity force scale" +seta cl_gibs_velocity_random 1 "gib throw velocity randomness scale" +seta cl_gibs_velocity_up 0 "extra z velocity for gibs" cl_stainmaps 0 cl_particles_smoke 1 r_glsl 1 diff --git a/data/qcsrc/client/casings.qc b/data/qcsrc/client/casings.qc index 24aead74c..c42b6a1c5 100644 --- a/data/qcsrc/client/casings.qc +++ b/data/qcsrc/client/casings.qc @@ -78,9 +78,9 @@ void Ent_Casing() casing.draw = Casing_Draw; casing.move_origin = casing.origin; - casing.move_velocity = casing.velocity + 2 * randomvec(); + casing.move_velocity = casing.velocity + 2 * prandomvec(); casing.move_angles = casing.angles; - casing.move_avelocity = '0 250 0' + 100 * randomvec(); + casing.move_avelocity = '0 250 0' + 100 * prandomvec(); casing.move_movetype = MOVETYPE_BOUNCE; casing.move_touch = Casing_Touch; casing.move_time = time; diff --git a/data/qcsrc/client/gibs.qc b/data/qcsrc/client/gibs.qc index a48cc3f07..4040594aa 100644 --- a/data/qcsrc/client/gibs.qc +++ b/data/qcsrc/client/gibs.qc @@ -41,7 +41,7 @@ void Gib_Draw() R_AddEntity(self); } -void TossGib (string mdlname, vector org, vector v, float destroyontouch) +void TossGib (string mdlname, vector org, vector vconst, vector vrand, float destroyontouch) { entity gib; @@ -56,7 +56,7 @@ void TossGib (string mdlname, vector org, vector v, float destroyontouch) setmodel (gib, mdlname); // precision set above setsize (gib, '-8 -8 -8', '8 8 8'); - + gib.draw = Gib_Draw; if(destroyontouch) gib.move_touch = Gib_Touch; @@ -64,12 +64,12 @@ void TossGib (string mdlname, vector org, vector v, float destroyontouch) gib.move_touch = SUB_RemoveOnNoImpact; gib.move_origin = gib.origin = org; - gib.move_velocity = v + randomvec(); - gib.move_avelocity = randomvec() * vlen(gib.move_velocity); + gib.move_velocity = vconst * cvar_or("cl_gibs_velocity_scale", 1) + vrand * cvar_or("cl_gibs_velocity_random", 1) + '0 0 1' * cvar("cl_gibs_velocity_up"); + gib.move_avelocity = prandomvec() * vlen(gib.move_velocity); gib.move_time = time; - gib.damageforcescale = cvar("cl_gibs_damageforcescale"); + gib.damageforcescale = cvar_or("cl_gibs_damageforcescale", 3.5); - gib.nextthink = time + cvar("cl_gibs_lifetime") * (1 + prandom() * 0.15); + gib.nextthink = time + cvar_or("cl_gibs_lifetime", 14) * (1 + prandom() * 0.15); } void Ent_GibSplash() @@ -108,37 +108,37 @@ void Ent_GibSplash() sound (self, CHAN_PAIN, "misc/gib.wav", VOL_BASE, ATTN_NORM); if(prandom() < amount) - TossGib("models/gibs/eye.md3", org, vel + randomvec() * 150, 0); + TossGib("models/gibs/eye.md3", org, vel, prandomvec() * 150, 0); te_bloodshower(org + mi, org + ma, 1200, 1000 * amount); if(prandom() < amount) - TossGib("models/gibs/bloodyskull.md3", org, vel + randomvec() * 100, 0); + TossGib("models/gibs/bloodyskull.md3", org, vel, prandomvec() * 100, 0); for(c = 0; c < amount; ++c) { randomvalue = amount - c; if(prandom() < randomvalue) - TossGib ("models/gibs/arm.md3", org, vel + randomvec() * (prandom() * 120 + 90),0); + TossGib ("models/gibs/arm.md3", org, vel, prandomvec() * (prandom() * 120 + 90),0); if(prandom() < randomvalue) - TossGib ("models/gibs/arm.md3", org, vel + randomvec() * (prandom() * 120 + 90),0); + TossGib ("models/gibs/arm.md3", org, vel, prandomvec() * (prandom() * 120 + 90),0); if(prandom() < randomvalue) - TossGib ("models/gibs/chest.md3", org + '0 0 -12', vel + randomvec() * (prandom() * 120 + 80),0); + TossGib ("models/gibs/chest.md3", org + '0 0 -12', vel, prandomvec() * (prandom() * 120 + 80),0); if(prandom() < randomvalue) - TossGib ("models/gibs/smallchest.md3", org, vel + randomvec() * (prandom() * 120 + 80),0); + TossGib ("models/gibs/smallchest.md3", org, vel, prandomvec() * (prandom() * 120 + 80),0); if(prandom() < randomvalue) - TossGib ("models/gibs/leg1.md3", org + '0 0 -5', vel + randomvec() * (prandom() * 120 + 85),0); + TossGib ("models/gibs/leg1.md3", org + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85),0); if(prandom() < randomvalue) - TossGib ("models/gibs/leg2.md3", org + '0 0 -9', vel + randomvec() * (prandom() * 120 + 85),0); + TossGib ("models/gibs/leg2.md3", org + '0 0 -9', vel, prandomvec() * (prandom() * 120 + 85),0); // these splat on impact if(prandom() < randomvalue) - TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1); + TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450,1); if(prandom() < randomvalue) - TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1); + TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450,1); if(prandom() < randomvalue) - TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1); + TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450,1); if(prandom() < randomvalue) - TossGib ("models/gibs/chunk.mdl", org, vel + randomvec() * 450,1); + TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450,1); } break; case 0x02: @@ -146,7 +146,7 @@ void Ent_GibSplash() break; case 0x03: if(prandom() < amount) - TossGib ("models/gibs/chunk.mdl", org, vel, 1); + TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * (prandom() * 30 + 20), 1); // TODO maybe adjust to more randomization? break; case 0x81: pointparticles(particleeffectnum("damage_dissolve"), org, vel, amount); diff --git a/data/qcsrc/client/miscfunctions.qc b/data/qcsrc/client/miscfunctions.qc index 1c788b121..d1b359825 100644 --- a/data/qcsrc/client/miscfunctions.qc +++ b/data/qcsrc/client/miscfunctions.qc @@ -385,3 +385,13 @@ string ColorTranslateRGB(string s) return s2; } + +float cvar_or(string cvar, float v) +{ + string s; + s = cvar_string(cvar); + if(s == "") + return v; + else + return stof(s); +} diff --git a/data/qcsrc/client/prandom.qc b/data/qcsrc/client/prandom.qc index 317a0ce57..cf6d9cf61 100644 --- a/data/qcsrc/client/prandom.qc +++ b/data/qcsrc/client/prandom.qc @@ -1,11 +1,30 @@ // prandom - PREDICTABLE random number generator (not seeded yet) -//float prandom_seed; +float prandom_seed; float prandom() { - return random(); -// float c; -// c = crc16(FALSE, strcat(ftos(prandom_seed), ftos(prandom_seed + 3.1415926535))); -// prandom_seed = c; -// return c / 65536; // in [0..1[ + float c; + c = crc16(FALSE, strcat(ftos(prandom_seed), ftos(prandom_seed + 3.1415926535))); + prandom_seed = c; + return c / 65536; // in [0..1[ +} + +vector prandomvec() +{ + vector v; + + do + { + v_x = prandom(); + v_y = prandom(); + v_z = prandom(); + } + while(v * v > 1); + + return v; +} + +void psrandom(float seed) +{ + prandom_seed = seed; } diff --git a/data/qcsrc/client/prandom.qh b/data/qcsrc/client/prandom.qh index a0a1a34bb..29945cac1 100644 --- a/data/qcsrc/client/prandom.qh +++ b/data/qcsrc/client/prandom.qh @@ -1,2 +1,5 @@ // prandom - PREDICTABLE random number generator float prandom(); +vector prandomvec(); + +void psrandom(float seed); -- 2.39.2