void () monster_dog; void () monster_zombie; void () monster_tarbaby; void () monster_army; void () monster_ogre; void () monster_wizard; void () monster_knight; void () monster_demon1; void () monster_enforcer; void () monster_shalrath; void () monster_shambler; void () monster_fish; void (vector jojo) spawn_ghoul; float (float int) getperk = { if (self.perk1 == int) return TRUE; else if (self.perk2 == int) return TRUE; else return FALSE; }; void(float stnum, float sttype, .float fieldname) clientstat = #232; void() SetupStats = { //2 is ev_float //32 is the first stat we are allowed to use clientstat(32, 2, islot1); clientstat(33, 2, islot2); clientstat(34, 2, islot3); clientstat(35, 2, islot4); clientstat(36, 2, islot5); clientstat(37, 2, islot6); clientstat(38, 2, islot7); clientstat(39, 2, islot8); clientstat(40, 2, islot9); clientstat(41, 2, islot10); clientstat(42, 2, islot11); clientstat(43, 2, islot12); clientstat(44, 2, islot13); clientstat(45, 2, islot14); clientstat(46, 2, islot15); clientstat(47, 2, islot16); clientstat(48, 2, health); clientstat(49, 2, max_health); clientstat(50, 2, ammo_shells); clientstat(51, 2, ammo_cells); clientstat(52, 2, weight); clientstat(53, 2, max_weight); clientstat(54, 2, position); clientstat(55, 2, rage); clientstat(56, 2, regen); clientstat(57, 2, missionbrief); clientstat(58, 2, sneak); clientstat(59, 2, perk2); clientstat(60, 2, perk1); clientstat(61, 2, current_slot); clientstat(62, 2, team); clientstat(63, 2, shadowtime); clientstat(64, 2, start_time); clientstat(65, 2, location); clientstat(66, 2, map_obj); clientstat(67, 2, map_ent1); clientstat(68, 2, map_ent2); clientstat(69, 2, map_ent3); clientstat(71, 2, xslot1); clientstat(72, 2, xslot2); clientstat(73, 2, xslot3); clientstat(74, 2, xslot4); clientstat(75, 2, xslot5); clientstat(76, 2, xslot6); clientstat(77, 2, xslot7); clientstat(78, 2, xslot8); clientstat(79, 2, xslot9); clientstat(80, 2, xslot10); clientstat(81, 2, xslot11); clientstat(82, 2, xslot12); clientstat(83, 2, xslot13); clientstat(84, 2, xslot14); clientstat(85, 2, xslot15); clientstat(86, 2, xslot16); clientstat(87, 2, xslot17); clientstat(88, 2, xslot18); clientstat(89, 2, xslot19); clientstat(90, 2, xslot20); clientstat(91, 2, islot17); clientstat(92, 2, islot18); clientstat(93, 2, islot19); clientstat(94, 2, islot20); clientstat(95, 2, islot21); clientstat(96, 2, islot22); clientstat(97, 2, islot23); clientstat(98, 2, islot24); clientstat(99, 2, recoil); clientstat(100, 2, skill_combat); clientstat(101, 2, skill_doctor); clientstat(102, 2, skill_sneak); clientstat(103, 2, skill_science); clientstat(104, 2, skill_speech); clientstat(105, 2, announcercache); clientstat(106, 2, radiation); clientstat(108, 2, safezone); clientstat(109, 2, connected); clientstat(110, 2, steadyaim); clientstat(111, 2, perk1timer); clientstat(112, 2, perk2timer); clientstat(113, 2, endinfo1); clientstat(114, 2, endinfo2); clientstat(115, 2, endinfo3); clientstat(125, 2, timer); clientstat(126, 2, popup); clientstat(127, 2, score); }; //assesses all current players void() get_difficulty = { local entity te; local float cr; local string rating; //challenge rating system // //0-24 level of difficulty //0 = barely equipped players //6 = 1 player using best arms and armor challenge_rating = 0; te = find (world, classname, "player"); while (te) { challenge_rating += GetItemThreatLevel(ToIID(te.islot1)); challenge_rating += GetItemThreatLevel(ToIID(te.islot1)); challenge_rating += GetItemThreatLevel(ToIID(te.islot3)); te = te.chain; } }; void() load_monster = { local float x, y, z; /* if (infokey(world, "total") == "one") bprint(2, "test - one player\n"); if (infokey(world, "total") == "two") bprint(2, "test - two players\n"); if (infokey(world, "total") == "three") bprint(2, "test - three players\n"); if (infokey(world, "total") == "four") bprint(2, "test - four players\n");*/ /* if (infokey(world, "total") == "one" && random()<0.40) return; if (infokey(world, "total") == "two" && random()<0.30) return; if (infokey(world, "total") == "three" && random()<0.20) return; if (infokey(world, "total") == "four" && random()<0.10) return;*/ if (self.waterlevel >= 2) return; x = random()*100; y = random()*100; if (world.map_obj == OBJ_DEADTOWN) { self.zone = 1; monster_zombie(); } else if (x <= world.map_ent1_percent) { self.zone = 1; monster_army(); } else if (y <= world.map_ent2_percent) { self.zone = 1; if (world.map_ent2 == 1) monster_dog(); if (world.map_ent2 == 2) monster_zombie(); if (world.map_ent2 == 3 || world.map_ent2 == 4) monster_army(); if (world.map_ent2 == 5 || world.map_ent2 == 6) monster_ogre(); if (world.map_ent2 == 7) monster_army(); if (world.map_ent2 == 8) monster_demon1(); if (world.map_ent2 == 9) monster_demon1(); if (world.map_ent2 == 10) monster_enforcer(); if (world.map_ent2 == 11) monster_shalrath(); if (world.map_ent2 == 12) monster_shambler(); } else { self.zone = 1; if (random()<0.10) monster_dog(); else if (random()<0.10) monster_zombie(); else if (random()<0.10) monster_army(); else if (random()<0.10) monster_ogre(); else if (random()<0.10) monster_army(); else if (random()<0.10) monster_army(); } }; //the big one //randomly generates map information //objective, monsters, etc //1=dog, 2=ghoul, 3=soldier, 4=mutant, 5=scrag, 6=knight, 7=deathclaw,8=shalrath void() map_startup = { local float r, x, t, e1, e2, e3, d; local string savemap; if (s_map_obj != 0) return; r = random(); get_difficulty(); d = challenge_rating; localcmd("serverinfo total zero\n"); if (infokey(world, "objective") == "return") world.map_obj = 0; if (infokey(world, "objective") == "hostage") world.map_obj = 1; if (infokey(world, "objective") == "supplies") world.map_obj = 2; if (infokey(world, "objective") == "shadow") world.map_obj = 3; if (infokey(world, "objective") == "deadtown") world.map_obj = 4; if (infokey(world, "objective") == "destroy") world.map_obj = 5; if (infokey(world, "objective") == "defuse") world.map_obj = 6; if (infokey(world, "objective") == "hostage") time_left = 600; if (infokey(world, "objective") == "supplies") time_left = 600; if (infokey(world, "objective") == "shadow") time_left = 600; if (infokey(world, "objective") == "deadtown") time_left = 600; if (infokey(world, "objective") == "destroy") time_left = 600; if (infokey(world, "objective") == "defuse") time_left = 600; /* if (world.map_obj == 0) savemap = "return"; if (world.map_obj == 1) savemap = "hostage"; if (world.map_obj == 2) savemap = "supplies"; if (world.map_obj == 3) savemap = "shadow"; if (world.map_obj == 4) savemap = "deadtown"; if (world.map_obj == 5) savemap = "destroy"; if (world.map_obj == 6) savemap = "defuse"; localcmd("serverinfo objective "); localcmd(savemap); localcmd("\n");*/ x = 100; t = floor(30+random()*30); x -= t; world.map_ent1_percent = t; t = floor(15+random()*15); x -= t; world.map_ent2_percent = t; world.map_ent3_percent = x; if (challenge_rating < 2) { world.map_ent1 = 2 + ceil(random()*6); world.map_ent2 = ceil(random()*8); world.map_ent3 = ceil(random()*8); } else if (challenge_rating < 4) { world.map_ent1 = 2 + ceil(random()*8); world.map_ent2 = 4 + ceil(random()*6); world.map_ent3 = 6 + ceil(random()*4); } else { world.map_ent1 = 4 + ceil(random()*8); world.map_ent2 = 6 + ceil(random()*6); world.map_ent3 = 8 + ceil(random()*4); } if (world.map_obj == OBJ_HOSTAGE) world.map_ent2 = 5; if (world.map_obj == OBJ_SUPPLY) world.map_ent2 = 5; if (world.map_obj == OBJ_SHADOW) world.map_ent1 = 5; if (world.map_obj == OBJ_DEADTOWN) { world.map_ent1 = 3; world.map_ent2 = 3; world.map_ent3 = 8; } if (world.map_obj == OBJ_DESTROY) world.map_ent2 = 5; if (world.map_obj == OBJ_DEFUSE) { world.map_ent1 = 7; world.map_ent2 = 16; world.map_ent3 = 7; } s_map_obj = world.map_obj; s_ent1 = world.map_ent1; s_ent2 = world.map_ent2; s_ent3 = world.map_ent3; s_p1 = world.map_ent1_percent; s_p2 = world.map_ent2_percent; s_p3 = world.map_ent3_percent; }; void() InitBodyQue; void() sci_think; void() hostage_pain; void() hostage_think; void() hostage_die; void(entity stuff) spawn_zombie; void() GameControl; void() RespawnPlayer; void () create_referees = { newmis = spawn (); newmis.owner = self; newmis.movetype = MOVETYPE_NONE; setsize (newmis, VEC_ORIGIN, VEC_ORIGIN); newmis.solid = SOLID_BBOX; newmis.velocity = VEC_ORIGIN; newmis.touch = SUB_Null; setorigin (newmis, '0 0 -300'); newmis.nextthink = (time + WEAPON_SHOTGUN); newmis.think = GameControl; newmis.classname = "referee"; }; void() main = { dprint ("main function\n"); // these are just commands the the prog compiler to copy these files precache_file ("progs.dat"); precache_file ("gfx.wad"); precache_file ("quake.rc"); precache_file ("default.cfg"); precache_file ("end1.bin"); precache_file2 ("end2.bin"); precache_file ("demo1.dem"); precache_file ("demo2.dem"); precache_file ("demo3.dem"); // // these are all of the lumps from the cached.ls files // precache_file ("gfx/palette.lmp"); precache_file ("gfx/colormap.lmp"); precache_file2 ("gfx/pop.lmp"); precache_file ("gfx/complete.lmp"); precache_file ("gfx/inter.lmp"); precache_file ("gfx/ranking.lmp"); precache_file ("gfx/vidmodes.lmp"); precache_file ("gfx/finale.lmp"); precache_file ("gfx/conback.lmp"); precache_file ("gfx/qplaque.lmp"); precache_file ("gfx/menudot1.lmp"); precache_file ("gfx/menudot2.lmp"); precache_file ("gfx/menudot3.lmp"); precache_file ("gfx/menudot4.lmp"); precache_file ("gfx/menudot5.lmp"); precache_file ("gfx/menudot6.lmp"); precache_file ("gfx/menuplyr.lmp"); precache_file ("gfx/bigbox.lmp"); precache_file ("gfx/dim_modm.lmp"); precache_file ("gfx/dim_drct.lmp"); precache_file ("gfx/dim_ipx.lmp"); precache_file ("gfx/dim_tcp.lmp"); precache_file ("gfx/dim_mult.lmp"); precache_file ("gfx/mainmenu.lmp"); precache_file ("gfx/box_tl.lmp"); precache_file ("gfx/box_tm.lmp"); precache_file ("gfx/box_tr.lmp"); precache_file ("gfx/box_ml.lmp"); precache_file ("gfx/box_mm.lmp"); precache_file ("gfx/box_mm2.lmp"); precache_file ("gfx/box_mr.lmp"); precache_file ("gfx/box_bl.lmp"); precache_file ("gfx/box_bm.lmp"); precache_file ("gfx/box_br.lmp"); precache_file ("gfx/sp_menu.lmp"); precache_file ("gfx/ttl_sgl.lmp"); precache_file ("gfx/ttl_main.lmp"); precache_file ("gfx/ttl_cstm.lmp"); precache_file ("gfx/mp_menu.lmp"); precache_file ("gfx/netmen1.lmp"); precache_file ("gfx/netmen2.lmp"); precache_file ("gfx/netmen3.lmp"); precache_file ("gfx/netmen4.lmp"); precache_file ("gfx/netmen5.lmp"); precache_file ("gfx/sell.lmp"); precache_file ("gfx/help0.lmp"); precache_file ("gfx/help1.lmp"); precache_file ("gfx/help2.lmp"); precache_file ("gfx/help3.lmp"); precache_file ("gfx/help4.lmp"); precache_file ("gfx/help5.lmp"); precache_file ("gfx/pause.lmp"); precache_file ("gfx/loading.lmp"); precache_file ("gfx/p_option.lmp"); precache_file ("gfx/p_load.lmp"); precache_file ("gfx/p_save.lmp"); precache_file ("gfx/p_multi.lmp"); // sounds loaded by C code precache_sound ("misc/menu1.wav"); precache_sound ("misc/menu2.wav"); precache_sound ("misc/menu3.wav"); precache_sound ("ambience/water1.wav"); precache_sound ("ambience/wind2.wav"); // shareware precache_file ("maps/start.bsp"); precache_file ("maps/e1m1.bsp"); precache_file ("maps/e1m2.bsp"); precache_file ("maps/e1m3.bsp"); precache_file ("maps/e1m4.bsp"); precache_file ("maps/e1m5.bsp"); precache_file ("maps/e1m6.bsp"); precache_file ("maps/e1m7.bsp"); precache_file ("maps/e1m8.bsp"); // registered precache_file2 ("gfx/pop.lmp"); precache_file2 ("maps/e2m1.bsp"); precache_file2 ("maps/e2m2.bsp"); precache_file2 ("maps/e2m3.bsp"); precache_file2 ("maps/e2m4.bsp"); precache_file2 ("maps/e2m5.bsp"); precache_file2 ("maps/e2m6.bsp"); precache_file2 ("maps/e2m7.bsp"); precache_file2 ("maps/e3m1.bsp"); precache_file2 ("maps/e3m2.bsp"); precache_file2 ("maps/e3m3.bsp"); precache_file2 ("maps/e3m4.bsp"); precache_file2 ("maps/e3m5.bsp"); precache_file2 ("maps/e3m6.bsp"); precache_file2 ("maps/e3m7.bsp"); precache_file2 ("maps/e4m1.bsp"); precache_file2 ("maps/e4m2.bsp"); precache_file2 ("maps/e4m3.bsp"); precache_file2 ("maps/e4m4.bsp"); precache_file2 ("maps/e4m5.bsp"); precache_file2 ("maps/e4m6.bsp"); precache_file2 ("maps/e4m7.bsp"); precache_file2 ("maps/e4m8.bsp"); precache_file2 ("maps/end.bsp"); precache_file2 ("maps/dm1.bsp"); precache_file2 ("maps/dm2.bsp"); precache_file2 ("maps/dm3.bsp"); precache_file2 ("maps/dm4.bsp"); precache_file2 ("maps/dm5.bsp"); precache_file2 ("maps/dm6.bsp"); }; entity() SelectSpawnPoint; void () RespawnPlayer = { local entity spot; bprint(2, "test\n"); spot = SelectSpawnPoint (); self.origin = spot.origin + '0 0 1'; self.angles = spot.angles; self.deadflag = DEAD_NO; self.takedamage = DAMAGE_AIM; self.movetype = MOVETYPE_WALK; self.solid = SOLID_NOT; self.materialize = 200; self.ghost = 0; self.air_finished = time + 10; self.view_ofs = '0 0 22'; self.health = self.max_health; player_run(); }; void () ResetMap = { local entity te; te = find(world, classname, "player"); while (te) { te.nextthink = time + 1; te.think = RespawnPlayer; te = find(te, classname, "player"); } }; void () GameControl = { local float pcount, pdead, hcount, hdead, bcount; local entity te, ze; if (world.model == "maps/r_bunker.bsp") return; if (world.model == "maps/r_wastes1.bsp") return; if (random()<0.05) sound (self, CHAN_AUTO, "ambience/gunfire1.wav", 0.75, ATTN_NONE); else if (random()<0.05) sound (self, CHAN_AUTO, "ambience/gunfire5.wav", 0.75, ATTN_NONE); if (coop == 1) // Players vs Monsters { local float combat; combat = 0; if (random()*100<25); get_difficulty(); te = find(world, classname, "monster"); while (te) { if (te.enemy != world && te.enemy.classname == "player" && te.health > 0) combat = 1; te = find(te, classname, "monster"); } /* if (musicplay == 0) { musicplay = 1; musictrack = 1; if (world.map_obj == OBJ_DEADTOWN) musictrack = 2; ze = find (world, classname, "player"); while (ze != world) { if (musictrack == 1) stuffcmd(ze, "play music/battle_a\n"); if (musictrack == 2) stuffcmd(ze, "play music/zombies\n"); ze = find (ze, classname, "player"); } } else if (musicplay < 120) musicplay = musicplay + 1; else if (musicplay >= 120) musicplay = 0;*/ te = find(world, classname, "player"); while (te) { if (te.health > 0 && te.team > 0) pcount = pcount + 1; if (te.health <= 0) pdead = pdead + 1; te = find(te, classname, "player"); } if (pcount == 0 && self.timer > 5) localcmd("restart\n"); if (endgame_timer > 0) { ze = find (world, classname, "monster"); while (ze != world) { remove(ze); ze = find (ze, classname, "monster"); } } if (world.map_obj == OBJ_HOSTAGE || world.map_obj == OBJ_DEADTOWN) { time_left = time_left - 1; te = find(world, classname, "rhostage"); while (te) { if (te.health > 0 && te.rescued == 0) hcount = hcount + 1; if (te.health <= 0) hdead = hdead + 1; te = find(te, classname, "rhostage"); } hostages = hcount; dead_hostage = hdead; if (pcount == 0 && pdead > 0) //everyone died { announcer = "all players were slain"; ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 1; ze = find (ze, classname, "player"); } if (endgame_timer == 5) localcmd("restart\n"); sound (world, CHAN_BODY, "misc/menu3.wav", 1, ATTN_NONE); } else if (hdead > rescue + hcount) //hostages killed { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 2; ze = find (ze, classname, "player"); } } if (endgame_timer == 5) localcmd("restart\n"); endgame_timer = endgame_timer + 1; } else if (hcount == 0 && hdead <= rescue) //hostages rescued { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 3; ze.ammo_shells = ze.ammo_shells + (5*rescue); ze.endinfo1 = rescue; ze.endinfo2 = hostages; ze.endinfo3 = dead_hostage; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } } else if (time_left <= 0 && rescue > 0) //time ran out and at least one was rescued { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 4; ze.ammo_shells = ze.ammo_shells + (5*rescue); ze.endinfo1 = rescue; ze.endinfo2 = hostages; ze.endinfo3 = dead_hostage; ze = find (ze, classname, "player"); } } if (endgame_timer >= 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } } else if (time_left <= 0 && rescue == 0) //time ran out and no rescues were made { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 5; ze = find (ze, classname, "player"); } } if (endgame_timer >= 10) localcmd("restart\n"); } if (pcount == 0 && pdead > 0) endgame_timer = endgame_timer + 1; else if (hcount == 0 && hdead <= rescue) endgame_timer = endgame_timer + 1; else if (time_left <= 0) endgame_timer = endgame_timer + 1; } else if (world.map_obj == OBJ_DEFUSE) { time_left = time_left - 1; bcount = 0; te = find(world, classname, "bomb"); while (te) { if (self.owner.picking != 2) bcount = bcount + 1; te = find(te, classname, "bomb"); } if (pcount == 0 && pdead > 0) //everyone died { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 1; ze = find (ze, classname, "player"); } if (endgame_timer == 10) localcmd("restart\n"); } else if (bcount == 0) //bombs defused { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 6; ze.ammo_shells = ze.ammo_shells + 30; stuffcmd(ze, "play music/victory\n"); ze = find (ze, classname, "player"); } } if (endgame_timer == 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } } else if (time_left <= 0) //time ran out { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 7; ze = find (ze, classname, "player"); } } if (endgame_timer == 5) localcmd("restart\n"); } if (pcount == 0 && pdead > 0) endgame_timer = endgame_timer + 1; else if (bcount == 0) endgame_timer = endgame_timer + 1; else if (self.timer >= 300) endgame_timer = endgame_timer + 1; else if (time_left <= 0) endgame_timer = endgame_timer + 1; } else if (world.map_obj == OBJ_SUPPLY) { time_left = time_left - 1; if (pcount == 0 && pdead > 0) //everyone died { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 1; ze = find (ze, classname, "player"); } if (endgame_timer == 10) localcmd("restart\n"); } else if (time_left <= 0) //time ran out { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 8; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) localcmd("restart\n"); } else if (supplies == 0) //supplies secured { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 9; ze.ammo_shells = ze.ammo_shells + 30; ze = find (ze, classname, "player"); } } if (endgame_timer >= 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } endgame_timer = endgame_timer + 1; } if (pcount == 0 && pdead > 0) endgame_timer = endgame_timer + 1; else if (supplies == 0) endgame_timer = endgame_timer + 1; else if (time_left <= 0) endgame_timer = endgame_timer + 1; } else if (world.map_obj == OBJ_SHADOW) { time_left = time_left - 1; if (pcount == 0 && pdead > 0) //everyone died { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 1; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) localcmd("restart\n"); } else if (commanders == 0) //commanders assassinated { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 10; ze.ammo_shells = ze.ammo_shells + 40; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } } else if (time_left <= 0) //time ran out { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 11; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) localcmd("restart\n"); } else if (called_in >= 5) //soldier radioed in { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 12; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) localcmd("restart\n"); } if (pcount == 0 && pdead > 0) endgame_timer = endgame_timer + 1; else if (called_in >= 5) endgame_timer = endgame_timer + 1; else if (time_left <= 0) endgame_timer = endgame_timer + 1; } else if (world.map_obj == OBJ_DESTROY) { time_left = time_left - 1; if (pcount == 0 && pdead > 0 && called_in == 0) //everyone died { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 1; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) localcmd("restart\n"); } else if (supplies == 0) //fuel tanks destroyed { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 13; ze.ammo_shells = ze.ammo_shells + 30; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } } else if (time_left <= 0) //time ran out { if (endgame_timer == 0) { ze = find (world, classname, "player"); while (ze != world) { ze.missionbrief = 3; ze.announcercache = 14; ze = find (ze, classname, "player"); } } if (endgame_timer == 10) { localcmd("serverinfo objective return\n"); changelevel ("r_bunker"); } } if (pcount == 0 && pdead > 0) endgame_timer = endgame_timer + 1; else if (supplies == 0) endgame_timer = endgame_timer + 1; else if (time_left <= 0) endgame_timer = endgame_timer + 1; } self.think = GameControl; self.nextthink = time + 1; return; } else if (coop == 0) // Players vs Players { t1alive = 0; t1dead = 0; t2alive = 0; t2dead = 0; pcount = 0; pdead = 0; bprint(2, "gc test\n"); te = find(world, classname, "player"); while (te) { if (te.health > 0) pcount = pcount + 1; if (te.health <= 0) pdead = pdead + 1; te = find(te, classname, "player"); } if (pcount == 0 || (pcount == 1 && pdead == 0)) { bprint(2, "^4** ^bTHE ROUND WILL NOT BEGIN UNTIL^b **\n"); bprint(2, "^4** ^bBOTH TEAMS HAVE ENOUGH PLAYERS^b **\n"); self.think = GameControl; self.nextthink = time + 10; return; } te = find(world, classname, "player"); while (te) { if (te.team == 1) { if (te.health > 0) t1alive = t1alive + 1; if (te.health <= 0) t1dead = t1dead + 1; } if (te.team == 2) { if (te.health > 0) t2alive = t2alive + 1; if (te.health <= 0) t2dead = t2dead + 1; } te = find(te, classname, "player"); } if (t1alive > 0 && t2alive == 0) //team 1 has won { self.think = GameControl; self.nextthink = time + 1; if (endgame_timer == 0) bprint(2, "^4** ^bTHE RANGERS HAVE WON!^b **\n"); if (endgame_timer == 1) bprint(2, "^4** ^bTHIS MAP WILL RESTART^b **\n"); if (endgame_timer == 5) ResetMap(); winningteam = 1; sound (world, CHAN_BODY, "misc/yourturn.wav", 1, ATTN_NONE); endgame_timer = endgame_timer + 1; } if (t2alive > 0 && t1alive == 0) //team 2 has won { self.think = GameControl; self.nextthink = time + 1; if (endgame_timer == 0) bprint(2, "^4** ^bTHE RAIDERS HAVE WON!^b **\n"); if (endgame_timer == 1) bprint(2, "^4** ^bTHIS MAP WILL RESTART^b **\n"); if (endgame_timer == 5) ResetMap(); winningteam = 2; sound (world, CHAN_BODY, "misc/yourturn.wav", 1, ATTN_NONE); endgame_timer = endgame_timer + 1; } if (t2alive == 0 && t1alive == 0) //team 2 has won { self.think = GameControl; self.nextthink = time + 1; if (endgame_timer == 0) bprint(2, "^4** ^bBOTH SIDES ARE DEFEATED!^b **\n"); if (endgame_timer == 1) bprint(2, "^4** ^bTHIS MAP WILL RESTART^b **\n"); if (endgame_timer == 5) ResetMap(); winningteam = 0; sound (world, CHAN_BODY, "misc/yourturn.wav", 1, ATTN_NONE); endgame_timer = endgame_timer + 1; } self.think = GameControl; self.nextthink = time + 1; return; } }; void () GameTimer = { local entity te, ze; local float switched; local float c, z; switched = 0; te = findradius(self.origin, 25000); while (c < 300 && switched == 0) { if (te.classname == "raider" && te.enemy != world && te.processed == 0 && te.active == 0 && switched == 0) { te.active = 1; te.processed = 1; bprint(2, "it is now "); bprint(2, te.netname); bprint(2, "'s turn.\n"); te.maxspeed = 300; switched = 1; ze = findradius(self.origin, 25000); z = 0; while (z < 300) { if ((ze.classname == "player" || ze.classname == "raider") && ze != te) { ze.active = 0; ze.maxspeed = 0; } z = z + 1; ze = ze.chain; } } if (te.classname == "player" && te.processed == 0 && te.active == 0 && switched == 0) { te.active = 1; te.processed = 1; bprint(2, "it is now "); bprint(2, te.netname); bprint(2, "'s turn.\n"); te.maxspeed = 300; switched = 1; ze = findradius(self.origin, 25000); z = 0; while (z < 300) { if ((ze.classname == "player" || ze.classname == "raider") && ze != te) { ze.active = 0; ze.maxspeed = 0; } z = z + 1; ze = ze.chain; } } c = c + 1; te = te.chain; } c = 0; if (switched == 0) // no entities left, turn is over { bprint(2, "round is now over.\n"); te = findradius(self.origin, 25000); while (c < 300) { if (te.classname == "player" || te.classname == "raider") { te.active = 0; te.processed = 0; te.maxspeed = 0; } c = c + 1; te = te.chain; } } self.think = GameTimer; self.nextthink = time + 1; }; void () create_timer = { newmis = spawn (); newmis.owner = self; newmis.movetype = MOVETYPE_NONE; setsize (newmis, VEC_ORIGIN, VEC_ORIGIN); newmis.solid = SOLID_BBOX; newmis.velocity = VEC_ORIGIN; newmis.touch = SUB_Null; setorigin (newmis, '0 0 -300'); newmis.nextthink = (time + 1); newmis.think = GameTimer; newmis.classname = "referee"; }; void () RecoilControl = { local entity te, ze; local float switched; local float c, z; self.think = RecoilControl; self.nextthink = time + 0.01; te = find (world, classname, "player"); while (te) { //superstims: heal at an incredible rate! if ((te.xregen > 0 && te.health < te.max_health) && random()<0.5) { te.health = te.health + 1; te.xregen = te.xregen - 1; if (te.health > te.max_health) te.health = te.max_health; } //superstims: decay if not healing if ((te.xregen > 0 && te.health >= te.max_health) && random()<0.05) { te.xregen = te.xregen - 1; if (te.health > te.max_health) te.health = te.max_health; } //steady aim: for living anatomy, and aimed shots by standing still if (te.recoil != 0) te.steadyaim = 6; else if (te.recoil == 0 && te.steadyaim > 0) te.steadyaim = te.steadyaim - 0.05; if (te.steadyaim <= 0) te.steadyaim = 0; if (te.pain_finished < time && te.missionbrief == 6) // remove pain te.missionbrief = 0; else if (te.flash < time && te.missionbrief == 5) // remove flash te.missionbrief = 0; else if (te.currentmenu == "menu_none" && te.missionbrief == 4) // remove shop te.missionbrief = 0; if (te.velocity == '0 0 0') { if (te.attack == 0) { if (te.driftx >= 1) te.driftx = te.driftx - 1; if (te.driftx <= -1) te.driftx = te.driftx + 1; if (te.drifty >= 1) te.drifty = te.drifty - 1; if (te.drifty <= -1) te.drifty = te.drifty + 1; } te.recoil = te.recoil - (0.10+(te.skill_combat*0.01)); } else { if (te.attack == 0) { if (te.driftx >= 0.5) te.driftx = te.driftx - 0.5; if (te.driftx <= -0.5) te.driftx = te.driftx + 0.5; if (te.drifty >= 0.5) te.drifty = te.drifty - 0.5; if (te.drifty <= -0.5) te.drifty = te.drifty + 0.5; } } if (te.driftx > 250) te.driftx = 250; if (te.drifty > 250) te.drifty = 250; //support fire: going prone gives a -10 recoil bonus with this perk if (getperk(1) && self.position == 2 && te.recoil > 3) { te.recoil = te.recoil - 0.20; te.driftx = te.driftx * 0.5; te.drifty = te.drifty * 0.5; } //prone: going prone gives a -5 recoil bonus if (self.position == 2) te.recoil = te.recoil - 0.05; if (te.recoil <= 0) { te.recoil = 0; te.driftx = 0; te.drifty = 0; } te = find (te, classname, "player"); } }; void () recoil_control = { newmis = spawn (); newmis.owner = self; newmis.movetype = MOVETYPE_NONE; setsize (newmis, VEC_ORIGIN, VEC_ORIGIN); newmis.solid = SOLID_BBOX; newmis.velocity = VEC_ORIGIN; newmis.touch = SUB_Null; setorigin (newmis, '0 0 -300'); newmis.nextthink = (time + 1); newmis.think = RecoilControl; newmis.classname = "recoil"; }; entity lastspawn; //======================= /*QUAKED worldspawn (0 0 0) ? Only used for the world entity. Set message to the level name. Set sounds to the cd track to play. World Types: 0: medieval 1: metal 2: base */ //======================= void() worldspawn = { local entity te; local string x; lastspawn = world; InitBodyQue (); coop = !cvar("deathmatch"); recoil_control(); create_referees(); SetupStats(); // custom map attributes cvar_set ("skill", "3"); world.location = ceil(random()*5); total_players = 0; te = find (world, classname, "player"); while (te) { if (te.classname == "player") total_players = total_players + 1; te = find(te, classname, "player"); } map_startup(); // the area based ambient sounds MUST be the first precache_sounds // player precaches W_Precache (); // get weapon precaches // sounds used from C physics code precache_sound ("demon/dland2.wav"); // landing thud precache_sound ("misc/h2ohit1.wav"); // landing splash // setup precaches allways needed precache_sound ("player/plyrjmp8.wav"); // player jump precache_sound ("player/land.wav"); // player landing precache_sound ("player/land2.wav"); // player hurt landing precache_sound ("player/drown1.wav"); // drowning pain precache_sound ("player/drown2.wav"); // drowning pain precache_sound ("player/gasp1.wav"); // gasping for air precache_sound ("player/gasp2.wav"); // taking breath precache_sound ("player/h2odeath.wav"); // drowning death precache_sound ("radio/9_secure.wav"); // drowning death precache_sound ("misc/talk.wav"); // talk precache_sound ("player/teledth1.wav"); // telefrag precache_sound ("items/inv1.wav"); precache_sound ("weapons/lock4.wav"); // ammo pick up precache_sound ("weapons/pkup.wav"); // weapon up precache_sound ("items/damage3.wav"); precache_sound ("misc/power.wav"); //lightning for boss // player gib sounds precache_sound ("player/gib.wav"); // player gib sound precache_sound ("player/udeath.wav"); // player gib sound precache_sound ("player/tornoff2.wav"); // gib sound // player pain sounds precache_sound ("player/pain1.wav"); precache_sound ("player/pain2.wav"); precache_sound ("player/pain3.wav"); precache_sound ("player/pain4.wav"); precache_sound ("player/pain5.wav"); precache_sound ("player/pain6.wav"); precache_sound ("boss1/sight1.wav"); // ax sounds precache_sound ("weapons/knifehit.wav"); // ax swoosh precache_sound ("weapons/ax1.wav"); // ax swoosh precache_sound ("player/axhit1.wav"); // ax hit meat precache_sound ("player/axhit2.wav"); // ax hit world precache_sound ("weapons/brawl-1.wav"); // ax hit world precache_sound ("weapons/brawl-2.wav"); // ax hit world precache_sound ("player/h2ojump.wav"); // player jumping into water precache_sound ("player/slimbrn2.wav"); // player enter slime precache_sound ("player/inh2o.wav"); // player enter water precache_sound ("player/inlava.wav"); // player enter lava precache_sound ("misc/outwater.wav"); // leaving water sound precache_sound ("player/lburn1.wav"); // lava burn precache_sound ("player/lburn2.wav"); // lava burn precache_sound ("misc/water1.wav"); // swimming precache_sound ("misc/water2.wav"); // swimming // Invulnerability sounds precache_sound ("items/protect.wav"); precache_sound ("items/protect2.wav"); precache_sound ("items/protect3.wav"); precache_model ("progs/melee.mdl"); precache_model ("progs/guy.mdl"); precache_model ("progs/lay.mdl"); precache_model ("progs/prone.mdl"); precache_model ("progs/eyes.mdl"); precache_model ("progs/h_player.mdl"); precache_model ("progs/gib1.mdl"); precache_model ("progs/gib2.mdl"); precache_model ("progs/gib3.mdl"); precache_model ("progs/s_bubble.spr"); // drowning bubbles precache_model ("progs/s_explod.spr"); // sprite explosion precache_model ("progs/ammobox.mdl"); precache_model ("progs/ammobox2.mdl"); precache_model ("progs/stop.spr"); precache_model ("progs/healing.spr"); precache_model ("progs/heart.spr"); precache_model ("progs/v_disruptor.mdl"); precache_model ("progs/v_span.mdl"); precache_model ("progs/v_nail.mdl"); precache_model ("progs/v_rock.mdl"); precache_model ("progs/v_nail2.mdl"); precache_model ("progs/v_rock2.mdl"); precache_model ("progs/v_fist.mdl"); precache_model ("progs/v_knife.mdl"); precache_model ("progs/v_spear.mdl"); precache_model ("progs/v_usp.mdl"); precache_model ("progs/v_needler.mdl"); precache_model ("progs/v_10mmpistol.mdl"); precache_model ("progs/v_fnfal.mdl"); precache_model ("progs/v_smg.mdl"); precache_model ("progs/v_rangem.mdl"); precache_model ("progs/v_pipe.mdl"); precache_model ("progs/v_bozar.mdl"); precache_model ("progs/v_lsw.mdl"); precache_model ("progs/v_double.mdl"); precache_model ("progs/v_combat.mdl"); precache_model ("progs/v_mp9.mdl"); precache_model ("progs/v_g11.mdl"); precache_model ("progs/v_ak47.mdl"); precache_model ("progs/v_acr.mdl"); precache_model ("progs/v_deagle.mdl"); precache_model ("progs/v_blaster.mdl"); precache_model ("progs/v_srifle.mdl"); precache_model ("progs/v_night.mdl"); precache_model ("progs/v_handgren.mdl"); precache_model ("progs/v_jackhammer.mdl"); precache_model ("progs/v_rocket.mdl"); precache_model ("progs/v_pipe.mdl"); precache_model ("progs/v_gauss.mdl"); precache_model ("progs/v_carbine.mdl"); precache_model ("progs/v_plasma.mdl"); precache_model ("progs/v_scope1.mdl"); precache_model ("progs/v_scope2.mdl"); precache_model ("progs/v_chain.mdl"); precache_model ("progs/g_spear.mdl"); precache_model ("progs/g_knife.mdl"); precache_model ("progs/g_axe.mdl"); precache_model ("progs/g_wrench.mdl"); precache_model ("progs/junk1.mdl"); precache_model ("progs/junk2.mdl"); precache_model ("progs/hosfem.mdl"); precache_model ("progs/hosguy.mdl"); precache_model ("progs/handgren.mdl"); precache_model ("progs/plasma.mdl"); precache_model ("progs/ray.mdl"); precache_model ("progs/sneak.mdl"); precache_model ("progs/dead.mdl"); precache_model ("progs/hbar.spr"); precache_model ("progs/blast.mdl"); precache_model ("progs/ray.mdl"); precache_model ("progs/radio.spr"); precache_model ("progs/w_spear.mdl"); precache_model ("progs/w_span.mdl"); precache_model ("progs/w_knife.mdl"); precache_model ("progs/w_pipe.mdl"); precache_model ("progs/w_double.mdl"); precache_model ("progs/w_combat.mdl"); precache_model ("progs/w_axe.mdl"); precache_model ("progs/w_10mmpistol.mdl"); precache_model ("progs/w_usp.mdl"); precache_model ("progs/w_deagle.mdl"); precache_model ("progs/w_alien.mdl"); precache_model ("progs/w_mp9.mdl"); precache_model ("progs/w_jackhammer.mdl"); precache_model ("progs/w_rangem.mdl"); precache_model ("progs/w_g11.mdl"); precache_model ("progs/w_acr.mdl"); precache_model ("progs/w_ak47.mdl"); precache_model ("progs/w_night.mdl"); precache_model ("progs/w_srifle.mdl"); precache_model ("progs/w_gauss.mdl"); precache_model ("progs/w_carbine.mdl"); precache_model ("progs/w_laser.mdl"); precache_model ("progs/w_rocket.mdl"); precache_model ("progs/w_plasma.mdl"); precache_model ("progs/w_chain.mdl"); precache_model ("progs/w_bozar.mdl"); precache_model ("progs/money.mdl"); precache_model ("progs/grenade2.mdl"); precache_model ("maps/b_bh10.bsp"); precache_model ("maps/b_bh25.bsp"); precache_model ("maps/b_bh100.bsp"); precache_model ("progs/s_light.spr"); precache_sound ("misc/basekey.wav"); precache_sound ("misc/thud.wav"); precache_sound ("misc/exp1.wav"); precache_sound ("misc/exp2.wav"); precache_sound ("misc/exp3.wav"); precache_sound ("effects/openlock.wav"); precache_sound ("effects/miss.wav"); precache_sound ("effects/radio1.wav"); precache_sound ("effects/radio2.wav"); precache_sound ("effects/radio3.wav"); precache_sound ("effects/radio4.wav"); precache_sound ("effects/blip1.wav"); precache_sound ("effects/blip2.wav"); precache_sound ("effects/axe_hit1.wav"); precache_sound ("effects/axe_hit2.wav"); precache_sound ("effects/axe_swing.wav"); precache_sound ("effects/metal-1.wav"); precache_sound ("effects/metal-2.wav"); precache_sound ("effects/spear_hit1.wav"); precache_sound ("effects/spear_hit2.wav"); precache_sound ("misc/item1.wav"); precache_sound ("misc/item2.wav"); precache_sound ("items/r_item1.wav"); precache_sound ("items/r_item2.wav"); precache_sound ("items/locked.wav"); precache_sound ("items/lockpick1.wav"); precache_sound ("items/lockpick2.wav"); precache_sound ("radio/medic.wav"); precache_sound ("radio/grenade.wav"); precache_sound ("ambience/gunfire1.wav"); precache_sound ("ambience/gunfire5.wav"); precache_sound ("misc/hosdie1.wav"); precache_sound ("misc/hosdie2.wav"); precache_sound ("misc/rescued.wav"); precache_sound ("misc/beep1.wav"); precache_sound ("misc/beep2.wav"); precache_sound ("misc/r_tele4.wav"); precache_sound ("buttons/switch02.wav"); precache_sound ("buttons/switch04.wav"); precache_sound ("misc/secret.wav"); precache_sound ("player/levelup.wav"); precache_sound ("items/damage.wav"); precache_sound ("items/damage2.wav"); precache_sound ("player/prone1.wav"); precache_sound ("player/prone2.wav"); precache_sound ("player/prone3.wav"); precache_sound ("player/prone4.wav"); precache_sound ("player/gib1.wav"); precache_sound ("player/step1.wav"); precache_sound ("player/step2.wav"); precache_sound ("player/step3.wav"); precache_sound ("player/step4.wav"); precache_sound ("dog/dattack1.wav"); precache_sound ("dog/ddeath.wav"); precache_sound ("dog/dpain1.wav"); precache_sound ("dog/dsight.wav"); precache_sound ("dog/idle.wav"); precache_sound ("ogre/ak47.wav"); precache_sound ("weapons/10mmpistol.wav"); precache_sound ("weapons/ak112.wav"); precache_sound ("weapons/amr.wav"); precache_sound ("misc/bounce_1.wav"); precache_sound ("misc/bounce_2.wav"); precache_sound ("misc/bounce_3.wav"); precache_sound ("weapons/click.wav"); precache_sound ("weapons/deagle.wav"); precache_sound ("weapons/dks-1.wav"); precache_sound ("weapons/g11.wav"); precache_sound ("weapons/gauss.wav"); precache_sound ("weapons/gpull.wav"); precache_sound ("weapons/citykiller.wav"); precache_sound ("weapons/laser.wav"); precache_sound ("weapons/blaster.wav"); precache_sound ("weapons/moonlight-1.wav"); precache_sound ("weapons/moonlight-2.wav"); precache_sound ("weapons/needler.wav"); precache_sound ("weapons/bozar.wav"); precache_sound ("weapons/lsw.wav"); precache_sound ("weapons/amr.wav"); precache_sound ("weapons/greasegun.wav"); precache_sound ("weapons/mp9.wav"); precache_sound ("weapons/rangem.wav"); precache_sound ("weapons/tink1.wav"); precache_sound ("weapons/reload.wav"); precache_sound ("player/agdie1.wav"); precache_sound ("player/agdie2.wav"); precache_sound ("player/agdie3.wav"); precache_sound ("player/agdie4.wav"); precache_sound ("player/agdie5.wav"); precache_sound ("player/berserk.wav"); precache_sound ("player/headshot.wav"); precache_sound ("player/hit1.wav"); precache_sound ("contact/armor1.wav"); precache_sound ("contact/armor2.wav"); precache_sound ("contact/armor3.wav"); precache_sound ("player/paina.wav"); precache_sound ("player/painb.wav"); precache_sound ("player/yourturn.wav"); precache_model ("progs/bolt.mdl"); // for lightning gun precache_model ("progs/bolt2.mdl"); // for lightning gun precache_model ("progs/bolt3.mdl"); // for boss shock precache_model ("progs/lavaball.mdl"); // for testing precache_model ("progs/bomb.mdl"); precache_model ("progs/missile.mdl"); precache_model ("progs/grenade.mdl"); precache_model ("progs/spike.mdl"); precache_model ("progs/s_spike.mdl"); precache_model ("progs/backpack.mdl"); precache_model ("progs/zom_gib.mdl"); precache_model ("progs/v_light.mdl"); precache_model ("maps/crate.bsp"); // // Setup light animation tables. 'a' is total darkness, 'z' is maxbright. // // 0 normal lightstyle(0, "m"); // 1 FLICKER (first variety) lightstyle(1, "mmnmmommommnonmmonqnmmo"); // 2 SLOW STRONG PULSE lightstyle(2, "abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba"); // 3 CANDLE (first variety) lightstyle(3, "mmmmmaaaaammmmmaaaaaabcdefgabcdefg"); // 4 FAST STROBE lightstyle(4, "mamamamamama"); // 5 GENTLE PULSE 1 lightstyle(5,"jklmnopqrstuvwxyzyxwvutsrqponmlkj"); // 6 FLICKER (second variety) lightstyle(6, "nmonqnmomnmomomno"); // 7 CANDLE (second variety) lightstyle(7, "mmmaaaabcdefgmmmmaaaammmaamm"); // 8 CANDLE (third variety) lightstyle(8, "mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa"); // 9 SLOW STROBE (fourth variety) lightstyle(9, "aaaaaaaazzzzzzzz"); // 10 FLUORESCENT FLICKER lightstyle(10, "mmamammmmammamamaaamammma"); // 11 SLOW PULSE NOT FADE TO BLACK lightstyle(11, "abcdefghijklmnopqrrqponmlkjihgfedcba"); // styles 32-62 are assigned by the light program for switchable lights // 63 testing lightstyle(63, "a"); if (infokey(world, "coop") == "0") coop = 0; if (infokey(world, "coop") == "1") coop = 1; }; void() StartFrame = { timelimit = cvar("timelimit") * 60; fraglimit = cvar("fraglimit"); teamplay = cvar("teamplay"); deathmatch = !coop; framecount = framecount + 1; }; /* ============================================================================== BODY QUE ============================================================================== */ entity bodyque_head; void() bodyque = { // just here so spawn functions don't complain after the world // creates bodyques }; void() InitBodyQue = { bodyque_head = spawn(); bodyque_head.classname = "bodyque"; bodyque_head.owner = spawn(); bodyque_head.owner.classname = "bodyque"; bodyque_head.owner.owner = spawn(); bodyque_head.owner.owner.classname = "bodyque"; bodyque_head.owner.owner.owner = spawn(); bodyque_head.owner.owner.owner.classname = "bodyque"; bodyque_head.owner.owner.owner.owner = bodyque_head; }; // make a body que entry for the given ent so the ent can be // respawned elsewhere void(entity ent) CopyToBodyQue = { bodyque_head.angles = ent.angles; bodyque_head.model = ent.model; bodyque_head.modelindex = ent.modelindex; bodyque_head.frame = ent.frame; bodyque_head.colormap = ent.colormap; bodyque_head.movetype = ent.movetype; bodyque_head.velocity = ent.velocity; bodyque_head.flags = 0; setorigin (bodyque_head, ent.origin); setsize (bodyque_head, ent.mins, ent.maxs); bodyque_head = bodyque_head.owner; };