diff --git a/quakec/fallout2/client.qc b/quakec/fallout2/client.qc index 20461db1f..5374eb1c8 100644 --- a/quakec/fallout2/client.qc +++ b/quakec/fallout2/client.qc @@ -1328,7 +1328,7 @@ void() SneakLevel = te = findradius(self.origin, q); while (te) { - if (visible(te) && te.classname == "monster" && (check_fov_num(te) > 0.5) && te.health > 3) + if ((te.enemy.classname != "player" || te.enemy != self) && visible(te) && te.classname == "monster" && (check_fov_num(te) > 0.5) && te.health > 3) { if (c == 0) { @@ -1340,14 +1340,7 @@ void() SneakLevel = y = r / t; ze = te; c = 1; -/* - bprint(2, "test1: "); - bprint(2, ftos(r)); - bprint(2, " "); - bprint(2, ftos(q)); - bprint(2, " "); - bprint(2, ftos(t)); - bprint(2, "\n");*/ + } else { @@ -1357,14 +1350,7 @@ void() SneakLevel = t = t * (check_fov_num(te)); t = t * (check_fov_num(te)); z = r / t; - /* - bprint(2, "test2: "); - bprint(2, ftos(r)); - bprint(2, " "); - bprint(2, ftos(q)); - bprint(2, " "); - bprint(2, ftos(t)); - bprint(2, "\n");*/ + if (z < y) { @@ -2412,12 +2398,12 @@ void(entity targ, entity attacker) ClientObituary = if (attacker.critical == 778) //wall headshot { bprint (PRINT_MEDIUM, "& "); - attacker.score = attacker.score + 75; + attacker.score = attacker.score + 10; } if (attacker.velocity_z != 0) { bprint (PRINT_MEDIUM, "@ "); - attacker.score = attacker.score - 2; + attacker.score = attacker.score + 2; } // if (attacker.current_slot == 1 && attacker.mag1 == 0) // bprint (PRINT_MEDIUM, "! "); diff --git a/quakec/fallout2/cmds.qc b/quakec/fallout2/cmds.qc index ecc46115d..8121ab460 100644 --- a/quakec/fallout2/cmds.qc +++ b/quakec/fallout2/cmds.qc @@ -424,7 +424,8 @@ void(string arg1) Cmd_InvBuy = sprint(self, 2, "full inventory.\n"); sound (self, CHAN_BODY, "misc/beep1.wav", 1, ATTN_NORM); m = SlotOfItem(self, IID_MONEY); - SetItemSlot(self, m, n); + SetItemSlot(self, m, 0); + TryGiveStackable(self, IID_MONEY, n); return; } sound (self, CHAN_BODY, "misc/item2.wav", 1, ATTN_NORM); @@ -743,16 +744,15 @@ void(string arg1) Cmd_InvMix = sprint(self, PRINT_MEDIUM, "silencer created\n"); sound (self, CHAN_BODY, "misc/item1.wav", 1, ATTN_NORM); } - else if ((iid1 == IID_WP_NEEDLER && iid2 == IID_WP_NEEDLER) || - (iid2 == IID_WP_NEEDLER && iid1 == IID_WP_NEEDLER)) + else if ((iid1 == IID_ARM_VANDAL && iid2 == IID_MISC_JUNK) || + (iid2 == IID_ARM_VANDAL && iid1 == IID_MISC_JUNK)) { - if (random()*100 > (self.skill_science*10)) + if (random()*100 > (self.skill_science*20)) { - sprint(self, PRINT_MEDIUM, "your concoction exploded!\n"); - Explosion(); + sprint(self, PRINT_MEDIUM, "your concoction failed.\n"); return; } @@ -768,8 +768,8 @@ void(string arg1) Cmd_InvMix = DecreaseDestroySlot(23); DecreaseDestroySlot(24); - SetItemSlot(self, x, SlotVal(IID_WP_ACR, 1)); - sprint(self, PRINT_MEDIUM, "Steyr ACR created\n"); + SetItemSlot(self, x, SlotVal(IID_ARM_WASTELAND, 1)); + sprint(self, PRINT_MEDIUM, "Wasteland Jacket created\n"); sound (self, CHAN_BODY, "misc/item1.wav", 1, ATTN_NORM); } else diff --git a/quakec/fallout2/combat.qc b/quakec/fallout2/combat.qc index 81d95f4d5..a5771e4a7 100644 --- a/quakec/fallout2/combat.qc +++ b/quakec/fallout2/combat.qc @@ -180,10 +180,6 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage = if (targ.classname == "player" && attacker.classname == "monster") targ.superenemy = attacker; -//getting hurt is slightly painful to the score, play cautiously! - if (attacker.classname == "monster" && targ.classname == "player") - targ.score = targ.score - 1; - //flanking monsters awards points if (attacker.classname == "player" && targ.classname == "monster" && targ.enemy != attacker) attacker.score = attacker.score + 1; @@ -216,14 +212,14 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage = //attacking a team-mate is a HUGE penalty if (attacker.classname == "player" && targ.classname == "player") { - attacker.score = attacker.score - 5; + attacker.score = attacker.score - 2; sprint(attacker, 2, "you just shot a teammate! be careful!\n"); } //attacking a hostage is a HUGE penalty if (attacker.classname == "player" && targ.classname == "hostage") { - attacker.score = attacker.score - 5; + attacker.score = attacker.score - 2; sprint(attacker, 2, "you just shot a hostage! be careful!\n"); } diff --git a/quakec/fallout2/csqc/invent.qc b/quakec/fallout2/csqc/invent.qc index 9e68ae364..5ebfd2f0a 100644 --- a/quakec/fallout2/csqc/invent.qc +++ b/quakec/fallout2/csqc/invent.qc @@ -503,30 +503,32 @@ void() Trader_Draw = TraderImage('5 4 0'*IMGSIZEF*(scrwidth/640), 20); - slotnum = 0; + if (!showcontextmenu) + { + slotnum = 0; - 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)) - slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 0; + 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)) + slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 0; - if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) - if (mousepos_y >= 2*IMGSIZEF*(scrwidth/640) && mousepos_y <= 3*IMGSIZEF*(scrwidth/640)) - slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 5; + if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) + if (mousepos_y >= 2*IMGSIZEF*(scrwidth/640) && mousepos_y <= 3*IMGSIZEF*(scrwidth/640)) + slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 5; - if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) - if (mousepos_y >= 3*IMGSIZEF*(scrwidth/640) && mousepos_y <= 4*IMGSIZEF*(scrwidth/640)) - slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 10; - - if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) - if (mousepos_y >= 4*IMGSIZEF*(scrwidth/640) && mousepos_y <= 5*IMGSIZEF*(scrwidth/640)) - slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 15; + if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) + if (mousepos_y >= 3*IMGSIZEF*(scrwidth/640) && mousepos_y <= 4*IMGSIZEF*(scrwidth/640)) + slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 10; + if (mousepos_x >= 1*IMGSIZEF*(scrwidth/640) && mousepos_x <= 6*IMGSIZEF*(scrwidth/640)) + if (mousepos_y >= 4*IMGSIZEF*(scrwidth/640) && mousepos_y <= 5*IMGSIZEF*(scrwidth/640)) + slotnum = floor((mousepos_x)/(IMGSIZEF*(scrwidth/640))) + 15; + } if (showcontextmenu && show_trader) { - drawfill(contextpos*(scrwidth/640) - '8 8 0'*(scrwidth/640), '48 48 0'*(scrwidth/640), '0 0 0', 1.0); - op = floor((mousepos_y*(scrwidth/640) - contextpos_y*(scrwidth/640))/8*(scrwidth/640)); - drawstring(contextpos*(scrwidth/640) + '0 8 0'*(scrwidth/640), "buy?", '8 8 0'*(scrwidth/640), '1 1 0' + (op!=1)*'0 0 1', + drawfill(contextpos - '8 8 0'*(scrwidth/640), '48 48 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), 1); } @@ -1013,18 +1015,18 @@ void() Invent_Draw = if (showcontextmenu && show_inventory) { - drawfill(contextpos - '8 8 0', '88 24 0'+'32 16 0'*(scrwidth/640), '0 0 0', 1); + drawfill(contextpos - '8 8 0', '32 48 0'+'32 16 0'*(scrwidth/640), '0 0 0', 1); op = floor((mousepos_y - contextpos_y)/8); - drawstring(contextpos + (0 * '0 8 0'), "use/reload", '8 8 0', '1 1 0' + (op!=0)*'0 0 1', 1); - drawstring(contextpos + (1 * '0 8 0'), "drop", '8 8 0', '1 1 0' + (op!=1)*'0 0 1', 1); + 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); if (getstati(108) == 1) - drawstring(contextpos + (2 * '0 8 0'), "sell", '8 8 0', '1 1 0' + (op!=2)*'0 0 1', 1); + 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); } else if (showmixmenu && show_inventory) { - drawfill(contextpos - '8 8 0', '88 24 0'+'96 96 0', '0 0 0', 0.9); + drawfill(contextpos - '8 8 0', '16 24 0'+'96 96 0', '0 0 0', 1); op = floor((mousepos_y - contextpos_y)/8); drawstring(contextpos + (0 * '0 8 0'), "mix items", '8 8 0', '1 1 0' + (op!=0)*'0 0 1', 1); @@ -1227,13 +1229,13 @@ float(float eventtype, float param1, float param2) CSQC_InputEvent = { if (showcontextmenu && show_inventory) { - op = floor((mousepos_y - contextpos_y)/8); + op = ceil((mousepos_y - contextpos_y)/(8*(scrwidth/640))); if (op == 0) localcmd(strcat("cmd invuse ", ftos(slotnum), "\n")); - else if ((op == 1)) + else if ((op == 2)) localcmd(strcat("cmd invdrop ", ftos(slotnum), "\n")); - else if (op == 2) + else if (op == 4) localcmd(strcat("cmd invsell ", ftos(slotnum), "\n")); showcontextmenu = false; diff --git a/quakec/fallout2/fight.qc b/quakec/fallout2/fight.qc index c50723796..e2fb5eeaf 100644 --- a/quakec/fallout2/fight.qc +++ b/quakec/fallout2/fight.qc @@ -94,16 +94,23 @@ float() CheckAttack = else if (enemy_range == RANGE_NEAR) { if (self.th_melee) - chance = 0.2; + chance = 0.95; else - chance = 0.4; + chance = 0.95; } else if (enemy_range == RANGE_MID) { if (self.th_melee) - chance = 0.05; + chance = 0.95; else - chance = 0.1; + chance = 0.95; + } + else if (enemy_range == RANGE_FAR) + { + if (self.th_melee) + chance = 0.9; + else + chance = 0.9; } else chance = 0; @@ -111,7 +118,7 @@ float() CheckAttack = if (random () < chance) { self.th_missile (); - SUB_AttackFinished (2*random()); + SUB_AttackFinished (3*random()); return TRUE; } @@ -261,9 +268,11 @@ float() SoldierCheckAttack = if (enemy_range == RANGE_MELEE) chance = 0.9; else if (enemy_range == RANGE_NEAR) - chance = 0.4; + chance = 0.9; else if (enemy_range == RANGE_MID) - chance = 0.05; + chance = 0.9; + else if (enemy_range == RANGE_FAR) + chance = 0.9; else chance = 0; diff --git a/quakec/fallout2/inventory.qc b/quakec/fallout2/inventory.qc index a06fddc4e..ed2222295 100644 --- a/quakec/fallout2/inventory.qc +++ b/quakec/fallout2/inventory.qc @@ -85,7 +85,7 @@ float IID_GREN_STUN = 105; float IID_GREN_FLARE = 106; //armour -#define IsArmor(iid) (iid >= IID_ARM_DESERT && iid <= IID_ARM_LPOWER) +#define IsArmor(iid) (iid >= IID_ARM_DESERT && iid <= IID_ARM_WASTELAND) float IID_ARM_DESERT = 200; float IID_ARM_LEATHER = 201; float IID_ARM_VANDAL = 202; @@ -95,6 +95,7 @@ float IID_ARM_COMBAT = 205; float IID_ARM_SEVA = 206; float IID_ARM_FORCE = 207; float IID_ARM_LPOWER = 208; +float IID_ARM_WASTELAND = 208; //stims #define IsChem(iid) (iid >= IID_CHEM_STIMPACK && iid <= IID_CHEM_BESERK) @@ -915,6 +916,9 @@ string(float iid) GetItemWModel = if (iid >= IID_MISC_JUNK && iid <= IID_MISC_XRAYTUBE) return "progs/junk1.mdl"; + if (iid >= IID_ARM_LEATHER && iid <= IID_ARM_WASTELAND) + return "progs/armor.mdl"; + if (iid == IID_MONEY) return "progs/money.mdl"; @@ -1375,7 +1379,8 @@ string(float iid) GetItemName = return "force armor"; if (iid == IID_ARM_LPOWER) return "power armor"; - + if (iid == IID_ARM_WASTELAND) + return "wasteland jacket"; if (iid == IID_CHEM_STIMPACK) return "stimpack"; @@ -1577,7 +1582,7 @@ float(float iid) GetBaseValue = if (iid == IID_AM_2MMEC) return 120; if (iid == IID_AM_10MM) - return 12; + return 10; if (iid == IID_AM_556MM) return 20; if (iid == IID_AM_5MMHIGHVEL) @@ -1630,7 +1635,8 @@ float(float iid) GetBaseValue = return 300; if (iid == IID_ARM_LPOWER) return 450; - + if (iid == IID_ARM_WASTELAND) + return 150; if (iid == IID_CHEM_STIMPACK) return 5; @@ -1864,7 +1870,8 @@ string(float iid) GetItemDesc = return "experimental energy-field armor, very low absorb"; if (iid == IID_ARM_LPOWER) return "the heaviest armor with great protection"; - + if (iid == IID_ARM_WASTELAND) + return "upgraded vandal armor with extra small arms protection"; if (iid == IID_CHEM_STIMPACK) return "advanced healing chem that replaces lost blood"; @@ -1964,6 +1971,8 @@ float(float iid) GetArmorThreshold = return 3; if (iid == IID_ARM_VANDAL) return 4; + if (iid == IID_ARM_VANDAL) + return 5; if (iid == IID_ARM_METAL) return 1; if (iid == IID_ARM_TESLA) @@ -1988,6 +1997,8 @@ float(float iid) GetArmorAbsorb = return 20; if (iid == IID_ARM_VANDAL) return 30; + if (iid == IID_ARM_WASTELAND) + return 30; if (iid == IID_ARM_METAL) return 50; if (iid == IID_ARM_TESLA) @@ -2316,6 +2327,8 @@ string(float iid) GetItemImage = return "leather.jpg"; if (iid == IID_ARM_VANDAL) return "vandal.jpg"; + if (iid == IID_ARM_WASTELAND) + return "vandal.jpg"; if (iid == IID_ARM_METAL) return "metal.jpg"; if (iid == IID_ARM_TESLA) @@ -2925,6 +2938,8 @@ float(float iid) GetItemThreatLevel = return 0; if (iid == IID_ARM_VANDAL) return 0; + if (iid == IID_ARM_WASTELAND) + return 0; if (iid == IID_ARM_METAL) return 0; if (iid == IID_ARM_TESLA) diff --git a/quakec/fallout2/items.qc b/quakec/fallout2/items.qc index 091559011..2b61041ba 100644 --- a/quakec/fallout2/items.qc +++ b/quakec/fallout2/items.qc @@ -316,13 +316,13 @@ void(vector loc) SpawnJunk = - if (random()*100 <= 50) + if (random()*100 <= 25) junk.islot1 = SlotVal(IID_MISC_HMXCOMPOUND, 1); - else if (random()*100 <= 50) + else if (random()*100 <= 25) junk.islot1 = SlotVal(IID_MISC_CHEMICALS, 1); - else if (random()*100 <= 33) + else if (random()*100 <= 25) junk.islot1 = SlotVal(IID_MISC_NUKACOLA, 1); - else if (random()*100 <= 33) + else if (random()*100 <= 25) junk.islot1 = SlotVal(IID_MISC_AEROSOL, 1); else if (random()*100 <= 10) junk.islot1 = SlotVal(IID_MISC_RDXCRYSTAL, 1); diff --git a/quakec/fallout2/player.qc b/quakec/fallout2/player.qc index 587a5f552..5391371cd 100644 --- a/quakec/fallout2/player.qc +++ b/quakec/fallout2/player.qc @@ -194,7 +194,7 @@ void (float db) loud_noise = while (te) { - if (te.classname == "monster" && te.enemy.classname != "player") + if (te.classname == "monster" && (te.enemy.classname != "player" && te.charmed <= 0)) { dir = normalize(te.origin - self.origin); v = vlen(te.origin - self.origin); diff --git a/quakec/fallout2/soldier.qc b/quakec/fallout2/soldier.qc index 4bebce59c..08b024c66 100644 --- a/quakec/fallout2/soldier.qc +++ b/quakec/fallout2/soldier.qc @@ -351,7 +351,7 @@ void (float tmp, float dam) army_fire3 = if (trace_ent.takedamage) { SpawnBlood (org, PLAT_LOW_TRIGGER); - dam = dam + random()*dam; + dam = 6 + random()*6; dam = dam * (1 - (trace_fraction/2)); T_Damage (trace_ent, self, self, dam); } diff --git a/quakec/fallout2/weapons.qc b/quakec/fallout2/weapons.qc index 2dbf20fc6..adece7085 100644 --- a/quakec/fallout2/weapons.qc +++ b/quakec/fallout2/weapons.qc @@ -637,7 +637,10 @@ void(float damage, float dist, float rate) FireMelee = if (dot < 0.5 && trace_ent.takedamage) { - tdam = 20 + (60*self.skill_sneak); + if (trace_ent.enemy.classname == "player") + tdam = 20 + (60*self.skill_sneak); + else + tdam = 20 + (50*self.skill_sneak); if (trace_ent.solid != SOLID_BSP) SpawnBlood (org, 1); @@ -665,6 +668,18 @@ void(float damage, float dist, float rate) FireMelee = self.sneak = 0; spawn_excla(self, 3); } + else + { + bprint(2, self.netname); + bprint(2, " assassinates "); + bprint(2, trace_ent.netname); + bprint(2, "!\n"); + + if (random()*4<2) + sound (trace_ent, CHAN_WEAPON, "player/headshot.wav", 1, ATTN_NONE); + else + sound (trace_ent, CHAN_WEAPON, "player/udeath.wav", 1, ATTN_NONE); + } } else if (trace_ent.takedamage) { @@ -2060,9 +2075,9 @@ void() W_Attack = else if (weap == IID_WP_MP9) FireSMG(12, 0, "weapons/mp9.wav", 1500, 0.08); else if (weap == IID_WP_GREASEGUN_S) - FireSMG(9, 0, "weapons/greasegun.wav", 1200, 0.08); + FireSMG(12, 0, "weapons/greasegun.wav", 1200, 0.08); else if (weap == IID_WP_MP9_S) - FireSMG(9, 0, "weapons/mp9.wav", 1200, 0.08); + FireSMG(12, 0, "weapons/mp9.wav", 1200, 0.08); else if (weap == IID_WP_RANGEMASTER) FireAssaultRifle(18, 4, "weapons/rangem.wav", 4000, 0.1); else if (weap == IID_WP_AK112) @@ -2661,7 +2676,7 @@ void (vector org) bullet_hole = WriteCoord (MSG_MULTICAST, org_x); WriteCoord (MSG_MULTICAST, org_y); WriteCoord (MSG_MULTICAST, org_z); - multicast (self.origin, MULTICAST_PHS); + multicast (org, MULTICAST_PHS); }; @@ -3404,6 +3419,10 @@ void (float dam, float ap, string snd, float rng, float rate) FireSMG = dam = dam * 1.1; } + if (weap == IID_WP_GREASEGUN_S) + tmp = 210; + + if (self.velocity == '0 0 0') tmp = tmp + (15*self.recoil); else @@ -4623,15 +4642,6 @@ void () UseStimpack = 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); @@ -4672,15 +4682,6 @@ void () UseSuperStim = sprint(self, PRINT_MEDIUM, "you are not injured.\n"); else if (self.health < self.max_health) { - local entity thing; - thing = findradius(self.origin, 400); - while (thing) - { - if (thing.classname == "player" && (thing.health+20) < self.health) - self.score = self.score - 50; - - thing = thing.chain; - } DecreaseDestroySlot(x);//take away a stimpack sound (self, CHAN_BODY, "items/r_item2.wav", 1, ATTN_NORM); @@ -4834,16 +4835,6 @@ void () UseMedicalBag = { 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); diff --git a/quakec/fallout2/world.qc b/quakec/fallout2/world.qc index 5005666f4..ef63cc506 100644 --- a/quakec/fallout2/world.qc +++ b/quakec/fallout2/world.qc @@ -1799,6 +1799,7 @@ void() worldspawn = precache_model ("progs/backpack.mdl"); precache_model ("progs/zom_gib.mdl"); precache_model ("progs/v_light.mdl"); + precache_model ("progs/armor.mdl"); precache_model ("maps/crate.bsp"); //