diff --git a/quakec/fallout2/client.qc b/quakec/fallout2/client.qc index f9d67d2a9..ee44ea731 100644 --- a/quakec/fallout2/client.qc +++ b/quakec/fallout2/client.qc @@ -108,7 +108,7 @@ void() SetNewParms = parm16 = 1; parm17 = SlotVal(IID_WP_AK74, 30); - parm18 = SlotVal(IID_GREN_SMOKE, 500); + parm18 = SlotVal(IID_GREN_SMOKE, 5); parm19 = SlotVal(IID_ARM_LEATHER, 1); parm20 = SlotVal(IID_AM_AK74, 120); parm21 = SlotVal(IID_AM_MOONLIGHT, 120); diff --git a/quakec/fallout2/combat.qc b/quakec/fallout2/combat.qc index cfefd3b02..212b01757 100644 --- a/quakec/fallout2/combat.qc +++ b/quakec/fallout2/combat.qc @@ -265,6 +265,10 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage = // do the damage //different sorts of armour simply subtract different ammounts + //this makes armor like the force armor good against many small rounds + //(SMG, shotguns, swords, etc) but useless against big damage (grenades) + //power armor, which has the best of both worlds, is also the heaviest :p + switch(ToIID(targ.islot3)) { case IID_ARM_SHIRT: diff --git a/quakec/fallout2/doors.qc b/quakec/fallout2/doors.qc index cbf7d4d18..a39adbb80 100644 --- a/quakec/fallout2/doors.qc +++ b/quakec/fallout2/doors.qc @@ -233,8 +233,8 @@ void () door_touch = { if (self.size_y <= 128 && self.size_x <= 128) { - if (other.class == 4) - { + if (other.class == 2 || other.class == 4) //assassins as well as scientists + { //can open doors for more freedom SpawnOpenDoor(self, other); return; } diff --git a/quakec/fallout2/inventory.qc b/quakec/fallout2/inventory.qc index 5ac6df23b..1003715c4 100644 --- a/quakec/fallout2/inventory.qc +++ b/quakec/fallout2/inventory.qc @@ -252,6 +252,40 @@ float(entity e, float iid) SlotOfItem = return 0; }; +float(entity e) FindEmptySlot = +{ + if (ToIID(e.islot3) == IID_NONE) + return 3; + if (ToIID(e.islot4) == IID_NONE) + return 4; + if (ToIID(e.islot5) == IID_NONE) + return 5; + if (ToIID(e.islot6) == IID_NONE) + return 6; + if (ToIID(e.islot7) == IID_NONE) + return 7; + if (ToIID(e.islot8) == IID_NONE) + return 8; + if (ToIID(e.islot9) == IID_NONE) + return 9; + if (ToIID(e.islot10) == IID_NONE) + return 10; + if (ToIID(e.islot11) == IID_NONE) + return 11; + if (ToIID(e.islot12) == IID_NONE) + return 12; + if (ToIID(e.islot13) == IID_NONE) + return 13; + if (ToIID(e.islot14) == IID_NONE) + return 14; + if (ToIID(e.islot15) == IID_NONE) + return 15; + if (ToIID(e.islot16) == IID_NONE) + return 16; + + return 0; +}; + typedef .float slot_t; slot_t(float slot) SlotField = { diff --git a/quakec/fallout2/mod_buy.qc b/quakec/fallout2/mod_buy.qc index e8d890a8e..59f28a7e8 100644 --- a/quakec/fallout2/mod_buy.qc +++ b/quakec/fallout2/mod_buy.qc @@ -3,8 +3,8 @@ void(float cost, float type) BuyGrenade = { - local string y; - local float x; + local string z; + local float x, y; if (self.ammo_shells < cost) { @@ -13,32 +13,34 @@ void(float cost, float type) BuyGrenade = return; } - if (self.equipment == 4) - x = 2; - else - x = 1; - - if (self.handgrenade >= x) - { - self.currentmenu = "none"; - sprint(self, PRINT_HIGH, "already have a grenade.\n"); - return; - } - sound (self, CHAN_BODY, "misc/item1.wav", 1, ATTN_NORM); - self.handgrenade = self.handgrenade + 1; - self.grenadetype = type; self.ammo_shells = self.ammo_shells - cost; - y = ftos(self.bandages); - sprint(self, PRINT_HIGH, "you bought a "); - if (type == 1) - sprint(self, PRINT_HIGH, "smoke grenade.\n"); - if (type == 2) - sprint(self, PRINT_HIGH, "frag grenade.\n"); - if (type == 3) - sprint(self, PRINT_HIGH, "emp grenade.\n"); -}; + sprint(self, PRINT_HIGH, "you bought a "); + + if (type == 1) + y = IID_GREN_SMOKE; + if (type == 2) + y = IID_GREN_FRAG; + if (type == 3) + y = IID_GREN_EMP; + + z = GetItemName(y); + sprint(self, PRINT_HIGH, z); + sprint(self, PRINT_HIGH, "\n"); + + //put grenade in inventory + //finds existing grenades, otherwise, empty slot + + x = SlotOfItem(self, y); + + if (x != 0) //found existing grenades + SetItemSlot(self, x, SlotVal(y, 1)); + if (x == 0) + x = FindEmptySlot(self); + + SetItemSlot(self, x, SlotVal(y, 1)); +}; void() BuyBandages = { @@ -265,9 +267,10 @@ void (float cost, float item) BuyPerk = return; }; +/* void (float wt, float cost, float item) BuyArmor = { -/* + local float curr; local float lbs; local string x; @@ -300,7 +303,43 @@ void (float wt, float cost, float item) BuyArmor = sprint (self, PRINT_HIGH, " purchased.\n"); return; -*/ + +};*/ + +void (float wt, float cost, float item) BuyArmor = +{ + local string z; + local float x, y; + + if (self.ammo_shells < cost) + { + self.currentmenu = "none"; + sound (self, CHAN_BODY, "misc/menu3.wav", 1, ATTN_IDLE); + sprint(self, PRINT_HIGH, "not enough money.\n"); + return; + } + + sound (self, CHAN_BODY, "misc/item1.wav", 1, ATTN_NORM); + self.ammo_shells = self.ammo_shells - cost; + + sprint(self, PRINT_HIGH, "you bought "); + + z = GetItemName(item); + sprint(self, PRINT_HIGH, z); + sprint(self, PRINT_HIGH, ".\n"); + + //put new armor in armor slot + //put old armor in inventory + + x = FindEmptySlot(self); + + if (x == 0) + sprint(self, 2, "no more room. giving armor to merchant.\n"); + + if (x != 0) //found a place to stick old armor + SetItemSlot(self, x, SlotVal(self.islot3, 1)); + + SetItemSlot(self, 3, SlotVal(item, 1)); }; void (float cost, float item) BuyEquipment = @@ -506,21 +545,21 @@ void() W_PlayerMenu = if (self.currentmenu == "shop_armor") { if (self.impulse == 1) - BuyArmor(3, 03, 1); //weight, cost, item + BuyArmor(3, 03, IID_ARM_SHIRT); //weight, cost, item if (self.impulse == 2) - BuyArmor(7, 05, 2); //weight, cost, item + BuyArmor(7, 05, IID_ARM_LEATHER); //weight, cost, item if (self.impulse == 3) - BuyArmor(9, 10, 3); //weight, cost, item + BuyArmor(9, 10, IID_ARM_KEVLAR); //weight, cost, item if (self.impulse == 4) - BuyArmor(15, 12, 4); //weight, cost, item + BuyArmor(15, 12, IID_ARM_METAL); //weight, cost, item if (self.impulse == 5) - BuyArmor(12, 25, 5); //weight, cost, item + BuyArmor(12, 25, IID_ARM_COMBAT); //weight, cost, item if (self.impulse == 6) - BuyArmor(17, 35, 6); //weight, cost, item + BuyArmor(17, 35, IID_ARM_BROTHERHOOD); //weight, cost, item if (self.impulse == 7) - BuyArmor(5, 45, 7); //weight, cost, item + BuyArmor(5, 45, IID_ARM_FORCE); //weight, cost, item if (self.impulse == 8) - BuyArmor(20, 55, 8); //weight, cost, item + BuyArmor(20, 55, IID_ARM_LPOWER); //weight, cost, item return; } diff --git a/quakec/fallout2/modbuy.qc b/quakec/fallout2/modbuy.qc index d91c07d49..7b42d24fa 100644 --- a/quakec/fallout2/modbuy.qc +++ b/quakec/fallout2/modbuy.qc @@ -3,8 +3,8 @@ void(float cost, float type) BuyGrenade = { - local string y; - local float x; + local string z; + local float x, y; if (self.ammo_shells < cost) { @@ -13,30 +13,35 @@ void(float cost, float type) BuyGrenade = return; } - if (self.equipment == 4) - x = 2; - else - x = 1; - - if (self.handgrenade >= x) - { - self.currentmenu = "none"; - sprint(self, PRINT_HIGH, "already have a grenade.\n"); - return; - } - sound (self, CHAN_BODY, "misc/item1.wav", 1, ATTN_NORM); - self.handgrenade = self.handgrenade + 1; - self.grenadetype = type; self.ammo_shells = self.ammo_shells - cost; - y = ftos(self.bandages); + sprint(self, PRINT_HIGH, "you bought a "); + if (type == 1) - sprint(self, PRINT_HIGH, "smoke grenade.\n"); + y = IID_GREN_SMOKE; if (type == 2) - sprint(self, PRINT_HIGH, "frag grenade.\n"); + y = IID_GREN_FRAG; if (type == 3) - sprint(self, PRINT_HIGH, "emp grenade.\n"); + y = IID_GREN_EMP; + + z = GetItemName(y); + sprint(self, PRINT_HIGH, z); + sprint(self, PRINT_HIGH, "\n"); + + //put grenade in inventory + //finds existing grenades, otherwise, empty slot + + x = SlotOfItem(self, y); + + SlotVal(IID_GREN_SMOKE, 500) + + if (x != 0) //found existing grenades + SetItemSlot(self, x, SlotVal(y, 1)); + if (x == 0) + x = FindEmptySlot(self, y); + + SetItemSlot(self, x, SlotVal(y, 1)); };