|
Posted by metlslime on 2007/08/08 04:57:56 |
This is a counterpart to the "Mapping Help" thread. If you need help with QuakeC coding, or questions about how to do some engine modification, this is the place for you! We've got a few coders here on the forum and hopefully someone knows the answer. |
|
|
That's True
#2679 posted by Lunaran on 2018/10/19 06:16:16
quakeEd already supported cleanly ignoring anything that wasn't contained in a /*QUAKED */ comment block, and when I discovered I could just point qe3 at lunsp2/src/*.qc instead of maintaining a separate .def file an angel got its wings
(the other clue to this is that the comment blocks start with /*QUAKED in the first place ...)
Would Be Nice If
#2680 posted by Qmaster on 2018/10/19 13:51:09
There could be a utility that generates a list of all functions in the qc like so:
Function(float arg1, vector arg2),called 0 times, precache Yes
W_Attack(),called 1 times,
weapon_blaster(), called 0 times, precache Yes
Etc.
Etc.
SUB_Remove Edicts Piling Up
#2681 posted by Shanjaq on 2018/11/20 06:50:57
I have a problem with edicts piling up that have no information other than Think = SUB_Remove and Time = -1. I'm not sure where to look in the qc to find what's causing it. Do TE_STREAM_* ents look like this in the edicts dump?
Code Request
#2682 posted by Preach on 2018/11/20 20:34:19
Hi Shanjaq. TE_STREAM_ things aren't using up your entity slots, "temporary entity" is just a bad name for them. So the problem must be elsewhere.
Think = SUB_Remove and Time = -1
Can you post the full lines of code that these quoted parts come from? It's hard to tell if they're right or wrong from what you posted.
#2683 posted by Spike on 2018/11/20 22:47:08
ent.nextthink <= 0 means the entity will never think, and thus never get removed. use 0.1 instead, or something.
note that the remove builtin will also set nextthink=-1, clear classname+model, but not clear the remove builtin.
those removed ents will be reused later (no sooner than 0.5 secs). so if you're spawning+removing within the same frame then you're going to have at least 0.5 seconds worth of them building up.
qc can still read+write removed ents (unfortunately), but nextent+find+findradius won't find them, and saved games shouldn't list them so I've no idea if this is what's causing them or what - how are you seeing this list of useless ents?
Edicts Anonymous
#2684 posted by Shanjaq on 2018/11/21 05:54:44
Thanks all for your insights! I'm wondering if there's a leak somewhere in the edict de-allocation, as I sometimes see models/sprites frozen in mid-animation which have no clipping and findradius can't see them. Here is a snippet from edicts.txt after a crash. note the last two, which I'm seeing in the hundreds:
Num.,Time,Class,Name,Model,Think,Touch,Use
1,131.97,player,models/paladin.mdl,player_frames,obj_push,
2,132.16,,,models/flesh2.mdl,ChunkShrink,
...
561,131.96,tsunami,,models/cloud.mdl,ChunkShrink,,
562,131.96,bloodspot,,models/bloodspot.mdl,blood_fall_timer,blood_drop_timer,
563,-1.00,,,,SUB_Remove,,
564,-1.00,,,,SUB_Remove,,
Fte Quake C Dev
#2685 posted by madfox on 2018/11/24 00:20:02
While changing from ftcq to fte dev compiler I found some small errors. And before get passed with an unknown punctuation, I see for all monsters:
warning F307 type mismatch void entity_pain to void (entity_attacker, float dammage) self.th_pain
What is the statement to catch this error?
#2686 posted by Qmaster on 2018/11/24 00:31:28
You need to pass inflictor as well:
void (entity attacker, entity inflictor, float damage) th_pain;
#2687 posted by Qmaster on 2018/11/24 00:32:16
Usually just self. This is used to differentiate between the projectile inflictor (e.g. the rocket, self) and the attacker (self.owner).
#2688 posted by Qmaster on 2018/11/24 00:34:41
Just add "(entity attacker, entity inflicter, float damage)" to each monster's pain functuon. Example:
void () ogre_pain = {
becomes
void (entity attacker, entity inflicter, float damage) ogre_pain = {
WAIT WAIT...just attacker and damage. AD adds inflictor.
Yes, Thanks!
#2689 posted by madfox on 2018/11/24 01:55:32
Most errors are fading, when I changed it in an addon monster, but it still keeps errors.
They're not major but when I try to change athe Vore's pain it loops back to the self.th_pain string. And for Shub's error I can't find a pain function, but SUB_Null.
The error starts in client.qc (line 552) PutClientIntoServerclient.qc at the statement for
self.th_pain = player_pain;
Argh
#2690 posted by madfox on 2018/11/24 02:16:14
I had changed my defs.qc into .void(entity attacker, float damage) th.pain!
Me donkey.
Nope
#2693 posted by madfox on 2018/11/24 06:36:24
It needs to be that way, so it's the other way around.
I think fte looks for more loose ends than I thought, while it still passes the progs.dat.
Strange that doors.qc with its self_pain error.
Qcc_pain
#2694 posted by Spike on 2018/11/25 08:26:59
if you just want to silence the warning, you can do:
self.th_pain = (void(entity,float)) foo_notquitepain;
Such casts are generally not recommended as they'll not catch any future changes to your 'foo_notquitepain' function, and you should only ever ADD arguments to the rhs when casting functions (removing/changing args results in the function getting gibberish for the args that were not passed, or passed as the wrong type).
Such explicit casts should always be seen as a claim by the programmer that they know that the result will be safe despite its inconsistencies.
The vanilla qcc just saw function types, and didn't bother to validate the return types nor parameters. whereas fteqcc is somewhat annoying and warns about any inconsistent code that it sees.
Its worth noting that the vanilla qc code is inconsistent but not otherwise buggy. You could fix it purely using casts if you wanted to, but its cleaner to just add the extra args.
And yes, there is some door or trigger or something entity that mixes up touch functions and pain. You can fix that occurrence with a wrapper, but a cast will perform better - not that its significant enough to matter at all.
@Spike
#2695 posted by madfox on 2018/11/25 20:52:41
Thanks for the info, that keeps me going!
New Monster Qc
#2696 posted by madfox on 2018/12/05 01:10:01
I'm trying to make a new monster, that shots nails and launches rockets. When I run the qc the monster shoot nails and launches rockets at a low angle, half from bottom.
Also the two actions bump at the same time and I have no idea where to look.
Where is the statement that give more time between the actions?
Rabbid Fire
#2697 posted by madfox on 2018/12/05 21:48:37
As long as the player is running the relation between missiles and nails is almost even, but when it is tricked into a corner the thing blasts missiles every 0.5 second.
That's no way of surviving, I know it is called Terminator, but unlimited charge is no fight.
#2698 posted by Qmaster on 2018/12/06 18:35:50
...half from bottom... try changing the offset amount from '0 0 10' in TermMissile to higher amount such as missile.origin = self.origin + '0 0 24'; or try copying the value you used for org in LaunchZhaser if you want the missiles to fore from the same place as zhasers do.
missiles every 0.5 seconds you have melee set to fire missiles. If you stay back away then he will only shoot zhasers.
Maybe if you want more delay add more frames or add an attack_finished check.
#2699 posted by Qmaster on 2018/12/06 18:37:41
Or do
self.th_missile = sknt_atk1;
self.th_melee = sknt_atka1;
To switch it.
#2700 posted by Qmaster on 2018/12/06 18:39:04
What do you mean bump?
@-Qmaster
#2701 posted by madfox on 2018/12/07 20:52:48
The Enforcer.qc has a code for setting the laser
org = self.origin + v_forward * 30 + v_right * 8.5 + '0 0 16';
and as far as I can see the v_foreward sets the space that messures the armlength foreward, and v_right is the distance from the entity to the right sideways.
I'm looking for the space upward, as a terminator that launches from under the belt is a bit odd. In game it is not so pronounced as with testing.
I will try your statements in the hope they lead to a better result. For sofar here is the map as far as I have finished it. The scr file is included. I've played the map myself only, and I think the gamepath isn't realy clear.
captains_log0
Vector Upwards
#2702 posted by Preach on 2018/12/07 22:36:24
Hi madfox, have you tried using v_up? That's the "upward" vector I think you're after.
Belt Blaster
#2703 posted by madfox on 2018/12/08 19:06:28
@-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?
|
|
2 posts not shown on this page because they were spam |
|
You must be logged in to post in this thread.
|
Website copyright © 2002-2025 John Fitzgibbons. All posts are copyright their respective authors.
|
|