diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 80ee405c026..24fd10d631d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -45,6 +45,7 @@ var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + var/armour_penetration = 0 //percentage of armour effectiveness to remove var/list/allowed = null //suit storage stuff. var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 3036d0252a8..c7b615aecfa 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -262,7 +262,7 @@ emp_act else visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!") - var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") + var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].", I.armour_penetration) var/weapon_sharp = is_sharp(I) var/weapon_edge = has_edge(I) if ((weapon_sharp || weapon_edge) && prob(getarmor(user.zone_sel.selecting, "melee"))) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 5737aad1c6c..1585383114a 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -10,8 +10,16 @@ 1 - halfblock 2 - fullblock */ -/mob/living/proc/run_armor_check(var/def_zone = null, var/attack_flag = "melee", var/absorb_text = null, var/soften_text = null) +/mob/living/proc/run_armor_check(var/def_zone = null, var/attack_flag = "melee", var/absorb_text = null, var/soften_text = null, armour_penetration, penetrated_text) var/armor = getarmor(def_zone, attack_flag) + + //the if "armor" check is because this is used for everything on /living, including humans + if(armor && armour_penetration) + armor = max(0, armor - armour_penetration) + if(penetrated_text) + src << "[penetrated_text]" + else + src << "Your armor was penetrated!" if(armor >= 100) if(absorb_text) @@ -42,7 +50,7 @@ Stun(2) //Armor - var/armor = run_armor_check(def_zone, P.flag) + var/armor = run_armor_check(def_zone, P.flag, "", "", P.armour_penetration) var/proj_sharp = is_sharp(P) var/proj_edge = has_edge(P) if ((proj_sharp || proj_edge) && prob(getarmor(def_zone, P.flag))) diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index ff56a80858b..309136dcba0 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -5,6 +5,7 @@ item_state = "energy_katana" force = 40 throwforce = 20 + armour_penetration = 15 var/cooldown = 0 // Because spam aint cool, yo. var/datum/effect/effect/system/spark_spread/spark_system diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 647ac2b105b..8117ff8441c 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -24,7 +24,21 @@ desc = "A 9mm bullet casing." caliber = "9mm" projectile_type = "/obj/item/projectile/bullet/weakbullet3" + +/obj/item/ammo_casing/c9mmap + desc = "A 9mm bullet casing." + caliber = "9mm" + projectile_type =/obj/item/projectile/bullet/armourpiercing +/obj/item/ammo_casing/c9mmtox + desc = "A 9mm bullet casing." + caliber = "9mm" + projectile_type = /obj/item/projectile/bullet/toxinbullet + +/obj/item/ammo_casing/c9mminc + desc = "A 9mm bullet casing." + caliber = "9mm" + projectile_type = /obj/item/projectile/bullet/incendiary/firebullet /obj/item/ammo_casing/c45 desc = "A .45 bullet casing." diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index e47acf7521e..d84b9e9dc75 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -132,11 +132,23 @@ icon_state = "smg9mm" ammo_type = "/obj/item/ammo_casing/c9mm" caliber = "9mm" - max_ammo = 20 + max_ammo = 30 + +/obj/item/ammo_box/magazine/smgm9mm/ap + name = "SMG magazine (Armour Piercing 9mm)" + ammo_type = /obj/item/ammo_casing/c9mmap + +/obj/item/ammo_box/magazine/smgm9mm/toxin + name = "SMG magazine (Toxin Tipped 9mm)" + ammo_type = /obj/item/ammo_casing/c9mmtox + +/obj/item/ammo_box/magazine/smgm9mm/fire + name = "SMG Magazine (Incendiary 9mm)" + ammo_type = /obj/item/ammo_casing/c9mminc /obj/item/ammo_box/magazine/smgm9mm/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),5)]" + icon_state = "[initial(icon_state)]-[round(ammo_count(),6)]" /obj/item/ammo_box/magazine/smgm45 name = "SMG magazine (.45)" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 63e1d384a4d..e23c8653667 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -27,6 +27,18 @@ /obj/item/projectile/bullet/weakbullet3 damage = 20 + + +/obj/item/projectile/bullet/toxinbullet + damage = 15 + damage_type = TOX + +/obj/item/projectile/bullet/incendiary/firebullet + damage = 10 + +/obj/item/projectile/bullet/armourpiercing + damage = 17 + armour_penetration = 10 /obj/item/projectile/bullet/pellet name = "pellet" diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index b02289784a6..36ae60484e2 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -53,7 +53,7 @@ var/mob/living/carbon/human/H = target var/headarmor = 0 // Target's head armour - armor_block = H.run_armor_check(affecting, "melee") // For normal attack damage + armor_block = H.run_armor_check(affecting, "melee","","",armour_penetration) // For normal attack damage //If they have a hat/helmet and the user is targeting their head. if(istype(H.head, /obj/item/clothing/head) && affecting == "head") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 545e22d0822..5c4ed5c4299 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -126,13 +126,34 @@ /datum/design/mag_smg name = "Saber Submachine Gun Magazine (9mm)" - desc = "A 20-round magazine for the Saber submachine gun." + desc = "A 30-round magazine for the Saber submachine gun." id = "mag_smg" req_tech = list("combat" = 4, "materials" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 2000) build_path = /obj/item/ammo_box/magazine/smgm9mm category = list("Weapons") + +/datum/design/mag_smg/ap_mag + name = "Saber Submachine Gun Magazine (9mmAP)" + desc = "A 30-round armour piercing magazine for the Saber submachine gun. Deals slightly less damage but bypasses most armor." + id = "mag_smg_ap" + materials = list(MAT_METAL = 3000, MAT_SILVER = 100) + build_path = /obj/item/ammo_box/magazine/smgm9mm/ap + +/datum/design/mag_smg/incin_mag + name = "Saber Submachine Gun Magazine (9mmIC)" + desc = "A 30-round incendiary round magazine for the Saber submachine gun. Deals significantly less damage but sets the target on fire." + id = "mag_smg_ic" + materials = list(MAT_METAL = 3000, MAT_SILVER = 100, MAT_GLASS = 400) + build_path = /obj/item/ammo_box/magazine/smgm9mm/fire + +/datum/design/mag_smg/incin_tox + name = "Saber Submachine Gun Magazine (9mmTX)" + desc = "A 30-round uranium tipped round magazine for the Saber submachine gun. Deals toxin damage, but less overall damage." + id = "mag_smg_tx" + materials = list(MAT_METAL = 3000, MAT_GLASS = 200, MAT_URANIUM = 1000) + build_path = /obj/item/ammo_box/magazine/smgm9mm/toxin /datum/design/rapidsyringe name = "Rapid Syringe Gun" diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 7978b514703..add4c667b0b 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index c49dbe8cb59..9675d99379b 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ