From d93a3dac6562a36475f43c365f46d155e779c351 Mon Sep 17 00:00:00 2001 From: Cadyn Date: Thu, 4 Feb 2021 01:56:16 -0800 Subject: [PATCH] Ballistics v4 --- code/_helpers/widelists_ch.dm | 25 + .../living/zz_ballistics_ch/bullet_act_ch.dm | 55 +- .../z_ballistic_overrides_ch.dm | 563 ++++++++++++++++++ .../projectiles/ammunition/zz_autolathe_ch.dm | 105 ++++ .../projectiles/ammunition/zz_magazines_ch.dm | 175 +++++- .../projectiles/ammunition/zz_rounds_ch.dm | 28 + .../projectiles/guns/energy/laser_ch.dm | 65 ++ .../guns/magnetic/magnetic_railgun_ch.dm | 25 + .../guns/projectile/zz_ballistics_ch.dm | 463 +++++++++++++- .../modules/projectiles/guns/projectile_ch.dm | 27 +- .../projectiles/projectile/bullets_ch.dm | 36 ++ icons/obj/64x32guns_ch.dmi | Bin 36565 -> 34794 bytes icons/obj/ammo_ch.dmi | Bin 2085 -> 2356 bytes icons/obj/gun_ch.dmi | Bin 3139 -> 3180 bytes vorestation.dme | 4 + 15 files changed, 1550 insertions(+), 21 deletions(-) create mode 100644 code/_helpers/widelists_ch.dm create mode 100644 code/modules/mob/living/zz_ballistics_ch/z_ballistic_overrides_ch.dm create mode 100644 code/modules/projectiles/guns/energy/laser_ch.dm create mode 100644 code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm diff --git a/code/_helpers/widelists_ch.dm b/code/_helpers/widelists_ch.dm new file mode 100644 index 0000000000..2d447b1110 --- /dev/null +++ b/code/_helpers/widelists_ch.dm @@ -0,0 +1,25 @@ +GLOBAL_LIST_EMPTY(widelists) + +/proc/widelist(var/list/input_list) + var/list_hash = gen_hash_list(input_list) + if(!(list_hash in GLOB.widelists)) + GLOB.widelists[list_hash] = input_list + return GLOB.widelists[list_hash] + +/proc/gen_hash_list(var/list/input_list) + var/string = "" + for(var/item in input_list) + var/p1 = "" + if(islist(item)) + p1 = ">>>::-;[gen_hash_list(item)];-::<<<" + else + p1 = "[item]" + + var/p2 = "" + if(islist(input_list[item])) + p2 = ">>>::-;[gen_hash_list(input_list[item])];-::<<<" + else + p2 = "[input_list[item]]" + + string += "[p1]::--::[p2]::;;;" + return md5(string) \ No newline at end of file diff --git a/code/modules/mob/living/zz_ballistics_ch/bullet_act_ch.dm b/code/modules/mob/living/zz_ballistics_ch/bullet_act_ch.dm index d13391f897..70cb7d8fd8 100644 --- a/code/modules/mob/living/zz_ballistics_ch/bullet_act_ch.dm +++ b/code/modules/mob/living/zz_ballistics_ch/bullet_act_ch.dm @@ -52,14 +52,13 @@ GLOBAL_VAR_INIT(ENERGY_DAMAGE_ORGAN_FACTOR,0.035) var/ballistic_armor = getarmor(def_zone, "bullet") var/melee_armor = getarmor(def_zone, "melee") var/obj/item/organ/external/hit_organ - var/mob/living/carbon/human/H = src - if(istype(H)) - hit_organ = H.get_organ(def_zone) + if(organs.len) + hit_organ = src.get_organ(def_zone) for(var/ext_organ in ballistic_variables["organ_hit_weight"]) var/list/input = list() - var/obj/item/organ/external/ref_ext_organ = H.get_organ(ext_organ) + var/obj/item/organ/external/ref_ext_organ = src.get_organ(ext_organ) for(var/int_organ in ballistic_variables["organ_hit_weight"][ext_organ]) - var/ref_int_organ = H.internal_organs_by_name[int_organ] + var/ref_int_organ = src.internal_organs_by_name[int_organ] if(ref_ext_organ && ref_int_organ && (ref_int_organ in ref_ext_organ.internal_organs)) input[ref_int_organ] = ballistic_variables["organ_hit_weight"][ext_organ][int_organ] if(input.len) @@ -112,12 +111,16 @@ GLOBAL_VAR_INIT(ENERGY_DAMAGE_ORGAN_FACTOR,0.035) /mob/living/proc/organ_handle_ballistics(var/obj/item/projectile/bullet/P,var/obj/item/organ/external/hit_organ,var/energy_dumped_organic,var/internal_loss,var/ballistic_armor,var/list/updated_organ_weight) var/conversion_efficiency = P.hollow_point ? GLOB.HOLLOW_POINT_CONVERSION_EFF : 1 + conversion_efficiency *= ballistic_variables["flesh_factors"]["damage_mult"] + internal_loss *= ballistic_variables["flesh_factors"]["velloss_mult"] var/energy_past var/bone_chance = BONE_HIT_CHANCE_UNENCASED if(hit_organ.encased) bone_chance = BONE_HIT_CHANCE_ENCASED else bone_chance = ballistic_variables["bone_chance_unencased"][hit_organ.organ_tag] + if(hit_organ.cannot_break) + bone_chance = 0 //log_and_message_admins("Bone hit chance is [bone_chance], organ is [hit_organ]") if(prob(bone_chance)) var/energy_to_fracture = max(GLOB.BONE_JOULES_MIN, hit_organ.min_broken_damage * (GAUSSIAN_RANDOM()*GLOB.BONE_JOULES_PERHP_DEV + GLOB.BONE_JOULES_PERHP_AVG)) @@ -192,12 +195,22 @@ GLOBAL_VAR_INIT(ENERGY_DAMAGE_ORGAN_FACTOR,0.035) /mob/living/proc/general_handle_ballistics(var/obj/item/projectile/bullet/P,var/def_zone,var/energy_dumped_organic,var/internal_loss,var/ballistic_armor) var/conversion_efficiency = P.hollow_point ? GLOB.HOLLOW_POINT_CONVERSION_EFF : 1 + conversion_efficiency *= ballistic_variables["flesh_factors"]["damage_mult"] + internal_loss *= ballistic_variables["flesh_factors"]["velloss_mult"] var/energy_past var/bone_chance = BONE_HIT_CHANCE_UNENCASED - //if(def_zone in ballistic_variables["bone_chance_unencased"]) - //bone_chance = ballistic_variables["bone_chance_unencased"][def_zone] + var/bone_strength = 1 + var/est_organ = def_zone + if(!est_organ) + est_organ = BP_TORSO + if(est_organ in list(O_EYES, O_MOUTH)) + est_organ = BP_HEAD + if(est_organ in ballistic_variables["bone_chance_unencased"]) + bone_chance = ballistic_variables["bone_chance_unencased"][est_organ] + if(est_organ in ballistic_variables["bone_strength"]) + bone_strength = ballistic_variables["bone_strength"][est_organ] if(prob(bone_chance)) - var/energy_to_fracture = max(GLOB.BONE_JOULES_MIN, BONE_HP_AVG * (GAUSSIAN_RANDOM()*GLOB.BONE_JOULES_PERHP_DEV + GLOB.BONE_JOULES_PERHP_AVG)) + var/energy_to_fracture = max(GLOB.BONE_JOULES_MIN, BONE_HP_AVG * (GAUSSIAN_RANDOM()*GLOB.BONE_JOULES_PERHP_DEV + GLOB.BONE_JOULES_PERHP_AVG)) * bone_strength if(energy_to_fracture>=P.energy) //We don't have enough energy to get through the bone. This is the end for us! energy_dumped_organic += P.energy/2 //About half of our remaining energy will go into fucking up this boi, the rest is absorbed by the bone P.sub_velocity(P.velocity) @@ -207,22 +220,25 @@ GLOBAL_VAR_INIT(ENERGY_DAMAGE_ORGAN_FACTOR,0.035) P.sub_energy(energy_to_fracture) energy_dumped_organic += P.energy / 3 //About a third of the energy that goes into fracturing the bone also goes into fucking up tissues. - if(prob(HIT_VITAL_ORGAN_CHANCE)) + if((est_organ in ballistic_variables["organ_hit_chance"]) && prob(ballistic_variables["organ_hit_chance"][est_organ])) energy_past = P.energy P.sub_velocity(internal_loss) - energy_dumped_organic += (energy_past - P.energy) * 1.5 + var/energy_mult = 1.5 + if(est_organ in ballistic_variables["organ_multiplier"]) + energy_mult = ballistic_variables["organ_multiplier"][est_organ] + energy_dumped_organic += (energy_past - P.energy) * energy_mult if(!P.velocity) energy_to_damage(energy_dumped_organic * conversion_efficiency,def_zone,P) return 2 energy_past = P.energy P.sub_velocity(internal_loss) energy_dumped_organic += energy_past - P.energy - if(!P.velocity || (def_zone in ballistic_variables["organ_leave_early"]) || prob(PROB_LEAVE_EARLY_SECOND)) + if(!P.velocity || (est_organ in ballistic_variables["organ_leave_early"]) || prob(PROB_LEAVE_EARLY_SECOND)) energy_to_damage(energy_dumped_organic * conversion_efficiency,def_zone,P) return P.velocity ? -1 : 2 if(prob(bone_chance)) - var/energy_to_fracture = max(GLOB.BONE_JOULES_MIN, BONE_HP_AVG * (GAUSSIAN_RANDOM()*GLOB.BONE_JOULES_PERHP_DEV + GLOB.BONE_JOULES_PERHP_AVG)) + var/energy_to_fracture = max(GLOB.BONE_JOULES_MIN, BONE_HP_AVG * (GAUSSIAN_RANDOM()*GLOB.BONE_JOULES_PERHP_DEV + GLOB.BONE_JOULES_PERHP_AVG)) * bone_strength if(energy_to_fracture>=P.energy) //We don't have enough energy to get through the bone. This is the end for us! energy_dumped_organic += P.energy/2 //About half of our remaining energy will go into fucking up this boi, the rest is absorbed by the bone P.sub_velocity(P.velocity) @@ -302,4 +318,17 @@ GLOBAL_VAR_INIT(ENERGY_DAMAGE_ORGAN_FACTOR,0.035) /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ /*Replicant organs*/O_VENTC = 20, \ /*Xeno organs*/ O_EGG = 25) ), \ - "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90) ) \ No newline at end of file + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 1.3, BP_TORSO = 1.15, BP_GROIN = 1, BP_L_FOOT = 0.7, BP_R_FOOT = 0.7, BP_L_LEG = 1.2, BP_R_LEG = 1.2, BP_L_ARM = 1, BP_R_ARM = 1, BP_L_HAND = 0.55, BP_R_HAND = 0.55), \ + "organ_multiplier" = list(BP_HEAD = 2, BP_TORSO = 1.75, BP_GROIN = 1.25)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/Initialize() + . = ..() + if(islist(ballistic_variables)) + ballistic_variables = widelist(ballistic_variables) + +/mob/living/proc/b_test_proc() + var/nameof = NAMEOF(src,ballistic_variables) + log_world(nameof) + return nameof \ No newline at end of file diff --git a/code/modules/mob/living/zz_ballistics_ch/z_ballistic_overrides_ch.dm b/code/modules/mob/living/zz_ballistics_ch/z_ballistic_overrides_ch.dm new file mode 100644 index 0000000000..d4e9c9a873 --- /dev/null +++ b/code/modules/mob/living/zz_ballistics_ch/z_ballistic_overrides_ch.dm @@ -0,0 +1,563 @@ +//Simple mobs +/mob/living/simple_mob + //These are the basic base settings for simple_mobs that pretty much says "most living things kinda approximate around these values", special cases will be accounted for in following overrides. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 80, BP_TORSO = 80, BP_GROIN = 20, BP_L_FOOT = 80, BP_R_FOOT = 80, BP_L_LEG = 35, BP_R_LEG = 35, BP_L_ARM = 65, BP_R_ARM = 65, BP_L_HAND = 80, BP_R_HAND = 80), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 1.3, BP_TORSO = 1.15, BP_GROIN = 1, BP_L_FOOT = 0.7, BP_R_FOOT = 0.7, BP_L_LEG = 1.2, BP_R_LEG = 1.2, BP_L_ARM = 1, BP_R_ARM = 1, BP_L_HAND = 0.55, BP_R_HAND = 0.55), \ + "organ_multiplier" = list(BP_HEAD = 4, BP_TORSO = 3.5, BP_GROIN = 2.5)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/animal/giant_spider + //Spiders have an exoskeleton and no internal skeleton, so there'll be just 97% chance of hitting bone (3% for stuff like eyes and orifices), but the bone is much easier to punch through. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 97, BP_TORSO = 97, BP_GROIN = 97, BP_L_FOOT = 97, BP_R_FOOT = 97, BP_L_LEG = 97, BP_R_LEG = 97, BP_L_ARM = 97, BP_R_ARM = 97, BP_L_HAND = 97, BP_R_HAND = 97), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 0.35, BP_TORSO = 0.3, BP_GROIN = 0.25, BP_L_FOOT = 0.15, BP_R_FOOT = 0.15, BP_L_LEG = 0.2, BP_R_LEG = 0.2, BP_L_ARM = 0.2, BP_R_ARM = 0.2, BP_L_HAND = 0.15, BP_R_HAND = 0.15), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/metroid + //Metroids aren't real but we can make some guesses, and they sure as hell don't have any bones. They also don't have any arms or feet, so we're gonna pretend like those are referring to the parts of the metroid slime that have no organs in them. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/mechanical + //Okay, so my equations weren't really meant for stuff made out of metal, but we should be able to make it work anyways. We'll just make bone represent armor instead. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 85, BP_TORSO = 90, BP_GROIN = 90, BP_L_FOOT = 95, BP_R_FOOT = 95, BP_L_LEG = 95, BP_R_LEG = 95, BP_L_ARM = 95, BP_R_ARM = 95, BP_L_HAND = 95, BP_R_HAND = 95), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 80, BP_TORSO = 80, BP_GROIN = 80), \ + "bone_strength" = list(BP_HEAD = 2.5, BP_TORSO = 3, BP_GROIN = 2.75, BP_L_FOOT = 1.5, BP_R_FOOT = 1.5, BP_L_LEG = 2, BP_R_LEG = 2, BP_L_ARM = 1.75, BP_R_ARM = 1.75, BP_L_HAND = 1.35, BP_R_HAND = 1.35), \ + "organ_multiplier" = list(BP_HEAD = 3, BP_TORSO = 2.5, BP_GROIN = 2.5)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/tomato + //Going to copy from metroids, since they're honestly kind of similar, just blob shaped mushy creatures. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/animal/space/tree + //It's uh, a tree? Gonna say here that the bark will act as a shitty equivalent to bones but be 100% encasing + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 100, BP_TORSO = 100, BP_GROIN = 100, BP_L_FOOT = 100, BP_R_FOOT = 100, BP_L_LEG = 100, BP_R_LEG = 100, BP_L_ARM = 100, BP_R_ARM = 100, BP_L_HAND = 100, BP_R_HAND = 100), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 0.075, BP_TORSO = 0.15, BP_GROIN = 0.2, BP_L_FOOT = 0.075, BP_R_FOOT = 0.075, BP_L_LEG = 0.1, BP_R_LEG = 0.1, BP_L_ARM = 0.075, BP_R_ARM = 0.075, BP_L_HAND = 0.05, BP_R_HAND = 0.05), \ + "organ_multiplier" = list(BP_HEAD = 4, BP_TORSO = 3.5, BP_GROIN = 2.5)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/slime + //Slimes are also just getting copied from metroids, so scroll up for explanation. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/vore/pitcher_plant + //Uhhh, well, pitcher plants are kinda funny because they're mostly hollow. Gonna pretty much just say that they have no organs and no bones here. Maybe later on we can add a special function for bullets to also act on whatever is inside. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/vore/bee + //Bees also have exoskeletons, so copying from spiders pretty much. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 97, BP_TORSO = 97, BP_GROIN = 97, BP_L_FOOT = 97, BP_R_FOOT = 97, BP_L_LEG = 97, BP_R_LEG = 97, BP_L_ARM = 97, BP_R_ARM = 97, BP_L_HAND = 97, BP_R_HAND = 97), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 0.35, BP_TORSO = 0.3, BP_GROIN = 0.25, BP_L_FOOT = 0.15, BP_R_FOOT = 0.15, BP_L_LEG = 0.2, BP_R_LEG = 0.2, BP_L_ARM = 0.2, BP_R_ARM = 0.2, BP_L_HAND = 0.15, BP_R_HAND = 0.15), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/vore/aggressive/corrupthound + //These are mechanical, so copying from mechanical. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 85, BP_TORSO = 90, BP_GROIN = 90, BP_L_FOOT = 95, BP_R_FOOT = 95, BP_L_LEG = 95, BP_R_LEG = 95, BP_L_ARM = 95, BP_R_ARM = 95, BP_L_HAND = 95, BP_R_HAND = 95), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 80, BP_TORSO = 80, BP_GROIN = 80), \ + "bone_strength" = list(BP_HEAD = 2.5, BP_TORSO = 3, BP_GROIN = 2.75, BP_L_FOOT = 1.5, BP_R_FOOT = 1.5, BP_L_LEG = 2, BP_R_LEG = 2, BP_L_ARM = 1.75, BP_R_ARM = 1.75, BP_L_HAND = 1.35, BP_R_HAND = 1.35), \ + "organ_multiplier" = list(BP_HEAD = 3, BP_TORSO = 2.5, BP_GROIN = 2.5)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/vore/aggressive/frog + //Frogs actually have some interesting anatomy. Giant head, small brain, large holes in the skull for eyes. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 65, BP_TORSO = 70, BP_GROIN = 20, BP_L_FOOT = 80, BP_R_FOOT = 80, BP_L_LEG = 35, BP_R_LEG = 35, BP_L_ARM = 65, BP_R_ARM = 65, BP_L_HAND = 80, BP_R_HAND = 80), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 50, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 1.3, BP_TORSO = 1.15, BP_GROIN = 1, BP_L_FOOT = 0.7, BP_R_FOOT = 0.7, BP_L_LEG = 1.2, BP_R_LEG = 1.2, BP_L_ARM = 1, BP_R_ARM = 1, BP_L_HAND = 0.55, BP_R_HAND = 0.55), \ + "organ_multiplier" = list(BP_HEAD = 4, BP_TORSO = 3.5, BP_GROIN = 2.9)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/animal/space/jelly + //Copying from metroids again + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/vore/sect_queen + //Exoskeleton, so, gonna copy from spiders and give a small bonus to the bone strength for the sheer size. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 97, BP_TORSO = 97, BP_GROIN = 97, BP_L_FOOT = 97, BP_R_FOOT = 97, BP_L_LEG = 97, BP_R_LEG = 97, BP_L_ARM = 97, BP_R_ARM = 97, BP_L_HAND = 97, BP_R_HAND = 97), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 0.45, BP_TORSO = 0.4, BP_GROIN = 0.35, BP_L_FOOT = 0.25, BP_R_FOOT = 0.25, BP_L_LEG = 0.3, BP_R_LEG = 0.3, BP_L_ARM = 0.3, BP_R_ARM = 0.3, BP_L_HAND = 0.25, BP_R_HAND = 0.25), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/vore/oregrub + //They seem mushy and blobby, so gonna copy from metroids. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/vore/solargrub + //Solargrubs also seem mushy and blobby, let's continue copying from metroids. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/vore/slug + //Slugs are also mushy and blobby, gonna copy from metroids as well. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +/mob/living/simple_mob/vore/aggressive/mimic + //Hmm, To be honest I imagine mimics having an exoskeleton, so I'm gonna copy from spiders and make a few changes for organ stuff. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 97, BP_TORSO = 97, BP_GROIN = 97, BP_L_FOOT = 97, BP_R_FOOT = 97, BP_L_LEG = 97, BP_R_LEG = 97, BP_L_ARM = 97, BP_R_ARM = 97, BP_L_HAND = 97, BP_R_HAND = 97), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 60, BP_TORSO = 80, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 0.35, BP_TORSO = 0.3, BP_GROIN = 0.25, BP_L_FOOT = 0.15, BP_R_FOOT = 0.15, BP_L_LEG = 0.2, BP_R_LEG = 0.2, BP_L_ARM = 0.2, BP_R_ARM = 0.2, BP_L_HAND = 0.15, BP_R_HAND = 0.15), \ + "organ_multiplier" = list(BP_HEAD = 3.5, BP_TORSO = 3.5, BP_GROIN = 3.5)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/vore/solarmoth + //Solarmoths are getting directly copied from spiders, again because of exoskeleton + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 97, BP_TORSO = 97, BP_GROIN = 97, BP_L_FOOT = 97, BP_R_FOOT = 97, BP_L_LEG = 97, BP_R_LEG = 97, BP_L_ARM = 97, BP_R_ARM = 97, BP_L_HAND = 97, BP_R_HAND = 97), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 95, BP_TORSO = 90, BP_GROIN = 90), \ + "bone_strength" = list(BP_HEAD = 0.35, BP_TORSO = 0.3, BP_GROIN = 0.25, BP_L_FOOT = 0.15, BP_R_FOOT = 0.15, BP_L_LEG = 0.2, BP_R_LEG = 0.2, BP_L_ARM = 0.2, BP_R_ARM = 0.2, BP_L_HAND = 0.15, BP_R_HAND = 0.15), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1,"velloss_mult" = 1)) + +/mob/living/simple_mob/blob + //Apparently these are considered slimes in code, so gonna copy from metroid for them. + ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_HEAD = 90, BP_TORSO = 95, BP_GROIN = 95), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + +//Species +/datum/species/shapeshifter/promethean/handle_post_spawn(var/mob/living/carbon/human/H) + .=..() + //Honestly this is mostly for balancing purposes, since prometheans have no bones and weirder organs it fucks with the numbers, so giving them a bit more flesh damage + H.ballistic_variables = list(\ + "bone_chance_unencased" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_leave_early" = list("l_arm", "r_arm", "l_hand", "r_hand", "l_foot", "r_foot"), \ + "organ_hit_weight" = list(\ + BP_HEAD = list(\ + /*Standard organs*/O_BRAIN = 90, O_EYES = 5, \ + /*Diona organs*/O_RESPONSE = 10, O_RESPONSE = 15, O_GBLADDER = 15, \ + /*Replicant organs*/O_VRLINK = 20, \ + /*Xeno organs*/O_ACID = 10, O_RESIN = 10), \ + BP_TORSO = list(\ + /*Standard organs*/O_HEART = 5, O_LUNGS = 50, O_SPLEEN = 15, O_VOICE = 10, \ + /*Synth organs*/O_CELL = 5, O_PUMP = 15, O_HEATSINK = 35, O_CYCLER = 15, O_DIAGNOSTIC = 10, \ + /*Promethean organs*/O_REGBRUTE = 20, O_REGBURN = 20, O_REGOXY = 20, O_REGTOX = 20, \ + /*Diona organs*/O_STRATA = 35, O_BRAIN = 20, O_NUTRIENT = 10, \ + /*Replicant organs*/O_AREJECT = 35, \ + /*Xeno organs*/O_PLASMA = 10, O_HIVE = 10), \ + BP_GROIN = list(\ + /*Standard organs*/O_INTESTINES = 50, O_STOMACH = 20, O_LIVER = 20, O_KIDNEYS = 15, O_APPENDIX = 5, \ + /*Diona organs*/O_POLYP = 10, O_ANCHOR = 15, \ + /*Replicant organs*/O_VENTC = 20, \ + /*Xeno organs*/ O_EGG = 25) ), \ + "organ_hit_chance" = list(BP_TORSO = 85), \ + "bone_strength" = list(BP_HEAD = 0, BP_TORSO = 0, BP_GROIN = 0, BP_L_FOOT = 0, BP_R_FOOT = 0, BP_L_LEG = 0, BP_R_LEG = 0, BP_L_ARM = 0, BP_R_ARM = 0, BP_L_HAND = 0, BP_R_HAND = 0), \ + "organ_multiplier" = list(BP_HEAD = 3.6, BP_TORSO = 3.5, BP_GROIN = 3.4)/*Only used for simple mobs*/, \ + "flesh_factors" = list("damage_mult" = 1.175,"velloss_mult" = 1.3)) + H.ballistic_variables = widelist(H.ballistic_variables) diff --git a/code/modules/projectiles/ammunition/zz_autolathe_ch.dm b/code/modules/projectiles/ammunition/zz_autolathe_ch.dm index b9a0fdb5be..29265a3bbe 100644 --- a/code/modules/projectiles/ammunition/zz_autolathe_ch.dm +++ b/code/modules/projectiles/ammunition/zz_autolathe_ch.dm @@ -95,4 +95,109 @@ /datum/category_item/autolathe/arms/sks_762 name = "SKS Clip (10x 7.62x39 standard)" path = /obj/item/ammo_magazine/clip/sks + hidden = 1 + +/datum/category_item/autolathe/arms/sks_762_ap + name = "SKS Clip (10x 7.62x39 armor-piercing)" + path = /obj/item/ammo_magazine/clip/sks/ap + hidden = 1 + +/datum/category_item/autolathe/arms/mosin_762 + name = "Mosin Nagant Clip (5x 7.62x54mmR standard)" + path = /obj/item/ammo_magazine/clip/mosin + hidden = 1 + +/datum/category_item/autolathe/arms/mosin_762_ap + name = "Mosin Nagant Clip (5x 7.62x54mmR armor-piercing)" + path = /obj/item/ammo_magazine/clip/mosin + hidden = 1 + +/datum/category_item/autolathe/arms/t901_762 + name = "Type-901 magazine (7.62x51mm standard)" + path = /obj/item/ammo_magazine/type901 + hidden = 1 + +/datum/category_item/autolathe/arms/t901_762_ap + name = "Type-901 magazine (7.62x51mm armor-piercing)" + path = /obj/item/ammo_magazine/type901/ap + hidden = 1 + +/datum/category_item/autolathe/arms/awp_338 + name = "AWP magazine (.338 Lapua standard)" + path = /obj/item/ammo_magazine/awp + hidden = 1 + +/datum/category_item/autolathe/arms/awp_338_ap + name = "AWP magazine (.338 Lapua armor-piercing)" + path = /obj/item/ammo_magazine/awp/ap + hidden = 1 + +/datum/category_item/autolathe/arms/hectate_50bmg + name = "Hectate II magazine (.50 BMG standard)" + path = /obj/item/ammo_magazine/hectate + hidden = 1 + +/datum/category_item/autolathe/arms/hectate_50bmg_ap + name = "Hectate II magazine (.50 BMG armor-piercing)" + path = /obj/item/ammo_magazine/hectate/ap + hidden = 1 + +/datum/category_item/autolathe/arms/ppsh_762x25 + name = "PPSH drum Magazine (7.62x25mm Tokarev standard)" + path = /obj/item/ammo_magazine/ppsh + hidden = 1 + +/datum/category_item/autolathe/arms/plamya_9x39 + name = "Plamya drum magazine(9x39mm standard)" + path = /obj/item/ammo_magazine/plamya + hidden = 1 + +/datum/category_item/autolathe/arms/plamya_9x39_ap + name = "Plamya drum magazine(9x39mm armor-piercing)" + path = /obj/item/ammo_magazine/plamya/ap + hidden = 1 + +/datum/category_item/autolathe/arms/strela_12g + name = "Strela magazine (12 gauge buckshot)" + path = /obj/item/ammo_magazine/strela + hidden = 1 + +/datum/category_item/autolathe/arms/strela_12g_slug + name = "Strela magazine (12 gauge slug)" + path = /obj/item/ammo_magazine/strela/slug + hidden = 1 + +/datum/category_item/autolathe/arms/molniya_762 + name = "Molniya magazine box (7.62x51mm standard)" + path = /obj/item/ammo_magazine/molniya + hidden = 1 + +/datum/category_item/autolathe/arms/molniya_762_ap + name = "Molniya magazine box (7.62x51mm armor-piercing)" + path = /obj/item/ammo_magazine/molniya/ap + hidden = 1 + +/datum/category_item/autolathe/arms/ssp4_10mm + name = "SSP4 magazine (10mm standard)" + path = /obj/item/ammo_magazine/ssp4 + hidden = 1 + +/datum/category_item/autolathe/arms/makarov_9x18 + name = "Makarov magazine (9x18mm Makarov standard)" + path = /obj/item/ammo_magazine/makarov + hidden = 1 + +/datum/category_item/autolathe/arms/vp70_9mm + name = "VP70 magazine (18x 9x19mm standard)" + path = /obj/item/ammo_magazine/m9mm/vp70 + hidden = 1 + +/datum/category_item/autolathe/arms/vp70_9mm_ap + name = "VP70 magazine (18x 9x19mm armor-piercing)" + path = /obj/item/ammo_magazine/m9mm/vp70/ap + hidden = 1 + +/datum/category_item/autolathe/arms/vp70_9mm_hp + name = "VP70 magazine (18x 9x19mm hollow-point)" + path = /obj/item/ammo_magazine/m9mm/vp70/hp hidden = 1 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/zz_magazines_ch.dm b/code/modules/projectiles/ammunition/zz_magazines_ch.dm index 24b1a7775d..bafe42fa04 100644 --- a/code/modules/projectiles/ammunition/zz_magazines_ch.dm +++ b/code/modules/projectiles/ammunition/zz_magazines_ch.dm @@ -40,8 +40,8 @@ /obj/item/ammo_magazine/mp5mag name = "mp5 magazine(9x19mm standard)" - icon = 'icons/obj/ammo_vr.dmi' - icon_state = "smg" + icon = 'icons/obj/ammo_ch.dmi' + icon_state = "mp5mag" max_ammo = 30 mag_type = MAGAZINE caliber = "9mm" @@ -120,6 +120,12 @@ matter = list(DEFAULT_WALL_MATERIAL = 1700) ammo_type = /obj/item/ammo_casing/a556/hp +/obj/item/ammo_magazine/m16/patriot + name = "Patriot magazine (5.56x45mm standard)" + matter = list(DEFAULT_WALL_MATERIAL = 5000) + max_ammo = 100 + icon_state = "patriotmag" + /obj/item/ammo_magazine/m41 name = "M41A magazine (10x24mm standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -132,9 +138,172 @@ ammo_type = /obj/item/ammo_casing/a10x24 /obj/item/ammo_magazine/clip/sks - name = "Ammo clip(7.62x39mm)" + name = "Ammo clip(7.62x39mm standard)" icon_state = "gclip" max_ammo = 10 caliber = "7.62x39mm" + multiple_sprites = 1 matter = list(DEFAULT_WALL_MATERIAL = 400) + ammo_type = /obj/item/ammo_casing/a762x39 +/obj/item/ammo_magazine/clip/sks/ap + name = "Ammo clip(7.62x39mm armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 700) + ammo_type = /obj/item/ammo_casing/a762x39/ap + +/obj/item/ammo_magazine/clip/mosin + name = "Ammo clip(7.62x54mmR standard)" + icon_state = "clip_rifle" + max_ammo = 5 + caliber = "7.62x54mmR" + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 300) + ammo_type = /obj/item/ammo_casing/a762x54 + +/obj/item/ammo_magazine/clip/mosin/ap + name = "Ammo clip(7.62x54mmR armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 600) + ammo_type = /obj/item/ammo_casing/a762x54/ap + +/obj/item/ammo_magazine/type901 + name = "Type-901 magazine(7.62x51mm standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "7.62mm" + icon_state = "762mag" + max_ammo = 30 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 2400) + ammo_type = /obj/item/ammo_casing/a762 + +/obj/item/ammo_magazine/type901/ap + name = "Type-901 magazine(7.62x51mm armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 3000) + ammo_type = /obj/item/ammo_casing/a762/ap + +/obj/item/ammo_magazine/awp + name = "AWP magazine(.338 Lapua standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = ".338" + icon_state = "awp" + max_ammo = 5 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 2400) + ammo_type = /obj/item/ammo_casing/a338 + +/obj/item/ammo_magazine/awp/ap + name = "AWP magazine(.338 Lapua armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 3000) + ammo_type = /obj/item/ammo_casing/a338/ap + +/obj/item/ammo_magazine/hectate + name = "Hectate II magazine(.50 BMG standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = ".50 BMG" + icon_state = "hectate" + max_ammo = 7 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 4000) + ammo_type = /obj/item/ammo_casing/a50bmg + +/obj/item/ammo_magazine/hectate/ap + name = "Hectate II magazine(.50 BMG armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 5000) + ammo_type = /obj/item/ammo_casing/a50bmg/ap + +/obj/item/ammo_magazine/ppsh + name = "PPSH-17b drum magazine(7.62x25mm Tokarev standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "7.62x25mm" + icon_state = "ppshmag" + max_ammo = 71 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 1500) + ammo_type = /obj/item/ammo_casing/a762x25 + +/obj/item/ammo_magazine/plamya + name = "Plamya drum magazine(9x39mm standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "9x39mm" + icon_state = "plamyamag" + max_ammo = 50 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 2500) + ammo_type = /obj/item/ammo_casing/a9x39 + +/obj/item/ammo_magazine/plamya/ap + name = "Plamya drum magazine(9x39mm armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 3000) + ammo_type = /obj/item/ammo_casing/a9x39/ap + +/obj/item/ammo_magazine/strela + name = "Strela magazine(12 gauge buckshot)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "12g" + icon_state = "strelamag" + max_ammo = 7 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 800) + ammo_type = /obj/item/ammo_casing/a12g/pellet + +/obj/item/ammo_magazine/strela/slug + name = "Strela magazine(12 gauge slug)" + ammo_type = /obj/item/ammo_casing/a12g + +/obj/item/ammo_magazine/molniya + name = "Molniya magazine box(7.62x51mm standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "7.62mm" + icon_state = "molniyamag" + max_ammo = 100 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 8000) + ammo_type = /obj/item/ammo_casing/a762 + +/obj/item/ammo_magazine/molniya/ap + name = "Molniya magazine box(7.62x51mm armor-piercing)" + matter = list(DEFAULT_WALL_MATERIAL = 10000) + ammo_type = /obj/item/ammo_casing/a762/ap + +/obj/item/ammo_magazine/ssp4 + name = "SSP4 magazine(10mm standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "10mm" + icon_state = "10mmmag" + max_ammo = 8 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 400) + ammo_type = /obj/item/ammo_casing/a10mm + +/obj/item/ammo_magazine/makarov + name = "Makarov magazine(9x18mm Makarov standard)" + icon = 'icons/obj/ammo_ch.dmi' + caliber = "9x18mm" + icon_state = "9mmmag" + max_ammo = 8 + mag_type = MAGAZINE + multiple_sprites = 1 + matter = list(DEFAULT_WALL_MATERIAL = 400) + ammo_type = /obj/item/ammo_casing/a9x18 + +/obj/item/ammo_magazine/m9mm/vp70 + name = "VP70 magazine (18x 9x19mm standard)" + icon = 'icons/obj/ammo_ch.dmi' + icon_state = "9mmmag" + ammo_type = /obj/item/ammo_casing/a9mm + max_ammo = 18 + +/obj/item/ammo_magazine/m9mm/vp70/ap + name = "VP70 magazine (18x 9x19mm armor-piercing)" + ammo_type = /obj/item/ammo_casing/a9mm/ap + +/obj/item/ammo_magazine/m9mm/vp70/hp + name = "VP70 magazine (18x 9x19mm hollow-point)" + ammo_type = /obj/item/ammo_casing/a9mm/ap \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/zz_rounds_ch.dm b/code/modules/projectiles/ammunition/zz_rounds_ch.dm index 612c116a3d..ce9238e135 100644 --- a/code/modules/projectiles/ammunition/zz_rounds_ch.dm +++ b/code/modules/projectiles/ammunition/zz_rounds_ch.dm @@ -36,6 +36,16 @@ desc = "A rubber 5.7x28mm round" projectile_type = /obj/item/projectile/bullet/pistol/rubber +/obj/item/ammo_casing/a762x25 + desc = "A standard 7.62x25mm Tokarev round" + caliber = "7.62x25mm" + projectile_type = /obj/item/projectile/bullet/a762x25 + +/obj/item/ammo_casing/a9x18 + desc = "A standard 9x18mm Makarov round" + caliber = "9x18mm" + projectile_type = /obj/item/projectile/bullet/a9x18 + /obj/item/ammo_casing/a762x54 desc = "A standard 7.62x54mmR round" caliber = "7.62x54mmR" @@ -46,6 +56,24 @@ desc = "An armor piercing 7.62x54mmR round" projectile_type = /obj/item/projectile/bullet/rifle/a762x54/ap +/obj/item/ammo_casing/a338 + desc = "A standard .338 Lapua round" + caliber = ".338" + projectile_type = /obj/item/projectile/bullet/rifle/a338 + +/obj/item/ammo_casing/a338/ap + desc = "An armor piercing .338 Lapua round" + projectile_type = /obj/item/projectile/bullet/rifle/a338/ap + +/obj/item/ammo_casing/a50bmg + desc = "A standard .50 BMG round" + caliber = ".50 BMG" + projectile_type = /obj/item/projectile/bullet/rifle/a50bmg + +/obj/item/ammo_casing/a50bmg/ap + desc = "An armor piercing .50 BMG round" + projectile_type = /obj/item/projectile/bullet/rifle/a50bmg/ap + /obj/item/ammo_casing/a9x39 desc = "A standard 9x39mm round" caliber = "9x39mm" diff --git a/code/modules/projectiles/guns/energy/laser_ch.dm b/code/modules/projectiles/guns/energy/laser_ch.dm new file mode 100644 index 0000000000..02dc2e0da5 --- /dev/null +++ b/code/modules/projectiles/guns/energy/laser_ch.dm @@ -0,0 +1,65 @@ +/obj/item/weapon/gun/energy/laser + icon = 'icons/obj/64x32guns_ch.dmi' + icon_state = "lcarbine" + name = "NT LC-525" + desc = "A relatively new, mass produced Nanotrasen laser carbine designed to kill with concentrated energy blasts. Just like the G40E, it has two firemodes, standard, and suppressive, which fires more efficent but weaker beams." + icon_expected_width = 64 + var/is64x32 = TRUE + var/is64x32_override = FALSE + +/obj/item/weapon/gun/energy/laser/Initialize() + . = ..() + if((!(type == /obj/item/weapon/gun/energy/laser)) && !is64x32_override) + is64x32 = FALSE + if(icon_expected_width == 64) + icon_expected_width = 32 + if(icon == 'icons/obj/64x32guns_ch.dmi') + icon = 'icons/obj/gun.dmi' + if(is64x32) + update_transform() + +/obj/item/weapon/gun/energy/laser/update_transform() + . = ..() + if(is64x32) + transform = transform.Translate(-16,0) + +/obj/item/weapon/gun/energy/laser/empty + is64x32_override = TRUE + +/obj/item/weapon/gun/energy/laser/mounted + is64x32_override = TRUE + +/obj/item/weapon/gun/energy/laser/practice + is64x32_override = TRUE + +/obj/item/weapon/gun/energy/laser/vepr + name = "WKHM 'Vepr'" + desc = "The Vepr lasgun, in 40 Watt range. One of the most robust laser rifles out there, but not one that's commonly seen. This piece is WKHM's latest entry into the energy weapon market, competing with the Hephaestus Industries G40E. Uses its own proprietary energy cells. It has three settings, standard, suppressive, and burst. This one bears the 'WKHM Adamant' arkship's production stamp." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + icon_expected_width = 64 + icon_state = "vepr" + firemodes = list( + list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240), + list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60), + list(mode_name="burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 200), + ) + force = 8 + w_class = ITEMSIZE_HUGE //Probably gonna make it a rifle sooner or later //CHOMP Edit, and so I did. + slot_flags = SLOT_BELT|SLOT_BACK //CHOMP Edit. Let's make it so that if it doesn't fit in a backpack, it doesn't fit in a holster either. + is64x32_override = TRUE + accept_cell_type = /obj/item/weapon/cell/vepr + cell_type = /obj/item/weapon/cell/vepr + origin_tech = list(TECH_POWER = 4, TECH_COMBAT = 6, TECH_MAGNET = 4, TECH_ILLEGAL = 4) + +/obj/item/weapon/cell/vepr + icon = 'icons/obj/ammo_ch.dmi' + icon_state = "veprcell" + item_state = "egg6" + w_class = ITEMSIZE_SMALL + maxcharge = 7200 + charge_amount = 20 + matter = list("metal" = 350, "glass" = 50) + preserve_item = 1 + overlay_half_state = "veprcell_o1" + overlay_full_state = "veprcell_o2" + origin_tech = list(TECH_POWER = 6) diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm new file mode 100644 index 0000000000..3a9308eaf3 --- /dev/null +++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm @@ -0,0 +1,25 @@ +/obj/item/weapon/gun/magnetic/railgun + name = "WKHM 'Strzyga' railgun" + desc = "A devastatingly powerful, and very expensive railgun built for long range engagements, and anti vehicle applications. Possibly one of the most powerful handheld weapons to date. Capable of punching a hole clean through a durasteel wall. The last thing the enemy will never see. 'DO NOT TOUCH THE RAILS' is stickered on the receiver. Chambers 16.5x122mm slugs. " + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + icon = 'icons/obj/64x32guns_ch.dmi' + icon_state = "railgun-e" + icon_expected_width = 64 + var/is64x32 = TRUE + var/is64x32_override = FALSE + +/obj/item/weapon/gun/magnetic/railgun/Initialize() + . = ..() + if((!(type == /obj/item/weapon/gun/magnetic/railgun)) && !is64x32_override) + is64x32 = FALSE + if(icon_expected_width == 64) + icon_expected_width = 32 + if(icon == 'icons/obj/64x32guns_ch.dmi') + icon = 'icons/obj/railgun.dmi' + if(is64x32) + update_transform() + +/obj/item/weapon/gun/magnetic/railgun/update_transform() + . = ..() + if(is64x32) + transform = transform.Translate(-16,0) \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm index 918249bfce..60ca5af48c 100644 --- a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm +++ b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm @@ -66,6 +66,7 @@ icon_state = "asval" icon_expected_height = 32 icon_expected_width = 64 + firemodes = list() /obj/item/weapon/gun/projectile/automatic/serdy/Initialize() . = ..() @@ -74,6 +75,15 @@ /obj/item/weapon/gun/projectile/automatic/serdy/update_transform() . = ..() transform = transform.Translate(-16,0) + +/obj/item/weapon/gun/projectile/automatic/serdy/update_icon() + . = ..() + if(load_method == MAGAZINE) + icon_state = ammo_magazine ? "[initial(icon_state)]" : "[initial(icon_state)]-e" + else + icon_state = bolt_open ? "[initial(icon_state)]-e" : "[initial(icon_state)]" + + //AK Variants /obj/item/weapon/gun/projectile/automatic/serdy/asval @@ -92,6 +102,7 @@ auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK muzzle_velocity = 295 w_class = ITEMSIZE_HUGE + one_handed_penalty = 50 /obj/item/weapon/gun/projectile/automatic/serdy/krinkov name = "Krinkov" @@ -125,6 +136,7 @@ auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK muzzle_velocity = 715 w_class = ITEMSIZE_HUGE + one_handed_penalty = 60 /obj/item/weapon/gun/projectile/automatic/serdy/scrapak name = "AKM" @@ -142,6 +154,7 @@ auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK muzzle_velocity = 700 w_class = ITEMSIZE_HUGE + one_handed_penalty = 70 // AR Variants @@ -179,12 +192,13 @@ load_method = MAGAZINE muzzle_velocity = 910 w_class = ITEMSIZE_HUGE + one_handed_penalty = 50 /obj/item/weapon/gun/projectile/automatic/serdy/patriot name = "Patriot" desc = "I raised you, and loved you, I've given you weapons, taught you techniques, endowed you with knowledge. There's nothing more for me to give you. All that's left for you to take is my life. 'Still in a dream' is stamped into the receiver, and it has no serial number. Chambered in 5.56x45mm." caliber = "5.56x45mm" - magazine_type = /obj/item/ammo_magazine/m16 + magazine_type = /obj/item/ammo_magazine/m16/patriot allowed_magazines = list(/obj/item/ammo_magazine/m16) icon_state="patriot" projectile_type = /obj/item/projectile/bullet/rifle/a556 @@ -196,6 +210,7 @@ load_method = MAGAZINE muzzle_velocity = 960 w_class = ITEMSIZE_HUGE + one_handed_penalty = 40 //Other rifles @@ -213,6 +228,8 @@ ) load_method = MAGAZINE muzzle_velocity = 840 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 50 /obj/item/weapon/gun/projectile/automatic/serdy/m41a //This gun is pretty overpowered. Leaving it as an admin spawn. Might even interfere with lore. name = "M41A" @@ -228,6 +245,8 @@ ) load_method = MAGAZINE muzzle_velocity = 840 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 50 /obj/item/weapon/gun/projectile/automatic/serdy/sks //Reminder to myself to make sure this works and also to make sure that people are able to empty the internal mag name = "SKS" @@ -240,7 +259,384 @@ muzzle_velocity = 735 max_shells = 10 ammo_type = /obj/item/ammo_casing/a762x39 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 60 +/obj/item/weapon/gun/projectile/automatic/serdy/mosin + name = "Mosin Nagant" + desc = "A reproduction of some old russian bolt-action rifle from some backwater rimworld. Smells strongly of cosmoline. The inscriptions on it are in pan-slavic. Chambered in 7.62x54mmR." + caliber = "7.62x54mmR" + auto_loading_type = NO_AUTO_LOAD + load_method = SINGLE_CASING|SPEEDLOADER + only_open_load = TRUE + icon_state = "mosin" + projectile_type = /obj/item/projectile/bullet/rifle/a762x54 + muzzle_velocity = 865 + max_shells = 5 + ammo_type = /obj/item/ammo_casing/a762x54 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 70 + +/obj/item/weapon/gun/projectile/automatic/serdy/mosin/scoped + name = "Scoped Mosin Nagant" + icon_state = "scopedmosin" + desc = "A reproduction of some old russian bolt-action rifle from some backwater rimworld. Smells strongly of cosmoline. The inscriptions on it are in pan-slavic. This one has a scope attached to it. Chambered in 7.62x54mmR." + action_button_name = "Use Scope" + accuracy = -15 + scoped_accuracy = 50 + one_handed_penalty = 70 + +/obj/item/weapon/gun/projectile/automatic/serdy/mosin/scoped/ui_action_click() + scope() + +/obj/item/weapon/gun/projectile/automatic/serdy/mosin/scoped/verb/scope() + set category = "Object" + set name = "Use Scope" + set popup_menu = 1 + + toggle_scope(2.0) + +/obj/item/weapon/gun/projectile/automatic/serdy/type901 + name = "Type 901 Assault rifle" + desc = "A heavy bullpup assault rifle of unknown make, with a very high muzzle velocity and fair accuracy. A favorite of scum and villainy everywhere due to its complete lack of identification markings. Popularized by the 2541 movie, 'Boarding Party'. Chambered in 7.62x51mm." + caliber = "7.62mm" + auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY | LOCK_SLAPPABLE + magazine_type = /obj/item/ammo_magazine/type901 + allowed_magazines = list(/obj/item/ammo_magazine/type901) + icon_state = "type901" + projectile_type = /obj/item/projectile/bullet/rifle/a762 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + muzzle_velocity = 910 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 60 + +/obj/item/weapon/gun/projectile/automatic/serdy/type901/carbine + name = "Type 901-C Carbine" + desc = "A lightweight bullpup assault carbine of unknown make, with a very high muzzle velocity and fair accuracy. A favorite of scum and villainy everywhere due to its complete lack of identification markings. Popularized by the 2541 movie, 'Boarding Party'. This one is smaller and more compact than its larger counterpart. Chambered in 7.62x39mm." + icon_state = "type901b" + muzzle_velocity = 880 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 30 + +/obj/item/weapon/gun/projectile/automatic/serdy/awp + name = "AWP" + desc = "A galaxy-wide favorite for hunting, target shooting, and rushing B. Legend has it, this rifle originated from three guys in a garage. This one is a reproduction. It has 'Scarborough Arms - Per falcis, per pravitas' inscribed on the stock. Chambered in .338 Lapua." + caliber = ".338" + auto_loading_type = NO_AUTO_LOAD + magazine_type = /obj/item/ammo_magazine/awp + allowed_magazines = list(/obj/item/ammo_magazine/awp) + icon_state = "awp" + projectile_type = /obj/item/projectile/bullet/rifle/a338 + load_method = MAGAZINE + muzzle_velocity = 936 + action_button_name = "Use Scope" + accuracy = -30 + scoped_accuracy = 50 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 90 + +/obj/item/weapon/gun/projectile/automatic/serdy/awp/ui_action_click() + scope() + +/obj/item/weapon/gun/projectile/automatic/serdy/awp/verb/scope() + set category = "Object" + set name = "Use Scope" + set popup_menu = 1 + + toggle_scope(2.0) + +/obj/item/weapon/gun/projectile/automatic/serdy/hectate + name = "Hectate II" + desc = "An old world anti material rifle. Ideal for dealing with mechs, armored personnel, and space dragons. Chambered in .50 BMG." + caliber = ".50 BMG" + auto_loading_type = NO_AUTO_LOAD + magazine_type = /obj/item/ammo_magazine/hectate + allowed_magazines = list(/obj/item/ammo_magazine/hectate) + icon_state = "hectate" + projectile_type = /obj/item/projectile/bullet/rifle/a50bmg + load_method = MAGAZINE + muzzle_velocity = 825 + action_button_name = "Use Scope" + accuracy = -60 + scoped_accuracy = 15 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 120 + + +/obj/item/weapon/gun/projectile/automatic/serdy/hectate/ui_action_click() + scope() + +/obj/item/weapon/gun/projectile/automatic/serdy/hectate/verb/scope() + set category = "Object" + set name = "Use Scope" + set popup_menu = 1 + + toggle_scope(2.0) + +/obj/item/weapon/gun/projectile/automatic/serdy/memegun + name = "Hardbass Special" + desc = "Три полоски, три по три полоски Три полоски, три по три полоски Три полоски, три по три полоски Три полоски, три по три полоски Три полоски, три по три полоски Три полоски, три по три полоски. Chambered in 7.62x39mm" + caliber = "7.62x39mm" + magazine_type = /obj/item/ammo_magazine/akm + allowed_magazines = list(/obj/item/ammo_magazine/akm) + icon_state = "memegun" + projectile_type = /obj/item/projectile/bullet/rifle/a762x39 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK + muzzle_velocity = 715 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 40 + +/obj/item/weapon/gun/projectile/automatic/serdy/tkb408 + name = "TKB-408" + desc ="An odd, bullpup, slavic assault rifle from some distant rimworld. Very sturdy, unbeleivably reliable. Chambered in 7.62x39mm." + caliber = "7.62x39mm" + magazine_type = /obj/item/ammo_magazine/akm + allowed_magazines = list(/obj/item/ammo_magazine/akm) + icon_state = "tkb" + projectile_type = /obj/item/projectile/bullet/rifle/a762x39 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK + muzzle_velocity = 750 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 60 + +/obj/item/weapon/gun/projectile/automatic/serdy/groza + name = "OTs-14" + desc = "A strangely ergonomic bullpup version of an AK. Commonly found in Pan-slavic speaking regions of space. All of the inscriptions on this thing are in pan-slavic. Chambered in 7.62x39mm." + caliber = "7.62x39mm" + magazine_type = /obj/item/ammo_magazine/akm + allowed_magazines = list(/obj/item/ammo_magazine/akm) + icon_state = "groza" + projectile_type = /obj/item/projectile/bullet/rifle/a762x39 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK + muzzle_velocity = 685 + +/obj/item/weapon/gun/projectile/automatic/serdy/plamya + name = "WKHM 'Plamya' Mk. 1" + desc = "The original Plamya assault rifle, produced by WKHM back in the 2330's. Highly sought after for their collectability, and their superb reliability. They don't quite make them like they used to. It may not fire as fast as the newer ones, but these old models haven't survived this long for no reason. This one has a classic walnut thumbhole stock and foregrip. It has a heavy titanium chassis, durasteel bolt, and the original style 'PPSh' heatshield. The gun is dated 2336, and bears the 'WKHM Endurance' arkship's production stamp on the buttstock. 'A light in the dark' is stamped into the receiver. Chambered in 9x39mm." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + caliber = "9x39mm" + magazine_type = /obj/item/ammo_magazine/plamya + allowed_magazines = list(/obj/item/ammo_magazine/plamya) + icon_state = "plamyac" + projectile_type = /obj/item/projectile/bullet/rifle/a9x39 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="5-round bursts", burst=5, fire_delay=0.5, move_delay=3.5, burst_accuracy=list(0,-10,-15,-20,-25), dispersion=list(0.0, 0.3, 0.6, 0.9, 1.1)) + ) + load_method = MAGAZINE + auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY | LOCK_SLAPPABLE + muzzle_velocity = 285 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 50 + +/obj/item/weapon/gun/projectile/automatic/serdy/plamya/mk2 + name = "WKHM 'Plamya' Mk. 2" + desc = "An old school assault rifle. A favorite on the rimworld for it's blisteringly high rate of fire. One of the best selling products of W-K Heavy Manufacturing. Virtually impossible to break. The gold standard, with a rosewood thumbhole stock, a full length barrel, and an improved heatshield. The most mass produced firearm in WKHM's lineup. This one bears the 'WKHM Adamant' arkship's production stamp. Chambered in 9x39mm." + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="5-round bursts", burst=5, fire_delay=0.5, move_delay=3.5, burst_accuracy=list(0,-5,-10,-10,-15), dispersion=list(0.0, 0.2, 0.35, 0.5, 0.6)) + ) + muzzle_velocity = 305 + +/obj/item/weapon/gun/projectile/automatic/serdy/plamya/mk3 + name = "WKHM 'Plamya' Mk. 3" + desc = "An old school assault rifle with a modern twist. A favorite on the rimworld for it's blisteringly high rate of fire. One of the best selling products of W-K Heavy Manufacturing. Virtually impossible to break. This is a newer variant, with a fully synthetic stock, and a shorter barrel. The serial number and production stamp has been sanded off. Chambered in 9x39mm." + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="5-round bursts", burst=5, fire_delay=0.5, move_delay=3.5, burst_accuracy=list(0,-7.5,-10,-15,-20), dispersion=list(0.0, 0.2, 0.4, 0.6, 0.7)) + ) + muzzle_velocity = 290 + +//Auto-shotgun, closer to the rifles than anything else though. + +/obj/item/weapon/gun/projectile/automatic/serdy/strela + name = "WKHM 'Strela'" + desc = "A fully automatic, 12 gauge assault shotgun, that goes by many names. The Strela, The Bear, The Mule- The list goes on. If the Plamya is the scalpel, This heavy chunk of forged steel and titanium is the sledgehammer. Bring a shoulder pad and some tramadol. This one has a nice walnut thumbhole stock, and an AK style fore end. It also bears the 'WKHM Endurance' arkship's production stamp. Chambered in 12 gauge." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + caliber = "12g" + magazine_type = /obj/item/ammo_magazine/strela + allowed_magazines = list(/obj/item/ammo_magazine/strela) + icon_state = "strela" + projectile_type = /obj/item/projectile/bullet/shotgun + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=3, burst_accuracy=list(0,-5), dispersion=list(0.0, 0.2)), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY | LOCK_SLAPPABLE + muzzle_velocity = 470 + w_class = ITEMSIZE_HUGE + one_handed_penalty = 50 + +//SMGs + +/obj/item/weapon/gun/projectile/automatic/serdy/ppsh + name = "PPSh-17b" + desc = "A cheap remake of the venerable russian PPSh-41. Empties a 71 round magazine in less than 10 seconds. Compensates for poor accuracy with volume of bullet. Every inscription on this thing is in pan-slavic. Chambered in 7.62x25mm Tokarev." + caliber = "7.62x25mm" + magazine_type = /obj/item/ammo_magazine/ppsh + allowed_magazines = list(/obj/item/ammo_magazine/ppsh) + icon_state="ppsh" + projectile_type = /obj/item/projectile/bullet/a762x25 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + auto_loading_type = OPEN_BOLT + load_method = MAGAZINE + muzzle_velocity = 488 + +/obj/item/weapon/gun/projectile/automatic/serdy/mp5 + name = "MP5" + desc = "A favorite of law enforcement and corporate security across the galaxy for centuries. This old H&K design has survived the test of time. And while in many places it has been replaced long ago, it still stands as a reliable weapon platform. No need to fix what isn't broken. Chambered in 9mm." + caliber = "9mm" + magazine_type = /obj/item/ammo_magazine/mp5mag + allowed_magazines = list(/obj/item/ammo_magazine/mp5mag) + icon_state="mp5" + projectile_type = /obj/item/projectile/bullet/pistol + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + muzzle_velocity = 400 + +/obj/item/weapon/gun/projectile/automatic/serdy/vityaz + name = "WKHM 'Vityaz'" + desc = "A swarm of angry bees. The Plamya's baby brother. With 12 total moving parts, including the trigger mechanism, this gun was built with one purpose. Longevity and reliability. Commonly found in the hands of private security, criminals, and law enforcement alike across many worlds. This one is unmarked. Chambered in 10mm." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + caliber = "10mm" + magazine_type = /obj/item/ammo_magazine/m10mm + allowed_magazines = list(/obj/item/ammo_magazine/m10mm) + icon_state = "vityaz" + projectile_type = /obj/item/projectile/bullet/a10mm + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + ) + load_method = MAGAZINE + auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY | LOCK_SLAPPABLE + muzzle_velocity = 430 + +//LMGs + +/obj/item/weapon/gun/projectile/automatic/serdy/molniya + name = "WKHM 'Molniya'" + desc = "A light machinegun manufactured by WKHM for various paramilitaries, private security companies, and rimworld governments. Big, heavy, and with a fire rate similar to that of an MG42. Often used in emplacements and on top of armored vehicles, or as a squad support weapon. Nicknamed the 'Pig' or the 'Sawzall', this one has a solid oak stock, and bears the 'WKHM Adamant' arkship's production stamp. If you ever see this gun, there is no doubt shit's about to go down. Chambered in 7.62x51mm." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + caliber = "7.62mm" + magazine_type = /obj/item/ammo_magazine/molniya + allowed_magazines = list(/obj/item/ammo_magazine/molniya) + icon_state = "molniya" + projectile_type = /obj/item/projectile/bullet/rifle/a762 + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) + ) + load_method = MAGAZINE + auto_loading_type = OPEN_BOLT + muzzle_velocity = 860 + one_handed_penalty = 90 + +//Pistols + +/obj/item/weapon/gun/projectile/automatic/serdy/ssp4 + name = "WKHM SSP4" + desc = "A unique, high end service pistol carried by W-K security personnel in the outer rim, and various law enforcement agencies across the galaxy. Features a hidden ejector port, and an integral laser sight. Surprisingly reliable despite its unorthodox design. This one bears the 'WKHM Obsidian' arkship's production stamp. Chambered in 10mm." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + caliber = "10mm" + magazine_type = /obj/item/ammo_magazine/ssp4 + allowed_magazines = list(/obj/item/ammo_magazine/ssp4) + icon_state = "ssp4" + projectile_type = /obj/item/projectile/bullet/a10mm + load_method = MAGAZINE + bolt_name="slide" + bolt_release = "slide release" + auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY + muzzle_velocity = 405 + +/obj/item/weapon/gun/projectile/automatic/serdy/ssp4/silenced + name = "WKHM SSP4-S" + desc = "A unique, high end service pistol carried by W-K security personnel in the outer rim, and various law enforcement agencies across the galaxy. Features a hidden ejector port, and an integral laser sight. Surprisingly reliable despite its unorthodox design. This one is unmarked and is suppressed. Due to the minimal amount of moving parts, this gun is almost completely silent when used with subsonic ammunition. Chambered in 10mm." + silenced = 1 + icon_state = "ssp4s" + +/obj/item/weapon/gun/projectile/serdy_pistols + icon = 'icons/obj/gun_ch.dmi' + bolt_name="slide" + bolt_release = "slide release" + auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY + load_method = MAGAZINE + +/obj/item/weapon/gun/projectile/serdy_pistols/makarov + name = "Makarov PM" + desc = "The venerable Makarov. An easily concealable 9x18mm pistol design from Russia. This one is old and worn, but still reliable as ever. Chambered in 9x18mm makarov." + icon_state = "makarov" + caliber = "9x18mm" + magazine_type = /obj/item/ammo_magazine/makarov + allowed_magazines = list(/obj/item/ammo_magazine/makarov) + projectile_type = /obj/item/projectile/bullet/a9x18 + muzzle_velocity = 315 + +/obj/item/weapon/gun/projectile/serdy_pistols/vp70m + name = "VP70M" + desc = "Old Matilda. An ancient design, one of the first, if not the first entirely polymer framed pistols. Can commonly be found in the hands of.. well, anybody with access to a 3d printer. The designs for this pistol are absolutely everywhere, and it's still a favorite to this day, 500 some-odd years later. Chambered in 9mm." + icon_state = "vp70" + caliber = "9mm" + magazine_type = /obj/item/ammo_magazine/m9mm/vp70 + allowed_magazines = list(/obj/item/ammo_magazine/m9mm) + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-20,-40), dispersion=list(0.0, 0.9, 1.8)) + ) + projectile_type = /obj/item/projectile/bullet/pistol + muzzle_velocity = 365 + +/obj/item/weapon/gun/projectile/serdy_pistols/glock71 + name = "Glock 71" + desc = "Following the same design for centuries, the Glock 71 is one of the most reliable sidearms you can buy for cheap these days. These things are everywhere, and for good reason. Chambered in 9mm." + icon_state = "glock" + caliber = "9mm" + magazine_type = /obj/item/ammo_magazine/m9mm/large + allowed_magazines = list(/obj/item/ammo_magazine/m9mm) + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-20,-40), dispersion=list(0.0, 0.9, 1.8)) + ) + projectile_type = /obj/item/projectile/bullet/pistol + muzzle_velocity = 375 + +/obj/item/weapon/gun/projectile/revolver/nagant + name = "nagant revolver" + desc = "A 7 shot, gas-seal revolver designed to have increased muzzle velocity by not allowing excess gasses to escape out of the sides of the cylinder. One of the few revolvers that can be suppressed. Good luck finding a suppressor for one, though. Chambered in .357." + icon = 'icons/obj/gun_ch.dmi' + icon_state = "nagant" + max_shells = 7 + +/obj/item/weapon/gun/projectile/revolver/nagant/skinned + name = "nagant revolver" + icon_state = "nagantb" //Time to give all these existing guns some new properties. //automatic.dm @@ -258,6 +654,22 @@ /obj/item/weapon/gun/projectile/automatic/sts35 muzzle_velocity = 900 //Based off AK-74 + icon = 'icons/obj/64x32guns_ch.dmi' + icon_state = "sts35" + icon_expected_height = 32 + icon_expected_width = 64 + +/obj/item/weapon/gun/projectile/automatic/sts35/update_icon() + . = ..() + icon_state = ammo_magazine ? "[initial(icon_state)]" : "[initial(icon_state)]-e" + +/obj/item/weapon/gun/projectile/automatic/sts35/Initialize() + . = ..() + update_transform() + +/obj/item/weapon/gun/projectile/automatic/sts35/update_transform() + . = ..() + transform = transform.Translate(-16,0) /obj/item/weapon/gun/projectile/automatic/wt550 muzzle_velocity = 375 //Guestimation @@ -317,6 +729,10 @@ //boltaction.dm /obj/item/weapon/gun/projectile/shotgun/pump/rifle muzzle_velocity = 860 //Guestimation + is64x32 = FALSE + icon_expected_height = 32 + icon_expected_width = 32 + icon = 'icons/obj/gun.dmi' //caseless.dm /obj/item/weapon/gun/projectile/caseless @@ -338,6 +754,26 @@ bolt_release = "slide release" auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY muzzle_velocity = 253 //M1911 + icon = 'icons/obj/gun_ch.dmi' + icon_state = "m1911" + +/obj/item/weapon/gun/projectile/colt/Initialize() + .=..() + update_icon() + +/obj/item/weapon/gun/projectile/colt/update_icon() + if(ammo_magazine) + if(unique_reskin) + icon = 'icons/obj/gun.dmi' + icon_state = unique_reskin + else + icon_state = initial(icon_state) + else + if(unique_reskin) + icon = 'icons/obj/gun.dmi' + icon_state = "[unique_reskin]-e" + else + icon_state = "[initial(icon_state)]-e" /obj/item/weapon/gun/projectile/sec bolt_name="slide" @@ -478,10 +914,35 @@ /obj/item/weapon/gun/projectile/shotgun/pump manual_chamber = FALSE + icon = 'icons/obj/64x32guns_ch.dmi' + icon_state = "winchester" + icon_expected_height = 32 + icon_expected_width = 64 + pump_animation = "winchester-pump" + var/is64x32 = TRUE + +/obj/item/weapon/gun/projectile/shotgun/pump/Initialize() + . = ..() + if(is64x32) + update_transform() + +/obj/item/weapon/gun/projectile/shotgun/pump/update_transform() + . = ..() + if(is64x32) + transform = transform.Translate(-16,0) + +/obj/item/weapon/gun/projectile/shotgun/pump/combat + icon = 'icons/obj/64x32guns_ch.dmi' /obj/item/weapon/gun/projectile/shotgun/doublebarrel manual_chamber = FALSE +//shotgun_vr.dm +/obj/item/weapon/gun/projectile/shotgun/pump/USDF + is64x32 = FALSE + icon_expected_height = 32 + icon_expected_width = 32 + //shotgun_yw.dm /obj/item/weapon/gun/projectile/revolvershotgun manual_chamber = FALSE diff --git a/code/modules/projectiles/guns/projectile_ch.dm b/code/modules/projectiles/guns/projectile_ch.dm index 3d878f84a3..15927a8690 100644 --- a/code/modules/projectiles/guns/projectile_ch.dm +++ b/code/modules/projectiles/guns/projectile_ch.dm @@ -20,6 +20,7 @@ /obj/item/weapon/gun/projectile var/manual_chamber = TRUE + var/only_open_load = FALSE var/auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK | LOCK_SLAPPABLE var/bolt_name = "bolt" var/bolt_open = FALSE @@ -69,7 +70,7 @@ if(chambered) chambered.expend() if(!manual_chamber) process_chambered() - if(manual_chamber) + if(manual_chamber && auto_loading_type) bolt_toggle() /obj/item/weapon/gun/projectile/attack_self(mob/user as mob) @@ -159,10 +160,10 @@ else bolt_open = TRUE var/ejected = process_chambered() - var/chambering = chamber_bullet() + var/output = BOLT_OPENED if(ejected) output |= BOLT_CASING_EJECTED - if(chambering) output |= BOLT_CASING_CHAMBERED + //if(chambering) output |= BOLT_CASING_CHAMBERED return output else if(auto_loading_type) @@ -192,7 +193,10 @@ return BOLT_CLOSED else bolt_open = FALSE - return BOLT_CLOSED + var/output = BOLT_CLOSED + var/chambering = chamber_bullet() + if(chambering) output |= BOLT_CASING_CHAMBERED + return output /obj/item/weapon/gun/projectile/process_chambered() @@ -288,6 +292,9 @@ bolt_toggle() playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) if(SPEEDLOADER) + if(only_open_load && !bolt_open) + to_chat(user, "[src] must have its bolt open to be loaded!") + return if(loaded.len >= max_shells) to_chat(user, "[src] is full!") return @@ -340,6 +347,9 @@ return else return + if(only_open_load && !bolt_open) + to_chat(user, "[src] must have its bolt open to be loaded!") + return if(loaded.len >= max_shells) to_chat(user, "[src] is full.") return @@ -416,6 +426,15 @@ else return 1 +/obj/item/weapon/gun/projectile/handle_click_empty(mob/user) + if (user) + user.visible_message("*click click*", "*click*") + else + src.visible_message("*click click*") + playsound(src, 'sound/weapons/empty.ogg', 100, 1) + if(!manual_chamber) + process_chambered() + /obj/item/weapon/gun/projectile/New(loc, var/starts_loaded = 1) ..() if(manual_chamber) diff --git a/code/modules/projectiles/projectile/bullets_ch.dm b/code/modules/projectiles/projectile/bullets_ch.dm index f44b8ea67a..e5ef0bb8a5 100644 --- a/code/modules/projectiles/projectile/bullets_ch.dm +++ b/code/modules/projectiles/projectile/bullets_ch.dm @@ -126,6 +126,18 @@ only use the hollow_point and armor_penetration values.*/ hollow_point = TRUE armor_penetration = -50 +/obj/item/projectile/bullet/a762x25 + fire_sound = 'sound/weapons/gunshot2.ogg' + diam = 7.92 + grains = 85 + velocity = 469 + +/obj/item/projectile/bullet/a9x18 + fire_sound = 'sound/weapons/gunshot2.ogg' + diam = 9.27 + grains = 95 + velocity = 319 + /obj/item/projectile/bullet/a10mm fire_sound = 'sound/weapons/gunshot2.ogg' diam = 10.17 @@ -322,6 +334,30 @@ only use the hollow_point and armor_penetration values.*/ /obj/item/projectile/bullet/rifle/a762x54/ap armor_penetration = 50 +/obj/item/projectile/bullet/rifle/a338 + fire_sound = 'sound/weapons/ballistics/a762x54.ogg' + damage = 45 + diam = 8.61 + grains = 250 + velocity = 921 + hitscan = 1 + penetrating = 2 + +/obj/item/projectile/bullet/rifle/a338/ap + armor_penetration = 50 + +/obj/item/projectile/bullet/rifle/a50bmg + fire_sound = 'sound/weapons/ballistics/a145.ogg' + damage = 65 + diam = 13 + grains = 750 + velocity = 860 + hitscan = 1 + penetrating = 2 + +/obj/item/projectile/bullet/rifle/a50bmg/ap + armor_penetration = 50 + //NOTE: Ammo casings and magazines used to be in this part of the file. They have been moved to respective files in the projectiles/ammunition folder. //Various "We're not dealing with this shit because of how bad it is" (Some of these may be implemented into the new system with later updates) diff --git a/icons/obj/64x32guns_ch.dmi b/icons/obj/64x32guns_ch.dmi index 9f5057370ae224b53261f174d22850960f0ba5ee..f898a25a64d749de01b0838657c6f8b38fa2c95a 100644 GIT binary patch literal 34794 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 delta 2048 zcmV+b2>c ze>g`qu$e|8E+ti2O&1>%mWU;zmLYLy78@HID=RAx4-aEwW6GgQDH|7@NiemwwF?Ui zIXO8ZA|e+T7q+&xaBpt_X3V9fr2sR`z`($y=iV=-0C=2@)X@rpFcik|e{1&?!>$W0ExPC?jOe1?;gHJ>oXU18>gh8F z20`@Qoyngc$AM1dcDFyAWN|!*n{wW?joip=mWb$XO4j{hF&B|mrqUb^o{3dI#x_eW zRk4Ul<9z=h7170!Rbl?hrpe!MwVWef$N(?TmxvcK!0U*eX&Es;Dd5_+Zp?$Af4dx0 zWZ#-B#*QVTc3wkf=m62PQ#G{bSOV(JFw+xJ#}ZKK-XRV2)_##=6`*N#evfDeh-+(+ z%L^IcWjVqP6`(mXb#-mf4*3c@Xu**E_9k+7Du&)%d*_0;;ux@Pf;}U_-f;{qIQ36ZcC&t{-~-dpU2C4WhM#Cf8dq5H&~e} zK>+|>sx>xnWxhlJW&~*9sysS?4Ku*C`9c|>M>vls%s{Mz_Y%PD6r>MetWtUm%ojKY zYWGG}lL0W?%@H@pG>^|fp65+&|C-4UQ%sHmd3*-yYE(UsN2XwbW1#k;ik#!G4&iZ3 z@x=lts8ddkzdED`LEM}yf3FqX7W2%VYT7eSVum?Bje^F2+?*>Lfo&PSj7oIEdj=PY zL?V$$Boc{4A60D|#}n$I>$Et^cgrXd<8y_+ABz?YlV2%PckJEe{#riCp`>WYuW+e zqq(}S!yY-_^;@srR(Tf)fZ=QGgRml*4l2mo+j;!4{J2?hYTEAiS}%L66C@mGVb^VjXD002K2q)G_z$)GEd z{PZB@_-N3X0|8*3HQLHgaVP-5-F27TTXQpgAzvndtQn>ve+lg$@}`)Iq%k`6$8qm) z*G<}m{Bhh2<3;#~d_-j9pW{ybZqht15{X12kw_#GiA1UN<;z#6)IR2_H2Tx%E8y%- zv>s4<+VYEyovZNy3-S>QjypB`Z_pvb6>iTP4%+kM0~X{X7995m)t>xFe+JjEJJ0a( z0So$`QHFbie}lpSV2-=<3?Cn`KsUXf5rAd_fLz1wJjW-4^j)EtdxJ3<7+`mv=S!p@ zDgXt$^E^);zyQ1RJl`+|InEm7xQ5+%o+rDN&<1(9!LxI54Ba*b<*<8Fkg48+Pfe=HR^TjO} z+&yV*RZ{B%aeTZnR^QwZA&&fd0j#~Kk31aDhQIu+$+tv^6TemfhxRqmz~=Zk!?x=X zo@dOhe?jDsyj)01VHj8lgXPaXeD`f4ZDIgU}tv(~EQWzTJyNB9TZW5~b7F z{x|yjpPxSwe|v9dsXTnvDF3~`KaJpsgS|94{+b7l+l7Vc%S@0@?SJYD0LRDuSIqcT ze-6*+^SY{x$2t6{{U5vnz;VC-qNtb!ZXnN^1}`cMxNrX}@(KXQM}xJQA`}3}iw51+ zhPZG4ugNO_96uPOzrx}?UeDxX*MwY{n&W=|c6D+%!3=i=0uliDhB3(TX#mdP)%Y?Q zh%y+JfF%N0qJrl0MFL2efF+KB$N=nXe>~cp;qe);6@p&_A-Cb-_W;b}GvHQl0{2!k z+~)^;{Q|?|GtjtqDNrH|x8`69Fdq#ns)5e&%$;h&yW2S)Dc}At$p$*d)62F0Be+N; z5{X12kw_$pkk(3}-n8X!=VpeQVgC(Tz4=sIplb9efR*RhLY>U2k`MD_%#9m4mqA)&SCh@=(Bio*%gT35=0D7FYXG)RoC|s ei9{mNTkAjK$}bWmu)6{P0000v90CFYQ&UwV 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 Q0RR9107*qoM6N<$g5b=Cq5uE@ diff --git a/vorestation.dme b/vorestation.dme index c3a7726028..af588e0b51 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -149,6 +149,7 @@ #include "code\_helpers\unsorted_vr.dm" #include "code\_helpers\view.dm" #include "code\_helpers\visual_filters.dm" +#include "code\_helpers\widelists_ch.dm" #include "code\_helpers\sorts\__main.dm" #include "code\_helpers\sorts\comparators.dm" #include "code\_helpers\sorts\TimSort.dm" @@ -3133,6 +3134,7 @@ #include "code\modules\mob\living\voice\voice.dm" #include "code\modules\mob\living\voice\voice_vr.dm" #include "code\modules\mob\living\zz_ballistics_ch\bullet_act_ch.dm" +#include "code\modules\mob\living\zz_ballistics_ch\z_ballistic_overrides_ch.dm" #include "code\modules\mob\living\zz_ballistics_ch\z_ballistic_test_ch.dm" #include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\login_ch.dm" @@ -3497,6 +3499,7 @@ #include "code\modules\projectiles\guns\energy\hooklauncher.dm" #include "code\modules\projectiles\guns\energy\kinetic_accelerator_vr.dm" #include "code\modules\projectiles\guns\energy\laser.dm" +#include "code\modules\projectiles\guns\energy\laser_ch.dm" #include "code\modules\projectiles\guns\energy\laser_vr.dm" #include "code\modules\projectiles\guns\energy\laser_yw.dm" #include "code\modules\projectiles\guns\energy\netgun_vr.dm" @@ -3533,6 +3536,7 @@ #include "code\modules\projectiles\guns\magnetic\magnetic.dm" #include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm" #include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm" +#include "code\modules\projectiles\guns\magnetic\magnetic_railgun_ch.dm" #include "code\modules\projectiles\guns\magnetic\magnetic_railgun_vr.dm" #include "code\modules\projectiles\guns\projectile\automatic.dm" #include "code\modules\projectiles\guns\projectile\automatic_vr.dm"