Inside3D!
     

Fill levels with zombie.

 
Post new topic   Reply to topic    Inside3d Forums Forum Index -> QuakeC Programming
View previous topic :: View next topic  
Author Message
IHateThisMap



Joined: 18 Mar 2009
Posts: 14
Location: Quake, ID, B-Movies, Comic

PostPosted: Wed Mar 25, 2009 8:55 pm    Post subject: Fill levels with zombie. Reply with quote

So I have been working on this for over a week now and I'm finally giving up on trying figuring it out on my own. I Know that a person who just asks how to do everything without trying to figure it out on their own first is bothersome at best, but I still I'm really new to coding.

I want to know how to make monsters spawn until a certain number of them is reached, and then if one was killed it would be replaced. I will spare you my code on how I attempts to do this. Let’s just say it didn't work. Any info will do but the more specific you can be the better, I'm kind of stupid.

Thank for your time.


Last edited by IHateThisMap on Wed Mar 25, 2009 9:05 pm; edited 1 time in total
Back to top
View user's profile Send private message
Electro



Joined: 29 Dec 2004
Posts: 241
Location: Brisbane, Australia

PostPosted: Wed Mar 25, 2009 8:59 pm    Post subject: Reply with quote

are they for your maps? (can you place specific entities to have them spawn from?)
_________________
Unit reporting!
http://www.bendarling.net/
Back to top
View user's profile Send private message Visit poster's website MSN Messenger
IHateThisMap



Joined: 18 Mar 2009
Posts: 14
Location: Quake, ID, B-Movies, Comic

PostPosted: Wed Mar 25, 2009 9:12 pm    Post subject: Reply with quote

Electro wrote:
are they for your maps? (can you place specific entities to have them spawn from?)


No, not really. Right now I just want to remove the monsters in the game and replace them with zombies. I have allready done this my modifying the random monsters tutorial. I just need them to respawn utlll a certen number.

An example might help, if you know of another mod that did something like what I want. One I found was Qoetia who respawned monsters if the skill was set to nightmare. I found this code to complicated thought when reading it and couldn't really apply it like I wanted.
Back to top
View user's profile Send private message
Spike



Joined: 05 Nov 2004
Posts: 944
Location: UK

PostPosted: Wed Mar 25, 2009 9:34 pm    Post subject: Reply with quote

Rune mods spawn runes in random locations. You might want to look there for inspiration.

One method I used a while ago for something entirely unrelated to zombies was to keep the light entities around and pick a random location near a random light to spawn stuff. Disclaimer: you get more zombies outside.

if you use eg:

for (e = nextent(world) ; e ; e = nextent(e))
numents = numents + 1;
numents = floor(random()*numents);
for (e = nextent(world) ; numents ; e = nextent(e))
numents = numents - 1;
then e should refer to a random entity somewhere on the map. You can then pick a random location within 256 units of that spot and use it as your spawn location. Use droptofloor to test if its a valid spot (note: for solid_bsp use (absmins+absmaxs)/2).

The above method will pick spots around 'crowded' areas. Ammo boxes/armour/etc all become spawn spots.
Empty areas remain empty.
A large concentration of zombies in one area means they'll get denser more often than not, creating armies.
Or, you can opt to leave lights in the map (ie: don't remove(self) on spawn), and this will give a more even covering of the map. There are a lot of light ents generally.

in worldspawn(), make an ent that just ticks once a second, if the number of zombies is less than desired, spawn a new one and reset the nextthink timer for the next tick. Decrement the count each time a zombie dies. Make sure you remove() gibbed zombie heads (usually gibbed heads are permanent decoration). This'll spawn and replace dead zombies.
_________________
What's a signature?
Back to top
View user's profile Send private message Visit poster's website
IHateThisMap



Joined: 18 Mar 2009
Posts: 14
Location: Quake, ID, B-Movies, Comic

PostPosted: Thu Mar 26, 2009 12:22 pm    Post subject: Reply with quote

My monsters spawn as soild un moving entitys, whats wrong with this? Oh BTW do you have a link to Rune Quake SRC.

Code:

void(vector start) spawn_monster =
{
   local entity zombie
   local float r;
   spawn() = zombie;
   self.origin = start;

   r = floor(random()*10);
   if (self.classname == "monster_wizard")
      remove(self);
// Rottweiler
   if (r > 8 && self.waterlevel < 1)
   {
      self.classname = "monster_dog";
      self.solid = SOLID_SLIDEBOX;
      self.movetype = MOVETYPE_STEP;

      setmodel (self, "progs/dog.mdl");

      setsize (self, '-32 -32 -24', '32 32 40');
      self.health = 500;

      self.th_stand = dog_stand1;
      self.th_walk = dog_walk1;
      self.th_run = dog_run1;
      self.th_pain = dog_pain;
      self.th_die = dog_die;
      self.th_melee = dog_atta1;
      self.th_missile = dog_leap1;
   }


// Zombie
   else
   {
      QF_Count = QF_Count + 1;
      self.classname = "monster_zombie";
      self.solid = SOLID_SLIDEBOX;
      self.movetype = MOVETYPE_STEP;


      setmodel (self, "progs/zombie.mdl");

      setsize (self, '-16 -16 -24', '16 16 40');
      self.health = 60;

      self.th_stand = zombie_stand1;
      self.th_walk = zombie_walk1;
      self.th_run = zombie_run1;
      self.th_pain = zombie_pain;
      self.th_die = zombie_die;
      self.th_missile = zombie_missile;
}
      walkmonster_start ();
};

void random_monster()
{
   local vector s_point;

   self.classname = "zspawn";
   self.movetype = MOVETYPE_NONE;
   self.solid = SOLID_BBOX;
   setsize(self, '-1 -1 -1', '1 1 1');

   s_point = self.origin;

   spawn_monster(s_point);

   self.nextthink = time + 10 + random() * 5;
   self.think = random_monster;

};
Back to top
View user's profile Send private message
Spike



Joined: 05 Nov 2004
Posts: 944
Location: UK

PostPosted: Thu Mar 26, 2009 3:33 pm    Post subject: Reply with quote

spawn() = zombie;

that would be wrong. Very wrong.
try:
local entity oself;
oself = self;
self = spawn();
rest_of_function_here();
self = oself;

walkmonster_start requires self to be the monster so using self is required. Seeing as your spawner assumes self is unchanged, you need to save/restore it, hence 'oself'. This is why globals are baaad. your monsters don't move because the random_monster function changes 'self.think' when 'self' refers to both the spawner and the monster *at the same time*.

remove(self);
self.XXXX = XXXX;

would also be wrong.

self.health = 500;

lol, that's also wrong, but the code is at least okay there :)
doggies that take 5 rockets to kill ehehe
_________________
What's a signature?
Back to top
View user's profile Send private message Visit poster's website
IHateThisMap



Joined: 18 Mar 2009
Posts: 14
Location: Quake, ID, B-Movies, Comic

PostPosted: Thu Mar 26, 2009 4:35 pm    Post subject: Reply with quote

Thanks a ton. I have writen this same code seven times trying to get it to work. I knew it was a little thing like that that was stopping it. Thank you.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Inside3d Forums Forum Index -> QuakeC Programming All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2004 phpBB Group