From 6ab64ba66654c6810d7c89ddb6c0ba61ad2d7a6d Mon Sep 17 00:00:00 2001 From: Casey Date: Wed, 29 Jun 2022 02:00:04 -0400 Subject: [PATCH] Implements all-species positive and negative traits --- code/_helpers/global_lists_vr.dm | 10 ++- code/game/mecha/equipment/weapons/weapons.dm | 9 +++ .../client/preference_setup/vore/07_traits.dm | 65 ++++++++++++++++--- .../carbon/human/species/outsider/vox.dm | 4 ++ .../living/carbon/human/species/species.dm | 2 + .../living/carbon/human/species/species_vr.dm | 2 + .../carbon/human/species/station/blank_vr.dm | 2 + .../carbon/human/species/station/station.dm | 2 +- .../species/station/station_special_vr.dm | 4 +- .../human/species/station/station_vr.dm | 2 +- .../species/station/traits_vr/_traits.dm | 7 ++ .../species/station/traits_vr/negative.dm | 40 +++++++++++- .../species/station/traits_vr/neutral.dm | 1 + .../species/station/traits_vr/positive.dm | 29 ++++++++- .../human/species/station/traits_vr/trait.dm | 5 +- code/modules/mob/mob_helpers.dm | 5 +- code/modules/projectiles/gun.dm | 11 ++++ .../guns/energy/cell_loaded_vr/nerd_cells.dm | 2 + code/modules/projectiles/projectile.dm | 8 ++- code/modules/vore/resizing/sizegun_vr.dm | 1 + vorestation.dme | 8 +++ 21 files changed, 198 insertions(+), 21 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 8088eaa5e1..592ead06e8 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -5,8 +5,10 @@ var/global/list/hair_accesories_list= list()// Stores /datum/sprite_accessory/hair_accessory indexed by type var/global/list/negative_traits = list() // Negative custom species traits, indexed by path var/global/list/neutral_traits = list() // Neutral custom species traits, indexed by path -var/global/list/everyone_traits = list() // Neutral traits available to all species, indexed by path var/global/list/positive_traits = list() // Positive custom species traits, indexed by path +var/global/list/everyone_traits_positive = list() // Neutral traits available to all species, indexed by path +var/global/list/everyone_traits_neutral = list() // Neutral traits available to all species, indexed by path +var/global/list/everyone_traits_negative = list() // Neutral traits available to all species, indexed by path var/global/list/traits_costs = list() // Just path = cost list, saves time in char setup var/global/list/all_traits = list() // All of 'em at once (same instances) var/global/list/active_ghost_pods = list() @@ -563,12 +565,16 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, switch(category) if(-INFINITY to -0.1) negative_traits[traitpath] = T + if(!(T.custom_only)) + everyone_traits_negative[traitpath] = T if(0) neutral_traits[traitpath] = T if(!(T.custom_only)) - everyone_traits[traitpath] = T + everyone_traits_neutral[traitpath] = T if(0.1 to INFINITY) positive_traits[traitpath] = T + if(!(T.custom_only)) + everyone_traits_positive[traitpath] = T // Weaver recipe stuff diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index b038d90c42..6c51aa2792 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -95,3 +95,12 @@ P.accuracy += M.accuracy if(!isnull(M.accuracy_dispersion)) P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) +<<<<<<< HEAD +======= + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.species) + P.accuracy += H.species.gun_accuracy_mod + P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0) +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 62b8cefe4b..24e0b0c2a2 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -20,7 +20,7 @@ var/list/neg_traits = list() var/traits_cheating = 0 //Varedit by admins allows saving new maximums on people who apply/etc - var/starting_trait_points = STARTING_SPECIES_POINTS + var/starting_trait_points = 0 var/max_traits = MAX_SPECIES_TRAITS var/dirty_synth = 0 //Are you a synth var/gross_meatbag = 0 //Where'd I leave my Voight-Kampff test kit? @@ -72,7 +72,11 @@ pref.blood_color = sanitize_hexcolor(pref.blood_color, default="#A10808") if(!pref.traits_cheating) - pref.starting_trait_points = STARTING_SPECIES_POINTS + var/datum/species/S = GLOB.all_species[pref.species] + if(S) + pref.starting_trait_points = S.trait_points + else + pref.starting_trait_points = 0 pref.max_traits = MAX_SPECIES_TRAITS if(pref.organ_data[O_BRAIN]) //Checking if we have a synth on our hands, boys. @@ -90,6 +94,9 @@ if(!(path in positive_traits)) pref.pos_traits -= path continue + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_positive)) + pref.pos_traits -= path + continue var/take_flags = initial(path.can_take) if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS))) pref.pos_traits -= path @@ -98,7 +105,7 @@ if(!(path in neutral_traits)) pref.neu_traits -= path continue - if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits)) + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_neutral)) pref.neu_traits -= path continue var/take_flags = initial(path.can_take) @@ -109,6 +116,9 @@ if(!(path in negative_traits)) pref.neg_traits -= path continue + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_negative)) + pref.neg_traits -= path + continue var/take_flags = initial(path.can_take) if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS))) pref.neg_traits -= path @@ -164,6 +174,7 @@ . += "[pref.custom_base ? pref.custom_base : "Human"]
" var/traits_left = pref.max_traits +<<<<<<< HEAD if(pref.species == SPECIES_CUSTOM) var/points_left = pref.starting_trait_points @@ -191,11 +202,41 @@ . += "
  • - [trait.name] ([trait.cost])
  • " . += "" . += "Neutral Trait(s) (No Limit) +
    " // CHOMPEdit: More obvious/clear to players. +======= + + + var/points_left = pref.starting_trait_points + + for(var/T in pref.pos_traits + pref.neg_traits) + points_left -= traits_costs[T] + traits_left-- + . += "Traits Left: [traits_left]
    " + . += "Points Left: [points_left]
    " + if(points_left < 0 || traits_left < 0 || (!pref.custom_species && pref.species == SPECIES_CUSTOM)) + . += "^ Fix things! ^
    " + + . += "Positive Trait +
    " + . += "" + + . += "Neutral Trait +
    " +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening . += "" + + . += "Negative Trait +
    " + . += "" + . += "Blood Color: " //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color. . += "Set Color" . += "R
    " @@ -328,18 +369,26 @@ var/list/mylist switch(mode) if(POSITIVE_MODE) - picklist = positive_traits.Copy() - pref.pos_traits - mylist = pref.pos_traits + if(pref.species == SPECIES_CUSTOM) + picklist = positive_traits.Copy() - pref.pos_traits + mylist = pref.pos_traits + else + picklist = everyone_traits_positive.Copy() - pref.pos_traits + mylist = pref.pos_traits if(NEUTRAL_MODE) if(pref.species == SPECIES_CUSTOM) picklist = neutral_traits.Copy() - pref.neu_traits mylist = pref.neu_traits else - picklist = everyone_traits.Copy() - pref.neu_traits + picklist = everyone_traits_neutral.Copy() - pref.neu_traits mylist = pref.neu_traits if(NEGATIVE_MODE) - picklist = negative_traits.Copy() - pref.neg_traits - mylist = pref.neg_traits + if(pref.species == SPECIES_CUSTOM) + picklist = negative_traits.Copy() - pref.neg_traits + mylist = pref.neg_traits + else + picklist = everyone_traits_negative.Copy() - pref.neg_traits + mylist = pref.neg_traits else if(isnull(picklist)) diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 04de53ba87..e67cfae55e 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -6,8 +6,12 @@ default_language = LANGUAGE_VOX language = LANGUAGE_GALCOM species_language = LANGUAGE_VOX +<<<<<<< HEAD num_alternate_languages = 1 color_mult = 1 //CHOMP Edit +======= + num_alternate_languages = 3 +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening assisted_langs = list(LANGUAGE_ROOTGLOBAL) unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) rarity_value = 4 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 844590e79b..f1f8fcdd7d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -281,6 +281,8 @@ var/wikilink = null //link to wiki page for species var/icon_height = 32 var/agility = 20 //prob() to do agile things + var/gun_accuracy_mod = 0 // More is better + var/gun_accuracy_dispersion_mod = 0 // More is worse var/sort_hint = SPECIES_SORT_NORMAL diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index 9d8703d617..4cd436726c 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -25,6 +25,8 @@ var/list/traits = list() //Vars that need to be copied when producing a copy of species. var/list/copy_vars = list("base_species", "icobase", "deform", "tail", "tail_animation", "icobase_tail", "color_mult", "primitive_form", "appearance_flags", "flesh_color", "base_color", "blood_mask", "damage_mask", "damage_overlays", "move_trail", "has_floating_eyes") + var/trait_points = 0 + /datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane. unarmed_attacks = list() diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm index 2962b30fc5..e33a98502e 100644 --- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -46,6 +46,8 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right, "descriptor" = "right foot") ) + trait_points = 2 + /datum/species/custom/update_sort_hint() sort_hint = SPECIES_SORT_CUSTOM diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index a43dfc5bd7..50ae8ac2e0 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -522,7 +522,7 @@ health_hud_intensity = 2.5 item_slowdown_mod = 0.1 - num_alternate_languages = 2 + num_alternate_languages = 3 name_language = LANGUAGE_ROOTLOCAL species_language = LANGUAGE_ROOTLOCAL secondary_langs = list(LANGUAGE_ROOTGLOBAL) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 675da1d92d..9d97a0d9e1 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -17,7 +17,7 @@ base_species = "Xenochimera" selects_bodytype = TRUE - num_alternate_languages = 2 + num_alternate_languages = 3 secondary_langs = list("Sol Common") //color_mult = 1 //It seemed to work fine in testing, but I've been informed it's unneeded. tail = "tail" //Scree's tail. Can be disabled in the vore tab by choosing "hide species specific tail sprite" @@ -339,7 +339,7 @@ brute_mod = 0.8 //20% brute damage reduction burn_mod = 1.15 //15% burn damage increase. They're spiders. Aerosol can+lighter = dead spiders. - num_alternate_languages = 2 + num_alternate_languages = 3 secondary_langs = list(LANGUAGE_VESPINAE) color_mult = 1 tail = "tail" //Spider tail. diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index cc283b4e7d..aa9b570889 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -587,7 +587,7 @@ unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) darksight = 4 //Better hunters in the dark. hunger_factor = 0.1 //In exchange, they get hungry a tad faster. - num_alternate_languages = 2 + num_alternate_languages = 3 min_age = 18 max_age = 80 diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm new file mode 100644 index 0000000000..6abec0e517 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm @@ -0,0 +1,7 @@ +#define TRAIT_TYPE_NEGATIVE -1 +#define TRAIT_TYPE_NEUTRAL 0 +#define TRAIT_TYPE_POSITIVE 1 + +#define TRAIT_VARCHANGE_LESS_BETTER -1 +#define TRAIT_VARCHANGE_ALWAYS_OVERRIDE 0 +#define TRAIT_VARCHANGE_MORE_BETTER 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index 90cf90f7ea..b78fe6157a 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -1,5 +1,5 @@ /datum/trait/negative - category = -1 + category = TRAIT_TYPE_NEGATIVE /datum/trait/negative/speed_slow name = "Slowdown" @@ -92,6 +92,8 @@ desc = "Increases your susceptibility to electric shocks by 100%" cost = -3 //CHOMPEdit var_changes = list("siemens_coefficient" = 2.0) //This makes you extremely weak to tasers. + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_LESS_BETTER /datum/trait/negative/haemophilia name = "Haemophilia" // CHOMPEdit: Trait List Organization @@ -99,6 +101,8 @@ cost = -2 var_changes = list("bloodloss_rate" = 2) can_take = ORGANICS + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_LESS_BETTER /datum/trait/negative/hollow name = "Hollow Bones/Aluminum Alloy" @@ -116,6 +120,7 @@ desc = "Your light weight and poor balance make you very susceptible to unhelpful bumping. Think of it like a bowling ball versus a pin. (STOP TAKING THIS AS SECURITY! We're MRP, so expect to lose your junk immediately, especially in events. - Love, Admins)" //CHOMP Edit btw cost = -2 var_changes = list("lightweight" = 1) + custom_only = FALSE /datum/trait/negative/neural_hypersensitivity name = "Neural Hypersensitivity" @@ -137,3 +142,36 @@ name = "Nitrogen Breather" desc = "You breathe nitrogen instead of oxygen (which is poisonous to you). Incidentally, phoron isn't poisonous to breathe to you." var_changes = list("breath_type" = "nitrogen", "poison_type" = "oxygen") + +/datum/trait/negative/monolingual + name = "Monolingual" + desc = "You are not good at learning languages." + cost = -3 + var_changes = list("num_alternate_languages" = 0) + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/datum/trait/negative/monolingual + name = "Monolingual" + desc = "You are not good at learning languages." + cost = -1 + var_changes = list("num_alternate_languages" = 0) + var_changes_pref = list("extra_languages" = -3) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/datum/trait/negative/dark_blind + name = "Nyctalopia" + desc = "You cannot see in dark at all." + cost = -1 + var_changes = list("darksight" = 0) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/datum/trait/negative/bad_shooter + name = "Bad Shot" + desc = "You are terrible at aiming." + cost = -1 + var_changes = list("gun_accuracy_mod" = -35) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index b6035fe667..2dc704fc45 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -1,4 +1,5 @@ /datum/trait/neutral + category = TRAIT_TYPE_NEUTRAL /datum/trait/neutral/metabolism_up name = "Metabolism, Fast" diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index cc65469af9..0e16bf30bb 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -1,5 +1,5 @@ /datum/trait/positive - category = 1 + category = TRAIT_TYPE_POSITIVE /datum/trait/positive/speed_fast name = "Haste" @@ -127,6 +127,7 @@ desc = "You can fall from certain heights without suffering any injuries, be it via wings, lightness of frame or general dexterity." cost = 1 var_changes = list("soft_landing" = TRUE) + custom_only = FALSE /datum/trait/positive/hardfeet name = "Hard Feet" @@ -150,6 +151,8 @@ desc = "You're capable of parkour and can *flip over low objects (most of the time)." cost = 1 //CHOMPEdit this is not worth 2 points var_changes = list("agility" = 90) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER /datum/trait/positive/snowwalker name = "Snow Walker" @@ -182,8 +185,28 @@ name = "Cocoon Spinner" desc = "Allows you to build a cocoon around yourself, using it to transform your body if you desire." cost = 1 - //custom_only = FALSE /datum/trait/positive/cocoon_tf/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) - H.verbs |= /mob/living/carbon/human/proc/enter_cocoon \ No newline at end of file +<<<<<<< HEAD + H.verbs |= /mob/living/carbon/human/proc/enter_cocoon +======= + H.verbs |= /mob/living/carbon/human/proc/enter_cocoon + +/datum/trait/positive/linguist + name = "Linguist" + desc = "Allows you to have more languages." + cost = 1 + var_changes = list("num_alternate_languages" = 6) + var_changes_pref = list("extra_languages" = 3) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/datum/trait/positive/good_shooter + name = "Eagle Eye" + desc = "You are better at aiming than most." + cost = 2 + var_changes = list("gun_accuracy_mod" = 25) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm index 91bf5fafea..b2fef62275 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm @@ -4,19 +4,22 @@ var/cost = 0 var/sort = TRAIT_SORT_NORMAL // Sort order, 1 before 2 before 3 etc. Alphabetical is used for same-group traits. - var/category = 0 // What category this trait is. -1 is Negative, 0 is Neutral, 1 is Positive + var/category = TRAIT_TYPE_NEUTRAL // What category this trait is. -1 is Negative, 0 is Neutral, 1 is Positive var/list/var_changes // A list to apply to the custom species vars. var/list/excludes // Store a list of paths of traits to exclude, but done automatically if they change the same vars. var/can_take = ORGANICS|SYNTHETICS // Can freaking synths use those. var/list/banned_species // A list of species that can't take this trait var/list/allowed_species // VORESTATION EDIT:chomp port. A list of species that CAN take this trait, use this if only a few species can use it. -shark var/custom_only = TRUE // Trait only available for custom species + var/varchange_type = TRAIT_VARCHANGE_ALWAYS_OVERRIDE //Mostly used for non-custom species. //Proc can be overridden lower to include special changes, make sure to call up though for the vars changes /datum/trait/proc/apply(var/datum/species/S,var/mob/living/carbon/human/H) ASSERT(S) if(var_changes) for(var/V in var_changes) + if((category == TRAIT_TYPE_POSITIVE && ((varchange_type == TRAIT_VARCHANGE_LESS_BETTER && var_changes[V] > S.vars[V]) || (varchange_type == TRAIT_VARCHANGE_MORE_BETTER && var_changes[V] < S.vars[V]))) || (category == TRAIT_TYPE_NEGATIVE && ((varchange_type == TRAIT_VARCHANGE_LESS_BETTER && var_changes[V] < S.vars[V]) || (varchange_type == TRAIT_VARCHANGE_MORE_BETTER && var_changes[V] > S.vars[V])))) + continue S.vars[V] = var_changes[V] return diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a5b81d0f8a..c36a48f13f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -132,7 +132,7 @@ // Emulates targetting a specific body part, and miss chances // May return null if missed // miss_chance_mod may be negative. -/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0) +/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0, var/force_hit = FALSE) zone = check_zone(zone) if(!ranged_attack) @@ -144,6 +144,9 @@ if(G.state >= GRAB_AGGRESSIVE) return zone + if(force_hit) + return zone + var/miss_chance = 10 if (zone in base_miss_chance) miss_chance = base_miss_chance[zone] diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4bf31a2747..8c918e2628 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -668,6 +668,12 @@ if(!isnull(M.accuracy_dispersion)) P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.species) + P.accuracy += H.species.gun_accuracy_mod + P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0) + //does the actual launching of the projectile /obj/item/weapon/gun/proc/process_projectile(obj/projectile, mob/user, atom/target, var/target_zone, var/params=null) var/obj/item/projectile/P = projectile @@ -804,8 +810,13 @@ user.hud_used.remove_ammo_hud(user, src) return ..() +<<<<<<< HEAD /obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. +======= + +/obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening user.hud_used.remove_ammo_hud(user, src) ..() \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm index 34a1790ffb..29432dfe79 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm @@ -17,6 +17,8 @@ combustion = FALSE + can_miss = FALSE + muzzle_type = /obj/effect/projectile/muzzle/medigun tracer_type = /obj/effect/projectile/tracer/medigun impact_type = /obj/effect/projectile/impact/medigun diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index a24acd21cd..a04ec31eeb 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -40,6 +40,7 @@ var/ricochets = 0 var/ricochets_max = 2 var/ricochet_chance = 30 + var/can_miss = TRUE //Hitscan var/hitscan = FALSE //Whether this is hitscan. If it is, speed is basically ignored. @@ -139,7 +140,7 @@ var/impact_effect_type = null var/list/impacted_mobs = list() - + // TGMC Ammo HUD Port var/hud_state = "unknown" // What HUD state we use when we have ammunition. var/hud_state_empty = "unknown" // The empty state. DON'T USE _FLASH IN THE NAME OF THE EMPTY STATE STRING, THAT IS ADDED BY THE CODE. @@ -662,8 +663,13 @@ return //roll to-hit +<<<<<<< HEAD miss_modifier = max(miss_modifier + target_mob.get_evasion(), -100) //CHOMPEDIT - removing baymiss var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss +======= + miss_modifier = max(15*(distance-2) - accuracy + miss_modifier + target_mob.get_evasion(), -100) + var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob), force_hit = !can_miss) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening var/result = PROJECTILE_FORCE_MISS if(hit_zone) diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm index d932351db1..8decb8dde6 100644 --- a/code/modules/vore/resizing/sizegun_vr.dm +++ b/code/modules/vore/resizing/sizegun_vr.dm @@ -136,6 +136,7 @@ damage = 0 check_armour = "laser" var/set_size = 1 //Let's default to 100% + can_miss = FALSE muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray diff --git a/vorestation.dme b/vorestation.dme index 8bfc07e1e8..4e7c155bbd 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3044,6 +3044,14 @@ #include "code\modules\mob\living\carbon\human\species\station\teshari_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\xenochimera_hud_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\xenochimera_trait_vr.dm" +<<<<<<< HEAD +======= +#include "code\modules\mob\living\carbon\human\species\station\protean_vr\_protean_defines.dm" +#include "code\modules\mob\living\carbon\human\species\station\protean_vr\protean_blob.dm" +#include "code\modules\mob\living\carbon\human\species\station\protean_vr\protean_powers.dm" +#include "code\modules\mob\living\carbon\human\species\station\protean_vr\protean_species.dm" +#include "code\modules\mob\living\carbon\human\species\station\traits_vr\_traits.dm" +>>>>>>> 4b43b02c06... Merge pull request #13193 from Heroman3003/traitening #include "code\modules\mob\living\carbon\human\species\station\traits_vr\negative.dm" #include "code\modules\mob\living\carbon\human\species\station\traits_vr\negative_ch.dm" #include "code\modules\mob\living\carbon\human\species\station\traits_vr\neutral.dm"