git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3481 fc73d0e0-1445-4013-8a0c-d673dee63da5

This commit is contained in:
Magnus 2009-12-02 02:45:16 +00:00
parent 6401a36d2e
commit d788f223b5
10 changed files with 277 additions and 81 deletions

View file

@ -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

View file

@ -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 =

View file

@ -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);

View file

@ -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;

View file

@ -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');
}

View file

@ -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;

View file

@ -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');

View file

@ -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;
};

View file

@ -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")

View file

@ -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();
};