mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 19:44:58 +01:00
Refactors armor into dedicated subtypes (#71986)
## About The Pull Request See title. ## Why It's Good For The Game Code is cleaner, and more readable/intuitive Technically closes https://github.com/tgstation/dev-cycles-initiative/issues/8 ## Changelog 🆑 refactor: armor, from the ground up basically /🆑 Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
@@ -23,10 +23,16 @@
|
||||
/// Speed that we actually added.
|
||||
var/actual_speed_added = 0
|
||||
/// Armor values added to the suit parts.
|
||||
var/list/armor_values = list(MELEE = 25, BULLET = 30, LASER = 15, ENERGY = 15)
|
||||
var/list/armor_mod = /datum/armor/mod_module_armor_boost
|
||||
/// List of parts of the suit that are spaceproofed, for giving them back the pressure protection.
|
||||
var/list/spaceproofed = list()
|
||||
|
||||
/datum/armor/mod_module_armor_boost
|
||||
melee = 25
|
||||
bullet = 30
|
||||
laser = 15
|
||||
energy = 15
|
||||
|
||||
/obj/item/mod/module/armor_booster/on_suit_activation()
|
||||
mod.helmet.flash_protect = FLASH_PROTECTION_WELDER
|
||||
|
||||
@@ -45,7 +51,7 @@
|
||||
mod.wearer.update_equipment_speed_mods()
|
||||
var/list/parts = mod.mod_parts + mod
|
||||
for(var/obj/item/part as anything in parts)
|
||||
part.armor = part.armor.modifyRating(arglist(armor_values))
|
||||
part.set_armor(part.get_armor().add_other_armor(armor_mod))
|
||||
if(!remove_pressure_protection || !isclothing(part))
|
||||
continue
|
||||
var/obj/item/clothing/clothing_part = part
|
||||
@@ -62,11 +68,8 @@
|
||||
mod.slowdown += actual_speed_added
|
||||
mod.wearer.update_equipment_speed_mods()
|
||||
var/list/parts = mod.mod_parts + mod
|
||||
var/list/removed_armor = armor_values.Copy()
|
||||
for(var/armor_type in removed_armor)
|
||||
removed_armor[armor_type] = -removed_armor[armor_type]
|
||||
for(var/obj/item/part as anything in parts)
|
||||
part.armor = part.armor.modifyRating(arglist(removed_armor))
|
||||
part.set_armor(part.get_armor().subtract_other_armor(armor_mod))
|
||||
if(!remove_pressure_protection || !isclothing(part))
|
||||
continue
|
||||
var/obj/item/clothing/clothing_part = part
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||
/// How many tiles we traveled through.
|
||||
var/traveled_tiles = 0
|
||||
/// Armor values per tile.
|
||||
var/list/armor_values = list(MELEE = 4, BULLET = 1, LASER = 2, ENERGY = 2, BOMB = 4)
|
||||
var/datum/armor/armor_mod = /datum/armor/mod_ash_accretion
|
||||
/// Speed added when you're fully covered in ash.
|
||||
var/speed_added = 0.5
|
||||
/// Speed that we actually added.
|
||||
@@ -379,6 +379,13 @@
|
||||
/// Turfs that let us keep ash.
|
||||
var/static/list/keep_turfs
|
||||
|
||||
/datum/armor/mod_ash_accretion
|
||||
melee = 4
|
||||
bullet = 1
|
||||
laser = 2
|
||||
energy = 2
|
||||
bomb = 4
|
||||
|
||||
/obj/item/mod/module/ash_accretion/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!accretion_turfs)
|
||||
@@ -413,11 +420,9 @@
|
||||
if(!traveled_tiles)
|
||||
return
|
||||
var/list/parts = mod.mod_parts + mod
|
||||
var/list/removed_armor = armor_values.Copy()
|
||||
for(var/armor_type in removed_armor)
|
||||
removed_armor[armor_type] = -removed_armor[armor_type] * traveled_tiles
|
||||
var/datum/armor/to_remove = get_armor_by_type(armor_mod)
|
||||
for(var/obj/item/part as anything in parts)
|
||||
part.armor = part.armor.modifyRating(arglist(removed_armor))
|
||||
part.set_armor(part.get_armor().subtract_other_armor(to_remove.generate_new_with_multipliers(list(ARMOR_ALL = traveled_tiles))))
|
||||
if(traveled_tiles == max_traveled_tiles)
|
||||
mod.slowdown += speed_added
|
||||
mod.wearer.update_equipment_speed_mods()
|
||||
@@ -438,7 +443,7 @@
|
||||
traveled_tiles++
|
||||
var/list/parts = mod.mod_parts + mod
|
||||
for(var/obj/item/part as anything in parts)
|
||||
part.armor = part.armor.modifyRating(arglist(armor_values))
|
||||
part.set_armor(part.get_armor().add_other_armor(armor_mod))
|
||||
if(traveled_tiles >= max_traveled_tiles)
|
||||
balloon_alert(mod.wearer, "fully ash covered")
|
||||
mod.wearer.color = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,3) //make them super light
|
||||
@@ -457,11 +462,8 @@
|
||||
mod.wearer.update_equipment_speed_mods()
|
||||
traveled_tiles--
|
||||
var/list/parts = mod.mod_parts + mod
|
||||
var/list/removed_armor = armor_values.Copy()
|
||||
for(var/armor_type in removed_armor)
|
||||
removed_armor[armor_type] = -removed_armor[armor_type]
|
||||
for(var/obj/item/part as anything in parts)
|
||||
part.armor = part.armor.modifyRating(arglist(removed_armor))
|
||||
part.set_armor(part.get_armor().subtract_other_armor(armor_mod))
|
||||
if(traveled_tiles <= 0)
|
||||
balloon_alert(mod.wearer, "ran out of ash!")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user