Refactors armor into dedicated subtypes (#71986)

## About The Pull Request

See title.
## Why It's Good For The Game

Code is cleaner, and more readable/intuitive
Technically closes
https://github.com/tgstation/dev-cycles-initiative/issues/8
## Changelog
🆑
refactor: armor, from the ground up basically
/🆑

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
Zephyr
2022-12-23 16:21:22 -08:00
committed by GitHub
co-authored by Mothblocks
parent 8bbc0d1c62
commit 72add64520
259 changed files with 7071 additions and 768 deletions
+9 -1
View File
@@ -6,12 +6,20 @@
req_access = list(ACCESS_BAR)
max_integrity = 500
integrity_failure = 0.5
armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/sign_barsign
buildable_sign = FALSE
var/panel_open = FALSE
var/datum/barsign/chosen_sign
/datum/armor/sign_barsign
melee = 20
bullet = 20
laser = 20
energy = 100
fire = 50
acid = 50
/obj/structure/sign/barsign/Initialize(mapload)
. = ..()
set_sign(new /datum/barsign/hiddensigns/signoff)
@@ -9,7 +9,7 @@
drag_slowdown = 1.5 // Same as a prone mob
max_integrity = 200
integrity_failure = 0.25
armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 70, ACID = 60)
armor_type = /datum/armor/structure_closet
blocks_emissive = EMISSIVE_BLOCK_GENERIC
/// The overlay for the closet's door
@@ -70,6 +70,14 @@
var/contents_initialized = FALSE
/datum/armor/structure_closet
melee = 20
bullet = 10
laser = 10
bomb = 10
fire = 70
acid = 60
/obj/structure/closet/Initialize(mapload)
. = ..()
@@ -4,10 +4,18 @@
locked = TRUE
icon_state = "secure"
max_integrity = 250
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80)
armor_type = /datum/armor/closet_secure_closet
secure = TRUE
damage_deflection = 20
/datum/armor/closet_secure_closet
melee = 30
bullet = 50
laser = 50
energy = 100
fire = 80
acid = 80
/obj/structure/closet/secure_closet/Initialize(mapload)
. = ..()
RegisterSignal(SSdcs, COMSIG_GLOB_GREY_TIDE, PROC_REF(grey_tide))
@@ -5,10 +5,18 @@
secure = TRUE
locked = TRUE
max_integrity = 500
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80)
armor_type = /datum/armor/crate_secure
var/tamperproof = 0
damage_deflection = 25
/datum/armor/crate_secure
melee = 30
bullet = 50
laser = 50
energy = 100
fire = 80
acid = 80
/obj/structure/closet/crate/secure/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NO_MISSING_ITEM_ERROR, TRAIT_GENERIC)
@@ -47,6 +55,14 @@
name = "secure hydroponics crate"
icon_state = "hydrosecurecrate"
/datum/armor/crate_secure
melee = 30
bullet = 50
laser = 50
energy = 100
fire = 80
acid = 80
/obj/structure/closet/crate/secure/freezer //for consistency with other "freezer" closets/crates
desc = "An insulated crate with a lock on it, used to secure perishables."
name = "secure kitchen crate"
@@ -58,6 +74,14 @@
req_access = list(ACCESS_KITCHEN)
tamperproof = 10
/datum/armor/crate_secure
melee = 30
bullet = 50
laser = 50
energy = 100
fire = 80
acid = 80
/obj/structure/closet/crate/secure/freezer/pizza/PopulateContents()
. = ..()
new /obj/effect/spawner/random/food_or_drink/pizzaparty(src)
@@ -85,6 +109,14 @@
///Is the crate being bought by a person, or a budget card?
var/department_purchase = FALSE
/datum/armor/crate_secure
melee = 30
bullet = 50
laser = 50
energy = 100
fire = 80
acid = 80
/obj/structure/closet/crate/secure/owned/examine(mob/user)
. = ..()
. += span_notice("It's locked with a privacy lock, and can only be unlocked by the buyer's ID.")
@@ -3,7 +3,7 @@
desc = "A conspicuous crate with the Syndicate logo on it. You don't know how to open it."
icon_state = "syndicrate"
max_integrity = 500
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0)
armor_type = /datum/armor/crate_syndicrate
resistance_flags = FIRE_PROOF | ACID_PROOF
integrity_failure = 0 //prevents bust_open from activating
/// variable that only lets the crate open if opened by a key from the uplink
@@ -12,6 +12,12 @@
var/list/unlock_contents = list()
/// if the crate takes damage it will explode 25% of the time
/datum/armor/crate_syndicrate
melee = 30
bullet = 50
laser = 50
energy = 100
/obj/structure/closet/crate/syndicrate/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
if(created_items)
return ..()
@@ -60,6 +66,12 @@
icon_state = "syndicrate_key"
w_class = WEIGHT_CLASS_TINY
/datum/armor/crate_syndicrate
melee = 30
bullet = 50
laser = 50
energy = 100
/obj/item/syndicrate_key/Initialize(mapload)
. = ..()
register_item_context()
+31 -1
View File
@@ -6,7 +6,7 @@
density = TRUE
anchored = TRUE
resistance_flags = ACID_PROOF
armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 70, ACID = 100)
armor_type = /datum/armor/structure_displaycase
max_integrity = 200
integrity_failure = 0.25
///The showpiece item inside the case
@@ -29,6 +29,12 @@
///Used for subtypes that have a UI in them. The examine on click while adjecent will not fire, as we already get a popup
var/autoexamine_while_closed = TRUE
/datum/armor/structure_displaycase
melee = 30
bomb = 10
fire = 70
acid = 100
/obj/structure/displaycase/Initialize(mapload)
. = ..()
if(start_showpiece_type)
@@ -227,6 +233,12 @@
var/obj/item/electronics/airlock/electronics
/datum/armor/structure_displaycase
melee = 30
bomb = 10
fire = 70
acid = 100
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_WRENCH) //The player can only deconstruct the wooden frame
to_chat(user, span_notice("You start disassembling [src]..."))
@@ -307,6 +319,12 @@
///the trophy message
var/trophy_message = ""
/datum/armor/structure_displaycase
melee = 30
bomb = 10
fire = 70
acid = 100
/obj/structure/displaycase/trophy/Initialize(mapload)
. = ..()
GLOB.trophy_cases += src
@@ -423,6 +441,12 @@
/obj/item/showpiece_dummy
name = "holographic replica"
/datum/armor/structure_displaycase
melee = 30
bomb = 10
fire = 70
acid = 100
/obj/item/showpiece_dummy/Initialize(mapload, path)
. = ..()
var/obj/item/item_path = path
@@ -448,6 +472,12 @@
///The Account which will receive payment for purchases. Set by the first ID to swipe the tray.
var/datum/bank_account/payments_acc = null
/datum/armor/structure_displaycase
melee = 30
bomb = 10
fire = 70
acid = 100
/obj/structure/displaycase/forsale/update_icon_state()
icon_state = "[initial(icon_state)][broken ? "_broken" : (open ? "_open" : (!showpiece ? "_empty" : null))]"
return ..()
+9 -1
View File
@@ -5,7 +5,7 @@
icon_state = "fireaxe"
anchored = TRUE
density = FALSE
armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 0, FIRE = 90, ACID = 50)
armor_type = /datum/armor/structure_fireaxecabinet
max_integrity = 150
integrity_failure = 0.33
/// Do we need to be unlocked to be opened.
@@ -21,6 +21,14 @@
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
/datum/armor/structure_fireaxecabinet
melee = 50
bullet = 20
energy = 100
bomb = 10
fire = 90
acid = 50
/obj/structure/fireaxecabinet/Initialize(mapload)
. = ..()
held_item = new item_path(src)
+8 -1
View File
@@ -12,12 +12,19 @@
pass_flags_self = PASSGRILLE
flags_1 = CONDUCT_1
pressure_resistance = 5*ONE_ATMOSPHERE
armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/structure_grille
max_integrity = 50
integrity_failure = 0.4
var/rods_type = /obj/item/stack/rods
var/rods_amount = 2
/datum/armor/structure_grille
melee = 50
bullet = 70
laser = 70
energy = 100
bomb = 10
/obj/structure/grille/Initialize(mapload)
. = ..()
AddElement(/datum/element/atmos_sensitive, mapload)
+50 -1
View File
@@ -6,10 +6,17 @@
icon = 'icons/effects/effects.dmi'
anchored = TRUE
max_integrity = 1
armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, FIRE = 20, ACID = 20)
armor_type = /datum/armor/structure_holosign
var/obj/item/holosign_creator/projector
var/use_vis_overlay = TRUE
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/Initialize(mapload, source_projector)
. = ..()
var/turf/our_turf = get_turf(src)
@@ -59,6 +66,13 @@
max_integrity = 20
var/allow_walk = TRUE //can we pass through it on walk intent
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/barrier/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(.)
@@ -76,6 +90,13 @@
icon = 'icons/effects/effects.dmi'
icon_state = "holosign"
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/barrier/wetsign/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(iscarbon(mover))
@@ -109,6 +130,13 @@
max_integrity = 150
icon_state = "holo_tram"
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/barrier/atmos/Initialize(mapload)
. = ..()
air_update_turf(TRUE, TRUE)
@@ -128,6 +156,13 @@
max_integrity = 10
allow_walk = FALSE
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/barrier/cyborg/bullet_act(obj/projectile/P)
take_damage((P.damage / 5) , BRUTE, MELEE, 1) //Doesn't really matter what damage flag it is.
if(istype(P, /obj/projectile/energy/electrode))
@@ -144,6 +179,13 @@
var/force_allaccess = FALSE
var/buzzcd = 0
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/barrier/medical/examine(mob/user)
. = ..()
. += span_notice("The biometric scanners are <b>[force_allaccess ? "off" : "on"]</b>.")
@@ -189,6 +231,13 @@
max_integrity = 20
var/shockcd = 0
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/projectile/P)
take_damage(P.damage, BRUTE, MELEE, 1) //Yeah no this doesn't get projectile resistance.
return BULLET_ACT_HIT
+21 -1
View File
@@ -6,7 +6,7 @@
base_icon_state = "lattice"
density = FALSE
anchored = TRUE
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 50)
armor_type = /datum/armor/structure_lattice
max_integrity = 50
layer = LATTICE_LAYER //under pipes
plane = FLOOR_PLANE
@@ -18,6 +18,11 @@
var/build_material = /obj/item/stack/rods
/datum/armor/structure_lattice
melee = 50
fire = 80
acid = 50
/obj/structure/lattice/examine(mob/user)
. = ..()
. += deconstruction_hints(user)
@@ -81,6 +86,11 @@
canSmoothWith = SMOOTH_GROUP_CATWALK
obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP
/datum/armor/structure_lattice
melee = 50
fire = 80
acid = 50
/obj/structure/lattice/catwalk/deconstruction_hints(mob/user)
return span_notice("The supporting rods look like they could be <b>cut</b>.")
@@ -101,6 +111,11 @@
desc = "A heavily reinforced catwalk used to build bridges in hostile environments. It doesn't look like anything could make this budge."
resistance_flags = INDESTRUCTIBLE
/datum/armor/structure_lattice
melee = 50
fire = 80
acid = 50
/obj/structure/lattice/catwalk/mining/deconstruction_hints(mob/user)
return
@@ -118,6 +133,11 @@
obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP
resistance_flags = FIRE_PROOF | LAVA_PROOF
/datum/armor/structure_lattice
melee = 50
fire = 80
acid = 50
/obj/structure/lattice/lava/deconstruction_hints(mob/user)
return span_notice("The rods look like they could be <b>cut</b>, but the <i>heat treatment will shatter off</i>. There's space for a <i>tile</i>.")
+29 -1
View File
@@ -12,7 +12,7 @@
icon = 'icons/obj/doors/mineral_doors.dmi'
icon_state = "metal"
max_integrity = 200
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/structure_mineral_door
can_atmos_pass = ATMOS_PASS_DENSITY
rad_insulation = RAD_MEDIUM_INSULATION
material_flags = MATERIAL_EFFECTS
@@ -28,6 +28,13 @@
var/sheetType = /obj/item/stack/sheet/iron //what we're made of
var/sheetAmount = 10 //how much it takes to construct us.
/datum/armor/structure_mineral_door
melee = 10
energy = 100
bomb = 10
fire = 50
acid = 50
/obj/structure/mineral_door/Initialize(mapload)
. = ..()
var/obj/item/stack/initialized_mineral = new sheetType // Okay this kinda sucks.
@@ -241,6 +248,13 @@
opacity = FALSE
rad_insulation = RAD_VERY_LIGHT_INSULATION
/datum/armor/structure_mineral_door
melee = 10
energy = 100
bomb = 10
fire = 50
acid = 50
/obj/structure/mineral_door/transparent/Close()
..()
set_opacity(FALSE)
@@ -267,6 +281,13 @@
max_integrity = 200
rad_insulation = RAD_VERY_LIGHT_INSULATION
/datum/armor/structure_mineral_door
melee = 10
energy = 100
bomb = 10
fire = 50
acid = 50
/obj/structure/mineral_door/wood/pickaxe_door(mob/living/user, obj/item/I)
return
@@ -293,6 +314,13 @@
resistance_flags = FLAMMABLE
max_integrity = 20
/datum/armor/structure_mineral_door
melee = 10
energy = 100
bomb = 10
fire = 50
acid = 50
/obj/structure/mineral_door/paperframe/Initialize(mapload)
. = ..()
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
@@ -9,10 +9,15 @@
layer = SIGN_LAYER
custom_materials = list(/datum/material/gold = 2000)
max_integrity = 200 //Twice as durable as regular signs.
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/structure_plaque
///Custom plaque structures and items both start "unengraved", once engraved with a fountain pen their text can't be altered again. Static plaques are already engraved.
var/engraved = FALSE
/datum/armor/structure_plaque
melee = 50
fire = 50
acid = 50
/obj/item/plaque //The item version of the above.
icon = 'icons/obj/signs.dmi'
icon_state = "blankplaque"
@@ -24,12 +29,17 @@
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/gold = 2000)
max_integrity = 200
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/item_plaque
///This points the item to make the proper structure when placed on a wall.
var/plaque_path = /obj/structure/plaque
///Custom plaque structures and items both start "unengraved", once engraved with a fountain pen their text can't be altered again.
var/engraved = FALSE
/datum/armor/item_plaque
melee = 50
fire = 50
acid = 50
/obj/structure/plaque/attack_hand(mob/user, list/modifiers)
. = ..()
if(. || user.is_blind())
+10 -1
View File
@@ -4,7 +4,7 @@
gender = PLURAL
icon = 'icons/obj/stationobjs.dmi'
icon_state = "plasticflaps"
armor = list(MELEE = 100, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 50, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/structure_plasticflaps
density = FALSE
anchored = TRUE
can_atmos_pass = ATMOS_PASS_NO
@@ -13,6 +13,15 @@
/obj/structure/plasticflaps/opaque
opacity = TRUE
/datum/armor/structure_plasticflaps
melee = 100
bullet = 80
laser = 80
energy = 100
bomb = 50
fire = 50
acid = 50
/obj/structure/plasticflaps/Initialize(mapload)
. = ..()
alpha = 0
+8 -1
View File
@@ -8,13 +8,20 @@
anchored = TRUE
pass_flags_self = LETPASSTHROW|PASSSTRUCTURE
/// armor more or less consistent with grille. max_integrity about one time and a half that of a grille.
armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/structure_railing
max_integrity = 75
var/climbable = TRUE
///Initial direction of the railing.
var/ini_dir
/datum/armor/structure_railing
melee = 50
bullet = 70
laser = 70
energy = 100
bomb = 10
/obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch
icon_state = "railing_corner"
density = FALSE
+12 -2
View File
@@ -6,7 +6,7 @@
layer = SIGN_LAYER
custom_materials = list(/datum/material/plastic = 2000)
max_integrity = 100
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/structure_sign
///Determines if a sign is unwrenchable.
var/buildable_sign = TRUE
resistance_flags = FLAMMABLE
@@ -15,6 +15,11 @@
///sign_change_name is used to make nice looking, alphebetized and categorized names when you use a pen on any sign item or structure which is_editable.
var/sign_change_name
/datum/armor/structure_sign
melee = 50
fire = 50
acid = 50
/obj/structure/sign/blank //This subtype is necessary for now because some other things (posters, picture frames, paintings) inheret from the parent type.
icon_state = "backing"
name = "sign backing"
@@ -32,7 +37,7 @@
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/plastic = 2000)
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/item_sign
resistance_flags = FLAMMABLE
max_integrity = 100
///The type of sign structure that will be created when placed on a turf, the default looks just like a sign backing item.
@@ -40,6 +45,11 @@
///This determines if you can select this sign type when using a pen on a sign backing. False by default, set to true per sign type to override.
var/is_editable = TRUE
/datum/armor/item_sign
melee = 50
fire = 50
acid = 50
/obj/item/sign/Initialize(mapload) //Signs not attached to walls are always rotated so they look like they're laying horizontal.
. = ..()
var/matrix/M = matrix()
+59 -2
View File
@@ -391,7 +391,11 @@
canSmoothWith = SMOOTH_GROUP_GLASS_TABLES
max_integrity = 70
resistance_flags = ACID_PROOF
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/table_glass
/datum/armor/table_glass
fire = 80
acid = 100
/obj/structure/table/glass/Initialize(mapload)
. = ..()
@@ -480,6 +484,10 @@
smoothing_groups = SMOOTH_GROUP_WOOD_TABLES //Don't smooth with SMOOTH_GROUP_TABLES
canSmoothWith = SMOOTH_GROUP_WOOD_TABLES
/datum/armor/table_glass
fire = 80
acid = 100
/obj/structure/table/wood/narsie_act(total_override = TRUE)
if(!total_override)
..()
@@ -508,6 +516,10 @@
canSmoothWith = SMOOTH_GROUP_FANCY_WOOD_TABLES
var/smooth_icon = 'icons/obj/smooth_structures/fancy_table.dmi' // see Initialize()
/datum/armor/table_glass
fire = 80
acid = 100
/obj/structure/table/wood/fancy/Initialize(mapload)
. = ..()
// Needs to be set dynamically because table smooth sprites are 32x34,
@@ -583,7 +595,16 @@
buildstack = /obj/item/stack/sheet/plasteel
max_integrity = 200
integrity_failure = 0.25
armor = list(MELEE = 10, BULLET = 30, LASER = 30, ENERGY = 100, BOMB = 20, BIO = 0, FIRE = 80, ACID = 70)
armor_type = /datum/armor/table_reinforced
/datum/armor/table_reinforced
melee = 10
bullet = 30
laser = 30
energy = 100
bomb = 20
fire = 80
acid = 70
/obj/structure/table/reinforced/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
@@ -632,6 +653,15 @@
smoothing_groups = SMOOTH_GROUP_BRONZE_TABLES //Don't smooth with SMOOTH_GROUP_TABLES
canSmoothWith = SMOOTH_GROUP_BRONZE_TABLES
/datum/armor/table_reinforced
melee = 10
bullet = 30
laser = 30
energy = 100
bomb = 20
fire = 80
acid = 70
/obj/structure/table/bronze/tablepush(mob/living/user, mob/living/pushed_mob)
..()
playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 50, TRUE)
@@ -695,6 +725,15 @@
var/mob/living/carbon/patient = null
var/obj/machinery/computer/operating/computer = null
/datum/armor/table_reinforced
melee = 10
bullet = 30
laser = 30
energy = 100
bomb = 20
fire = 80
acid = 70
/obj/structure/table/optable/Initialize(mapload)
. = ..()
for(var/direction in GLOB.alldirs)
@@ -768,6 +807,15 @@
pass_flags_self = LETPASSTHROW //You can throw objects over this, despite it's density.
max_integrity = 20
/datum/armor/table_reinforced
melee = 10
bullet = 30
laser = 30
energy = 100
bomb = 20
fire = 80
acid = 70
/obj/structure/rack/examine(mob/user)
. = ..()
. += span_notice("It's held together by a couple of <b>bolts</b>.")
@@ -849,6 +897,15 @@
custom_materials = list(/datum/material/iron=2000)
var/building = FALSE
/datum/armor/table_reinforced
melee = 10
bullet = 30
laser = 30
energy = 100
bomb = 20
fire = 80
acid = 70
/obj/item/rack_parts/attackby(obj/item/W, mob/user, params)
if (W.tool_behaviour == TOOL_WRENCH)
new /obj/item/stack/sheet/iron(user.loc)
+57 -7
View File
@@ -10,7 +10,7 @@
max_integrity = 50
can_be_unanchored = TRUE
resistance_flags = ACID_PROOF
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/structure_window
can_atmos_pass = ATMOS_PASS_PROC
rad_insulation = RAD_VERY_LIGHT_INSULATION
pass_flags_self = PASSGLASS
@@ -34,6 +34,11 @@
/// If some inconsiderate jerk has had their blood spilled on this window, thus making it cleanable
var/bloodied = FALSE
/datum/armor/structure_window
melee = 50
fire = 80
acid = 100
/obj/structure/window/Initialize(mapload, direct)
. = ..()
if(direct)
@@ -440,7 +445,7 @@
icon_state = "rwindow"
reinf = TRUE
heat_resistance = 1600
armor = list(MELEE = 80, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/window_reinforced
max_integrity = 75
explosion_block = 1
damage_deflection = 11
@@ -453,6 +458,12 @@
//If you find this like 4 years later and construction still hasn't been refactored, I'm so sorry for this //Adding a timestamp, I found this in 2020, I hope it's from this year -Lemon
//2021 AND STILLLL GOING STRONG
//2022 BABYYYYY ~lewc
/datum/armor/window_reinforced
melee = 80
bomb = 25
fire = 80
acid = 100
/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, params)
switch(state)
if(RWINDOW_SECURE)
@@ -563,12 +574,19 @@
icon_state = "plasmawindow"
reinf = FALSE
heat_resistance = 25000
armor = list(MELEE = 80, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 0, FIRE = 99, ACID = 100)
armor_type = /datum/armor/window_plasma
max_integrity = 200
explosion_block = 1
glass_type = /obj/item/stack/sheet/plasmaglass
rad_insulation = RAD_MEDIUM_INSULATION
/datum/armor/window_plasma
melee = 80
bullet = 5
bomb = 45
fire = 99
acid = 100
/obj/structure/window/plasma/Initialize(mapload, direct)
. = ..()
RemoveElement(/datum/element/atmos_sensitive)
@@ -600,13 +618,20 @@
icon_state = "plasmarwindow"
reinf = TRUE
heat_resistance = 50000
armor = list(MELEE = 80, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 0, FIRE = 99, ACID = 100)
armor_type = /datum/armor/reinforced_plasma
max_integrity = 500
damage_deflection = 21
explosion_block = 2
glass_type = /obj/item/stack/sheet/plasmarglass
rad_insulation = RAD_HEAVY_INSULATION
/datum/armor/reinforced_plasma
melee = 80
bullet = 20
bomb = 60
fire = 99
acid = 100
/obj/structure/window/reinforced/plasma/block_superconductivity()
return TRUE
@@ -716,6 +741,13 @@
glass_amount = 2
//there is a sub shuttle window in survival_pod.dm for mining pods
/datum/armor/reinforced_plasma
melee = 80
bullet = 20
bomb = 60
fire = 99
acid = 100
/obj/structure/window/reinforced/shuttle//this is called reinforced because it is reinforced w/titanium
name = "shuttle window"
desc = "A reinforced, air-locked pod window."
@@ -729,7 +761,7 @@
flags_1 = PREVENT_CLICK_UNDER_1
reinf = TRUE
heat_resistance = 1600
armor = list(MELEE = 90, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/reinforced_shuttle
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE
@@ -739,6 +771,12 @@
receive_ricochet_chance_mod = 1.2
rad_insulation = RAD_MEDIUM_INSULATION
/datum/armor/reinforced_shuttle
melee = 90
bomb = 50
fire = 80
acid = 100
/obj/structure/window/reinforced/shuttle/spawnDebris(location)
. = list()
. += new /obj/item/shard/titanium(location)
@@ -769,7 +807,7 @@
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
heat_resistance = 1600
armor = list(MELEE = 95, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/plasma_plastitanium
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM
@@ -779,6 +817,12 @@
glass_amount = 2
rad_insulation = RAD_EXTREME_INSULATION
/datum/armor/plasma_plastitanium
melee = 95
bomb = 50
fire = 80
acid = 100
/obj/structure/window/reinforced/plasma/plastitanium/spawnDebris(location)
. = list()
. += new /obj/item/shard/plastitanium(location)
@@ -811,7 +855,7 @@
decon_speed = 10
can_atmos_pass = ATMOS_PASS_YES
resistance_flags = FLAMMABLE
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/none
knock_sound = SFX_PAGE_TURN
bash_sound = 'sound/weapons/slashmiss.ogg'
break_sound = 'sound/items/poster_ripped.ogg'
@@ -819,6 +863,12 @@
var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1)
var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1)
/datum/armor/plasma_plastitanium
melee = 95
bomb = 50
fire = 80
acid = 100
/obj/structure/window/paperframe/Initialize(mapload)
. = ..()
update_appearance()