From d788f223b5271abe7ffa6fd9fca344f3cbc5a1e6 Mon Sep 17 00:00:00 2001 From: Magnus Date: Wed, 2 Dec 2009 02:45:16 +0000 Subject: [PATCH] git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3481 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- quakec/fallout2/client.qc | 94 ++++++++++++++++++------ quakec/fallout2/cmds.qc | 8 ++- quakec/fallout2/combat.qc | 8 +-- quakec/fallout2/csqc/invent.qc | 35 +++++---- quakec/fallout2/csqc/main.qc | 2 +- quakec/fallout2/defs.qc | 3 + quakec/fallout2/misc.qc | 128 ++++++++++++++++++++++++++++++++- quakec/fallout2/weapons.qc | 41 ++--------- quakec/fallout2/world.qc | 6 ++ quakec/fallout2/zombie.qc | 33 +++++++++ 10 files changed, 277 insertions(+), 81 deletions(-) diff --git a/quakec/fallout2/client.qc b/quakec/fallout2/client.qc index 1e53807e8..89b697851 100644 --- a/quakec/fallout2/client.qc +++ b/quakec/fallout2/client.qc @@ -347,7 +347,7 @@ void() execute_changelevel = localcmd(strcat("map ", self.map, "\n")); - + localcmd(strcat("serverinfo direction ", self.direction, "\n")); }; @@ -387,7 +387,25 @@ void() changelevel_touch = return; } else + { + + if (infokey(world, "worldtime") == "1") + localcmd("serverinfo worldtime 2\n"); + else if (infokey(world, "worldtime") == "2") + localcmd("serverinfo worldtime 3\n"); + else if (infokey(world, "worldtime") == "3") + localcmd("serverinfo worldtime 3\n"); + else if (infokey(world, "worldtime") == "4") + localcmd("serverinfo worldtime 5\n"); + else if (infokey(world, "worldtime") == "5") + localcmd("serverinfo worldtime 6\n"); + else if (infokey(world, "worldtime") == "6") + localcmd("serverinfo worldtime 1\n"); + localcmd(strcat("map ", self.map, "\n")); + localcmd(strcat("serverinfo direction ", self.direction, "\n")); + return; + } if (world.map_obj == OBJ_HOSTAGE && hostages > 0) return; @@ -425,6 +443,20 @@ void() changelevel_touch = // in the middle of C movement code, so set a think time to do it self.think = execute_changelevel; self.nextthink = time + 10; + + + if (infokey(world, "worldtime") == "1") + localcmd("serverinfo worldtime 2\n"); + else if (infokey(world, "worldtime") == "2") + localcmd("serverinfo worldtime 3\n"); + else if (infokey(world, "worldtime") == "3") + localcmd("serverinfo worldtime 3\n"); + else if (infokey(world, "worldtime") == "4") + localcmd("serverinfo worldtime 5\n"); + else if (infokey(world, "worldtime") == "5") + localcmd("serverinfo worldtime 6\n"); + else if (infokey(world, "worldtime") == "6") + localcmd("serverinfo worldtime 1\n"); }; /*QUAKED trigger_changelevel (0.5 0.5 0.5) ? NO_INTERMISSION @@ -514,8 +546,19 @@ entity() SelectSpawnPoint = if (coop == 0) ent1 = "info_player_deathmatch"; else - ent1 = "info_player_coop"; + { + if (infokey(world, "direction") == "north") + ent1 = "info_player_coop_south"; + else if (infokey(world, "direction") == "west") + ent1 = "info_player_coop_east"; + else if (infokey(world, "direction") == "east") + ent1 = "info_player_coop_west"; + else if (infokey(world, "direction") == "south") + ent1 = "info_player_coop_north"; + else + ent1 = "info_player_coop"; + } if (ent1 == "spawn3") { if (self.team == 1) @@ -651,6 +694,7 @@ void() PutClientInServer = self.islot22 = 0; self.islot23 = 0; self.islot24 = 0; + self.score = 200; } self.attack_finished = time; @@ -780,6 +824,13 @@ void() PutClientInServer = stuffcmd(self, "play music/vault\n"); else if (world.map_obj == OBJ_DEADTOWN) stuffcmd(self, "play music/afterglow\n"); + + if (infokey(world, "worldtime") == "1" || infokey(world, "worldtime") == "2") + stuffcmd(self, "r_skybox dawn\n"); + else if (infokey(world, "worldtime") == "3" || infokey(world, "worldtime") == "4") + stuffcmd(self, "r_skybox dusk\n"); + else if (infokey(world, "worldtime") == "5" || infokey(world, "worldtime") == "6") + stuffcmd(self, "r_skybox night\n"); }; @@ -846,6 +897,21 @@ void() info_player_coop = { }; +void() info_player_coop_north = +{ +}; + +void() info_player_coop_west = +{ +}; + +void() info_player_coop_east = +{ +}; + +void() info_player_coop_south = +{ +}; void() spawn1 = { @@ -1596,26 +1662,14 @@ void() PlayerPreThink = + self.tnl = self.skill_combat + self.skill_doctor + self.skill_sneak + self.skill_science + self.skill_speech; + self.tnl = 10 + 10*self.tnl; - if (self.score < 200) + if (self.score > self.tnl) { - if ((self.skill_combat + self.skill_doctor + self.skill_sneak + self.skill_science + self.skill_speech) <= 8) - { - self.score = 200; - - sound (self, CHAN_BODY, "player/levelup.wav", 1, ATTN_NORM); - sprint(self, 2, "you have gained a level!\npress 'p' to assign a skill point.\n"); - } - } - else if (self.score > 200) - { - if ((self.skill_combat + self.skill_doctor + self.skill_sneak + self.skill_science + self.skill_speech) > 8) - { - self.score = 200; - - sound (self, CHAN_BODY, "player/levelup.wav", 1, ATTN_NORM); - sprint(self, 2, "you have gained a level!\npress 'p' to assign a skill point.\n"); - } + self.score = self.tnl; + sound (self, CHAN_BODY, "player/levelup.wav", 1, ATTN_NORM); + sprint(self, 2, "you have gained a level!\npress 'p' to assign a skill point.\n"); } //perk1timer and perk2timer are "cooldowns" for each perk diff --git a/quakec/fallout2/cmds.qc b/quakec/fallout2/cmds.qc index ac397b20e..d13eae748 100644 --- a/quakec/fallout2/cmds.qc +++ b/quakec/fallout2/cmds.qc @@ -233,16 +233,16 @@ void(string arg1) Cmd_InvDrop = void(string arg1) Cmd_GainLevel = { - if (self.score < 200) + if (self.score < self.tnl) { sprint(self, 2, "not enough experience points.\n"); sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM); return; } - if (self.score >= 200) + if (self.score >= self.tnl) { sound (self, CHAN_BODY, "buttons/switch02.wav", 1, ATTN_NORM); - self.score = self.score - 200; + self.score = self.score - self.tnl; } if (arg1 == "combat") @@ -255,6 +255,8 @@ void(string arg1) Cmd_GainLevel = self.skill_science = self.skill_science + 1; else if (arg1 == "speech") self.skill_speech = self.skill_speech + 1; + + self.max_health = 80 + (self.skill_combat*4) + (self.skill_doctor*2) + (self.skill_sneak*2) + (self.skill_speech*2) + (self.skill_science); }; void(string arg1, string arg2) Cmd_GainPerk = diff --git a/quakec/fallout2/combat.qc b/quakec/fallout2/combat.qc index a5771e4a7..90b811ecd 100644 --- a/quakec/fallout2/combat.qc +++ b/quakec/fallout2/combat.qc @@ -116,11 +116,11 @@ void(entity targ, entity attacker) ArmorNoise = r = random(); if (r <= 0.33) - sound (targ, CHAN_WEAPON, "contact/armor1.wav", 1, ATTN_NORM); + sound (targ, CHAN_BODY, "contact/armor1.wav", 1, ATTN_NONE); else if (r <= 0.67) - sound (targ, CHAN_WEAPON, "contact/armor2.wav", 1, ATTN_NORM); + sound (targ, CHAN_BODY, "contact/armor2.wav", 1, ATTN_NONE); else - sound (targ, CHAN_WEAPON, "contact/armor3.wav", 1, ATTN_NORM); + sound (targ, CHAN_BODY, "contact/armor3.wav", 1, ATTN_NONE); }; @@ -326,7 +326,7 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage = if (targ.classname == "monster") attacker.score = attacker.score + 1; - sound (targ, CHAN_VOICE, "player/headshot.wav", 1, ATTN_NORM); + sound (targ, CHAN_VOICE, "player/headshot.wav", 1, ATTN_NONE); makevectors (targ.v_angle); diff --git a/quakec/fallout2/csqc/invent.qc b/quakec/fallout2/csqc/invent.qc index 556765d3d..49d73e680 100644 --- a/quakec/fallout2/csqc/invent.qc +++ b/quakec/fallout2/csqc/invent.qc @@ -526,9 +526,9 @@ void() Trader_Draw = if (showcontextmenu && show_trader) { - drawfill(contextpos - '8 8 0'*(scrwidth/640), '48 48 0'*(scrwidth/640), '0 0 0', 1.0); + drawfill(contextpos - '8 8 0'*(scrwidth/640), '64 64 0'*(scrwidth/640), '0 0 0', 1.0); op = floor((mousepos_y - contextpos_y)/8*(scrwidth/640)); - drawstring(contextpos + '0 8 0'*(scrwidth/640), "buy?", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=1)*'0 0 1'*(scrwidth/640), + drawstring(contextpos + '0 8 0'*(scrwidth/640), "buy?", '12 12 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op>=6||op<0)*'0 0 1'*(scrwidth/640), 1); } @@ -788,7 +788,7 @@ void() GainPerk_Draw = void() Pipboy_Draw = { - float width,height,lvl,bar, top, s; + float width,height,lvl,bar, top, s, tnl; string skill; vector w; @@ -915,7 +915,8 @@ void() Pipboy_Draw = bar = 0; s = getstati(127); - top = ceil(200 * (s/200)); + tnl = getstati(116); + top = ceil(200 * (s/tnl)); if (top > 200) top = 200; @@ -929,7 +930,7 @@ void() Pipboy_Draw = drawpic('0 0 0'+('1 0 0'*(scrwidth*0.48)) +('0 1 0'*(scrheight*0.685)) + ('0 1 0'*(scrheight/640)), "gui/pipboy/graph/blue.jpg", '1 16 0'*(scrheight/640)+'1 0 0'*(scrwidth/640)*bar, '1 1 1', 1); - drawstring('0 0 0'+('1 0 0'*(scrwidth*0.6)) +('0 1 0'*(scrheight*0.69)), strcat(ftos(s),"/", ftos(top), "\n"), '8 8 0'*(scrwidth/640), '1 1 1', 1); + drawstring('0 0 0'+('1 0 0'*(scrwidth*0.6)) +('0 1 0'*(scrheight*0.69)), strcat(ftos(s),"/", ftos(tnl), "\n"), '8 8 0'*(scrwidth/640), '1 1 1', 1); if (mousepos_x > scrwidth*0.95) @@ -1015,13 +1016,19 @@ void() Invent_Draw = if (showcontextmenu && show_inventory) { - drawfill(contextpos - '8 8 0', '32 48 0'+'32 16 0'*(scrwidth/640), '0 0 0', 1); + drawfill(contextpos - '8 8 0', '64 128 0'+'32 16 0'*(scrwidth/640), '0 0 0', 1); - op = floor((mousepos_y - contextpos_y)/8); - drawstring(contextpos + (0 * ('0 8 0'*(scrwidth/640))), "use", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=0)*'0 0 1'*(scrwidth/640), 1); - drawstring(contextpos + (2 * ('0 8 0'*(scrwidth/640))), "drop", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=2)*'0 0 1'*(scrwidth/640), 1); + + itname = GetItemName(ToIID(it)); + drawstring(contextpos + (0 * ('0 32 0'*(scrwidth/640))), itname, '8 8 0'*(scrwidth/640), '1 1 1', 1); + + + op = floor((mousepos_y - contextpos_y)/(32*(scrwidth/640))); + drawstring(contextpos + (1 * ('0 32 0'*(scrwidth/640))), "------", '8 8 0'*(scrwidth/640), '1 1 1'*(scrwidth/640), 1); + drawstring(contextpos + (2 * ('0 32 0'*(scrwidth/640))), "[use]", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=2)*'0 0 1'*(scrwidth/640), 1); + drawstring(contextpos + (3 * ('0 32 0'*(scrwidth/640))), "[drop]", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=3)*'0 0 1'*(scrwidth/640), 1); if (getstati(108) > 0) - drawstring(contextpos + (4 * ('0 8 0'*(scrwidth/640))), "sell", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=4)*'0 0 1'*(scrwidth/640), 1); + drawstring(contextpos + (4 * ('0 32 0'*(scrwidth/640))), "[sell]", '8 8 0'*(scrwidth/640), '1 1 0'*(scrwidth/640) + (op!=4)*'0 0 1'*(scrwidth/640), 1); } else if (showmixmenu && show_inventory) @@ -1229,11 +1236,11 @@ float(float eventtype, float param1, float param2) CSQC_InputEvent = { if (showcontextmenu && show_inventory) { - op = floor((mousepos_y - contextpos_y)/(8*(scrwidth/640))); + op = floor((mousepos_y - contextpos_y)/(32*(scrwidth/640))); - if (op == 0) + if (op == 2) localcmd(strcat("cmd invuse ", ftos(slotnum), "\n")); - else if ((op == 2)) + else if ((op == 3)) localcmd(strcat("cmd invdrop ", ftos(slotnum), "\n")); else if (op == 4) localcmd(strcat("cmd invsell ", ftos(slotnum), "\n")); @@ -1254,7 +1261,7 @@ float(float eventtype, float param1, float param2) CSQC_InputEvent = { op = floor((mousepos_y - contextpos_y)/8); - if (op == 1) + if (op >= 0 && op <=6) localcmd(strcat("cmd invbuy ", ftos(slotnum), "\n")); showcontextmenu = false; diff --git a/quakec/fallout2/csqc/main.qc b/quakec/fallout2/csqc/main.qc index f7db11595..1fdd2211e 100644 --- a/quakec/fallout2/csqc/main.qc +++ b/quakec/fallout2/csqc/main.qc @@ -88,7 +88,7 @@ void() Position_Draw = //drawstring('0 0 0'+('1 0 0'*(scrwidth*0.20)) +('0 1 0'*(scrheight*0.78)), strcat("%", sn), '12 12 12'*(scrheight/640), '1 1 1', 1); } - if (lvl >= 200) + if (lvl >= getstati(116)) { drawpic('0 0 0'+('1 0 0'*(scrwidth*0.70)) +('0 1 0'*(scrheight*0.80)), "gui/hud/level.png", '0 0 0'+'132 22 0'*(scrwidth/640), '1 1 1'); } diff --git a/quakec/fallout2/defs.qc b/quakec/fallout2/defs.qc index 1ca7b2517..a779e595b 100644 --- a/quakec/fallout2/defs.qc +++ b/quakec/fallout2/defs.qc @@ -535,6 +535,8 @@ float s_p2; float s_p3; float challenge_rating; + +.string direction; //================================================ // @@ -630,6 +632,7 @@ float intermission_running; .float ghost; .float ghostcnt; +.float tnl; .float dtime; .float active; .float zone; diff --git a/quakec/fallout2/misc.qc b/quakec/fallout2/misc.qc index 6c3e9afbc..52a267944 100644 --- a/quakec/fallout2/misc.qc +++ b/quakec/fallout2/misc.qc @@ -908,6 +908,62 @@ void() misc_noisemaker = self.think = noise_think; }; +void() random_monster = +{ + load_monster(); +}; + +void () npc_doctor = +{ + precache_model ("progs/hosguy.mdl"); + precache_sound ("misc/hosdie1.wav"); + precache_sound ("misc/hosdie2.wav"); + hos_stand1 (); + self.movetype = MOVETYPE_STEP; + self.velocity = VEC_ORIGIN; + self.touch = SUB_Null; + self.takedamage = DAMAGE_NO; + setsize (self, VEC_HULL_MIN, VEC_HULL_MAX); + setmodel (self, "progs/hosguy.mdl"); + self.health = 70; + self.think = hostage_think; + self.nextthink = (time + START_OFF); + self.team = START_OFF; + self.solid = SOLID_BBOX; + self.th_die = hostage_die; + self.th_pain = hostage_pain; + self.rescued = MULTICAST_ALL; + self.netname = "doctor"; + + self.classname = "merchant"; + self.think = shop_face; + self.nextthink = time + 0.5; + + self.xslot1 = SlotVal(IID_WP_KNIFE, 1); + self.xslot2 = SlotVal(IID_WP_NEEDLER, 1); + self.xslot3 = SlotVal(IID_ARM_LEATHER, 1); + self.xslot16 = SlotVal(IID_CHEM_STIMPACK, 1); + self.xslot17 = SlotVal(IID_CHEM_MEDICALBAG, 25); + self.xslot18 = SlotVal(IID_CHEM_SUPERSTIM, 1); + self.xslot19 = SlotVal(IID_CHEM_ADRENALINE, 1); + self.xslot20 = SlotVal(IID_CHEM_RADX, 1); +}; + + +void () hurt_citizen = +{ + precache_model ("progs/hoshurt.mdl"); + self.velocity = VEC_ORIGIN; + self.touch = SUB_Null; + self.classname = "citizen"; + self.takedamage = DAMAGE_NO; + setsize (self, VEC_HULL_MIN, VEC_HULL_MAX); + setmodel (self, "progs/hoshurt.mdl"); + self.solid = SOLID_BBOX; + self.netname = "injured citizen"; + self.movetype = MOVETYPE_STEP; +}; + void() explore_think = @@ -971,10 +1027,49 @@ void() sound_vault = }; +void() env_gun1 = +{ + precache_model ("progs/w_rangem.mdl"); + setmodel (self, "progs/w_rangem.mdl"); + self.touch = SUB_Null; + self.solid = SOLID_BBOX; + setsize (self, '-8 -8 -1', '8 8 1'); + self.takedamage = DAMAGE_NO; + self.classname = "env_gun1"; + self.movetype = MOVETYPE_BOUNCE; + self.netname = "rangemaster rifle"; +}; + +void() env_gun2 = +{ + precache_model ("progs/w_10mmpistol.mdl"); + setmodel (self, "progs/w_10mmpistol.mdl"); + self.touch = SUB_Null; + self.solid = SOLID_BBOX; + setsize (self, '-8 -8 -1', '8 8 1'); + self.takedamage = DAMAGE_NO; + self.classname = "env_gun2"; + self.movetype = MOVETYPE_BOUNCE; + self.netname = "10mm pistol"; +}; + +void() env_armor = +{ + precache_model ("progs/w_armor.mdl"); + setmodel (self, "progs/w_armor.mdl"); + self.solid = SOLID_BBOX; + setsize (self, '-16 -16 -16', '16 16 16'); + self.takedamage = DAMAGE_NO; + self.classname = "env_gun2"; + self.movetype = MOVETYPE_BOUNCE; + self.classname = "armor"; +}; + void() env_grass1 = { local entity grass; + precache_model ("progs/grass1.spr"); setmodel (self, "progs/grass1.spr"); self.touch = SUB_Null; self.solid = SOLID_NOT; @@ -1000,7 +1095,7 @@ void() env_grass1 = void() env_grass2 = { local entity grass; - + precache_model ("progs/grass2.spr"); setmodel (self, "progs/grass2.spr"); self.touch = SUB_Null; self.solid = SOLID_NOT; @@ -1025,7 +1120,7 @@ void() env_grass2 = void() env_car = { - + precache_model ("progs/car.mdl"); setmodel (self, "progs/car.mdl"); self.touch = SUB_Null; self.solid = SOLID_BBOX; @@ -1037,6 +1132,15 @@ void() env_car = }; +void() func_transparent = +{ + self.solid = SOLID_BSP; + self.movetype = MOVETYPE_PUSH; + setorigin (self, self.origin); + self.classname = "glass"; + self.netname = "unbreakable glass"; +}; + void() brotherhood_merchant = { @@ -1198,6 +1302,26 @@ void() brotherhood_guard = self.netname = "guard"; }; +void() npc_guard = +{ + precache_model ("progs/enforcer.mdl"); + precache_sound ("enforcer/sight1.wav"); + precache_sound ("enforcer/sight2.wav"); + precache_sound ("enforcer/sight3.wav"); + precache_sound ("enforcer/sight4.wav"); + + setorigin(self, self.origin + '0 0 64'); + self.movetype = MOVETYPE_BOUNCE; + self.velocity_z = -200; + + setmodel (self, "progs/enforcer.mdl"); + self.touch = SUB_Null; + self.solid = SOLID_SLIDEBOX; + setsize (self, '-16 -16 -24', '16 16 32'); + self.takedamage = DAMAGE_NO; + self.netname = "guard"; +}; + void() brotherhood_doctor = { setorigin(self, self.origin + '0 0 64'); diff --git a/quakec/fallout2/weapons.qc b/quakec/fallout2/weapons.qc index d0f37437e..9003cea50 100644 --- a/quakec/fallout2/weapons.qc +++ b/quakec/fallout2/weapons.qc @@ -1819,41 +1819,8 @@ void (float slotno) ReloadWeapon = r = 3; - if (wid == IID_WP_ROCKETLAUNCHER || wid == IID_WP_WINCHESTER || wid == IID_WP_MOSSBERG) - { - sound (self, CHAN_VOICE, "weapons/shell.wav", TRUE, ATTN_NORM); - r = 1; - if (self.current_slot == slotno) - self.currentammo = ToStatus(ItemInSlot(self, slotno)); - self.attack_finished = time + r; - self.rtime = time + r; - return; - } - else if (wid == IID_WP_PIPERIFLE_R || wid == IID_WP_PIPERIFLE_S_R || wid == IID_WP_PIPERIFLE_SCOPE_R || wid == IID_WP_PIPERIFLE_SCOPE_S_R) - { - sound (self, CHAN_VOICE, "weapons/shell.wav", TRUE, ATTN_NORM); - r = 0.5; - if (self.current_slot == slotno) - self.currentammo = ToStatus(ItemInSlot(self, slotno)); - self.attack_finished = time + r; - self.rtime = time + r; - - return; - } - else if (wid >= IID_WP_PIPERIFLE && wid <= IID_WP_PIPERIFLE_S_R) - { - sound (self, CHAN_VOICE, "weapons/shell.wav", TRUE, ATTN_NORM); - r = 1; - if (self.current_slot == slotno) - self.currentammo = ToStatus(ItemInSlot(self, slotno)); - self.attack_finished = time + r; - self.rtime = time + r; - - return; - } - else - sound (self, CHAN_WEAPON, "weapons/reload.wav", TRUE, ATTN_NORM); + sound (self, CHAN_WEAPON, "weapons/reload.wav", TRUE, ATTN_NORM); sprint(self, 2, "reloading...\n"); @@ -2067,9 +2034,9 @@ void() W_Attack = else if (weap == IID_WP_WINCHESTER) W_FireShotgun (2, 5, 7, 50, 1500, 0, "weapons/shotgun1.wav"); else if (weap == IID_WP_MOSSBERG) - W_FireShotgun (2, 5, 6, 20, 2000, 1, "weapons/citykiller.wav"); + W_FireShotgun (2, 5, 6, 20, 2000, 1, "weapons/shotgun1.wav"); else if (weap == IID_WP_JACKHAMMER) - W_FireShotgun (1, 5, 6, 30, 1750, 2, "weapons/citykiller.wav"); + W_FireShotgun (1, 5, 6, 30, 1750, 2, "weapons/shotgun1.wav"); else if (weap == IID_WP_GREASEGUN) FireSMG(12, 0, "weapons/greasegun.wav", 1500, 0.08); else if (weap == IID_WP_MP9) @@ -2522,7 +2489,7 @@ void() ImpulseCommands = UseRadX(); if (self.impulse == 255) - self.ammo_shells = 200; + self.islot10 = SlotVal(IID_MONEY, 300); self.impulse = 0; }; diff --git a/quakec/fallout2/world.qc b/quakec/fallout2/world.qc index ef63cc506..ab2333068 100644 --- a/quakec/fallout2/world.qc +++ b/quakec/fallout2/world.qc @@ -112,6 +112,7 @@ void() SetupStats = clientstat(113, 2, endinfo1); clientstat(114, 2, endinfo2); clientstat(115, 2, endinfo3); + clientstat(116, 2, tnl); clientstat(125, 2, timer); clientstat(126, 2, popup); clientstat(127, 2, score); @@ -261,6 +262,11 @@ void() map_startup = localcmd("serverinfo total zero\n"); + + + localcmd("serverinfo worldtime 3\n"); + + if (infokey(world, "objective") == "return") world.map_obj = 0; if (infokey(world, "objective") == "hostage") diff --git a/quakec/fallout2/zombie.qc b/quakec/fallout2/zombie.qc index 5f7922cdf..c08d3e480 100644 --- a/quakec/fallout2/zombie.qc +++ b/quakec/fallout2/zombie.qc @@ -1031,3 +1031,36 @@ void() monster_zombie = if (random()<0.25 && world.map_obj == 4) spawn_civilian(self.origin); }; + + + + +void() zombie_generator = +{ + local entity zombie, lair; + local entity te, ze; + local float stop; + local vector spot; + local float zomc, pcount; + + + + + + spot = self.origin; + lair = spawn (); + setorigin(lair, spot); + lair.origin = spot; + lair.solid = SOLID_NOT; + lair.health = 1000; + lair.max_health = 1000; + setmodel (lair, ""); + lair.movetype = MOVETYPE_STEP; + setsize (lair, '-8 -8 -24', '8 8 24'); + lair.netname = "lair"; + lair.classname = "lair"; + lair.think = spawn_ghoul_copy; + lair.nextthink = time + 1*random(); + + +}; \ No newline at end of file