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_MESSAGE_ARG 1
|
||||||
#define TREAT_TTS_MESSAGE_ARG 2
|
#define TREAT_TTS_MESSAGE_ARG 2
|
||||||
#define TREAT_TTS_FILTER_ARG 3
|
#define TREAT_TTS_FILTER_ARG 3
|
||||||
|
#define TREAT_CAPITALIZE_MESSAGE 4
|
||||||
|
|
||||||
///From obj/item/toy/crayon/spraycan
|
///From obj/item/toy/crayon/spraycan
|
||||||
#define COMSIG_LIVING_MOB_PAINTED "living_mob_painted"
|
#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.
|
// Antagonizes the above.
|
||||||
#define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user"
|
#define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user"
|
||||||
#define TRAIT_PACIFISM "pacifism"
|
#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_IGNORESLOWDOWN "ignoreslow"
|
||||||
#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown"
|
#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown"
|
||||||
/// Makes it so the mob can use guns regardless of tool user status
|
/// 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_TWOHANDING" = TRAIT_NO_TWOHANDING,
|
||||||
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
|
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
|
||||||
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
|
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
|
||||||
|
"TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
|
||||||
"TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE,
|
"TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE,
|
||||||
"TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER,
|
"TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER,
|
||||||
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
|
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
|
|||||||
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
|
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
|
||||||
"TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE,
|
"TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE,
|
||||||
"TRAIT_PACIFISM" = TRAIT_PACIFISM,
|
"TRAIT_PACIFISM" = TRAIT_PACIFISM,
|
||||||
|
"TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
|
||||||
"TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER,
|
"TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER,
|
||||||
"TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM,
|
"TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM,
|
||||||
"TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG,
|
"TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG,
|
||||||
|
|||||||
@@ -225,6 +225,10 @@
|
|||||||
next += target.loc
|
next += target.loc
|
||||||
|
|
||||||
checking = next
|
checking = next
|
||||||
|
|
||||||
|
if(SEND_SIGNAL(src, COMSIG_ATOM_CANREACH, ultimate_target) & COMPONENT_ALLOW_REACH)
|
||||||
|
return TRUE
|
||||||
|
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/atom/movable/proc/DirectAccess()
|
/atom/movable/proc/DirectAccess()
|
||||||
|
|||||||
@@ -25,6 +25,18 @@
|
|||||||
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
|
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
|
||||||
result = /datum/mutation/human/shock
|
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
|
/datum/generecipe/antiglow
|
||||||
required = "/datum/mutation/human/glow; /datum/mutation/human/void"
|
required = "/datum/mutation/human/glow; /datum/mutation/human/void"
|
||||||
result = /datum/mutation/human/glow/anti
|
result = /datum/mutation/human/glow/anti
|
||||||
@@ -36,3 +48,7 @@
|
|||||||
/datum/generecipe/martyrdom
|
/datum/generecipe/martyrdom
|
||||||
required = "/datum/mutation/human/strong; /datum/mutation/human/stimmed"
|
required = "/datum/mutation/human/strong; /datum/mutation/human/stimmed"
|
||||||
result = /datum/mutation/human/martyrdom
|
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
|
var/energy_coeff = -1
|
||||||
/// List of strings of valid chromosomes this mutation can accept.
|
/// List of strings of valid chromosomes this mutation can accept.
|
||||||
var/list/valid_chrom_list = list()
|
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)
|
/datum/mutation/human/New(class = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -141,6 +143,8 @@
|
|||||||
owner.overlays_standing[layer_used] = mut_overlay
|
owner.overlays_standing[layer_used] = mut_overlay
|
||||||
owner.apply_overlay(layer_used)
|
owner.apply_overlay(layer_used)
|
||||||
grant_power() //we do checks here so nothing about hulk getting magic
|
grant_power() //we do checks here so nothing about hulk getting magic
|
||||||
|
if(mutation_traits)
|
||||||
|
owner.add_traits(mutation_traits, GENETIC_MUTATION)
|
||||||
if(!modified)
|
if(!modified)
|
||||||
addtimer(CALLBACK(src, PROC_REF(modify), 0.5 SECONDS)) //gonna want children calling ..() to run first
|
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.overlays_standing[layer_used] = mut_overlay
|
||||||
owner.apply_overlay(layer_used)
|
owner.apply_overlay(layer_used)
|
||||||
|
|
||||||
|
if(mutation_traits)
|
||||||
|
owner.remove_traits(mutation_traits, GENETIC_MUTATION)
|
||||||
|
|
||||||
/mob/living/carbon/proc/update_mutations_overlay()
|
/mob/living/carbon/proc/update_mutations_overlay()
|
||||||
return
|
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
|
/datum/mutation/human/adaptation
|
||||||
name = "Temperature Adaptation"
|
name = "Adaptation"
|
||||||
desc = "A strange mutation that renders the host immune to damage from extreme temperatures. Does not protect from vacuums."
|
desc = "A strange mutation that renders the host immune to damage from extreme temperatures. Does not protect from vacuums."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
text_gain_indication = "<span class='notice'>Your body feels warm!</span>"
|
text_gain_indication = span_notice("Your body feels normal!")
|
||||||
instability = POSITIVE_INSTABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
conflicts = list(/datum/mutation/human/pressure_adaptation)
|
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))
|
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]
|
return visual_indicators[type][1]
|
||||||
|
|
||||||
/datum/mutation/human/temperature_adaptation/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/adaptation/cold
|
||||||
if(..())
|
name = "Cold Adaptation"
|
||||||
return
|
desc = "A strange mutation that renders the host immune to damage from low temperature environments. It also prevents the host from slipping on ice."
|
||||||
owner.add_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION)
|
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)
|
/datum/mutation/human/adaptation/heat
|
||||||
if(..())
|
name = "Heat Adaptation"
|
||||||
return
|
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."
|
||||||
owner.remove_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION)
|
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"
|
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."
|
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
|
text_gain_indication = span_notice("Your body feels impressively pressurized.")
|
||||||
difficulty = 16
|
instability = POSITIVE_INSTABILITY_MODERATE
|
||||||
text_gain_indication = "<span class='notice'>Your body feels numb!</span>"
|
adapt_icon = "pressure"
|
||||||
instability = POSITIVE_INSTABILITY_MAJOR
|
mutation_traits = list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE)
|
||||||
conflicts = list(/datum/mutation/human/temperature_adaptation)
|
locked = FALSE
|
||||||
|
|
||||||
/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)
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
name = "Antenna"
|
name = "Antenna"
|
||||||
desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively."
|
desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
text_gain_indication = "<span class='notice'>You feel an antenna sprout from your forehead.</span>"
|
text_gain_indication = span_notice("You feel an antenna sprout from your forehead.")
|
||||||
text_lose_indication = "<span class='notice'>Your antenna shrinks back down.</span>"
|
text_lose_indication = span_notice("Your antenna shrinks back down.")
|
||||||
instability = POSITIVE_INSTABILITY_MINOR
|
instability = POSITIVE_INSTABILITY_MINOR
|
||||||
difficulty = 8
|
difficulty = 8
|
||||||
var/datum/weakref/radio_weakref
|
var/datum/weakref/radio_weakref
|
||||||
@@ -44,8 +44,8 @@
|
|||||||
name = "Mind Reader"
|
name = "Mind Reader"
|
||||||
desc = "The affected person can look into the recent memories of others."
|
desc = "The affected person can look into the recent memories of others."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
text_gain_indication = "<span class='notice'>You hear distant voices at the corners of your mind.</span>"
|
text_gain_indication = span_notice("You hear distant voices at the corners of your mind.")
|
||||||
text_lose_indication = "<span class='notice'>The distant voices fade.</span>"
|
text_lose_indication = span_notice("The distant voices fade.")
|
||||||
power_path = /datum/action/cooldown/spell/pointed/mindread
|
power_path = /datum/action/cooldown/spell/pointed/mindread
|
||||||
instability = POSITIVE_INSTABILITY_MINOR
|
instability = POSITIVE_INSTABILITY_MINOR
|
||||||
difficulty = 8
|
difficulty = 8
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
desc = "A genetic defect that sporadically causes seizures."
|
desc = "A genetic defect that sporadically causes seizures."
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = NEGATIVE
|
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
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
desc = "Strange mutation that causes the holder to randomly mutate."
|
desc = "Strange mutation that causes the holder to randomly mutate."
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You feel strange.</span>"
|
text_gain_indication = span_danger("You feel strange.")
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
|
|
||||||
/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
desc = "A chronic cough."
|
desc = "A chronic cough."
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You start coughing.</span>"
|
text_gain_indication = span_danger("You start coughing.")
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
@@ -101,8 +101,8 @@
|
|||||||
desc = "Subject is easily terrified, and may suffer from hallucinations."
|
desc = "Subject is easily terrified, and may suffer from hallucinations."
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You feel screams echo through your mind...</span>"
|
text_gain_indication = span_danger("You feel screams echo through your mind...")
|
||||||
text_lose_indication = "<span class='notice'>The screaming in your mind fades.</span>"
|
text_lose_indication = span_notice("The screaming in your mind fades.")
|
||||||
|
|
||||||
/datum/mutation/human/paranoia/on_life(seconds_per_tick, times_fired)
|
/datum/mutation/human/paranoia/on_life(seconds_per_tick, times_fired)
|
||||||
if(SPT_PROB(2.5, seconds_per_tick) && owner.stat == CONSCIOUS)
|
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!"
|
desc = "A genome that inhibits certain brain functions, causing the holder to appear clumsy. Honk!"
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = MINOR_NEGATIVE
|
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)
|
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -217,7 +217,7 @@
|
|||||||
desc = "A chronic twitch that forces the user to scream bad words." //definitely needs rewriting
|
desc = "A chronic twitch that forces the user to scream bad words." //definitely needs rewriting
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
instability = 0
|
instability = 0
|
||||||
text_gain_indication = "<span class='danger'>You twitch.</span>"
|
text_gain_indication = span_danger("You twitch.")
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
|
|
||||||
/datum/mutation/human/tourettes/on_life(seconds_per_tick, times_fired)
|
/datum/mutation/human/tourettes/on_life(seconds_per_tick, times_fired)
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
desc = "The holder of this genome is completely deaf."
|
desc = "The holder of this genome is completely deaf."
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = NEGATIVE
|
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)
|
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -286,7 +286,7 @@
|
|||||||
name = "Glowy"
|
name = "Glowy"
|
||||||
desc = "You permanently emit a light with a random color and intensity."
|
desc = "You permanently emit a light with a random color and intensity."
|
||||||
quality = POSITIVE
|
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
|
instability = POSITIVE_INSTABILITY_MINI
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
conflicts = list(/datum/mutation/human/glow/anti)
|
conflicts = list(/datum/mutation/human/glow/anti)
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
/datum/mutation/human/glow/anti
|
/datum/mutation/human/glow/anti
|
||||||
name = "Anti-Glow"
|
name = "Anti-Glow"
|
||||||
desc = "Your skin seems to attract and absorb nearby light creating 'darkness' around you."
|
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)
|
conflicts = list(/datum/mutation/human/glow)
|
||||||
instability = POSITIVE_INSTABILITY_MINOR
|
instability = POSITIVE_INSTABILITY_MINOR
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
@@ -336,7 +336,7 @@
|
|||||||
name = "Strength"
|
name = "Strength"
|
||||||
desc = "The user's muscles slightly expand. Commonly seen in top-ranking boxers."
|
desc = "The user's muscles slightly expand. Commonly seen in top-ranking boxers."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
text_gain_indication = "<span class='notice'>You feel strong.</span>"
|
text_gain_indication = span_notice("You feel strong.")
|
||||||
instability = POSITIVE_INSTABILITY_MINI
|
instability = POSITIVE_INSTABILITY_MINI
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
|
|
||||||
@@ -358,7 +358,7 @@
|
|||||||
desc = "The user's chemical balance is more robust. This mutation is known to slightly improve workout efficiency."
|
desc = "The user's chemical balance is more robust. This mutation is known to slightly improve workout efficiency."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
instability = POSITIVE_INSTABILITY_MINI
|
instability = POSITIVE_INSTABILITY_MINI
|
||||||
text_gain_indication = "<span class='notice'>You feel stimmed.</span>"
|
text_gain_indication = span_notice("You feel stimmed.")
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
|
|
||||||
/datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner)
|
||||||
@@ -377,8 +377,8 @@
|
|||||||
name = "Insulated"
|
name = "Insulated"
|
||||||
desc = "The affected person does not conduct electricity."
|
desc = "The affected person does not conduct electricity."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
text_gain_indication = "<span class='notice'>Your fingertips go numb.</span>"
|
text_gain_indication = span_notice("Your fingertips go numb.")
|
||||||
text_lose_indication = "<span class='notice'>Your fingertips regain feeling.</span>"
|
text_lose_indication = span_notice("Your fingertips regain feeling.")
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
instability = POSITIVE_INSTABILITY_MODERATE
|
instability = POSITIVE_INSTABILITY_MODERATE
|
||||||
|
|
||||||
@@ -396,8 +396,9 @@
|
|||||||
name = "Fiery Sweat"
|
name = "Fiery Sweat"
|
||||||
desc = "The user's skin will randomly combust, but is generally a lot more resilient to burning."
|
desc = "The user's skin will randomly combust, but is generally a lot more resilient to burning."
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='warning'>You feel hot.</span>"
|
text_gain_indication = span_warning("You feel hot.")
|
||||||
text_lose_indication = "<span class='notice'>You feel a lot cooler.</span>"
|
text_lose_indication = span_notice("You feel a lot cooler.")
|
||||||
|
conflicts = list(/datum/mutation/human/adaptation/heat)
|
||||||
difficulty = 14
|
difficulty = 14
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
@@ -421,8 +422,8 @@
|
|||||||
name = "Spatial Instability"
|
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."
|
desc = "The victim of the mutation has a very weak link to spatial reality, and may be displaced. Often causes extreme nausea."
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='warning'>The space around you twists sickeningly.</span>"
|
text_gain_indication = span_warning("The space around you twists sickeningly.")
|
||||||
text_lose_indication = "<span class='notice'>The space around you settles back to normal.</span>"
|
text_lose_indication = span_notice("The space around you settles back to normal.")
|
||||||
difficulty = 18//high so it's hard to unlock and abuse
|
difficulty = 18//high so it's hard to unlock and abuse
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
@@ -452,8 +453,8 @@
|
|||||||
desc = "Subject has acidic chemicals building up underneath the skin. This is often lethal."
|
desc = "Subject has acidic chemicals building up underneath the skin. This is often lethal."
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='userdanger'>A horrible burning sensation envelops you as your flesh turns to acid!</span>"
|
text_gain_indication = span_userdanger("A horrible burning sensation envelops you as your flesh turns to acid!")
|
||||||
text_lose_indication = "<span class='notice'>A feeling of relief fills you as your flesh goes back to normal.</span>"
|
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
|
difficulty = 18//high so it's hard to unlock and use on others
|
||||||
/// The cooldown for the warning message
|
/// The cooldown for the warning message
|
||||||
COOLDOWN_DECLARE(msgcooldown)
|
COOLDOWN_DECLARE(msgcooldown)
|
||||||
@@ -473,8 +474,8 @@
|
|||||||
desc = "Subject suffers from muscle spasms."
|
desc = "Subject suffers from muscle spasms."
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='warning'>You flinch.</span>"
|
text_gain_indication = span_warning("You flinch.")
|
||||||
text_lose_indication = "<span class='notice'>Your flinching subsides.</span>"
|
text_lose_indication = span_notice("Your flinching subsides.")
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
|
|
||||||
/datum/mutation/human/spastic/on_acquiring()
|
/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."
|
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
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='warning'>Your right foot feels... left.</span>"
|
text_gain_indication = span_warning("Your right foot feels... left.")
|
||||||
text_lose_indication = "<span class='notice'>Your right foot feels alright.</span>"
|
text_lose_indication = span_notice("Your right foot feels alright.")
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
|
|
||||||
/datum/mutation/human/extrastun/on_acquiring()
|
/datum/mutation/human/extrastun/on_acquiring()
|
||||||
@@ -525,8 +526,8 @@
|
|||||||
instability = NEGATIVE_STABILITY_MAJOR // free stability >:)
|
instability = NEGATIVE_STABILITY_MAJOR // free stability >:)
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
quality = POSITIVE //not that cloning will be an option a lot but generally lets keep this around i guess?
|
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_gain_indication = span_warning("You get an intense feeling of heartburn.")
|
||||||
text_lose_indication = "<span class='notice'>Your internal organs feel at ease.</span>"
|
text_lose_indication = span_notice("Your internal organs feel at ease.")
|
||||||
|
|
||||||
/datum/mutation/human/martyrdom/on_acquiring()
|
/datum/mutation/human/martyrdom/on_acquiring()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -573,7 +574,7 @@
|
|||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
difficulty = 12 //pretty good for traitors
|
difficulty = 12 //pretty good for traitors
|
||||||
quality = NEGATIVE //holy shit no eyes or tongue or ears
|
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()
|
/datum/mutation/human/headless/on_acquiring()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
desc = "A genome that causes the holder's skin to become transparent over time."
|
desc = "A genome that causes the holder's skin to become transparent over time."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
text_gain_indication = "<span class='notice'>You feel one with your surroundings.</span>"
|
text_gain_indication = span_notice("You feel one with your surroundings.")
|
||||||
text_lose_indication = "<span class='notice'>You feel oddly exposed.</span>"
|
text_lose_indication = span_notice("You feel oddly exposed.")
|
||||||
instability = POSITIVE_INSTABILITY_MAJOR
|
instability = POSITIVE_INSTABILITY_MAJOR
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "Geladikinesis"
|
name = "Geladikinesis"
|
||||||
desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
|
desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
|
||||||
quality = POSITIVE
|
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
|
instability = POSITIVE_INSTABILITY_MINOR
|
||||||
difficulty = 10
|
difficulty = 10
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
name = "Cryokinesis"
|
name = "Cryokinesis"
|
||||||
desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will."
|
desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will."
|
||||||
quality = POSITIVE //upsides and downsides
|
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
|
instability = POSITIVE_INSTABILITY_MODERATE
|
||||||
difficulty = 12
|
difficulty = 12
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
difficulty = 12
|
difficulty = 12
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
text_gain_indication = "<span class='notice'>Your throat is burning!</span>"
|
text_gain_indication = span_notice("Your throat is burning!")
|
||||||
text_lose_indication = "<span class='notice'>Your throat is cooling down.</span>"
|
text_lose_indication = span_notice("Your throat is cooling down.")
|
||||||
power_path = /datum/action/cooldown/spell/cone/staggered/fire_breath
|
power_path = /datum/action/cooldown/spell/cone/staggered/fire_breath
|
||||||
instability = POSITIVE_INSTABILITY_MODERATE
|
instability = POSITIVE_INSTABILITY_MODERATE
|
||||||
energy_coeff = 1
|
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
|
quality = POSITIVE
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
difficulty = 16
|
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
|
species_allowed = list(SPECIES_HUMAN) //no skeleton/lizard hulk
|
||||||
health_req = 25
|
health_req = 25
|
||||||
instability = POSITIVE_INSTABILITY_MAJOR
|
instability = POSITIVE_INSTABILITY_MAJOR
|
||||||
var/scream_delay = 50
|
var/scream_delay = 50
|
||||||
var/last_scream = 0
|
var/last_scream = 0
|
||||||
/// List of traits to add/remove when someone gets this mutation.
|
/// List of traits to add/remove when someone gets this mutation.
|
||||||
var/list/mutation_traits = list(
|
mutation_traits = list(
|
||||||
TRAIT_CHUNKYFINGERS,
|
TRAIT_CHUNKYFINGERS,
|
||||||
TRAIT_HULK,
|
TRAIT_HULK,
|
||||||
TRAIT_IGNOREDAMAGESLOWDOWN,
|
TRAIT_IGNOREDAMAGESLOWDOWN,
|
||||||
@@ -24,7 +24,6 @@
|
|||||||
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
owner.add_traits(mutation_traits, GENETIC_MUTATION)
|
|
||||||
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
|
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
|
||||||
part.variable_color = COLOR_DARK_LIME
|
part.variable_color = COLOR_DARK_LIME
|
||||||
owner.update_body_parts()
|
owner.update_body_parts()
|
||||||
@@ -87,7 +86,6 @@
|
|||||||
/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
|
/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
owner.remove_traits(mutation_traits, GENETIC_MUTATION)
|
|
||||||
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
|
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
|
||||||
part.variable_color = null
|
part.variable_color = null
|
||||||
owner.update_body_parts()
|
owner.update_body_parts()
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
desc = "Your sense of smell is comparable to that of a canine."
|
desc = "Your sense of smell is comparable to that of a canine."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
difficulty = 12
|
difficulty = 12
|
||||||
text_gain_indication = "<span class='notice'>Smells begin to make more sense...</span>"
|
text_gain_indication = span_notice("Smells begin to make more sense...")
|
||||||
text_lose_indication = "<span class='notice'>Your sense of smell goes back to normal.</span>"
|
text_lose_indication = span_notice("Your sense of smell goes back to normal.")
|
||||||
power_path = /datum/action/cooldown/spell/olfaction
|
power_path = /datum/action/cooldown/spell/olfaction
|
||||||
instability = POSITIVE_INSTABILITY_MODERATE
|
instability = POSITIVE_INSTABILITY_MODERATE
|
||||||
synchronizer_coeff = 1
|
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."
|
desc = "Causes the subject to feel just a little bit smarter. Most effective in specimens with low levels of intelligence."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
instability = POSITIVE_INSTABILITY_MODERATE // literally makes you on par with station equipment
|
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_gain_indication = span_danger("You feel a little bit smarter.")
|
||||||
text_lose_indication = "<span class='danger'>Your mind feels a little bit foggy.</span>"
|
text_lose_indication = span_danger("Your mind feels a little bit foggy.")
|
||||||
|
|
||||||
/datum/mutation/human/clever/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/clever/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "Radioactivity"
|
name = "Radioactivity"
|
||||||
desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings."
|
desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings."
|
||||||
quality = NEGATIVE
|
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
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
difficulty = 8
|
difficulty = 8
|
||||||
power_coeff = 1
|
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."
|
desc = "The holder of this mutation has poor eyesight."
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = MINOR_NEGATIVE
|
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)
|
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
desc = "Renders the subject completely blind."
|
desc = "Renders the subject completely blind."
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = NEGATIVE
|
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)
|
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -40,8 +40,8 @@
|
|||||||
desc = "The user of this genome can visually perceive the unique human thermal signature."
|
desc = "The user of this genome can visually perceive the unique human thermal signature."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
difficulty = 18
|
difficulty = 18
|
||||||
text_gain_indication = "<span class='notice'>You can 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 class='notice'>You can no longer see the heat rising off of your skin...</span>"
|
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
|
instability = POSITIVE_INSTABILITY_MAJOR // thermals aren't station equipment
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
/datum/mutation/human/xray
|
/datum/mutation/human/xray
|
||||||
name = "X Ray Vision"
|
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
|
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
|
instability = POSITIVE_INSTABILITY_MAJOR
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
difficulty = 16
|
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
|
layer_used = FRONT_MUTATIONS_LAYER
|
||||||
limb_req = BODY_ZONE_HEAD
|
limb_req = BODY_ZONE_HEAD
|
||||||
|
|
||||||
@@ -186,8 +186,8 @@
|
|||||||
desc = "Causes a severe case of Aphasia that prevents reading or writing."
|
desc = "Causes a severe case of Aphasia that prevents reading or writing."
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You feel unable to read or write.</span>"
|
text_gain_indication = span_danger("You feel unable to read or write.")
|
||||||
text_lose_indication = "<span class='danger'>You feel able to read and write again.</span>"
|
text_lose_indication = span_danger("You feel able to read and write again.")
|
||||||
|
|
||||||
/datum/mutation/human/illiterate/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/illiterate/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -198,3 +198,4 @@
|
|||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
REMOVE_TRAIT(owner, TRAIT_ILLITERATE, GENETIC_MUTATION)
|
REMOVE_TRAIT(owner, TRAIT_ILLITERATE, GENETIC_MUTATION)
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
//These are all minor mutations that affect your speech somehow.
|
//These are all minor mutations that affect your speech somehow.
|
||||||
//Individual ones aren't commented since their functions should be evident at a glance
|
//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
|
/datum/mutation/human/nervousness
|
||||||
name = "Nervousness"
|
name = "Nervousness"
|
||||||
desc = "Causes the holder to stutter."
|
desc = "Causes the holder to stutter."
|
||||||
instability = NEGATIVE_STABILITY_MINI
|
instability = NEGATIVE_STABILITY_MINI
|
||||||
quality = MINOR_NEGATIVE
|
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)
|
/datum/mutation/human/nervousness/on_life(seconds_per_tick, times_fired)
|
||||||
if(SPT_PROB(5, seconds_per_tick))
|
if(SPT_PROB(5, seconds_per_tick))
|
||||||
@@ -17,8 +22,8 @@
|
|||||||
desc = "You are not a clown. You are the entire circus."
|
desc = "You are not a clown. You are the entire circus."
|
||||||
instability = NEGATIVE_STABILITY_MINI
|
instability = NEGATIVE_STABILITY_MINI
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='sans'><span class='infoplain'>You feel an off sensation in your voicebox.</span></span>"
|
text_gain_indication = span_sans(span_notice("You feel an off sensation in your voicebox."))
|
||||||
text_lose_indication = "<span class='notice'>The off sensation passes.</span>"
|
text_lose_indication = span_notice("The off sensation passes.")
|
||||||
|
|
||||||
/datum/mutation/human/wacky/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/wacky/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -35,13 +40,185 @@
|
|||||||
|
|
||||||
speech_args[SPEECH_SPANS] |= SPAN_SANS
|
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
|
/datum/mutation/human/mute
|
||||||
name = "Mute"
|
name = "Mute"
|
||||||
desc = "Completely inhibits the vocal section of the brain."
|
desc = "Completely inhibits the vocal section of the brain."
|
||||||
instability = NEGATIVE_STABILITY_MAJOR
|
instability = NEGATIVE_STABILITY_MAJOR
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You feel unable to express yourself at all.</span>"
|
text_gain_indication = span_danger("You feel unable to express yourself at all.")
|
||||||
text_lose_indication = "<span class='danger'>You feel able to speak freely again.</span>"
|
text_lose_indication = span_danger("You feel able to speak freely again.")
|
||||||
|
|
||||||
/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -58,8 +235,8 @@
|
|||||||
desc = "Partially inhibits the vocal center of the brain, severely distorting speech."
|
desc = "Partially inhibits the vocal center of the brain, severely distorting speech."
|
||||||
instability = NEGATIVE_STABILITY_MODERATE
|
instability = NEGATIVE_STABILITY_MODERATE
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You can't seem to form any coherent thoughts!</span>"
|
text_gain_indication = span_danger("You can't seem to form any coherent thoughts!")
|
||||||
text_lose_indication = "<span class='danger'>Your mind feels more clear.</span>"
|
text_lose_indication = span_danger("Your mind feels more clear.")
|
||||||
|
|
||||||
/datum/mutation/human/unintelligible/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/unintelligible/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -76,8 +253,8 @@
|
|||||||
desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037."
|
desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037."
|
||||||
instability = NEGATIVE_STABILITY_MINI
|
instability = NEGATIVE_STABILITY_MINI
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='notice'>You feel Swedish, however that works.</span>"
|
text_gain_indication = span_notice("You feel Swedish, however that works.")
|
||||||
text_lose_indication = "<span class='notice'>The feeling of Swedishness passes.</span>"
|
text_lose_indication = span_notice("The feeling of Swedishness passes.")
|
||||||
|
|
||||||
/datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -108,8 +285,8 @@
|
|||||||
desc = "Unknown"
|
desc = "Unknown"
|
||||||
instability = NEGATIVE_STABILITY_MINI
|
instability = NEGATIVE_STABILITY_MINI
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='notice'>Ye feel like a reet prat like, innit?</span>"
|
text_gain_indication = span_notice("Ye feel like a reet prat like, innit?")
|
||||||
text_lose_indication = "<span class='notice'>You no longer feel like being rude and sassy.</span>"
|
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)
|
/datum/mutation/human/chav/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -146,9 +323,8 @@
|
|||||||
desc = "A terrifying mutation named after its 'patient-zero'."
|
desc = "A terrifying mutation named after its 'patient-zero'."
|
||||||
instability = NEGATIVE_STABILITY_MINI
|
instability = NEGATIVE_STABILITY_MINI
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
locked = TRUE
|
text_gain_indication = span_notice("You feel pretty good, honeydoll.")
|
||||||
text_gain_indication = "<span class='notice'>You feel pretty good, honeydoll.</span>"
|
text_lose_indication = span_notice("You feel a little less conversation would be great.")
|
||||||
text_lose_indication = "<span class='notice'>You feel a little less conversation would be great.</span>"
|
|
||||||
|
|
||||||
/datum/mutation/human/elvis/on_life(seconds_per_tick, times_fired)
|
/datum/mutation/human/elvis/on_life(seconds_per_tick, times_fired)
|
||||||
switch(pick(1,2))
|
switch(pick(1,2))
|
||||||
@@ -194,8 +370,8 @@
|
|||||||
desc = "A common mutation that severely decreases intelligence."
|
desc = "A common mutation that severely decreases intelligence."
|
||||||
quality = NEGATIVE
|
quality = NEGATIVE
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
text_gain_indication = "<span class='notice'>You feel...totally chill, man!</span>"
|
text_gain_indication = span_notice("You feel...totally chill, man!")
|
||||||
text_lose_indication = "<span class='notice'>You feel like you have a better sense of time.</span>"
|
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)
|
/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."
|
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
|
instability = NEGATIVE_STABILITY_MINI
|
||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='notice'>You feel like seeking the holy grail!</span>"
|
text_gain_indication = span_notice("You feel like seeking the holy grail!")
|
||||||
text_lose_indication = "<span class='notice'>You no longer feel like seeking anything.</span>"
|
text_lose_indication = span_notice("You no longer feel like seeking anything.")
|
||||||
|
|
||||||
/datum/mutation/human/medieval/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/medieval/on_acquiring(mob/living/carbon/human/owner)
|
||||||
if(..())
|
if(..())
|
||||||
@@ -272,3 +448,7 @@
|
|||||||
var/spoken_message = speech_args[SPEECH_MESSAGE]
|
var/spoken_message = speech_args[SPEECH_MESSAGE]
|
||||||
spoken_message = piglatin_sentence(spoken_message)
|
spoken_message = piglatin_sentence(spoken_message)
|
||||||
speech_args[SPEECH_MESSAGE] = 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"
|
name = "Telepathy"
|
||||||
desc = "A rare mutation that allows the user to telepathically communicate to others."
|
desc = "A rare mutation that allows the user to telepathically communicate to others."
|
||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
text_gain_indication = "<span class='notice'>You can hear your own voice echoing in your mind!</span>"
|
text_gain_indication = span_notice("You can hear your own voice echoing in your mind!")
|
||||||
text_lose_indication = "<span class='notice'>You don't hear your mind echo anymore.</span>"
|
text_lose_indication = span_notice("You don't hear your mind echo anymore.")
|
||||||
difficulty = 12
|
difficulty = 12
|
||||||
power_path = /datum/action/cooldown/spell/list_target/telepathy
|
power_path = /datum/action/cooldown/spell/list_target/telepathy
|
||||||
instability = POSITIVE_INSTABILITY_MINOR // basically a mediocre PDA messager
|
instability = POSITIVE_INSTABILITY_MINOR // basically a mediocre PDA messager
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
quality = POSITIVE
|
quality = POSITIVE
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
difficulty = 16
|
difficulty = 16
|
||||||
text_gain_indication = "<span class='notice'>You feel power flow through your hands.</span>"
|
text_gain_indication = span_notice("You feel power flow through your hands.")
|
||||||
text_lose_indication = "<span class='notice'>The energy in your hands subsides.</span>"
|
text_lose_indication = span_notice("The energy in your hands subsides.")
|
||||||
power_path = /datum/action/cooldown/spell/touch/shock
|
power_path = /datum/action/cooldown/spell/touch/shock
|
||||||
instability = POSITIVE_INSTABILITY_MODERATE // bad stun baton
|
instability = POSITIVE_INSTABILITY_MODERATE // bad stun baton
|
||||||
energy_coeff = 1
|
energy_coeff = 1
|
||||||
@@ -85,3 +85,192 @@
|
|||||||
icon = 'icons/obj/weapons/hand.dmi'
|
icon = 'icons/obj/weapons/hand.dmi'
|
||||||
icon_state = "zapper"
|
icon_state = "zapper"
|
||||||
inhand_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"
|
name = "Webbing Production"
|
||||||
desc = "Allows the user to lay webbing, and travel through it."
|
desc = "Allows the user to lay webbing, and travel through it."
|
||||||
quality = POSITIVE
|
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
|
instability = POSITIVE_INSTABILITY_MODERATE // useful until you're lynched
|
||||||
power_path = /datum/action/cooldown/mob_cooldown/lay_web/genetic
|
power_path = /datum/action/cooldown/mob_cooldown/lay_web/genetic
|
||||||
energy_coeff = 1
|
energy_coeff = 1
|
||||||
|
|||||||
@@ -277,14 +277,14 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
//Makes the user passive, it's in their oath not to harm!
|
//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]
|
var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||||
med_hud.show_to(owner)
|
med_hud.show_to(owner)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/datum/status_effect/hippocratic_oath/on_remove()
|
/datum/status_effect/hippocratic_oath/on_remove()
|
||||||
QDEL_NULL(aura_healing)
|
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]
|
var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||||
med_hud.hide_from(owner)
|
med_hud.hide_from(owner)
|
||||||
|
|
||||||
|
|||||||
@@ -426,12 +426,12 @@
|
|||||||
/obj/item/dnainjector/pressuremut
|
/obj/item/dnainjector/pressuremut
|
||||||
name = "\improper DNA injector (Pressure Adaptation)"
|
name = "\improper DNA injector (Pressure Adaptation)"
|
||||||
desc = "Gives you fire."
|
desc = "Gives you fire."
|
||||||
add_mutations = list(/datum/mutation/human/pressure_adaptation)
|
add_mutations = list(/datum/mutation/human/adaptation/pressure)
|
||||||
|
|
||||||
/obj/item/dnainjector/antipressure
|
/obj/item/dnainjector/antipressure
|
||||||
name = "\improper DNA injector (Anti-Pressure Adaptation)"
|
name = "\improper DNA injector (Anti-Pressure Adaptation)"
|
||||||
desc = "Cures fire."
|
desc = "Cures fire."
|
||||||
remove_mutations = list(/datum/mutation/human/pressure_adaptation)
|
remove_mutations = list(/datum/mutation/human/adaptation/pressure)
|
||||||
|
|
||||||
/obj/item/dnainjector/radioactive
|
/obj/item/dnainjector/radioactive
|
||||||
name = "\improper DNA injector (Radioactive)"
|
name = "\improper DNA injector (Radioactive)"
|
||||||
@@ -500,12 +500,12 @@
|
|||||||
/obj/item/dnainjector/firemut
|
/obj/item/dnainjector/firemut
|
||||||
name = "\improper DNA injector (Temp Adaptation)"
|
name = "\improper DNA injector (Temp Adaptation)"
|
||||||
desc = "Gives you fire."
|
desc = "Gives you fire."
|
||||||
add_mutations = list(/datum/mutation/human/temperature_adaptation)
|
add_mutations = list(/datum/mutation/human/adaptation/thermal)
|
||||||
|
|
||||||
/obj/item/dnainjector/antifire
|
/obj/item/dnainjector/antifire
|
||||||
name = "\improper DNA injector (Anti-Temp Adaptation)"
|
name = "\improper DNA injector (Anti-Temp Adaptation)"
|
||||||
desc = "Cures fire."
|
desc = "Cures fire."
|
||||||
remove_mutations = list(/datum/mutation/human/temperature_adaptation)
|
remove_mutations = list(/datum/mutation/human/adaptation/thermal)
|
||||||
|
|
||||||
/obj/item/dnainjector/thermal
|
/obj/item/dnainjector/thermal
|
||||||
name = "\improper DNA injector (Thermal Vision)"
|
name = "\improper DNA injector (Thermal Vision)"
|
||||||
|
|||||||
@@ -320,7 +320,7 @@
|
|||||||
for(var/mob/living/L in contents)
|
for(var/mob/living/L in contents)
|
||||||
if(L.bodytemperature <= 50 && !HAS_TRAIT(L, TRAIT_RESISTCOLD))
|
if(L.bodytemperature <= 50 && !HAS_TRAIT(L, TRAIT_RESISTCOLD))
|
||||||
L.apply_status_effect(/datum/status_effect/freon)
|
L.apply_status_effect(/datum/status_effect/freon)
|
||||||
MakeSlippery(TURF_WET_PERMAFROST, 50)
|
MakeSlippery(TURF_WET_PERMAFROST, 10 SECONDS)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/turf/open/proc/water_vapor_gas_act()
|
/turf/open/proc/water_vapor_gas_act()
|
||||||
|
|||||||
@@ -27,5 +27,5 @@
|
|||||||
return
|
return
|
||||||
H.dna.add_mutation(/datum/mutation/human/hulk)
|
H.dna.add_mutation(/datum/mutation/human/hulk)
|
||||||
H.dna.add_mutation(/datum/mutation/human/xray)
|
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)
|
H.dna.add_mutation(/datum/mutation/human/telekinesis)
|
||||||
|
|||||||
@@ -454,11 +454,12 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
|
|||||||
message = unintelligize(message)
|
message = unintelligize(message)
|
||||||
|
|
||||||
tts_filter = list()
|
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)
|
SEND_SIGNAL(src, COMSIG_LIVING_TREAT_MESSAGE, data)
|
||||||
message = data[TREAT_MESSAGE_ARG]
|
message = data[TREAT_MESSAGE_ARG]
|
||||||
tts_message = data[TREAT_TTS_MESSAGE_ARG]
|
tts_message = data[TREAT_TTS_MESSAGE_ARG]
|
||||||
tts_filter = data[TREAT_TTS_FILTER_ARG]
|
tts_filter = data[TREAT_TTS_FILTER_ARG]
|
||||||
|
capitalize_message = data[TREAT_CAPITALIZE_MESSAGE]
|
||||||
|
|
||||||
if(!tts_message)
|
if(!tts_message)
|
||||||
tts_message = message
|
tts_message = message
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
/obj/projectile/temp/cryo
|
/obj/projectile/temp/cryo
|
||||||
name = "cryo beam"
|
name = "cryo beam"
|
||||||
range = 3
|
range = 9
|
||||||
temperature = -240 // Single slow shot reduces temp greatly
|
temperature = -240 // Single slow shot reduces temp greatly
|
||||||
|
|
||||||
/obj/projectile/temp/cryo/on_range()
|
/obj/projectile/temp/cryo/on_range()
|
||||||
@@ -40,3 +40,24 @@
|
|||||||
var/turf/open/O = T
|
var/turf/open/O = T
|
||||||
O.freeze_turf()
|
O.freeze_turf()
|
||||||
return ..()
|
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/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)
|
// Info for non-matrix plebs like me!
|
||||||
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
|
|
||||||
|
|
||||||
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"))
|
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(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_shift_once, time = 4 SECONDS)
|
||||||
animate(color = col_filter_blue, time = 4 SECONDS)
|
animate(color = col_filter_shift_twice, time = 4 SECONDS)
|
||||||
animate(color = col_filter_red, 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))
|
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/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_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_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))
|
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"))
|
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_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)
|
animate(color = col_filter_mid, time = 3 SECONDS)
|
||||||
|
|
||||||
for(var/filter in game_plane_master_controller.get_filters("blastoff_wave"))
|
for(var/filter in game_plane_master_controller.get_filters("blastoff_wave"))
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
invocation_type = INVOCATION_NONE
|
invocation_type = INVOCATION_NONE
|
||||||
|
|
||||||
/// Typepath of whatever item we summon
|
/// 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
|
/// If TRUE, we delete any previously created items when we cast the spell
|
||||||
var/delete_old = TRUE
|
var/delete_old = TRUE
|
||||||
/// List of weakrefs to items summoned
|
/// List of weakrefs to items summoned
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
var/mob/mob_caster = cast_on
|
var/mob/mob_caster = cast_on
|
||||||
if(istype(mob_caster))
|
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)
|
if(existing_item)
|
||||||
mob_caster.dropItemToGround(existing_item)
|
mob_caster.dropItemToGround(existing_item)
|
||||||
|
|
||||||
@@ -65,6 +65,10 @@
|
|||||||
if(QDELETED(created))
|
if(QDELETED(created))
|
||||||
CRASH("[type] tried to create an item, but failed. It's item type is [item_type].")
|
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))
|
if(istype(mob_caster))
|
||||||
mob_caster.put_in_hands(created, del_on_fail = delete_on_failure)
|
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\mood_events\needs_events.dm"
|
||||||
#include "code\datums\mutations\_combined.dm"
|
#include "code\datums\mutations\_combined.dm"
|
||||||
#include "code\datums\mutations\_mutations.dm"
|
#include "code\datums\mutations\_mutations.dm"
|
||||||
|
#include "code\datums\mutations\active.dm"
|
||||||
#include "code\datums\mutations\adaptation.dm"
|
#include "code\datums\mutations\adaptation.dm"
|
||||||
#include "code\datums\mutations\antenna.dm"
|
#include "code\datums\mutations\antenna.dm"
|
||||||
#include "code\datums\mutations\autotomy.dm"
|
#include "code\datums\mutations\autotomy.dm"
|
||||||
@@ -1650,13 +1651,14 @@
|
|||||||
#include "code\datums\mutations\chameleon.dm"
|
#include "code\datums\mutations\chameleon.dm"
|
||||||
#include "code\datums\mutations\cold.dm"
|
#include "code\datums\mutations\cold.dm"
|
||||||
#include "code\datums\mutations\fire_breath.dm"
|
#include "code\datums\mutations\fire_breath.dm"
|
||||||
|
#include "code\datums\mutations\hot.dm"
|
||||||
#include "code\datums\mutations\hulk.dm"
|
#include "code\datums\mutations\hulk.dm"
|
||||||
#include "code\datums\mutations\olfaction.dm"
|
#include "code\datums\mutations\olfaction.dm"
|
||||||
#include "code\datums\mutations\passive.dm"
|
#include "code\datums\mutations\passive.dm"
|
||||||
#include "code\datums\mutations\radioactive.dm"
|
#include "code\datums\mutations\radioactive.dm"
|
||||||
|
#include "code\datums\mutations\reach.dm"
|
||||||
#include "code\datums\mutations\sight.dm"
|
#include "code\datums\mutations\sight.dm"
|
||||||
#include "code\datums\mutations\speech.dm"
|
#include "code\datums\mutations\speech.dm"
|
||||||
#include "code\datums\mutations\telekinesis.dm"
|
|
||||||
#include "code\datums\mutations\telepathy.dm"
|
#include "code\datums\mutations\telepathy.dm"
|
||||||
#include "code\datums\mutations\tongue_spike.dm"
|
#include "code\datums\mutations\tongue_spike.dm"
|
||||||
#include "code\datums\mutations\touch.dm"
|
#include "code\datums\mutations\touch.dm"
|
||||||
|
|||||||