[MIRROR] Refactors armor into dedicated subtypes [MDB IGNORE] (#18291)

* Refactors armor into dedicated subtypes

* start

* most tg things

* pain (#18584)

* shit

* non-mod changes

* compile

Co-authored-by: John Doe <gamingskeleton3@gmail.com>

* #18291

* compile fix

* ???

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-01-08 05:06:16 +01:00
committed by GitHub
parent 9aac55ef4d
commit 011fefdd81
322 changed files with 8499 additions and 993 deletions

View File

@@ -19,26 +19,38 @@
#define BRAIN "brain"
//Damage flag defines //
/// Involves a melee attack or a thrown object.
#define MELEE "melee"
/// Involves a solid projectile.
#define BULLET "bullet"
/// Involves a laser.
#define LASER "laser"
/// Involves an EMP or energy-based projectile.
#define ENERGY "energy"
/// Involves a shockwave, usually from an explosion.
#define BOMB "bomb"
/// Involved in checking wheter a disease can infect or spread. Also involved in xeno neurotoxin.
#define BIO "bio"
/// Involves fire or temperature extremes.
#define FIRE "fire"
/// Involves corrosive substances.
#define ACID "acid"
/// Involved in checking the likelyhood of applying a wound to a mob.
#define WOUND "wound"
/// Involved in checking wheter a disease can infect or spread. Also involved in xeno neurotoxin.
#define BIO "bio"
/// Involves a shockwave, usually from an explosion.
#define BOMB "bomb"
/// Involves a solid projectile.
#define BULLET "bullet"
/// Involves being eaten
#define CONSUME "consume"
/// Involves an EMP or energy-based projectile.
#define ENERGY "energy"
/// Involves fire or temperature extremes.
#define FIRE "fire"
/// Involves a laser.
#define LASER "laser"
/// Involves a melee attack or a thrown object.
#define MELEE "melee"
/// Involved in checking the likelyhood of applying a wound to a mob.
#define WOUND "wound"
#define ARMOR_ALL "all_damage_types"
/// Armor values that are used for damage
#define ARMOR_LIST_DAMAGE(...) list(BIO, BOMB, BULLET, ENERGY, LASER, MELEE)
/// Armor values that are used for durability
#define ARMOR_LIST_DURABILITY(...) list(ACID, FIRE)
/// All armors, preferable in the order as seen above
#define ARMOR_LIST_ALL(...) list(ACID, BIO, BOMB, BULLET, CONSUME, ENERGY, FIRE, LASER, MELEE, WOUND)
//bitflag damage defines used for suicide_act
#define BRUTELOSS (1<<0)

View File

@@ -97,6 +97,7 @@
#define VV_HK_EDIT_PARTICLES "edit_particles"
#define VV_HK_EDIT_COLOR_MATRIX "edit_color_matrix"
#define VV_HK_ADD_AI "add_ai"
#define VV_HK_ARMOR_MOD "mod_obj_armor"
// /atom/movable
#define VV_HK_DEADCHAT_PLAYS "deadchat_plays"
@@ -104,7 +105,6 @@
// /obj
#define VV_HK_OSAY "osay"
#define VV_HK_MASS_DEL_TYPE "mass_delete_type"
#define VV_HK_ARMOR_MOD "mod_obj_armor"
// /obj/item
#define VV_HK_ADD_FANTASY_AFFIX "add_fantasy_affix"

View File

@@ -1,73 +0,0 @@
#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[fire]-[acid]-[wound]-[consume]"
/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, fire = 0, acid = 0, wound = 0, consume = 0)
. = locate(ARMORID)
if (!.)
. = new /datum/armor(melee, bullet, laser, energy, bomb, bio, fire, acid, wound, consume)
/datum/armor
var/melee
var/bullet
var/laser
var/energy
var/bomb
var/bio
var/fire
var/acid
var/wound
var/consume
/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, fire = 0, acid = 0, wound = 0, consume = 0)
src.melee = melee
src.bullet = bullet
src.laser = laser
src.energy = energy
src.bomb = bomb
src.bio = bio
src.fire = fire
src.acid = acid
src.wound = wound
src.consume = consume
GenerateTag()
/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, fire = 0, acid = 0, wound = 0, consume = 0)
return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.fire+fire, src.acid+acid, src.wound+wound, src.consume+consume)
/datum/armor/proc/modifyAllRatings(modifier = 0)
return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, fire+modifier, acid+modifier, wound+modifier, consume+modifier)
/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, fire, acid, wound, consume)
return getArmor((isnull(melee) ? src.melee : melee),\
(isnull(bullet) ? src.bullet : bullet),\
(isnull(laser) ? src.laser : laser),\
(isnull(energy) ? src.energy : energy),\
(isnull(bomb) ? src.bomb : bomb),\
(isnull(bio) ? src.bio : bio),\
(isnull(fire) ? src.fire : fire),\
(isnull(acid) ? src.acid : acid),\
(isnull(wound) ? src.wound : wound),\
(isnull(consume) ? src.consume : consume))
/datum/armor/proc/getRating(rating)
return vars[rating]
/datum/armor/proc/getList()
return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, FIRE = fire, ACID = acid, WOUND = wound, CONSUME = consume)
/datum/armor/proc/attachArmor(datum/armor/AA)
return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, fire+AA.fire, acid+AA.acid, wound+AA.wound, consume+AA.consume)
/datum/armor/proc/detachArmor(datum/armor/AA)
return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, fire-AA.fire, acid-AA.acid, wound-AA.wound, consume-AA.consume)
/datum/armor/GenerateTag()
. = ..()
tag = ARMORID
/datum/armor/vv_edit_var(var_name, var_value)
if (var_name == NAMEOF(src, tag))
return FALSE
. = ..()
GenerateTag()
#undef ARMORID

233
code/datums/armor/_armor.dm Normal file
View File

@@ -0,0 +1,233 @@
/// Assosciative list of type -> armor. Used to ensure we always hold a reference to default armor datums
GLOBAL_LIST_INIT(armor_by_type, generate_armor_type_cache())
/proc/generate_armor_type_cache()
var/list/armor_cache = list()
for(var/datum/armor/armor_type as anything in subtypesof(/datum/armor))
armor_type = new armor_type
armor_cache[armor_type.type] = armor_type
armor_type.GenerateTag()
return armor_cache
/**
* Gets an armor type datum using the given type by formatting it into the expected datum tag
*/
/proc/get_armor_by_type(armor_type)
var/armor = locate(replacetext("[armor_type]", "/", "-"))
if(armor)
return armor
if(armor_type == /datum/armor)
CRASH("Attempted to get the base armor type, you probably meant to use /datum/armor/none")
CRASH("Attempted to get an armor type that did not exist! '[armor_type]'")
/**
* The armor datum holds information about different types of armor that an atom can have.
* It also contains logic and helpers for calculating damage and effective damage
*/
/datum/armor
VAR_PROTECTED/acid = 0
VAR_PROTECTED/bio = 0
VAR_PROTECTED/bomb = 0
VAR_PROTECTED/bullet = 0
VAR_PROTECTED/consume = 0
VAR_PROTECTED/energy = 0
VAR_PROTECTED/laser = 0
VAR_PROTECTED/fire = 0
VAR_PROTECTED/melee = 0
VAR_PROTECTED/wound = 0
/// A version of armor with no protections
/datum/armor/none
/// A version of armor that cannot be modified and will always return itself when attempted to be modified
/datum/armor/immune
/datum/armor/Destroy(force, ...)
if(!force && tag)
return QDEL_HINT_LETMELIVE
// something really wants us gone
datum_flags &= ~DF_USE_TAG
tag = null
return ..()
/datum/armor/GenerateTag()
..()
tag = replacetext("[type]", "/", "-")
/datum/armor/vv_edit_var(var_name, var_value)
return FALSE
/datum/armor/can_vv_mark()
return FALSE
/datum/armor/vv_get_dropdown()
return list("", "MUST MODIFY ARMOR VALUES ON THE PARENT ATOM")
/datum/armor/CanProcCall(procname)
return FALSE
/// Generate a brand new armor datum with the modifiers given, if ARMOR_ALL is specified only that modifier is used
/datum/armor/proc/generate_new_with_modifiers(list/modifiers)
var/datum/armor/new_armor = new
var/all_keys = ARMOR_LIST_ALL()
if(ARMOR_ALL in modifiers)
var/modifier_all = modifiers[ARMOR_ALL]
if(!modifier_all)
return src
for(var/mod in all_keys)
new_armor.vars[mod] = vars[mod] + modifier_all
return new_armor
for(var/modifier in modifiers)
if(modifier in all_keys)
new_armor.vars[modifier] = vars[modifier] + modifiers[modifier]
else
stack_trace("Attempt to call generate_new_with_modifiers with illegal modifier '[modifier]'! Ignoring it")
return new_armor
/datum/armor/immune/generate_new_with_modifiers(list/modifiers)
return src
/// Generate a brand new armor datum with the multiplier given, if ARMOR_ALL is specified only that modifer is used
/datum/armor/proc/generate_new_with_multipliers(list/multipliers)
var/datum/armor/new_armor = new
var/all_keys = ARMOR_LIST_ALL()
if(ARMOR_ALL in multipliers)
var/multiplier_all = multipliers[ARMOR_ALL]
if(!multiplier_all)
return src
for(var/multiplier in all_keys)
new_armor.vars[multiplier] = vars[multiplier] * multiplier_all
return new_armor
for(var/multiplier in multipliers)
if(multiplier in all_keys)
new_armor.vars[multiplier] = vars[multiplier] * multipliers[multiplier]
else
stack_trace("Attempt to call generate_new_with_multipliers with illegal multiplier '[multiplier]'! Ignoring it")
return new_armor
/datum/armor/immune/generate_new_with_multipliers(list/multipliers)
return src
/// Generate a brand new armor datum with the values given, if a value is not present it carries over
/datum/armor/proc/generate_new_with_specific(list/values)
var/datum/armor/new_armor = new
var/all_keys = ARMOR_LIST_ALL()
if(ARMOR_ALL in values)
var/value_all = values[ARMOR_ALL]
if(!value_all)
return src
for(var/mod in all_keys)
new_armor.vars[mod] = value_all
return new_armor
for(var/value in values)
if(value in all_keys)
new_armor.vars[value] = values[value]
else
stack_trace("Attempt to call generate_new_with_specific with illegal value '[value]'! Ignoring it")
return new_armor
/datum/armor/immune/generate_new_with_specific(list/values)
return src
/// Gets the rating of armor for the specified rating
/datum/armor/proc/get_rating(rating)
// its not that I dont trust coders, its just that I don't trust coders
if(!(rating in ARMOR_LIST_ALL()))
CRASH("Attempted to get a rating '[rating]' that doesnt exist")
return vars[rating]
/datum/armor/immune/get_rating(rating)
return 100
/// Converts all the ratings of the armor into a list, optionally inversed
/datum/armor/proc/get_rating_list(inverse = FALSE)
var/ratings = list()
for(var/rating in ARMOR_LIST_ALL())
var/value = vars[rating]
if(inverse)
value *= -1
ratings[rating] = value
return ratings
/datum/armor/immune/get_rating_list(inverse)
var/ratings = ..() // get all ratings
for(var/rating in ratings)
ratings[rating] = 100 // and set them to 100
return ratings
/// Returns a new armor datum with the given armor added onto this one
/datum/armor/proc/add_other_armor(datum/armor/other)
if(ispath(other))
other = get_armor_by_type(other)
return generate_new_with_modifiers(other.get_rating_list())
/datum/armor/immune/add_other_armor(datum/armor/other)
return src
/// Returns a new armor datum with the given armor removed from this one
/datum/armor/proc/subtract_other_armor(datum/armor/other)
if(ispath(other))
other = get_armor_by_type(other)
return generate_new_with_modifiers(other.get_rating_list(inverse = TRUE))
/datum/armor/immune/subtract_other_armor(datum/armor/other)
return src
/// Checks if any of the armor values are non-zero, so this technically also counts negative armor!
/datum/armor/proc/has_any_armor()
for(var/rating as anything in ARMOR_LIST_ALL())
if(vars[rating])
return TRUE
return FALSE
/datum/armor/immune/has_any_armor()
return TRUE
/**
* Rounds armor_value down to the nearest 10, divides it by 10 and then converts it to Roman numerals.
*
* Arguments:
* * armor_value - Number we're converting
*/
/proc/armor_to_protection_class(armor_value)
if (armor_value < 0)
. = "-"
. += "\Roman[round(abs(armor_value), 10) / 10]"
return .
/**
* Returns the client readable name of an armor type
*
* Arguments:
* * armor_type - The type to convert
*/
/proc/armor_to_protection_name(armor_type)
switch(armor_type)
if(ACID)
return "ACID"
if(BIO)
return "BIOHAZARD"
if(BOMB)
return "EXPLOSIVE"
if(BULLET)
return "BULLET"
if(CONSUME)
return "CONSUMING"
if(ENERGY)
return "ENERGY"
if(FIRE)
return "FIRE"
if(LASER)
return "LASER"
if(MELEE)
return "MELEE"
if(WOUND)
return "WOUNDING"
CRASH("Unknown armor type '[armor_type]'")

View File

@@ -0,0 +1,22 @@
/// Get the atom's armor reference
/atom/proc/get_armor()
RETURN_TYPE(/datum/armor)
return (armor ||= get_armor_by_type(armor_type))
/// Helper to get a specific rating for the atom's armor
/atom/proc/get_armor_rating(damage_type)
var/datum/armor/armor = get_armor()
return armor.get_rating(damage_type)
/// Sets the armor of this atom to the specified armor
/atom/proc/set_armor(datum/armor/armor)
if(src.armor == armor)
return
if(!(src.armor?.type in GLOB.armor_by_type))
qdel(src.armor)
src.armor = ispath(armor) ? get_armor_by_type(armor) : armor
/// Helper to update the atom's armor to a new armor with the specified rating
/atom/proc/set_armor_rating(damage_type, rating)
var/datum/armor/armor = get_armor()
set_armor(armor.generate_new_with_specific(list("[damage_type]" = rating)))

View File

@@ -2,10 +2,13 @@
var/amount = 0
var/maxamount = 3
var/upgrade_item = /obj/item/stack/sheet/animalhide/goliath_hide
var/datum/armor/added_armor = list(MELEE = 10)
var/datum/armor/armor_mod = /datum/armor/armor_plate
var/upgrade_name
/datum/component/armor_plate/Initialize(_maxamount,obj/item/_upgrade_item,datum/armor/_added_armor)
/datum/armor/armor_plate
melee = 10
/datum/component/armor_plate/Initialize(_maxamount, obj/item/_upgrade_item, datum/armor/_added_armor)
if(!isobj(parent))
return COMPONENT_INCOMPATIBLE
@@ -20,14 +23,7 @@
if(_upgrade_item)
upgrade_item = _upgrade_item
if(_added_armor)
if(islist(_added_armor))
added_armor = getArmor(arglist(_added_armor))
else if (istype(_added_armor, /datum/armor))
added_armor = _added_armor
else
stack_trace("Invalid type [_added_armor.type] passed as _armor_item argument to armorplate component")
else
added_armor = getArmor(arglist(added_armor))
armor_mod = _added_armor
var/obj/item/typecast = upgrade_item
upgrade_name = initial(typecast.name)
@@ -68,7 +64,7 @@
var/obj/O = parent
amount++
O.armor = O.armor.attachArmor(added_armor)
O.set_armor(O.get_armor().add_other_armor(armor_mod))
if(ismecha(O))
var/obj/vehicle/sealed/mecha/R = O

View File

@@ -104,7 +104,7 @@
master.force = max(0, master.force + quality)
master.throwforce = max(0, master.throwforce + quality)
master.armor = master.armor?.modifyAllRatings(quality)
master.set_armor(master.get_armor().generate_new_with_modifiers(list(ARMOR_ALL = quality)))
master.wound_bonus += quality
master.bare_wound_bonus += quality
@@ -136,7 +136,7 @@
master.force = max(0, master.force - quality)
master.throwforce = max(0, master.throwforce - quality)
master.armor = master.armor?.modifyAllRatings(-quality)
master.set_armor(master.get_armor().generate_new_with_modifiers(list(ARMOR_ALL = -quality)))
master.wound_bonus -= quality
master.bare_wound_bonus -= quality

View File

@@ -99,14 +99,14 @@
if(isitem(parent))
//if you are putting an infective item on, it obviously will not protect you, so set its bio armor low enough that it will never block ContactContractDisease()
var/obj/item/equipped_item = parent
old_bio_armor = equipped_item.armor.getRating(BIO)
equipped_item.armor.setRating(bio = 0)
old_bio_armor = equipped_item.get_armor_rating(BIO)
equipped_item.set_armor_rating(BIO, 0)
try_infect(L, slot2body_zone(slot))
if(isitem(parent))
var/obj/item/equipped_item = parent
equipped_item.armor.setRating(bio = old_bio_armor)
equipped_item.set_armor_rating(BIO, old_bio_armor)
/datum/component/infective/proc/try_infect_crossed(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
SIGNAL_HANDLER

View File

@@ -70,26 +70,26 @@
switch(target_zone)
if(BODY_ZONE_HEAD)
if(isobj(infecting_human.head))
passed = prob(100-infecting_human.head.armor.getRating(BIO))
passed = prob(100-infecting_human.head.get_armor_rating(BIO))
if(passed && isobj(infecting_human.wear_mask))
passed = prob(100-infecting_human.wear_mask.armor.getRating(BIO))
passed = prob(100-infecting_human.wear_mask.get_armor_rating(BIO))
if(passed && isobj(infecting_human.wear_neck))
passed = prob(100-infecting_human.wear_neck.armor.getRating(BIO))
passed = prob(100-infecting_human.wear_neck.get_armor_rating(BIO))
if(BODY_ZONE_CHEST)
if(isobj(infecting_human.wear_suit))
passed = prob(100-infecting_human.wear_suit.armor.getRating(BIO))
passed = prob(100-infecting_human.wear_suit.get_armor_rating(BIO))
if(passed && isobj(infecting_human.w_uniform))
passed = prob(100-infecting_human.w_uniform.armor.getRating(BIO))
passed = prob(100-infecting_human.w_uniform.get_armor_rating(BIO))
if(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
if(isobj(infecting_human.wear_suit) && infecting_human.wear_suit.body_parts_covered&HANDS)
passed = prob(100-infecting_human.wear_suit.armor.getRating(BIO))
passed = prob(100-infecting_human.wear_suit.get_armor_rating(BIO))
if(passed && isobj(infecting_human.gloves))
passed = prob(100-infecting_human.gloves.armor.getRating(BIO))
passed = prob(100-infecting_human.gloves.get_armor_rating(BIO))
if(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
if(isobj(infecting_human.wear_suit) && infecting_human.wear_suit.body_parts_covered&FEET)
passed = prob(100-infecting_human.wear_suit.armor.getRating(BIO))
passed = prob(100-infecting_human.wear_suit.get_armor_rating(BIO))
if(passed && isobj(infecting_human.shoes))
passed = prob(100-infecting_human.shoes.armor.getRating(BIO))
passed = prob(100-infecting_human.shoes.get_armor_rating(BIO))
if(passed)
disease.try_infect(src)
@@ -138,4 +138,4 @@
return !is_mouth_covered()
/mob/living/carbon/CanSpreadAirborneDisease()
return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.armor.getRating(BIO) >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.armor.getRating(BIO) >= 25)))
return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.get_armor_rating(BIO) >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.get_armor_rating(BIO) >= 25)))

View File

@@ -198,4 +198,9 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 90, FIRE = 80, ACID = 50)
armor_type = /datum/armor/krav_maga_combatglovesplus
/datum/armor/krav_maga_combatglovesplus
bio = 90
fire = 80
acid = 50

View File

@@ -105,16 +105,7 @@ Simple datum which is instanced once per type and is used for every object of sa
o.modify_max_integrity(new_max_integrity)
o.force *= strength_modifier
o.throwforce *= strength_modifier
var/list/temp_armor_list = list() //Time to add armor modifiers!
if(!istype(o.armor))
return
var/list/current_armor = o.armor?.getList()
for(var/i in current_armor)
temp_armor_list[i] = current_armor[i] * armor_modifiers[i]
o.armor = getArmor(arglist(temp_armor_list))
o.set_armor(o.get_armor().generate_new_with_multipliers(armor_modifiers))
if(!isitem(o))
return

View File

@@ -25,7 +25,7 @@
shard_type = /obj/item/shard
value_per_unit = 0.0025
beauty_modifier = 0.05
armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, LASER = 0, ENERGY = 1, BOMB = 0, BIO = 0.2, FIRE = 1, ACID = 0.2)
armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, ENERGY = 1, BIO = 0.2, FIRE = 1, ACID = 0.2)
/datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch
@@ -95,7 +95,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/uranium
value_per_unit = 0.05
beauty_modifier = 0.3 //It shines so beautiful
armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, BOMB = 0, BIO = 0, FIRE = 1, ACID = 1)
armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, FIRE = 1, ACID = 1)
/datum/material/uranium/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -130,7 +130,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/plasma
value_per_unit = 0.1
beauty_modifier = 0.15
armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, LASER = 0, ENERGY = 1.2, BOMB = 0, BIO = 1.2, FIRE = 0, ACID = 0.5)
armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, ENERGY = 1.2, BIO = 1.2, ACID = 0.5)
/datum/material/plasma/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -178,7 +178,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/bananium
value_per_unit = 0.5
beauty_modifier = 0.5
armor_modifiers = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 0, FIRE = 10, ACID = 0) //Clowns cant be blown away.
armor_modifiers = list(BOMB = 100, FIRE = 10) //Clowns cant be blown away.
/datum/material/bananium/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -265,7 +265,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
value_per_unit = 0.01
beauty_modifier = 0.1
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, FIRE = 0, ACID = 0.3)
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, ACID = 0.3)
texture_layer_icon_state = "woodgrain"
/datum/material/wood/on_applied_obj(obj/source, amount, material_flags)
@@ -460,7 +460,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
sheet_type = /obj/item/stack/sheet/paperframes
value_per_unit = 0.0025
armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, FIRE = 0, ACID = 1.5)
armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "paper"
@@ -486,7 +486,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
sheet_type = /obj/item/stack/sheet/cardboard
value_per_unit = 0.003
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 0, ACID = 1.5)
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, ACID = 1.5)
beauty_modifier = -0.1
/datum/material/cardboard/on_applied_obj(obj/source, amount, material_flags)

View File

@@ -10,7 +10,7 @@
value_per_unit = 0.05
beauty_modifier = -0.3
strength_modifier = 0.7
armor_modifiers = list(MELEE = 0.3, BULLET = 0.3, LASER = 1.2, ENERGY = 1.2, BOMB = 0.3, BIO = 0, FIRE = 1, ACID = 1)
armor_modifiers = list(MELEE = 0.3, BULLET = 0.3, LASER = 1.2, ENERGY = 1.2, BOMB = 0.3, FIRE = 1, ACID = 1)
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "meat"

View File

@@ -8,7 +8,7 @@
value_per_unit = 0.05
beauty_modifier = 0.1
strength_modifier = 0.7
armor_modifiers = list(MELEE = 0.3, BULLET = 0.3, LASER = 1.2, ENERGY = 1.2, BOMB = 0.3, BIO = 0, FIRE = 1, ACID = 1)
armor_modifiers = list(MELEE = 0.3, BULLET = 0.3, LASER = 1.2, ENERGY = 1.2, BOMB = 0.3, FIRE = 1, ACID = 1)
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "pizza"

View File

@@ -71,7 +71,7 @@
return 0
var/armor_protection = 0
if(damage_flag)
armor_protection = armor.getRating(damage_flag)
armor_protection = get_armor_rating(damage_flag)
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
armor_protection = clamp(armor_protection - armour_penetration, min(armor_protection, 0), 100)
return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION)

View File

@@ -161,7 +161,9 @@
///any atom that uses integrity and can be damaged must set this to true, otherwise the integrity procs will throw an error
var/uses_integrity = FALSE
var/datum/armor/armor
VAR_PROTECTED/datum/armor/armor_type = /datum/armor/none
VAR_PRIVATE/datum/armor/armor
VAR_PRIVATE/atom_integrity //defaults to max_integrity
var/max_integrity = 500
var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the atom breaks. 0.5 being 50%
@@ -262,13 +264,6 @@
SETUP_SMOOTHING()
if(uses_integrity)
if (islist(armor))
armor = getArmor(arglist(armor))
else if (!armor)
armor = getArmor()
else if (!istype(armor, /datum/armor))
stack_trace("Invalid type [armor.type] found in .armor during /atom Initialize()")
atom_integrity = max_integrity
// apply materials properly from the default custom_materials value
@@ -1276,6 +1271,7 @@
VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters")
VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix")
VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller")
VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify Armor")
if(greyscale_colors)
VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE, "Modify greyscale colors")
@@ -1324,6 +1320,29 @@
if(href_list[VV_HK_SHOW_HIDDENPRINTS] && check_rights(R_ADMIN))
usr.client.cmd_show_hiddenprints(src)
if(href_list[VV_HK_ARMOR_MOD])
var/list/pickerlist = list()
var/list/armorlist = get_armor().get_rating_list()
for (var/i in armorlist)
pickerlist += list(list("value" = armorlist[i], "name" = i))
var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [src]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, inputtype = "text", values = pickerlist)
var/list/armor_all = ARMOR_LIST_ALL()
if (islist(result))
if (result["button"] != 2) // If the user pressed the cancel button
// text2num conveniently returns a null on invalid values
var/list/converted = list()
for(var/armor_key in armor_all)
converted[armor_key] = text2num(result["values"][armor_key])
set_armor(get_armor().generate_new_with_specific(converted))
var/message = "[key_name(usr)] modified the armor on [src] ([type]) to: "
for(var/armor_key in armor_all)
message += "[armor_key]=[get_armor_rating(armor_key)],"
message = copytext(message, 1, -1)
log_admin(span_notice(message))
message_admins(span_notice(message))
if(href_list[VV_HK_ADD_AI])
if(!check_rights(R_VAREDIT))

View File

@@ -152,10 +152,16 @@
/// What was our power state the last time we updated its appearance?
/// TRUE for on, FALSE for off, -1 for never checked
var/appearance_power_state = -1
armor_type = /datum/armor/obj_machinery
/datum/armor/obj_machinery
melee = 25
bullet = 10
laser = 10
fire = 50
acid = 70
/obj/machinery/Initialize(mapload)
if(!armor)
armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 70)
. = ..()
GLOB.machines += src

View File

@@ -7,13 +7,21 @@
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
plane = FLOOR_PLANE
max_integrity = 200
armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/machinery_ai_slipper
var/uses = 20
COOLDOWN_DECLARE(foam_cooldown)
var/cooldown_time = 10 SECONDS // just about enough cooldown time so you cant waste foam
req_access = list(ACCESS_AI_UPLOAD)
/datum/armor/machinery_ai_slipper
melee = 50
bullet = 20
laser = 20
energy = 20
fire = 50
acid = 30
/obj/machinery/ai_slipper/examine(mob/user)
. = ..()
. += span_notice("It has <b>[uses]</b> uses of foam remaining.")

View File

@@ -11,13 +11,22 @@
var/id = null
var/initialized_button = 0
var/silicon_access_disabled = FALSE
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 0, FIRE = 90, ACID = 70)
armor_type = /datum/armor/machinery_button
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.02
resistance_flags = LAVA_PROOF | FIRE_PROOF
/obj/machinery/button/indestructible
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/datum/armor/machinery_button
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 90
acid = 70
/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0)
. = ..()
if(built)
@@ -199,6 +208,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
/obj/machinery/button/door/indestructible
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/datum/armor/machinery_button
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 90
acid = 70
/obj/machinery/button/door/setup_device()
if(!device)
if(normaldoorcontrol)
@@ -297,6 +315,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
device_type = /obj/item/assembly/control/curtain
var/sync_doors = TRUE
/datum/armor/machinery_button
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 90
acid = 70
/obj/machinery/button/curtain/setup_device()
var/obj/item/assembly/control/curtain = device
curtain.sync_doors = sync_doors
@@ -333,6 +360,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
/// The specific lift id of the tram we're calling.
var/lift_id = MAIN_STATION_TRAM
/datum/armor/machinery_button
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 90
acid = 70
/obj/machinery/button/tram/setup_device()
var/obj/item/assembly/control/tram/tram_device = device
tram_device.initial_id = id

View File

@@ -13,7 +13,7 @@
plane = GAME_PLANE_UPPER
resistance_flags = FIRE_PROOF
damage_deflection = 12
armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 90, ACID = 50)
armor_type = /datum/armor/machinery_camera
max_integrity = 100
integrity_failure = 0.5
var/default_camera_icon = "camera" //the camera's base icon used by update_appearance - icon_state is primarily used for mapping display purposes.
@@ -54,6 +54,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/emp_proof, 0)
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/motion, 0)
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0)
/datum/armor/machinery_camera
melee = 50
bullet = 20
laser = 20
energy = 20
fire = 90
acid = 50
/obj/machinery/camera/preset/ordnance //Bomb test site in space
name = "Hardened Bomb-Test Camera"
desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top."

View File

@@ -5,7 +5,7 @@
density = TRUE
max_integrity = 200
integrity_failure = 0.5
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 40, ACID = 20)
armor_type = /datum/armor/machinery_computer
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY
/// How bright we are when turned on.
var/brightness_on = 1
@@ -20,6 +20,10 @@
/// Are we authenticated to use this? Used by things like comms console, security and medical data, and apc controller.
var/authenticated = FALSE
/datum/armor/machinery_computer
fire = 40
acid = 20
/obj/machinery/computer/Initialize(mapload, obj/item/circuitboard/C)
. = ..()

View File

@@ -139,12 +139,20 @@
anchored = FALSE
max_integrity = 180
proj_pass_rate = 20
armor = list(MELEE = 10, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 0, FIRE = 10, ACID = 0)
armor_type = /datum/armor/barricade_security
var/deploy_time = 40
var/deploy_message = TRUE
/datum/armor/barricade_security
melee = 10
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 10
/obj/structure/barricade/security/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, PROC_REF(deploy)), deploy_time)
@@ -166,6 +174,14 @@
actions_types = list(/datum/action/item_action/toggle_barrier_spread)
var/mode = SINGLE
/datum/armor/barricade_security
melee = 10
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 10
/obj/item/grenade/barrier/examine(mob/user)
. = ..()
. += span_notice("Alt-click to toggle modes.")
@@ -224,6 +240,14 @@
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
/datum/armor/barricade_security
melee = 10
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 10
/obj/item/deployable_turret_folded/Initialize(mapload)
. = ..()
AddComponent(/datum/component/deployable, 5 SECONDS, /obj/machinery/deployable_turret/hmg, delete_on_use = TRUE)

View File

@@ -582,7 +582,7 @@
desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state."
normal_integrity = 150
damage_deflection = 5
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
armor_type = /datum/armor/none
//////////////////////////////////

View File

@@ -12,7 +12,7 @@
power_channel = AREA_USAGE_ENVIRON
pass_flags_self = PASSDOORS
max_integrity = 350
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 0, FIRE = 80, ACID = 70)
armor_type = /datum/armor/machinery_door
can_atmos_pass = ATMOS_PASS_DENSITY
flags_1 = PREVENT_CLICK_UNDER_1
receive_ricochet_chance_mod = 0.8
@@ -45,6 +45,15 @@
var/can_crush = TRUE /// Whether or not the door can crush mobs.
var/can_open_with_hands = TRUE /// Whether or not the door can be opened by hand (used for blast doors and shutters)
/datum/armor/machinery_door
melee = 30
bullet = 30
laser = 20
energy = 20
bomb = 10
fire = 80
acid = 70
/obj/machinery/door/Initialize(mapload)
. = ..()
set_init_door_layer()
@@ -462,6 +471,15 @@
/obj/machinery/door/morgue
icon = 'icons/obj/doors/doormorgue.dmi'
/datum/armor/machinery_door
melee = 30
bullet = 30
laser = 20
energy = 20
bomb = 10
fire = 80
acid = 70
/obj/machinery/door/get_dumping_location()
return null

View File

@@ -19,7 +19,7 @@
safe = FALSE
layer = BELOW_OPEN_DOOR_LAYER
closingLayer = CLOSED_FIREDOOR_LAYER
armor = list(MELEE = 10, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 0, FIRE = 95, ACID = 70)
armor_type = /datum/armor/door_firedoor
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
COOLDOWN_DECLARE(activation_cooldown)
@@ -65,6 +65,15 @@
var/bash_sound = 'sound/effects/glassbash.ogg'
/datum/armor/door_firedoor
melee = 10
bullet = 30
laser = 20
energy = 20
bomb = 30
fire = 95
acid = 70
/obj/machinery/door/firedoor/Initialize(mapload)
. = ..()
soundloop = new(src, FALSE)
@@ -676,6 +685,15 @@
density = TRUE
alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
/datum/armor/door_firedoor
melee = 10
bullet = 30
laser = 20
energy = 20
bomb = 30
fire = 95
acid = 70
/obj/machinery/door/firedoor/border_only/Initialize(mapload)
. = ..()
adjust_lights_starting_offset()
@@ -748,6 +766,15 @@
var/constructionStep = CONSTRUCTION_NO_CIRCUIT
var/reinforced = 0
/datum/armor/door_firedoor
melee = 10
bullet = 30
laser = 20
energy = 20
bomb = 30
fire = 95
acid = 70
/obj/structure/firelock_frame/examine(mob/user)
. = ..()
switch(constructionStep)

View File

@@ -6,7 +6,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_password
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
damage_deflection = 70
var/password = "Swordfish"
@@ -17,6 +17,16 @@
voice_activated = TRUE
/datum/armor/door_password
melee = 100
bullet = 100
laser = 100
energy = 100
bomb = 100
bio = 100
fire = 100
acid = 100
/obj/machinery/door/password/Initialize(mapload)
. = ..()
if(voice_activated)

View File

@@ -10,7 +10,7 @@
heat_proof = TRUE
safe = FALSE
max_integrity = 600
armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 0, FIRE = 100, ACID = 70)
armor_type = /datum/armor/door_poddoor
resistance_flags = FIRE_PROOF
damage_deflection = 70
can_open_with_hands = FALSE
@@ -18,6 +18,15 @@
var/deconstruction = BLASTDOOR_FINISHED // deconstruction step
var/id = 1
/datum/armor/door_poddoor
melee = 50
bullet = 100
laser = 100
energy = 100
bomb = 50
fire = 100
acid = 70
/obj/machinery/door/poddoor/screwdriver_act(mob/living/user, obj/item/tool)
. = ..()
if (density)
@@ -167,6 +176,15 @@
var/checkdir = 4 //door won't open if turf in this dir is `turftype`
var/turftype = /turf/open/space
/datum/armor/door_poddoor
melee = 50
bullet = 100
laser = 100
energy = 100
bomb = 50
fire = 100
acid = 70
/obj/machinery/door/poddoor/shuttledock/proc/check()
var/turf/turf = get_step(src, checkdir)
if(!istype(turf, turftype))

View File

@@ -6,7 +6,7 @@
layer = SHUTTER_LAYER
closingLayer = SHUTTER_LAYER
damage_deflection = 20
armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 75, BOMB = 25, BIO = 0, FIRE = 100, ACID = 70)
armor_type = /datum/armor/poddoor_shutters
max_integrity = 100
recipe_type = /datum/crafting_recipe/shutters
@@ -32,6 +32,15 @@
opacity = FALSE
rad_insulation = RAD_NO_INSULATION
/datum/armor/poddoor_shutters
melee = 20
bullet = 20
laser = 20
energy = 75
bomb = 25
fire = 100
acid = 70
/obj/machinery/door/poddoor/shutters/radiation/open()
. = ..()
rad_insulation = RAD_NO_INSULATION

View File

@@ -9,7 +9,7 @@
var/base_state = "left"
max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file
integrity_failure = 0
armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 0, FIRE = 70, ACID = 100)
armor_type = /datum/armor/door_window
visible = FALSE
flags_1 = ON_BORDER_1
opacity = FALSE
@@ -24,6 +24,15 @@
var/cable = 1
var/list/debris = list()
/datum/armor/door_window
melee = 20
bullet = 50
laser = 50
energy = 50
bomb = 10
fire = 70
acid = 100
/obj/machinery/door/window/Initialize(mapload, set_dir, unres_sides)
. = ..()
init_network_id(NETWORK_DOOR_AIRLOCKS)

View File

@@ -17,7 +17,7 @@
icon_state = "fire0"
max_integrity = 250
integrity_failure = 0.4
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 90, ACID = 30)
armor_type = /datum/armor/machinery_firealarm
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.05
active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.02
power_channel = AREA_USAGE_ENVIRON
@@ -38,6 +38,10 @@
///looping sound datum for our fire alarm siren.
var/datum/looping_sound/firealarm/soundloop
/datum/armor/machinery_firealarm
fire = 90
acid = 30
/obj/machinery/firealarm/Initialize(mapload, dir, building)
. = ..()
if(building)
@@ -437,6 +441,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/firealarm, 26)
desc = "Cuban Pete is in the house!"
var/static/party_overlay
/datum/armor/machinery_firealarm
fire = 90
acid = 30
/obj/machinery/firealarm/partyalarm/reset()
if (machine_stat & (NOPOWER|BROKEN))
return
@@ -473,6 +481,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/firealarm, 26)
var/obj/machinery/firealarm/attached_alarm
/datum/armor/machinery_firealarm
fire = 90
acid = 30
/obj/item/circuit_component/firealarm/populate_ports()
alarm_trigger = add_input_port("Set", PORT_TYPE_SIGNAL)
reset_trigger = add_input_port("Reset", PORT_TYPE_SIGNAL)

View File

@@ -43,7 +43,7 @@ Possible to do for anyone motivated enough:
plane = GAME_PLANE
req_access = list(ACCESS_KEYCARD_AUTH) //Used to allow for forced connecting to other (not secure) holopads. Anyone can make a call, though.
max_integrity = 300
armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, FIRE = 50, ACID = 0)
armor_type = /datum/armor/machinery_holopad
circuit = /obj/item/circuitboard/machine/holopad
/// associative lazylist of the form: list(mob calling us = hologram representing that mob).
/// this is only populated for holopads answering calls from another holopad
@@ -87,6 +87,13 @@ Possible to do for anyone motivated enough:
///bitfield. used to turn on and off hearing sensitivity depending on if we can act on Hear() at all - meant for lowering the number of unessesary hearable atoms
var/can_hear_flags = NONE
/datum/armor/machinery_holopad
melee = 50
bullet = 20
laser = 20
energy = 20
fire = 50
/obj/machinery/holopad/Initialize(mapload)
. = ..()
/// We set the plane on mapload such that we can see the holopad render over atmospherics pipe and cabling in a map editor (without initialization), but so it gets that "inset" look in the floor in-game.
@@ -98,6 +105,13 @@ Possible to do for anyone motivated enough:
desc = "It's a floor-mounted device for projecting holographic images. This one will refuse to auto-connect incoming calls."
secure = TRUE
/datum/armor/machinery_holopad
melee = 50
bullet = 20
laser = 20
energy = 20
fire = 50
/obj/machinery/holopad/secure/Initialize(mapload)
. = ..()
var/obj/item/circuitboard/machine/holopad/board = circuit
@@ -112,6 +126,13 @@ Possible to do for anyone motivated enough:
var/datum/proximity_monitor/proximity_monitor
var/proximity_range = 1
/datum/armor/machinery_holopad
melee = 50
bullet = 20
laser = 20
energy = 20
fire = 50
/obj/machinery/holopad/tutorial/Initialize(mapload)
. = ..()
if(proximity_range)
@@ -856,6 +877,13 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
var/mob/living/Impersonation
var/datum/holocall/HC
/datum/armor/machinery_holopad
melee = 50
bullet = 20
laser = 20
energy = 20
fire = 50
/obj/effect/overlay/holo_pad_hologram/Destroy()
Impersonation = null
if(!QDELETED(HC))

View File

@@ -6,7 +6,7 @@
base_icon_state = "igniter"
plane = FLOOR_PLANE
max_integrity = 300
armor = list(MELEE = 50, BULLET = 30, LASER = 70, ENERGY = 50, BOMB = 20, BIO = 0, FIRE = 100, ACID = 70)
armor_type = /datum/armor/machinery_igniter
resistance_flags = FIRE_PROOF
var/id = null
var/on = FALSE
@@ -24,6 +24,15 @@
on = TRUE
icon_state = "igniter1"
/datum/armor/machinery_igniter
melee = 50
bullet = 30
laser = 70
energy = 50
bomb = 20
fire = 100
acid = 70
/obj/machinery/igniter/attack_hand(mob/user, list/modifiers)
. = ..()
if(.)
@@ -71,6 +80,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
/obj/machinery/sparker/ordmix
id = INCINERATOR_ORDMIX_IGNITER
/datum/armor/machinery_igniter
melee = 50
bullet = 30
laser = 70
energy = 50
bomb = 20
fire = 100
acid = 70
/obj/machinery/sparker/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread

View File

@@ -10,7 +10,7 @@
desc = "A radio beacon used for bot navigation."
layer = LOW_OBJ_LAYER
max_integrity = 500
armor = list(MELEE = 70, BULLET = 70, LASER = 70, ENERGY = 70, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80)
armor_type = /datum/armor/machinery_navbeacon
var/open = FALSE // true if cover is open
var/locked = TRUE // true if controls are locked
@@ -21,6 +21,14 @@
req_one_access = list(ACCESS_ENGINEERING, ACCESS_ROBOTICS)
/datum/armor/machinery_navbeacon
melee = 70
bullet = 70
laser = 70
energy = 70
fire = 80
acid = 80
/obj/machinery/navbeacon/Initialize(mapload)
. = ..()

View File

@@ -9,7 +9,7 @@
verb_say = "beeps"
verb_ask = "beeps"
verb_exclaim = "beeps"
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
armor_type = /datum/armor/machinery_newscaster
max_integrity = 200
integrity_failure = 0.25
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY
@@ -54,6 +54,11 @@
///Text of the currently written bounty
var/bounty_text = ""
/datum/armor/machinery_newscaster
melee = 50
fire = 50
acid = 30
/obj/machinery/newscaster/pai/ui_state(mob/user)
return GLOB.reverse_contained_state

View File

@@ -37,7 +37,7 @@ DEFINE_BITFIELD(turret_flags, list(
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.15
max_integrity = 160 //the turret's health
integrity_failure = 0.5
armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, FIRE = 90, ACID = 90)
armor_type = /datum/armor/machinery_porta_turret
base_icon_state = "standard"
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
@@ -104,6 +104,15 @@ DEFINE_BITFIELD(turret_flags, list(
/// Mob that is remotely controlling the turret
var/mob/remote_controller
/datum/armor/machinery_porta_turret
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 30
fire = 90
acid = 90
/obj/machinery/porta_turret/Initialize(mapload)
. = ..()
if(!base)
@@ -647,6 +656,15 @@ DEFINE_BITFIELD(turret_flags, list(
button_icon = 'icons/mob/actions/actions_mecha.dmi'
button_icon_state = "mech_cycle_equip_off"
/datum/armor/machinery_porta_turret
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 30
fire = 90
acid = 90
/datum/action/turret_toggle/Trigger(trigger_flags)
var/obj/machinery/porta_turret/P = target
if(!istype(P))
@@ -658,6 +676,15 @@ DEFINE_BITFIELD(turret_flags, list(
button_icon = 'icons/mob/actions/actions_mecha.dmi'
button_icon_state = "mech_eject"
/datum/armor/machinery_porta_turret
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 30
fire = 90
acid = 90
/datum/action/turret_quit/Trigger(trigger_flags)
var/obj/machinery/porta_turret/P = target
if(!istype(P))
@@ -724,6 +751,15 @@ DEFINE_BITFIELD(turret_flags, list(
faction = list(ROLE_SYNDICATE)
desc = "A ballistic machine gun auto-turret."
/datum/armor/machinery_porta_turret
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 30
fire = 90
acid = 90
/obj/machinery/porta_turret/syndicate/Initialize(mapload)
. = ..()
AddElement(/datum/element/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES)
@@ -770,7 +806,16 @@ DEFINE_BITFIELD(turret_flags, list(
lethal_projectile = /obj/projectile/bullet/p50/penetrator/shuttle
lethal_projectile_sound = 'sound/weapons/gun/smg/shot.ogg'
stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg'
armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 80, BIO = 0, FIRE = 90, ACID = 90)
armor_type = /datum/armor/syndicate_shuttle
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/porta_turret/syndicate/shuttle/target(atom/movable/target)
if(target)
@@ -785,6 +830,15 @@ DEFINE_BITFIELD(turret_flags, list(
faction = list("silicon")
turret_flags = TURRET_FLAG_SHOOT_CRIMINALS | TURRET_FLAG_SHOOT_ANOMALOUS | TURRET_FLAG_SHOOT_HEADS
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/porta_turret/ai/assess_perp(mob/living/carbon/human/perp)
return 10 //AI turrets shoot at everything not in their faction
@@ -797,6 +851,15 @@ DEFINE_BITFIELD(turret_flags, list(
mode = TURRET_LETHAL //It would be useless in stun mode anyway
faction = list(FACTION_NEUTRAL,"silicon","turret") //Minebots, medibots, etc that should not be shot.
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/porta_turret/aux_base/assess_perp(mob/living/carbon/human/perp)
return 0 //Never shoot humanoids. You are on your own if Ashwalkers or the like attack!
@@ -827,6 +890,15 @@ DEFINE_BITFIELD(turret_flags, list(
faction = list(FACTION_NEUTRAL,"silicon","turret")
mode = TURRET_LETHAL
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/porta_turret/centcom_shuttle/Initialize(mapload)
. = ..()
AddElement(/datum/element/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES)
@@ -874,6 +946,15 @@ DEFINE_BITFIELD(turret_flags, list(
/// List of weakrefs to all turrets
var/list/turrets = list()
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/turretid/Initialize(mapload, ndir = 0, built = 0)
. = ..()
if(built)
@@ -1033,6 +1114,15 @@ DEFINE_BITFIELD(turret_flags, list(
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
pixel_shift = 29
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/item/gun/proc/get_turret_properties()
. = list()
.["lethal_projectile"] = null
@@ -1093,6 +1183,15 @@ DEFINE_BITFIELD(turret_flags, list(
turret_flags = TURRET_FLAG_AUTH_WEAPONS
var/team_color
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/porta_turret/lasertag/assess_perp(mob/living/carbon/human/perp)
. = 0
if(team_color == "blue") //Lasertag turrets target the opposing team, how great is that? -Sieve
@@ -1136,6 +1235,15 @@ DEFINE_BITFIELD(turret_flags, list(
installation = /obj/item/gun/energy/laser/bluetag
team_color = "blue"
/datum/armor/syndicate_shuttle
melee = 50
bullet = 30
laser = 30
energy = 30
bomb = 80
fire = 90
acid = 90
/obj/machinery/porta_turret/lasertag/bullet_act(obj/projectile/P)
. = ..()
if(on)

View File

@@ -8,7 +8,7 @@
/// roughly the same health/armor as an airlock
max_integrity = 450
damage_deflection = 30
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 0, FIRE = 80, ACID = 70)
armor_type = /datum/armor/machinery_prisongate
use_power = IDLE_POWER_USE
power_channel = AREA_USAGE_EQUIP
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.05
@@ -18,6 +18,15 @@
var/gate_active = TRUE
COOLDOWN_DECLARE(spam_cooldown_time)
/datum/armor/machinery_prisongate
melee = 30
bullet = 30
laser = 20
energy = 20
bomb = 10
fire = 80
acid = 70
/obj/machinery/prisongate/power_change()
. = ..()
if(!powered())

View File

@@ -75,7 +75,15 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
var/supplies_requestable = FALSE // Can others request supplies from this terminal?
var/anon_tips_receiver = FALSE // Can you relay information to this console?
max_integrity = 300
armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, FIRE = 90, ACID = 90)
armor_type = /datum/armor/machinery_requests_console
/datum/armor/machinery_requests_console
melee = 70
bullet = 30
laser = 30
energy = 30
fire = 90
acid = 90
/obj/machinery/requests_console/update_appearance(updates=ALL)
. = ..()

View File

@@ -26,7 +26,7 @@
density = TRUE
anchored = FALSE
max_integrity = 500
armor = list(MELEE = 45, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 10, BIO = 0, FIRE = 30, ACID = 30)
armor_type = /datum/armor/machinery_roulette
var/static/list/numbers = list("0" = "green", "1" = "red", "3" = "red", "5" = "red", "7" = "red", "9" = "red", "12" = "red", "14" = "red", "16" = "red",\
"18" = "red", "19" = "red", "21" = "red", "23" = "red", "25" = "red", "27" = "red", "30" = "red", "32" = "red", "34" = "red", "36" = "red",\
"2" = "black", "4" = "black", "6" = "black", "8" = "black", "10" = "black", "11" = "black", "13" = "black", "15" = "black", "17" = "black", "20" = "black",\
@@ -46,6 +46,15 @@
var/on = TRUE
var/last_spin = 13
/datum/armor/machinery_roulette
melee = 45
bullet = 30
laser = 30
energy = 30
bomb = 10
fire = 30
acid = 30
/obj/machinery/roulette/Initialize(mapload)
. = ..()
jackpot_loop = new(src, FALSE)
@@ -434,6 +443,15 @@
icon_state = "floor_beacon"
var/used
/datum/armor/machinery_roulette
melee = 45
bullet = 30
laser = 30
energy = 30
bomb = 10
fire = 30
acid = 30
/obj/item/roulette_wheel_beacon/attack_self()
if(used)
return

View File

@@ -13,7 +13,7 @@
name = "space heater"
desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire. Warranty void if used in engines."
max_integrity = 250
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 10)
armor_type = /datum/armor/machinery_space_heater
circuit = /obj/item/circuitboard/machine/space_heater
//We don't use area power, we always use the cell
use_power = NO_POWER_USE
@@ -40,6 +40,10 @@
///Should we add an overlay for open spaceheaters
var/display_panel = TRUE
/datum/armor/machinery_space_heater
fire = 80
acid = 10
/obj/machinery/space_heater/get_cell()
return cell
@@ -277,6 +281,10 @@
/obj/machinery/space_heater/constructed
cell = null
/datum/armor/machinery_space_heater
fire = 80
acid = 10
/obj/machinery/space_heater/constructed/Initialize(mapload)
. = ..()
set_panel_open(TRUE)
@@ -305,6 +313,10 @@
var/chem_heating_power = 1
display_panel = FALSE
/datum/armor/machinery_space_heater
fire = 80
acid = 10
/obj/machinery/space_heater/improvised_chem_heater/Destroy()
. = ..()
QDEL_NULL(beaker)

View File

@@ -11,9 +11,16 @@
icon_state = "blackbox"
name = "Blackbox Recorder"
density = TRUE
armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 70)
armor_type = /datum/armor/machinery_blackbox_recorder
var/obj/item/stored
/datum/armor/machinery_blackbox_recorder
melee = 25
bullet = 10
laser = 10
fire = 50
acid = 70
/obj/machinery/blackbox_recorder/Initialize(mapload)
. = ..()
stored = new /obj/item/blackbox(src)
@@ -82,6 +89,13 @@
var/decryptkey = "password"
var/calibrating = 15 MINUTES //Init reads this and adds world.time, then becomes 0 when that time has passed and the machine works
/datum/armor/machinery_blackbox_recorder
melee = 25
bullet = 10
laser = 10
fire = 50
acid = 70
/obj/machinery/telecomms/message_server/Initialize(mapload)
. = ..()
if (!decryptkey)
@@ -153,6 +167,13 @@
server_type = /obj/machinery/telecomms/message_server
var/datum/logged
/datum/armor/machinery_blackbox_recorder
melee = 25
bullet = 10
laser = 10
fire = 50
acid = 70
/datum/signal/subspace/messaging/New(init_source, init_data)
source = init_source
data = init_data
@@ -203,6 +224,13 @@
var/datum/picture/picture // attached photo
var/automated = 0 //automated message
/datum/armor/machinery_blackbox_recorder
melee = 25
bullet = 10
laser = 10
fire = 50
acid = 70
/datum/data_tablet_msg/New(param_rec, param_sender, param_message, param_photo)
if(param_rec)
recipient = param_rec
@@ -232,6 +260,13 @@
var/id_auth = "Unauthenticated"
var/priority = "Normal"
/datum/armor/machinery_blackbox_recorder
melee = 25
bullet = 10
laser = 10
fire = 50
acid = 70
/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority)
if(param_rec)
rec_dpt = param_rec

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
@@ -431,6 +435,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"),
@@ -504,6 +512,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)
@@ -774,6 +786,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
@@ -872,6 +888,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))
@@ -933,6 +953,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)
@@ -1131,6 +1155,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)
. = ..()
@@ -1384,6 +1412,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
@@ -1410,6 +1442,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

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

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

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)
. = ..()
@@ -840,6 +844,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"
@@ -851,6 +859,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)
@@ -874,6 +886,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
@@ -904,6 +920,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))
@@ -1069,6 +1089,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)
@@ -1080,6 +1104,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])"]"
@@ -1175,6 +1203,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])"]"
@@ -1192,6 +1224,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)
@@ -1221,6 +1257,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()
@@ -1331,6 +1371,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)
. = ..()

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)
@@ -690,6 +706,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

View File

@@ -105,9 +105,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

View File

@@ -25,7 +25,7 @@
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
block_chance = 45 //SKYRAT EDIT - Lowered ORIGINAL: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
@@ -37,6 +37,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, \
@@ -193,6 +197,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)

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, \
@@ -71,6 +75,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"

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))

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)
@@ -127,6 +139,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
@@ -143,7 +159,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
@@ -157,6 +173,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)

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"

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 = 35 // SKYRAT EDIT - 4 baton crit now (Original: 45)
@@ -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(!.)

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
@@ -40,6 +40,10 @@
// SKYRAT EDIT ADD END
/datum/armor/melee_energy
fire = 100
acid = 30
/obj/item/melee/energy/Initialize(mapload)
. = ..()
make_transformable()
@@ -156,6 +160,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, \
@@ -186,6 +194,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 ..()
@@ -197,6 +209,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
@@ -246,6 +262,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))
@@ -281,6 +301,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!"))
@@ -324,6 +348,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()

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"

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")

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)
@@ -308,6 +312,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

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))

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

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
@@ -355,13 +374,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"

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, \

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)
@@ -82,6 +90,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, \

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
@@ -181,6 +189,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)

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

View File

@@ -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

View File

@@ -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(

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)
. = ..()
@@ -79,6 +83,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()
@@ -224,6 +232,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
@@ -244,6 +256,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)
@@ -318,6 +334,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_MAXIMUM, use_anchor = TRUE) // SKYRAT EDIT - Ghosts can't see smuggler's satchels
@@ -349,6 +369,10 @@
//slowdown = 1 //ORIGINAL
slowdown = 0.5 //SKYRAT EDIT CHANGE
/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)
@@ -445,6 +477,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)
@@ -472,6 +508,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)
@@ -487,6 +527,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)
@@ -504,6 +548,10 @@
special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials." // Skyrat edit
/datum/armor/backpack_holding
fire = 60
acid = 50
/obj/item/storage/backpack/duffelbag/syndie/Initialize(mapload)
. = ..()
atom_storage.silent = TRUE
@@ -513,6 +561,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)
@@ -535,6 +587,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)
@@ -559,6 +615,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)
@@ -569,6 +629,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)
@@ -576,6 +640,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)
@@ -586,6 +654,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)
@@ -600,6 +672,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)
@@ -609,6 +685,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)
@@ -618,6 +698,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)
@@ -627,6 +711,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)
@@ -649,6 +737,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)
@@ -690,6 +782,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)

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

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.

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
@@ -361,6 +393,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)
@@ -401,6 +437,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()

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()
@@ -338,6 +343,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)
@@ -507,6 +517,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)

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)

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"]))

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)
@@ -345,6 +349,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
@@ -358,6 +366,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
@@ -373,6 +385,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
@@ -390,6 +406,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)
@@ -418,6 +438,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)

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)))

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)
@@ -97,6 +105,10 @@
tool_behaviour = null
toolspeed = null
/datum/armor/item_wrench
fire = 50
acid = 30
/obj/item/wrench/combat/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \

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"

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, \
@@ -1073,6 +1145,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)
@@ -1097,6 +1173,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!")

View File

@@ -222,7 +222,6 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag)
VV_DROPDOWN_OPTION("", "---")
VV_DROPDOWN_OPTION(VV_HK_MASS_DEL_TYPE, "Delete all of type")
VV_DROPDOWN_OPTION(VV_HK_OSAY, "Object Say")
VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify armor values")
/obj/vv_do_topic(list/href_list)
if(!(. = ..()))
@@ -230,28 +229,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag)
if(href_list[VV_HK_OSAY])
if(check_rights(R_FUN, FALSE))
usr.client.object_say(src)
if(href_list[VV_HK_ARMOR_MOD])
var/list/pickerlist = list()
var/list/armorlist = armor.getList()
for (var/i in armorlist)
pickerlist += list(list("value" = armorlist[i], "name" = i))
var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [src]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, inputtype = "text", values = pickerlist)
if (islist(result))
if (result["button"] != 2) // If the user pressed the cancel button
// text2num conveniently returns a null on invalid values
armor = armor.setRating(melee = text2num(result["values"][MELEE]),\
bullet = text2num(result["values"][BULLET]),\
laser = text2num(result["values"][LASER]),\
energy = text2num(result["values"][ENERGY]),\
bomb = text2num(result["values"][BOMB]),\
bio = text2num(result["values"][BIO]),\
fire = text2num(result["values"][FIRE]),\
acid = text2num(result["values"][ACID]))
log_admin("[key_name(usr)] modified the armor on [src] ([type]) to melee: [armor.melee], bullet: [armor.bullet], laser: [armor.laser], energy: [armor.energy], bomb: [armor.bomb], bio: [armor.bio], fire: [armor.fire], acid: [armor.acid]")
message_admins(span_notice("[key_name_admin(usr)] modified the armor on [src] ([type]) to melee: [armor.melee], bullet: [armor.bullet], laser: [armor.laser], energy: [armor.energy], bomb: [armor.bomb], bio: [armor.bio], fire: [armor.fire], acid: [armor.acid]"))
if(href_list[VV_HK_MASS_DEL_TYPE])
if(check_rights(R_DEBUG|R_SERVER))
var/action_type = tgui_alert(usr, "Strict type ([type]) or type and all subtypes?",,list("Strict type","Type and subtypes","Cancel"))

View File

@@ -10,10 +10,13 @@
pass_flags_self = PASSSTRUCTURE
blocks_emissive = EMISSIVE_BLOCK_GENERIC
var/broken = FALSE
armor_type = /datum/armor/obj_structure
/datum/armor/obj_structure
fire = 50
acid = 50
/obj/structure/Initialize(mapload)
if (!armor)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
. = ..()
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
QUEUE_SMOOTH(src)

View File

@@ -9,12 +9,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)

View File

@@ -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)
. = ..()

View File

@@ -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))

View File

@@ -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.")

View File

@@ -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 ..()

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 ..()

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)

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)

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

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>.")

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))

View File

@@ -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())

View File

@@ -4,7 +4,7 @@
gender = PLURAL
icon = 'icons/obj/stationobjs.dmi'//ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
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

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

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()

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)

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 = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 0, FIRE = 80, ACID = 100) // SKYRAT EDIT CHANGE
armor_type = /datum/armor/window_reinforced
max_integrity = 75
explosion_block = 1
damage_deflection = 11
@@ -453,6 +458,13 @@
//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 = 50
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 +575,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 +619,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 +742,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 +762,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 +772,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 +808,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 +818,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 +856,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 +864,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()

View File

@@ -10,7 +10,7 @@
icon = 'icons/turf/shuttle.dmi'
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS
armor = list(MELEE = 100, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 70) //default + ignores melee
armor_type = /datum/armor/power_shuttle_engine
can_atmos_pass = ATMOS_PASS_DENSITY
max_integrity = 500
density = TRUE
@@ -26,6 +26,13 @@
///The mobile ship we are connected to.
var/datum/weakref/connected_ship_ref
/datum/armor/power_shuttle_engine
melee = 100
bullet = 10
laser = 10
fire = 50
acid = 70
/obj/machinery/power/shuttle_engine/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
. = ..()
if(!port)

View File

@@ -229,8 +229,8 @@
burn_obj.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava
if(burn_obj.resistance_flags & FIRE_PROOF)
burn_obj.resistance_flags &= ~FIRE_PROOF
if(burn_obj.armor.fire > 50) //obj with 100% fire armor still get slowly burned away.
burn_obj.armor = burn_obj.armor.setRating(fire = 50)
if(burn_obj.get_armor_rating(FIRE) > 50) //obj with 100% fire armor still get slowly burned away.
burn_obj.set_armor_rating(FIRE, 50)
burn_obj.fire_act(temperature_damage, 1000 * delta_time)
if(istype(burn_obj, /obj/structure/closet))
var/obj/structure/closet/burn_closet = burn_obj

View File

@@ -166,11 +166,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
if(uses_integrity)
atom_integrity = max_integrity
if (islist(armor))
armor = getArmor(arglist(armor))
else if (!armor)
armor = getArmor()
return INITIALIZE_HINT_NORMAL
/// Initializes our adjacent turfs. If you want to avoid this, do not override it, instead set init_air to FALSE

View File

@@ -13,7 +13,7 @@
icon_state = "vest_stealth"
inhand_icon_state = "armor"
blood_overlay_type = "armor"
armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 25, BOMB = 15, BIO = 15, FIRE = 70, ACID = 70)
armor_type = /datum/armor/abductor_vest
actions_types = list(/datum/action/item_action/hands_free/activate)
allowed = list(
/obj/item/abductor,
@@ -26,13 +26,26 @@
/// Cooldown in seconds
var/combat_cooldown = 20
var/datum/icon_snapshot/disguise
var/stealth_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 25, BOMB = 15, BIO = 15, FIRE = 70, ACID = 70)
var/combat_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, FIRE = 90, ACID = 90)
/obj/item/clothing/suit/armor/abductor/vest/Initialize(mapload)
. = ..()
stealth_armor = getArmor(arglist(stealth_armor))
combat_armor = getArmor(arglist(combat_armor))
/datum/armor/abductor_combat
melee = 50
bullet = 50
laser = 50
energy = 50
bomb = 50
bio = 50
fire = 90
acid = 90
/datum/armor/abductor_vest
melee = 15
bullet = 15
laser = 15
energy = 25
bomb = 15
bio = 15
fire = 70
acid = 70
/obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop()
if(HAS_TRAIT_FROM(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT))
@@ -47,11 +60,11 @@
if(VEST_STEALTH)
mode = VEST_COMBAT
DeactivateStealth()
armor = combat_armor
set_armor(/datum/armor/abductor_combat)
icon_state = "vest_combat"
if(VEST_COMBAT)// TO STEALTH
mode = VEST_STEALTH
armor = stealth_armor
set_armor(/datum/armor/abductor_vest)
icon_state = "vest_stealth"
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
@@ -883,5 +896,9 @@ Congratulations! You are now trained for invasive xenobiology research!"}
icon_state = "abductor"
inhand_icon_state = "bl_suit"
worn_icon = 'icons/mob/clothing/under/syndicate.dmi'
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, fire = 0, acid = 0)
armor_type = /datum/armor/under_abductor
can_adjust = FALSE
/datum/armor/under_abductor
bomb = 10
bio = 10

Some files were not shown because too many files have changed in this diff Show More