@-Qmaster Changing the self.th_melee = atka1; worked for splitting the attack in two different shapes. Although I don't see the reason why self.th_melee = sknt_melee won't work.
It is defined as sknt_melee = sknt_atka1; (?!)
@-Preach : sure, but I can't find the place
for the statement.
Whatever I add or change it seems 7up for the compiler.
missile.origin = self.origin + '0 0 10';
is the place to look I think?
That's The Correct Line
That's the right line to modify, keep playing with it until you get an effect you like.
the only way I can make the missile launch higher is when I exclude
//missile.origin = self.origin - normalize(self.velocity);
missile.nextthink = flytime + time;.
Then the changes seem to have effect, although I get an eyeheight missile launching and ending on
missile.origin = self.origin + v_forward * 8 + v_right * 1 + v_up * 10;
Changing The Order
Yeah, that would be the problem. Notice how both lines are setting the value of the same thing - missile.origin. The second line completely overrides the first one, like changing your order in a restaurant - you don't get two meals, you just get the second one.
Right, Uhm Wrong
missile.origin = self.origin + v_forward * 8 + v_right * -16 + '0 0 24';
returns a launcher that shoots from the launching point left above the player.
missile.origin = self.origin + v_forward * 8 + v_right * -16 + v_up * 16;
returns a missile that explodes left of the player.
I'm thinking I'm changing the end point of the missile hitting the player. It launches from the right point, but it ends up blind. Also the negative parm comes out strange. It's not left handed?
dir = normalize(vtemp - self.origin);
I used the enforcer_laser methode to launch the missile.
This way it is the simpelest way to compile for the wanted use.
The code was from the Orb, and I had a hard job on coding the weapon.
Thanks for the hints!
They were helpfull.
Rubicon 2 question:
You have IT_NO_WEAPON replacing IT_EXTRA_WEAPON in the code. However, I'm not sure how to implement this in a map. Not seeing a spawnflag or other way to enable it.
Is there a way to trace a volume similar to traceline? I need to find a volume that is not occupied by players or monsters of any size. maybe something like traceline?
any decent engine will have a tracebox builtin for things like that.
failing that, you can also exploit quirks of droptofloor or walkmove(typically with FL_FLY?), but these are much more limited and may have additional engine-specific quirks that break your mod (at least in DP).
Something I wrote before on how you might write a tracebox function using the method Spike suggests. His caveats stand
Spawning with no weapons works but was never used in any of the maps so I didn't finish the part where an info player start can opt in to it. Right now it's just hard coded so to only happen if mapmame == test.bsp
So you would have to make some quakec change to complete the feature, or just change the hard coded string it's looking for -- or name your map test.bsp :)
Is there any way to attach colored lights to projectiles or explosions via QC?
I would like to make the vore's ball glow with a purple light, make the tarbaby's explosion blue, this sort of thing...
I'm using quakespasm-spiked btw.
a trail particle effect with 'lightrgb' and 'lightradius' set should be able to provide coloured dynamic lights, but it might only be with flashblends. I don't think I actually got around to testing it properly.
point effects will additionally need lighttime, and probably want at least one of lightrgbfade+lightradiusfade.
there are additional light properties, but those are specific to rtlights, which are definitely not supported in qss.
Thanks! I'll try that =D
What's the most reliable way to detect if the player is on a slippery slope (mostly vertical angle)? I'm using QuakeSpasm-Spiked.
tracebox(self.origin, self.mins, self.maxs, self.origin-'0 0 1', TRUE, self);
if (trace_fraction < 1 && trace_plane_normal_z < 0.7)
you could instead use traceline, but it would not match the player's physics so well.
Thanks, but the most difficult thing about it is detecting the exact moment when the player touches/lands on the slope. AFAIK the engine doesn't set FL_ONGROUND for it, and assigning .touch functions to players doesn't work properly.
Is there a way to achieve something similar to DP's (and Makaqu's) .glow_size in QSS, through QC?
More specifically, negative dynamic lighting with custom radius and intensity, tied to an entity.
I've seen some ways to customize lighting effects in qsextensions.qc, but there's no way to change their properties and make them move around dynamically.
Also, I would like such negative lights to affect only BSP models, without affecting MDL, SPR and particles.
Out Of The Blue
moving lights hack, maybe?
Can't Jump When On Top Of Monsters/explo Boxes
There was some QuakeC fix posted here, but I can't find it. Can someone repost the fix?
... that the source code of Quake has a 256*5 char static array whose contents, literally, are:
Do you guys know if this particular array (localmodels) has survived in any of the modern engines, somehow?
Cl.viewent - Where Is It Loaded?
Awfully sorry to bring this up, but I have had no luck doing it myself. Where exactly is cl.viewent assigned a specific value? Where in the code do you tell the client which gun model to use? I can´t find any direct assignments to the field, and (unless I´m doing something wrong) I can´t also find a place where the whole cl struct is being copied off somewhere else.
Do you guys know where in the source is cl.viewent being (directly or indirectly) assigned to?
Someone help Izhido out here.
Also I still request this thread be stickied to make it more useful.
Quick search indicates that it's happening in V_CalcRefdef() and V_CalcIntermissionRefdef(), both in view.c.
It may or may not be obvious but this represents weapon from the POV of the player and is set based on the client state structure (cl.stats).
The reason "find references" (which you probably used) didn't show you any results is that a pointer to cl.viewent is taken in the V_CalcRefdef() body (view = &cl.viewent;) and later assignments are done on the temporary pointer (e.g. view->model = cl.model_precache[cl.stats[STAT_WEAPON]];
Hope this is the answer you were looking for. Non-vanilla engines perform some additional operations on cl.viewent but I haven't seen any other model assignment logic in QS so I assume these are the only two places where it happens.
@Thulsa - Thank You!
It *did* help. Looks like I need to be way more careful about variable assignments in there for future changes.