News | Forum | People | FAQ | Links | Search | Register | Log in
Coding Help
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.
First | Previous | Next | Last
Trigger_changemusic + Saves 
Alright. Thanks to Johnny Lew I have a trigger_changemusic in progs_dump however, I have no idea how to get this to work with savegames. Any guidance?


//thanks to Johnny Lew via changemusic.rar --dumptruck_ds

void() trigger_changemusic_touch =
{
if (!(other.flags & FL_CLIENT))
{
return;
}
if (!self.sounds)
{
objerror("ERROR: trigger_changemusic needs valid track number in sounds field");
return;
}
WriteByte(FL_SWIM, FL_MONSTER);
WriteByte(FL_SWIM, self.sounds);
WriteByte(FL_SWIM, self.sounds);
self.touch = SUB_Null;
self.nextthink = (time + 0.1);
self.think = SUB_Remove;
};

void() trigger_changemusic =
{
if (SUB_Inhibit ()) // new spawnflags for all entities -- iw
return;
InitTrigger();
self.touch = trigger_changemusic_touch;
};
 
@mezmorki 
con_logcenterprint 1 is the option to print centerprint messages to console. setting it to 0 obv turns that off.
;) 
Dumptruck: 
you mean, you want to remember which music track was playing and restore that when the savegame loads?

Check out rubicon 2 source code, the function LoadSaveGameCallback, the logic to call in StartFrame, and the special variable loadsavegamecallback_done -- this setup allows you to do any necessary work after loading a save game, such as re-triggering client side looping sound effects.

In theory you can save the desired music track in some variable, and then when the game is reloaded, check that variable and re-trigger the music in your own version of LoadSaveGameCallback. 
Metlslime 
yep. I was looking through other mods yesterday. I should've known to start with Rubicon 2! thanks. 
More Trigger_changemusic 
I'm posting this for those who come after. It should plug into mods easily. As I was looking over Rubicon 2 code and overheating my pea-brain, Spike posted this on Discord. It works well so far but I need to test in various source ports. This isn't as flexible as what metl posted above but it works for this implementation. NOTE the & and * are correct below

add this to worldspawn in world.qc
world_sounds = &world.sounds; //Spike not read-only yet...

add this to defs.qc
nosave float *world_sounds; //via Spike fun times! nosave=noclobber

add to bottom of triggers.qc
void(float newtrack) changemusic =
{
*world_sounds = newtrack; //changing the field via a pointer
//world.sounds has now been changed via our pointer, newly connecting players (like those connecting after the game is loaded) will get sent the new cd track's number.

//let everyone currently on the server know.
WriteByte(MSG_ALL, SVC_CDTRACK);
WriteByte(MSG_ALL, newtrack); //initial track
WriteByte(MSG_ALL, newtrack); //looped track... should generally be set the same as the initial track as most engines ignore it entirely so it might as well be sane for those that care.
};

//thanks to jleww via changemusic.rar --dumptruck_ds

void() trigger_changemusic_touch =
{
if (!(other.flags & FL_CLIENT))
{
return;
}
changemusic(self.sounds);
self.touch = SUB_Null;
self.nextthink = (time + 0.1);
self.think = SUB_Remove;
};

void() trigger_changemusic =
{
if (SUB_Inhibit ()) // new spawnflags for all entities -- iw
return;
if (!self.sounds)
{
objerror("ERROR: trigger_changemusic needs valid track number in sounds field");
return;
}
InitTrigger();
self.touch = trigger_changemusic_touch;
};
 
Correction 
oops I just noticed

if (SUB_Inhibit ()) // new spawnflags for all entities -- iw
return;


that is in progs_dump only - you won't need it elsewhere and it will cause an error on compile 
How Does Size Work? 
Hi everybody,

I'd like to put in some extra-large monsters to make usual lesser threats a far more scary danger.
From what I can see, seems the size is dealt with code looking like that:

setsize (self, '-32 -32 -24', '32 32 40');

where the 2nd and 3rd parameters correspond to VEC_HULL_MIN and VEC_HULL_MAX respectively.

Yet I can't figure out what the term "hull" actually refers to, nor how a size could possibly be "negative" (unless maybe it's lovecraftian non euclidean geometry brought in QuakeC by Shub-Niggurath herself???)

Your help to my comprehension would be extremely appreciated. Thank you a lot in advance ! :-) 
Tale Of Two Halves 
OK, so this is a bit complicated. For almost all purposes, you have exact control over the bounding box of an entity - but the one exception is really, really important!

The normal bounding box is a cuboid which doesn't ever rotate as the entity moves. The two vectors are relative offsets - they say how far the corners of the bounding box should be from the origin of the entity. The negative ones put the lower corner to the left, back and below the origin of the entity, the positive ones specify a position to the right/front/above the origin.

Interesting to note that those parameters mean the origin isn't dead centre of the cuboid, the bottom of the bounding box is 24 units below the origin, but the top is 40 units above it.

One place where the exact bounding box is used is when colliding with...another bounding box. The exact size of the bounding box is also tested to check if traces from e.g. shotguns have hit something.

However, the one place where the bounding box is (sorta) ignored is calculating collisions against BSP objects. To run faster on Pentium 90s, Quake only computes the spaces that three sizes of object can fit around BSP objects:
• point-sized
• man-sized
• shambler-sized
The precomputed spaces are called "hulls". If the bounding box isn't one of those three sizes, the Quake engine picks a "best-fit" from the available hulls. If you want to get consistent collision, you have to pick one of those three sizes, and the constants are there to make that easier. 
My Triviant 
r_drawviewmodel 1 makes a lot clear.

I try to make a monster launch an attack with three projectiles. One straight forward and two sideways parallel to the player. I studied Wiz_StartFast but I can't make the sideways parallel in line. The outside projectile always aims to the player, not aside.

Where should I start? 
Thank You Preach! 
Your explanation is crystal clear and I would not have guessed that alone, thank you so much!

Now just need to find where the reference hulls for Hexen II are defined (I'm mapping for H2) and I'm done. :-) 
Madfox 
Have you tried looking at the Hell Knight code? I think he does what you're asking for - just spread out over multiple frames instead of all at the same time... 
Ah 
Yes Preach, that makes sense.
It don't has to be a simillar shot, although it would look fine. 
 
I will ask this for Madfox here:

So in version 2.38 of the chasm mod, the Mong does not react after being hit by a stratos. However, they will infight on rare occasions. But I cannot figure out what these occasions are. I managed to capture a saved game of them infighting, attached below, maybe somebody could take a look at it? This issue is really weird, monsters either infight or don't infight, but not infight rarely.

The saved games are here:

https://www.dropbox.com/s/1t1f4mi780x957w/chasm%20quake%20saved%20game.rar?dl=0

2.38 is here:

http://home.kpn.nl/lo2kf8/quake/Quasm_dev2.38.zip 
Yhe1 
I figured it out, tagged madfox on discord...

The monsters first frame of run animation has a ai_walk in it.... change it to ai_run and it works just fine. 
 
Hi, everyone im doing my first code for quakec and I need some help

I would like make a 1920's wall lamp, my entity works but i would like instead a common light a flickering one, i use this code but seems doesnt works properly (compiling is ok), any suggestion? Thanks a lot in advance!

My code:
/*QUAKED light_torch_small_walltorch (0 .5 0) (-10 -10 -20) (10 10 20)
Short wall torch
Default light value is 200
Default style is 7
*/
void() light_wall_lamp =
{
precache_model ("progs/lamp.mdl");
setmodel (self, "progs/lamp.mdl");
FireAmbient ();
self.style = 3;
lightstyle(self.style, "mmmmmaaaaammmmmaaaaaabcdefgabcdefg");
makestatic (self);
};

How looks on quake

https://imgur.com/73NlC7s 
Drugod 
If you want to make a custom light style you should give it a new number not already used and place it with the other light style definitions (forgot where — world.qc)?

Then, it seems bad to hard-code the style in the entity spawn function since it prevents a mapper from changing it per instance in the map. You could do a check “if self.style == 0 then self.style = 3” which would let mappers use different styles but also add the convenience of if being automatic for lazy mappers. 
Oh... 
And I forgot, you have to set the entity style in the map editor anyway because it needs to be there for light.exe to set up the light maps correctly.

So just declare the light style in a centralized location with a unique number < 32 and then set it on the light entities in the map editor, and that should be it. 
 
I will ask two more questions for Madfox regarding the Chasm mod.

In Chasm mod 2.4. when the Faust fires a rocket, there is no explosion. I used to think that this issue is not a big deal, as there are tons of mods with Rocket Ogres and Rocket Grunts, but apparently it is not that simple. Madfox made a video of it here:

https://youtu.be/BL4vuKIl8N8

You can see there is no explosion.

The second question is that when one of the monster dies, its corpse floats in the air. I have provided two saved games, one with the creature alive, and another with the creature dead.

https://www.dropbox.com/s/dptouqamw0mgcmk/chasm2.4%20save.rar?dl=0

If somebody could take a look at these two issues it would be great. Thanks!

The chasm mod is found here:

http://home.kpn.nl/lo2kf8/quake/maps/Quasm_dev2.4.zip 
 
Your link is dead yhe1 
 
Code Topic 
Link won't work, updated. 
Have A Question About Something .. 
Can we make quake player automatically move forward by players his own forward direction
Im really getting stuck about it please some one help me ı wısh i could ask a true question... 
// Player Not Fixed 
I don't understand the question.

Do you want to get behind a player to move it foreward,
or do you need a code so you don't have to push a foreward button?

I don't want to offend you, but I really get stuck to understand your question. 
 
Yes second one i need an auto forward velocity code.i have a trigger and i want to player go forward automaticlally every time when player touch
And thank you 
 
I forgot to tell that player must go forward automatically by triggers angle and may can jump may be hide his weapon bla bla :) 
First | Previous | Next | Last
You must be logged in to post in this thread.
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.