diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 14825a4350e..eed8492ffdb 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -771,9 +771,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee contains = list(/obj/item/weapon/gun/energy/xray, /obj/item/weapon/gun/energy/xray, /obj/item/weapon/shield/energy, - /obj/item/weapon/shield/energy, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof) + /obj/item/weapon/shield/energy) cost = 125 containertype = /obj/structure/closet/crate/secure/weapon containername = "Experimental weapons crate" @@ -801,8 +799,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee access = access_security group = "Security" - -/datum/supply_packs/riot +/datum/supply_packs/riot_gear name = "Riot gear crate" contains = list(/obj/item/weapon/melee/baton, /obj/item/weapon/melee/baton, @@ -813,21 +810,87 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, /obj/item/weapon/storage/box/flashbangs, /obj/item/weapon/storage/box/beanbags, /obj/item/weapon/storage/box/handcuffs) - cost = 60 + cost = 40 containertype = /obj/structure/closet/crate/secure - containername = "Riot gear crate" + containername = "riot gear crate" access = access_armory group = "Security" +/datum/supply_packs/riot_armor + name = "Riot armor set crate" + contains = list(/obj/item/clothing/head/helmet/riot, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/gloves/arm_guard/riot, + /obj/item/clothing/shoes/leg_guard/riot) + cost = 30 + containertype = /obj/structure/closet/crate/secure + containername = "riot armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/ablative_armor + name = "Ablative armor set crate" + contains = list(/obj/item/clothing/head/helmet/laserproof, + /obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/gloves/arm_guard/laserproof, + /obj/item/clothing/shoes/leg_guard/laserproof) + cost = 40 + containertype = /obj/structure/closet/crate/secure + containername = "ablative armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/bullet_resistant_armor + name = "Bullet resistant armor set crate" + contains = list(/obj/item/clothing/head/helmet/bulletproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/gloves/arm_guard/bulletproof, + /obj/item/clothing/shoes/leg_guard/bulletproof) + cost = 35 + containertype = /obj/structure/closet/crate/secure + containername = "bullet resistant armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/combat_armor + name = "Combat armor set crate" + contains = list(/obj/item/clothing/head/helmet/combat, + /obj/item/clothing/suit/armor/combat, + /obj/item/clothing/gloves/arm_guard/combat, + /obj/item/clothing/shoes/leg_guard/combat) + cost = 40 + containertype = /obj/structure/closet/crate/secure + containername = "combat armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/tactical + name = "Tactical suits" + containertype = /obj/structure/closet/crate/secure + containername = "Tactical Suit Locker" + cost = 60 + group = "Security" + access = access_armory + contains = list(/obj/item/clothing/under/tactical, + /obj/item/clothing/suit/armor/tactical, + /obj/item/clothing/head/helmet/tactical, + /obj/item/clothing/mask/balaclava/tactical, + /obj/item/clothing/glasses/sunglasses/sechud/tactical, + /obj/item/weapon/storage/belt/security/tactical, + /obj/item/clothing/shoes/jackboots, + /obj/item/clothing/gloves/black, + /obj/item/clothing/under/tactical, + /obj/item/clothing/suit/armor/tactical, + /obj/item/clothing/head/helmet/tactical, + /obj/item/clothing/mask/balaclava/tactical, + /obj/item/clothing/glasses/sunglasses/sechud/tactical, + /obj/item/weapon/storage/belt/security/tactical, + /obj/item/clothing/shoes/jackboots, + /obj/item/clothing/gloves/black) + /datum/supply_packs/energyweapons name = "Energy weapons crate" contains = list(/obj/item/weapon/gun/energy/laser, @@ -841,9 +904,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/shotgun name = "Shotgun crate" - contains = list(/obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/weapon/storage/box/shotgunammo, + contains = list(/obj/item/weapon/storage/box/shotgunammo, /obj/item/weapon/storage/box/shotgunshells, /obj/item/weapon/gun/projectile/shotgun/pump/combat, /obj/item/weapon/gun/projectile/shotgun/pump/combat) @@ -855,9 +916,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/erifle name = "Energy marksman crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/weapon/gun/energy/sniperrifle, + contains = list(/obj/item/weapon/gun/energy/sniperrifle, /obj/item/weapon/gun/energy/sniperrifle) cost = 90 containertype = /obj/structure/closet/crate/secure @@ -922,27 +981,13 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee group = "Security" */ -/datum/supply_packs/expenergy - name = "Experimental energy gear crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/weapon/gun/energy/gun, +/datum/supply_packs/energy_guns + name = "energy guns crate" + contains = list(/obj/item/weapon/gun/energy/gun, /obj/item/weapon/gun/energy/gun) cost = 50 containertype = /obj/structure/closet/crate/secure - containername = "Experimental energy gear crate" - access = access_armory - group = "Security" - -/datum/supply_packs/exparmor - name = "Experimental armor crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot) - cost = 35 - containertype = /obj/structure/closet/crate/secure - containername = "Experimental armor crate" + containername = "energy guns crate" access = access_armory group = "Security" @@ -1320,30 +1365,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Radiation suit locker" group = "Engineering" -/datum/supply_packs/tactical - name = "Tactical suits" - containertype = /obj/structure/closet/crate/secure - containername = "Tactical Suit Locker" - cost = 45 - group = "Security" - access = access_armory - contains = list(/obj/item/clothing/under/tactical, - /obj/item/clothing/suit/armor/tactical, - /obj/item/clothing/head/helmet/tactical, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/glasses/sunglasses/sechud/tactical, - /obj/item/weapon/storage/belt/security/tactical, - /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/gloves/black, - /obj/item/clothing/under/tactical, - /obj/item/clothing/suit/armor/tactical, - /obj/item/clothing/head/helmet/tactical, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/glasses/sunglasses/sechud/tactical, - /obj/item/weapon/storage/belt/security/tactical, - /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/gloves/black) - /datum/supply_packs/carpet name = "Imported carpet" containertype = /obj/structure/closet diff --git a/code/game/objects/items/devices/uplink_categories.dm b/code/game/objects/items/devices/uplink_categories.dm index ae005022be0..68ed72a6fb9 100644 --- a/code/game/objects/items/devices/uplink_categories.dm +++ b/code/game/objects/items/devices/uplink_categories.dm @@ -27,6 +27,9 @@ /datum/uplink_category/stealth_items name = "Stealth and Camouflage Items" +/datum/uplink_category/armor + name = "Armor" + /datum/uplink_category/tools name = "Devices and Tools" diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm index 38811833cde..3c4ecc3e19d 100644 --- a/code/game/objects/items/devices/uplink_items.dm +++ b/code/game/objects/items/devices/uplink_items.dm @@ -305,6 +305,22 @@ datum/uplink_item/dd_SortValue() item_cost = 6 path = /obj/item/weapon/disk/file/cameras/syndicate +/******** +* Armor * +********/ +/datum/uplink_item/item/armor + category = /datum/uplink_category/armor + +/datum/uplink_item/item/armor/combat + name = "Combat Armor Set" + item_cost = 5 + path = /obj/item/weapon/storage/box/syndie_kit/combat_armor + +/datum/uplink_item/item/armor/heavy_vest + name = "Heavy Armor Vest" + item_cost = 4 + path = /obj/item/clothing/suit/storage/vest/heavy/merc + /******************** * Devices and Tools * ********************/ @@ -351,11 +367,6 @@ datum/uplink_item/dd_SortValue() item_cost = 3 path = /obj/item/clothing/glasses/thermal/syndi -/datum/uplink_item/item/tools/heavy_vest - name = "Heavy Armor Vest" - item_cost = 4 - path = /obj/item/clothing/suit/storage/vest/heavy/merc - /datum/uplink_item/item/tools/powersink name = "Powersink (DANGER!)" item_cost = 5 @@ -385,7 +396,7 @@ datum/uplink_item/dd_SortValue() item_cost = 3 path = /obj/item/weapon/storage/secure/briefcase/money desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities." - + /datum/uplink_item/item/tools/crystal name = "Tradable Crystal" item_cost = 1 diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index 8889a52d91c..4359918ceea 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -61,6 +61,9 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/voice) items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/camera_floppy, 10, 0) + items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/heavy_vest) + items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/combat) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/toolbox, reselect_propbability = 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/plastique) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_radio) @@ -69,7 +72,6 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/clerical) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/space_suit, 50, 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/thermal) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/heavy_vest) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/powersink, 10, 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/ai_module, 25, 0) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/teleporter, 10, 0) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index fe6cd98e71d..7f7c75e8177 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -50,7 +50,7 @@ /obj/item/weapon/shield/riot name = "riot shield" - desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." + desc = "A shield adept for close quarters engagement. It's also capable of protecting from less powerful projectiles." icon = 'icons/obj/weapons.dmi' icon_state = "riot" flags = CONDUCT @@ -65,17 +65,31 @@ attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time -/obj/item/weapon/shield/riot/handle_shield(mob/user) - . = ..() - if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) +/obj/item/weapon/shield/riot/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(user.incapacitated()) + return 0 -/obj/item/weapon/shield/riot/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - //plastic shields do not stop bullets or lasers, even in space. Will block beanbags, rubber bullets, and stunshots just fine though. - if((is_sharp(P) && damage > 10) || istype(P, /obj/item/projectile/beam)) - return 0 - return base_block_chance + //block as long as they are not directly behind us + var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block + if(check_shield_arc(user, bad_arc, damage_source, attacker)) + if(prob(get_block_chance(user, damage, damage_source, attacker))) + //At this point, we succeeded in our roll for a block attempt, however these kinds of shields struggle to stand up + //to strong bullets and lasers. They still do fine to pistol rounds of all kinds, however. + if(istype(damage_source, /obj/item/projectile)) + var/obj/item/projectile/P = damage_source + if((is_sharp(P) && P.armor_penetration >= 10) || istype(P, /obj/item/projectile/beam)) + //If we're at this point, the bullet/beam is going to go through the shield, however it will hit for less damage. + //Bullets get slowed down, while beams are diffused as they hit the shield, so these shields are not /completely/ + //useless. Extremely penetrating projectiles will go through the shield without less damage. + user.visible_message("\The [user]'s [src.name] is pierced by [attack_text]!") + if(P.armor_penetration < 30) //PTR bullets and x-rays will bypass this entirely. + P.damage = P.damage / 2 + return 0 + //Otherwise, if we're here, we're gonna stop the attack entirely. + user.visible_message("\The [user] blocks [attack_text] with \the [src]!") + playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) + return 1 + return 0 /obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/melee/baton)) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 5b46e990f0b..4f80e85a529 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -256,4 +256,14 @@ new /obj/item/weapon/spacecash/c1000(src) new /obj/item/weapon/spacecash/c1000(src) +/obj/item/weapon/storage/box/syndie_kit/combat_armor + name = "combat armor kit" + desc = "Contains a full set of combat armor." +/obj/item/weapon/storage/box/syndie_kit/combat_armor/New() + ..() + new /obj/item/clothing/head/helmet/combat(src) + new /obj/item/clothing/suit/armor/combat(src) + new /obj/item/clothing/gloves/arm_guard/combat(src) + new /obj/item/clothing/shoes/leg_guard/combat(src) + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 27ab1518b48..aa820a48fa1 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -202,8 +202,8 @@ /obj/structure/closet/wardrobe/yellow name = "yellow wardrobe" - icon_state = "wardrobe-y" - icon_closed = "wardrobe-y" + icon_state = "yellow" + icon_closed = "yellow" /obj/structure/closet/wardrobe/yellow/New() ..() @@ -342,27 +342,12 @@ new /obj/item/clothing/shoes/slippers(src) new /obj/item/clothing/shoes/slippers(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/science(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) return -/obj/structure/closet/wardrobe/toxins_white/New() - ..() - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist/skirt(src) - new /obj/item/clothing/under/rank/scientist/skirt(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/slippers(src) - new /obj/item/clothing/shoes/slippers(src) - new /obj/item/clothing/shoes/slippers(src) - return - - /obj/structure/closet/wardrobe/robotics_black name = "robotics wardrobe" icon_state = "black" @@ -378,6 +363,10 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/gloves/black(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) return @@ -396,6 +385,10 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) + new /obj/item/weapon/storage/backpack/chemistry(src) + new /obj/item/weapon/storage/backpack/chemistry(src) + new /obj/item/weapon/storage/backpack/satchel_chem(src) + new /obj/item/weapon/storage/backpack/satchel_chem(src) return @@ -414,6 +407,10 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) + new /obj/item/weapon/storage/backpack/genetics(src) + new /obj/item/weapon/storage/backpack/genetics(src) + new /obj/item/weapon/storage/backpack/satchel_gen(src) + new /obj/item/weapon/storage/backpack/satchel_gen(src) return @@ -434,6 +431,10 @@ new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src) new /obj/item/clothing/mask/surgical(src) new /obj/item/clothing/mask/surgical(src) + new /obj/item/weapon/storage/backpack/virology(src) + new /obj/item/weapon/storage/backpack/virology(src) + new /obj/item/weapon/storage/backpack/satchel_vir(src) + new /obj/item/weapon/storage/backpack/satchel_vir(src) return @@ -586,3 +587,5 @@ new /obj/item/clothing/under/suit_jacket/really_black(src) new /obj/item/clothing/under/suit_jacket/red(src) new /obj/item/clothing/under/scratch(src) + new /obj/item/weapon/storage/backpack/satchel(src) + new /obj/item/weapon/storage/backpack/satchel(src) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 64129a80f7d..a7cf63b34be 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -246,11 +246,13 @@ else if(reinf && state == 0) anchored = !anchored update_nearby_icons() + update_verbs() playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) user << (anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.") else if(!reinf) anchored = !anchored update_nearby_icons() + update_verbs() playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) user << (anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1) @@ -261,6 +263,7 @@ if(!glasstype) user << "You're not sure how to dismantle \the [src] properly." else + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) visible_message("[user] dismantles \the [src].") if(dir == SOUTHWEST) var/obj/item/stack/material/mats = new glasstype(loc) @@ -288,7 +291,7 @@ return -/obj/structure/window/verb/rotate() +/obj/structure/window/proc/rotate() set name = "Rotate Window Counter-Clockwise" set category = "Object" set src in oview(1) @@ -307,7 +310,7 @@ return -/obj/structure/window/verb/revrotate() +/obj/structure/window/proc/revrotate() set name = "Rotate Window Clockwise" set category = "Object" set src in oview(1) @@ -373,6 +376,15 @@ for(var/obj/structure/window/W in orange(src, 1)) W.update_icon() +//Updates the availabiliy of the rotation verbs +/obj/structure/window/proc/update_verbs() + if(anchored) + verbs -= /obj/structure/window/proc/rotate + verbs -= /obj/structure/window/proc/revrotate + else + verbs += /obj/structure/window/proc/rotate + verbs += /obj/structure/window/proc/revrotate + //merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) /obj/structure/window/update_icon() //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. diff --git a/code/modules/clothing/gloves/arm_guards.dm b/code/modules/clothing/gloves/arm_guards.dm new file mode 100644 index 00000000000..ada10f274af --- /dev/null +++ b/code/modules/clothing/gloves/arm_guards.dm @@ -0,0 +1,42 @@ +/obj/item/clothing/gloves/arm_guard + name = "arm guards" + desc = "These arm guards will protect your hands and arms." + body_parts_covered = HANDS|ARMS + slowdown = 1 + w_class = 3 + +/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) //This will only run if no other problems occured when equiping. + if(H.wear_suit) + if(H.wear_suit.body_parts_covered & ARMS) + H << "You can't wear \the [src] with \the [H.wear_suit], it's in the way." + return 0 + return 1 + +/obj/item/clothing/gloves/arm_guard/laserproof + name = "ablative arm guards" + desc = "These arm guards will protect your hands and arms from energy weapons." + icon_state = "arm_guards_laser" + siemens_coefficient = 0.4 //This is worse than the other ablative pieces, to avoid this from becoming the poor warden's insulated gloves. + armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/arm_guard/bulletproof + name = "bullet resistant arm guards" + desc = "These arm guards will protect your hands and arms from ballistic weapons." + icon_state = "arm_guards_bullet" + siemens_coefficient = 0.7 + armor = list(melee = 10, bullet = 80, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/arm_guard/riot + name = "riot arm guards" + desc = "These arm guards will protect your hands and arms from close combat weapons." + icon_state = "arm_guards_riot" + siemens_coefficient = 0.5 + armor = list(melee = 80, bullet = 10, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/arm_guard/combat + name = "combat arm guards" + desc = "These arm guards will protect your hands and arms from a variety of weapons." + icon_state = "arm_guards_combat" + siemens_coefficient = 0.6 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0) \ No newline at end of file diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 5eec53ebcef..8d1614301f5 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -7,7 +7,7 @@ slot_r_hand_str = "helmet", ) flags = THICKMATERIAL - armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE @@ -21,7 +21,7 @@ name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks." icon_state = "riot" - armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0) + armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEEARS siemens_coefficient = 0.7 action_button_name = "Toggle Visor" @@ -42,9 +42,33 @@ user << "You flip the visor down." update_clothing_icon() //so our mob-overlays update +/obj/item/clothing/head/helmet/laserproof + name = "ablative helmet" + desc = "It's a helmet specifically designed to protect against energy projectiles." + icon_state = "helmet_reflec" + armor = list(melee = 10, bullet = 10, laser = 80 ,energy = 50, bomb = 0, bio = 0, rad = 0) + flags_inv = HIDEEARS + siemens_coefficient = 0.1 + +/obj/item/clothing/head/helmet/bulletproof + name = "bullet-resistant helmet" + desc = "It's a helmet specifically designed to protect against ballistic projectiles." + icon_state = "helmet_bulletproof" + armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0) + flags_inv = HIDEEARS + siemens_coefficient = 0.7 + +/obj/item/clothing/head/helmet/combat + name = "combat helmet" + desc = "It's a general purpose combat helmet, designed to protect against typical dangers to your head." + icon_state = "helmet_combat" + armor = list(melee = 50, bullet = 50, laser = 50 ,energy = 30, bomb = 30, bio = 0, rad = 0) + flags_inv = HIDEEARS + siemens_coefficient = 0.6 + /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" - desc = "They're often used by highly trained SWAT Members." + desc = "They're often used by highly trained SWAT Officers." icon_state = "swat" armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) flags_inv = HIDEEARS|HIDEEYES @@ -78,7 +102,7 @@ "Unathi" = 'icons/mob/species/unathi/helmet.dmi', ) - armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) + armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) flags_inv = HIDEEARS siemens_coefficient = 0.7 diff --git a/code/modules/clothing/shoes/leg_guards.dm b/code/modules/clothing/shoes/leg_guards.dm new file mode 100644 index 00000000000..5b4d8163939 --- /dev/null +++ b/code/modules/clothing/shoes/leg_guards.dm @@ -0,0 +1,42 @@ +/obj/item/clothing/shoes/leg_guard + name = "leg guards" + desc = "These will protect your legs and feet." + body_parts_covered = LEGS|FEET + slowdown = 1 + w_class = 3 + +/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) //This will only run if no other problems occured when equiping. + if(H.wear_suit) + if(H.wear_suit.body_parts_covered & LEGS) + H << "You can't wear \the [src] with \the [H.wear_suit], it's in the way." + return 0 + return 1 + +/obj/item/clothing/shoes/leg_guard/laserproof + name = "ablative leg guards" + desc = "These will protect your legs and feet from energy weapons." + icon_state = "leg_guards_laser" + siemens_coefficient = 0.1 + armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/shoes/leg_guard/bulletproof + name = "bullet resistant leg guards" + desc = "These will protect your legs and feet from ballistic weapons." + icon_state = "leg_guards_bullet" + siemens_coefficient = 0.7 + armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/shoes/leg_guard/riot + name = "riot leg guards" + desc = "These will protect your legs and feet from close combat weapons." + icon_state = "leg_guards_riot" + siemens_coefficient = 0.5 + armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/shoes/leg_guard/combat + name = "combat leg guards" + desc = "These will protect your legs and feet from a variety of weapons." + icon_state = "leg_guards_combat" + siemens_coefficient = 0.6 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0) \ No newline at end of file diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 76e1a4b8f71..41b0209e4d0 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -10,6 +10,16 @@ max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.6 +/obj/item/clothing/suit/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) //This will only run if no other problems occured when equiping. + for(var/obj/item/clothing/I in list(H.gloves, H.shoes)) + if(I && (src.body_parts_covered & ARMS && I.body_parts_covered & ARMS) ) + H << "You can't wear \the [src] with \the [I], it's in the way." + return 0 + if(I && (src.body_parts_covered & LEGS && I.body_parts_covered & LEGS) ) + H << "You can't wear \the [src] with \the [I], it's in the way." + return 0 + return 1 /obj/item/clothing/suit/armor/vest name = "armor" @@ -17,7 +27,7 @@ icon_state = "armor" item_state = "armor" blood_overlay_type = "armor" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) /obj/item/clothing/suit/armor/vest/alt name = "security armor" @@ -47,24 +57,21 @@ /obj/item/clothing/suit/armor/riot - name = "Riot Suit" - desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." + name = "riot vest" + desc = "A vest with heavy padding to protect against melee attacks." icon_state = "riot" item_state = "swat_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS slowdown = 1 armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT siemens_coefficient = 0.5 /obj/item/clothing/suit/armor/riot/alt - name = "Riot Suit" - desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." icon_state = "riot_new" item_state = "riot_new" /obj/item/clothing/suit/armor/bulletproof - name = "Bulletproof Vest" + name = "bullet resistant vest" desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles." icon_state = "bulletproof" item_state = "armor" @@ -73,20 +80,18 @@ siemens_coefficient = 0.7 /obj/item/clothing/suit/armor/bulletproof/alt - name = "Bulletproof Vest" - desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles." icon_state = "bulletproof_new" item_state = "bulletproof_new" blood_overlay_type = "armor" /obj/item/clothing/suit/armor/laserproof - name = "Ablative Armor Vest" + name = "ablative armor vest" desc = "A vest that excels in protecting the wearer against energy projectiles." icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0 + siemens_coefficient = 0.1 /obj/item/clothing/suit/armor/laserproof/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") if(istype(damage_source, /obj/item/projectile/energy) || istype(damage_source, /obj/item/projectile/beam)) @@ -108,6 +113,25 @@ return PROJECTILE_CONTINUE // complete projectile permutation +/obj/item/clothing/suit/armor/combat + name = "combat vest" + desc = "A vest that protects the wearer from several common types of weaponry." + icon_state = "combat" + item_state = "combat" + blood_overlay_type = "armor" + armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0) + siemens_coefficient = 0.6 + +/obj/item/clothing/suit/armor/tactical + name = "tactical armor" + desc = "A suit of armor most often used by Special Weapons and Tactics squads. Includes padded vest with pockets along with shoulder and kneeguards." + icon_state = "swatarmor" + item_state = "armor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + slowdown = 1 + armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) + siemens_coefficient = 0.7 + /obj/item/clothing/suit/armor/swat name = "swat suit" desc = "A heavily armored suit that protects against moderate damage. Used in special operations." @@ -143,7 +167,7 @@ item_state = "armor" blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) //Reactive armor @@ -200,42 +224,6 @@ src.item_state = "reactiveoff" ..() -/obj/item/clothing/suit/armor/tactical - name = "tactical armor" - desc = "A suit of armor most often used by Special Weapons and Tactics squads. Includes padded vest with pockets along with shoulder and kneeguards." - icon_state = "swatarmor" - item_state = "armor" - var/obj/item/weapon/gun/holstered = null - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - slowdown = 1 - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0) - siemens_coefficient = 0.7 - var/obj/item/clothing/accessory/holster/holster - -/obj/item/clothing/suit/armor/tactical/New() - ..() - holster = new(src) - -/obj/item/clothing/suit/armor/tactical/attackby(obj/item/W as obj, mob/user as mob) - ..() - holster.attackby(W, user) - -/obj/item/clothing/suit/armor/tactical/verb/holster() - set name = "Holster" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - - if(!holster.holstered) - var/obj/item/W = usr.get_active_hand() - if(!istype(W, /obj/item)) - usr << "You need your gun equiped to holster it." - return - holster.holster(W, usr) - else - holster.unholster(usr) - //Non-hardsuit ERT armor. /obj/item/clothing/suit/armor/vest/ert name = "emergency response team armor" @@ -274,7 +262,7 @@ desc = "A simple kevlar plate carrier." icon_state = "kvest" item_state = "kvest" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) body_parts_covered = UPPER_TORSO|LOWER_TORSO @@ -331,7 +319,7 @@ desc = "A heavy kevlar plate carrier with webbing attached." icon_state = "webvest" item_state = "webvest" - armor = list(melee = 50, bullet = 40, laser = 50, energy = 25, bomb = 30, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 40, laser = 40, energy = 25, bomb = 25, bio = 0, rad = 0) slowdown = 1 /obj/item/clothing/suit/storage/vest/heavy/officer diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index c07fcca6605..07d49030f7f 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -56,7 +56,8 @@ reset_memory() user << "You reset the machine's memory." else - custom_interface(user) + user.set_machine(src) + interact(user) /obj/machinery/cash_register/AltClick(mob/user) @@ -64,8 +65,8 @@ open_cash_box() -/obj/machinery/cash_register/proc/custom_interface(mob/user as mob) - var/dat = "