First Genetics Content in 5 Years (Adds new positive mutations!) (#83652)
## About The Pull Request Sister PR to #83439, that needs to be merged before this. Adds a plethora of new positive mutations to the game! Mutations now have a variable that directly adds and removes traits instead of manually doing so for idk Tripled cryobeam range. Made the mushroom hallucinogen's code more readable. - Adrenaline Rush Trigger your body's adrenaline response, granting you 10 * P units of pump-up, synaptizine, and determination. After 25 seconds, you crash, recieving 7 * S units of tiring and dizzying solution. Can be Energized, Powered, and Synchronized. - Mending Touch Transfer injuries from the target to yourself! Heal 35 * P damage, recieving up to 35 * S damage in turn. Transfers moderate wounds, fire stacks, and attempts to parallel limb-to-limb damage. Has bonuses for pacifist players. Can be Energized, Powered, and Synchronized. - Elastic Arms Your arms become floppy and you can interact with things as if you were adjacent to them from one tile further! Does not work through walls or dense objects, and you become unable to lift huge items, pull large corpses, and you get chunky fingers. Split temperature adaptation into three: - Cold Adaptation Gain cold immunity, gain ice slip immunity! - Heat Adaptation Gain heat and ash storm immunity - Thermal Adaptation Resist both cold and heat, but no extra fancies. The sprite is green now! Pressure Adapt has a purple sprite. You can mix the cold mutations with Fiery Sweat to make these new ones: - Cindikinesis Instead of summoning snow, you can now summon... ash. Wow. Very cool. - Pyrokinesis You can fire fire now! Fires beams of heat that, unlike the temperature gun, actually ignite on hit. Higher instability cost than its sister mutation. The changes have been themed primarily around classic superhero gimmicks. Genetics feels like a natural spawning point for superheroes, and its mutations show this via the good ol' 'radiation made me fire eye lasers' hero backstory. Adding more ways to be a superhero is fun. Also, added two new speech mutations: - Trichromatic Larynx Every word you say is now either red, green, or blue! - Heckacious Larynx (Trichromatic Larynx x Wacky) You sound, well. Absolutely ridiculous. Spectacularly silly. Profoundly wacky. Don't give it to the clown. Unlocked the Elvis mutation as well. ## Why It's Good For The Game > Adds a plethora of new positive mutations to the game! Genetics is in desperate need of new content, all it's had for years is a slow gutting and removal of the few things it does have. Hulk is, being real, stupid, dumb, stagnated, and overpowered, but it's been begrudgingly accepted because genetics is quite literally just, nothing without it. I'm here to add the somethings to genetics and add some more variety (and no i'm not touching hulk) > Mutations now have a variable that directly adds and removes traits instead of manually doing so for every mutation. Less stupid > Tripled cryobeam range. Shit joke mutation is now long-range shit joke mutation! > Made the mushroom hallucinogen's code more readable. Slightly OOS because I was going to add color blind mutations but decided not to creep. This piece o shit code has been hurting my head for years and now that I've finally understood it I want to make sure others don't go through that pani. > - Adrenaline Rush A quick burst of some mild chemicals at the cost of eventual nausea, sounds like a fair trade to me! If you're already on the ground, this isn't going to do anything. > - Mending Touch Healing is something that's lacking from the mutations, and this puts a fun spin on it, making the caster a damage pincushion as they heal and absorb damage. > - Elastic Arms Classic superhero power, very funny, lots of silly and sandbox potential. Has innate drawbacks because 1. thematic and 2. it's pretty strong > Split temperature adaptation into three: They combine into the same thing it used to be, so don't freak out. This just adds some separation between the immune types, for things like themed superheroes. > - Cold Adaptation Perhaps mildly concerning, but I think this might be a fun spin on it? TODO: make hiking boots effect? > - Heat Adaptation Nothing to say. It's cool. > - Thermal Adaptation Nothing wrong with this mutation so it stays in > You can mix the cold mutations with Fiery Sweat to make these new ones: How can we have frozone and not, uh human torch or something. why are there no heavy hitter fire superheroes in marvel or dc??? > - Cindikinesis Can't really summon an equivalent to snow that's actually useful, so here's this instead. Clown might like it, or maybe the chemist. > - Pyrokinesis The ignition effect is fairly weak and mostly a deterrent. I think this is the most dangerous ranged mutation in the game, which is kinda sad. > - Trichromatic Larynx Colors are fun! We have speech mutations that change words but none that change their color. Though, to be fair, this was mostly added for the mutation below's combination. > - Heckacious Larynx (Trichromatic Larynx x Wacky) I felt that Wacky wasn't nearly wacky enough. It just made your speech comic sans. That's great and all, but. It's not much? This will be a truly clownly mutation, the Genetics equivalent of a HONK mech. I made it a combination mutation specifically to restrain its power level. > Unlocked the Elvis mutation as well. Was there a reason to lock this? ## Changelog 🆑 add: Added tons of new mutations to Genetics, alongside some recipes! add: Thermal Adaptation has been made a combination mutation from the stronger but narrower Cold and Heat adaptations. balance: Cryobeams have 9 tile range, and fiery sweat doesn't cause spread on contact. image: Added some neat new sprites for the new mutations, and added a greyscale version of the magic hand sprites. code: Infinitesmally improved mutation code. /🆑
@@ -178,6 +178,7 @@
|
||||
#define TREAT_MESSAGE_ARG 1
|
||||
#define TREAT_TTS_MESSAGE_ARG 2
|
||||
#define TREAT_TTS_FILTER_ARG 3
|
||||
#define TREAT_CAPITALIZE_MESSAGE 4
|
||||
|
||||
///From obj/item/toy/crayon/spraycan
|
||||
#define COMSIG_LIVING_MOB_PAINTED "living_mob_painted"
|
||||
|
||||
@@ -69,6 +69,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
// Antagonizes the above.
|
||||
#define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user"
|
||||
#define TRAIT_PACIFISM "pacifism"
|
||||
// Trait added to the user of a hippocratic oath status effect
|
||||
#define TRAIT_HIPPOCRATIC_OATH "hippocratic_oath"
|
||||
#define TRAIT_IGNORESLOWDOWN "ignoreslow"
|
||||
#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown"
|
||||
/// Makes it so the mob can use guns regardless of tool user status
|
||||
|
||||
@@ -363,6 +363,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING,
|
||||
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
|
||||
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
|
||||
"TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
|
||||
"TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE,
|
||||
"TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER,
|
||||
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
|
||||
|
||||
@@ -163,6 +163,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
|
||||
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
|
||||
"TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE,
|
||||
"TRAIT_PACIFISM" = TRAIT_PACIFISM,
|
||||
"TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
|
||||
"TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER,
|
||||
"TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM,
|
||||
"TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG,
|
||||
|
||||
@@ -225,6 +225,10 @@
|
||||
next += target.loc
|
||||
|
||||
checking = next
|
||||
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_CANREACH, ultimate_target) & COMPONENT_ALLOW_REACH)
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/atom/movable/proc/DirectAccess()
|
||||
|
||||
@@ -25,6 +25,18 @@
|
||||
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
|
||||
result = /datum/mutation/human/shock
|
||||
|
||||
/datum/generecipe/cindikinesis
|
||||
required = "/datum/mutation/human/geladikinesis; /datum/mutation/human/fire_breath"
|
||||
result = /datum/mutation/human/geladikinesis/ash
|
||||
|
||||
/datum/generecipe/pyrokinesis
|
||||
required = "/datum/mutation/human/cryokinesis; /datum/mutation/human/fire_breath"
|
||||
result = /datum/mutation/human/cryokinesis/pyrokinesis
|
||||
|
||||
/datum/generecipe/thermal_adaptation
|
||||
required = "/datum/mutation/human/adaptation/cold; /datum/mutation/human/adaptation/heat"
|
||||
result = /datum/mutation/human/adaptation/thermal
|
||||
|
||||
/datum/generecipe/antiglow
|
||||
required = "/datum/mutation/human/glow; /datum/mutation/human/void"
|
||||
result = /datum/mutation/human/glow/anti
|
||||
@@ -36,3 +48,7 @@
|
||||
/datum/generecipe/martyrdom
|
||||
required = "/datum/mutation/human/strong; /datum/mutation/human/stimmed"
|
||||
result = /datum/mutation/human/martyrdom
|
||||
|
||||
/datum/generecipe/heckacious
|
||||
required = "/datum/mutation/human/wacky; /datum/mutation/human/trichromatic"
|
||||
result = /datum/mutation/human/heckacious
|
||||
|
||||
@@ -96,6 +96,8 @@
|
||||
var/energy_coeff = -1
|
||||
/// List of strings of valid chromosomes this mutation can accept.
|
||||
var/list/valid_chrom_list = list()
|
||||
/// List of traits that are added or removed by the mutation with GENETIC_TRAIT source.
|
||||
var/list/mutation_traits
|
||||
|
||||
/datum/mutation/human/New(class = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||
. = ..()
|
||||
@@ -141,6 +143,8 @@
|
||||
owner.overlays_standing[layer_used] = mut_overlay
|
||||
owner.apply_overlay(layer_used)
|
||||
grant_power() //we do checks here so nothing about hulk getting magic
|
||||
if(mutation_traits)
|
||||
owner.add_traits(mutation_traits, GENETIC_MUTATION)
|
||||
if(!modified)
|
||||
addtimer(CALLBACK(src, PROC_REF(modify), 0.5 SECONDS)) //gonna want children calling ..() to run first
|
||||
|
||||
@@ -165,6 +169,9 @@
|
||||
owner.overlays_standing[layer_used] = mut_overlay
|
||||
owner.apply_overlay(layer_used)
|
||||
|
||||
if(mutation_traits)
|
||||
owner.remove_traits(mutation_traits, GENETIC_MUTATION)
|
||||
|
||||
/mob/living/carbon/proc/update_mutations_overlay()
|
||||
return
|
||||
|
||||
|
||||
49
code/datums/mutations/active.dm
Normal file
@@ -0,0 +1,49 @@
|
||||
/datum/mutation/human/adrenaline_rush
|
||||
name = "Adrenaline Rush"
|
||||
desc = "Allows the host to trigger their body's adrenaline response at will."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = span_notice("You feel pumped up!")
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
power_path = /datum/action/cooldown/adrenaline
|
||||
|
||||
energy_coeff = 1
|
||||
synchronizer_coeff = 1
|
||||
power_coeff = 1
|
||||
|
||||
/datum/mutation/human/adrenaline_rush/modify()
|
||||
. = ..()
|
||||
var/datum/action/cooldown/adrenaline/to_modify = .
|
||||
if(!istype(to_modify)) // null or invalid
|
||||
return
|
||||
|
||||
to_modify.adrenaline_amount = 10 * GET_MUTATION_POWER(src)
|
||||
to_modify.comedown_amount = 7 / GET_MUTATION_SYNCHRONIZER(src)
|
||||
|
||||
/datum/action/cooldown/adrenaline
|
||||
name = "Adrenaline!"
|
||||
desc = "Energize yourself, pushing your body to its limits!"
|
||||
button_icon = 'icons/mob/actions/actions_genetic.dmi'
|
||||
button_icon_state = "adrenaline"
|
||||
|
||||
cooldown_time = 2 MINUTES
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
/// How many units of each positive reagent injected during adrenaline.
|
||||
var/adrenaline_amount = 10
|
||||
/// How many units of each negative reagent injected after comedown.
|
||||
var/comedown_amount = 7
|
||||
|
||||
|
||||
/datum/action/cooldown/adrenaline/Activate(mob/living/carbon/cast_on)
|
||||
. = ..()
|
||||
to_chat(cast_on, span_userdanger("You feel pumped up! It's time to GO!"))
|
||||
cast_on.reagents.add_reagent(/datum/reagent/drug/pumpup, adrenaline_amount)
|
||||
cast_on.reagents.add_reagent(/datum/reagent/medicine/synaptizine, adrenaline_amount)
|
||||
cast_on.reagents.add_reagent(/datum/reagent/determination, adrenaline_amount)
|
||||
addtimer(CALLBACK(src, PROC_REF(get_tired), cast_on), 25 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE)
|
||||
return TRUE
|
||||
|
||||
/datum/action/cooldown/adrenaline/proc/get_tired(mob/living/carbon/cast_on)
|
||||
to_chat(cast_on, span_danger("Your adrenaline rush makes way for a bout of nausea and a deep feeling of exhaustion in your muscles."))
|
||||
cast_on.reagents.add_reagent(/datum/reagent/peaceborg/tire, comedown_amount)
|
||||
cast_on.reagents.add_reagent(/datum/reagent/peaceborg/confuse, comedown_amount)
|
||||
cast_on.set_dizzy_if_lower(10 SECONDS)
|
||||
@@ -1,53 +1,58 @@
|
||||
/datum/mutation/human/temperature_adaptation
|
||||
name = "Temperature Adaptation"
|
||||
/datum/mutation/human/adaptation
|
||||
name = "Adaptation"
|
||||
desc = "A strange mutation that renders the host immune to damage from extreme temperatures. Does not protect from vacuums."
|
||||
quality = POSITIVE
|
||||
difficulty = 16
|
||||
text_gain_indication = "<span class='notice'>Your body feels warm!</span>"
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
conflicts = list(/datum/mutation/human/pressure_adaptation)
|
||||
text_gain_indication = span_notice("Your body feels normal!")
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
locked = TRUE // fake parent
|
||||
conflicts = list(/datum/mutation/human/adaptation)
|
||||
mutation_traits = list(TRAIT_WADDLING)
|
||||
/// Icon used for the adaptation overlay
|
||||
var/adapt_icon = "meow"
|
||||
|
||||
/datum/mutation/human/temperature_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||
/datum/mutation/human/adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||
..()
|
||||
conflicts = typesof(src)
|
||||
if(!(type in visual_indicators))
|
||||
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "fire", -MUTATIONS_LAYER))
|
||||
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', adapt_icon, -MUTATIONS_LAYER))
|
||||
|
||||
/datum/mutation/human/temperature_adaptation/get_visual_indicator()
|
||||
/datum/mutation/human/adaptation/get_visual_indicator()
|
||||
return visual_indicators[type][1]
|
||||
|
||||
/datum/mutation/human/temperature_adaptation/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.add_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION)
|
||||
/datum/mutation/human/adaptation/cold
|
||||
name = "Cold Adaptation"
|
||||
desc = "A strange mutation that renders the host immune to damage from low temperature environments. It also prevents the host from slipping on ice."
|
||||
text_gain_indication = span_notice("Your body feels refreshingly cold.")
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
mutation_traits = list(TRAIT_RESISTCOLD, TRAIT_NO_SLIP_ICE)
|
||||
adapt_icon = "cold"
|
||||
locked = FALSE
|
||||
|
||||
/datum/mutation/human/temperature_adaptation/on_losing(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.remove_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION)
|
||||
/datum/mutation/human/adaptation/heat
|
||||
name = "Heat Adaptation"
|
||||
desc = "A strange mutation that renders the host immune to damage from high temperature, including being set alight, though the flame itself still burns clothing. It also seems to make the host resist ash storms."
|
||||
text_gain_indication = span_notice("Your body feels invigoratingly warm.")
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
mutation_traits = list(TRAIT_RESISTHEAT, TRAIT_ASHSTORM_IMMUNE)
|
||||
adapt_icon = "fire"
|
||||
locked = FALSE
|
||||
|
||||
/datum/mutation/human/pressure_adaptation
|
||||
/datum/mutation/human/adaptation/thermal
|
||||
name = "Thermal Adaptation"
|
||||
desc = "A strange mutation that renders the host immune to damage from both low and high temperature environments. Does not protect from high or low pressure environments."
|
||||
difficulty = 32
|
||||
text_gain_indication = span_notice("Your body feels pleasantly room temperature.")
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
mutation_traits = list(TRAIT_RESISTHEAT, TRAIT_RESISTCOLD)
|
||||
adapt_icon = "thermal"
|
||||
locked = TRUE // recipe
|
||||
|
||||
/datum/mutation/human/adaptation/pressure
|
||||
name = "Pressure Adaptation"
|
||||
desc = "A strange mutation that renders the host immune to damage from both low and high pressure environments. Does not protect from temperature, including the cold of space."
|
||||
quality = POSITIVE
|
||||
difficulty = 16
|
||||
text_gain_indication = "<span class='notice'>Your body feels numb!</span>"
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
conflicts = list(/datum/mutation/human/temperature_adaptation)
|
||||
|
||||
/datum/mutation/human/pressure_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||
..()
|
||||
if(!(type in visual_indicators))
|
||||
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "pressure", -MUTATIONS_LAYER))
|
||||
|
||||
/datum/mutation/human/pressure_adaptation/get_visual_indicator()
|
||||
return visual_indicators[type][1]
|
||||
|
||||
/datum/mutation/human/pressure_adaptation/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.add_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), GENETIC_MUTATION)
|
||||
|
||||
/datum/mutation/human/pressure_adaptation/on_losing(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.remove_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), GENETIC_MUTATION)
|
||||
text_gain_indication = span_notice("Your body feels impressively pressurized.")
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
adapt_icon = "pressure"
|
||||
mutation_traits = list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE)
|
||||
locked = FALSE
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name = "Antenna"
|
||||
desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>You feel an antenna sprout from your forehead.</span>"
|
||||
text_lose_indication = "<span class='notice'>Your antenna shrinks back down.</span>"
|
||||
text_gain_indication = span_notice("You feel an antenna sprout from your forehead.")
|
||||
text_lose_indication = span_notice("Your antenna shrinks back down.")
|
||||
instability = POSITIVE_INSTABILITY_MINOR
|
||||
difficulty = 8
|
||||
var/datum/weakref/radio_weakref
|
||||
@@ -44,8 +44,8 @@
|
||||
name = "Mind Reader"
|
||||
desc = "The affected person can look into the recent memories of others."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>You hear distant voices at the corners of your mind.</span>"
|
||||
text_lose_indication = "<span class='notice'>The distant voices fade.</span>"
|
||||
text_gain_indication = span_notice("You hear distant voices at the corners of your mind.")
|
||||
text_lose_indication = span_notice("The distant voices fade.")
|
||||
power_path = /datum/action/cooldown/spell/pointed/mindread
|
||||
instability = POSITIVE_INSTABILITY_MINOR
|
||||
difficulty = 8
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
desc = "A genetic defect that sporadically causes seizures."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You get a headache.</span>"
|
||||
text_gain_indication = span_danger("You get a headache.")
|
||||
synchronizer_coeff = 1
|
||||
power_coeff = 1
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
desc = "Strange mutation that causes the holder to randomly mutate."
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You feel strange.</span>"
|
||||
text_gain_indication = span_danger("You feel strange.")
|
||||
locked = TRUE
|
||||
|
||||
/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
|
||||
@@ -83,7 +83,7 @@
|
||||
desc = "A chronic cough."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You start coughing.</span>"
|
||||
text_gain_indication = span_danger("You start coughing.")
|
||||
synchronizer_coeff = 1
|
||||
power_coeff = 1
|
||||
|
||||
@@ -101,8 +101,8 @@
|
||||
desc = "Subject is easily terrified, and may suffer from hallucinations."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You feel screams echo through your mind...</span>"
|
||||
text_lose_indication = "<span class='notice'>The screaming in your mind fades.</span>"
|
||||
text_gain_indication = span_danger("You feel screams echo through your mind...")
|
||||
text_lose_indication = span_notice("The screaming in your mind fades.")
|
||||
|
||||
/datum/mutation/human/paranoia/on_life(seconds_per_tick, times_fired)
|
||||
if(SPT_PROB(2.5, seconds_per_tick) && owner.stat == CONSCIOUS)
|
||||
@@ -198,7 +198,7 @@
|
||||
desc = "A genome that inhibits certain brain functions, causing the holder to appear clumsy. Honk!"
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You feel lightheaded.</span>"
|
||||
text_gain_indication = span_danger("You feel lightheaded.")
|
||||
|
||||
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -217,7 +217,7 @@
|
||||
desc = "A chronic twitch that forces the user to scream bad words." //definitely needs rewriting
|
||||
quality = NEGATIVE
|
||||
instability = 0
|
||||
text_gain_indication = "<span class='danger'>You twitch.</span>"
|
||||
text_gain_indication = span_danger("You twitch.")
|
||||
synchronizer_coeff = 1
|
||||
|
||||
/datum/mutation/human/tourettes/on_life(seconds_per_tick, times_fired)
|
||||
@@ -241,7 +241,7 @@
|
||||
desc = "The holder of this genome is completely deaf."
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You can't seem to hear anything.</span>"
|
||||
text_gain_indication = span_danger("You can't seem to hear anything.")
|
||||
|
||||
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -286,7 +286,7 @@
|
||||
name = "Glowy"
|
||||
desc = "You permanently emit a light with a random color and intensity."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>Your skin begins to glow softly.</span>"
|
||||
text_gain_indication = span_notice("Your skin begins to glow softly.")
|
||||
instability = POSITIVE_INSTABILITY_MINI
|
||||
power_coeff = 1
|
||||
conflicts = list(/datum/mutation/human/glow/anti)
|
||||
@@ -323,7 +323,7 @@
|
||||
/datum/mutation/human/glow/anti
|
||||
name = "Anti-Glow"
|
||||
desc = "Your skin seems to attract and absorb nearby light creating 'darkness' around you."
|
||||
text_gain_indication = "<span class='notice'>The light around you seems to disappear.</span>"
|
||||
text_gain_indication = span_notice("The light around you seems to disappear.")
|
||||
conflicts = list(/datum/mutation/human/glow)
|
||||
instability = POSITIVE_INSTABILITY_MINOR
|
||||
locked = TRUE
|
||||
@@ -336,7 +336,7 @@
|
||||
name = "Strength"
|
||||
desc = "The user's muscles slightly expand. Commonly seen in top-ranking boxers."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>You feel strong.</span>"
|
||||
text_gain_indication = span_notice("You feel strong.")
|
||||
instability = POSITIVE_INSTABILITY_MINI
|
||||
difficulty = 16
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
desc = "The user's chemical balance is more robust. This mutation is known to slightly improve workout efficiency."
|
||||
quality = POSITIVE
|
||||
instability = POSITIVE_INSTABILITY_MINI
|
||||
text_gain_indication = "<span class='notice'>You feel stimmed.</span>"
|
||||
text_gain_indication = span_notice("You feel stimmed.")
|
||||
difficulty = 16
|
||||
|
||||
/datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner)
|
||||
@@ -377,8 +377,8 @@
|
||||
name = "Insulated"
|
||||
desc = "The affected person does not conduct electricity."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>Your fingertips go numb.</span>"
|
||||
text_lose_indication = "<span class='notice'>Your fingertips regain feeling.</span>"
|
||||
text_gain_indication = span_notice("Your fingertips go numb.")
|
||||
text_lose_indication = span_notice("Your fingertips regain feeling.")
|
||||
difficulty = 16
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
|
||||
@@ -396,8 +396,9 @@
|
||||
name = "Fiery Sweat"
|
||||
desc = "The user's skin will randomly combust, but is generally a lot more resilient to burning."
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='warning'>You feel hot.</span>"
|
||||
text_lose_indication = "<span class='notice'>You feel a lot cooler.</span>"
|
||||
text_gain_indication = span_warning("You feel hot.")
|
||||
text_lose_indication = span_notice("You feel a lot cooler.")
|
||||
conflicts = list(/datum/mutation/human/adaptation/heat)
|
||||
difficulty = 14
|
||||
synchronizer_coeff = 1
|
||||
power_coeff = 1
|
||||
@@ -421,8 +422,8 @@
|
||||
name = "Spatial Instability"
|
||||
desc = "The victim of the mutation has a very weak link to spatial reality, and may be displaced. Often causes extreme nausea."
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='warning'>The space around you twists sickeningly.</span>"
|
||||
text_lose_indication = "<span class='notice'>The space around you settles back to normal.</span>"
|
||||
text_gain_indication = span_warning("The space around you twists sickeningly.")
|
||||
text_lose_indication = span_notice("The space around you settles back to normal.")
|
||||
difficulty = 18//high so it's hard to unlock and abuse
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
synchronizer_coeff = 1
|
||||
@@ -452,8 +453,8 @@
|
||||
desc = "Subject has acidic chemicals building up underneath the skin. This is often lethal."
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='userdanger'>A horrible burning sensation envelops you as your flesh turns to acid!</span>"
|
||||
text_lose_indication = "<span class='notice'>A feeling of relief fills you as your flesh goes back to normal.</span>"
|
||||
text_gain_indication = span_userdanger("A horrible burning sensation envelops you as your flesh turns to acid!")
|
||||
text_lose_indication = span_notice("A feeling of relief fills you as your flesh goes back to normal.")
|
||||
difficulty = 18//high so it's hard to unlock and use on others
|
||||
/// The cooldown for the warning message
|
||||
COOLDOWN_DECLARE(msgcooldown)
|
||||
@@ -473,8 +474,8 @@
|
||||
desc = "Subject suffers from muscle spasms."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='warning'>You flinch.</span>"
|
||||
text_lose_indication = "<span class='notice'>Your flinching subsides.</span>"
|
||||
text_gain_indication = span_warning("You flinch.")
|
||||
text_lose_indication = span_notice("Your flinching subsides.")
|
||||
difficulty = 16
|
||||
|
||||
/datum/mutation/human/spastic/on_acquiring()
|
||||
@@ -492,8 +493,8 @@
|
||||
desc = "A mutation that replaces the right foot with another left foot. Symptoms include kissing the floor when taking a step."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='warning'>Your right foot feels... left.</span>"
|
||||
text_lose_indication = "<span class='notice'>Your right foot feels alright.</span>"
|
||||
text_gain_indication = span_warning("Your right foot feels... left.")
|
||||
text_lose_indication = span_notice("Your right foot feels alright.")
|
||||
difficulty = 16
|
||||
|
||||
/datum/mutation/human/extrastun/on_acquiring()
|
||||
@@ -525,8 +526,8 @@
|
||||
instability = NEGATIVE_STABILITY_MAJOR // free stability >:)
|
||||
locked = TRUE
|
||||
quality = POSITIVE //not that cloning will be an option a lot but generally lets keep this around i guess?
|
||||
text_gain_indication = "<span class='warning'>You get an intense feeling of heartburn.</span>"
|
||||
text_lose_indication = "<span class='notice'>Your internal organs feel at ease.</span>"
|
||||
text_gain_indication = span_warning("You get an intense feeling of heartburn.")
|
||||
text_lose_indication = span_notice("Your internal organs feel at ease.")
|
||||
|
||||
/datum/mutation/human/martyrdom/on_acquiring()
|
||||
. = ..()
|
||||
@@ -573,7 +574,7 @@
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
difficulty = 12 //pretty good for traitors
|
||||
quality = NEGATIVE //holy shit no eyes or tongue or ears
|
||||
text_gain_indication = "<span class='warning'>Something feels off.</span>"
|
||||
text_gain_indication = span_warning("Something feels off.")
|
||||
|
||||
/datum/mutation/human/headless/on_acquiring()
|
||||
. = ..()
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
desc = "A genome that causes the holder's skin to become transparent over time."
|
||||
quality = POSITIVE
|
||||
difficulty = 16
|
||||
text_gain_indication = "<span class='notice'>You feel one with your surroundings.</span>"
|
||||
text_lose_indication = "<span class='notice'>You feel oddly exposed.</span>"
|
||||
text_gain_indication = span_notice("You feel one with your surroundings.")
|
||||
text_lose_indication = span_notice("You feel oddly exposed.")
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
power_coeff = 1
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Geladikinesis"
|
||||
desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>Your hand feels cold.</span>"
|
||||
text_gain_indication = span_notice("Your hand feels cold.")
|
||||
instability = POSITIVE_INSTABILITY_MINOR
|
||||
difficulty = 10
|
||||
synchronizer_coeff = 1
|
||||
@@ -24,7 +24,7 @@
|
||||
name = "Cryokinesis"
|
||||
desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will."
|
||||
quality = POSITIVE //upsides and downsides
|
||||
text_gain_indication = "<span class='notice'>Your hand feels cold.</span>"
|
||||
text_gain_indication = span_notice("Your hand feels cold.")
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
difficulty = 12
|
||||
synchronizer_coeff = 1
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
quality = POSITIVE
|
||||
difficulty = 12
|
||||
locked = TRUE
|
||||
text_gain_indication = "<span class='notice'>Your throat is burning!</span>"
|
||||
text_lose_indication = "<span class='notice'>Your throat is cooling down.</span>"
|
||||
text_gain_indication = span_notice("Your throat is burning!")
|
||||
text_lose_indication = span_notice("Your throat is cooling down.")
|
||||
power_path = /datum/action/cooldown/spell/cone/staggered/fire_breath
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
energy_coeff = 1
|
||||
|
||||
31
code/datums/mutations/hot.dm
Normal file
@@ -0,0 +1,31 @@
|
||||
/datum/mutation/human/geladikinesis/ash
|
||||
name = "Cindikinesis"
|
||||
desc = "Allows the user to concentrate nearby heat into a pile of ash. Wow. Very interesting."
|
||||
text_gain_indication = span_notice("Your hand feels warm.")
|
||||
locked = TRUE
|
||||
power_path = /datum/action/cooldown/spell/conjure_item/snow/ash
|
||||
|
||||
/datum/action/cooldown/spell/conjure_item/snow/ash
|
||||
name = "Create Ash"
|
||||
desc = "Concentrates pyrokinetic forces to create ash, useful for basically nothing."
|
||||
button_icon_state = "ash"
|
||||
|
||||
item_type = /obj/effect/decal/cleanable/ash
|
||||
|
||||
/datum/mutation/human/cryokinesis/pyrokinesis
|
||||
name = "Pyrokinesis"
|
||||
desc = "Draws positive energy from the surroundings to heat surrounding temperatures at subject's will."
|
||||
text_gain_indication = span_notice("Your hand feels hot!")
|
||||
locked = TRUE
|
||||
power_path = /datum/action/cooldown/spell/pointed/projectile/cryo/pyro
|
||||
|
||||
/datum/action/cooldown/spell/pointed/projectile/cryo/pyro
|
||||
name = "Pyrobeam"
|
||||
desc = "This power fires a heated bolt at a target."
|
||||
button_icon_state = "firebeam"
|
||||
base_icon_state = "firebeam"
|
||||
cooldown_time = 30 SECONDS
|
||||
|
||||
active_msg = "You focus your pyrokinesis!"
|
||||
deactive_msg = "You cool down."
|
||||
projectile_type = /obj/projectile/temp/pyro
|
||||
@@ -5,14 +5,14 @@
|
||||
quality = POSITIVE
|
||||
locked = TRUE
|
||||
difficulty = 16
|
||||
text_gain_indication = "<span class='notice'>Your muscles hurt!</span>"
|
||||
text_gain_indication = span_notice("Your muscles hurt!")
|
||||
species_allowed = list(SPECIES_HUMAN) //no skeleton/lizard hulk
|
||||
health_req = 25
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
var/scream_delay = 50
|
||||
var/last_scream = 0
|
||||
/// List of traits to add/remove when someone gets this mutation.
|
||||
var/list/mutation_traits = list(
|
||||
mutation_traits = list(
|
||||
TRAIT_CHUNKYFINGERS,
|
||||
TRAIT_HULK,
|
||||
TRAIT_IGNOREDAMAGESLOWDOWN,
|
||||
@@ -24,7 +24,6 @@
|
||||
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.add_traits(mutation_traits, GENETIC_MUTATION)
|
||||
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
|
||||
part.variable_color = COLOR_DARK_LIME
|
||||
owner.update_body_parts()
|
||||
@@ -87,7 +86,6 @@
|
||||
/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.remove_traits(mutation_traits, GENETIC_MUTATION)
|
||||
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
|
||||
part.variable_color = null
|
||||
owner.update_body_parts()
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
desc = "Your sense of smell is comparable to that of a canine."
|
||||
quality = POSITIVE
|
||||
difficulty = 12
|
||||
text_gain_indication = "<span class='notice'>Smells begin to make more sense...</span>"
|
||||
text_lose_indication = "<span class='notice'>Your sense of smell goes back to normal.</span>"
|
||||
text_gain_indication = span_notice("Smells begin to make more sense...")
|
||||
text_lose_indication = span_notice("Your sense of smell goes back to normal.")
|
||||
power_path = /datum/action/cooldown/spell/olfaction
|
||||
instability = POSITIVE_INSTABILITY_MODERATE
|
||||
synchronizer_coeff = 1
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
desc = "Causes the subject to feel just a little bit smarter. Most effective in specimens with low levels of intelligence."
|
||||
quality = POSITIVE
|
||||
instability = POSITIVE_INSTABILITY_MODERATE // literally makes you on par with station equipment
|
||||
text_gain_indication = "<span class='danger'>You feel a little bit smarter.</span>"
|
||||
text_lose_indication = "<span class='danger'>Your mind feels a little bit foggy.</span>"
|
||||
text_gain_indication = span_danger("You feel a little bit smarter.")
|
||||
text_lose_indication = span_danger("Your mind feels a little bit foggy.")
|
||||
|
||||
/datum/mutation/human/clever/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Radioactivity"
|
||||
desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings."
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='warning'>You can feel it in your bones!</span>"
|
||||
text_gain_indication = span_warning("You can feel it in your bones!")
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
difficulty = 8
|
||||
power_coeff = 1
|
||||
|
||||
112
code/datums/mutations/reach.dm
Normal file
@@ -0,0 +1,112 @@
|
||||
///Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head.
|
||||
/datum/mutation/human/telekinesis
|
||||
name = "Telekinesis"
|
||||
desc = "A strange mutation that allows the holder to interact with objects through thought."
|
||||
quality = POSITIVE
|
||||
difficulty = 18
|
||||
text_gain_indication = span_notice("You feel smarter!")
|
||||
limb_req = BODY_ZONE_HEAD
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
///Typecache of atoms that TK shouldn't interact with
|
||||
var/static/list/blacklisted_atoms = typecacheof(list(/atom/movable/screen))
|
||||
|
||||
/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||
..()
|
||||
if(!(type in visual_indicators))
|
||||
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER))
|
||||
|
||||
/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/homan)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
RegisterSignal(homan, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack))
|
||||
|
||||
/datum/mutation/human/telekinesis/on_losing(mob/living/carbon/human/homan)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
UnregisterSignal(homan, COMSIG_MOB_ATTACK_RANGED)
|
||||
|
||||
/datum/mutation/human/telekinesis/get_visual_indicator()
|
||||
return visual_indicators[type][1]
|
||||
|
||||
///Triggers on COMSIG_MOB_ATTACK_RANGED. Usually handles stuff like picking up items at range.
|
||||
/datum/mutation/human/telekinesis/proc/on_ranged_attack(mob/source, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
if(is_type_in_typecache(target, blacklisted_atoms))
|
||||
return
|
||||
if(!tkMaxRangeCheck(source, target) || source.z != target.z)
|
||||
return
|
||||
return target.attack_tk(source)
|
||||
|
||||
/datum/mutation/human/elastic_arms
|
||||
name = "Elastic Arms"
|
||||
desc = "Subject's arms have become elastic, allowing them to stretch up to a meter away. However, this elasticity makes it difficult to wear gloves, handle complex tasks, or grab large objects."
|
||||
quality = POSITIVE
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
text_gain_indication = span_warning("You feel armstrong!")
|
||||
text_lose_indication = span_warning("Your arms stop feeling so saggy all the time.")
|
||||
difficulty = 32
|
||||
mutation_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_NO_TWOHANDING)
|
||||
|
||||
/datum/mutation/human/elastic_arms/on_acquiring(mob/living/carbon/human/homan)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
RegisterSignal(homan, COMSIG_ATOM_CANREACH, PROC_REF(on_canreach))
|
||||
RegisterSignal(homan, COMSIG_LIVING_TRY_PUT_IN_HAND, PROC_REF(on_owner_equipping_item))
|
||||
RegisterSignal(homan, COMSIG_LIVING_TRY_PULL, PROC_REF(on_owner_try_pull))
|
||||
|
||||
/datum/mutation/human/elastic_arms/on_losing(mob/living/carbon/human/homan)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
UnregisterSignal(homan, list(COMSIG_ATOM_CANREACH, COMSIG_LIVING_TRY_PUT_IN_HAND, COMSIG_LIVING_TRY_PULL))
|
||||
|
||||
/// signal sent when prompting if an item can be equipped
|
||||
/datum/mutation/human/elastic_arms/proc/on_owner_equipping_item(mob/living/carbon/human/owner, obj/item/pick_item)
|
||||
SIGNAL_HANDLER
|
||||
if(pick_item.w_class > WEIGHT_CLASS_BULKY) // cant decide if i should limit to huge or bulky.
|
||||
pick_item.balloon_alert(owner, "arms too floppy to wield!")
|
||||
return COMPONENT_LIVING_CANT_PUT_IN_HAND
|
||||
|
||||
/// signal sent when owner tries to pull
|
||||
/datum/mutation/human/elastic_arms/proc/on_owner_try_pull(mob/living/carbon/owner, atom/movable/target, force)
|
||||
SIGNAL_HANDLER
|
||||
if(isliving(target))
|
||||
var/mob/living/living_target = target
|
||||
if(living_target.mob_size > MOB_SIZE_HUMAN)
|
||||
living_target.balloon_alert(owner, "arms too floppy to pull this!")
|
||||
return COMSIG_LIVING_CANCEL_PULL
|
||||
if(isitem(target))
|
||||
var/obj/item/item_target = target
|
||||
if(item_target.w_class > WEIGHT_CLASS_BULKY)
|
||||
item_target.balloon_alert(owner, "arms too floppy to pull this!")
|
||||
return COMSIG_LIVING_CANCEL_PULL
|
||||
|
||||
// probably buggy. let's enlist our players as bug testers
|
||||
/datum/mutation/human/elastic_arms/proc/on_canreach(mob/source, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/distance = get_dist(target, source)
|
||||
|
||||
// We only care about handling the reach distance, anything closer or further is handled normally.
|
||||
// Also, no z-level shenanigans. Yet.
|
||||
if((distance != 2) || source.z != target.z)
|
||||
return
|
||||
|
||||
var/direction = get_dir(source, target)
|
||||
if(!direction)
|
||||
return
|
||||
var/turf/open/adjacent_turf = get_step(source, direction)
|
||||
|
||||
// Make sure it's an open turf we're trying to pass over.
|
||||
if(!istype(adjacent_turf))
|
||||
return
|
||||
|
||||
// Check if there's something dense inbetween, then allow it.
|
||||
for(var/atom/thing in adjacent_turf)
|
||||
if(thing.density)
|
||||
return
|
||||
|
||||
return COMPONENT_ALLOW_REACH
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "The holder of this mutation has poor eyesight."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You can't see very well.</span>"
|
||||
text_gain_indication = span_danger("You can't see very well.")
|
||||
|
||||
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -22,7 +22,7 @@
|
||||
desc = "Renders the subject completely blind."
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You can't seem to see anything.</span>"
|
||||
text_gain_indication = span_danger("You can't seem to see anything.")
|
||||
|
||||
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -40,8 +40,8 @@
|
||||
desc = "The user of this genome can visually perceive the unique human thermal signature."
|
||||
quality = POSITIVE
|
||||
difficulty = 18
|
||||
text_gain_indication = "<span class='notice'>You can see the heat rising off of your skin...</span>"
|
||||
text_lose_indication = "<span class='notice'>You can no longer see the heat rising off of your skin...</span>"
|
||||
text_gain_indication = span_notice("You can see the heat rising off of your skin...")
|
||||
text_lose_indication = span_notice("You can no longer see the heat rising off of your skin...")
|
||||
instability = POSITIVE_INSTABILITY_MAJOR // thermals aren't station equipment
|
||||
synchronizer_coeff = 1
|
||||
power_coeff = 1
|
||||
@@ -111,7 +111,7 @@
|
||||
/datum/mutation/human/xray
|
||||
name = "X Ray Vision"
|
||||
desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb
|
||||
text_gain_indication = "<span class='notice'>The walls suddenly disappear!</span>"
|
||||
text_gain_indication = span_notice("The walls suddenly disappear!")
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
locked = TRUE
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
quality = POSITIVE
|
||||
locked = TRUE
|
||||
difficulty = 16
|
||||
text_gain_indication = "<span class='notice'>You feel pressure building up behind your eyes.</span>"
|
||||
text_gain_indication = span_notice("You feel pressure building up behind your eyes.")
|
||||
layer_used = FRONT_MUTATIONS_LAYER
|
||||
limb_req = BODY_ZONE_HEAD
|
||||
|
||||
@@ -186,8 +186,8 @@
|
||||
desc = "Causes a severe case of Aphasia that prevents reading or writing."
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You feel unable to read or write.</span>"
|
||||
text_lose_indication = "<span class='danger'>You feel able to read and write again.</span>"
|
||||
text_gain_indication = span_danger("You feel unable to read or write.")
|
||||
text_lose_indication = span_danger("You feel able to read and write again.")
|
||||
|
||||
/datum/mutation/human/illiterate/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -198,3 +198,4 @@
|
||||
if(..())
|
||||
return
|
||||
REMOVE_TRAIT(owner, TRAIT_ILLITERATE, GENETIC_MUTATION)
|
||||
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
//These are all minor mutations that affect your speech somehow.
|
||||
//Individual ones aren't commented since their functions should be evident at a glance
|
||||
// no they arent bro
|
||||
|
||||
#define ALPHABET list("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
|
||||
#define VOWELS list("a", "e", "i", "o", "u")
|
||||
#define CONSONANTS (ALPHABET - VOWELS)
|
||||
|
||||
/datum/mutation/human/nervousness
|
||||
name = "Nervousness"
|
||||
desc = "Causes the holder to stutter."
|
||||
instability = NEGATIVE_STABILITY_MINI
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You feel nervous.</span>"
|
||||
text_gain_indication = span_danger("You feel nervous.")
|
||||
|
||||
/datum/mutation/human/nervousness/on_life(seconds_per_tick, times_fired)
|
||||
if(SPT_PROB(5, seconds_per_tick))
|
||||
@@ -17,8 +22,8 @@
|
||||
desc = "You are not a clown. You are the entire circus."
|
||||
instability = NEGATIVE_STABILITY_MINI
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='sans'><span class='infoplain'>You feel an off sensation in your voicebox.</span></span>"
|
||||
text_lose_indication = "<span class='notice'>The off sensation passes.</span>"
|
||||
text_gain_indication = span_sans(span_notice("You feel an off sensation in your voicebox."))
|
||||
text_lose_indication = span_notice("The off sensation passes.")
|
||||
|
||||
/datum/mutation/human/wacky/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -35,13 +40,185 @@
|
||||
|
||||
speech_args[SPEECH_SPANS] |= SPAN_SANS
|
||||
|
||||
// Lower rust floor probability
|
||||
// Make it only happen on open turf
|
||||
// Add early return to wall hitting
|
||||
// Fix throw at on cult sac
|
||||
// Reduce tochat prob on rust floor
|
||||
// add trait rusty to windows
|
||||
// aim assist on rc doesnt work
|
||||
// also in general
|
||||
// give master seek to rusted harvester
|
||||
|
||||
/datum/mutation/human/heckacious
|
||||
name = "heckacious larincks"
|
||||
desc = "duge what is WISH your words man..........."
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = span_sans(span_red("aw SHIT man. your throat feels like FUCKASS."))
|
||||
text_lose_indication = span_notice("The demonic entity possessing your larynx has finally released its grasp.")
|
||||
locked = TRUE
|
||||
conflicts = list(/datum/mutation/human/trichromatic) // they both modify with the same spans. also would be way too annoying
|
||||
|
||||
/datum/mutation/human/heckacious/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
RegisterSignal(owner, COMSIG_LIVING_TREAT_MESSAGE, PROC_REF(handle_caps))
|
||||
RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
|
||||
|
||||
/datum/mutation/human/heckacious/on_losing(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
UnregisterSignal(owner, list(COMSIG_LIVING_TREAT_MESSAGE, COMSIG_MOB_SAY))
|
||||
|
||||
/datum/mutation/human/heckacious/proc/handle_caps(atom/movable/source, list/message_args)
|
||||
SIGNAL_HANDLER
|
||||
message_args[TREAT_CAPITALIZE_MESSAGE] = FALSE
|
||||
|
||||
/datum/mutation/human/heckacious/proc/handle_speech(datum/source, list/speech_args)
|
||||
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(!message)
|
||||
return
|
||||
// Split for swapping purposes
|
||||
message = " [message] "
|
||||
|
||||
// Splitting up each word in the text to manually apply our intended changes
|
||||
var/list/message_words = splittext(message, " ")
|
||||
// What we use in the end
|
||||
var/list/edited_message_words
|
||||
|
||||
for(var/editing_word in message_words)
|
||||
if(editing_word == " " || editing_word == "" )
|
||||
continue
|
||||
// Used to replace the original later
|
||||
var/og_word = editing_word
|
||||
// Iterating through each replaceable-string in the .json
|
||||
var/list/static/super_wacky_words = strings("heckacious.json", "heckacious")
|
||||
|
||||
// If the word doesn't get replaced we might do something with it later
|
||||
var/word_edited
|
||||
for(var/key in super_wacky_words)
|
||||
var/value = super_wacky_words[key]
|
||||
// If list, pick one value from said list
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
editing_word = replacetextEx(editing_word, "[uppertext(key)]", "[uppertext(value)]")
|
||||
editing_word = replacetextEx(editing_word, "[capitalize(key)]", "[capitalize(value)]")
|
||||
editing_word = replacetextEx(editing_word, "[key]", "[value]")
|
||||
// Enable if we actually found something to change
|
||||
if(editing_word != og_word)
|
||||
word_edited = TRUE
|
||||
|
||||
// Random caps
|
||||
if(prob(10))
|
||||
editing_word = uppertext(editing_word)
|
||||
// some times....... we add DOTS...
|
||||
if(prob(10))
|
||||
for(var/dotnum in 1 to rand(2, 8))
|
||||
editing_word += "."
|
||||
|
||||
// If no replacement we do it manually
|
||||
if(!word_edited)
|
||||
if(prob(65))
|
||||
editing_word = replacetext(editing_word, pick(VOWELS), pick(VOWELS))
|
||||
// Many more consonants, double it!
|
||||
for(var/i in 1 to rand(1, 2))
|
||||
editing_word = replacetext(editing_word, pick(CONSONANTS), pick(CONSONANTS))
|
||||
// rarely, lettter is DOUBBLED...
|
||||
var/patchword = ""
|
||||
for(var/letter in 1 to length(editing_word))
|
||||
if(prob(92))
|
||||
patchword += editing_word[letter]
|
||||
continue
|
||||
patchword += replacetext(editing_word[letter], "", editing_word[letter] + editing_word[letter])
|
||||
editing_word = patchword
|
||||
|
||||
// Some words are randomly recolored and resized so they get a few of these
|
||||
editing_word = span_class_handler(editing_word)
|
||||
|
||||
LAZYADD(edited_message_words, editing_word)
|
||||
|
||||
var/edited_message = jointext(edited_message_words, " ")
|
||||
|
||||
message = trim(edited_message)
|
||||
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
|
||||
/datum/mutation/human/heckacious/proc/span_class_handler(message, looped = FALSE)
|
||||
// Sadly combining span colors will not combine the colors of the message
|
||||
if(prob(15))
|
||||
switch(rand(1,3))
|
||||
if(1)
|
||||
message = span_red(message)
|
||||
if(2)
|
||||
message = span_blue(message)
|
||||
if(3)
|
||||
message = span_green(message)
|
||||
if(prob(15))
|
||||
switch(rand(1,2))
|
||||
if(1)
|
||||
message = span_big(message)
|
||||
if(2)
|
||||
message = span_small(message)
|
||||
// do it AGAIN
|
||||
if(prob(40))
|
||||
span_class_handler(message, looped = TRUE)
|
||||
return message
|
||||
|
||||
/datum/mutation/human/trichromatic
|
||||
name = "Trichromatic Larynx"
|
||||
desc = "A strange mutation originating from Clown Planet which alters the color of the patient's vocal chords."
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = span_red("You") + span_blue(" feel ") + span_green("Weird.")
|
||||
text_lose_indication = span_notice("Your colors feel normal again.")
|
||||
conflicts = list(/datum/mutation/human/heckacious)
|
||||
|
||||
/datum/mutation/human/trichromatic/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
|
||||
|
||||
/datum/mutation/human/trichromatic/on_losing(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
UnregisterSignal(owner, COMSIG_MOB_SAY)
|
||||
|
||||
/datum/mutation/human/trichromatic/proc/handle_speech(datum/source, list/speech_args)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
|
||||
var/list/message_words = splittext(message, " ")
|
||||
var/list/static/span_combo_list = list("green", "red", "blue")
|
||||
var/words_key = 1
|
||||
for(var/i in message_words)
|
||||
message_words[words_key] = span_class_handler(message_words[words_key])
|
||||
words_key++
|
||||
|
||||
var/edited_message = jointext(message_words, " ")
|
||||
|
||||
message = trim(edited_message)
|
||||
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
|
||||
/datum/mutation/human/trichromatic/proc/span_class_handler(message)
|
||||
// Sadly combining span colors will not combine the colors of the message
|
||||
switch(rand(1,3))
|
||||
if(1)
|
||||
message = span_red(message)
|
||||
if(2)
|
||||
message = span_blue(message)
|
||||
if(3)
|
||||
message = span_green(message)
|
||||
return message
|
||||
|
||||
/datum/mutation/human/mute
|
||||
name = "Mute"
|
||||
desc = "Completely inhibits the vocal section of the brain."
|
||||
instability = NEGATIVE_STABILITY_MAJOR
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You feel unable to express yourself at all.</span>"
|
||||
text_lose_indication = "<span class='danger'>You feel able to speak freely again.</span>"
|
||||
text_gain_indication = span_danger("You feel unable to express yourself at all.")
|
||||
text_lose_indication = span_danger("You feel able to speak freely again.")
|
||||
|
||||
/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -58,8 +235,8 @@
|
||||
desc = "Partially inhibits the vocal center of the brain, severely distorting speech."
|
||||
instability = NEGATIVE_STABILITY_MODERATE
|
||||
quality = NEGATIVE
|
||||
text_gain_indication = "<span class='danger'>You can't seem to form any coherent thoughts!</span>"
|
||||
text_lose_indication = "<span class='danger'>Your mind feels more clear.</span>"
|
||||
text_gain_indication = span_danger("You can't seem to form any coherent thoughts!")
|
||||
text_lose_indication = span_danger("Your mind feels more clear.")
|
||||
|
||||
/datum/mutation/human/unintelligible/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -76,8 +253,8 @@
|
||||
desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037."
|
||||
instability = NEGATIVE_STABILITY_MINI
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='notice'>You feel Swedish, however that works.</span>"
|
||||
text_lose_indication = "<span class='notice'>The feeling of Swedishness passes.</span>"
|
||||
text_gain_indication = span_notice("You feel Swedish, however that works.")
|
||||
text_lose_indication = span_notice("The feeling of Swedishness passes.")
|
||||
|
||||
/datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -108,8 +285,8 @@
|
||||
desc = "Unknown"
|
||||
instability = NEGATIVE_STABILITY_MINI
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='notice'>Ye feel like a reet prat like, innit?</span>"
|
||||
text_lose_indication = "<span class='notice'>You no longer feel like being rude and sassy.</span>"
|
||||
text_gain_indication = span_notice("Ye feel like a reet prat like, innit?")
|
||||
text_lose_indication = span_notice("You no longer feel like being rude and sassy.")
|
||||
|
||||
/datum/mutation/human/chav/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -146,9 +323,8 @@
|
||||
desc = "A terrifying mutation named after its 'patient-zero'."
|
||||
instability = NEGATIVE_STABILITY_MINI
|
||||
quality = MINOR_NEGATIVE
|
||||
locked = TRUE
|
||||
text_gain_indication = "<span class='notice'>You feel pretty good, honeydoll.</span>"
|
||||
text_lose_indication = "<span class='notice'>You feel a little less conversation would be great.</span>"
|
||||
text_gain_indication = span_notice("You feel pretty good, honeydoll.")
|
||||
text_lose_indication = span_notice("You feel a little less conversation would be great.")
|
||||
|
||||
/datum/mutation/human/elvis/on_life(seconds_per_tick, times_fired)
|
||||
switch(pick(1,2))
|
||||
@@ -194,8 +370,8 @@
|
||||
desc = "A common mutation that severely decreases intelligence."
|
||||
quality = NEGATIVE
|
||||
locked = TRUE
|
||||
text_gain_indication = "<span class='notice'>You feel...totally chill, man!</span>"
|
||||
text_lose_indication = "<span class='notice'>You feel like you have a better sense of time.</span>"
|
||||
text_gain_indication = span_notice("You feel...totally chill, man!")
|
||||
text_lose_indication = span_notice("You feel like you have a better sense of time.")
|
||||
|
||||
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
|
||||
..()
|
||||
@@ -212,8 +388,8 @@
|
||||
desc = "A horrible mutation originating from the distant past, thought to have once been a common gene in all of old world Europe."
|
||||
instability = NEGATIVE_STABILITY_MINI
|
||||
quality = MINOR_NEGATIVE
|
||||
text_gain_indication = "<span class='notice'>You feel like seeking the holy grail!</span>"
|
||||
text_lose_indication = "<span class='notice'>You no longer feel like seeking anything.</span>"
|
||||
text_gain_indication = span_notice("You feel like seeking the holy grail!")
|
||||
text_lose_indication = span_notice("You no longer feel like seeking anything.")
|
||||
|
||||
/datum/mutation/human/medieval/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
@@ -272,3 +448,7 @@
|
||||
var/spoken_message = speech_args[SPEECH_MESSAGE]
|
||||
spoken_message = piglatin_sentence(spoken_message)
|
||||
speech_args[SPEECH_MESSAGE] = spoken_message
|
||||
|
||||
#undef ALPHABET
|
||||
#undef VOWELS
|
||||
#undef CONSONANTS
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
///Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head.
|
||||
/datum/mutation/human/telekinesis
|
||||
name = "Telekinesis"
|
||||
desc = "A strange mutation that allows the holder to interact with objects through thought."
|
||||
quality = POSITIVE
|
||||
difficulty = 18
|
||||
text_gain_indication = "<span class='notice'>You feel smarter!</span>"
|
||||
limb_req = BODY_ZONE_HEAD
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
///Typecache of atoms that TK shouldn't interact with
|
||||
var/static/list/blacklisted_atoms = typecacheof(list(/atom/movable/screen))
|
||||
|
||||
/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||
..()
|
||||
if(!(type in visual_indicators))
|
||||
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER))
|
||||
|
||||
/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
RegisterSignal(H, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack))
|
||||
|
||||
/datum/mutation/human/telekinesis/on_losing(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
UnregisterSignal(H, COMSIG_MOB_ATTACK_RANGED)
|
||||
|
||||
/datum/mutation/human/telekinesis/get_visual_indicator()
|
||||
return visual_indicators[type][1]
|
||||
|
||||
///Triggers on COMSIG_MOB_ATTACK_RANGED. Usually handles stuff like picking up items at range.
|
||||
/datum/mutation/human/telekinesis/proc/on_ranged_attack(mob/source, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
if(is_type_in_typecache(target, blacklisted_atoms))
|
||||
return
|
||||
if(!tkMaxRangeCheck(source, target) || source.z != target.z)
|
||||
return
|
||||
return target.attack_tk(source)
|
||||
@@ -2,8 +2,8 @@
|
||||
name = "Telepathy"
|
||||
desc = "A rare mutation that allows the user to telepathically communicate to others."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>You can hear your own voice echoing in your mind!</span>"
|
||||
text_lose_indication = "<span class='notice'>You don't hear your mind echo anymore.</span>"
|
||||
text_gain_indication = span_notice("You can hear your own voice echoing in your mind!")
|
||||
text_lose_indication = span_notice("You don't hear your mind echo anymore.")
|
||||
difficulty = 12
|
||||
power_path = /datum/action/cooldown/spell/list_target/telepathy
|
||||
instability = POSITIVE_INSTABILITY_MINOR // basically a mediocre PDA messager
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
quality = POSITIVE
|
||||
locked = TRUE
|
||||
difficulty = 16
|
||||
text_gain_indication = "<span class='notice'>You feel power flow through your hands.</span>"
|
||||
text_lose_indication = "<span class='notice'>The energy in your hands subsides.</span>"
|
||||
text_gain_indication = span_notice("You feel power flow through your hands.")
|
||||
text_lose_indication = span_notice("The energy in your hands subsides.")
|
||||
power_path = /datum/action/cooldown/spell/touch/shock
|
||||
instability = POSITIVE_INSTABILITY_MODERATE // bad stun baton
|
||||
energy_coeff = 1
|
||||
@@ -85,3 +85,192 @@
|
||||
icon = 'icons/obj/weapons/hand.dmi'
|
||||
icon_state = "zapper"
|
||||
inhand_icon_state = "zapper"
|
||||
|
||||
/datum/mutation/human/lay_on_hands
|
||||
name = "Mending Touch"
|
||||
desc = "The affected can lay their hands on other people to transfer a small amount of their injuries to themselves."
|
||||
quality = POSITIVE
|
||||
locked = FALSE
|
||||
difficulty = 16
|
||||
text_gain_indication = span_notice("Your hand feels blessed!")
|
||||
text_lose_indication = span_notice("Your hand feels secular once more.")
|
||||
power_path = /datum/action/cooldown/spell/touch/lay_on_hands
|
||||
instability = POSITIVE_INSTABILITY_MAJOR
|
||||
energy_coeff = 1
|
||||
power_coeff = 1
|
||||
synchronizer_coeff = 1
|
||||
|
||||
/datum/mutation/human/lay_on_hands/modify()
|
||||
. = ..()
|
||||
var/datum/action/cooldown/spell/touch/lay_on_hands/to_modify =.
|
||||
|
||||
if(!istype(to_modify)) // null or invalid
|
||||
return
|
||||
|
||||
// More healing if powered up.
|
||||
to_modify.heal_multiplier = GET_MUTATION_POWER(src)
|
||||
// Less pain if synchronized.
|
||||
to_modify.pain_multiplier = GET_MUTATION_SYNCHRONIZER(src)
|
||||
|
||||
/datum/action/cooldown/spell/touch/lay_on_hands
|
||||
name = "Mending Touch"
|
||||
desc = "You can now lay your hands on other people to transfer a small amount of their physical injuries to yourself."
|
||||
button_icon = 'icons/mob/actions/actions_genetic.dmi'
|
||||
button_icon_state = "mending_touch"
|
||||
sound = 'sound/magic/staff_healing.ogg'
|
||||
cooldown_time = 12 SECONDS
|
||||
school = SCHOOL_RESTORATION
|
||||
invocation_type = INVOCATION_NONE
|
||||
spell_requirements = NONE
|
||||
antimagic_flags = NONE
|
||||
|
||||
hand_path = /obj/item/melee/touch_attack/lay_on_hands
|
||||
draw_message = span_notice("You ready your hand to transfer injuries to yourself.")
|
||||
drop_message = span_notice("You lower your hand.")
|
||||
/// Multiplies the amount healed, without increasing the received damage.
|
||||
var/heal_multiplier = 1
|
||||
/// Multiplies the incoming pain from healing.
|
||||
var/pain_multiplier = 1
|
||||
/// Icon used for beaming effect
|
||||
var/beam_icon = "blood"
|
||||
|
||||
/datum/action/cooldown/spell/touch/lay_on_hands/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/mendicant)
|
||||
|
||||
var/mob/living/hurtguy = victim
|
||||
|
||||
// Heal more, hurt a bit more.
|
||||
// If you crunch the numbers it sounds crazy good,
|
||||
// but I think that's a fair reward for combining the efforts of Genetics, Medbay, and Mining to reach a hidden mechanic.
|
||||
if(HAS_TRAIT_FROM(mendicant, TRAIT_HIPPOCRATIC_OATH, HIPPOCRATIC_OATH_TRAIT))
|
||||
heal_multiplier *= 2
|
||||
pain_multiplier *= 0.5
|
||||
to_chat(mendicant, span_green("You can feel the magic of the Rod of Aesculapius aiding your efforts!"))
|
||||
beam_icon = "sendbeam"
|
||||
var/obj/item/rod_of_asclepius/rod = locate() in mendicant.contents
|
||||
if(rod)
|
||||
rod.add_filter("cool_glow", 2, list("type" = "outline", "color" = COLOR_VERY_PALE_LIME_GREEN, "size" = 1.25))
|
||||
addtimer(CALLBACK(rod, TYPE_PROC_REF(/datum, remove_filter), "cool_glow"), 6 SECONDS)
|
||||
|
||||
|
||||
// If a normal pacifist, heal and hurt more!
|
||||
else if(HAS_TRAIT(mendicant, TRAIT_PACIFISM))
|
||||
heal_multiplier *= 1.75
|
||||
pain_multiplier *= 1.75
|
||||
to_chat(mendicant, span_green("Your peaceful nature helps you guide all the pain to yourself."))
|
||||
|
||||
var/success
|
||||
if(iscarbon(hurtguy))
|
||||
success = do_complicated_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier)
|
||||
else
|
||||
success = do_simple_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier)
|
||||
|
||||
// Both types can be ignited (technically at least), so we can just do this here.
|
||||
if(hurtguy.has_status_effect(/datum/status_effect/fire_handler/fire_stacks))
|
||||
mendicant.set_fire_stacks(hurtguy.fire_stacks * pain_multiplier, remove_wet_stacks = TRUE)
|
||||
if(hurtguy.on_fire)
|
||||
mendicant.ignite_mob()
|
||||
hurtguy.extinguish_mob()
|
||||
|
||||
// No healies in the end, cancel
|
||||
if(!success)
|
||||
return FALSE
|
||||
|
||||
mendicant.Beam(hurtguy, icon_state = beam_icon, time = 0.5 SECONDS)
|
||||
beam_icon = initial(beam_icon)
|
||||
|
||||
hurtguy.update_damage_overlays()
|
||||
mendicant.update_damage_overlays()
|
||||
|
||||
hurtguy.visible_message(span_notice("[mendicant] lays hands on [hurtguy]!"))
|
||||
to_chat(target, span_boldnotice("[mendicant] lays hands on you, healing you!"))
|
||||
new /obj/effect/temp_visual/heal(get_turf(hurtguy), COLOR_VERY_PALE_LIME_GREEN)
|
||||
return success
|
||||
|
||||
/datum/action/cooldown/spell/touch/lay_on_hands/proc/do_simple_heal(mob/living/carbon/mendicant, mob/living/hurtguy, heal_multiplier, pain_multiplier)
|
||||
// Did the transfer work?
|
||||
. = FALSE
|
||||
|
||||
// Damage to heal
|
||||
var/brute_to_heal = min(hurtguy.getBruteLoss(), 35 * heal_multiplier)
|
||||
// no double dipping
|
||||
var/burn_to_heal = min(hurtguy.getFireLoss(), (35 - brute_to_heal) * heal_multiplier)
|
||||
|
||||
// Get at least organic limb to transfer the damage to
|
||||
var/list/mendicant_organic_limbs = list()
|
||||
for(var/obj/item/bodypart/possible_limb in mendicant.bodyparts)
|
||||
if(IS_ORGANIC_LIMB(possible_limb))
|
||||
mendicant_organic_limbs += possible_limb
|
||||
// None? Gtfo
|
||||
if(isnull(mendicant_organic_limbs))
|
||||
return .
|
||||
|
||||
// Try to use our active hand, otherwise pick at random
|
||||
var/obj/item/bodypart/mendicant_transfer_limb = mendicant.get_active_hand()
|
||||
if(!(mendicant_transfer_limb in mendicant_organic_limbs))
|
||||
mendicant_transfer_limb = pick(mendicant_organic_limbs)
|
||||
mendicant_transfer_limb.receive_damage(brute_to_heal * pain_multiplier, burn_to_heal * pain_multiplier, forced = TRUE, wound_bonus = CANT_WOUND)
|
||||
|
||||
if(brute_to_heal)
|
||||
hurtguy.adjustBruteLoss(brute_to_heal)
|
||||
. = TRUE
|
||||
|
||||
if(burn_to_heal)
|
||||
hurtguy.adjustFireLoss(burn_to_heal)
|
||||
. = TRUE
|
||||
|
||||
return .
|
||||
|
||||
/datum/action/cooldown/spell/touch/lay_on_hands/proc/do_complicated_heal(mob/living/carbon/mendicant, mob/living/carbon/hurtguy, heal_multiplier, pain_multiplier)
|
||||
|
||||
// Did the transfer work?
|
||||
. = FALSE
|
||||
// Get the hurtguy's limbs and the mendicant's limbs to attempt a 1-1 transfer.
|
||||
var/list/hurt_limbs = hurtguy.get_damaged_bodyparts(1, 1, BODYTYPE_ORGANIC) + hurtguy.get_wounded_bodyparts(BODYTYPE_ORGANIC)
|
||||
var/list/mendicant_organic_limbs = list()
|
||||
for(var/obj/item/bodypart/possible_limb in mendicant.bodyparts)
|
||||
if(IS_ORGANIC_LIMB(possible_limb))
|
||||
mendicant_organic_limbs += possible_limb
|
||||
|
||||
// If we have no organic available limbs just give up.
|
||||
if(!length(mendicant_organic_limbs) || !length(hurt_limbs))
|
||||
return
|
||||
|
||||
// Counter to make sure we don't take too much from separate limbs
|
||||
var/total_damage_healed = 0
|
||||
// Transfer damage from one limb to the mendicant's counterpart.
|
||||
for(var/obj/item/bodypart/affected_limb as anything in hurt_limbs)
|
||||
var/obj/item/bodypart/mendicant_transfer_limb = mendicant.get_bodypart(affected_limb.body_zone)
|
||||
// If the compared limb isn't organic, skip it and pick a random one.
|
||||
if(!(mendicant_transfer_limb in mendicant_organic_limbs))
|
||||
mendicant_transfer_limb = pick(mendicant_organic_limbs)
|
||||
|
||||
// Transfer at most 35 damage by default.
|
||||
var/brute_damage = min(affected_limb.brute_dam, 35 * heal_multiplier)
|
||||
// no double dipping
|
||||
var/burn_damage = min(affected_limb.burn_dam, (35 * heal_multiplier) - brute_damage)
|
||||
if((brute_damage || burn_damage) && total_damage_healed < (35 * heal_multiplier))
|
||||
total_damage_healed = brute_damage + burn_damage
|
||||
. = TRUE
|
||||
// Heal!
|
||||
affected_limb.heal_damage(brute_damage * heal_multiplier, burn_damage * heal_multiplier, required_bodytype = BODYTYPE_ORGANIC)
|
||||
// Hurt!
|
||||
mendicant_transfer_limb.receive_damage(brute_damage * pain_multiplier, burn_damage * pain_multiplier, forced = TRUE, wound_bonus = CANT_WOUND)
|
||||
|
||||
// Force light wounds onto you.
|
||||
for(var/datum/wound/iter_wound as anything in affected_limb.wounds)
|
||||
if(iter_wound.severity > WOUND_SEVERITY_MODERATE)
|
||||
continue
|
||||
. = TRUE
|
||||
iter_wound.remove_wound()
|
||||
iter_wound.apply_wound(mendicant_transfer_limb)
|
||||
|
||||
|
||||
return .
|
||||
|
||||
/obj/item/melee/touch_attack/lay_on_hands
|
||||
name = "mending touch"
|
||||
desc = "Unlike in your favorite tabletop games, you sadly can't cast this on yourself, so you can't use that as a Scapegoat." // mayus is reference. if you get it youre cool
|
||||
icon = 'icons/obj/weapons/hand.dmi'
|
||||
icon_state = "greyscale"
|
||||
color = COLOR_VERY_PALE_LIME_GREEN
|
||||
inhand_icon_state = "greyscale"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "Webbing Production"
|
||||
desc = "Allows the user to lay webbing, and travel through it."
|
||||
quality = POSITIVE
|
||||
text_gain_indication = "<span class='notice'>Your skin feels webby.</span>"
|
||||
text_gain_indication = span_notice("Your skin feels webby.")
|
||||
instability = POSITIVE_INSTABILITY_MODERATE // useful until you're lynched
|
||||
power_path = /datum/action/cooldown/mob_cooldown/lay_web/genetic
|
||||
energy_coeff = 1
|
||||
|
||||
@@ -277,14 +277,14 @@
|
||||
)
|
||||
|
||||
//Makes the user passive, it's in their oath not to harm!
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, HIPPOCRATIC_OATH_TRAIT)
|
||||
owner.add_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH), HIPPOCRATIC_OATH_TRAIT)
|
||||
var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
med_hud.show_to(owner)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/hippocratic_oath/on_remove()
|
||||
QDEL_NULL(aura_healing)
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, HIPPOCRATIC_OATH_TRAIT)
|
||||
owner.remove_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH), HIPPOCRATIC_OATH_TRAIT)
|
||||
var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
med_hud.hide_from(owner)
|
||||
|
||||
|
||||
@@ -426,12 +426,12 @@
|
||||
/obj/item/dnainjector/pressuremut
|
||||
name = "\improper DNA injector (Pressure Adaptation)"
|
||||
desc = "Gives you fire."
|
||||
add_mutations = list(/datum/mutation/human/pressure_adaptation)
|
||||
add_mutations = list(/datum/mutation/human/adaptation/pressure)
|
||||
|
||||
/obj/item/dnainjector/antipressure
|
||||
name = "\improper DNA injector (Anti-Pressure Adaptation)"
|
||||
desc = "Cures fire."
|
||||
remove_mutations = list(/datum/mutation/human/pressure_adaptation)
|
||||
remove_mutations = list(/datum/mutation/human/adaptation/pressure)
|
||||
|
||||
/obj/item/dnainjector/radioactive
|
||||
name = "\improper DNA injector (Radioactive)"
|
||||
@@ -500,12 +500,12 @@
|
||||
/obj/item/dnainjector/firemut
|
||||
name = "\improper DNA injector (Temp Adaptation)"
|
||||
desc = "Gives you fire."
|
||||
add_mutations = list(/datum/mutation/human/temperature_adaptation)
|
||||
add_mutations = list(/datum/mutation/human/adaptation/thermal)
|
||||
|
||||
/obj/item/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Temp Adaptation)"
|
||||
desc = "Cures fire."
|
||||
remove_mutations = list(/datum/mutation/human/temperature_adaptation)
|
||||
remove_mutations = list(/datum/mutation/human/adaptation/thermal)
|
||||
|
||||
/obj/item/dnainjector/thermal
|
||||
name = "\improper DNA injector (Thermal Vision)"
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
for(var/mob/living/L in contents)
|
||||
if(L.bodytemperature <= 50 && !HAS_TRAIT(L, TRAIT_RESISTCOLD))
|
||||
L.apply_status_effect(/datum/status_effect/freon)
|
||||
MakeSlippery(TURF_WET_PERMAFROST, 50)
|
||||
MakeSlippery(TURF_WET_PERMAFROST, 10 SECONDS)
|
||||
return TRUE
|
||||
|
||||
/turf/open/proc/water_vapor_gas_act()
|
||||
|
||||
@@ -27,5 +27,5 @@
|
||||
return
|
||||
H.dna.add_mutation(/datum/mutation/human/hulk)
|
||||
H.dna.add_mutation(/datum/mutation/human/xray)
|
||||
H.dna.add_mutation(/datum/mutation/human/pressure_adaptation)
|
||||
H.dna.add_mutation(/datum/mutation/human/adaptation/pressure)
|
||||
H.dna.add_mutation(/datum/mutation/human/telekinesis)
|
||||
|
||||
@@ -454,11 +454,12 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
|
||||
message = unintelligize(message)
|
||||
|
||||
tts_filter = list()
|
||||
var/list/data = list(message, tts_message, tts_filter)
|
||||
var/list/data = list(message, tts_message, tts_filter, capitalize_message)
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_TREAT_MESSAGE, data)
|
||||
message = data[TREAT_MESSAGE_ARG]
|
||||
tts_message = data[TREAT_TTS_MESSAGE_ARG]
|
||||
tts_filter = data[TREAT_TTS_FILTER_ARG]
|
||||
capitalize_message = data[TREAT_CAPITALIZE_MESSAGE]
|
||||
|
||||
if(!tts_message)
|
||||
tts_message = message
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/projectile/temp/cryo
|
||||
name = "cryo beam"
|
||||
range = 3
|
||||
range = 9
|
||||
temperature = -240 // Single slow shot reduces temp greatly
|
||||
|
||||
/obj/projectile/temp/cryo/on_range()
|
||||
@@ -40,3 +40,24 @@
|
||||
var/turf/open/O = T
|
||||
O.freeze_turf()
|
||||
return ..()
|
||||
|
||||
/obj/projectile/temp/pyro
|
||||
name = "hot beam"
|
||||
icon_state = "firebeam" // sets on fire, diff sprite!
|
||||
range = 9
|
||||
temperature = 240
|
||||
|
||||
/obj/projectile/temp/pyro/on_hit(atom/target, blocked, pierce_hit)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/living_target = target
|
||||
if(!istype(living_target))
|
||||
return
|
||||
living_target.adjust_fire_stacks(2)
|
||||
living_target.ignite_mob()
|
||||
|
||||
/obj/projectile/temp/pyro/on_range()
|
||||
var/turf/location = get_turf(src)
|
||||
new /obj/effect/hotspot(location)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
|
||||
@@ -503,18 +503,29 @@
|
||||
|
||||
var/atom/movable/plane_master_controller/game_plane_master_controller = psychonaut.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
|
||||
|
||||
var/list/col_filter_identity = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.000,0,0,0)
|
||||
var/list/col_filter_green = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.333,0,0,0)
|
||||
var/list/col_filter_blue = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.666,0,0,0)
|
||||
var/list/col_filter_red = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 1.000,0,0,0) //visually this is identical to the identity
|
||||
// Info for non-matrix plebs like me!
|
||||
|
||||
game_plane_master_controller.add_filter("rainbow", 10, color_matrix_filter(col_filter_red, FILTER_COLOR_HSL))
|
||||
// This doesn't change the RGB matrixes directly at all. Instead, it shifts all the colors' Hue by 33%,
|
||||
// Shifting them up the color wheel, turning R to G, G to B, B to R, making a psychedelic effect.
|
||||
// The second moves them two colors up instead, turning R to B, G to R, B to G.
|
||||
// The third does a full spin, or resets it back to normal.
|
||||
// Imagine a triangle on the color wheel with the points located at the color peaks, rotating by 90 degrees each time.
|
||||
// The value with decimals is the Hue. The rest are Saturation, Luminosity, and Alpha, though they're unused here.
|
||||
|
||||
// The filters were initially named _green, _blue, _red, despite every filter changing all the colors. It caused me a 2-years-long headache.
|
||||
|
||||
var/list/col_filter_identity = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.000,0,0,0)
|
||||
var/list/col_filter_shift_once = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.333,0,0,0)
|
||||
var/list/col_filter_shift_twice = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.666,0,0,0)
|
||||
var/list/col_filter_reset = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 1.000,0,0,0) //visually this is identical to the identity
|
||||
|
||||
game_plane_master_controller.add_filter("rainbow", 10, color_matrix_filter(col_filter_reset, FILTER_COLOR_HSL))
|
||||
|
||||
for(var/filter in game_plane_master_controller.get_filters("rainbow"))
|
||||
animate(filter, color = col_filter_identity, time = 0 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
|
||||
animate(color = col_filter_green, time = 4 SECONDS)
|
||||
animate(color = col_filter_blue, time = 4 SECONDS)
|
||||
animate(color = col_filter_red, time = 4 SECONDS)
|
||||
animate(color = col_filter_shift_once, time = 4 SECONDS)
|
||||
animate(color = col_filter_shift_twice, time = 4 SECONDS)
|
||||
animate(color = col_filter_reset, time = 4 SECONDS)
|
||||
|
||||
game_plane_master_controller.add_filter("psilocybin_wave", 1, list("type" = "wave", "size" = 2, "x" = 32, "y" = 32))
|
||||
|
||||
@@ -568,18 +579,18 @@
|
||||
|
||||
var/atom/movable/plane_master_controller/game_plane_master_controller = dancer.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
|
||||
|
||||
var/list/col_filter_blue = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.764,0,0,0) //most blue color
|
||||
var/list/col_filter_shift_twice = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.764,0,0,0) //most blue color
|
||||
var/list/col_filter_mid = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.832,0,0,0) //red/blue mix midpoint
|
||||
var/list/col_filter_red = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.900,0,0,0) //most red color
|
||||
var/list/col_filter_reset = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.900,0,0,0) //most red color
|
||||
|
||||
game_plane_master_controller.add_filter("blastoff_filter", 10, color_matrix_filter(col_filter_mid, FILTER_COLOR_HCY))
|
||||
game_plane_master_controller.add_filter("blastoff_wave", 1, list("type" = "wave", "x" = 32, "y" = 32))
|
||||
|
||||
|
||||
for(var/filter in game_plane_master_controller.get_filters("blastoff_filter"))
|
||||
animate(filter, color = col_filter_blue, time = 3 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
|
||||
animate(filter, color = col_filter_shift_twice, time = 3 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
|
||||
animate(color = col_filter_mid, time = 3 SECONDS)
|
||||
animate(color = col_filter_red, time = 3 SECONDS)
|
||||
animate(color = col_filter_reset, time = 3 SECONDS)
|
||||
animate(color = col_filter_mid, time = 3 SECONDS)
|
||||
|
||||
for(var/filter in game_plane_master_controller.get_filters("blastoff_wave"))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
invocation_type = INVOCATION_NONE
|
||||
|
||||
/// Typepath of whatever item we summon
|
||||
var/obj/item/item_type
|
||||
var/obj/item_type
|
||||
/// If TRUE, we delete any previously created items when we cast the spell
|
||||
var/delete_old = TRUE
|
||||
/// List of weakrefs to items summoned
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
var/mob/mob_caster = cast_on
|
||||
if(istype(mob_caster))
|
||||
var/obj/item/existing_item = mob_caster.get_active_held_item()
|
||||
var/obj/existing_item = mob_caster.get_active_held_item()
|
||||
if(existing_item)
|
||||
mob_caster.dropItemToGround(existing_item)
|
||||
|
||||
@@ -65,6 +65,10 @@
|
||||
if(QDELETED(created))
|
||||
CRASH("[type] tried to create an item, but failed. It's item type is [item_type].")
|
||||
|
||||
if(!isitem(created))
|
||||
created.forceMove(cast_on.drop_location())
|
||||
return
|
||||
|
||||
if(istype(mob_caster))
|
||||
mob_caster.put_in_hands(created, del_on_fail = delete_on_failure)
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.0 KiB |
98
strings/heckacious.json
Normal file
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"heckacious": {
|
||||
"your": "youre",
|
||||
"fucking": "banging",
|
||||
"economy": "econony",
|
||||
"know": "no",
|
||||
"ing": "in",
|
||||
"they are": "there",
|
||||
"sometimes": "some times",
|
||||
"do": "does",
|
||||
"hug": "bro hug bump",
|
||||
"we're": "where",
|
||||
"game": "big game",
|
||||
"has": "hass",
|
||||
"downtown": "down town",
|
||||
"jimmy": "geromy",
|
||||
"jeremy": "geromy",
|
||||
"anywhere": "anywear",
|
||||
"smoking": "toking up",
|
||||
"lying": "lyong",
|
||||
"AH": "AUGH",
|
||||
"distraction": "distaction",
|
||||
"lie": "ruse",
|
||||
"angle": "angel",
|
||||
"drink": "pour",
|
||||
"the": "thef",
|
||||
"backward": [ "back ward", "awayways" ],
|
||||
"god damn": "GOD DAMN",
|
||||
"goddamn": "GOD DAMN",
|
||||
"trick": "dunk",
|
||||
"impossible": "unreal",
|
||||
"court": "coart",
|
||||
"holding": "holdung",
|
||||
"reverse": "flip",
|
||||
"inverse": "flip",
|
||||
"around": "turn-ways",
|
||||
"difference": "differance",
|
||||
"values": "vaules",
|
||||
"inside": "insine",
|
||||
"pipe": "punpe",
|
||||
"suspicious": "plot thicken",
|
||||
"awesome": "hella",
|
||||
"reference": "refrance",
|
||||
"amazing": "fucking incredible",
|
||||
"woman": "wonan",
|
||||
"god": "gog",
|
||||
"bible": "bibble",
|
||||
"jesus": "jescus",
|
||||
"christ": [ "chris", "dick" ],
|
||||
"sigh": "sign",
|
||||
"bathroom": "banthroom",
|
||||
"remember": "remender",
|
||||
"night": "nite",
|
||||
"nachos": "nachoes",
|
||||
"nacho": "nancho",
|
||||
"dorito": "nancho",
|
||||
"party": "panty",
|
||||
"dumbass": "dumpass",
|
||||
"they": "their",
|
||||
"okay": "ohh kayy",
|
||||
"stupid": "stutid",
|
||||
"reagent": "regent",
|
||||
"idiot": "fuckass",
|
||||
"awful": "conksuck",
|
||||
"moron": "PIECE OF SHIT",
|
||||
"more": "wider",
|
||||
"serious": "keeping it real",
|
||||
"extreme": "x-treme",
|
||||
"guaranteed": "garganted",
|
||||
"black": "blapck",
|
||||
"glow": "glowns",
|
||||
"deadly": "deudly",
|
||||
"flying": "lifdoff",
|
||||
"cloud": "cloun",
|
||||
"seeing": "scoping",
|
||||
"great": "choice",
|
||||
"look": "lonk",
|
||||
"shit": "balls warmed oveur",
|
||||
"battery": "babbery",
|
||||
"retard": "dicktard",
|
||||
"gay": "homo",
|
||||
"close": "closte",
|
||||
"wrong": "wrog",
|
||||
"who": "whoof",
|
||||
"new": "newd",
|
||||
"holy": "hopy",
|
||||
"um": "unm",
|
||||
"horse": "hornse",
|
||||
"this": "thits",
|
||||
"then": "than",
|
||||
"quick": "soon",
|
||||
"bro": [ "brah", "bro" ],
|
||||
"dude": [ "duge", "bro", "brah" ],
|
||||
"'": [ "'", "" ],
|
||||
"i'm": [ "im", "i am" ],
|
||||
"he's": [ "hes", "he is", "he'ss" ]
|
||||
}
|
||||
}
|
||||
@@ -1643,6 +1643,7 @@
|
||||
#include "code\datums\mood_events\needs_events.dm"
|
||||
#include "code\datums\mutations\_combined.dm"
|
||||
#include "code\datums\mutations\_mutations.dm"
|
||||
#include "code\datums\mutations\active.dm"
|
||||
#include "code\datums\mutations\adaptation.dm"
|
||||
#include "code\datums\mutations\antenna.dm"
|
||||
#include "code\datums\mutations\autotomy.dm"
|
||||
@@ -1650,13 +1651,14 @@
|
||||
#include "code\datums\mutations\chameleon.dm"
|
||||
#include "code\datums\mutations\cold.dm"
|
||||
#include "code\datums\mutations\fire_breath.dm"
|
||||
#include "code\datums\mutations\hot.dm"
|
||||
#include "code\datums\mutations\hulk.dm"
|
||||
#include "code\datums\mutations\olfaction.dm"
|
||||
#include "code\datums\mutations\passive.dm"
|
||||
#include "code\datums\mutations\radioactive.dm"
|
||||
#include "code\datums\mutations\reach.dm"
|
||||
#include "code\datums\mutations\sight.dm"
|
||||
#include "code\datums\mutations\speech.dm"
|
||||
#include "code\datums\mutations\telekinesis.dm"
|
||||
#include "code\datums\mutations\telepathy.dm"
|
||||
#include "code\datums\mutations\tongue_spike.dm"
|
||||
#include "code\datums\mutations\touch.dm"
|
||||
|
||||