Refactors armor into dedicated subtypes (#71986)

## About The Pull Request

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

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

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
Zephyr
2022-12-23 19:21:22 -05:00
committed by GitHub
parent 8bbc0d1c62
commit 72add64520
259 changed files with 7071 additions and 768 deletions
+9 -6
View File
@@ -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
+12 -10
View File
@@ -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!")