Adds a modular armour version of the explorer suit and adds sprites to specialist armour (#7921)

* Adds a modular armour version of the explorer suit.

* Adds material armour building steps for plates, arm guards and leg guards

Adjusts chitin hardness and weight (weaker and lighter)

* Maps a drying rack and washing machine into the planetside outpost

* Fixes QDEL issue, adds sprites to the specialist armours, and adjusts the cargo crates to match.

* Changes map format to TGM

* Removes flashy pixel on south facing leg sprites

* Adds proper returns, removes copypasta, fixes labeller & pen interactions
This commit is contained in:
FenodyreeAv
2021-03-07 20:36:51 +00:00
committed by GitHub
parent b695657ca8
commit ca583e2cb2
11 changed files with 225 additions and 39 deletions
+3 -12
View File
@@ -281,10 +281,7 @@
name = "Armor - Riot plates"
contains = list(
/obj/item/clothing/head/helmet/riot,
/obj/item/clothing/suit/armor/pcarrier,
/obj/item/clothing/accessory/armor/armorplate/riot,
/obj/item/clothing/accessory/armor/armguards/riot,
/obj/item/clothing/accessory/armor/legguards/riot
/obj/item/clothing/suit/armor/pcarrier/riot/full
)
cost = 40
containertype = /obj/structure/closet/crate/secure/lawson
@@ -308,10 +305,7 @@
name = "Armor - Ablative plates"
contains = list(
/obj/item/clothing/head/helmet/laserproof,
/obj/item/clothing/suit/armor/pcarrier,
/obj/item/clothing/accessory/armor/armorplate/laserproof,
/obj/item/clothing/accessory/armor/armguards/laserproof,
/obj/item/clothing/accessory/armor/legguards/laserproof
/obj/item/clothing/suit/armor/pcarrier/laserproof/full
)
cost = 50
containertype = /obj/structure/closet/crate/secure/lawson
@@ -335,10 +329,7 @@
name = "Armor - Ballistic plates"
contains = list(
/obj/item/clothing/head/helmet/bulletproof,
/obj/item/clothing/suit/armor/pcarrier,
/obj/item/clothing/accessory/armor/armorplate/bulletproof,
/obj/item/clothing/accessory/armor/armguards/bulletproof,
/obj/item/clothing/accessory/armor/legguards/bulletproof
/obj/item/clothing/suit/armor/pcarrier/bulletproof/full
)
cost = 50
containertype = /obj/structure/closet/crate/secure/heph
@@ -31,7 +31,9 @@ Protectiveness | Armor %
var/applies_material_color = TRUE
var/unbreakable = FALSE
var/default_material = null // Set this to something else if you want material attributes on init.
var/material_armor_modifer = 1 // Adjust if you want seperate types of armor made from the same material to have different protectiveness (e.g. makeshift vs real armor)
var/material_armor_modifier = 1 // Adjust if you want seperate types of armor made from the same material to have different protectiveness (e.g. makeshift vs real armor)
var/material_slowdown_modifier = 0
var/material_slowdown_multiplier = 1
/obj/item/clothing/New(var/newloc, var/material_key)
..(newloc)
@@ -138,7 +140,7 @@ Protectiveness | Armor %
return ..()
var/reflectchance = (40 * material.reflectivity) - round(damage/3)
reflectchance *= material_armor_modifer
reflectchance *= material_armor_modifier
if(!(def_zone in list(BP_TORSO, BP_GROIN)))
reflectchance /= 2
if(P.starting && prob(reflectchance))
@@ -166,17 +168,17 @@ Protectiveness | Armor %
if(material)
var/melee_armor = 0, bullet_armor = 0, laser_armor = 0, energy_armor = 0, bomb_armor = 0
melee_armor = calculate_material_armor(material.protectiveness * material_armor_modifer)
melee_armor = calculate_material_armor(material.protectiveness * material_armor_modifier)
bullet_armor = calculate_material_armor((material.protectiveness * (material.hardness / 100) * material_armor_modifer) * 0.7)
bullet_armor = calculate_material_armor((material.protectiveness * (material.hardness / 100) * material_armor_modifier) * 0.7)
laser_armor = calculate_material_armor((material.protectiveness * (material.reflectivity + 1) * material_armor_modifer) * 0.7)
laser_armor = calculate_material_armor((material.protectiveness * (material.reflectivity + 1) * material_armor_modifier) * 0.7)
if(material.opacity != 1)
laser_armor *= max(material.opacity - 0.3, 0) // Glass and such has an opacity of 0.3, but lasers should go through glass armor entirely.
energy_armor = calculate_material_armor((material.protectiveness * material_armor_modifer) * 0.4)
energy_armor = calculate_material_armor((material.protectiveness * material_armor_modifier) * 0.4)
bomb_armor = calculate_material_armor((material.protectiveness * material_armor_modifer) * 0.5)
bomb_armor = calculate_material_armor((material.protectiveness * material_armor_modifier) * 0.5)
// Makes sure the numbers stay capped.
for(var/number in list(melee_armor, bullet_armor, laser_armor, energy_armor, bomb_armor))
@@ -190,7 +192,12 @@ Protectiveness | Armor %
if(!isnull(material.conductivity))
siemens_coefficient = between(0, material.conductivity / 10, 10)
slowdown = between(0, round(material.weight / 10, 0.1), 6)
var/slowdownModified = between(0, round(material.weight / 10, 0.1), 6)
var/slowdownUncapped = (material_slowdown_multiplier * slowdownModified) - material_slowdown_modifier
slowdown = max(slowdownUncapped, 0)
/obj/item/clothing/suit/armor/material
name = "armor"
@@ -201,6 +208,67 @@ Protectiveness | Armor %
desc = "This appears to be two 'sheets' of a material held together by cable. If the sheets are strong, this could be rather protective."
icon_state = "material_armor_makeshift"
/obj/item/clothing/accessory/material/makeshift/light //Craftable with 4 material sheets, less slowdown, less armour
name = "light armor plate"
desc = "A thin plate of padded material, designed to fit into a plate carrier. Attaches to a plate carrier."
icon = 'icons/obj/clothing/modular_armor.dmi'
icon_state = "armor_light"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
slot = ACCESSORY_SLOT_ARMOR_C
material_armor_modifier = 0.8
material_slowdown_modifier = 0.5 //Subtracted from total slowdown
material_slowdown_multiplier = 0.8 //Multiplied by total slowdown
/obj/item/clothing/accessory/material/makeshift/heavy //Craftable with 8 material sheets, more slowdown, more armour
name = "heavy armor plate"
desc = "A thick plate of padded material, designed to fit into a plate carrier. Attaches to a plate carrier."
icon = 'icons/obj/clothing/modular_armor.dmi'
icon_state = "armor_medium"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
slot = ACCESSORY_SLOT_ARMOR_C
material_armor_modifier = 1.2
material_slowdown_modifier = 0
material_slowdown_multiplier = 1
/obj/item/clothing/accessory/material/custom //Not yet craftable, advanced version made with science!
name = "custom armor plate"
desc = "A composite plate of custom machined material, designed to fit into a plate carrier. Attaches to a plate carrier."
icon = 'icons/obj/clothing/modular_armor.dmi'
icon_state = "armor_tactical"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
slot = ACCESSORY_SLOT_ARMOR_C
material_armor_modifier = 1.2
material_slowdown_modifier = 0.5
material_slowdown_multiplier = 0.8
/obj/item/clothing/accessory/material/makeshift/armguards
name = "arm guards"
desc = "A pair of arm pads reinforced with material. Attaches to a plate carrier."
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
icon = 'icons/obj/clothing/modular_armor.dmi'
icon_override = 'icons/mob/modular_armor.dmi'
icon_state = "armguards_material"
gender = PLURAL
body_parts_covered = ARMS
slot = ACCESSORY_SLOT_ARMOR_A
material_armor_modifier = 0.8
material_slowdown_modifier = 0.8
material_slowdown_multiplier = 0.8
/obj/item/clothing/accessory/material/makeshift/legguards
name = "leg guards"
desc = "A pair of leg guards reinforced with material. Attaches to a plate carrier."
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
icon = 'icons/obj/clothing/modular_armor.dmi'
icon_override = 'icons/mob/modular_armor.dmi'
icon_state = "legguards_material"
gender = PLURAL
body_parts_covered = LEGS
slot = ACCESSORY_SLOT_ARMOR_L
material_armor_modifier = 0.8
material_slowdown_modifier = 0.8
material_slowdown_multiplier = 0.8
/obj/item/clothing/suit/armor/material/makeshift/durasteel
default_material = "durasteel"
@@ -218,6 +286,9 @@ Protectiveness | Armor %
thrown_force_divisor = 0.2
var/wired = FALSE
/obj/item/weapon/material/armor_plating/insert
unbreakable = FALSE
/obj/item/weapon/material/armor_plating/attackby(var/obj/O, mob/user)
if(istype(O, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/S = O
@@ -249,6 +320,54 @@ Protectiveness | Armor %
else
..()
//Make plating inserts for modular armour.
/obj/item/weapon/material/armor_plating/insert/attackby(var/obj/O, mob/user)
. = ..()
if(istype(O, /obj/item/weapon/weldingtool))
var /obj/item/weapon/weldingtool/S = O
if(S.remove_fuel(0,user))
if(!src || !S.isOn()) return
to_chat(user, "<span class='notice'>You trim down the edges to size.</span>")
user.drop_from_inventory(src)
var/obj/item/clothing/accessory/material/makeshift/light/new_armor = new(null, src.material.name)
user.put_in_hands(new_armor)
qdel(src)
return
if(istype(O, /obj/item/weapon/material/armor_plating/insert))
var/obj/item/weapon/material/armor_plating/insert/second_plate = O
if(second_plate.material != src.material)
to_chat(user, "<span class='warning'>Both plates need to be the same type of material.</span>")
return
to_chat(user, "<span class='notice'>You bond the two plates together.</span>")
user.drop_from_inventory(src)
user.drop_from_inventory(second_plate)
var/obj/item/clothing/accessory/material/makeshift/heavy/new_armor = new(null, src.material.name)
user.put_in_hands(new_armor)
qdel(second_plate)
qdel(src)
return
if(istype(O, /obj/item/weapon/tool/wirecutters))
to_chat(user, "<span class='notice'>You split the plate down the middle, and joint it at the elbow.</span>")
user.drop_from_inventory(src)
var/obj/item/clothing/accessory/material/makeshift/armguards/new_armor = new(null, src.material.name)
user.put_in_hands(new_armor)
qdel(src)
return
if(istype(O, /obj/item/stack/material))
var/obj/item/stack/material/S = O
if(S.material == get_material_by_name("leather"))
if(S.use(2))
to_chat(user, "<span class='notice'>You curve the plate inwards, and add a strap for adjustment.</span>")
user.drop_from_inventory(src)
var/obj/item/clothing/accessory/material/makeshift/legguards/new_armor = new(null, src.material.name)
user.put_in_hands(new_armor)
qdel(src)
return
// Used to craft the makeshift helmet
/obj/item/clothing/head/helmet/bucket
+9
View File
@@ -117,6 +117,15 @@
min_cold_protection_temperature = T0C - 20
cold_protection = HEAD
/obj/item/clothing/head/helmet/explorer
name = "explorer hood"
desc = "An armoured hood for exploring harsh environments."
icon_state = "explorer"
flags = THICKMATERIAL
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35)
/obj/item/clothing/head/helmet/swat
name = "\improper SWAT helmet"
desc = "They're often used by highly trained SWAT Officers."
+40
View File
@@ -539,6 +539,14 @@
return 0
return 1
/obj/item/clothing/suit/armor/pcarrier/explorer
name = "explorer suit"
desc = "A lightweight explorer plate carrier. It can be equipped with armor plates, but only protects from the cold on it's own."
icon_state = "explorer"
flags = THICKMATERIAL
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
/obj/item/clothing/suit/armor/pcarrier/light
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate)
@@ -593,6 +601,30 @@
desc = "A lightweight tan plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon_state = "pcarrier_tan"
/obj/item/clothing/suit/armor/pcarrier/laserproof
name = "ablative plate carrier"
desc = "A specialist laser resistant plate carrier. It can be equipped with armour plates, but provides very little protection of its own."
icon_state = "ablative"
armor = list(melee = 0, bullet = 0, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/laserproof)
/obj/item/clothing/suit/armor/pcarrier/bulletproof
name = "ballistic plate carrier"
desc = "A specialist bullet resistant plate carrier. It can be equipped with armour plates, but provides very little protection of its own."
icon_state = "ballistic"
armor = list(melee = 0, bullet = 5, laser = 0, energy = 0, bomb = 5, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/bulletproof)
/obj/item/clothing/suit/armor/pcarrier/riot
name = "riot plate carrier"
desc = "A specialist melee resistant plate carrier. It can be equipped with armour plates, but provides very little protection of its own."
icon_state = "riot"
armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot)
/obj/item/clothing/suit/armor/pcarrier/explorer/light
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/explorer, /obj/item/clothing/accessory/armor/armguards/explorer, /obj/item/clothing/accessory/armor/legguards/explorer, /obj/item/clothing/accessory/storage/pouches/green)
/obj/item/clothing/suit/armor/pcarrier/tan/tactical
name = "tactical plate carrier"
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/tactical, /obj/item/clothing/accessory/storage/pouches/large/tan)
@@ -600,3 +632,11 @@
/obj/item/clothing/suit/armor/pcarrier/merc
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/merc, /obj/item/clothing/accessory/armor/armguards/merc, /obj/item/clothing/accessory/armor/legguards/merc, /obj/item/clothing/accessory/storage/pouches/large)
/obj/item/clothing/suit/armor/pcarrier/laserproof/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/laserproof, /obj/item/clothing/accessory/armor/armguards/laserproof, /obj/item/clothing/accessory/armor/legguards/laserproof, /obj/item/clothing/accessory/storage/pouches/blue)
/obj/item/clothing/suit/armor/pcarrier/bulletproof/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/bulletproof, /obj/item/clothing/accessory/armor/armguards/bulletproof, /obj/item/clothing/accessory/armor/legguards/bulletproof, /obj/item/clothing/accessory/storage/pouches)
/obj/item/clothing/suit/armor/pcarrier/riot/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot, /obj/item/clothing/accessory/armor/armguards/riot, /obj/item/clothing/accessory/armor/legguards/riot, /obj/item/clothing/accessory/storage/pouches)
@@ -92,6 +92,12 @@
armor = list(melee = 30, bullet = 15, laser = 40, energy = 10, bomb = 25, bio = 0, rad = 0)
slot = ACCESSORY_SLOT_ARMOR_C
/obj/item/clothing/accessory/armor/armorplate/explorer
name = "explorer armor plate"
desc = "A flexible plate made of synthetic fibers, designed to protect from the Sivian fauna. Attaches to a plate carrier."
icon_state = "armor_light"
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35)
/obj/item/clothing/accessory/armor/armorplate/stab
name = "mesh armor plate"
desc = "A mesh armor plate made of steel-reinforced synthetic fibers, great for dealing with small blades. Attaches to a plate carrier."
@@ -145,7 +151,7 @@
/obj/item/clothing/accessory/armor/armorplate/laserproof
name = "ablative armor plate"
desc = "A durasteel-scaled synthetic armor plate, providing good protection against lasers. Attaches to a plate carrier."
icon_state = "armor_medium"
icon_state = "armor_ablative"
slowdown = 0.6
armor = list(melee = 10, bullet = 10, laser = 70, energy = 50, bomb = 0, bio = 0, rad = 0)
armorsoak = list(melee = 0, bullet = 0, laser = 10, energy = 15, bomb = 0, bio = 0, rad = 0)
@@ -203,6 +209,12 @@
desc = "A pair of tan arm pads reinforced with armor plating. Attaches to a plate carrier."
icon_state = "armguards_tan"
/obj/item/clothing/accessory/armor/armguards/explorer
name = "explorer arm guards"
desc = "A pair of green arm pads reinforced with armor plating. Attaches to a plate carrier."
icon_state = "armguards_green"
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35)
/obj/item/clothing/accessory/armor/armguards/merc
name = "heavy arm guards"
desc = "A pair of red-trimmed black arm pads reinforced with heavy armor plating. Attaches to a plate carrier."
@@ -262,6 +274,12 @@
desc = "A pair of armored leg pads in tan. Attaches to a plate carrier."
icon_state = "legguards_tan"
/obj/item/clothing/accessory/armor/legguards/explorer
name = "explorer leg guards"
desc = "A pair of armored leg pads in green. Attaches to a plate carrier."
icon_state = "legguards_green"
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35)
/obj/item/clothing/accessory/armor/legguards/merc
name = "heavy leg guards"
desc = "A pair of heavily armored leg pads in red-trimmed black. Attaches to a plate carrier."
@@ -11,6 +11,7 @@
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
+2 -1
View File
@@ -1057,9 +1057,10 @@ var/list/name_to_material
icon_base = "solid"
icon_reinf = "reinf_mesh"
integrity = 60
weight = 10
ignition_point = T0C+400
melting_point = T0C+500
protectiveness = 25
protectiveness = 20
conductive = 0
supply_conversion_value = 4
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

+22 -17
View File
@@ -6324,13 +6324,9 @@
/turf/simulated/floor/tiled,
/area/surface/outpost/main)
"nC" = (
/obj/item/device/radio/intercom{
dir = 8;
name = "Station Intercom (General)";
pixel_x = -21
},
/turf/simulated/floor/tiled/freezer,
/area/surface/outpost/main/restroom)
/obj/machinery/smartfridge/drying_rack,
/turf/simulated/floor/plating,
/area/surface/outpost/main/garage)
"nD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -8780,15 +8776,14 @@
/turf/simulated/floor/tiled/freezer,
/area/surface/outpost/main/pool)
"sa" = (
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/structure/disposalpipe/segment{
dir = 4
/obj/item/device/radio/intercom{
dir = 8;
name = "Station Intercom (General)";
pixel_x = -21
},
/obj/machinery/washing_machine,
/turf/simulated/floor/tiled/freezer,
/area/surface/outpost/main/pool)
/area/surface/outpost/main/restroom)
"sb" = (
/obj/machinery/light/spot{
dir = 1
@@ -14229,6 +14224,16 @@
},
/turf/simulated/floor/tiled/steel/sif/planetuse,
/area/surface/outside/path/plains)
"Eq" = (
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/simulated/floor/tiled/freezer,
/area/surface/outpost/main/pool)
(1,1,1) = {"
aa
@@ -51038,7 +51043,7 @@ pQ
qB
qZ
rD
sa
Eq
sw
sS
ti
@@ -53075,7 +53080,7 @@ hk
hF
ic
iF
iH
nC
jt
qU
kg
@@ -53343,7 +53348,7 @@ ll
lW
mD
nd
nC
sa
nE
nE
nE
@@ -41,6 +41,8 @@
starts_with = list(
/obj/item/clothing/under/explorer,
/obj/item/clothing/suit/armor/pcarrier/explorer/light,
/obj/item/clothing/head/helmet/explorer,
/obj/item/clothing/suit/storage/hooded/explorer,
/obj/item/clothing/mask/gas/explorer,
/obj/item/clothing/shoes/boots/winter/explorer,