mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-09 16:05:07 +00:00
[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:
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
233
code/datums/armor/_armor.dm
Normal 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]'")
|
||||
22
code/datums/armor/_atom_armor.dm
Normal file
22
code/datums/armor/_atom_armor.dm
Normal 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)))
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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(!.)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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, \
|
||||
|
||||
@@ -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, \
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
icon_state = "sheet-glass"
|
||||
inhand_icon_state = "sheet-glass"
|
||||
mats_per_unit = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 100)
|
||||
armor_type = /datum/armor/sheet_glass
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/glass
|
||||
grind_results = list(/datum/reagent/silicon = 20)
|
||||
@@ -33,6 +33,10 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
cost = 500
|
||||
source = /datum/robot_energy_storage/glass
|
||||
|
||||
/datum/armor/sheet_glass
|
||||
fire = 50
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message(span_suicide("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||
return BRUTELOSS
|
||||
@@ -40,6 +44,10 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
/obj/item/stack/sheet/glass/fifty
|
||||
amount = 50
|
||||
|
||||
/datum/armor/sheet_glass
|
||||
fire = 50
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/glass/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.glass_recipes
|
||||
@@ -89,7 +97,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
inhand_icon_state = "sheet-pglass"
|
||||
mats_per_unit = list(/datum/material/alloy/plasmaglass=MINERAL_MATERIAL_AMOUNT)
|
||||
material_type = /datum/material/alloy/plasmaglass
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 75, ACID = 100)
|
||||
armor_type = /datum/armor/sheet_plasmaglass
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plasmaglass
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
|
||||
@@ -99,6 +107,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
/obj/item/stack/sheet/plasmaglass/fifty
|
||||
amount = 50
|
||||
|
||||
/datum/armor/sheet_plasmaglass
|
||||
fire = 75
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.pglass_recipes
|
||||
@@ -143,7 +155,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
icon_state = "sheet-rglass"
|
||||
inhand_icon_state = "sheet-rglass"
|
||||
mats_per_unit = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 70, ACID = 100)
|
||||
armor_type = /datum/armor/sheet_rglass
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/rglass
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
|
||||
@@ -151,6 +163,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
matter_amount = 6
|
||||
tableVariant = /obj/structure/table/reinforced/rglass
|
||||
|
||||
/datum/armor/sheet_rglass
|
||||
fire = 70
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
..()
|
||||
@@ -165,6 +181,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
/// The amount of energy this draws from the glass source per stack unit.
|
||||
var/glacost = 500
|
||||
|
||||
/datum/armor/sheet_rglass
|
||||
fire = 70
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/rglass/cyborg/get_amount()
|
||||
return min(round(source.energy / cost), round(glasource.energy / glacost))
|
||||
|
||||
@@ -196,7 +216,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
icon_state = "sheet-prglass"
|
||||
inhand_icon_state = "sheet-prglass"
|
||||
mats_per_unit = list(/datum/material/alloy/plasmaglass=MINERAL_MATERIAL_AMOUNT, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5)
|
||||
armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
|
||||
armor_type = /datum/armor/sheet_plasmarglass
|
||||
resistance_flags = ACID_PROOF
|
||||
material_flags = NONE
|
||||
merge_type = /obj/item/stack/sheet/plasmarglass
|
||||
@@ -205,6 +225,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
matter_amount = 8
|
||||
tableVariant = /obj/structure/table/reinforced/plasmarglass
|
||||
|
||||
/datum/armor/sheet_plasmarglass
|
||||
melee = 20
|
||||
fire = 80
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.prglass_recipes
|
||||
@@ -222,7 +247,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
|
||||
inhand_icon_state = "sheet-titaniumglass"
|
||||
mats_per_unit = list(/datum/material/alloy/titaniumglass=MINERAL_MATERIAL_AMOUNT)
|
||||
material_type = /datum/material/alloy/titaniumglass
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
|
||||
armor_type = /datum/armor/sheet_titaniumglass
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/titaniumglass
|
||||
tableVariant = /obj/structure/table/reinforced/titaniumglass
|
||||
@@ -230,6 +255,10 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
|
||||
/obj/item/stack/sheet/titaniumglass/fifty
|
||||
amount = 50
|
||||
|
||||
/datum/armor/sheet_titaniumglass
|
||||
fire = 80
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/titaniumglass/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.titaniumglass_recipes
|
||||
@@ -246,12 +275,16 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
inhand_icon_state = "sheet-plastitaniumglass"
|
||||
mats_per_unit = list(/datum/material/alloy/plastitaniumglass=MINERAL_MATERIAL_AMOUNT)
|
||||
material_type = /datum/material/alloy/plastitaniumglass
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
|
||||
armor_type = /datum/armor/sheet_plastitaniumglass
|
||||
material_flags = NONE
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plastitaniumglass
|
||||
tableVariant = /obj/structure/table/reinforced/plastitaniumglass
|
||||
|
||||
/datum/armor/sheet_plastitaniumglass
|
||||
fire = 80
|
||||
acid = 100
|
||||
|
||||
/obj/item/stack/sheet/plastitaniumglass/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.plastitaniumglass_recipes
|
||||
@@ -272,7 +305,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
attack_verb_simple = list("stab", "slash", "slice", "cut")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list(MELEE = 100, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 50, ACID = 100)
|
||||
armor_type = /datum/armor/item_shard
|
||||
max_integrity = 40
|
||||
sharpness = SHARP_EDGED
|
||||
var/icon_prefix
|
||||
@@ -281,6 +314,12 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
var/obj/item/stack/sheet/weld_material = /obj/item/stack/sheet/glass
|
||||
embedding = list("embed_chance" = 65)
|
||||
|
||||
/datum/armor/item_shard
|
||||
melee = 100
|
||||
energy = 100
|
||||
fire = 50
|
||||
acid = 100
|
||||
|
||||
/obj/item/shard/suicide_act(mob/living/user)
|
||||
user.visible_message(span_suicide("[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide."))
|
||||
return BRUTELOSS
|
||||
|
||||
@@ -260,7 +260,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
|
||||
material_type = /datum/material/alloy/plasteel
|
||||
throwforce = 10
|
||||
flags_1 = CONDUCT_1
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 80)
|
||||
armor_type = /datum/armor/sheet_plasteel
|
||||
resistance_flags = FIRE_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plasteel
|
||||
grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20)
|
||||
@@ -269,6 +269,10 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
|
||||
material_flags = NONE
|
||||
matter_amount = 12
|
||||
|
||||
/datum/armor/sheet_plasteel
|
||||
fire = 100
|
||||
acid = 80
|
||||
|
||||
/obj/item/stack/sheet/plasteel/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.plasteel_recipes
|
||||
@@ -333,7 +337,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
icon = 'icons/obj/stack_objects.dmi'
|
||||
mats_per_unit = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT)
|
||||
sheettype = "wood"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 0)
|
||||
armor_type = /datum/armor/mineral_wood
|
||||
resistance_flags = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/mineral/wood
|
||||
novariants = TRUE
|
||||
@@ -342,6 +346,9 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
walltype = /turf/closed/wall/mineral/wood
|
||||
stairs_type = /obj/structure/stairs/wood
|
||||
|
||||
/datum/armor/mineral_wood
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/mineral/wood/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.wood_recipes
|
||||
@@ -380,13 +387,16 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
|
||||
sheettype = "bamboo"
|
||||
mats_per_unit = list(/datum/material/bamboo = MINERAL_MATERIAL_AMOUNT)
|
||||
throwforce = 15
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 0)
|
||||
armor_type = /datum/armor/mineral_bamboo
|
||||
resistance_flags = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/mineral/bamboo
|
||||
grind_results = list(/datum/reagent/cellulose = 10)
|
||||
material_type = /datum/material/bamboo
|
||||
walltype = /turf/closed/wall/mineral/bamboo
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/mineral/bamboo/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.bamboo_recipes
|
||||
@@ -448,6 +458,9 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
|
||||
grind_results = list(/datum/reagent/cellulose = 20)
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/cloth/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.cloth_recipes
|
||||
@@ -478,6 +491,9 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
|
||||
drop_sound = 'sound/items/handling/cloth_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/durathread/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.durathread_recipes
|
||||
@@ -576,6 +592,9 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
null, \
|
||||
))
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck
|
||||
name = "cardboard"
|
||||
desc = "Large sheets of card, like boxes folded flat."
|
||||
@@ -598,6 +617,9 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
/obj/item/stack/sheet/cardboard/fifty
|
||||
amount = 50
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage))
|
||||
var/atom/droploc = drop_location()
|
||||
@@ -659,6 +681,9 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
|
||||
walltype = /turf/closed/wall/mineral/bronze
|
||||
has_unique_girder = TRUE
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/bronze/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.bronze_recipes
|
||||
@@ -741,6 +766,9 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
|
||||
/obj/item/stack/sheet/plastic/five
|
||||
amount = 5
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/plastic/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.plastic_recipes
|
||||
@@ -761,6 +789,9 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
|
||||
grind_results = list(/datum/reagent/cellulose = 20)
|
||||
material_type = /datum/material/paper
|
||||
|
||||
/datum/armor/mineral_bamboo
|
||||
fire = 50
|
||||
|
||||
/obj/item/stack/sheet/paperframes/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.paperframe_recipes
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
throwforce = 10
|
||||
flags_1 = CONDUCT_1
|
||||
turf_type = /turf/open/floor/iron
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 100, ACID = 70)
|
||||
armor_type = /datum/armor/tile_iron
|
||||
resistance_flags = FIRE_PROOF
|
||||
matter_amount = 1
|
||||
cost = 125
|
||||
@@ -89,6 +89,10 @@
|
||||
/obj/item/stack/tile/iron/four
|
||||
amount = 4
|
||||
|
||||
/datum/armor/tile_iron
|
||||
fire = 100
|
||||
acid = 70
|
||||
|
||||
/obj/item/stack/tile/iron/Initialize(mapload)
|
||||
. = ..()
|
||||
var/static/list/tool_behaviors = list(
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
|
||||
tool_behaviour = TOOL_SCREWDRIVER
|
||||
toolspeed = 1
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
|
||||
armor_type = /datum/armor/item_screwdriver
|
||||
drop_sound = 'sound/items/handling/screwdriver_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
|
||||
sharpness = SHARP_POINTY
|
||||
@@ -44,6 +44,10 @@
|
||||
COLOR_TOOL_YELLOW,
|
||||
)
|
||||
|
||||
/datum/armor/item_screwdriver
|
||||
fire = 50
|
||||
acid = 30
|
||||
|
||||
/obj/item/screwdriver/suicide_act(mob/living/user)
|
||||
user.visible_message(span_suicide("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||
return BRUTELOSS
|
||||
@@ -68,6 +72,10 @@
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
|
||||
/datum/armor/item_screwdriver
|
||||
fire = 50
|
||||
acid = 30
|
||||
|
||||
/obj/item/screwdriver/abductor/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_alien")
|
||||
|
||||
@@ -97,6 +105,10 @@
|
||||
greyscale_config_inhand_left = null
|
||||
greyscale_config_inhand_right = null
|
||||
|
||||
/datum/armor/item_screwdriver
|
||||
fire = 50
|
||||
acid = 30
|
||||
|
||||
/obj/item/screwdriver/power/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/transforming, \
|
||||
@@ -145,6 +157,10 @@
|
||||
/obj/item/screwdriver/red
|
||||
random_color = FALSE
|
||||
|
||||
/datum/armor/item_screwdriver
|
||||
fire = 50
|
||||
acid = 30
|
||||
|
||||
/obj/item/screwdriver/red/Initialize(mapload)
|
||||
. = ..()
|
||||
set_greyscale(colors=list(screwdriver_colors["red"]))
|
||||
|
||||
@@ -25,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)
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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, \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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!")
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
drag_slowdown = 1.5 // Same as a prone mob
|
||||
max_integrity = 200
|
||||
integrity_failure = 0.25
|
||||
armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, FIRE = 70, ACID = 60)
|
||||
armor_type = /datum/armor/structure_closet
|
||||
blocks_emissive = EMISSIVE_BLOCK_GENERIC
|
||||
|
||||
/// The overlay for the closet's door
|
||||
@@ -70,6 +70,14 @@
|
||||
|
||||
var/contents_initialized = FALSE
|
||||
|
||||
/datum/armor/structure_closet
|
||||
melee = 20
|
||||
bullet = 10
|
||||
laser = 10
|
||||
bomb = 10
|
||||
fire = 70
|
||||
acid = 60
|
||||
|
||||
/obj/structure/closet/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -4,10 +4,18 @@
|
||||
locked = TRUE
|
||||
icon_state = "secure"
|
||||
max_integrity = 250
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80)
|
||||
armor_type = /datum/armor/closet_secure_closet
|
||||
secure = TRUE
|
||||
damage_deflection = 20
|
||||
|
||||
/datum/armor/closet_secure_closet
|
||||
melee = 30
|
||||
bullet = 50
|
||||
laser = 50
|
||||
energy = 100
|
||||
fire = 80
|
||||
acid = 80
|
||||
|
||||
/obj/structure/closet/secure_closet/Initialize(mapload)
|
||||
. = ..()
|
||||
RegisterSignal(SSdcs, COMSIG_GLOB_GREY_TIDE, PROC_REF(grey_tide))
|
||||
|
||||
@@ -5,10 +5,18 @@
|
||||
secure = TRUE
|
||||
locked = TRUE
|
||||
max_integrity = 500
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80)
|
||||
armor_type = /datum/armor/crate_secure
|
||||
var/tamperproof = 0
|
||||
damage_deflection = 25
|
||||
|
||||
/datum/armor/crate_secure
|
||||
melee = 30
|
||||
bullet = 50
|
||||
laser = 50
|
||||
energy = 100
|
||||
fire = 80
|
||||
acid = 80
|
||||
|
||||
/obj/structure/closet/crate/secure/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NO_MISSING_ITEM_ERROR, TRAIT_GENERIC)
|
||||
@@ -47,6 +55,14 @@
|
||||
name = "secure hydroponics crate"
|
||||
icon_state = "hydrosecurecrate"
|
||||
|
||||
/datum/armor/crate_secure
|
||||
melee = 30
|
||||
bullet = 50
|
||||
laser = 50
|
||||
energy = 100
|
||||
fire = 80
|
||||
acid = 80
|
||||
|
||||
/obj/structure/closet/crate/secure/freezer //for consistency with other "freezer" closets/crates
|
||||
desc = "An insulated crate with a lock on it, used to secure perishables."
|
||||
name = "secure kitchen crate"
|
||||
@@ -58,6 +74,14 @@
|
||||
req_access = list(ACCESS_KITCHEN)
|
||||
tamperproof = 10
|
||||
|
||||
/datum/armor/crate_secure
|
||||
melee = 30
|
||||
bullet = 50
|
||||
laser = 50
|
||||
energy = 100
|
||||
fire = 80
|
||||
acid = 80
|
||||
|
||||
/obj/structure/closet/crate/secure/freezer/pizza/PopulateContents()
|
||||
. = ..()
|
||||
new /obj/effect/spawner/random/food_or_drink/pizzaparty(src)
|
||||
@@ -85,6 +109,14 @@
|
||||
///Is the crate being bought by a person, or a budget card?
|
||||
var/department_purchase = FALSE
|
||||
|
||||
/datum/armor/crate_secure
|
||||
melee = 30
|
||||
bullet = 50
|
||||
laser = 50
|
||||
energy = 100
|
||||
fire = 80
|
||||
acid = 80
|
||||
|
||||
/obj/structure/closet/crate/secure/owned/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_notice("It's locked with a privacy lock, and can only be unlocked by the buyer's ID.")
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A conspicuous crate with the Syndicate logo on it. You don't know how to open it."
|
||||
icon_state = "syndicrate"
|
||||
max_integrity = 500
|
||||
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0)
|
||||
armor_type = /datum/armor/crate_syndicrate
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
integrity_failure = 0 //prevents bust_open from activating
|
||||
/// variable that only lets the crate open if opened by a key from the uplink
|
||||
@@ -12,6 +12,12 @@
|
||||
var/list/unlock_contents = list()
|
||||
|
||||
/// if the crate takes damage it will explode 25% of the time
|
||||
/datum/armor/crate_syndicrate
|
||||
melee = 30
|
||||
bullet = 50
|
||||
laser = 50
|
||||
energy = 100
|
||||
|
||||
/obj/structure/closet/crate/syndicrate/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
|
||||
if(created_items)
|
||||
return ..()
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>.")
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
icon = 'icons/obj/doors/mineral_doors.dmi'
|
||||
icon_state = "metal"
|
||||
max_integrity = 200
|
||||
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 0, FIRE = 50, ACID = 50)
|
||||
armor_type = /datum/armor/structure_mineral_door
|
||||
can_atmos_pass = ATMOS_PASS_DENSITY
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
material_flags = MATERIAL_EFFECTS
|
||||
@@ -28,6 +28,13 @@
|
||||
var/sheetType = /obj/item/stack/sheet/iron //what we're made of
|
||||
var/sheetAmount = 10 //how much it takes to construct us.
|
||||
|
||||
/datum/armor/structure_mineral_door
|
||||
melee = 10
|
||||
energy = 100
|
||||
bomb = 10
|
||||
fire = 50
|
||||
acid = 50
|
||||
|
||||
/obj/structure/mineral_door/Initialize(mapload)
|
||||
. = ..()
|
||||
var/obj/item/stack/initialized_mineral = new sheetType // Okay this kinda sucks.
|
||||
@@ -241,6 +248,13 @@
|
||||
opacity = FALSE
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/datum/armor/structure_mineral_door
|
||||
melee = 10
|
||||
energy = 100
|
||||
bomb = 10
|
||||
fire = 50
|
||||
acid = 50
|
||||
|
||||
/obj/structure/mineral_door/transparent/Close()
|
||||
..()
|
||||
set_opacity(FALSE)
|
||||
@@ -267,6 +281,13 @@
|
||||
max_integrity = 200
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/datum/armor/structure_mineral_door
|
||||
melee = 10
|
||||
energy = 100
|
||||
bomb = 10
|
||||
fire = 50
|
||||
acid = 50
|
||||
|
||||
/obj/structure/mineral_door/wood/pickaxe_door(mob/living/user, obj/item/I)
|
||||
return
|
||||
|
||||
@@ -293,6 +314,13 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 20
|
||||
|
||||
/datum/armor/structure_mineral_door
|
||||
melee = 10
|
||||
energy = 100
|
||||
bomb = 10
|
||||
fire = 50
|
||||
acid = 50
|
||||
|
||||
/obj/structure/mineral_door/paperframe/Initialize(mapload)
|
||||
. = ..()
|
||||
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
|
||||
|
||||
@@ -9,10 +9,15 @@
|
||||
layer = SIGN_LAYER
|
||||
custom_materials = list(/datum/material/gold = 2000)
|
||||
max_integrity = 200 //Twice as durable as regular signs.
|
||||
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
|
||||
armor_type = /datum/armor/structure_plaque
|
||||
///Custom plaque structures and items both start "unengraved", once engraved with a fountain pen their text can't be altered again. Static plaques are already engraved.
|
||||
var/engraved = FALSE
|
||||
|
||||
/datum/armor/structure_plaque
|
||||
melee = 50
|
||||
fire = 50
|
||||
acid = 50
|
||||
|
||||
/obj/item/plaque //The item version of the above.
|
||||
icon = 'icons/obj/signs.dmi'
|
||||
icon_state = "blankplaque"
|
||||
@@ -24,12 +29,17 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
custom_materials = list(/datum/material/gold = 2000)
|
||||
max_integrity = 200
|
||||
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
|
||||
armor_type = /datum/armor/item_plaque
|
||||
///This points the item to make the proper structure when placed on a wall.
|
||||
var/plaque_path = /obj/structure/plaque
|
||||
///Custom plaque structures and items both start "unengraved", once engraved with a fountain pen their text can't be altered again.
|
||||
var/engraved = FALSE
|
||||
|
||||
/datum/armor/item_plaque
|
||||
melee = 50
|
||||
fire = 50
|
||||
acid = 50
|
||||
|
||||
/obj/structure/plaque/attack_hand(mob/user, list/modifiers)
|
||||
. = ..()
|
||||
if(. || user.is_blind())
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user