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

This commit is contained in:
Magnus 2009-11-24 07:31:19 +00:00
parent 7c6eaec766
commit 5f7d753be1
15 changed files with 577 additions and 359 deletions

View file

@ -269,8 +269,7 @@ void() ChangeYaw =
void() HuntTarget = void() HuntTarget =
{ {
if (self.enemy == self.friend)
return;
self.goalentity = self.enemy; self.goalentity = self.enemy;
self.think = self.th_run; self.think = self.th_run;
@ -371,7 +370,11 @@ float() FindTarget =
self.charmed = self.charmed - 1; self.charmed = self.charmed - 1;
return FALSE; return FALSE;
} }
if (self.charmed <= 0)
{
self.friend = world;
return FALSE;
}
if (sight_entity_time >= time - 0.1 && !(self.spawnflags & 3) ) if (sight_entity_time >= time - 0.1 && !(self.spawnflags & 3) )
{ {
@ -534,6 +537,7 @@ void(float dist) ai_walk =
return; return;
} }
movedist = dist; movedist = dist;
// check for noticing a player // check for noticing a player
@ -648,6 +652,12 @@ float() DogCheckAttack;
float() CheckAnyAttack = float() CheckAnyAttack =
{ {
if (self.charmed >= 1 && self.enemy == self.friend)
return;
if (!enemy_vis) if (!enemy_vis)
return FALSE; return FALSE;
if (self.classname == "monster_army") if (self.classname == "monster_army")
@ -678,8 +688,13 @@ void() ai_run_melee =
self.ideal_yaw = enemy_yaw; self.ideal_yaw = enemy_yaw;
ChangeYaw (); ChangeYaw ();
if (FacingIdeal()) if (FacingIdeal())
{ {
if (self.enemy == self.friend)
return;
self.th_melee (); self.th_melee ();
self.attack_state = AS_STRAIGHT; self.attack_state = AS_STRAIGHT;
} }
@ -695,10 +710,15 @@ Turn in place until within an angle to launch a missile attack
*/ */
void() ai_run_missile = void() ai_run_missile =
{ {
self.ideal_yaw = enemy_yaw; self.ideal_yaw = enemy_yaw;
ChangeYaw (); ChangeYaw ();
if (FacingIdeal()) if (FacingIdeal())
{ {
if (self.enemy == self.friend)
return;
self.th_missile (); self.th_missile ();
self.attack_state = AS_STRAIGHT; self.attack_state = AS_STRAIGHT;
} }
@ -756,6 +776,19 @@ void(float dist) ai_run =
return; return;
} }
if (self.charmed >= 1)
{
if (self.enemy.classname != "monster" || (self.enemy.classname == "monster" && self.enemy.health <= 0))
{
self.enemy = self.friend;
self.movetarget = self.friend;
self.goalentity = self.friend;
self.pausetime = time + 0.1;
}
}
movedist = dist; movedist = dist;
// see if the enemy is dead // see if the enemy is dead
if (self.enemy.health <= 0) if (self.enemy.health <= 0)
@ -791,10 +824,12 @@ void(float dist) ai_run =
return; return;
} }
enemy_infront = infront(self.enemy); enemy_infront = infront(self.enemy);
enemy_range = range(self.enemy); enemy_range = range(self.enemy);
enemy_yaw = vectoyaw(self.enemy.origin - self.origin); enemy_yaw = vectoyaw(self.enemy.origin - self.origin);
if (self.attack_state == AS_MISSILE) if (self.attack_state == AS_MISSILE)
{ {
//dprint ("ai_run_missile\n"); //dprint ("ai_run_missile\n");

View file

@ -48,11 +48,11 @@ void() SetChangeParms =
{ {
self.supertime = 0; self.supertime = 0;
sprint(self, 2, "you are now back to your normal self.\n"); sprint(self, 2, "you are now back to your normal self.\n");
self.skill_combat = self.skill_combat - 20; self.skill_combat = self.skill_combat - 10;
self.skill_doctor = self.skill_doctor - 20; self.skill_doctor = self.skill_doctor - 10;
self.skill_sneak = self.skill_sneak - 20; self.skill_sneak = self.skill_sneak - 10;
self.skill_science = self.skill_science - 20; self.skill_science = self.skill_science - 10;
self.skill_speech = self.skill_speech - 20; self.skill_speech = self.skill_speech - 10;
} }
self.items = self.items - (self.items & self.items = self.items - (self.items &
@ -66,7 +66,7 @@ void() SetChangeParms =
parm16 = self.skill_speech; parm16 = self.skill_speech;
parm8 = self.ammo_shells; parm8 = self.score;
parm9 = self.perk1; parm9 = self.perk1;
parm10 = self.perk2; parm10 = self.perk2;
parm17 = self.islot1; parm17 = self.islot1;
@ -148,7 +148,7 @@ void() DecodeLevelParms =
self.skill_science = parm14; self.skill_science = parm14;
self.skill_speech = parm16; self.skill_speech = parm16;
self.ammo_shells = parm8; self.score = parm8;
self.perk1 = parm9; self.perk1 = parm9;
self.perk2 = parm10; self.perk2 = parm10;
@ -625,12 +625,12 @@ void() PutClientInServer =
if (self.islot1 == 0 && self.islot2 == 0 && self.islot3 == 0 && self.islot4 == 0 && self.islot5 == 0 && self.islot6 == 0 && self.islot7 == 0 && self.islot8 == 0 && self.islot9 == 0 && self.islot10 == 0 && self.islot11 == 0 && self.islot12 == 0) if (self.islot1 == 0 && self.islot2 == 0 && self.islot3 == 0 && self.islot4 == 0 && self.islot5 == 0 && self.islot6 == 0 && self.islot7 == 0 && self.islot8 == 0 && self.islot9 == 0 && self.islot10 == 0 && self.islot11 == 0 && self.islot12 == 0)
{ {
self.islot1 = SlotVal(IID_WP_GLOCK, 15); self.islot1 = SlotVal(IID_WP_KNIFE, 1);
self.islot2 = SlotVal(IID_WP_KNIFE, 1); self.islot2 = 0;
self.islot3 = SlotVal(IID_ARM_LEATHER, 1); self.islot3 = SlotVal(IID_ARM_LEATHER, 1);
self.islot5 = SlotVal(IID_CHEM_STIMPACK, 5); self.islot5 = SlotVal(IID_CHEM_STIMPACK, 5);
self.islot7 = SlotVal(IID_AM_10MM, 70); self.islot7 = 0;
self.islot8 = 0; self.islot8 = SlotVal(IID_MONEY, 100);
self.islot9 = 0; self.islot9 = 0;
self.islot10 = 0; self.islot10 = 0;
self.islot11 = SlotVal(IID_CHEM_MEDICALBAG, 25); self.islot11 = SlotVal(IID_CHEM_MEDICALBAG, 25);
@ -664,7 +664,7 @@ void() PutClientInServer =
self.fixangle = TRUE; // turn this way immediately self.fixangle = TRUE; // turn this way immediately
self.max_health = 80 + (self.skill_combat*4) + (self.skill_doctor*2) + (self.skill_sneak*2) + (self.skill_speech); self.max_health = 100 + (self.skill_combat*4) + (self.skill_doctor*2) + (self.skill_sneak*2) + (self.skill_speech*2) + (self.skill_science);
self.equipment_slot = 0; self.equipment_slot = 0;
@ -773,9 +773,9 @@ void() PutClientInServer =
if (world.model == "maps/r_bunker.bsp") if (world.model == "maps/r_bunker.bsp")
stuffcmd(self, "play music/afterglow\n"); stuffcmd(self, "play music/vault\n");
else if (world.map_obj == OBJ_DEADTOWN) else if (world.map_obj == OBJ_DEADTOWN)
stuffcmd(self, "play music/necropolis\n"); stuffcmd(self, "play music/afterglow\n");
}; };
@ -1635,7 +1635,7 @@ void() PlayerPreThink =
self.perk2timer = self.perk2timer - 1; self.perk2timer = self.perk2timer - 1;
//speech skill provides faster perk regeneration //speech skill provides faster perk regeneration
if (random()*40 < self.skill_speech) if (random()*30 < self.skill_speech)
{ {
if (self.perk1timer > 0) if (self.perk1timer > 0)
self.perk1timer = self.perk1timer - 1; self.perk1timer = self.perk1timer - 1;
@ -1643,6 +1643,9 @@ void() PlayerPreThink =
self.perk2timer = self.perk2timer - 1; self.perk2timer = self.perk2timer - 1;
} }
self.shadowtime = time_left; self.shadowtime = time_left;
if (self.cycle1 < time) if (self.cycle1 < time)
@ -1681,11 +1684,11 @@ void() PlayerPreThink =
self.supertime = 0; self.supertime = 0;
sound (self, CHAN_BODY, "items/damage2.wav", 1, ATTN_NORM); sound (self, CHAN_BODY, "items/damage2.wav", 1, ATTN_NORM);
sprint(self, 2, "you are now back to your normal self.\n"); sprint(self, 2, "you are now back to your normal self.\n");
self.skill_combat = self.skill_combat - 20; self.skill_combat = self.skill_combat - 10;
self.skill_doctor = self.skill_doctor - 20; self.skill_doctor = self.skill_doctor - 10;
self.skill_sneak = self.skill_sneak - 20; self.skill_sneak = self.skill_sneak - 10;
self.skill_science = self.skill_science - 20; self.skill_science = self.skill_science - 10;
self.skill_speech = self.skill_speech - 20; self.skill_speech = self.skill_speech - 10;
} }
local float lgrip, rgrip; local float lgrip, rgrip;
@ -1709,7 +1712,7 @@ void() PlayerPreThink =
self.cycle1 = time + 0.5; self.cycle1 = time + 0.5;
} }
/*
if (walkmove(0, 0) && self.solid != SOLID_SLIDEBOX) if (walkmove(0, 0) && self.solid != SOLID_SLIDEBOX)
{ {
self.materialize = 0; self.materialize = 0;
@ -1719,7 +1722,7 @@ void() PlayerPreThink =
{ {
self.materialize = 5; self.materialize = 5;
self.solid = SOLID_NOT; self.solid = SOLID_NOT;
} }*/
if (self.materialize > 0) if (self.materialize > 0)
{ {
@ -1752,6 +1755,13 @@ void() PlayerPreThink =
if (self.cycle2 < time) if (self.cycle2 < time)
{ {
if (self.blurtime > 0 && self.blurtime <= 1)
stuffcmd(self, "gl_motionblur 0\n");
else if (self.blurtime > 0)
{
stuffcmd(self, "gl_motionblur 0.9\n");
self.blurtime -= 1;
}
if (self.ragetime > 0) if (self.ragetime > 0)
self.ragetime -= 1; self.ragetime -= 1;
@ -1784,9 +1794,9 @@ void() PlayerPreThink =
if (self.musictimer == 0) if (self.musictimer == 0)
{ {
if (world.model == "maps/r_bunker.bsp") if (world.model == "maps/r_bunker.bsp")
stuffcmd(self, "play music/afterglow\n"); stuffcmd(self, "play music/vault\n");
else if (world.map_obj == OBJ_DEADTOWN) else if (world.map_obj == OBJ_DEADTOWN)
stuffcmd(self, "play music/necropolis\n"); stuffcmd(self, "play music/afterglow\n");
self.musictimer = 1; self.musictimer = 1;
} }

View file

@ -282,6 +282,13 @@ void(string arg1, string arg2) Cmd_GainPerk =
self.perk1 = 10; self.perk1 = 10;
if (arg1 == "11") if (arg1 == "11")
self.perk1 = 11; self.perk1 = 11;
if (arg1 == "12")
self.perk1 = 12;
if (arg1 == "14")
self.perk1 = 14;
if (arg1 == "15")
self.perk1 = 15;
} }
if (arg2 == "2") if (arg2 == "2")
{ {
@ -307,13 +314,19 @@ void(string arg1, string arg2) Cmd_GainPerk =
self.perk2 = 10; self.perk2 = 10;
if (arg1 == "11") if (arg1 == "11")
self.perk2 = 11; self.perk2 = 11;
if (arg1 == "12")
self.perk2 = 12;
if (arg1 == "14")
self.perk2 = 14;
if (arg1 == "15")
self.perk2 = 15;
} }
}; };
void(string arg1) Cmd_InvBuy = void(string arg1) Cmd_InvBuy =
{ {
local float x,y, iid, amount, money, item; local float x,y, iid, amount, money, item, m, n, p;
x = FindEmptySlot(self); x = FindEmptySlot(self);
@ -378,14 +391,28 @@ void(string arg1) Cmd_InvBuy =
sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM); sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM);
return; return;
} }
if (self.ammo_shells < money)
m = SlotOfItem(self, IID_MONEY);
p = ItemInSlot(self, m);
n = ToStatus(p);
if (m == 0)
{ {
sprint(self, 2, "not enough money.\n"); sprint(self, 2, "not enough money.\n");
sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM); sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM);
return; return;
} }
if (n < money)
{
sprint(self, 2, "not enough money\n");
sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM);
return;
}
else else
self.ammo_shells = self.ammo_shells - money; {
SetItemSlot(self, m, 0);
TryGiveStackable(self, IID_MONEY, n-money);
}
if (NotStackable(iid)) if (NotStackable(iid))
SetItemSlot(self, x, item); SetItemSlot(self, x, item);
@ -396,7 +423,8 @@ void(string arg1) Cmd_InvBuy =
{ {
sprint(self, 2, "full inventory.\n"); sprint(self, 2, "full inventory.\n");
sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM); sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM);
self.ammo_shells = self.ammo_shells + money; m = SlotOfItem(self, IID_MONEY);
SetItemSlot(self, m, n);
return; return;
} }
sound (self, CHAN_BODY, "misc/item2.wav", 1, ATTN_NORM); sound (self, CHAN_BODY, "misc/item2.wav", 1, ATTN_NORM);
@ -431,14 +459,23 @@ void(string arg1) Cmd_InvSell =
self.missionbrief = 0; self.missionbrief = 0;
SetItemSlot(self, slotno, 0);
x = GetBaseValue(iid); x = GetBaseValue(iid);
x = ceil(x * (1 + (self.skill_speech/30))); x = ceil(x * (1 + (self.skill_speech/30)));
x = ceil(x / 5); x = ceil(x / 5);
y = ftos(x); y = ftos(x);
z = GetItemName(iid); z = GetItemName(iid);
self.ammo_shells += x; if (!TryGiveStackable(self, IID_MONEY, x))
{
sprint(self, 2, "not enough room.\n");
return;
}
SetItemSlot(self, slotno, 0);
sprint(self, 2, "you sell "); sprint(self, 2, "you sell ");
sprint(self, 2, z); sprint(self, 2, z);
sprint(self, 2, " for $"); sprint(self, 2, " for $");

View file

@ -148,6 +148,15 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage =
damage = floor(damage); damage = floor(damage);
targ.health = floor(targ.health); targ.health = floor(targ.health);
if (total_players == 1)
damage = damage * 0.70;
else if (total_players == 2)
damage = damage * 0.80;
else if (total_players == 3)
damage = damage * 0.90;
else
damage = damage * 1.00;
if (challenge_rating >= 20 && attacker.classname == "monster") if (challenge_rating >= 20 && attacker.classname == "monster")
damage = damage * 1.30; damage = damage * 1.30;
@ -222,6 +231,19 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage =
if (targ.classname == "monster" && attacker.classname == "player" && attacker.rage == 777) if (targ.classname == "monster" && attacker.classname == "player" && attacker.rage == 777)
attacker.score = attacker.score + 1; attacker.score = attacker.score + 1;
//charmed monsters will protect their master
if (targ.classname == "player" && targ.friend.classname == "monster")
{
if (targ.friend.enemy.classname != "monster")
targ.friend.enemy = attacker;
}
//charmed monsters will assist their master
if (attacker.classname == "player" && attacker.friend.classname == "monster")
{
if (attacker.friend.enemy.classname != "monster")
attacker.friend.enemy = targ;
}
//dodge chance //dodge chance
if (targ.position == 0 && random()<0.05) if (targ.position == 0 && random()<0.05)
@ -242,12 +264,12 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage =
//stay low: if taking cover, 20% miss chance (others get 10% bonus) //stay low: if taking cover, 33% miss chance (others get 10% bonus)
if (targ.rage == 777) if (targ.rage == 777)
{ {
if (targ.perk1 == 4 || targ.perk2 == 4) if (targ.perk1 == 4 || targ.perk2 == 4)
{ {
if (random()<0.20) if (random()<(0.33+(self.skill_speech*0.01)))
{ {
sound (targ, CHAN_BODY, "effects/miss.wav", 1, ATTN_NORM); sound (targ, CHAN_BODY, "effects/miss.wav", 1, ATTN_NORM);
return; return;
@ -268,18 +290,11 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage =
{ {
if (attacker.recoil > 5) if (attacker.recoil > 5)
{ {
damage = damage * (1 + (attacker.recoil * 0.03)); damage = damage * (1 + (attacker.recoil * (0.03+(self.skill_speech*0.002))));
} }
} }
//stay low
if (targ.perk1 == 4 || targ.perk2 == 4)
{
if (targ.position == 2)
damage = damage * 0.75;
}
//sneak attack: if you attack a creature who isn't fighting you, bonus damage //sneak attack: if you attack a creature who isn't fighting you, bonus damage
if (attacker.skill_sneak > 0 && attacker.sneak > 0) if (attacker.skill_sneak > 0 && attacker.sneak > 0)
@ -305,7 +320,7 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage =
attacker.critical = 0; attacker.critical = 0;
} }
if (attacker.critical == 3 && targ.classname == "car")//attacker scored a headshot/critical if (attacker.critical == 3)//attacker scored a headshot/critical
{ {
if (attacker.critical == 3) if (attacker.critical == 3)
{ {

View file

@ -469,7 +469,7 @@ void(vector pos, string image) Crosshair =
void() Trader_Draw = void() Trader_Draw =
{ {
local float i, price, money; local float i, price, money, m, n, p;
local float it; local float it;
local string itname, money2, s2, s3, s4, s5, s6, s7, s8, s9, perki, perk2i, p1, p2, pn, pd, price2; local string itname, money2, s2, s3, s4, s5, s6, s7, s8, s9, perki, perk2i, p1, p2, pn, pd, price2;
local float op; local float op;
@ -503,6 +503,8 @@ void() Trader_Draw =
TraderImage('5 4 0'*IMGSIZEF*(scrwidth/640), 20); TraderImage('5 4 0'*IMGSIZEF*(scrwidth/640), 20);
slotnum = 0;
if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640))
if (mousepos_y >= 1*IMGSIZEF*(scrwidth/640) && mousepos_y <= 2*IMGSIZEF*(scrwidth/640)) if (mousepos_y >= 1*IMGSIZEF*(scrwidth/640) && mousepos_y <= 2*IMGSIZEF*(scrwidth/640))
slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 0; slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 0;
@ -532,21 +534,27 @@ void() Trader_Draw =
it = getstati(70+slotnum); it = getstati(70+slotnum);
itname = GetItemName(ToIID(it)); itname = GetItemName(ToIID(it));
drawstring('32 16 0'*(scrwidth/640), itname, '8 8 0'*(scrwidth/640), '1 1 1', 1); drawstring('32 16 0'*(scrwidth/640), itname, '8 8 0'*(scrwidth/640), '1 1 1', 1);
itname = GetItemDesc(ToIID(it));
drawstring('32 32 0'*(scrwidth/640), itname, '8 8 0'*(scrwidth/640), '1 1 1', 1);
price = GetBaseValue(ToIID(it)); if (slotnum > 0)
price = ceil(price * (1 - (getstati(104)/30))); {
price2 = ftos(price); price = GetBaseValue(ToIID(it));
money = getstati(50); price = ceil(price * (1 - (getstati(104)/30)));
money2 = ftos(money); price2 = ftos(price);
drawstring('2 6 0'*IMGSIZEF*(scrwidth/640) - '16 48 0'*(scrwidth/640), " TOTAL ", '16 16 0'*(scrwidth/640), '1 1 1', 1); m = ShadowSlotOfItem(self, IID_MONEY);
drawstring('2 6 0'*IMGSIZEF*(scrwidth/640) - '16 32 0'*(scrwidth/640), " PRICE ", '16 16 0'*(scrwidth/640), '1 1 1', 1); p = ShadowItemInSlot(self, m);
drawstring('2 6 0'*IMGSIZEF*(scrwidth/640) + '16 0 0'*(scrwidth/640), price2, '16 16 0'*(scrwidth/640), '1 1 1', 1); n = ToStatus(p);
drawstring('4 6 0'*IMGSIZEF*(scrwidth/640) - '16 48 0'*(scrwidth/640), " TOTAL ", '16 16 0'*(scrwidth/640), '1 1 1', 1); money2 = ftos(n);
drawstring('4 6 0'*IMGSIZEF*(scrwidth/640) - '16 32 0'*(scrwidth/640), " MONEY ", '16 16 0'*(scrwidth/640), '1 1 1', 1);
drawstring('4 6 0'*IMGSIZEF*(scrwidth/640) + '16 0 0'*(scrwidth/640), money2, '16 16 0'*(scrwidth/640), '1 1 1', 1);
TraderImage('2 5 0'*IMGSIZEF*(scrwidth/640), slotnum);
drawpic('4 5 0'*IMGSIZEF*(scrwidth/640) + '16 0 0'*(scrwidth/640), "gui/bottlecaps.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawstring('2 6 0'*IMGSIZEF*(scrwidth/640) + '16 0 0'*(scrwidth/640), price2, '16 16 0'*(scrwidth/640), '1 1 1', 1);
drawstring('4 6 0'*IMGSIZEF*(scrwidth/640) + '16 0 0'*(scrwidth/640), money2, '16 16 0'*(scrwidth/640), '1 1 1', 1);
}
if (mousepos_x > scrwidth*0.95) if (mousepos_x > scrwidth*0.95)
mousepos_x = scrwidth*0.95; mousepos_x = scrwidth*0.95;
@ -730,12 +738,18 @@ void() GainPerk_Draw =
{ {
if (mousepos_x >= 2*IMGSIZEF*(scrwidth/640) && mousepos_x <= 3*IMGSIZEF*(scrwidth/640)) if (mousepos_x >= 2*IMGSIZEF*(scrwidth/640) && mousepos_x <= 3*IMGSIZEF*(scrwidth/640))
which_perk = 11; which_perk = 11;
else if (mousepos_x >= 3*IMGSIZEF*(scrwidth/640) && mousepos_x <= 4*IMGSIZEF*(scrwidth/640))
which_perk = 12;
else if (mousepos_x >= 4*IMGSIZEF*(scrwidth/640) && mousepos_x <= 5*IMGSIZEF*(scrwidth/640))
which_perk = 14;
else if (mousepos_x >= 5*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640))
which_perk = 15;
else else
which_perk = 0; which_perk = 0;
} }
drawpic('2 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Support Fire.png", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('2 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Support Fire.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('3 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Duck And Cover", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('3 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/I Disappear.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('4 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Puppet Master.png", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('4 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Puppet Master.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('5 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Stay Low.png", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('5 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Stay Low.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('6 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Surgical Precision.png", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('6 2 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Surgical Precision.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
@ -747,6 +761,9 @@ void() GainPerk_Draw =
drawpic('6 3 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Economic Moves.png", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('6 3 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Economic Moves.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('2 4 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Nuclear Man.png", '64 64 0'*(scrwidth/640), '1 1 1', 1); drawpic('2 4 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Nuclear Man.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('3 4 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Commander.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('4 4 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Blaster Master.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
drawpic('5 4 0'*IMGSIZEF*(scrwidth/640), "gui/perks/Fighting Dirty.png", '64 64 0'*(scrwidth/640), '1 1 1', 1);
pn = PerkName(1, which_perk); pn = PerkName(1, which_perk);
pd = GetPerkDesc(which_perk); pd = GetPerkDesc(which_perk);
@ -769,7 +786,7 @@ void() GainPerk_Draw =
void() Pipboy_Draw = void() Pipboy_Draw =
{ {
float width,height,lvl,bar; float width,height,lvl,bar, top, s;
string skill; string skill;
vector w; vector w;
@ -894,6 +911,25 @@ void() Pipboy_Draw =
drawstring('472 230 0'*(scrwidth/640) - ('0 4 0'*(lvl+4)*(scrwidth/640)), skill, '12 12 0'*(scrwidth/640), '1 1 1', 1); drawstring('472 230 0'*(scrwidth/640) - ('0 4 0'*(lvl+4)*(scrwidth/640)), skill, '12 12 0'*(scrwidth/640), '1 1 1', 1);
bar = 0;
s = getstati(127);
top = ceil(200 * (s/200));
if (top > 200)
top = 200;
while (bar < top)
bar = bar + 1;
top = 200;
drawstring('0 0 0'+('1 0 0'*(scrwidth*0.32)) +('0 1 0'*(scrheight*0.69)), "experience: ", '8 8 0'*(scrwidth/640), '1 1 1', 1);
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);
if (mousepos_x > scrwidth*0.95) if (mousepos_x > scrwidth*0.95)
mousepos_x = scrwidth*0.95; mousepos_x = scrwidth*0.95;
@ -1072,7 +1108,9 @@ if (slotnum <= 24)
} }
itname = GetItemName(ToIID(it)); itname = GetItemName(ToIID(it));
drawstring('32 16 0'*(scrwidth/640), itname, '16 16 0'*(scrwidth/640), '1 1 1', 1); drawstring('32 12 0'*(scrwidth/640), itname, '8 8 0'*(scrwidth/640), '1 1 1', 1);
itname = GetItemDesc(ToIID(it));
drawstring('32 22 0'*(scrwidth/640), itname, '7 7 0'*(scrwidth/640), '1 1 1', 1);
} }
@ -1235,7 +1273,7 @@ float(float eventtype, float param1, float param2) CSQC_InputEvent =
return; return;
if (which_perk == getstati(59)) if (which_perk == getstati(59))
return; return;
if (which_perk >= 1 && which_perk <= 11) if (which_perk >= 1 && which_perk <= 15)
localcmd(strcat("cmd gainperk ", ftos(which_perk), " ", ftos(perkslot), "\n")); localcmd(strcat("cmd gainperk ", ftos(which_perk), " ", ftos(perkslot), "\n"));
show_inventory = false; show_inventory = false;
show_pipboy = false; show_pipboy = false;

View file

@ -529,8 +529,6 @@ void(float vwidth, float vheight, float do2d) CSQC_UpdateView =
if (getstati(42) > 0) if (getstati(42) > 0)
SlotImageSmall('0 0 0'+('1 0 0'*(scrwidth*0.77)) +('0 1 0'*(scrheight*0.90)), 11); SlotImageSmall('0 0 0'+('1 0 0'*(scrwidth*0.77)) +('0 1 0'*(scrheight*0.90)), 11);
if (getstati(110) == 0)
drawpic('0 0 0'+('1 0 0'*(scrwidth*0.64)) +('0 1 0'*(scrheight*0.97)), "gui/hud/aim.png", '16 16 0'*(scrheight/640), '1 1 1');
HUD_Perks_Draw(); HUD_Perks_Draw();

View file

@ -669,6 +669,8 @@ float intermission_running;
.float hostage; .float hostage;
.float xregen; .float xregen;
.float sneak; .float sneak;
.float morale;
.float blurtime;
.float skill_combat; .float skill_combat;
.float skill_doctor; .float skill_doctor;

View file

@ -2,11 +2,11 @@ float IID_NONE = 0;
#define IsMelee(iid) (iid == IID_NONE || (iid >= IID_WP_WRENCH && iid <= IID_WP_POWERAXE)) #define IsMelee(iid) (iid == IID_NONE || (iid >= IID_WP_WRENCH && iid <= IID_WP_POWERAXE))
#define IsGrenade(iid) (iid >= IID_GREN_FRAG && iid <= IID_GREN_STUN) #define IsGrenade(iid) (iid >= IID_GREN_FRAG && iid <= IID_GREN_STUN)
#define IsRanged(iid) (iid >= IID_WP_GLOCK && iid <= IID_WP_ACR) #define IsRanged(iid) ((iid >= IID_WP_GLOCK && iid <= IID_WP_ACR))
#define IsMoney(iid) (iid == IID_MONEY)
//weapons with ammo, things with a toggle state //weapons with ammo, things with a toggle state
#define NotStackable(iid) (IsRanged(iid)) #define NotStackable(iid) (IsRanged(iid) || IsMoney(iid))
//the ammoless weapons //the ammoless weapons
float IID_WP_WRENCH = 399; float IID_WP_WRENCH = 399;
@ -146,6 +146,7 @@ float IID_MISC_HMXCOMPOUND = 320;
float IID_MISC_GUM = 321; float IID_MISC_GUM = 321;
float IID_MISC_XRAYTUBE = 322; float IID_MISC_XRAYTUBE = 322;
float IID_MONEY = 300;
#define IsShootable(iid) (IsMelee(iid) || IsRanged(iid) || IsGrenade(iid)) #define IsShootable(iid) (IsMelee(iid) || IsRanged(iid) || IsGrenade(iid))
@ -268,6 +269,62 @@ float(entity e, float slotno) ItemInSlot =
return 0; return 0;
}; };
float(entity e, float slotno) ShadowItemInSlot =
{
if (slotno == 1)
return getstati(32);
if (slotno == 2)
return getstati(33);
if (slotno == 3)
return getstati(34);
if (slotno == 4)
return getstati(35);
if (slotno == 5)
return getstati(36);
if (slotno == 6)
return getstati(37);
if (slotno == 7)
return getstati(38);
if (slotno == 8)
return getstati(39);
if (slotno == 9)
return getstati(40);
if (slotno == 10)
return getstati(41);
if (slotno == 11)
return getstati(42);
if (slotno == 12)
return getstati(43);
if (slotno == 13)
return getstati(44);
if (slotno == 14)
return getstati(45);
if (slotno == 15)
return getstati(46);
if (slotno == 16)
return getstati(47);
if (slotno == 17)
return getstati(91);
if (slotno == 18)
return getstati(92);
if (slotno == 19)
return getstati(93);
if (slotno == 20)
return getstati(94);
if (slotno == 21)
return getstati(95);
if (slotno == 22)
return getstati(96);
if (slotno == 23)
return getstati(97);
if (slotno == 24)
return getstati(98);
return 0;
};
void(entity e, float slotno, float item) SetItemSlot = void(entity e, float slotno, float item) SetItemSlot =
{ {
if (slotno == 1) if (slotno == 1)
@ -432,10 +489,7 @@ float(entity e, float iid) ShadowSlotOfItem =
return 23; return 23;
if (ToIID(getstati(98)) == iid) if (ToIID(getstati(98)) == iid)
return 24; return 24;
if (ToIID(getstati(104)) == iid)
return 25;
if (ToIID(getstati(105)) == iid)
return 26;
return 0; return 0;
}; };
@ -858,10 +912,11 @@ string(float iid) GetItemWModel =
return "maps/b_bh100.bsp"; return "maps/b_bh100.bsp";
if (iid == IID_CHEM_RADX) if (iid == IID_CHEM_RADX)
return "maps/b_bh25.bsp"; return "maps/b_bh25.bsp";
if (iid >= IID_MISC_JUNK && iid <= IID_MISC_XRAYTUBE) if (iid >= IID_MISC_JUNK && iid <= IID_MISC_XRAYTUBE)
return "progs/junk1.mdl"; return "progs/junk1.mdl";
if (iid == IID_MONEY)
return "progs/money.mdl";
return "progs/s_light.spr"; //no model. :/ return "progs/s_light.spr"; //no model. :/
}; };
@ -981,9 +1036,9 @@ float(float iid) WeaponMagQuant =
if (iid == IID_WP_WINCHESTER) if (iid == IID_WP_WINCHESTER)
return 2; return 2;
if (iid == IID_WP_MOSSBERG) if (iid == IID_WP_MOSSBERG)
return 12; return 8;
if (iid == IID_WP_JACKHAMMER) if (iid == IID_WP_JACKHAMMER)
return 20; return 10;
if (iid == IID_WP_GREASEGUN) if (iid == IID_WP_GREASEGUN)
return 30; return 30;
if (iid == IID_WP_MP9) if (iid == IID_WP_MP9)
@ -1221,6 +1276,10 @@ string(float iid) GetItemName =
return "grease gun"; return "grease gun";
if (iid == IID_WP_MP9) if (iid == IID_WP_MP9)
return "mp9"; return "mp9";
if (iid == IID_WP_GREASEGUN_S)
return "damaged grease gun";
if (iid == IID_WP_MP9_S)
return "damaged mp9";
if (iid == IID_WP_RANGEMASTER) if (iid == IID_WP_RANGEMASTER)
return "rangemaster"; return "rangemaster";
if (iid == IID_WP_RANGEMASTER_SCOPE) if (iid == IID_WP_RANGEMASTER_SCOPE)
@ -1376,6 +1435,7 @@ string(float iid) GetItemName =
if (iid == IID_EQUIP_XRAY) if (iid == IID_EQUIP_XRAY)
return "x-ray device"; return "x-ray device";
if (iid == IID_MISC_JUNK) if (iid == IID_MISC_JUNK)
return "random junk"; return "random junk";
if (iid == IID_MISC_NUKACOLA) if (iid == IID_MISC_NUKACOLA)
@ -1403,6 +1463,8 @@ string(float iid) GetItemName =
if (iid == IID_MISC_XRAYTUBE) if (iid == IID_MISC_XRAYTUBE)
return "x-ray tube"; return "x-ray tube";
if (iid == IID_MONEY)
return "bottle caps";
bprint(PRINT_MEDIUM, ftos(iid), " without a name!\n"); bprint(PRINT_MEDIUM, ftos(iid), " without a name!\n");
return strcat("unknown", ftos(iid)); return strcat("unknown", ftos(iid));
@ -1412,7 +1474,8 @@ float(float iid) GetBaseValue =
{ {
if (iid == IID_NONE) if (iid == IID_NONE)
return 0; return 0;
if (iid == IID_MONEY)
return 1;
if (iid == IID_WP_WRENCH) if (iid == IID_WP_WRENCH)
return 5; return 5;
@ -1425,13 +1488,13 @@ float(float iid) GetBaseValue =
if (iid == IID_WP_USP) if (iid == IID_WP_USP)
return 40;
if (iid == IID_WP_USP_S)
return 60;
if (iid == IID_WP_GLOCK)
return 30; return 30;
if (iid == IID_WP_USP_S)
return 30;
if (iid == IID_WP_GLOCK)
return 20;
if (iid == IID_WP_GLOCK_S) if (iid == IID_WP_GLOCK_S)
return 50; return 20;
if (iid == IID_WP_DEAGLE) if (iid == IID_WP_DEAGLE)
return 70; return 70;
if (iid == IID_WP_DEAGLE_M) if (iid == IID_WP_DEAGLE_M)
@ -1471,9 +1534,9 @@ float(float iid) GetBaseValue =
if (iid == IID_WP_MP9_S) if (iid == IID_WP_MP9_S)
return 125; return 125;
if (iid == IID_WP_RANGEMASTER) if (iid == IID_WP_RANGEMASTER)
return 80; return 70;
if (iid == IID_WP_RANGEMASTER_SCOPE) if (iid == IID_WP_RANGEMASTER_SCOPE)
return 120; return 100;
if (iid == IID_WP_AK47) if (iid == IID_WP_AK47)
return 150; return 150;
if (iid == IID_WP_AK112) if (iid == IID_WP_AK112)
@ -1858,6 +1921,9 @@ string(float iid) GetItemDesc =
if (iid == IID_EQUIP_XRAY) if (iid == IID_EQUIP_XRAY)
return "allows for enemy detection through walls"; return "allows for enemy detection through walls";
if (iid == IID_MONEY)
return "the standard currency of the wasteland";
if (iid == IID_MISC_NUKACOLA) if (iid == IID_MISC_NUKACOLA)
return "a bottle of tasty nuka-cola"; return "a bottle of tasty nuka-cola";
if (iid == IID_MISC_JUNK) if (iid == IID_MISC_JUNK)
@ -2164,6 +2230,10 @@ string(float iid) GetItemImage =
return "greasegun.jpg"; return "greasegun.jpg";
if (iid == IID_WP_MP9) if (iid == IID_WP_MP9)
return "mp9.jpg"; return "mp9.jpg";
if (iid == IID_WP_GREASEGUN_S)
return "greasegun.jpg";
if (iid == IID_WP_MP9_S)
return "mp9.jpg";
if (iid == IID_WP_RANGEMASTER) if (iid == IID_WP_RANGEMASTER)
return "rangem.png"; return "rangem.png";
if (iid == IID_WP_RANGEMASTER_SCOPE) if (iid == IID_WP_RANGEMASTER_SCOPE)
@ -2342,6 +2412,9 @@ string(float iid) GetItemImage =
if (iid == IID_MISC_XRAYTUBE) if (iid == IID_MISC_XRAYTUBE)
return "junk/tube.jpg"; return "junk/tube.jpg";
if (iid == IID_MONEY)
return "bottlecaps.png";
bprint(PRINT_MEDIUM, ftos(iid), " without a name!\n"); bprint(PRINT_MEDIUM, ftos(iid), " without a name!\n");
return strcat("unknown.jpg", ftos(iid)); return strcat("unknown.jpg", ftos(iid));
}; };

View file

@ -2343,6 +2343,8 @@ DropMoney
void() MoneyTouch = void() MoneyTouch =
{ {
local float x, y;
if (other.classname != "player") if (other.classname != "player")
return; return;
@ -2350,9 +2352,15 @@ void() MoneyTouch =
return; return;
sound (self, CHAN_VOICE, "items/item1.wav", 1, ATTN_IDLE); sound (self, CHAN_VOICE, "items/item1.wav", 1, ATTN_IDLE);
sprint(other, 2, "a small amount of wasteland currency.\n");
other.ammo_shells += self.islot1; x = ToIID(self.islot1);
remove(self); y = ToStatus(self.islot1);
if (TryGiveStackable(other, x, y))
{
sprint(other, 2, "found some bottle caps.\n");
remove(self);
}
}; };
void() DropMoney = void() DropMoney =
@ -2373,7 +2381,7 @@ void() DropMoney =
item.movetype = MOVETYPE_TOSS; item.movetype = MOVETYPE_TOSS;
setmodel (item, "progs/money.mdl"); setmodel (item, "progs/money.mdl");
setsize (item, '-16 -16 0', '16 16 56'); setsize (item, '-16 -16 0', '16 16 56');
item.islot1 = 2 + random()*5; item.islot1 = SlotVal(IID_MONEY, 1);
item.skin = ToIID(item.islot1) - 506; item.skin = ToIID(item.islot1) - 506;
item.touch = MoneyTouch; item.touch = MoneyTouch;

View file

@ -949,8 +949,8 @@ void() brotherhood_merchant =
self.xslot1 = SlotVal(IID_WP_USP, 1); self.xslot1 = SlotVal(IID_WP_GLOCK, 1);
self.xslot6 = SlotVal(IID_AM_45ACP, 100); self.xslot6 = SlotVal(IID_AM_10MM, 100);
self.xslot2 = SlotVal(IID_WP_PIPERIFLE, 1); self.xslot2 = SlotVal(IID_WP_PIPERIFLE, 1);
self.xslot7 = SlotVal(IID_AM_44MAGNUM, 100); self.xslot7 = SlotVal(IID_AM_44MAGNUM, 100);

View file

@ -105,12 +105,12 @@ void () CrawlSound =
return; return;
} }
self.attack_finished = time + 1;
self.rtime = time + 1; self.rtime = time + 1;
r = 1 - (self.skill_sneak/40); r = 0.5;
if (self.sneak > 0)
r = r / 2;
if ((rand < 0.25)) if ((rand < 0.25))
sound (self, CHAN_ITEM, "player/prone1.wav", r, ATTN_NORM); sound (self, CHAN_ITEM, "player/prone1.wav", r, ATTN_NORM);

View file

@ -103,7 +103,7 @@ void (float tmp, float dam) army_fire =
if (trace_ent.takedamage) if (trace_ent.takedamage)
{ {
dam = 1 + random()*dam + random()*dam; dam = dam + random()*dam;
dam = dam - (1 - (trace_fraction/2)); dam = dam - (1 - (trace_fraction/2));
SpawnBlood (org, PLAT_LOW_TRIGGER); SpawnBlood (org, PLAT_LOW_TRIGGER);
T_Damage (trace_ent, self, self, dam); T_Damage (trace_ent, self, self, dam);
@ -175,7 +175,7 @@ void (float tmp, float dam) army_fire1 =
if (trace_ent.takedamage) if (trace_ent.takedamage)
{ {
SpawnBlood (org, PLAT_LOW_TRIGGER); SpawnBlood (org, PLAT_LOW_TRIGGER);
dam = 10 + random()*dam + random()*dam; dam = dam + random()*dam;
dam = dam * (1 - (trace_fraction/2)); dam = dam * (1 - (trace_fraction/2));
X_Damage (trace_ent, self, self, dam); X_Damage (trace_ent, self, self, dam);
} }
@ -241,7 +241,7 @@ void (float tmp, float dam) army_fire2 =
direction = dir; direction = dir;
shot = 5; shot = 5;
var_o = crandom()*50; var_o = crandom()*75;
while (shot > 0) while (shot > 0)
{ {
@ -281,9 +281,8 @@ void (float tmp, float dam) army_fire2 =
if (trace_ent.takedamage) if (trace_ent.takedamage)
{ {
SpawnBlood (org, PLAT_LOW_TRIGGER); SpawnBlood (org, PLAT_LOW_TRIGGER);
dam = 1 + random()*dam + random()*dam;
dam = dam * (1 - (trace_fraction/2)); dam = dam * (1 - (trace_fraction/2));
T_Damage (trace_ent, self, self, dam); T_Damage (trace_ent, self, self, dam+random()*dam);
} }
else else
bullet_hole (trace_endpos); bullet_hole (trace_endpos);
@ -352,7 +351,7 @@ void (float tmp, float dam) army_fire3 =
if (trace_ent.takedamage) if (trace_ent.takedamage)
{ {
SpawnBlood (org, PLAT_LOW_TRIGGER); SpawnBlood (org, PLAT_LOW_TRIGGER);
dam = 1 + random()*dam + random()*dam; dam = dam + random()*dam;
dam = dam * (1 - (trace_fraction/2)); dam = dam * (1 - (trace_fraction/2));
T_Damage (trace_ent, self, self, dam); T_Damage (trace_ent, self, self, dam);
} }
@ -410,7 +409,7 @@ void (float tmp, float dam) army_fire4 =
if (trace_ent.takedamage) if (trace_ent.takedamage)
{ {
SpawnBlood (org, PLAT_LOW_TRIGGER); SpawnBlood (org, PLAT_LOW_TRIGGER);
dam = 1 + random()*dam + random()*dam; dam = dam + random()*dam;
dam = dam * (1 - (trace_fraction/2)); dam = dam * (1 - (trace_fraction/2));
T_Damage (trace_ent, self, self, dam); T_Damage (trace_ent, self, self, dam);
} }
@ -657,7 +656,7 @@ void () army_walk8 = [ 80, army_walk1 ]
void () army_run1 = [ 73, army_run2 ] void () army_run1 = [ 73, army_run2 ]
{ {
if ((random()<0.25 || self.health <= 25) && self.charmed != 1) if ((self.health <= 25) && self.charmed <= 1)
find_hide(); find_hide();
ai_run (TE_TELEPORT); ai_run (TE_TELEPORT);
@ -789,7 +788,7 @@ void () army_atka4 = [ 84, army_atka5 ]
void () army_atka5 = [ 85, army_atka6 ] void () army_atka5 = [ 85, army_atka6 ]
{ {
ai_face (); ai_face ();
army_fire2 (250, 7); army_fire2 (250, 5);
}; };
void () army_atka6 = [ 86, army_atka7 ] void () army_atka6 = [ 86, army_atka7 ]
@ -850,7 +849,7 @@ void () army_atkb5 = [ 85, army_atkb6 ]
if (r == RANGE_NEAR || r == RANGE_MELEE) if (r == RANGE_NEAR || r == RANGE_MELEE)
self.recoil = 1; self.recoil = 1;
army_fire3 (120, 15); army_fire3 (120, 9);
}; };
void () army_atkb6 = [ 86, army_atkb7 ] void () army_atkb6 = [ 86, army_atkb7 ]
@ -858,8 +857,8 @@ void () army_atkb6 = [ 86, army_atkb7 ]
ai_face (); ai_face ();
if (self.recoil == 1) if (self.recoil == 1)
{ {
army_fire3 (160, 14); army_fire3 (160, 9);
army_fire3 (160, 14); army_fire3 (160, 9);
} }
}; };
@ -867,7 +866,7 @@ void () army_atkb7 = [ 87, army_atkb8 ]
{ {
ai_face (); ai_face ();
if (self.recoil == 1) if (self.recoil == 1)
army_fire3 (160, 14); army_fire3 (200, 9);
}; };
void () army_atkb8 = [ 88, army_atkb9 ] void () army_atkb8 = [ 88, army_atkb9 ]
@ -875,8 +874,8 @@ void () army_atkb8 = [ 88, army_atkb9 ]
ai_face (); ai_face ();
if (self.recoil == 1) if (self.recoil == 1)
{ {
army_fire3 (160, 14); army_fire3 (200, 9);
army_fire3 (160, 14); army_fire3 (200, 9);
} }
}; };
@ -885,8 +884,8 @@ void () army_atkb9 = [ 89, army_run1 ]
ai_face (); ai_face ();
if (self.recoil == 1) if (self.recoil == 1)
{ {
army_fire3 (170, 14); army_fire3 (240, 9);
army_fire3 (170, 14); army_fire3 (240, 9);
} }
}; };
@ -1384,7 +1383,7 @@ void () grunt_pain =
{ {
if (random()*100<10) if (random()*100<10)
{ {
remove(self); self.solid = SOLID_NOT;
return; return;
} }
if (random()*100<50) if (random()*100<50)
@ -1703,7 +1702,7 @@ void () monster_army =
self.movetype = MOVETYPE_STEP; self.movetype = MOVETYPE_STEP;
setmodel (self, "progs/soldier.mdl"); setmodel (self, "progs/soldier.mdl");
setsize (self, '-12 -12 -24', '12 12 28'); setsize (self, '-12 -12 -24', '12 12 28');
self.max_health = 80; self.max_health = 120;
self.health = self.max_health; self.health = self.max_health;
self.team = 3; self.team = 3;
self.islot3 = SlotVal(IID_ARM_LEATHER, 1); self.islot3 = SlotVal(IID_ARM_LEATHER, 1);
@ -1899,7 +1898,7 @@ void () monster_commander =
commanders = commanders + 1; commanders = commanders + 1;
setsize (self, '-12 -12 -24', '12 12 32'); setsize (self, '-12 -12 -24', '12 12 32');
self.max_health = 200; self.max_health = 160;
self.health = self.max_health; self.health = self.max_health;
self.islot3 = SlotVal(IID_ARM_COMBAT, 1); self.islot3 = SlotVal(IID_ARM_COMBAT, 1);
self.armortype = 0.5; self.armortype = 0.5;

View file

@ -421,10 +421,10 @@ local vector org;
spawn_tfog (org); spawn_tfog (org);
//spawn_tdeath(t.origin, other); //spawn_tdeath(t.origin, other);
if (self.classname == "player") if (other.classname == "player")
{ {
self.solid = SOLID_NOT; other.solid = SOLID_NOT;
self.materialize = 200; other.materialize = 200;
} }
// move the player and lock him down for a little while // move the player and lock him down for a little while
if (!other.health) if (!other.health)

View file

@ -1,5 +1,4 @@
/* void () player_use1;
*/
void() show_light_level; void() show_light_level;
void() UseStimpack; void() UseStimpack;
void() UseSuperStim; void() UseSuperStim;
@ -123,7 +122,7 @@ float (entity healer, entity saved) RevivePlayer =
self = oself; self = oself;
// saved.materialize = 200; saved.materialize = 200;
saved.ghost = 0; saved.ghost = 0;
saved.health = 20 + (healer.skill_doctor); saved.health = 20 + (healer.skill_doctor);
saved.air_finished = time + 10; saved.air_finished = time + 10;
@ -239,28 +238,83 @@ void () puppet_master =
{ {
local entity te; local entity te;
local float charm_monster; local float charm_monster;
local vector org;
//this allows you to control other monsters //this allows you to control other monsters
charm_monster = 0; makevectors (self.v_angle);
te = findradius(self.origin, 400); traceline (self.origin, self.origin+v_forward*4000, FALSE, self);
while (te)
org = self.origin;
if (trace_ent.classname == "monster" && trace_ent != self.friend)
{ {
if (te.classname == "monster" && (charm_monster == 0) && (visible(te))) trace_ent.friend = self;
{ trace_ent.charmed = 30000;
spawn_heart(te, 300); self.friend = trace_ent;
charm_monster = 1; spawn_heart(trace_ent, 3000);
te.friend = self;
te.charmed = 300; self.friend.think = HuntTarget;
te.enemy = world; self.friend.nextthink = time + 0.25;
te.goalentity = self;
self.friend = te; WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
} WriteByte (MSG_MULTICAST, TE_LIGHTNING2);
te = te.chain; WriteEntity (MSG_MULTICAST, self);
WriteCoord (MSG_MULTICAST, org_x);
WriteCoord (MSG_MULTICAST, org_y);
WriteCoord (MSG_MULTICAST, org_z);
WriteCoord (MSG_MULTICAST, trace_endpos_x);
WriteCoord (MSG_MULTICAST, trace_endpos_y);
WriteCoord (MSG_MULTICAST, trace_endpos_z);
multicast (org, MULTICAST_PHS);
} }
}; };
void () puppet_master_command =
{
local entity te, ent;
local vector org;
local float charm_monster;
//this allows you to control other monsters
makevectors (self.v_angle);
traceline (self.origin, self.origin+v_forward*4000, FALSE, self);
if (self.friend.classname != "monster")
return;
org = self.origin;
if (trace_ent.classname == "monster" && trace_ent != self.friend)
{
self.friend.enemy = trace_ent;
self.friend.think = HuntTarget;
self.friend.nextthink = time + 0.25;
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte (MSG_MULTICAST, TE_LIGHTNING2);
WriteEntity (MSG_MULTICAST, self);
WriteCoord (MSG_MULTICAST, org_x);
WriteCoord (MSG_MULTICAST, org_y);
WriteCoord (MSG_MULTICAST, org_z);
WriteCoord (MSG_MULTICAST, trace_endpos_x);
WriteCoord (MSG_MULTICAST, trace_endpos_y);
WriteCoord (MSG_MULTICAST, trace_endpos_z);
multicast (org, MULTICAST_PHS);
}
else
{
self.friend.enemy = self;
self.friend.oldenemy = self;
self.friend.movetarget = self;
self.friend.goalentity = self;
self.friend.pausetime = time + 0.01;
return;
}
};
void () illusion_heal = void () illusion_heal =
{ {
@ -302,26 +356,7 @@ void () illusion_heal =
source = self.origin + '0 0 0'; source = self.origin + '0 0 0';
traceline (source, source + v_forward*64, FALSE, self); traceline (source, source + v_forward*64, FALSE, self);
if (trace_fraction == 1.0)//nobody in front of user, so heal self if (trace_ent.classname == "player")//healing another team-mate
{
if (self.health >= self.max_health)
sprint(self, PRINT_MEDIUM, "you are not injured.\n");
else if (self.health < self.max_health)
{
sound (self, CHAN_BODY, "items/r_item2.wav", 1, ATTN_NORM);
sprint(self, PRINT_MEDIUM, "you heal yourself with a placebo stimpack\n");
self.health = self.max_health;
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
}
}
else if (trace_ent.classname == "player")//healing another team-mate
{ {
if (trace_ent.health >= trace_ent.max_health) if (trace_ent.health >= trace_ent.max_health)
{ {
@ -361,34 +396,30 @@ void () illusion_heal =
} }
} }
} }
};
void () puppet_master_command = else//nobody in front of user, so heal self
{
local entity te, ent;
local float charm_monster;
//this allows you to control other monsters
makevectors (self.v_angle);
traceline (self.origin, self.origin+v_forward*4000, FALSE, self);
if (self.friend.classname != "monster")
return;
if (trace_ent.classname == "monster" && trace_ent != self.friend)
{ {
self.friend.enemy = trace_ent; if (self.health >= self.max_health)
self.friend.think = HuntTarget; sprint(self, PRINT_MEDIUM, "you are not injured.\n");
self.friend.nextthink = time + 0.25; else if (self.health < self.max_health)
} {
else
{ sound (self, CHAN_BODY, "items/r_item2.wav", 1, ATTN_NORM);
self.friend.enemy = self; sprint(self, PRINT_MEDIUM, "you heal yourself with a placebo stimpack\n");
self.friend.think = HuntTarget;
self.friend.nextthink = time + 0.25; self.health = self.max_health;
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
}
} }
}; };
void(float slotno) UsePerk = void(float slotno) UsePerk =
{ {
local float x, mcount, eat; local float x, mcount, eat;
@ -449,25 +480,21 @@ void(float slotno) UsePerk =
} }
if ((self.perk1 == 3 && slotno == 1) || (self.perk2 == 3 && slotno == 2)) if ((self.perk1 == 3 && slotno == 1) || (self.perk2 == 3 && slotno == 2))
{ {
if (slotno == 1)
self.perk1timer = 2000;
if (slotno == 2)
self.perk2timer = 2000;
sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM);
org = self.origin;
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte (MSG_MULTICAST, TE_TELEPORT);
WriteCoord (MSG_MULTICAST, org_x);
WriteCoord (MSG_MULTICAST, org_y);
WriteCoord (MSG_MULTICAST, org_z);
if (self.friend.classname != "monster") if (self.friend.classname != "monster")
puppet_master(); puppet_master();
else else
puppet_master_command(); puppet_master_command();
if (self.friend.classname == "monster")
{
if (slotno == 1)
self.perk1timer = 2000;
if (slotno == 2)
self.perk2timer = 2000;
}
} }
else if ((self.perk1 == 7 && slotno == 1) || (self.perk2 == 7 && slotno == 2)) else if ((self.perk1 == 7 && slotno == 1) || (self.perk2 == 7 && slotno == 2))
{ {
@ -485,13 +512,16 @@ void(float slotno) UsePerk =
WriteCoord (MSG_MULTICAST, org_y); WriteCoord (MSG_MULTICAST, org_y);
WriteCoord (MSG_MULTICAST, org_z); WriteCoord (MSG_MULTICAST, org_z);
stuffcmd(self, "gl_motionblur 0.9\n");
self.blurtime = 5;
te = findradius (self.origin, 6000); te = findradius (self.origin, 6000);
while (te) while (te)
{ {
if (te.classname == "monster") if (te.classname == "monster")
{ {
te.hold = 120; te.hold = 120;
spawn_stop(te, 8); spawn_stop(te, 5);
mcount = mcount + 1; mcount = mcount + 1;
} }
te = te.chain; te = te.chain;
@ -507,11 +537,11 @@ void(float slotno) UsePerk =
sound (self, CHAN_BODY, "items/damage.wav", 1, ATTN_NORM); sound (self, CHAN_BODY, "items/damage.wav", 1, ATTN_NORM);
sprint(self, 2, "it is time...\n"); sprint(self, 2, "it is time...\n");
self.supertime = 15; self.supertime = 15;
self.skill_combat = self.skill_combat + 20; self.skill_combat = self.skill_combat + 10;
self.skill_doctor = self.skill_doctor + 20; self.skill_doctor = self.skill_doctor + 10;
self.skill_sneak = self.skill_sneak + 20; self.skill_sneak = self.skill_sneak + 10;
self.skill_science = self.skill_science + 20; self.skill_science = self.skill_science + 10;
self.skill_speech = self.skill_speech + 20; self.skill_speech = self.skill_speech + 10;
} }
else if ((self.perk1 == 9 && slotno == 1) || (self.perk2 == 9 && slotno == 2)) else if ((self.perk1 == 9 && slotno == 1) || (self.perk2 == 9 && slotno == 2))
{ {
@ -584,7 +614,7 @@ void(float damage, float dist, float rate) FireMelee =
if (getperk(5))//living anatomy if (getperk(5))//living anatomy
{ {
if (self.steadyaim == 0) if (self.steadyaim == 0)
damage = damage + self.skill_doctor; damage = damage + self.skill_doctor + self.skill_speech;
} }
self.recoil = self.recoil + 5; self.recoil = self.recoil + 5;
@ -2252,13 +2282,13 @@ void () ProneOff =
sprint (self, 2, "position: stand.\n"); sprint (self, 2, "position: stand.\n");
if (getperk(10)) if (getperk(10))
{ {
self.attack_finished = time + 0.5; self.attack_finished = time + 0.75 - (self.skill_speech*0.05);
self.rtime = time + 0.5; self.rtime = time + 0.75 - (self.skill_speech*0.05);
} }
else else
{ {
self.attack_finished = time + 1.5; self.attack_finished = time + 1.5 - (self.skill_speech*0.05);
self.rtime = time + 1.5; self.rtime = time + 1.5 - (self.skill_speech*0.05);
} }
self.position = 0; self.position = 0;
PositionControl(); PositionControl();
@ -2291,10 +2321,15 @@ void () ProneOn =
self.position = 2; self.position = 2;
self.view_ofs = '0 0 -10'; self.view_ofs = '0 0 -10';
sprint (self, 2, "position: prone.\n"); sprint (self, 2, "position: prone.\n");
if (!getperk(10)) if (getperk(10))
{ {
self.attack_finished = time + 1.5; self.attack_finished = time + 0.75 - (self.skill_speech*0.05);
self.rtime = time + 1.5; self.rtime = time + 0.75 - (self.skill_speech*0.05);
}
else
{
self.attack_finished = time + 1.5 - (self.skill_speech*0.05);
self.rtime = time + 1.5 - (self.skill_speech*0.05);
} }
PositionControl(); PositionControl();
}; };
@ -2312,10 +2347,15 @@ void () DuckOff =
return; return;
} }
sprint (self, 2, "position: stand.\n"); sprint (self, 2, "position: stand.\n");
if (!getperk(10)) if (getperk(10))
{ {
self.attack_finished = time + 0.2; self.attack_finished = time + 0.25 - (self.skill_speech*0.05);
self.rtime = time + 0.2; self.rtime = time + 0.75 - (self.skill_speech*0.05);
}
else
{
self.attack_finished = time + 0.75 - (self.skill_speech*0.05);
self.rtime = time + 1.5 - (self.skill_speech*0.05);
} }
self.view_ofs = '0 0 22'; self.view_ofs = '0 0 22';
self.position = 0; self.position = 0;
@ -2351,10 +2391,15 @@ void () DuckOn =
return; return;
} }
if (!getperk(10)) if (getperk(10))
{ {
self.attack_finished = time + 0.5; self.attack_finished = time + 0.25 - (self.skill_speech*0.05);
self.rtime = time + 0.5; self.rtime = time + 0.25 - (self.skill_speech*0.05);
}
else
{
self.attack_finished = time + 0.75 - (self.skill_speech*0.05);
self.rtime = time + 0.75 - (self.skill_speech*0.05);
} }
self.walk = 0; self.walk = 0;
self.speedmulti = 1.00; self.speedmulti = 1.00;
@ -2421,25 +2466,15 @@ void() ImpulseCommands =
} }
if (self.impulse == 11)
ServerflagsCommand ();
if (self.impulse == 200) if (self.impulse == 200)
DuckOn (); DuckOn ();
if (self.impulse == 201) if (self.impulse == 201)
ProneOn (); ProneOn ();
if (self.impulse == 240)
AddClone ();
if (self.impulse == 50) if (self.impulse == 50)
ReloadWeapon (self.current_slot); ReloadWeapon (self.current_slot);
// if (self.impulse == 51)
// UseChem ();
if (self.impulse == 52)
BuyMenu ();
if (self.impulse == 53) if (self.impulse == 53)
Special (); Sneak ();
if (self.impulse == 100) if (self.impulse == 100)
ExitScreen (); ExitScreen ();
if (self.impulse == 55) if (self.impulse == 55)
@ -2455,39 +2490,13 @@ void() ImpulseCommands =
if (self.impulse == 62) if (self.impulse == 62)
UsePerk (2); UsePerk (2);
if (self.impulse == 65)
HostageReport ();
if (self.impulse == 66) if (self.impulse == 66)
WalkOn (); WalkOn ();
if (self.impulse == 67) if (self.impulse == 67)
WalkOff (); WalkOff ();
if (self.impulse == 212)
function_radio ("radio/1_yes.wav", 1);
if (self.impulse == 213)
function_radio ("radio/2_no.wav", 2);
if (self.impulse == 214)
function_radio ("radio/3_letsgo.wav", 3);
if (self.impulse == 215)
function_radio ("radio/4_cover.wav", 4);
if (self.impulse == 216)
function_radio ("radio/5_recon.wav", 5);
if (self.impulse == 217)
function_radio ("radio/6_backup.wav", 6);
if (self.impulse == 218)
function_radio ("radio/7_hold.wav", 7);
if (self.impulse == 219)
function_radio ("radio/8_behind.wav", 8);
if (self.impulse == 220)
function_radio ("radio/9_secure.wav", 9);
if (self.impulse == 221)
function_radio ("radio/10_suppressing.wav", 10);
if (self.impulse == 222)
function_radio ("radio/11_quiet.wav", 11);
if (self.impulse == 223)
CheatCommand();
if (self.impulse == 224)
show_light_level();
if (self.impulse == 225) if (self.impulse == 225)
UseStimpack(); UseStimpack();
if (self.impulse == 226) if (self.impulse == 226)
@ -2519,16 +2528,11 @@ void() W_WeaponFrame =
// check for attack // check for attack
if (self.button0) if (self.button0)
{
SuperDamageSound ();
W_Attack (); W_Attack ();
}
if (!self.button0) if (!self.button0)
{ {
if (self.attack > 0) if (self.attack > 0)
player_run (); player_run ();
self.attack = 0; self.attack = 0;
} }
}; };
@ -3196,7 +3200,7 @@ void (float dam, float ap, string snd, float rng, float rate) FirePistol =
if (getperk(5)) if (getperk(5))
{ {
if (self.steadyaim == 0) if (self.steadyaim == 0)
dam = dam + self.skill_doctor; dam = dam + self.skill_doctor + self.skill_speech;
} }
@ -3340,20 +3344,21 @@ void (float dam, float ap, string snd, float rng, float rate) FireSMG =
if (getperk(5)) if (getperk(5))
{ {
if (self.steadyaim == 0) if (self.steadyaim == 0)
dam = dam + self.skill_doctor; dam = dam + self.skill_doctor + self.skill_speech;
} }
sound (self, CHAN_WEAPON, snd, 1, ATTN_NORM); sound (self, CHAN_WEAPON, snd, 1, ATTN_NORM);
loud_noise(40); loud_noise(40);
if (self.sneak > 0)
self.equipment_slot = 0; {
sprint(self, PRINT_HIGH, "<EFBFBD> Uncloaked <20>\n"); self.equipment_slot = 0;
setmodel (self, "progs/guy.mdl"); sprint(self, PRINT_HIGH, "<EFBFBD> Uncloaked <20>\n");
self.sneak = 0; setmodel (self, "progs/guy.mdl");
sound (self, CHAN_BODY, "misc/r_tele4.wav", 1, ATTN_NORM); self.sneak = 0;
sound (self, CHAN_BODY, "misc/r_tele4.wav", 1, ATTN_NORM);
}
self.attack_finished = (time + rate); self.attack_finished = (time + rate);
@ -3395,8 +3400,8 @@ void (float dam, float ap, string snd, float rng, float rate) FireSMG =
if (weap == IID_WP_MP9) if (weap == IID_WP_MP9)
{ {
tmp = 200; tmp = 165;
dam = dam * 1.25; dam = dam * 1.1;
} }
if (self.velocity == '0 0 0') if (self.velocity == '0 0 0')
@ -3631,7 +3636,7 @@ void (float dam, float accuracy, string snd, float rng, float rate) FireAssaultR
if (getperk(5)) if (getperk(5))
{ {
if (self.steadyaim == 0) if (self.steadyaim == 0)
dam = dam + self.skill_doctor; dam = dam + self.skill_doctor + self.skill_speech;
} }
if (weap == IID_WP_MOONLIGHT) if (weap == IID_WP_MOONLIGHT)
@ -3913,7 +3918,7 @@ void (float dam, float xrecoil, string snd, float rng, float rate) FireMinigun =
if (getperk(5)) if (getperk(5))
{ {
if (self.steadyaim == 0) if (self.steadyaim == 0)
dam = dam + self.skill_doctor; dam = dam + self.skill_doctor + self.skill_speech;
} }
loud_noise(50); loud_noise(50);
@ -4521,43 +4526,8 @@ void () UseStimpack =
source = self.origin + '0 0 0'; source = self.origin + '0 0 0';
traceline (source, source + v_forward*64, FALSE, self); traceline (source, source + v_forward*64, FALSE, self);
if (trace_fraction == 1.0)//nobody in front of user, so heal self
{
x = SlotOfItem(self, IID_CHEM_STIMPACK);
if (x == 0)
{
sprint(self, PRINT_MEDIUM, "you don't have a stimpack\n");
return;
}
if (self.regen > 0) if (trace_ent.classname == "player")//healing another team-mate
sprint(self, PRINT_MEDIUM, "you are already affected by a stimpack\n");
else if (self.health >= self.max_health)
sprint(self, PRINT_MEDIUM, "you are not injured.\n");
else if (self.health < self.max_health)
{
DecreaseDestroySlot(x);//take away a stimpack
sound (self, CHAN_BODY, "items/r_item2.wav", 1, ATTN_NORM);
sprint(self, PRINT_MEDIUM, "you heal yourself with a stimpack\n");
thing = findradius(self.origin, 400);
while (thing)
{
if (thing.classname == "player" && thing.health < self.health)
self.score = self.score - 50;
thing = thing.chain;
}
self.health = self.health + 30 + (self.skill_doctor);
self.regen = self.regen + (5 + (self.skill_doctor/2));
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
}
}
else if (trace_ent.classname == "player")//healing another team-mate
{ {
if (trace_ent.regen >= 1 && trace_ent.health > 0) if (trace_ent.regen >= 1 && trace_ent.health > 0)
{ {
@ -4633,6 +4603,42 @@ void () UseStimpack =
} }
} }
} }
else
{
x = SlotOfItem(self, IID_CHEM_STIMPACK);
if (x == 0)
{
sprint(self, PRINT_MEDIUM, "you don't have a stimpack\n");
return;
}
if (self.regen > 0)
sprint(self, PRINT_MEDIUM, "you are already affected by a stimpack\n");
else if (self.health >= self.max_health)
sprint(self, PRINT_MEDIUM, "you are not injured.\n");
else if (self.health < self.max_health)
{
DecreaseDestroySlot(x);//take away a stimpack
sound (self, CHAN_BODY, "items/r_item2.wav", 1, ATTN_NORM);
sprint(self, PRINT_MEDIUM, "you heal yourself with a stimpack\n");
thing = findradius(self.origin, 400);
while (thing)
{
if (thing.classname == "player" && thing.health < self.health)
self.score = self.score - 50;
thing = thing.chain;
}
self.health = self.health + 30 + (self.skill_doctor);
self.regen = self.regen + (5 + (self.skill_doctor/2));
spawn_healing(self);
spawn_healing(self);
spawn_healing(self);
}
}
}; };
void () UseSuperStim = void () UseSuperStim =
@ -4758,40 +4764,7 @@ void () UseMedicalBag =
source = self.origin + '0 0 0'; source = self.origin + '0 0 0';
traceline (source, source + v_forward*64, FALSE, self); traceline (source, source + v_forward*64, FALSE, self);
if (trace_fraction == 1.0)//nobody in front of user, so heal self if (trace_ent.classname == "player")//healing another team-mate
{
x = SlotOfItem(self, IID_CHEM_MEDICALBAG);
if (x == 0)
{
sprint(self, PRINT_MEDIUM, "you don't have a medkit\n");
return;
}
if (self.regen > 0)
sprint(self, PRINT_MEDIUM, "you are already affected by a healing chem\n");
else if (self.health >= self.max_health)
sprint(self, PRINT_MEDIUM, "you are not injured.\n");
else if (self.health < self.max_health)
{
DecreaseDestroySlot(x);//take away a medkit
local entity thing;
thing = findradius(self.origin, 400);
while (thing)
{
if (thing.classname == "player" && (thing.health+20) < self.health)
self.score = self.score - 25;
thing = thing.chain;
}
sound (self, CHAN_BODY, "items/r_item1.wav", 1, ATTN_NORM);
self.health = self.health + 5 + (self.skill_doctor/2);
self.regen = self.regen + 3 + (self.skill_doctor/2);
spawn_healing(self);
}
}
else if (trace_ent.classname == "player")//healing another team-mate
{ {
if (trace_ent.regen >= 1 && trace_ent.health > 0) if (trace_ent.regen >= 1 && trace_ent.health > 0)
{ {
@ -4844,6 +4817,40 @@ void () UseMedicalBag =
} }
} }
} }
else//nobody in front of user, so heal self
{
x = SlotOfItem(self, IID_CHEM_MEDICALBAG);
if (x == 0)
{
sprint(self, PRINT_MEDIUM, "you don't have a medkit\n");
return;
}
if (self.regen > 0)
sprint(self, PRINT_MEDIUM, "you are already affected by a healing chem\n");
else if (self.health >= self.max_health)
sprint(self, PRINT_MEDIUM, "you are not injured.\n");
else if (self.health < self.max_health)
{
DecreaseDestroySlot(x);//take away a medkit
local entity thing;
thing = findradius(self.origin, 400);
while (thing)
{
if (thing.classname == "player" && (thing.health+20) < self.health)
self.score = self.score - 25;
thing = thing.chain;
}
sound (self, CHAN_BODY, "items/r_item1.wav", 1, ATTN_NORM);
self.health = self.health + 5 + (self.skill_doctor/2);
self.regen = self.regen + 3 + (self.skill_doctor/2);
spawn_healing(self);
}
}
}; };
void () DisplayMenu = void () DisplayMenu =
@ -5111,7 +5118,7 @@ void () ExitScreen =
makevectors (self.v_angle); makevectors (self.v_angle);
traceline (self.origin, self.origin + v_forward*128, FALSE, self); traceline (self.origin, self.origin + v_forward*128, FALSE, self);
/*
if (self.pickup == 1) if (self.pickup == 1)
{ {
self.pickup = 0; self.pickup = 0;
@ -5134,7 +5141,7 @@ void () ExitScreen =
return; return;
} }
else if (self.pickup == 1) else if (self.pickup == 1)
self.pickup = 0; self.pickup = 0;*/
if (trace_ent.classname == "bomb") if (trace_ent.classname == "bomb")
{ {
@ -6132,7 +6139,7 @@ void (float rec, float number, float dam, float spread, float ran, float auto, s
if (getperk(5)) if (getperk(5))
{ {
if (self.steadyaim == 0) if (self.steadyaim == 0)
dam = dam + self.skill_doctor/3; dam = dam + (self.skill_doctor/3) + (self.skill_speech/3);
} }
weap = ToIID(self.(SlotField(self.current_slot))); weap = ToIID(self.(SlotField(self.current_slot)));

View file

@ -202,24 +202,22 @@ void() load_monster =
{ {
self.zone = 1; self.zone = 1;
if (world.map_ent2 == 1) if (world.map_ent2 == 1 || world.map_ent2 == 2)
monster_dog(); monster_dog();
if (world.map_ent2 == 2)
monster_zombie();
if (world.map_ent2 == 3 || world.map_ent2 == 4) if (world.map_ent2 == 3 || world.map_ent2 == 4)
monster_army(); monster_army();
if (world.map_ent2 == 5 || world.map_ent2 == 6) if (world.map_ent2 == 5)
monster_army();
if (world.map_ent2 == 6)
monster_ogre(); monster_ogre();
if (world.map_ent2 == 7) if (world.map_ent2 == 7)
monster_army(); monster_enforcer();
if (world.map_ent2 == 8) if (world.map_ent2 == 8)
monster_demon1(); monster_enforcer();
if (world.map_ent2 == 9) if (world.map_ent2 == 9)
monster_demon1(); monster_demon1();
if (world.map_ent2 == 10) if (world.map_ent2 == 10)
monster_enforcer(); monster_demon1();
if (world.map_ent2 == 11)
monster_shalrath();
if (world.map_ent2 == 12) if (world.map_ent2 == 12)
monster_shambler(); monster_shambler();
} }
@ -233,8 +231,6 @@ void() load_monster =
monster_zombie(); monster_zombie();
else if (random()<0.10) else if (random()<0.10)
monster_army(); monster_army();
else if (random()<0.10)
monster_ogre();
else if (random()<0.10) else if (random()<0.10)
monster_army(); monster_army();
else if (random()<0.10) else if (random()<0.10)
@ -326,23 +322,23 @@ void() map_startup =
world.map_ent2_percent = t; world.map_ent2_percent = t;
world.map_ent3_percent = x; world.map_ent3_percent = x;
if (challenge_rating < 2) if (challenge_rating < 4)
{
world.map_ent1 = ceil(random()*6);
world.map_ent2 = ceil(random()*6);
world.map_ent3 = ceil(random()*6);
}
else if (challenge_rating < 8)
{ {
world.map_ent1 = 2 + ceil(random()*6); world.map_ent1 = 2 + ceil(random()*6);
world.map_ent2 = ceil(random()*8); world.map_ent2 = 2 + ceil(random()*6);
world.map_ent3 = ceil(random()*8); world.map_ent3 = 2 + ceil(random()*6);
}
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 else
{ {
world.map_ent1 = 4 + ceil(random()*8); world.map_ent1 = 4 + ceil(random()*6);
world.map_ent2 = 6 + ceil(random()*6); world.map_ent2 = 4 + ceil(random()*6);
world.map_ent3 = 8 + ceil(random()*4); world.map_ent3 = 4 + ceil(random()*6);
} }
if (world.map_obj == OBJ_HOSTAGE) if (world.map_obj == OBJ_HOSTAGE)
@ -1392,7 +1388,7 @@ void () RecoilControl =
} }
te.recoil = te.recoil - (0.10+(te.skill_combat*0.01)); te.recoil = te.recoil - (0.15+(te.skill_combat*0.01));
} }
else else
{ {
@ -1419,7 +1415,7 @@ void () RecoilControl =
//support fire: going prone gives a -10 recoil bonus with this perk //support fire: going prone gives a -10 recoil bonus with this perk
if (getperk(1) && self.position == 2 && te.recoil > 3) if (getperk(1) && self.position == 2 && te.recoil > 3)
{ {
te.recoil = te.recoil - 0.20; te.recoil = te.recoil - (0.15 +(self.skill_speech*0.01));
te.driftx = te.driftx * 0.5; te.driftx = te.driftx * 0.5;
te.drifty = te.drifty * 0.5; te.drifty = te.drifty * 0.5;
} }
@ -1758,7 +1754,7 @@ void() worldspawn =
precache_sound ("weapons/g11.wav"); precache_sound ("weapons/g11.wav");
precache_sound ("weapons/gauss.wav"); precache_sound ("weapons/gauss.wav");
precache_sound ("weapons/gpull.wav"); precache_sound ("weapons/gpull.wav");
precache_sound ("weapons/citykiller.wav"); precache_sound ("weapons/shotgun1.wav");
precache_sound ("weapons/laser.wav"); precache_sound ("weapons/laser.wav");
precache_sound ("weapons/blaster.wav"); precache_sound ("weapons/blaster.wav");
precache_sound ("weapons/moonlight-1.wav"); precache_sound ("weapons/moonlight-1.wav");