From 3e859092b350c2cff093c23e0ddaee3d89a06c03 Mon Sep 17 00:00:00 2001
From: Sharkmare <34294231+Sharkmare@users.noreply.github.com>
Date: Tue, 9 Mar 2021 04:24:01 +0100
Subject: [PATCH] Carbonkin Content port + Trait whitelisting
Ports over my carbonkin content update that brings carbon kin mostly on the same level as mob kin.
Also ports the whitelist system so people dont have to write out EVERY species name in cases like this.
Whats it add tho?
Rebalances phase shifting:
Phase shifting is a pretty polarizing ability, it now is more forgiving for stealth uses but has a counter in becoming more costly with people and light level.
Stat blocks of all kin have been revisedd based on the flavor messages of the mob variants.
Tasers and other electricity sources now affect kin, this is the only immunity being removed and should help with SEC interaction.
Adds a new attack "syhon strike" this is mostly for the aggressive kins, if using syphon strike on hit it will take the damage you dealt and convert it into energy, this only works against carbons as example punching punpun restores around 4 energy
As a last note all of the Shadekin Adaptopn color traits lock your eye color into the respective color. So if you take Red adaption you will be immediatley identifiable as a red adapted kin since your eyes will in fact always be red.
---
.../client/preference_setup/vore/07_traits.dm | 14 +--
.../carbon/human/species/shadekin/_defines.dm | 10 ++-
.../carbon/human/species/shadekin/shadekin.dm | 20 +++--
.../species/shadekin/shadekin_abilities.dm | 21 ++++-
.../human/species/shadekin/shadekin_trait.dm | 89 +++++++++++++++++++
.../human/species/station/traits_vr/trait.dm | 1 +
vorestation.dme | 1 +
7 files changed, 142 insertions(+), 14 deletions(-)
create mode 100644 code/modules/mob/living/carbon/human/species/shadekin/shadekin_trait.dm
diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm
index 47d8e21269..72b330bac5 100644
--- a/code/modules/client/preference_setup/vore/07_traits.dm
+++ b/code/modules/client/preference_setup/vore/07_traits.dm
@@ -41,7 +41,7 @@
S["traits_cheating"] >> pref.traits_cheating
S["max_traits"] >> pref.max_traits
S["trait_points"] >> pref.starting_trait_points
-
+
S["custom_say"] >> pref.custom_say
S["custom_whisper"] >> pref.custom_whisper
S["custom_ask"] >> pref.custom_ask
@@ -58,7 +58,7 @@
S["traits_cheating"] << pref.traits_cheating
S["max_traits"] << pref.max_traits
S["trait_points"] << pref.starting_trait_points
-
+
S["custom_say"] << pref.custom_say
S["custom_whisper"] << pref.custom_whisper
S["custom_ask"] << pref.custom_ask
@@ -141,7 +141,7 @@
. += "[pref.custom_base ? pref.custom_base : "Human"]
"
var/traits_left = pref.max_traits
-
+
if(pref.species == SPECIES_CUSTOM)
var/points_left = pref.starting_trait_points
@@ -176,7 +176,7 @@
. += "Set Color"
. += "R
"
. += "
"
-
+
. += "Custom Say: "
. += "Set Say Verb
"
. += "Custom Whisper: "
@@ -342,7 +342,11 @@
if(pref.species in instance.banned_species)
alert("The trait you've selected cannot be taken by the species you've chosen!","Error")
return TOPIC_REFRESH
-
+ //VORSTATION ADDITION CHOMPADDITION START Adding whitelist for traits
+ if( LAZYLEN(instance.allowed_species) && !(pref.species in instance.allowed_species)) //Adding white list handling -shark
+ alert("The trait you've selected cannot be taken by the species you've chosen!","Error")
+ return TOPIC_REFRESH
+ //VORSTATION ADDITION CHOMPADDITION END
if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits)
conflict = instance.name
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/_defines.dm b/code/modules/mob/living/carbon/human/species/shadekin/_defines.dm
index f24544e0b2..2a9d17d37f 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/_defines.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/_defines.dm
@@ -3,4 +3,12 @@
#define SHIFTED_OR_NOT 3
#define AB_PHASE_SHIFTED 0x1
-#define AB_SHADE_REGEN 0x2
\ No newline at end of file
+#define AB_SHADE_REGEN 0x2
+
+//Porting over the type system of the mobs
+#define BLUE_EYES 1
+#define RED_EYES 2
+#define PURPLE_EYES 3
+#define YELLOW_EYES 4
+#define GREEN_EYES 5
+#define ORANGE_EYES 6
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
index dfd34037b6..625f79a3da 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
@@ -21,7 +21,7 @@
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin)
rarity_value = 15 //INTERDIMENSIONAL FLUFFERS
- siemens_coefficient = 0
+ siemens_coefficient = 1
darksight = 10
slowdown = -0.5
@@ -106,6 +106,9 @@
/datum/power/shadekin/regenerate_other,
/datum/power/shadekin/create_shade)
var/list/shadekin_ability_datums = list()
+ var/kin_type
+ var/energy_light = 0.25
+ var/energy_dark = 0.75
/datum/species/shadekin/New()
..()
@@ -162,18 +165,21 @@
var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0
darkness = 1-brightness //Invert
+ var/is_dark = (darkness >= 0.5)
if(H.ability_flags & AB_PHASE_SHIFTED)
dark_gains = 0
else
//Heal (very) slowly in good darkness
- if(darkness >= 0.75)
- H.adjustFireLoss(-0.05)
- H.adjustBruteLoss(-0.05)
- H.adjustToxLoss(-0.05)
- dark_gains = 0.75
+ if(is_dark)
+ H.adjustFireLoss((-0.10)*darkness)
+ H.adjustBruteLoss((-0.10)*darkness)
+ H.adjustToxLoss((-0.10)*darkness)
+ //energy_dark and energy_light are set by the shadekin eye traits.
+ //These are balanced around their playstyles and 2 planned new aggressive abilities
+ dark_gains = energy_dark
else
- dark_gains = 0.25
+ dark_gains = energy_light
set_energy(H, get_energy(H) + dark_gains)
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
index c1c9ad064b..a924e5768a 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
@@ -33,6 +33,26 @@
var/ability_cost = 100
+//CHOMPADDITION Conditional shifting ased on observers and darkness
+ var/darkness = 1
+ var/turf/T = get_turf(src)
+ if(!T)
+ to_chat(src,"You can't use that here!")
+ return FALSE
+
+ var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0
+ darkness = 1-brightness //Invert
+
+ var/watcher =-1
+ for(var/mob/living/carbon/human/watchers in view_or_range(7,get_turf(src),"range" ))
+ watcher++
+
+ ability_cost = CLAMP(ability_cost/(0.01+darkness*2),50, 80)//This allows for 1 watcher in full light
+ if(watcher>0)
+ ability_cost = ability_cost + ( 15 * watcher )
+ if(!(ability_flags & AB_PHASE_SHIFTED))
+ log_debug("[src] attempted to shift with [watcher] visible Carbons with a cost of [ability_cost] in a darkness level of [darkness]")
+//CHOMPADDITION END
var/datum/species/shadekin/SK = species
if(!istype(SK))
to_chat(src, "Only a shadekin can use that!")
@@ -48,7 +68,6 @@
shadekin_adjust_energy(-ability_cost)
playsound(src, 'sound/effects/stealthoff.ogg', 75, 1)
- var/turf/T = get_turf(src)
if(!T.CanPass(src,T) || loc != T)
to_chat(src,"You can't use that here!")
return FALSE
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_trait.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_trait.dm
new file mode 100644
index 0000000000..1ca496b734
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_trait.dm
@@ -0,0 +1,89 @@
+/datum/trait/kintype
+ allowed_species = list(SPECIES_SHADEKIN)
+ var/color = BLUE_EYES
+ name = "Shadekin Blue Adaptation"
+ desc = "Makes your shadekin adapted as a Blue eyed kin! This gives you decreased energy regeneration in darkness, decreased regeneration in the light amd unchanged health!"
+ cost = 0
+ var_changes = list( "total_health" = 100,
+ "energy_light" = 0.5,
+ "energy_dark" = 0.5,
+ "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick,/datum/unarmed_attack/shadekinharmbap))
+ custom_only = FALSE
+
+/datum/trait/kintype/red
+ name = "Shadekin Red Adaptation"
+ color = RED_EYES
+ desc = "Makes your shadekin adapted as a Red eyed kin! This gives you minimal energy regeneration in darkness, moderate regeneration in the light amd increased health!"
+ var_changes = list( "total_health" = 200,
+ "energy_light" = -1,
+ "energy_dark" = 0.1,
+ "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick,/datum/unarmed_attack/shadekinharmbap))
+/datum/trait/kintype/purple
+ name = "Shadekin Purple Adaptation"
+ color = PURPLE_EYES
+ desc = "Makes your shadekin adapted as a Purple eyed kin! This gives you moderate energy regeneration in darkness, minor degeneration in the light amd increased health!"
+ var_changes = list( "total_health" = 150,
+ "energy_light" = 1,
+ "energy_dark" = -0.5,
+ "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick,/datum/unarmed_attack/shadekinharmbap))
+
+/datum/trait/kintype/yellow
+ name = "Shadekin Yellow Adaptation"
+ color = YELLOW_EYES
+ desc = "Makes your shadekin adapted as a Yellow eyed kin! This gives you the highest energy regeneration in darkness, high degeneration in the light amd unchanged health!"
+ var_changes = list( "total_health" = 100,
+ "energy_light" = 3,
+ "energy_dark" = -2,
+ "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick,/datum/unarmed_attack/shadekinharmbap))
+
+/datum/trait/kintype/green
+ name = "Shadekin Green Adaptation"
+ color = GREEN_EYES
+ desc = "Makes your shadekin adapted as a Green eyed kin! This gives you high energy regeneration in darkness, minor regeneration in the light amd unchanged health!"
+ var_changes = list( "total_health" = 100,
+ "energy_light" = 2,
+ "energy_dark" = 0.125,
+ "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick,/datum/unarmed_attack/shadekinharmbap))
+
+/datum/trait/kintype/orange
+ name = "Shadekin Orange Adaptation"
+ color = ORANGE_EYES
+ desc = "Makes your shadekin adapted as a Orange eyed kin! This gives you minor energy regeneration in darkness, modeate degeneration in the light amd increased health!"
+ var_changes = list( "total_health" = 175,
+ "energy_light" = 0.25,
+ "energy_dark" = -0.5,
+ "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick,/datum/unarmed_attack/shadekinharmbap))
+
+/datum/trait/kintype/apply(var/datum/species/shadekin/S,var/mob/living/carbon/human/H)
+ if(color && istype(S)) //Sanity check to see if they're actually a shadekin, otherwise just don't do anything. They shouldn't be able to spawn with the trait.
+ S.kin_type = color
+ switch(color)
+ if(BLUE_EYES)
+ H.shapeshifter_set_eye_color("0000FF")
+ if(RED_EYES)
+ H.shapeshifter_set_eye_color("FF0000")
+ if(GREEN_EYES)
+ H.shapeshifter_set_eye_color("00FF00")
+ if(PURPLE_EYES)
+ H.shapeshifter_set_eye_color("FF00FF")
+ if(YELLOW_EYES)
+ H.shapeshifter_set_eye_color("FFFF00")
+ if(ORANGE_EYES)
+ H.shapeshifter_set_eye_color("FFA500")
+
+
+/datum/unarmed_attack/shadekinharmbap
+ attack_name = "syphon strike"
+ attack_verb = list("hit", "clawed", "slashed", "scratched")
+ attack_sound = 'sound/weapons/slice.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ shredding = 0
+
+/datum/unarmed_attack/shadekinharmbap/apply_effects(var/mob/living/carbon/human/shadekin/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
+ ..()
+ if(user == target) //Prevent self attack to gain energy
+ return
+ var/obj/item/organ/internal/brain/shadekin/shade_organ = user.internal_organs_by_name[O_BRAIN]
+ if(!istype(shade_organ))
+ return
+ shade_organ.dark_energy = CLAMP(shade_organ.dark_energy + attack_damage,0,shade_organ.max_dark_energy) //Convert Damage done to Energy Gained
\ No newline at end of file
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 4ee8672554..52b2e3b9f5 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
@@ -10,6 +10,7 @@
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
//Proc can be overridden lower to include special changes, make sure to call up though for the vars changes
diff --git a/vorestation.dme b/vorestation.dme
index 2a6dc09883..51504af6b8 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2636,6 +2636,7 @@
#include "code\modules\mob\living\carbon\human\species\shadekin\shadekin.dm"
#include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_abilities.dm"
#include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_hud.dm"
+#include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_trait.dm"
#include "code\modules\mob\living\carbon\human\species\station\alraune.dm"
#include "code\modules\mob\living\carbon\human\species\station\blank_vr.dm"
#include "code\modules\mob\living\carbon\human\species\station\golem.dm"