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
+37 -1
View File
@@ -24,7 +24,7 @@ RLD
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/iron=100000)
req_access = list(ACCESS_ENGINE_EQUIP)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50)
armor_type = /datum/armor/item_construction
resistance_flags = FIRE_PROOF
var/datum/effect_system/spark_spread/spark_system
var/matter = 0
@@ -39,6 +39,10 @@ RLD
var/datum/component/remote_materials/silo_mats //remote connection to the silo
var/silo_link = FALSE //switch to use internal or remote storage
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread
@@ -408,6 +412,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
// `initial` does not work here. Neither does instantiating a wall/whatever
// and referencing that. I don't know why.
/datum/armor/item_construction
fire = 100
acid = 50
/proc/init_holographic_wall()
return getHologramIcon(
icon('icons/turf/walls/wall.dmi', "wall-0"),
@@ -481,6 +489,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
name = "hologram"
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
/datum/armor/item_construction
fire = 100
acid = 50
/obj/effect/rcd_hologram/Initialize(mapload)
. = ..()
QDEL_IN(src, RCD_HOLOGRAM_FADE_TIME)
@@ -747,6 +759,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
var/energyfactor = 72
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
if(!iscyborg(user))
return 0
@@ -848,6 +864,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
inhand_icon_state = "oldrcd"
has_ammobar = FALSE
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user)
. = ..()
if(range_check(A,user))
@@ -908,6 +928,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
var/list/display_options = list()
var/color_choice = null
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/rld/Initialize(mapload)
. = ..()
for(var/option in original_options)
@@ -1106,6 +1130,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
"Fifth Layer" = 5,
)
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/plumbing/Initialize(mapload)
. = ..()
@@ -1359,6 +1387,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
has_ammobar = TRUE
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/plumbing/research/set_plumbing_designs()
plumbing_design_types = list(
//category 1 synthesizers
@@ -1385,6 +1417,10 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
icon_state = "plumberer_service"
has_ammobar = TRUE
/datum/armor/item_construction
fire = 100
acid = 50
/obj/item/construction/plumbing/service/set_plumbing_designs()
plumbing_design_types = list(
//category 1 synthesizers
+6 -2
View File
@@ -220,7 +220,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
w_class = WEIGHT_CLASS_NORMAL
slot_flags = ITEM_SLOT_BELT
custom_materials = list(/datum/material/iron=75000, /datum/material/glass=37500)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50)
armor_type = /datum/armor/item_pipe_dispenser
resistance_flags = FIRE_PROOF
///Sparks system used when changing device in the UI
var/datum/effect_system/spark_spread/spark_system
@@ -261,6 +261,10 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
/// Bitflags for upgrades
var/upgrade_flags
/datum/armor/item_pipe_dispenser
fire = 100
acid = 50
/obj/item/pipe_dispenser/Initialize(mapload)
. = ..()
spark_system = new
@@ -313,7 +317,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(istype(target, /obj/machinery/air_sensor))
if(!do_after(user, destroy_speed, target))
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
qdel(target)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+1 -1
View File
@@ -20,7 +20,7 @@ RSF
density = FALSE
anchored = FALSE
item_flags = NOBLUDGEON
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/none
///The current matter count
var/matter = 0
///The max amount of matter in the device
+45 -1
View File
@@ -50,7 +50,7 @@
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
slot_flags = ITEM_SLOT_ID
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 100)
armor_type = /datum/armor/card_id
resistance_flags = FIRE_PROOF | ACID_PROOF
/// Cached icon that has been built for this card. Intended for use in chat.
@@ -102,6 +102,10 @@
/// Boolean value. If TRUE, the [Intern] tag gets prepended to this ID card when the label is updated.
var/is_intern = FALSE
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/Initialize(mapload)
. = ..()
@@ -835,6 +839,10 @@
desc = "An ID card that allows access to bots maintenance protocols."
trim = /datum/id_trim/away/old/robo
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/away/deep_storage //deepstorage.dmm space ruin
name = "bunker access ID"
@@ -846,6 +854,10 @@
var/department_name = ACCOUNT_CIV_NAME
registered_age = null
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/departmental_budget/Initialize(mapload)
. = ..()
var/datum/bank_account/B = SSeconomy.get_dep_account(department_ID)
@@ -869,6 +881,10 @@
department_name = ACCOUNT_CAR_NAME
icon_state = "car_budget" //saving up for a new tesla
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/departmental_budget/AltClick(mob/living/user)
registered_account.bank_card_talk(span_warning("Withdrawing is not compatible with this card design."), TRUE) //prevents the vault bank machine being useless and putting money from the budget to your card to go over personal crates
@@ -899,6 +915,10 @@
/// If this is set, will manually override the trim shown for SecHUDs. Intended for admins to VV edit and chameleon ID cards.
var/sechud_icon_state_override = null
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status))
@@ -1064,6 +1084,10 @@
assigned_icon_state = "assigned_gold"
wildcard_slots = WILDCARD_LIMIT_GOLD
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/gold/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_TASTEFULLY_THICK_ID_CARD, ROUNDSTART_TRAIT)
@@ -1075,6 +1099,10 @@
trim = /datum/id_trim/job/captain
registered_age = null
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/gold/captains_spare/update_label() //so it doesn't change to Captain's ID card (Captain) on a sneeze
if(registered_name == "Captain")
name = "[initial(name)][(!assignment || assignment == "Captain") ? "" : " ([assignment])"]"
@@ -1170,6 +1198,10 @@
registered_name = "Captain"
registered_age = null
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/black/syndicate_command/captain_id/syndie_spare/update_label()
if(registered_name == "Captain")
name = "[initial(name)][(!assignment || assignment == "Captain") ? "" : " ([assignment])"]"
@@ -1187,6 +1219,10 @@
trim = /datum/id_trim/admin
wildcard_slots = WILDCARD_LIMIT_ADMIN
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/debug/Initialize(mapload)
. = ..()
registered_account = SSeconomy.get_dep_account(ACCOUNT_CAR)
@@ -1216,6 +1252,10 @@
/// Time left on a card till they can leave.
var/time_left = 0
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/prisoner/attackby(obj/item/card/id/C, mob/user)
..()
var/list/id_access = C.GetAccess()
@@ -1326,6 +1366,10 @@
/// Weak ref to the ID card we're currently attempting to steal access from.
var/datum/weakref/theft_target
/datum/armor/card_id
fire = 100
acid = 100
/obj/item/card/id/advanced/chameleon/Initialize(mapload)
. = ..()
+21 -1
View File
@@ -16,7 +16,7 @@
throwforce = 6
w_class = WEIGHT_CLASS_BULKY
actions_types = list(/datum/action/item_action/toggle_paddles)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/item_defibrillator
var/obj/item/shockpaddles/paddle_type = /obj/item/shockpaddles
/// If the paddles are equipped (1) or on the defib (0)
@@ -44,6 +44,10 @@
/// The icon state for the emagged overlay, not applied if null
var/emagged_state = "defibunit-emagged"
/datum/armor/item_defibrillator
fire = 50
acid = 50
/obj/item/defibrillator/get_cell()
return cell
@@ -290,6 +294,10 @@
nocell_state = "defibcompact-nocell"
emagged_state = "defibcompact-emagged"
/datum/armor/item_defibrillator
fire = 50
acid = 50
/obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user)
if(slot & user.getBeltSlot())
return TRUE
@@ -316,6 +324,10 @@
/obj/item/defibrillator/compact/combat/loaded
cell_removable = FALSE // Don't let people just have an infinite power cell
/datum/armor/item_defibrillator
fire = 50
acid = 50
/obj/item/defibrillator/compact/combat/loaded/Initialize(mapload)
. = ..()
cell = new /obj/item/stock_parts/cell/infinite(src)
@@ -360,6 +372,10 @@
var/recharge_time = 6 SECONDS // Only applies to defibs that do not require a defibrilator. See: do_success()
var/combat = FALSE //If it penetrates armor and gives additional functionality
/datum/armor/item_defibrillator
fire = 50
acid = 50
/obj/item/shockpaddles/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS|ITEM_SLOT_BACK)
@@ -685,6 +701,10 @@
inhand_icon_state = "defibpaddles0"
req_defib = FALSE
/datum/armor/item_defibrillator
fire = 50
acid = 50
/obj/item/shockpaddles/cyborg/attack(mob/M, mob/user)
if(iscyborg(user))
var/mob/living/silicon/robot/R = user
@@ -104,9 +104,17 @@
mouse_opacity = MOUSE_OPACITY_OPAQUE
resistance_flags = INDESTRUCTIBLE
can_atmos_pass = ATMOS_PASS_DENSITY
armor = list(MELEE = 0, BULLET = 25, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 0, FIRE = 100, ACID = 100)
armor_type = /datum/armor/structure_projected_forcefield
var/obj/item/forcefield_projector/generator
/datum/armor/structure_projected_forcefield
bullet = 25
laser = 50
energy = 50
bomb = 25
fire = 100
acid = 100
/obj/structure/projected_forcefield/Initialize(mapload, obj/item/forcefield_projector/origin)
. = ..()
generator = origin
+9 -1
View File
@@ -25,7 +25,7 @@
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
block_chance = 75
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 70)
armor_type = /datum/armor/item_dualsaber
resistance_flags = FIRE_PROOF
wound_bonus = -10
bare_wound_bonus = 20
@@ -35,6 +35,10 @@
var/hacked = FALSE
var/list/possible_colors = list("red", "blue", "green", "purple")
/datum/armor/item_dualsaber
fire = 100
acid = 70
/obj/item/dualsaber/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
@@ -188,6 +192,10 @@
/obj/item/dualsaber/purple
possible_colors = list("purple")
/datum/armor/item_dualsaber
fire = 100
acid = 70
/obj/item/dualsaber/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_MULTITOOL)
if(!hacked)
+9 -1
View File
@@ -19,7 +19,7 @@
attack_verb_simple = list("attack", "chop", "cleave", "tear", "lacerate", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = SHARP_EDGED
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 30)
armor_type = /datum/armor/item_fireaxe
resistance_flags = FIRE_PROOF
wound_bonus = -15
bare_wound_bonus = 20
@@ -28,6 +28,10 @@
/// How much damage to do wielded
var/force_wielded = 24
/datum/armor/item_fireaxe
fire = 100
acid = 30
/obj/item/fireaxe/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, \
@@ -70,6 +74,10 @@
/*
* Metal Hydrogen Axe
*/
/datum/armor/item_fireaxe
fire = 100
acid = 30
/obj/item/fireaxe/metal_h2_axe
icon_state = "metalh2_axe0"
base_icon_state = "metalh2_axe"
+37 -1
View File
@@ -40,13 +40,17 @@
throw_range = 5
custom_materials = list(/datum/material/iron=500)
breakouttime = 1 MINUTES
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/restraints_handcuffs
custom_price = PAYCHECK_COMMAND * 0.35
///Sound that plays when starting to put handcuffs on someone
var/cuffsound = 'sound/weapons/handcuffs.ogg'
///If set, handcuffs will be destroyed on application and leave behind whatever this is set to.
var/trashtype = null
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/user)
if(!istype(C))
return
@@ -148,6 +152,10 @@
breakouttime = 30 SECONDS
cuffsound = 'sound/weapons/cablecuff.ogg'
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/handcuffs/cable/Initialize(mapload, new_color)
. = ..()
@@ -266,6 +274,10 @@
cable_color = CABLE_COLOR_WHITE
inhand_icon_state = "coil_white"
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) //Slapcrafting
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
@@ -323,6 +335,10 @@
desc = "A pair of broken zipties."
icon_state = "cuff_used"
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
return
@@ -379,6 +395,10 @@
/obj/item/restraints/legcuffs/beartrap/prearmed
armed = TRUE
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/legcuffs/beartrap/Initialize(mapload)
. = ..()
update_appearance()
@@ -468,6 +488,10 @@
item_flags = DROPDEL
flags_1 = NONE
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/legcuffs/beartrap/energy/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, PROC_REF(dissipate)), 100)
@@ -502,6 +526,10 @@
///Amount of time to knock the target down for once it's hit in deciseconds.
var/knockdown = 0
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, gentle = FALSE, quickstart = TRUE)
if(!..())
return
@@ -554,6 +582,10 @@
breakouttime = 6 SECONDS
custom_price = PAYCHECK_COMMAND * 0.35
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/legcuffs/bola/energy/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_UNCATCHABLE, TRAIT_GENERIC) // People said energy bolas being uncatchable is a feature.
@@ -577,6 +609,10 @@
slowdown = 0
var/datum/status_effect/gonbola_pacify/effectReference
/datum/armor/restraints_handcuffs
fire = 50
acid = 50
/obj/item/restraints/legcuffs/bola/gonbola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
if(iscarbon(hit_atom))
+22 -2
View File
@@ -31,11 +31,15 @@
attack_verb_continuous = list("attacks", "stabs", "pokes")
attack_verb_simple = list("attack", "stab", "poke")
hitsound = 'sound/weapons/bladeslice.ogg'
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/kitchen_fork
sharpness = SHARP_POINTY
var/datum/reagent/forkload //used to eat omelette
custom_price = PAYCHECK_LOWER
/datum/armor/kitchen_fork
fire = 50
acid = 30
/obj/item/kitchen/fork/Initialize(mapload)
. = ..()
AddElement(/datum/element/eyestab)
@@ -71,6 +75,10 @@
custom_materials = list(/datum/material/plastic=80)
custom_price = PAYCHECK_LOWER * 2
/datum/armor/kitchen_fork
fire = 50
acid = 30
/obj/item/kitchen/fork/plastic/Initialize(mapload)
. = ..()
AddElement(/datum/element/easily_fragmented, PLASTIC_BREAK_PROBABILITY)
@@ -94,6 +102,10 @@
sharpness = SHARP_EDGED
custom_price = PAYCHECK_LOWER * 2
/datum/armor/kitchen_fork
fire = 50
acid = 30
/obj/item/knife/plastic/Initialize(mapload)
. = ..()
AddElement(/datum/element/easily_fragmented, PLASTIC_BREAK_PROBABILITY)
@@ -126,6 +138,10 @@
custom_price = PAYCHECK_CREW * 2
bare_wound_bonus = 14
/datum/armor/kitchen_fork
fire = 50
acid = 30
/obj/item/kitchen/rollingpin/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins flattening [user.p_their()] head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
@@ -142,7 +158,7 @@
throw_range = 5
attack_verb_simple = list("whack", "spoon", "tap")
attack_verb_continuous = list("whacks", "spoons", "taps")
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/kitchen_spoon
custom_materials = list(/datum/material/iron=120)
custom_price = PAYCHECK_LOWER * 5
tool_behaviour = TOOL_MINING
@@ -156,6 +172,10 @@
custom_price = PAYCHECK_LOWER * 2
toolspeed = 75 // The plastic spoon takes 5 minutes to dig through a single mineral turf... It's one, continuous, breakable, do_after...
/datum/armor/kitchen_spoon
fire = 50
acid = 30
/obj/item/kitchen/spoon/plastic/Initialize(mapload)
. = ..()
AddElement(/datum/element/easily_fragmented, PLASTIC_BREAK_PROBABILITY)
+36 -5
View File
@@ -20,12 +20,16 @@
attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
sharpness = SHARP_EDGED
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/item_knife
var/bayonet = FALSE //Can this be attached to a gun?
wound_bonus = 5
bare_wound_bonus = 15
tool_behaviour = TOOL_KNIFE
/datum/armor/item_knife
fire = 50
acid = 50
/obj/item/knife/Initialize(mapload)
. = ..()
AddElement(/datum/element/eyestab)
@@ -162,7 +166,7 @@
throwforce = 12
attack_verb_continuous = list("shanks", "shivs")
attack_verb_simple = list("shank", "shiv")
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/none
custom_materials = list(/datum/material/glass=400)
/obj/item/knife/shiv/plasma
@@ -172,9 +176,18 @@
desc = "A makeshift plasma glass shiv."
force = 9
throwforce = 13
armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 25, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/shiv_plasma
custom_materials = list(/datum/material/glass=400, /datum/material/plasma=200)
/datum/armor/shiv_plasma
melee = 25
bullet = 25
laser = 25
energy = 25
bomb = 25
fire = 50
acid = 50
/obj/item/knife/shiv/titanium
name = "titanium shiv"
icon_state = "titaniumshiv"
@@ -183,9 +196,18 @@
throwforce = 14
throw_range = 7
wound_bonus = 10
armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 25, BIO = 0, FIRE = 50, ACID = 50)
armor_type = /datum/armor/shiv_titanium
custom_materials = list(/datum/material/glass=400, /datum/material/titanium=200)
/datum/armor/shiv_titanium
melee = 25
bullet = 25
laser = 25
energy = 25
bomb = 25
fire = 50
acid = 50
/obj/item/knife/shiv/plastitanium
name = "plastitanium shiv"
icon_state = "plastitaniumshiv"
@@ -197,9 +219,18 @@
throw_range = 8
wound_bonus = 10
bare_wound_bonus = 20
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 0, FIRE = 75, ACID = 75)
armor_type = /datum/armor/shiv_plastitanium
custom_materials = list(/datum/material/glass=400, /datum/material/alloy/plastitanium=200)
/datum/armor/shiv_plastitanium
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 50
fire = 75
acid = 75
/obj/item/knife/shiv/carrot
name = "carrot shiv"
icon_state = "carrotshiv"
+21 -1
View File
@@ -395,7 +395,7 @@
attack_verb_continuous = list("beats")
attack_verb_simple = list("beat")
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, FIRE = 80, ACID = 80)
armor_type = /datum/armor/baton_security
throwforce = 7
stamina_damage = 60
@@ -415,6 +415,11 @@
var/can_remove_cell = TRUE
var/convertible = TRUE //if it can be converted with a conversion kit
/datum/armor/baton_security
bomb = 50
fire = 80
acid = 80
/obj/item/melee/baton/security/Initialize(mapload)
. = ..()
if(preload_cell_type)
@@ -647,6 +652,11 @@
convertible = FALSE
var/obj/item/assembly/igniter/sparkler
/datum/armor/baton_security
bomb = 50
fire = 80
acid = 80
/obj/item/melee/baton/security/cattleprod/Initialize(mapload)
. = ..()
sparkler = new (src)
@@ -689,6 +699,11 @@
convertible = FALSE
custom_materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000)
/datum/armor/baton_security
bomb = 50
fire = 80
acid = 80
/obj/item/melee/baton/security/boomerang/Initialize(mapload)
. = ..()
AddComponent(/datum/component/boomerang, throw_range+2, TRUE)
@@ -712,6 +727,11 @@
inhand_icon_state = "teleprod"
slot_flags = null
/datum/armor/baton_security
bomb = 50
fire = 80
acid = 80
/obj/item/melee/baton/security/cattleprod/teleprod/clumsy_check(mob/living/carbon/human/user)
. = ..()
if(!.)
+29 -1
View File
@@ -1,7 +1,7 @@
/obj/item/melee/energy
icon = 'icons/obj/weapons/transforming_energy.dmi'
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 30)
armor_type = /datum/armor/melee_energy
attack_verb_continuous = list("hits", "taps", "pokes")
attack_verb_simple = list("hit", "tap", "poke")
resistance_flags = FIRE_PROOF
@@ -30,6 +30,10 @@
/// The heat given off when active.
var/active_heat = 3500
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/Initialize(mapload)
. = ..()
make_transformable()
@@ -146,6 +150,10 @@
active_throwforce = 30
active_w_class = WEIGHT_CLASS_HUGE
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/axe/make_transformable()
AddComponent(/datum/component/transforming, \
force_on = active_force, \
@@ -176,6 +184,10 @@
block_chance = 50
embedding = list("embed_chance" = 75, "impact_pain_mult" = 10)
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(blade_active)
return ..()
@@ -187,6 +199,10 @@
/// The cell cost of hitting something.
var/hitcost = 50
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/sword/cyborg/attack(mob/target, mob/living/silicon/robot/user)
if(!user.cell)
return
@@ -236,6 +252,10 @@
var/hacked = FALSE
var/hacked_color
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/sword/saber/Initialize(mapload)
. = ..()
if(!sword_color_icon && LAZYLEN(possible_sword_colors))
@@ -271,6 +291,10 @@
/obj/item/melee/energy/sword/saber/purple
sword_color_icon = "purple"
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/sword/saber/multitool_act(mob/living/user, obj/item/tool)
if(hacked)
to_chat(user, span_warning("It's already fabulous!"))
@@ -314,6 +338,10 @@
var/datum/effect_system/spark_spread/spark_system
//Most of the other special functions are handled in their own files. aka special snowflake code so kewl
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/blade/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread()
+10 -2
View File
@@ -129,9 +129,13 @@
icon = 'icons/obj/pillow.dmi'
worn_icon = 'icons/mob/clothing/suits/pillow.dmi'
icon_state = "pillow_suit"
armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 75) //fluffy amor
armor_type = /datum/armor/suit_pillow_suit
var/obj/item/pillow/unstoppably_plushed
/datum/armor/suit_pillow_suit
melee = 5
acid = 75
/obj/item/clothing/suit/pillow_suit/Initialize(mapload)
. = ..()
unstoppably_plushed = new(src)
@@ -150,7 +154,11 @@
icon_state = "pillowcase_hat"
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS
armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 75) //fluffy amor
armor_type = /datum/armor/head_pillow_hood
/datum/armor/head_pillow_hood
melee = 5
acid = 75
/obj/item/clothing/neck/pillow_tag
name = "pillow tag"
+5 -1
View File
@@ -19,9 +19,13 @@
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = SHARP_EDGED
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 30)
armor_type = /datum/armor/item_pitchfork
resistance_flags = FIRE_PROOF
/datum/armor/item_pitchfork
fire = 100
acid = 30
/obj/item/pitchfork/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, force_unwielded=7, force_wielded=15, icon_wielded="[base_icon_state]1")
+9 -1
View File
@@ -14,7 +14,7 @@
inhand_icon_state = "bulldog"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 60, ACID = 50)
armor_type = /datum/armor/item_pneumatic_cannon
var/maxWeightClass = 20 //The max weight of items that can fit into the cannon
var/loadedWeightClass = 0 //The weight of items currently in the cannon
var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things
@@ -38,6 +38,10 @@
trigger_guard = TRIGGER_GUARD_NORMAL
/datum/armor/item_pneumatic_cannon
fire = 60
acid = 50
/obj/item/pneumatic_cannon/Initialize(mapload)
. = ..()
if(selfcharge)
@@ -307,6 +311,10 @@
clumsyCheck = FALSE
var/static/list/pie_typecache = typecacheof(/obj/item/food/pie)
/datum/armor/item_pneumatic_cannon
fire = 60
acid = 50
/obj/item/pneumatic_cannon/pie/Initialize(mapload)
. = ..()
allowed_typecache = pie_typecache
+5 -1
View File
@@ -20,7 +20,7 @@
throwforce = 10
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 40)
armor_type = /datum/armor/melee_powerfist
resistance_flags = FIRE_PROOF
/// Delay between attacks
var/click_delay = 0.15 SECONDS
@@ -31,6 +31,10 @@
/// Tank used for the gauntlet's piston-ram.
var/obj/item/tank/internals/tank
/datum/armor/melee_powerfist
fire = 100
acid = 40
/obj/item/melee/powerfist/examine(mob/user)
. = ..()
if(!in_range(user, src))
+52 -2
View File
@@ -40,7 +40,7 @@
explosion_block = 3
heat_proof = TRUE
max_integrity = 600
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100)
armor_type = /datum/armor/door_puzzle
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
move_resist = MOVE_FORCE_OVERPOWERING
damage_deflection = 70
@@ -50,6 +50,16 @@
var/open_message = "The door beeps, and slides opens."
//Standard Expressions to make keycard doors basically un-cheeseable
/datum/armor/door_puzzle
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 100
bio = 100
fire = 100
acid = 100
/obj/machinery/door/puzzle/Bumped(atom/movable/AM)
return !density && ..()
@@ -78,6 +88,16 @@
/obj/machinery/door/puzzle/keycard
desc = "This door only opens when a keycard is swiped. It looks virtually indestructible."
/datum/armor/door_puzzle
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 100
bio = 100
fire = 100
acid = 100
/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, params)
. = ..()
if(!istype(attacking_item, /obj/item/keycard))
@@ -100,6 +120,16 @@
/obj/machinery/door/puzzle/light
desc = "This door only opens when a linked mechanism is powered. It looks virtually indestructible."
/datum/armor/door_puzzle
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 100
bio = 100
fire = 100
acid = 100
/obj/machinery/door/puzzle/light/Initialize(mapload)
. = ..()
RegisterSignal(SSdcs, COMSIG_GLOB_LIGHT_MECHANISM_COMPLETED, PROC_REF(check_mechanism))
@@ -141,6 +171,16 @@
var/reward = /obj/item/food/cookie
var/claimed = FALSE
/datum/armor/door_puzzle
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 100
bio = 100
fire = 100
acid = 100
/obj/item/pressure_plate/hologrid/Initialize(mapload)
. = ..()
if(undertile_pressureplate)
@@ -174,7 +214,7 @@
icon_state = "light_puzzle"
anchored = TRUE
explosion_block = 3
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100)
armor_type = /datum/armor/structure_light_puzzle
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
light_range = MINIMUM_USEFUL_LIGHT_RANGE
light_power = 3
@@ -189,6 +229,16 @@
/// Banned combinations of the list in decimal
var/static/list/banned_combinations = list(-1, 47, 95, 203, 311, 325, 422, 473, 488, 500, 511)
/datum/armor/structure_light_puzzle
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 100
bio = 100
fire = 100
acid = 100
/obj/structure/light_puzzle/Initialize(mapload)
. = ..()
var/generated_board = -1
+31 -3
View File
@@ -276,7 +276,16 @@
inhand_icon_state = null
w_class = WEIGHT_CLASS_NORMAL
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 60, BIO = 0, FIRE = 60, ACID = 60)
armor_type = /datum/armor/plate_crusader
/datum/armor/plate_crusader
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 60
fire = 60
acid = 60
/obj/item/clothing/head/helmet/plate/crusader/blue
icon_state = "crusader-blue"
@@ -293,9 +302,19 @@
icon_state = null
inhand_icon_state = null
flags_1 = 0
armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 70, BIO = 50, FIRE = 60, ACID = 60) //religion protects you from disease, honk.
armor_type = /datum/armor/crusader_prophet
worn_y_offset = 6
/datum/armor/crusader_prophet
melee = 60
bullet = 60
laser = 60
energy = 60
bomb = 70
bio = 50
fire = 60
acid = 60
/obj/item/clothing/head/helmet/plate/crusader/prophet/red
icon_state = "prophet-red"
inhand_icon_state = null
@@ -354,13 +373,22 @@
desc = "Metal boots, they look heavy."
icon_state = "crusader"
w_class = WEIGHT_CLASS_NORMAL
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 60, BIO = 0, FIRE = 60, ACID = 60) //does this even do anything on boots?
armor_type = /datum/armor/shoes_plate
clothing_flags = NOSLIP
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
/datum/armor/shoes_plate
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 60
fire = 60
acid = 60
/obj/item/clothing/shoes/plate/red
icon_state = "crusader-red"
+42 -2
View File
@@ -14,7 +14,7 @@
w_class = WEIGHT_CLASS_BULKY
attack_verb_continuous = list("shoves", "bashes")
attack_verb_simple = list("shove", "bash")
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, FIRE = 80, ACID = 70)
armor_type = /datum/armor/item_shield
/// makes beam projectiles pass through the shield
var/transparent = FALSE
/// if the shield will break by sustaining damage
@@ -26,6 +26,14 @@
/// baton bash cooldown
COOLDOWN_DECLARE(baton_bash)
/datum/armor/item_shield
melee = 50
bullet = 50
laser = 50
bomb = 30
fire = 80
acid = 70
/obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(transparent && (hitby.pass_flags & PASSGLASS))
return FALSE
@@ -88,7 +96,7 @@
/obj/item/shield/roman/fake
desc = "Bears an inscription on the inside: <i>\"Romanes venio domus\"</i>. It appears to be a bit flimsy."
block_chance = 0
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/none
max_integrity = 30
/obj/item/shield/riot
@@ -102,6 +110,14 @@
shield_break_sound = 'sound/effects/glassbr3.ogg'
shield_break_leftover = /obj/item/shard
/datum/armor/item_shield
melee = 50
bullet = 50
laser = 50
bomb = 30
fire = 80
acid = 70
/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, params)
if(istype(attackby_item, /obj/item/melee/baton))
if(!COOLDOWN_FINISHED(src, baton_bash))
@@ -128,6 +144,14 @@
inhand_icon_state = "flashshield"
var/obj/item/assembly/flash/handheld/embedded_flash = /obj/item/assembly/flash/handheld
/datum/armor/item_shield
melee = 50
bullet = 50
laser = 50
bomb = 30
fire = 80
acid = 70
/obj/item/shield/riot/flash/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
@@ -245,6 +269,14 @@
/// Whether clumsy people can transform this without side effects.
var/can_clumsy_use = FALSE
/datum/armor/item_shield
melee = 50
bullet = 50
laser = 50
bomb = 30
fire = 80
acid = 70
/obj/item/shield/energy/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -289,6 +321,14 @@
/// Whether the shield is extended and protecting the user..
var/extended = FALSE
/datum/armor/item_shield
melee = 50
bullet = 50
laser = 50
bomb = 30
fire = 80
acid = 70
/obj/item/shield/riot/tele/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
+17 -1
View File
@@ -12,12 +12,20 @@
throwforce = 15
throw_range = 1
w_class = WEIGHT_CLASS_HUGE
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 50, BIO = 0, FIRE = 100, ACID = 100)
armor_type = /datum/armor/item_singularityhammer
resistance_flags = FIRE_PROOF | ACID_PROOF
force_string = "LORD SINGULOTH HIMSELF"
///Is it able to pull shit right now?
var/charged = TRUE
/datum/armor/item_singularityhammer
melee = 50
bullet = 50
laser = 50
bomb = 50
fire = 100
acid = 100
/obj/item/singularityhammer/Initialize(mapload)
. = ..()
AddElement(/datum/element/kneejerk)
@@ -80,6 +88,14 @@
throw_range = 7
w_class = WEIGHT_CLASS_HUGE
/datum/armor/item_singularityhammer
melee = 50
bullet = 50
laser = 50
bomb = 50
fire = 100
acid = 100
/obj/item/mjollnir/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
+13 -1
View File
@@ -19,7 +19,7 @@
attack_verb_simple = list("attack", "poke", "jab", "tear", "lacerate", "gore")
sharpness = SHARP_EDGED // i know the whole point of spears is that they're pointy, but edged is more devastating at the moment so
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/item_spear
wound_bonus = -15
bare_wound_bonus = 15
/// For explosive spears, what we cry out when we use this to bap someone
@@ -31,6 +31,10 @@
/// How much damage to do wielded
var/force_wielded = 18
/datum/armor/item_spear
fire = 50
acid = 30
/obj/item/spear/Initialize(mapload)
. = ..()
force = force_unwielded
@@ -103,6 +107,10 @@
icon_prefix = "spearbomb"
var/obj/item/grenade/explosive = null
/datum/armor/item_spear
fire = 50
acid = 30
/obj/item/spear/explosive/Initialize(mapload)
. = ..()
set_explosive(new /obj/item/grenade/iedcasing/spawned()) //For admin-spawned explosive lances
@@ -179,6 +187,10 @@
force_unwielded = 15
force_wielded = 25
/datum/armor/item_spear
fire = 50
acid = 30
/obj/item/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
. = ..()
if(!proximity)
+46 -7
View File
@@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
icon_state = "sheet-glass"
inhand_icon_state = "sheet-glass"
mats_per_unit = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 100)
armor_type = /datum/armor/sheet_glass
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/glass
grind_results = list(/datum/reagent/silicon = 20)
@@ -33,6 +33,10 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
cost = 500
source = /datum/robot_energy_storage/glass
/datum/armor/sheet_glass
fire = 50
acid = 100
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
@@ -40,6 +44,10 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
/obj/item/stack/sheet/glass/fifty
amount = 50
/datum/armor/sheet_glass
fire = 50
acid = 100
/obj/item/stack/sheet/glass/get_main_recipes()
. = ..()
. += GLOB.glass_recipes
@@ -89,7 +97,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
inhand_icon_state = "sheet-pglass"
mats_per_unit = list(/datum/material/alloy/plasmaglass=MINERAL_MATERIAL_AMOUNT)
material_type = /datum/material/alloy/plasmaglass
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 75, ACID = 100)
armor_type = /datum/armor/sheet_plasmaglass
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmaglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
@@ -99,6 +107,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
/obj/item/stack/sheet/plasmaglass/fifty
amount = 50
/datum/armor/sheet_plasmaglass
fire = 75
acid = 100
/obj/item/stack/sheet/plasmaglass/get_main_recipes()
. = ..()
. += GLOB.pglass_recipes
@@ -143,7 +155,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
icon_state = "sheet-rglass"
inhand_icon_state = "sheet-rglass"
mats_per_unit = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 70, ACID = 100)
armor_type = /datum/armor/sheet_rglass
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/rglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
@@ -151,6 +163,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
matter_amount = 6
tableVariant = /obj/structure/table/reinforced/rglass
/datum/armor/sheet_rglass
fire = 70
acid = 100
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
..()
@@ -165,6 +181,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
/// The amount of energy this draws from the glass source per stack unit.
var/glacost = 500
/datum/armor/sheet_rglass
fire = 70
acid = 100
/obj/item/stack/sheet/rglass/cyborg/get_amount()
return min(round(source.energy / cost), round(glasource.energy / glacost))
@@ -196,7 +216,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
icon_state = "sheet-prglass"
inhand_icon_state = "sheet-prglass"
mats_per_unit = list(/datum/material/alloy/plasmaglass=MINERAL_MATERIAL_AMOUNT, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5)
armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/sheet_plasmarglass
resistance_flags = ACID_PROOF
material_flags = NONE
merge_type = /obj/item/stack/sheet/plasmarglass
@@ -205,6 +225,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
matter_amount = 8
tableVariant = /obj/structure/table/reinforced/plasmarglass
/datum/armor/sheet_plasmarglass
melee = 20
fire = 80
acid = 100
/obj/item/stack/sheet/plasmarglass/get_main_recipes()
. = ..()
. += GLOB.prglass_recipes
@@ -222,7 +247,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
inhand_icon_state = "sheet-titaniumglass"
mats_per_unit = list(/datum/material/alloy/titaniumglass=MINERAL_MATERIAL_AMOUNT)
material_type = /datum/material/alloy/titaniumglass
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/sheet_titaniumglass
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
tableVariant = /obj/structure/table/reinforced/titaniumglass
@@ -230,6 +255,10 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
/obj/item/stack/sheet/titaniumglass/fifty
amount = 50
/datum/armor/sheet_titaniumglass
fire = 80
acid = 100
/obj/item/stack/sheet/titaniumglass/get_main_recipes()
. = ..()
. += GLOB.titaniumglass_recipes
@@ -246,12 +275,16 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
inhand_icon_state = "sheet-plastitaniumglass"
mats_per_unit = list(/datum/material/alloy/plastitaniumglass=MINERAL_MATERIAL_AMOUNT)
material_type = /datum/material/alloy/plastitaniumglass
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
armor_type = /datum/armor/sheet_plastitaniumglass
material_flags = NONE
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
tableVariant = /obj/structure/table/reinforced/plastitaniumglass
/datum/armor/sheet_plastitaniumglass
fire = 80
acid = 100
/obj/item/stack/sheet/plastitaniumglass/get_main_recipes()
. = ..()
. += GLOB.plastitaniumglass_recipes
@@ -272,7 +305,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
attack_verb_simple = list("stab", "slash", "slice", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
resistance_flags = ACID_PROOF
armor = list(MELEE = 100, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 50, ACID = 100)
armor_type = /datum/armor/item_shard
max_integrity = 40
sharpness = SHARP_EDGED
var/icon_prefix
@@ -281,6 +314,12 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
var/obj/item/stack/sheet/weld_material = /obj/item/stack/sheet/glass
embedding = list("embed_chance" = 65)
/datum/armor/item_shard
melee = 100
energy = 100
fire = 50
acid = 100
/obj/item/shard/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide."))
return BRUTELOSS
@@ -260,7 +260,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
material_type = /datum/material/alloy/plasteel
throwforce = 10
flags_1 = CONDUCT_1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 80)
armor_type = /datum/armor/sheet_plasteel
resistance_flags = FIRE_PROOF
merge_type = /obj/item/stack/sheet/plasteel
grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20)
@@ -269,6 +269,10 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
material_flags = NONE
matter_amount = 12
/datum/armor/sheet_plasteel
fire = 100
acid = 80
/obj/item/stack/sheet/plasteel/get_main_recipes()
. = ..()
. += GLOB.plasteel_recipes
@@ -333,7 +337,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
icon = 'icons/obj/stack_objects.dmi'
mats_per_unit = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT)
sheettype = "wood"
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 0)
armor_type = /datum/armor/mineral_wood
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/wood
novariants = TRUE
@@ -342,6 +346,9 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
walltype = /turf/closed/wall/mineral/wood
stairs_type = /obj/structure/stairs/wood
/datum/armor/mineral_wood
fire = 50
/obj/item/stack/sheet/mineral/wood/get_main_recipes()
. = ..()
. += GLOB.wood_recipes
@@ -380,13 +387,16 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
sheettype = "bamboo"
mats_per_unit = list(/datum/material/bamboo = MINERAL_MATERIAL_AMOUNT)
throwforce = 15
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 0)
armor_type = /datum/armor/mineral_bamboo
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/bamboo
grind_results = list(/datum/reagent/cellulose = 10)
material_type = /datum/material/bamboo
walltype = /turf/closed/wall/mineral/bamboo
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/mineral/bamboo/get_main_recipes()
. = ..()
. += GLOB.bamboo_recipes
@@ -448,6 +458,9 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
grind_results = list(/datum/reagent/cellulose = 20)
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/cloth/get_main_recipes()
. = ..()
. += GLOB.cloth_recipes
@@ -478,6 +491,9 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/durathread/get_main_recipes()
. = ..()
. += GLOB.durathread_recipes
@@ -576,6 +592,9 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
null, \
))
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck
name = "cardboard"
desc = "Large sheets of card, like boxes folded flat."
@@ -598,6 +617,9 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
/obj/item/stack/sheet/cardboard/fifty
amount = 50
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage))
var/atom/droploc = drop_location()
@@ -659,6 +681,9 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
walltype = /turf/closed/wall/mineral/bronze
has_unique_girder = TRUE
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/bronze/get_main_recipes()
. = ..()
. += GLOB.bronze_recipes
@@ -741,6 +766,9 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
/obj/item/stack/sheet/plastic/five
amount = 5
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/plastic/get_main_recipes()
. = ..()
. += GLOB.plastic_recipes
@@ -761,6 +789,9 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
grind_results = list(/datum/reagent/cellulose = 20)
material_type = /datum/material/paper
/datum/armor/mineral_bamboo
fire = 50
/obj/item/stack/sheet/paperframes/get_main_recipes()
. = ..()
. += GLOB.paperframe_recipes
@@ -9,7 +9,7 @@
throwforce = 10
flags_1 = CONDUCT_1
turf_type = /turf/open/floor/iron
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 70)
armor_type = /datum/armor/tile_iron
resistance_flags = FIRE_PROOF
matter_amount = 1
cost = 125
@@ -89,6 +89,10 @@
/obj/item/stack/tile/iron/four
amount = 4
/datum/armor/tile_iron
fire = 100
acid = 70
/obj/item/stack/tile/iron/Initialize(mapload)
. = ..()
var/static/list/tool_behaviors = list(
+97 -1
View File
@@ -56,7 +56,11 @@
inhand_icon_state = "holdingpack"
resistance_flags = FIRE_PROOF
item_flags = NO_MAT_REDEMPTION
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 60, ACID = 50)
armor_type = /datum/armor/backpack_holding
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/holding/Initialize(mapload)
. = ..()
@@ -80,6 +84,10 @@
inhand_icon_state = "giftbag"
w_class = WEIGHT_CLASS_BULKY
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/santabag/Initialize(mapload)
. = ..()
regenerate_presents()
@@ -225,6 +233,10 @@
worn_icon = 'icons/mob/clothing/back/ethereal.dmi'
icon_state = "saddlepack"
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/saddlepack/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 26
@@ -245,6 +257,10 @@
icon_state = "satchel-leather"
inhand_icon_state = "satchel"
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/storage/wallet/random(src)
@@ -319,6 +335,10 @@
inhand_icon_state = "satchel-flat"
w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself.
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/satchel/flat/Initialize(mapload)
. = ..()
AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_OBSERVER, use_anchor = TRUE)
@@ -349,6 +369,10 @@
inhand_icon_state = "duffel"
slowdown = 1
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 30
@@ -363,6 +387,10 @@
slowdown = 2
max_integrity = 100
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/cursed/Initialize(mapload)
. = ..()
AddComponent(/datum/component/curse_of_hunger, add_dropdel = TRUE)
@@ -421,6 +449,10 @@
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/med/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
@@ -444,6 +476,10 @@
name = "surgical duffel bag"
desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/sec/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
@@ -470,6 +506,10 @@
inhand_icon_state = "duffel-drone"
resistance_flags = FIRE_PROOF
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
@@ -485,6 +525,10 @@
icon_state = "duffel-clown"
inhand_icon_state = "duffel-clown"
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/clown/cream_pie/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/food/pie/cream(src)
@@ -500,6 +544,10 @@
slowdown = 0
resistance_flags = FIRE_PROOF
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/Initialize(mapload)
. = ..()
atom_storage.silent = TRUE
@@ -509,6 +557,10 @@
icon_state = "duffel-syndieammo"
inhand_icon_state = "duffel-syndieammo"
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/hitman/PopulateContents()
new /obj/item/clothing/under/suit/black(src)
new /obj/item/clothing/neck/tie/red/hitman(src)
@@ -531,6 +583,10 @@
icon_state = "duffel-syndiemed"
inhand_icon_state = "duffel-syndiemed"
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
@@ -555,6 +611,10 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun
desc = "A large duffel bag, packed to the brim with Bulldog shotgun magazines."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/ammo_box/magazine/m12g(src)
@@ -565,6 +625,10 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg
desc = "A large duffel bag, packed to the brim with C-20r magazines."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
for(var/i in 1 to 9)
new /obj/item/ammo_box/magazine/smgm45(src)
@@ -572,6 +636,10 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech/PopulateContents()
new /obj/item/mecha_ammo/scattershot(src)
new /obj/item/mecha_ammo/scattershot(src)
@@ -582,6 +650,10 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler/PopulateContents()
new /obj/item/mecha_ammo/lmg(src)
new /obj/item/mecha_ammo/lmg(src)
@@ -596,6 +668,10 @@
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle
desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/ammo_box/magazine/smgm45(src)
@@ -605,6 +681,10 @@
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
new /obj/item/gun/ballistic/shotgun/bulldog(src)
new /obj/item/ammo_box/magazine/m12g(src)
@@ -614,6 +694,10 @@
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft LMG, a big jumbo box of riot darts, and a magboot MODsuit module."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/mod/module/magboot(src)
new /obj/item/storage/medkit/tactical(src)
@@ -623,6 +707,10 @@
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, a Donksoft assault rifle, box of riot grade darts, a dart pistol, and a box of syringes."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
new /obj/item/storage/box/syndie_kit/chemical(src)
@@ -645,6 +733,10 @@
/obj/item/storage/backpack/duffelbag/syndie/firestarter
desc = "A large duffel bag containing a New Russian pyro backpack sprayer, Elite MODsuit, a Stechkin APS pistol, minibomb, ammo, and other equipment."
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/clothing/under/syndicate/soviet(src)
new /obj/item/mod/control/pre_equipped/elite/flamethrower(src)
@@ -686,6 +778,10 @@
icon_state = "duffel-explorer"
inhand_icon_state = "duffel-explorer"
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/mining_conscript/PopulateContents()
new /obj/item/clothing/glasses/meson(src)
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
+10 -1
View File
@@ -210,12 +210,21 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/secure/safe, 32)
It is made out of the same material as the station's Black Box and is designed to resist all conventional weaponry. \
There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion."
can_hack_open = FALSE
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 70, BIO = 0, FIRE = 80, ACID = 70)
armor_type = /datum/armor/safe_caps_spare
max_integrity = 300
color = "#ffdd33"
MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/secure/safe/caps_spare, 32)
/datum/armor/safe_caps_spare
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 70
fire = 80
acid = 70
/obj/item/storage/secure/safe/caps_spare/Initialize(mapload)
. = ..()
lock_code = SSid_access.spare_id_safe_code
+6 -1
View File
@@ -26,7 +26,7 @@
demolition_mod = 1.25
custom_materials = list(/datum/material/iron = 500)
actions_types = list(/datum/action/item_action/set_internals)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 80, ACID = 30)
armor_type = /datum/armor/item_tank
integrity_failure = 0.5
/// The gases this tank contains. Don't modify this directly, use return_air() to get it instead
var/datum/gas_mixture/air_contents = null
@@ -48,6 +48,11 @@
var/mob/living/carbon/breathing_mob = null
/// Closes the tank if dropped while open.
/datum/armor/item_tank
bomb = 10
fire = 80
acid = 30
/obj/item/tank/dropped(mob/living/user, silent)
. = ..()
// Close open air tank if its current user got sent to the shadowrealm.
+41 -1
View File
@@ -12,12 +12,16 @@
slowdown = 1
actions_types = list(/datum/action/item_action/toggle_mister)
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 30)
armor_type = /datum/armor/item_watertank
resistance_flags = FIRE_PROOF
var/obj/item/noz
var/volume = 500
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/watertank/Initialize(mapload)
. = ..()
create_reagents(volume, OPENCONTAINER)
@@ -129,6 +133,10 @@
var/obj/item/watertank/tank
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/reagent_containers/spray/mister/Initialize(mapload)
. = ..()
tank = loc
@@ -149,6 +157,10 @@
inhand_icon_state = "waterbackpackjani"
custom_price = PAYCHECK_CREW * 5
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/watertank/janitor/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/space_cleaner, 500)
@@ -165,6 +177,10 @@
possible_transfer_amounts = list(5, 10)
current_range = 5
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/watertank/janitor/make_noz()
return new /obj/item/reagent_containers/spray/mister/janitor(src)
@@ -181,6 +197,10 @@
custom_price = PAYCHECK_CREW * 2
volume = 1000
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/watertank/pepperspray/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 1000)
@@ -197,6 +217,10 @@
possible_transfer_amounts = list(5, 10)
current_range = 6
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/watertank/pepperspray/make_noz()
return new /obj/item/reagent_containers/spray/mister/pepperspray(src)
@@ -218,6 +242,10 @@
volume = 200
slowdown = 0
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/watertank/atmos/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/water, 200)
@@ -254,6 +282,10 @@
var/metal_synthesis_cooldown = 0
COOLDOWN_DECLARE(resin_cooldown)
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/extinguisher/mini/nozzle/Initialize(mapload)
. = ..()
tank = loc
@@ -362,6 +394,10 @@
pass_flags = PASSTABLE
anchored = TRUE
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/effect/resin_container/proc/Smoke()
var/datum/effect_system/fluid_spread/foam/metal/resin/foaming = new
foaming.set_up(4, holder = src, location = loc)
@@ -402,6 +438,10 @@
fill_icon_thresholds = list(0, 15, 60)
fill_icon_state = "backpack"
/datum/armor/item_watertank
fire = 100
acid = 30
/obj/item/reagent_containers/chemtank/ui_action_click()
toggle_injection()
+16 -1
View File
@@ -111,7 +111,7 @@
throw_speed = 3
throw_range = 5
custom_materials = list(/datum/material/iron=10000)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, FIRE = 100, ACID = 100)
armor_type = /datum/armor/item_hand_tele
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
var/list/active_portal_pairs
var/max_portal_pairs = 3
@@ -125,6 +125,11 @@
*/
var/last_portal_location
/datum/armor/item_hand_tele
bomb = 30
fire = 100
acid = 100
/obj/item/hand_tele/Initialize(mapload)
. = ..()
active_portal_pairs = list()
@@ -333,6 +338,11 @@
//How far the emergency teleport checks for a safe position
var/parallel_teleport_distance = 3
/datum/armor/item_hand_tele
bomb = 30
fire = 100
acid = 100
/obj/item/syndicate_teleporter/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
@@ -502,6 +512,11 @@
/obj/item/storage/box/syndie_kit/syndicate_teleporter
name = "syndicate teleporter kit"
/datum/armor/item_hand_tele
bomb = 30
fire = 100
acid = 100
/obj/item/storage/box/syndie_kit/syndicate_teleporter/PopulateContents()
new /obj/item/syndicate_teleporter(src)
new /obj/item/paper/syndicate_teleporter(src)
+26 -2
View File
@@ -21,9 +21,13 @@
attack_verb_simple = list("attack", "bash", "batter", "bludgeon", "whack")
tool_behaviour = TOOL_CROWBAR
toolspeed = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/item_crowbar
var/force_opens = FALSE
/datum/armor/item_crowbar
fire = 50
acid = 30
/obj/item/crowbar/Initialize(mapload)
. = ..()
AddElement(/datum/element/falling_hazard, damage = force, wound_bonus = wound_bonus, hardhat_safety = TRUE, crushes = FALSE, impact_sound = hitsound)
@@ -66,6 +70,10 @@
desc = "It's a bulky crowbar. It almost seems deliberately designed to not be able to fit inside of a backpack."
w_class = WEIGHT_CLASS_BULKY
/datum/armor/item_crowbar
fire = 50
acid = 30
/obj/item/crowbar/large/heavy //from space ruin
name = "heavy crowbar"
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big. It feels oddly heavy.."
@@ -79,6 +87,10 @@
throwforce = 10
throw_speed = 2
/datum/armor/item_crowbar
fire = 50
acid = 30
/obj/item/crowbar/large/old/Initialize(mapload)
. = ..()
if(prob(50))
@@ -99,6 +111,10 @@
toolspeed = 0.7
force_opens = TRUE
/datum/armor/item_crowbar
fire = 50
acid = 30
/obj/item/crowbar/power/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -130,6 +146,10 @@
toolspeed = 0.5
force_opens = TRUE
/datum/armor/item_crowbar
fire = 50
acid = 30
/obj/item/crowbar/power/examine()
. = ..()
. += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head."
@@ -177,11 +197,15 @@
w_class = WEIGHT_CLASS_HUGE
slot_flags = NONE
toolspeed = 1.25
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 0, FIRE = 100, ACID = 0)
armor_type = /datum/armor/crowbar_mechremoval
resistance_flags = FIRE_PROOF
bare_wound_bonus = 15
wound_bonus = 10
/datum/armor/crowbar_mechremoval
bomb = 100
fire = 100
/obj/item/crowbar/mechremoval/Initialize(mapload)
. = ..()
transform = transform.Translate(0, -8)
+17 -1
View File
@@ -23,7 +23,7 @@
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
tool_behaviour = TOOL_SCREWDRIVER
toolspeed = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/item_screwdriver
drop_sound = 'sound/items/handling/screwdriver_drop.ogg'
pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
sharpness = SHARP_POINTY
@@ -44,6 +44,10 @@
COLOR_TOOL_YELLOW,
)
/datum/armor/item_screwdriver
fire = 50
acid = 30
/obj/item/screwdriver/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
@@ -68,6 +72,10 @@
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
/datum/armor/item_screwdriver
fire = 50
acid = 30
/obj/item/screwdriver/abductor/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_alien")
@@ -97,6 +105,10 @@
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
/datum/armor/item_screwdriver
fire = 50
acid = 30
/obj/item/screwdriver/power/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -145,6 +157,10 @@
/obj/item/screwdriver/red
random_color = FALSE
/datum/armor/item_screwdriver
fire = 50
acid = 30
/obj/item/screwdriver/red/Initialize(mapload)
. = ..()
set_greyscale(colors=list(screwdriver_colors["red"]))
+25 -1
View File
@@ -25,7 +25,7 @@
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 30)
armor_type = /datum/armor/item_weldingtool
resistance_flags = FIRE_PROOF
heat = 3800
tool_behaviour = TOOL_WELDER
@@ -51,6 +51,10 @@
var/activation_sound = 'sound/items/welderactivate.ogg'
var/deactivation_sound = 'sound/items/welderdeactivate.ogg'
/datum/armor/item_weldingtool
fire = 100
acid = 30
/obj/item/weldingtool/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS)
@@ -331,6 +335,10 @@
max_fuel = 40
custom_materials = list(/datum/material/glass=60)
/datum/armor/item_weldingtool
fire = 100
acid = 30
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
return
@@ -344,6 +352,10 @@
icon_state = "indwelder_cyborg"
toolspeed = 0.5
/datum/armor/item_weldingtool
fire = 100
acid = 30
/obj/item/weldingtool/largetank/cyborg/cyborg_unequip(mob/user)
if(!isOn())
return
@@ -359,6 +371,10 @@
custom_materials = list(/datum/material/iron=30, /datum/material/glass=10)
change_icons = FALSE
/datum/armor/item_weldingtool
fire = 100
acid = 30
/obj/item/weldingtool/mini/flamethrower_screwdriver()
return
@@ -376,6 +392,10 @@
light_range = 0
change_icons = FALSE
/datum/armor/item_weldingtool
fire = 100
acid = 30
/obj/item/weldingtool/abductor/process()
if(get_fuel() <= max_fuel)
reagents.add_reagent(/datum/reagent/fuel, 1)
@@ -404,6 +424,10 @@
var/last_gen = 0
var/nextrefueltick = 0
/datum/armor/item_weldingtool
fire = 100
acid = 30
/obj/item/weldingtool/experimental/process()
..()
if(get_fuel() < max_fuel && nextrefueltick < world.time)
+5 -1
View File
@@ -28,7 +28,7 @@
pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg'
tool_behaviour = TOOL_WIRECUTTER
toolspeed = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/item_wirecutters
/// If the item should be assigned a random color
var/random_color = TRUE
/// List of possible random colors
@@ -42,6 +42,10 @@
COLOR_TOOL_YELLOW,
)
/datum/armor/item_wirecutters
fire = 50
acid = 30
/obj/item/wirecutters/Initialize(mapload)
if(random_color)
set_greyscale(colors = list(pick(wirecutter_colors)))
+13 -1
View File
@@ -22,7 +22,11 @@
attack_verb_simple = list("bash", "batter", "bludgeon", "whack")
tool_behaviour = TOOL_WRENCH
toolspeed = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/item_wrench
/datum/armor/item_wrench
fire = 50
acid = 30
/obj/item/wrench/Initialize(mapload)
. = ..()
@@ -55,6 +59,10 @@
///var to hold the name of the person who suicided
var/suicider
/datum/armor/item_wrench
fire = 50
acid = 30
/obj/item/wrench/medical/examine(mob/user)
. = ..()
if(suicider)
@@ -96,6 +104,10 @@
attack_verb_simple = list("devastate", "brutalize", "commit a war crime against", "obliterate", "humiliate")
tool_behaviour = null
/datum/armor/item_wrench
fire = 50
acid = 30
/obj/item/wrench/combat/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
+5 -1
View File
@@ -17,7 +17,7 @@
throw_speed = 1
throw_range = 7
w_class = WEIGHT_CLASS_BULKY
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 70, ACID = 30)
armor_type = /datum/armor/item_vending_refill
// Built automatically from the corresponding vending machine.
// If null, considered to be full. Otherwise, is list(/typepath = amount).
@@ -26,6 +26,10 @@
var/list/contraband
var/list/premium
/datum/armor/item_vending_refill
fire = 70
acid = 30
/obj/item/vending_refill/Initialize(mapload)
. = ..()
name = "\improper [machine_name] restocking unit"
+83 -3
View File
@@ -12,9 +12,13 @@
attack_verb_continuous = list("bans")
attack_verb_simple = list("ban")
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 70)
armor_type = /datum/armor/item_banhammer
resistance_flags = FIRE_PROOF
/datum/armor/item_banhammer
fire = 100
acid = 70
/obj/item/banhammer/Initialize(mapload)
. = ..()
AddElement(/datum/element/kneejerk)
@@ -51,6 +55,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
/datum/armor/item_banhammer
fire = 100
acid = 70
/obj/item/sord/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty."), \
span_suicide("You try to impale yourself with [src], but it's USELESS..."))
@@ -74,9 +82,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
block_chance = 50
sharpness = SHARP_EDGED
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50)
armor_type = /datum/armor/item_claymore
resistance_flags = FIRE_PROOF
/datum/armor/item_claymore
fire = 100
acid = 50
/obj/item/claymore/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, \
@@ -102,6 +114,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throw_range = 5
armour_penetration = 35
/datum/armor/item_claymore
fire = 100
acid = 50
/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
desc = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\nActivate it in your hand to point to the nearest victim."
flags_1 = CONDUCT_1
@@ -269,9 +285,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
block_chance = 50
sharpness = SHARP_EDGED
max_integrity = 200
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50)
armor_type = /datum/armor/item_katana
resistance_flags = FIRE_PROOF
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/katana/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!"))
return BRUTELOSS
@@ -292,6 +312,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_continuous = list("hits", "bludgeons", "whacks", "bonks")
attack_verb_simple = list("hit", "bludgeon", "whack", "bonk")
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/wirerod/Initialize(mapload)
. = ..()
@@ -394,6 +418,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// Whether the switchblade starts extended or not.
var/start_extended = FALSE
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/switchblade/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS)
@@ -443,6 +471,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_simple = list("call", "ring")
hitsound = 'sound/weapons/ring.ogg'
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/phone/suicide_act(mob/living/user)
if(locate(/obj/structure/chair/stool) in user.loc)
user.visible_message(span_suicide("[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!"))
@@ -476,6 +508,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron = 600)
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/cane/white/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -546,6 +582,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/ectoplasm/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane!"))
return OXYLOSS
@@ -578,6 +618,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
tool_behaviour = TOOL_SAW
toolspeed = 1
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/mounted_chainsaw/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
@@ -607,6 +651,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_simple = list("bust")
var/impressiveness = 45
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/statuebust/Initialize(mapload)
. = ..()
AddElement(/datum/element/art, impressiveness)
@@ -655,6 +703,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
///The vehicle counterpart for the board
var/board_item_type = /obj/vehicle/ridden/scooter/skateboard
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/melee/skateboard/attack_self(mob/user)
var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasn't my fault
S.buckle_mob(user)
@@ -713,6 +765,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// List of all thrown datums we sent.
var/list/thrown_datums = list()
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/melee/baseball_bat/Initialize(mapload)
. = ..()
if(prob(1))
@@ -831,6 +887,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throwforce = 15
mob_thrower = TRUE
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers
playsound(src, pick('sound/weapons/effects/batreflect1.ogg', 'sound/weapons/effects/batreflect2.ogg'), 50, TRUE)
return TRUE
@@ -856,6 +916,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// How much extra damage the fly swatter does against mobs it is strong against
var/extra_strength_damage = 24
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/melee/flyswatter/Initialize(mapload)
. = ..()
splattable = typecacheof(list(
@@ -913,6 +977,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
name = "\improper ACME Extendo-Hand"
desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners."
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, params)
var/dist = get_dist(M, user)
if(dist < min_reach)
@@ -982,6 +1050,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// The previous target we attacked
var/datum/weakref/previous_target
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/highfrequencyblade/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
@@ -1072,6 +1144,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
layer = ABOVE_ALL_MOB_LAYER
plane = ABOVE_GAME_PLANE
/datum/armor/item_katana
fire = 100
acid = 50
/obj/effect/temp_visual/slash/Initialize(mapload, atom/target, x_slashed, y_slashed, slash_color)
. = ..()
if(!target)
@@ -1096,6 +1172,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
wound_bonus = 20
bare_wound_bonus = 25
/datum/armor/item_katana
fire = 100
acid = 50
/obj/item/highfrequencyblade/wizard/attack_self(mob/user, modifiers)
if(!IS_WIZARD(user))
balloon_alert(user, "you're too weak!")