// bring back qc file, contains all the functions added to create the
// 'respawn effect
// void bringback ();  declared in ogre.qc ( first file its referanced in);
// void savecritter ();  ""

@static {

	void () hes_dead_jim = [ self.frame, im_alive, 10 ] { }

	void () im_alive =
	{
		self.solid = SOLID_SLIDEBOX;
		self.movetype = MOVETYPE_STEP;
		self.takedamage = DAMAGE_AIM;

		if ((mapname != "end") && (random() < 0.5))
			self.origin = self.oldorigin;

		setmodel(self, self.weaponmodel);
		self.health = self.max_health;

		switch (self.classname) {
			case "monster_demon1":
			case "monster_ogre":
			case "monster_shalrath":
			case "monster_shambler":
				setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
				break;
			case "monster_dog":
				setsize (self, '-32 -32 -24', '32 32 40');
				break;
			case "monster_fish":
				setsize (self, '-16 -16 -24', '16 16 24');
				self.flags = self.flags + FL_SWIM;
				break;
			case "monster_wizard":
				setsize (self, '-16 -16 -24', '16 16 40');
				self.flags = self.flags + FL_FLY;
				break;
			default:
				// about 3/4 of quakes critters use this size
				setsize (self, '-16 -16 -24', '16 16 40');
				break;
		}

		spawn_tdeath (self.origin, self);
		spawn_tfog (self.origin);

		//Don't stay angry at everyone.
		//Side note. NIL is the same as WORLD.
		self.enemy = NIL;
		//This HAS TO BE SET HERE, or the creature WILL NOT survive the motion test.
		self.th_walk();

		//We have to set the origin no matter what kind of creature it is, so the
		//thing becomes solid again. (Maybe, maybe not? Can't hurt anyway...)
		if (!(self.flags & FL_FLY) && !(self.flags & FL_SWIM)) {
			setorigin (self, self.origin + '0 0 1');
			droptofloor ();
		} else {
			//Flyer/Fish
			setorigin (self, self.origin);
		}
		if (!walkmove(0,0)) {
			//Die if we get stuck in a wall/object
			T_Damage (self, self, self, 50000);
		}
	}
};

void () savecritter =
{
	// .max_health was only used by player until now
	self.max_health = self.health;
	// .oldorigin only used by secret doors, until now.
	self.oldorigin  = self.origin;
	// .weaponmodel is only used to show the players current weapon (on the hud)
	self.weaponmodel = self.model;
};

void () bringback =
{
	if (!respawn_enabled)
		return;

	hes_dead_jim ();
};
