mirror of
https://git.code.sf.net/p/quake/prozac-qfcc
synced 2024-11-10 07:11:51 +00:00
8c2d5fdd12
should get frags for blowing people up with others' dispensers/mines/expbody, airfisting rockets, etc. 2) Redid Give_Frags_Out 3) Changed many uses of pointcontents and ugly hacks to use hullpointcontents and checkmove, now a lot cleaner and less buggy 4) You can grapple builds again. This caused really odd bugs. 5) You can now damage your own buildings again (gasp). Any time a tesla or sentry is damaged it turns on its attacker, friendly or otherwise. This is both a counter-TK and counter-spy mechanism. 6) Teslas are now entirely inside their bounding box 7) Now check every frame for players startsolid and for outside of the map cube. 8) #define WALL_HURT to make it hurt when you hit a wall 9) Used some cool ideas (aka laws of physics) to make the airfist a little less annoying 10) You now only get 1 mirv per slot without bandolier. Demoman and hwguy gain bandolier. demoman loses his extra mirv but gains an extra grenade and pair of detpacks. Hwguy gets extra grenade. 11) New and improved EMP grenade now does damage based on range. no longer blows up shells. Doesn't directly damage sentries anymore, but does significant damage to dispensers. EMP someone who's setting a det and it blows up in their face. 12) Players now do radius damage from getting EMPed (again) 13) EMPs now go through walls (again) 14) EMP number lowered by one (3 without, 4 with bandolier) and cost raised by $100 15) You can only have 2 frag grens, 3 with bandolier now. 16) Hover boots will now eat cells if they get low on charge. In addition, the silly bug where their charge wasn't restored when you die is fixed now. 17) EMPing a detpack now sets its timer to anywhere between 1 and 121 seconds from current time, with a logarithmic probability of it being lower. (random() * random() * 120 + 1). Also, probably more time the closer it is to the EMP. 18) Judo can now be blocked by people with close combat, knife or judo. Blocked judo means that the attacker loses 3 seconds of attack. 19) Judo missing now makes them unable to fire. 20) Shortened judo range (back to normal if w/ close combat) 21) Attempted to rework the railgun. Seems to be okay now. Probably still a lot of bugs in here, but since this is the devel version I thought I would commit all my changes so people could start testing it. I'll commit fixes as soon as I find the bugs.
623 lines
18 KiB
C++
623 lines
18 KiB
C++
//================================================================//
|
|
//- CustomTF Worldspawn and related stuff OfteN //
|
|
//- 30-01-2001----------------------------------------------------//
|
|
|
|
#include "defs.qh"
|
|
|
|
|
|
//-- OFTEN --//
|
|
void() Wiz_Precache;
|
|
void() Field_Precache;
|
|
void () UpdateInfos;
|
|
//==============//
|
|
|
|
void() InitBodyQue;
|
|
|
|
|
|
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");
|
|
};
|
|
|
|
void () edictticker_think =
|
|
{
|
|
localcmd ("edictcount\n");
|
|
self.nextthink = time + self.num_mines;
|
|
};
|
|
|
|
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 string st; //WK
|
|
local entity ticker;
|
|
|
|
lastspawn = world = self;
|
|
InitBodyQue ();
|
|
|
|
last_team_no = 5;
|
|
|
|
st = infokey(NIL, "mapcfg");
|
|
if (!(st == "0" || st == "off" || st == ""))
|
|
{
|
|
if (st == "1" || st == "on")
|
|
st = "mapcfg";
|
|
|
|
localcmd("exec mapcfg.cfg\n"); // generic stuff
|
|
|
|
localcmd("exec \"");
|
|
localcmd(st);
|
|
localcmd("/");
|
|
localcmd(infokey(NIL, "map"));
|
|
localcmd(".cfg\"\n");
|
|
}
|
|
|
|
// custom map attributes
|
|
st = infokey(NIL, "*gamedir");
|
|
if (st != "fortress")
|
|
{
|
|
if (st == "")
|
|
localcmd("sv_gamedir fortress\n");
|
|
else
|
|
objerror("QW TF must be run with a gamedir of \"fortress\", not \""
|
|
+ st + "\".\n");
|
|
}
|
|
|
|
//- OfteN globals -//
|
|
UpdateInfos();
|
|
debug_target=NIL;
|
|
already_chosen_map = FALSE;
|
|
triggered_cycle = FALSE;
|
|
////////////////////
|
|
|
|
if (stof(infokey (NIL, "edictticker")))
|
|
{
|
|
ticker = spawn();
|
|
ticker.classname = "edictcount";
|
|
ticker.nextthink = time + 5;
|
|
ticker.think = edictticker_think;
|
|
ticker.num_mines = stof(infokey (NIL, "edictticker")); // I hate overloading, but I don't want to use a full thing just for this one stupid little hack.
|
|
}
|
|
|
|
// We set up Chris' Teamplay Plus Mode here cos that's fun
|
|
/*st = infokey(NIL, "chris");
|
|
if (st == "on")
|
|
chris = TRUE;
|
|
else
|
|
chris = stof(st);
|
|
|
|
st = infokey(NIL, "roundtime");
|
|
roundtime = stof(st);
|
|
if (!roundtime)
|
|
roundtime = 300;
|
|
|
|
roundstowin = 5;*/
|
|
|
|
////////////////////////////////
|
|
|
|
team_with_flag = 0; //KK initial global sets
|
|
|
|
// We load the masks from the map, overriding it with infokeys if
|
|
// they exist
|
|
st = infokey (NIL, "friends1_mask");
|
|
friends1_mask = stof (st ? st : self.noise1);
|
|
st = infokey (NIL, "friends2_mask");
|
|
friends2_mask = stof (st ? st : self.noise2);
|
|
st = infokey (NIL, "friends3_mask");
|
|
friends3_mask = stof (st ? st : self.noise3);
|
|
st = infokey (NIL, "friends4_mask");
|
|
friends4_mask = stof (st ? st : self.noise4);
|
|
|
|
|
|
// 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 ("items/itembk2.wav"); // item respawn sound
|
|
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 ("misc/talk.wav"); // talk
|
|
precache_sound ("player/teledth1.wav"); // telefrag
|
|
precache_sound ("misc/r_tele1.wav"); // teleport sounds
|
|
precache_sound ("misc/r_tele2.wav");
|
|
precache_sound ("misc/r_tele3.wav");
|
|
precache_sound ("misc/r_tele4.wav");
|
|
precache_sound ("misc/r_tele5.wav");
|
|
precache_sound ("weapons/lock4.wav"); // ammo pick up
|
|
precache_sound ("weapons/pkup.wav"); // weapon up
|
|
precache_sound ("items/armor1.wav"); // armor up
|
|
precache_sound ("weapons/lhit.wav"); //lightning
|
|
precache_sound ("weapons/lstart.wav"); //lightning start
|
|
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");
|
|
|
|
// player death sounds
|
|
precache_sound ("player/death1.wav");
|
|
precache_sound ("player/death2.wav");
|
|
precache_sound ("player/death3.wav");
|
|
precache_sound ("player/death4.wav");
|
|
precache_sound ("player/death5.wav");
|
|
|
|
// ax sounds
|
|
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 ("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
|
|
|
|
precache_model ("progs/player.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/s_light.spr");
|
|
|
|
precache_model ("progs/v_axe.mdl");
|
|
precache_model ("progs/v_shot.mdl");
|
|
precache_model ("progs/v_nail.mdl");
|
|
precache_model ("progs/v_rock.mdl");
|
|
precache_model ("progs/v_shot2.mdl");
|
|
precache_model ("progs/v_nail2.mdl");
|
|
precache_model ("progs/v_rock2.mdl");
|
|
precache_model ("progs/grenade.mdl");
|
|
|
|
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/missile.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_model2 ("progs/laser.mdl");
|
|
precache_sound2 ("enforcer/enfire.wav");
|
|
precache_sound2 ("enforcer/enfstop.wav");
|
|
precache_sound2 ("hknight/attack1.wav");
|
|
|
|
//- OfN - Flare exp sound
|
|
precache_sound2 ("items/flare1.wav");
|
|
|
|
// Team Fortress Weapon MDLs
|
|
precache_model2("progs/sight.spr");
|
|
// precache_model2("progs/cross1.mdl");
|
|
precache_model2("progs/v_medi.mdl");
|
|
precache_model2("progs/v_bio.mdl");
|
|
precache_model2("progs/hgren2.mdl");
|
|
precache_model2("progs/biggren.mdl");
|
|
|
|
//precache_model2("progs/lndmine.mdl");
|
|
precache_model2("progs/flare.mdl");
|
|
|
|
precache_model2("progs/v_srifle.mdl");
|
|
precache_model2("progs/v_asscan.mdl");
|
|
precache_model2("progs/detpack.mdl");
|
|
precache_model2("progs/ammobox.mdl");
|
|
precache_model2("progs/v_knife.mdl"); // Spy's Knife
|
|
precache_model2("progs/v_knife2.mdl"); // Spy's Knife with Blood on it
|
|
precache_model2("progs/v_span.mdl"); // Engineer's Spanner
|
|
precache_model2("progs/e_spike1.mdl"); // Engineer's RailGun
|
|
precache_model2("progs/e_spike2.mdl"); // Engineer's RailGun
|
|
precache_model2("progs/v_rail.mdl"); // Engineer's RailGun
|
|
|
|
//precache_model2("progs/turrgun.mdl"); // Sentry Gun
|
|
|
|
//////////////////////////////////////////////////////
|
|
precache_model2("progs/trrgn2.mdl");
|
|
precache_sound2 ("weapons/sntr666.wav");
|
|
precache_sound2 ("weapons/trr2lost.wav");
|
|
|
|
//precache_model2("progs/turrbase.mdl"); // Sentry Gun
|
|
precache_model2("progs/trrbs2.mdl"); // Sentry Gun
|
|
|
|
//air-fist models and sounds--------//
|
|
precache_model2("progs/v_airgun.mdl");
|
|
precache_sound2("weapons/agfail.wav");
|
|
precache_sound2("weapons/agwfail.wav");
|
|
precache_sound2("weapons/agwater.wav");
|
|
precache_sound2("weapons/agfire.wav");
|
|
precache_model2("progs/s_ablast.spr");
|
|
//----------------------------------//
|
|
|
|
//laser cannon models and sounds---//
|
|
precache_model2("progs/v_laserg.mdl");
|
|
precache_model2("progs/lasrspik.mdl");
|
|
precache_sound2("weapons/laserric.wav");
|
|
precache_sound2("weapons/laserg.wav");
|
|
//-----------------------------------//
|
|
|
|
//field gen precaches-------------//
|
|
Field_Precache();
|
|
//---------------------------------//
|
|
|
|
//- OfN -
|
|
precache_model2("progs/flarefly.mdl");
|
|
precache_model2("progs/tesgib4.mdl");
|
|
precache_model ("progs/caltrop.mdl"); // A big, bad, caltrop
|
|
|
|
precache_sound2("weapons/gren_emp.wav");
|
|
|
|
precache_model2("progs/t2gib1.mdl"); // Sentry Gun Gib
|
|
precache_model2("progs/t2gib2.mdl"); // Sentry Gun Gib
|
|
precache_model2("progs/t2gib3.mdl"); // Sentry Gun Gib
|
|
|
|
//- extra gib
|
|
precache_model2("progs/t2gib4.mdl"); // Sentry Gun Gib
|
|
///////////////////////////////////////
|
|
|
|
#ifdef no_new_dispenser
|
|
precache_model2("progs/disp.mdl"); // Tmp dispenser mdl
|
|
precache_model2("progs/dgib1.mdl"); // Dispenser Gib
|
|
precache_model2("progs/dgib2.mdl"); // Dispenser Gib
|
|
precache_model2("progs/dgib3.mdl"); // Dispenser Gib
|
|
#else
|
|
precache_model2("progs/disp2.mdl"); // Tmp dispenser mdl
|
|
precache_model2("progs/d2gib1.mdl"); // Dispenser Gib
|
|
precache_model2("progs/d2gib2.mdl"); // Dispenser Gib
|
|
precache_model2("progs/d2gib3.mdl"); // Dispenser Gib
|
|
#endif
|
|
|
|
precache_model2("progs/grenade2.mdl"); // New grenade
|
|
precache_model2("progs/v_grap.mdl"); // Grapple gun
|
|
precache_model2("progs/hook.mdl"); // Grapple hook
|
|
if (headless==1)
|
|
precache_model2("progs/headless.mdl"); // Player with no head
|
|
|
|
precache_model2("progs/sencer.mdl");
|
|
|
|
precache_model2("progs/grunty.mdl");
|
|
|
|
//- OfN
|
|
Wiz_Precache();
|
|
precache_sound2("weapons/detpack.wav");
|
|
|
|
precache_sound2("speech/saveme1.wav"); // Saveme Sound
|
|
precache_sound2("speech/saveme2.wav"); // Saveme Sound
|
|
|
|
//- OfN sounds for flares and holo
|
|
precache_sound2("effects/bodyhit1.wav");
|
|
precache_sound2("effects/bodyhit2.wav");
|
|
|
|
//- OfN - Aura sounds
|
|
precache_sound2("auras/aura1.wav");
|
|
precache_sound2("auras/aura2.wav");
|
|
precache_sound2("auras/aura3.wav");
|
|
precache_sound2("auras/aura4.wav");
|
|
|
|
//precache_sound2("weapons/pinpull.wav");
|
|
//precache_sound2("weapons/throw.wav");
|
|
|
|
#ifdef SPEECH
|
|
precache_sound2("speech/scout.wav");
|
|
precache_sound2("speech/sniper.wav");
|
|
precache_sound2("speech/soldier.wav");
|
|
precache_sound2("speech/demoman.wav");
|
|
precache_sound2("speech/medic.wav");
|
|
precache_sound2("speech/hvyweap.wav");
|
|
precache_sound2("speech/pyro.wav");
|
|
precache_sound2("speech/spy.wav");
|
|
precache_sound2("speech/engineer.wav");
|
|
|
|
precache_sound2("speech/demo_dp.wav");
|
|
#endif
|
|
|
|
|
|
//
|
|
// 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");
|
|
};
|
|
|
|
void() StartFrame =
|
|
{
|
|
teamplay = cvar("teamplay");
|
|
timelimit = cvar("timelimit") * 60;
|
|
fraglimit = cvar("fraglimit");
|
|
deathmatch = cvar("deathmatch");
|
|
no_pogo_stick = cvar ("no_pogo_stick");
|
|
framecount = framecount + 1;
|
|
|
|
local string timeleft;
|
|
timeleft = timelimit ? sprintf ("%.0f", (timelimit - time) / 60) : "";
|
|
if (timeleft != infokey (NIL, "timeleft"))
|
|
localcmd ("serverinfo timeleft " + timeleft + "\n");
|
|
};
|
|
|
|
/*
|
|
==============================================================================
|
|
|
|
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.skin = ent.skin;
|
|
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;
|
|
};
|
|
|
|
|
|
integer(entity e) entpointcontents = {
|
|
return hullpointcontents(world, e.mins, e.maxs, e.origin);
|
|
};
|
|
|