diff --git a/code/datums/armor.dm b/code/datums/armor.dm new file mode 100644 index 00000000000..cbf4b76c60f --- /dev/null +++ b/code/datums/armor.dm @@ -0,0 +1,70 @@ +#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]" + +/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0) + . = locate(ARMORID) + if (!.) + . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic) + +/datum/armor + datum_flags = DF_USE_TAG + var/melee + var/bullet + var/laser + var/energy + var/bomb + var/bio + var/rad + var/fire + var/acid + var/magic + +/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0) + src.melee = melee + src.bullet = bullet + src.laser = laser + src.energy = energy + src.bomb = bomb + src.bio = bio + src.rad = rad + src.fire = fire + src.acid = acid + src.magic = magic + tag = ARMORID + +/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0) + return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic) + +/datum/armor/proc/modifyAllRatings(modifier = 0) + return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier) + +/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic) + 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(rad) ? src.rad : rad),\ + (isnull(fire) ? src.fire : fire),\ + (isnull(acid) ? src.acid : acid),\ + (isnull(magic) ? src.magic : magic)) + +/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, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic) + +/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, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic) + +/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, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic) + +/datum/armor/vv_edit_var(var_name, var_value) + if (var_name == NAMEOF(src, tag)) + return FALSE + . = ..() + tag = ARMORID // update tag in case armor values were edited + +#undef ARMORID diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 679285a2720..d525b52ca54 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -223,19 +223,25 @@ /datum/browser/modal/listpicker var/valueslist = list() -/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,Radio=FALSE) +/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox") if (!User) return var/output = {"
"} @@ -266,14 +272,14 @@ opentime = 0 close() -/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values,Radio=FALSE) +/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox") if (!istype(User)) if (istype(User, /client/)) var/client/C = User User = C.mob else return - var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values,Radio) + var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype) A.open() A.wait() if (A.selectedbutton) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 22815850540..59cbf745f85 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -459,7 +459,7 @@ src.debug_variables(DAT) else if(href_list["mob_player_panel"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["mob_player_panel"]) in GLOB.mob_list @@ -483,7 +483,7 @@ href_list["datumrefresh"] = href_list["godmode"] else if(href_list["mark_object"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/datum/D = locate(href_list["mark_object"]) @@ -495,7 +495,7 @@ href_list["datumrefresh"] = href_list["mark_object"] else if(href_list["proc_call"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/T = locate(href_list["proc_call"]) @@ -519,7 +519,7 @@ usr.client.object_say(locate(href_list["osay"])) else if(href_list["regenerateicons"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["regenerateicons"]) in GLOB.mob_list @@ -556,7 +556,7 @@ //~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records). if(href_list["rename"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["rename"]) in GLOB.mob_list @@ -573,7 +573,7 @@ href_list["datumrefresh"] = href_list["rename"] else if(href_list["varnameedit"] && href_list["datumedit"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/D = locate(href_list["datumedit"]) @@ -584,7 +584,7 @@ modify_variables(D, href_list["varnameedit"], 1) else if(href_list["varnamechange"] && href_list["datumchange"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/D = locate(href_list["datumchange"]) @@ -595,7 +595,7 @@ modify_variables(D, href_list["varnamechange"], 0) else if(href_list["varnamemass"] && href_list["datummass"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/datum/D = locate(href_list["datummass"]) @@ -704,7 +704,7 @@ message_admins("[key_name_admin(src)] modified list's contents: SHUFFLE") else if(href_list["give_spell"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["give_spell"]) in GLOB.mob_list @@ -716,7 +716,7 @@ href_list["datumrefresh"] = href_list["give_spell"] else if(href_list["remove_spell"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["remove_spell"]) in GLOB.mob_list @@ -728,7 +728,7 @@ href_list["datumrefresh"] = href_list["remove_spell"] else if(href_list["give_disease"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["give_disease"]) in GLOB.mob_list @@ -763,7 +763,7 @@ href_list["datumrefresh"] = href_list["build_mode"] else if(href_list["drop_everything"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["drop_everything"]) in GLOB.mob_list @@ -775,7 +775,7 @@ usr.client.cmd_admin_drop_everything(M) else if(href_list["direct_control"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["direct_control"]) in GLOB.mob_list @@ -787,7 +787,7 @@ usr.client.cmd_assume_direct_control(M) else if(href_list["offer_control"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["offer_control"]) in GLOB.mob_list @@ -796,6 +796,41 @@ return offer_control(M) + else if (href_list["modarmor"]) + if(!check_rights(NONE)) + return + + var/obj/O = locate(href_list["modarmor"]) + if(!istype(O)) + to_chat(usr, "This can only be used on instances of type /obj") + return + + var/list/pickerlist = list() + var/list/armorlist = O.armor.getList() + + for (var/i in armorlist) + pickerlist += list(list("value" = armorlist[i], "name" = i)) + + var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [O]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, Type = "text", values = pickerlist) + + if (islist(result)) + if (result["button"] == 2) // If the user pressed the cancel button + return + // text2num conveniently returns a null on invalid values + O.armor = O.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"]),\ + rad = text2num(result["values"]["rad"]),\ + fire = text2num(result["values"]["fire"]),\ + acid = text2num(result["values"]["acid"])) + log_admin("[key_name(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]") + message_admins("[key_name_admin(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]") + else + return + else if(href_list["delall"]) if(!check_rights(R_DEBUG|R_SERVER)) return @@ -843,7 +878,7 @@ message_admins("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ") else if(href_list["addreagent"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/atom/A = locate(href_list["addreagent"]) @@ -933,7 +968,7 @@ href_list["datumrefresh"] = href_list["modtransform"] else if(href_list["rotatedatum"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/atom/A = locate(href_list["rotatedatum"]) @@ -949,7 +984,7 @@ href_list["datumrefresh"] = href_list["rotatedatum"] else if(href_list["editorgans"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["editorgans"]) in GLOB.mob_list @@ -961,7 +996,7 @@ href_list["datumrefresh"] = href_list["editorgans"] else if(href_list["givetrauma"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["givetrauma"]) in GLOB.mob_list @@ -984,7 +1019,7 @@ href_list["datumrefresh"] = href_list["givetrauma"] else if(href_list["curetraumas"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["curetraumas"]) in GLOB.mob_list @@ -997,7 +1032,7 @@ href_list["datumrefresh"] = href_list["curetraumas"] else if(href_list["hallucinate"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["hallucinate"]) in GLOB.mob_list @@ -1210,7 +1245,7 @@ admin_ticket_log(H, msg) else if(href_list["adjustDamage"] && href_list["mobToDamage"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/L = locate(href_list["mobToDamage"]) in GLOB.mob_list diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 9e4bf51d417..a31c0e02e66 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -115,8 +115,7 @@ is_zombie = 1 if(H.wear_suit) var/obj/item/clothing/suit/armor/A = H.wear_suit - if(A.armor && A.armor["melee"]) - maxHealth += A.armor["melee"] //That zombie's got armor, I want armor! + maxHealth += A.armor.melee //That zombie's got armor, I want armor! maxHealth += 40 health = maxHealth name = "blob zombie" diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index b9a8ee60462..f878e519bad 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -275,7 +275,7 @@ return 0 var/armor_protection = 0 if(damage_flag) - armor_protection = armor[damage_flag] + armor_protection = armor.getRating(damage_flag) damage_amount = round(damage_amount * (100 - armor_protection)*0.01, 0.1) if(overmind && damage_flag) damage_amount = overmind.blob_reagent_datum.damage_reaction(src, damage_amount, damage_type, damage_flag) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ded6aec5c59..db6ef6b6b9d 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -215,7 +215,7 @@ step_energy_drain = normal_step_energy_drain qdel(SM) if(CP) - armor["energy"] += (CP.rating * 10) //Each level of capacitor protects the mech against emp by 10% + armor = armor.modifyRating(energy = (CP.rating * 10)) //Each level of capacitor protects the mech against emp by 10% qdel(CP) //////////////////////// diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 853eab7a777..c4c85bc6a50 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -27,7 +27,7 @@ return 0 var/armor_protection = 0 if(damage_flag) - armor_protection = armor[damage_flag] + armor_protection = armor.getRating(damage_flag) if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) return round(damage_amount * (100 - armor_protection)*0.01, 0.1) @@ -178,7 +178,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!(resistance_flags & ACID_PROOF)) for(var/armour_value in armor) if(armour_value != "acid" && armour_value != "fire") - armor[armour_value] = max(armor[armour_value] - round(sqrt(acid_level)*0.1), 0) + armor = armor.modifyAllRatings(0 - round(sqrt(acid_level)*0.1)) if(prob(33)) playsound(loc, 'sound/items/welder.ogg', 150, 1) take_damage(min(1 + round(sqrt(acid_level)*0.3), 300), BURN, "acid", 0) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0b2d54d18b0..08df6e9481d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -9,7 +9,7 @@ var/damtype = BRUTE var/force = 0 - var/list/armor + var/datum/armor/armor var/obj_integrity //defaults to max_integrity var/max_integrity = 500 var/integrity_failure = 0 //0 if we have no special broken behavior @@ -37,8 +37,13 @@ /obj/Initialize() . = ..() - if (!armor) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + 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 /obj Initialize()") + if(obj_integrity == null) obj_integrity = max_integrity if (set_obj_flags) @@ -210,6 +215,7 @@ . = ..() .["Delete all of type"] = "?_src_=vars;[HrefToken()];delall=[REF(src)]" .["Osay"] = "?_src_=vars;[HrefToken()];osay[REF(src)]" + .["Modify armor values"] = "?_src_=vars;[HrefToken()];modarmor=[REF(src)]" /obj/examine(mob/user) ..() diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 0e3930aaf2b..a40203beba7 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -100,8 +100,8 @@ O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava if(O.resistance_flags & FIRE_PROOF) O.resistance_flags &= ~FIRE_PROOF - if(O.armor["fire"] > 50) //obj with 100% fire armor still get slowly burned away. - O.armor["fire"] = 50 + if(O.armor.fire > 50) //obj with 100% fire armor still get slowly burned away. + O.armor = O.armor.setRating(fire = 50) O.fire_act(10000, 1000) else if (isliving(thing)) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 424b13c2a30..4869319cfa0 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -556,6 +556,10 @@ GLOBAL_PROTECT(VVpixelmovement) if(variable in GLOB.VVicon_edit_lock) if(!check_rights(R_FUN|R_DEBUG)) return + if(istype(O, /datum/armor)) + var/prompt = alert(src, "Editing this var changes this value on potentially thousands of items that share the same combination of armor values. If you want to edit the armor of just one item, use the \"Modify armor values\" dropdown item", "DANGER", "ABORT ", "Continue", " ABORT") + if (prompt != "Continue") + return if(variable in GLOB.VVpixelmovement) if(!check_rights(R_DEBUG)) return diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 49364e76d9c..2700ddc2141 100755 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -28,8 +28,7 @@ pixel_y -= 8 U.add_overlay(src) - for(var/armor_type in armor) - U.armor[armor_type] += armor[armor_type] + U.armor = U.armor.attachArmor(armor) if(isliving(user)) on_uniform_equip(U, user) @@ -42,8 +41,7 @@ pockets.forceMove(src) U.pockets = null - for(var/armor_type in armor) - U.armor[armor_type] -= armor[armor_type] + U.armor = U.armor.detachArmor(armor) if(isliving(user)) on_uniform_dropped(U, user) diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index d1dd3bac809..7254583b177 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -109,7 +109,6 @@ I.force = max(0,I.force + quality_mod) I.throwforce = max(0,I.throwforce + quality_mod) - for(var/value in I.armor) - I.armor[value] += quality + I.armor = I.armor.modifyAllRatings(quality) rename() diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index dfa6315b047..407870073dd 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -68,12 +68,7 @@ //If they have a hat/helmet and the user is targeting their head. if(istype(H.head, /obj/item/clothing/head) && affecting == "head") - - // If their head has an armor value, assign headarmor to it, else give it 0. - if(H.head.armor["melee"]) - headarmor = H.head.armor["melee"] - else - headarmor = 0 + headarmor = H.head.armor.melee else headarmor = 0 diff --git a/code/modules/mining/equipment/goliath_hide.dm b/code/modules/mining/equipment/goliath_hide.dm index a96081540b1..5950541fe75 100644 --- a/code/modules/mining/equipment/goliath_hide.dm +++ b/code/modules/mining/equipment/goliath_hide.dm @@ -21,9 +21,8 @@ return if(is_type_in_typecache(target, goliath_platable_armor_typecache)) var/obj/item/clothing/C = target - var/list/current_armor = C.armor - if(current_armor["melee"] < 60) - current_armor["melee"] = min(current_armor["melee"] + 10, 60) + if(armor.melee < 60) + armor = armor.setRating(melee = min(armor.melee + 10, 60)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") use(1) else @@ -32,9 +31,10 @@ var/obj/mecha/working/ripley/D = target if(D.hides < 3) D.hides++ - D.armor["melee"] = min(D.armor["melee"] + 10, 70) - D.armor["bullet"] = min(D.armor["bullet"] + 5, 50) - D.armor["laser"] = min(D.armor["laser"] + 5, 50) + D.armor = D.armor.setRating(\ + melee = min(D.armor.melee + 10, 70),\ + bullet = min(D.armor.laser + 5, 50),\ + laser = min(D.armor.laser + 5, 50)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") D.update_icon() if(D.hides == 3) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 18776c9b059..9e6ef891e61 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -28,7 +28,7 @@ if(bp && istype(bp , /obj/item/clothing)) var/obj/item/clothing/C = bp if(C.body_parts_covered & def_zone.body_part) - protection += C.armor[d_type] + protection += C.armor.getRating(d_type) return protection /mob/living/carbon/human/on_hit(obj/item/projectile/P) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 812d4448d52..282a02494a1 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -87,16 +87,16 @@ if(def_zone) if(def_zone == "head") if(inventory_head) - armorval = inventory_head.armor[type] + armorval = inventory_head.armor.getRating(type) else if(inventory_back) - armorval = inventory_back.armor[type] + armorval = inventory_back.armor.getRating(type) return armorval else if(inventory_head) - armorval += inventory_head.armor[type] + armorval += inventory_head.armor.getRating(type) if(inventory_back) - armorval += inventory_back.armor[type] + armorval += inventory_back.armor.getRating(type) return armorval*0.5 /mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 6d87563ae90..1ec3d204c1d 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -105,7 +105,7 @@ var/armorval = 0 if(head) - armorval = head.armor[type] + armorval = head.armor.getRating(type) return (armorval * get_armor_effectiveness()) //armor is reduced for tiny fragile drones /mob/living/simple_animal/drone/proc/get_armor_effectiveness() diff --git a/tgstation.dme b/tgstation.dme index 0a2817b0cd9..dce6799d91d 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -245,6 +245,7 @@ #include "code\controllers\subsystem\processing\projectiles.dm" #include "code\datums\action.dm" #include "code\datums\ai_laws.dm" +#include "code\datums\armor.dm" #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm"