endless enemy spawn

Discuss programming in the QuakeC language.
Hazematman
Posts: 54
Joined: Thu Jul 15, 2010 1:58 am
Location: Canada

endless enemy spawn

Post by Hazematman »

how would I make an endless enemy spawn?

edit: forgot about zombie thing my idea worked
Spirit
Posts: 1068
Joined: Sat Nov 20, 2004 9:00 pm
Contact:

Post by Spirit »

You solved your problem? Please share how you did it.
Improve Quaddicted, send me a pull request: https://github.com/Quaddicted/quaddicted-data
Hazematman
Posts: 54
Joined: Thu Jul 15, 2010 1:58 am
Location: Canada

Post by Hazematman »

Well I only solved half my problem. I'm trying to make a small mod where you fight and endless onslaught of zombies. I manged to make it so you did not need to use a rocket to kill zombies, by removing zombie_pain from zombie.qc, but now I need to make a zombie spawn that sends a new zombie after the last one died. Which I am completely lost at doing, so it would be of great help if someone could point me in the right direction for doing this.

edit: After looking through some of the qc files and seeing how the player re spawns I figured out I would need to call a function inside zombie_die(edit: Or I would call a function at the end saying something like "if the zombie is dead, re spawn") that would spawn the zombie, the thing is I don't know what this function is, could someone please help me with this?
frag.machine
Posts: 2126
Joined: Sat Nov 25, 2006 1:49 pm

Post by frag.machine »

The problem is a bit more complicated than this.

What you need is an entity that spawns another entity (the zombie), and keep checking if it stills alive. If is dead, then spawn another one, and repeat.
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
Hazematman
Posts: 54
Joined: Thu Jul 15, 2010 1:58 am
Location: Canada

Post by Hazematman »

Ok so I'm not very good with qc right now so it would help a lot if you guys tell me what the names of the functions I need to put in but right now I'm guessing I'm going to have to do something like this:

Code: Select all

if(self.health <= 0) // or if(zombie_die == true) something like that :)
{
create monster_zombie entity where the last one was();
}
and I would put this at the bottom of zombie.qc.
frag.machine
Posts: 2126
Joined: Sat Nov 25, 2006 1:49 pm

Post by frag.machine »

No exactly. Ok, let's start from start.

What you need is to create a new map entity that works pretty much like the info_player_start: it's something that you put in a map to tell Quake "I want to spawn zombies in this place".

This thing (let's call it "info_zombie_start" to make things easier) will work in the following way:

1) when spawned, the first thing it does is precache all models and sounds used by the zombie;
2) we want to spawn a new zombie once ours is killed, so we need to track it. To do this, we can either create a specific field in the entity structure (for example, ".entity myzombie;" at the end of defs.qc) or reuse one of the already existing .entity fields. Since our info_zombie_start is not a monster, it won't have enemies, so we can reuse the .enemy field (and save a couple bytes);
3) we need to set a "think" function to the info_zombie_start to check, every fews seconds, if the zombie pointed by .enemy is dead:

Code: Select all

 if (self.enemy.health <= 0)
If that's the case, we create a new entity, set its origin to the info_zombie_start origin (plus a bit in the z axis so the zombie don't get stuck in ground) and we can repeat the initialization steps that you can see in zombie.qc (setmodel, setsize, etc). Then, we store a reference to the new zombie into our .enemy field, and we can schedule our return to the checking loop above.

There are a lot more of details, but this covers the main idea.
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
Mexicouger
Posts: 514
Joined: Sat May 01, 2010 10:12 pm
Contact:

Post by Mexicouger »

I did something similar, except I made a projectile spawn at a certain point. I made an entity called misc_marion, and it spawned a projectile every few seconds using think and nextthink. It is fairly easy to do.

My code was as easy as something like this(To spawn the actual thing that Shot the projectile. It is invisible of course)

Code: Select all

void() misc_marion =
{
local entity mario;

mario = spawn();

mario.solid = SOLID_SLIDEBOX;
mario.movetype = MOVETYPE_NONE;
mario.classname = "Mario";

setsize (mario, '-25 -25 -10', '25 25 50');
setorigin (mario, self.origin);

mario.think = W_FireMario && SUB_Remove;
mario.nextthink = (time + 1);
};
He pretty much removes himself every second, and thus refreshes his thinking on shooting the projectile. Works fairly well.
ceriux
Posts: 2230
Joined: Sat Sep 06, 2008 3:30 pm
Location: Indiana, USA

Post by ceriux »

couldnt you just call a zombie spawn at the end of the zombies death sequence?
frag.machine
Posts: 2126
Joined: Sat Nov 25, 2006 1:49 pm

Post by frag.machine »

In the case of the zombie, you'd see a head morphing back to the full zombie corpse, which would look weird. :)
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
gnounc
Posts: 428
Joined: Mon Apr 06, 2009 6:26 am

Post by gnounc »

you mean it would look AWESOME.
Dr. Shadowborg
InsideQC Staff
Posts: 1120
Joined: Sat Oct 16, 2004 3:34 pm

Post by Dr. Shadowborg »

Especially if you have the head float up a bit and spawn a few gibs from random directions that get pulled into the head before you spawn the teleport fog. >=D
Mexicouger
Posts: 514
Joined: Sat May 01, 2010 10:12 pm
Contact:

Post by Mexicouger »

I wanted something like this myself, so I am working on a code for it.
So far, I have the monster spawn 5 seconds after the enemy dies. But he spawns right where the monster Dies.

I have the code split into fragments. I made an object that you spawn in worldcraft to precache the monster. The entity deletes itself in a second, and the monster spawns in 5. If you want this code, I will gladly share it with you. Otherwise, I am working on making the monster spawn at an appointed spawn point
gnounc
Posts: 428
Joined: Mon Apr 06, 2009 6:26 am

Post by gnounc »

Reassemblnig zombie ftw Shadowborg FTW
Hazematman
Posts: 54
Joined: Thu Jul 15, 2010 1:58 am
Location: Canada

Post by Hazematman »

Thanks Mexicouger, I would love to see that code, maybe I could learn some stuff from it.
Mexicouger
Posts: 514
Joined: Sat May 01, 2010 10:12 pm
Contact:

Post by Mexicouger »

Hazematman wrote:Thanks Mexicouger, I would love to see that code, maybe I could learn some stuff from it.
I am not sure what messy code is considered, but I feel like my code isn't the most efficient it can be. I'll work on it. The problem I am having right now, is that the monster doesn't spawn at it's appointed spawn point, He spawns at '0 0 0', But he faithfully respawns.
Post Reply