home *** CD-ROM | disk | FTP | other *** search
- /* =========================
- ||Headers for functions||
- ========================= */
-
- void (vector flame_pos) PlaceFlame;
- void (vector reward_pos) SacReward;
- void () ModelSelect;
-
- /* =======================================
- || Function Called when head touched ||
- ======================================= */
-
- void () Head_Touch =
- {
- local string text;
-
- if (other.classname == "player")
- {
- //Checks if the player can carry any more heads...
- if (other.heads >= 5)
- {
- sprint (other , "You cannot carry any more heads\n");
- return;
- } else {
- //Tallies the neccesary heads <sp>
- if (self.classname == "monster_dog")
- {
- other.dog = other.dog + 1;
- CurrentHead = "dog";
- }
- else if (self.classname == "monster_ogre")
- {
- other.ogre = other.ogre + 1;
- CurrentHead = "ogre";
- }
- else if (self.classname == "monster_demon1")
- {
- other.demon = other.demon + 1;
- CurrentHead = "demon";
- }
- else if (self.classname == "monster_shambler")
- {
- other.shambler = other.shambler + 1;
- CurrentHead = "shambler";
- }
- else if (self.classname == "monster_knight")
- {
- other.knight = other.knight + 1;
- CurrentHead = "knight";
- }
- else if (self.classname == "monster_army")
- {
- other.army = other.army + 1;
- CurrentHead = "army";
- }
- else if (self.classname == "monster_wizard")
- {
- other.wizard = other.wizard + 1;
- CurrentHead = "wizard";
- }
- else if (self.classname == "monster_zombie")
- {
- other.zombie = other.zombie + 1;
- CurrentHead = "zombie";
- }
- else if (self.classname == "monster_hell_knight")
- {
- other.hellknight = other.hellknight + 1;
- CurrentHead = "hellknight";
- }
- else if (self.classname == "monster_shalrath")
- {
- other.shalrath = other.shalrath + 1;
- CurrentHead = "shalrath";
- }
- else if (self.classname == "monster_enforcer")
- {
- other.enforcer = other.enforcer + 1;
- CurrentHead = "enforcer";
- }
-
- else other.player = other.player + 1;
-
- //Makes grand total more
- other.heads = other.heads + 1;
- stuffcmd (other, "bf\n");
- sprint (other, "You've picked up a head\n");
- remove(self);
- }
- }
- };
-
- /* =============================================
- || Function called when head is sacrificed ||
- ============================================= */
-
- void() SacrificeHead =
- {
- local vector vel;
-
- //Calls function to place flames in pentagram shape
- PlaceFlame (self.origin + '0 30 16');
- PlaceFlame (self.origin + '28 9 16');
- PlaceFlame (self.origin + '12 -26 16');
- PlaceFlame (self.origin + '-12 -26 16');
- PlaceFlame (self.origin + '-28 9 16');
-
- //Item respawn sound for reward
- sound (self, CHAN_VOICE, "items/itembk2.wav", 1, ATTN_NORM);
-
- //Decides what reward should be given for sacrifice
- SacReward (self.origin);
-
- //Spawns some blood spray for effect
- vel = '0 0 150';
- particle (self.origin+vel*0.01,vel,69,150);
- vel = '0 0 120';
- particle (self.origin+vel*0.01,vel,73,200);
-
- remove(self);
- };
-
- /* =========================================
- || Function called when head is thrown ||
- ========================================= */
-
- void () TossHead =
- {
- //Selects which head model to throw
- ModelSelect();
-
-
- //Checks whether you have any of that specific head available
- if (GotHead == 0) {
- sprint (self, "You don't have any ");
- sprint (self, CurrentHead);
- sprint (self, " heads to sacrifice.\n");
- return;
- } else { if (GotHead == 1) {
-
- //If you have, creates new entity of that specific head
- local entity item;
-
- item = spawn ();
- item.owner = self;
- item.movetype = MOVETYPE_BOUNCE;
- item.solid = SOLID_NOT;
-
- //Direction and speed of head when thrown
- if (self.v_angle_x)
- item.velocity = v_forward*300 + v_up * 100 + crandom()*v_right*10 + crandom()*v_up*10;
- else {
- item.velocity = aim(self, 10000);
- item.velocity = item.velocity * 300;
- item.velocity_z = 100;
- }
-
- item.avelocity = '300 300 300' * crandom() + '10 20 50' * crandom();
-
- item.angles = vectoangles(item.velocity);
-
- //Play chant sound (ripped from Heretic)
- sound (self, CHAN_VOICE, "wizsit.wav", 1, ATTN_NORM);
- item.nextthink = time + 3;
- item.think = SacrificeHead;
-
- //Sets model of head
- setmodel(item, HeadModel);
-
- setsize (item, '-16 -16 0', '16 16 56');
- setorigin (item, self.origin);
-
- //Makes the amount of heads you have 1 less
- self.heads = self.heads - 1;
- }
- }
- };
- /* ======================================================
- || Fucntion called by impulse command to throw head ||
- ====================================================== */
-
- void() W_FireHead =
- {
- // Checks if you have any heads to sacrifice
- if (self.heads == 0) {
- sprint (self, "You have no heads to sacrifice\n");
- return;
- } else {
- //Then throws the head
- TossHead();
- }
- };
- /* =================================================
- || Function to spawn flame in certian position ||
- ================================================= */
-
- void (vector flame_pos) PlaceFlame =
- {
- //Spawns a flame entity
- local entity flame;
-
- flame = spawn ();
- flame.owner = self;
- flame.movetype = MOVETYPE_NONE;
- flame.solid = SOLID_NOT;
-
- setmodel (flame, "progs/flame2.mdl");
- setsize (flame, '-2 -2 0', '2 2 16');
- setorigin (flame, flame_pos);
-
- flame.effects = EF_DIMLIGHT;
-
- flame.nextthink = time + 10 + crandom();
- flame.think = SUB_Remove;
-
- };
- /* ==========================================
- || Function to cycle forward thru heads ||
- ========================================== */
-
- void () HeadCycleForward =
- {
- //See above for description
- local string Head;
-
- if (self.heads == 0)
- {
- sprint (self, "You have no heads\n");
- return;
- } else {
- if (CurrentHead == "dog")
- CurrentHead = "army";
- else if (CurrentHead == "army")
- CurrentHead = "enforcer";
- else if (CurrentHead == "enforcer")
- CurrentHead = "ogre";
- else if (CurrentHead == "ogre")
- CurrentHead = "knight";
- else if (CurrentHead == "knight")
- CurrentHead = "wizard";
- else if (CurrentHead == "wizard")
- CurrentHead = "zombie";
- else if (CurrentHead == "zombie")
- CurrentHead = "demon";
- else if (CurrentHead == "demon")
- CurrentHead = "hellknight";
- else if (CurrentHead == "hellknight")
- CurrentHead = "shalrath";
- else if (CurrentHead == "shalrath")
- CurrentHead = "shambler";
- else if (CurrentHead == "shambler")
- CurrentHead = "dog";
- }
- sprint (self, CurrentHead);
- sprint (self, "\n");
- };
-
- /* ==========================================
- || Function to cycle backward thru heads ||
- ========================================== */
-
- void () HeadCycleBack =
- {
- //See above for description
- local string Head;
-
- if (self.heads == 0)
- {
- sprint (self, "You have no heads\n");
- return;
- } else {
- if (CurrentHead == "dog")
- CurrentHead = "shambler";
- else if (CurrentHead == "shambler")
- CurrentHead = "shalrath";
- else if (CurrentHead == "shalrath")
- CurrentHead = "hellknight";
- else if (CurrentHead == "hellknight")
- CurrentHead = "demon";
- else if (CurrentHead == "demon")
- CurrentHead = "zombie";
- else if (CurrentHead == "zombie")
- CurrentHead = "wizzard";
- else if (CurrentHead == "wizzard")
- CurrentHead = "knight";
- else if (CurrentHead == "knight")
- CurrentHead = "ogre";
- else if (CurrentHead == "ogre")
- CurrentHead = "enforcer";
- else if (CurrentHead == "enforcer")
- CurrentHead = "army";
- else if (CurrentHead == "army")
- CurrentHead = "dog";
- }
- sprint (self, CurrentHead);
- sprint (self, "\n");
- };
-
- /* ======================================================
- || Function that selects the model of head to throw ||
- ====================================================== */
-
- void () ModelSelect =
- {
- //Checks what current selected head is, and chooses appropriate model
- if (CurrentHead == "dog") {
- if (self.dog > 0) {
- GotHead = 1;
- HeadModel = "progs/h_dog.mdl";
- self.dog = self.dog - 1;
- RewardType = 1;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "army") {
- if (self.army > 0) {
- GotHead = 1;
- HeadModel = "progs/h_guard.mdl";
- self.army = self.army - 1;
- RewardType = 1;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "enforcer") {
- if (self.enforcer > 0) {
- GotHead = 1;
- HeadModel = "progs/h_mega.mdl";
- self.enforcer = self.enforcer - 1;
- RewardType = 1;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "ogre") {
- if (self.ogre > 0) {
- GotHead = 1;
- HeadModel = "progs/h_ogre.mdl";
- self.ogre = self.ogre - 1;
- RewardType = 2;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "knight") {
- if (self.knight > 0) {
- GotHead = 1;
- HeadModel = "progs/h_knight.mdl";
- self.knight = self.knight - 1;
- RewardType = 1;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "wizard") {
- if (self.wizard > 0) {
- GotHead = 1;
- HeadModel = "progs/h_wizard.mdl";
- self.wizard = self.wizard - 1;
- RewardType = 1;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "zombie") {
- if (self.zombie > 0) {
- GotHead = 1;
- HeadModel = "progs/h_zombie.mdl";
- self.zombie = self.zombie - 1;
- RewardType = 1;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "demon") {
- if (self.demon > 0) {
- GotHead = 1;
- HeadModel = "progs/h_demon.mdl";
- self.demon = self.demon - 1;
- RewardType = 2;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "hellknight") {
- if (self.hellknight > 0) {
- GotHead = 1;
- HeadModel = "progs/h_hellkn.mdl";
- self.hellknight = self.hellknight - 1;
- RewardType = 2;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "shalrath") {
- if (self.shalrath > 0) {
- GotHead = 1;
- HeadModel = "progs/h_shal.mdl";
- self.shalrath = self.shalrath - 1;
- RewardType = 3;
- } else {
- GotHead = 0;
- }
- }
- else if (CurrentHead == "shambler") {
- if (self.shambler > 0) {
- GotHead = 1;
- HeadModel = "progs/h_shams.mdl";
- self.shambler = self.shambler - 1;
- RewardType = 3;
- } else {
- GotHead = 0;
- }
- }
- };
- // Blah blah blah, this is sooooo boring commenting code...
-
- /* ==============================================================
- || This is the function that decides what reward you get... ||
- ============================================================== */
-
- void (vector reward_pos) SacReward =
- {
- local entity reward;
- local float randomreward;
-
- //Random number generated to decide on reward...
- randomreward = crandom();
-
- //There are three reward types. 1,2,3 (Doi)
- //1 being least and 3 most. This gives reward accorfin to random
- //number and reward type...
-
- if (RewardType == 1) { //reward 1 = health15 and armor1
- if (randomreward < 0.5) {
- reward = spawn (); //health15
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
- reward.touch = health_touch;
-
- setmodel (reward, "maps/b_bh10.bsp");
- setsize (reward, '-2 -2 0', '2 2 16');
- setorigin (reward, reward_pos - '14 14 0');
- reward.noise = "items/r_item1.wav";
- reward.healamount = 15;
- reward.healtype = 0;
- } else if (randomreward < 1) {
- reward = spawn (); // armor1
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
- reward.touch = armor_touch;
- setsize (reward, '-2 -2 0', '2 2 16');
- setorigin (reward, reward_pos);
- reward.classname = "item_armor1";
-
- setmodel (reward, "progs/armor.mdl");
- reward.skin = 0;
- }
- } else if (RewardType == 2) { //reward 2 = health25 and armor2
- if (randomreward < 0.5) {
- reward = spawn (); // health25
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
- reward.touch = health_touch;
- setsize (reward, '-2 -2 0', '2 2 16');
- setorigin (reward, reward_pos - '14 14 0');
-
- setmodel(reward, "maps/b_bh25.bsp");
- reward.noise = "items/health1.wav";
- reward.healamount = 25;
- reward.healtype = 1;
- } else if (randomreward < 1) {
- reward = spawn (); // armor2
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
- reward.touch = armor_touch;
- setsize (reward, '-2 -2 0', '2 2 16');
- setorigin (reward, reward_pos);
- reward.classname = "item_armor2";
-
- setmodel (reward, "progs/armor.mdl");
- reward.skin = 1;
- }
- } else if (RewardType == 3) { //reward 3 = health100, armorInv,
- //Invulnerbality, Invisibility and Quad
- if (randomreward < 0.2) {
- reward.touch = powerup_touch; //Invulnerbality
- reward = spawn ();
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
-
- reward.noise = "items/protect.wav";
- setmodel (reward, "progs/invulner.mdl");
- reward.netname = "Pentagram of Protection";
- reward.items = IT_INVULNERABILITY;
- setsize (self, '-16 -16 -24', '16 16 32');
- reward.classname = "item_artifact_invulnerability";
- setorigin (reward, reward_pos);
- } else if (randomreward < 0.4) {
- reward = spawn (); //Invisibility
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
-
- reward.touch = powerup_touch; //Invisibility
- reward.noise = "items/inv1.wav";
- setmodel (reward, "progs/invisibl.mdl");
- reward.netname = "Ring of Shadows";
- reward.items = IT_INVISIBILITY;
- setsize (reward, '-16 -16 -24', '16 16 32');
- reward.classname = "item_artifact_invisibility";
- setorigin (reward, reward_pos);
- } else if (randomreward < 0.6) {
- reward = spawn (); //Quaddamage
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
-
- reward.touch = powerup_touch;
- reward.noise = "items/damage.wav";
- setmodel (reward, "progs/quaddama.mdl");
- reward.netname = "Quad Damage";
- reward.items = IT_QUAD;
- setsize (reward, '-16 -16 -24', '16 16 32');
- reward.classname = "item_artifact_super_damage";
- setorigin (reward, reward_pos);
- } else if (randomreward < 0.8) {
- reward = spawn (); // armorInv
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
- reward.touch = armor_touch;
- setsize (reward, '-2 -2 0', '2 2 16');
- setorigin (reward, reward_pos);
- reward.classname = "item_armorInv";
-
- setmodel (reward, "progs/armor.mdl");
- reward.skin = 2;
-
- } else if (randomreward < 1) {
- reward = spawn (); // megahealth
- reward.owner = self;
- reward.movetype = MOVETYPE_NONE;
- reward.solid = SOLID_TRIGGER;
- reward.touch = health_touch;
- setsize (reward, '-2 -2 0', '2 2 16');
- setorigin (reward, reward_pos - '14 14 0');
-
- setmodel(reward, "maps/b_bh100.bsp");
- reward.noise = "items/r_item2.wav";
- reward.healamount = 100;
- reward.healtype = 2;
- }
- }
- };
-
- // Sacrifice-o-head code, written, concieved and all that mumbo jumbo
- // by Broken, aka Ilden Webber, from South Africa. Not that it
- // changes anything, but now you know.
-