Forum

world.qc

Discuss programming in the QuakeC language.

Moderator: InsideQC Admins

world.qc

Postby redrum » Tue Nov 06, 2007 3:47 am

Guys, I'm trying to get creatures to spawn when new maps load.
I put 3 creature creating functions in WorldSpawn().
Problem is the creatures spawn in the same spot, and the 3rd seems to get stuck in the ceiling. They are actually stacked up when they spawn.
My question is, how can I put a time delay between the functions?
Welcome to the Overlook Hotel: The-Overlook-Hotel.game-server.cc
User avatar
redrum
 
Posts: 410
Joined: Wed Mar 28, 2007 11:35 pm
Location: Long Island, New York

Postby Urre » Tue Nov 06, 2007 7:33 am

There are multiple ways of doing it. The best way in your case would be to spawn an entity, which has a delayed nextthink, and a think function which sets all the different parameters to make it a solid monster, much like the way respawning items is handled, where they are not actually removed, they are just invisible
I was once a Quake modder
User avatar
Urre
 
Posts: 1109
Joined: Fri Nov 05, 2004 2:36 am
Location: Moon

Postby Sajt » Tue Nov 06, 2007 8:19 am

I hope you weren't just calling entity spawn functions (e.g. monster_dog)...

If so, this is what you should be doing:

Code: Select all
local entity oldself;

...

oldself = self;

self = spawn ();
self.classname = "monster_dog";
self.origin = '1 2 3';
monster_dog ();

self = spawn ();
self.classname = "monster_dog";
self.origin = '4 5 6';
monster_dog ();

self = spawn ();
self.classname = "monster_dog";
self.origin = '7 8 9';
monster_dog ();

self = oldself;
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Sajt
 
Posts: 1215
Joined: Sat Oct 16, 2004 3:39 am

Postby Nash » Tue Nov 06, 2007 9:35 am

Interesting, Sajt. I'd think that simply calling the monster function would work.

Can you explain why this has to be done?
User avatar
Nash
 
Posts: 95
Joined: Fri Oct 19, 2007 5:56 pm
Location: Kuala Lumpur, Malaysia

Postby Preach » Tue Nov 06, 2007 9:57 am

Nash wrote:Interesting, Sajt. I'd think that simply calling the monster function would work.

Can you explain why this has to be done?


Because the monster_dog function is intended to be run on an entity that's already listed in the entity section of a map. When the map is loaded, the engine runs through each of the entries in the bsp. It then creates a blank entry, adds all the fields that have been set by the mapper, then runs the function with the same name as the specified classname. So the origin and classname are assumed to have been set already, otherwise it wouldn't have been added to the map.
Preach
 
Posts: 122
Joined: Thu Nov 25, 2004 7:20 pm

Postby Sajt » Tue Nov 06, 2007 9:58 am

When the engine loads the map, it looks at each entity and spawns it - basically just like calling spawn(), which spawns a blank entity. Then it loads all the key/value pairs out of the map file, which includes classname (string field), origin, angles, etc. Then it searches for a QC function with the same name as the classname and calls it, with 'self' set to the newly spawned entity.

The QC spawn functions (e.g. monster_dog) are just regular functions that work with an entity (self) that has already been spawned, and has some fields already set (classname, origin, etc.)

edit:
Curse you Preach. Now my post is useless. I shall attempt to give it something worthwhile:
Image
It's a frog.
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Sajt
 
Posts: 1215
Joined: Sat Oct 16, 2004 3:39 am

Postby FrikaC » Tue Nov 06, 2007 4:32 pm

of course you must not call any of the precache functions outside of the initial level spawn, so if you intend to spawn the entities after a certain amount of time, move their precaches to some other function - e.g. worldspawn.
FrikaC
Site Admin
 
Posts: 1026
Joined: Fri Oct 08, 2004 11:19 pm

Postby Nash » Tue Nov 06, 2007 4:58 pm

Thanks for your explanations, Sajt and Preach. That makes sense.

(Yuck I hate frogs)
User avatar
Nash
 
Posts: 95
Joined: Fri Oct 19, 2007 5:56 pm
Location: Kuala Lumpur, Malaysia

Postby RenegadeC » Tue Nov 06, 2007 5:05 pm

Sajt wrote:Image


Why is this frog red?
User avatar
RenegadeC
 
Posts: 391
Joined: Fri Oct 15, 2004 10:19 pm
Location: The freezing hell; Canada

Postby FrikaC » Tue Nov 06, 2007 5:36 pm

Why is the sky black?
FrikaC
Site Admin
 
Posts: 1026
Joined: Fri Oct 08, 2004 11:19 pm

Postby FrikaC » Tue Nov 06, 2007 5:36 pm

Nash wrote:Thanks for your explanations, Sajt and Preach. That makes sense.

(Yuck I hate frogs)


no thanks for me?
FrikaC
Site Admin
 
Posts: 1026
Joined: Fri Oct 08, 2004 11:19 pm

Postby redrum » Tue Nov 06, 2007 9:29 pm

FrikaC got hosed!
Welcome to the Overlook Hotel: The-Overlook-Hotel.game-server.cc
User avatar
redrum
 
Posts: 410
Joined: Wed Mar 28, 2007 11:35 pm
Location: Long Island, New York

Postby Nash » Wed Nov 07, 2007 1:32 am

Er, no I guess because your post doesn't look like it was answering my question.

(omg your signature is randomized lololol)
User avatar
Nash
 
Posts: 95
Joined: Fri Oct 19, 2007 5:56 pm
Location: Kuala Lumpur, Malaysia

Postby Sajt » Wed Nov 07, 2007 2:14 am

RenegadeC wrote:
Sajt wrote:Image


Why is this frog red?


Cheese grater.
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Sajt
 
Posts: 1215
Joined: Sat Oct 16, 2004 3:39 am

Postby Urre » Wed Nov 07, 2007 8:11 am

Nash wrote:Er, no I guess because your post doesn't look like it was answering my question.


I'd say he did point out something important though...
I was once a Quake modder
User avatar
Urre
 
Posts: 1109
Joined: Fri Nov 05, 2004 2:36 am
Location: Moon

Next

Return to QuakeC Programming

Who is online

Users browsing this forum: No registered users and 1 guest