why do I even bother
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
// start global signals with "!", this used to be necessary but now it's just a formatting choice
|
||||
#define COMSIG_GLOB_NEW_Z "!new_z" //from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args)
|
||||
#define COMSIG_GLOB_VAR_EDIT "!var_edit" //called after a successful var edit somewhere in the world: (list/args)
|
||||
|
||||
#define COMSIG_GLOB_LIVING_SAY_SPECIAL "!say_special" //global living say plug - use sparingly: (mob/speaker , message)
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
// /datum signals
|
||||
@@ -137,8 +137,9 @@
|
||||
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
|
||||
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
|
||||
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
|
||||
#define COMSIG_LIVING_SAY "say" //mob/living/say() - return COMSIG_I_FORGET_WHAT_TO_CALL_IT to interrupt before message sent.
|
||||
#define COMPONENT_NO_SAY 1 // Here I am pretending to know what I'm doing.
|
||||
//#define COMSIG_LIVING_SAY "say" //mob/living/say() - return COMSIG_I_FORGET_WHAT_TO_CALL_IT to interrupt before message sent.
|
||||
// #define COMPONENT_NO_SAY 1 // Here I am pretending to know what I'm doing.
|
||||
//#define
|
||||
|
||||
|
||||
// /mob/living/carbon signals
|
||||
|
||||
53
code/datums/brain_damage/hypnosis.dm
Normal file
53
code/datums/brain_damage/hypnosis.dm
Normal file
@@ -0,0 +1,53 @@
|
||||
/datum/brain_trauma/hypnosis
|
||||
name = "Hypnosis"
|
||||
desc = "Patient's unconscious is completely enthralled by a word or sentence, focusing their thoughts and actions on it."
|
||||
scan_desc = "looping thought pattern"
|
||||
gain_text = ""
|
||||
lose_text = ""
|
||||
resilience = TRAUMA_RESILIENCE_SURGERY
|
||||
|
||||
var/hypnotic_phrase = ""
|
||||
var/regex/target_phrase
|
||||
|
||||
/datum/brain_trauma/hypnosis/New(phrase)
|
||||
if(!phrase)
|
||||
qdel(src)
|
||||
hypnotic_phrase = phrase
|
||||
try
|
||||
target_phrase = new("(\\b[hypnotic_phrase]\\b)","ig")
|
||||
catch(var/exception/e)
|
||||
stack_trace("[e] on [e.file]:[e.line]")
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/hypnosis/on_gain()
|
||||
message_admins("[ADMIN_LOOKUPFLW(owner)] was hypnotized with the phrase '[hypnotic_phrase]'.")
|
||||
log_game("[key_name(owner)] was hypnotized with the phrase '[hypnotic_phrase]'.")
|
||||
to_chat(owner, "<span class='reallybig hypnophrase'>[hypnotic_phrase]</span>")
|
||||
to_chat(owner, "<span class='notice'>[pick("You feel your thoughts focusing on this phrase... you can't seem to get it out of your head.",\
|
||||
"Your head hurts, but this is all you can think of. It must be vitally important.",\
|
||||
"You feel a part of your mind repeating this over and over. You need to follow these words.",\
|
||||
"Something about this sounds... right, for some reason. You feel like you should follow these words.",\
|
||||
"These words keep echoing in your mind. You find yourself completely fascinated by them.")]</span>")
|
||||
to_chat(owner, "<span class='boldwarning'>You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\
|
||||
as long as you act like the words are your highest priority.</span>")
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/hypnosis/on_lose()
|
||||
message_admins("[ADMIN_LOOKUPFLW(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
|
||||
log_game("[key_name(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
|
||||
to_chat(owner, "<span class='userdanger'>You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you.</span>")
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/hypnosis/on_life()
|
||||
..()
|
||||
if(prob(2))
|
||||
switch(rand(1,2))
|
||||
if(1)
|
||||
to_chat(owner, "<i>...[lowertext(hypnotic_phrase)]...</i>")
|
||||
if(2)
|
||||
new /datum/hallucination/chat(owner, TRUE, FALSE, "<span class='hypnophrase'>[hypnotic_phrase]</span>")
|
||||
|
||||
/datum/brain_trauma/hypnosis/on_hear(message, speaker, message_language, raw_message, radio_freq)
|
||||
message = target_phrase.Replace(message, "<span class='hypnophrase'>$1</span>")
|
||||
return message
|
||||
@@ -203,4 +203,20 @@
|
||||
|
||||
/datum/brain_trauma/severe/pacifism/on_lose()
|
||||
owner.remove_trait(TRAIT_PACIFISM, TRAUMA_TRAIT)
|
||||
..()
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/hypnotic_stupor
|
||||
name = "Hypnotic Stupor"
|
||||
desc = "Patient is prone to episodes of extreme stupor that leaves them extremely suggestible."
|
||||
scan_desc = "oneiric feedback loop"
|
||||
gain_text = "<span class='warning'>You feel somewhat dazed.</span>"
|
||||
lose_text = "<span class='notice'>You feel like a fog was lifted from your mind.</span>"
|
||||
|
||||
/datum/brain_trauma/severe/hypnotic_stupor/on_lose() //hypnosis must be cleared separately, but brain surgery should get rid of both anyway
|
||||
..()
|
||||
owner.remove_status_effect(/datum/status_effect/trance)
|
||||
|
||||
/datum/brain_trauma/severe/hypnotic_stupor/on_life()
|
||||
..()
|
||||
if(prob(1) && !owner.has_status_effect(/datum/status_effect/trance))
|
||||
owner.apply_status_effect(/datum/status_effect/trance, rand(100,300), FALSE)
|
||||
|
||||
@@ -507,3 +507,57 @@
|
||||
desc = "Your body is covered in blue ichor! You can't be revived by vitality matrices."
|
||||
icon_state = "ichorial_stain"
|
||||
alerttooltipstyle = "clockcult"
|
||||
|
||||
/datum/status_effect/trance
|
||||
id = "trance"
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
duration = 300
|
||||
tick_interval = 10
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN seems slow and unfocused.</span>"
|
||||
var/stun = TRUE
|
||||
alert_type = /obj/screen/alert/status_effect/trance
|
||||
|
||||
/obj/screen/alert/status_effect/trance
|
||||
name = "Trance"
|
||||
desc = "Everything feels so distant, and you can feel your thoughts forming loops inside your head..."
|
||||
icon_state = "high"
|
||||
|
||||
/datum/status_effect/trance/tick()
|
||||
if(stun)
|
||||
owner.Stun(60, TRUE, TRUE)
|
||||
owner.dizziness = 20
|
||||
|
||||
/datum/status_effect/trance/on_apply()
|
||||
if(!iscarbon(owner))
|
||||
return FALSE
|
||||
RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize)
|
||||
owner.add_trait(TRAIT_MUTE, "trance")
|
||||
if(!owner.has_quirk(/datum/quirk/monochromatic))
|
||||
owner.add_client_colour(/datum/client_colour/monochrome)
|
||||
owner.visible_message("[stun ? "<span class='warning'>[owner] stands still as [owner.p_their()] eyes seem to focus on a distant point.</span>" : ""]", \
|
||||
"<span class='warning'>[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]</span>")
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE)
|
||||
duration = _duration
|
||||
stun = _stun
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/trance/on_remove()
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
|
||||
owner.remove_trait(TRAIT_MUTE, "trance")
|
||||
owner.dizziness = 0
|
||||
if(!owner.has_quirk(/datum/quirk/monochromatic))
|
||||
owner.remove_client_colour(/datum/client_colour/monochrome)
|
||||
to_chat(owner, "<span class='warning'>You snap out of your trance!</span>")
|
||||
|
||||
/datum/status_effect/trance/proc/hypnotize(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
if(!owner.can_hear())
|
||||
return
|
||||
if(speaker == owner)
|
||||
return
|
||||
var/mob/living/carbon/C = owner
|
||||
C.cure_trauma_type(/datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY) //clear previous hypnosis
|
||||
addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message), 10)
|
||||
addtimer(CALLBACK(C, /mob/living.proc/Stun, 60, TRUE, TRUE), 15) //Take some time to think about it
|
||||
qdel(src)
|
||||
|
||||
@@ -393,6 +393,22 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.hypnophrase {color: #202020; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #202020; }
|
||||
25% { color: #4b02ac; }
|
||||
50% { color: #9f41f1; }
|
||||
75% { color: #541c9c; }
|
||||
100% { color: #7adbf3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #f75a5a; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #f75a5a; }
|
||||
}
|
||||
|
||||
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
|
||||
@@ -910,3 +910,17 @@
|
||||
|
||||
/mob/living/carbon/can_resist()
|
||||
return bodyparts.len > 2 && ..()
|
||||
|
||||
/mob/living/carbon/proc/hypnosis_vulnerable()//unused atm, but added in case
|
||||
if(src.has_trait(TRAIT_MINDSHIELD))
|
||||
return FALSE
|
||||
if(hallucinating())
|
||||
return TRUE
|
||||
if(IsSleeping())
|
||||
return TRUE
|
||||
if(src.has_trait(TRAIT_DUMB))
|
||||
return TRUE
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, src)
|
||||
if(mood)
|
||||
if(mood.sanity < SANITY_UNSTABLE)
|
||||
return TRUE
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
var/obj/item/organ/vocal_cords/Vc = getorganslot(ORGAN_SLOT_VOICE)
|
||||
if(Vc)
|
||||
if(Vc.name == "velvet chords" )
|
||||
..()
|
||||
velvetspeech(message, src)
|
||||
|
||||
var/obj/item/organ/tongue/T = getorganslot(ORGAN_SLOT_TONGUE)
|
||||
|
||||
@@ -205,6 +205,11 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
if(pressure < ONE_ATMOSPHERE*0.4) //Thin air, let's italicise the message
|
||||
spans |= SPAN_ITALICS
|
||||
|
||||
//global say component
|
||||
//SEND_GLOBAL_SIGNAL(COMSIG_LIVING_SAY, src, message)
|
||||
//if(SEND_SIGNAL(COMSIG_LIVING_SAY,src,message) == COMPONENT_NO_SAY)
|
||||
// return
|
||||
|
||||
send_speech(message, message_range, src, bubble_type, spans, language, message_mode)
|
||||
|
||||
if(succumbed)
|
||||
@@ -273,6 +278,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
AM.Hear(eavesrendered, src, message_language, eavesdropping, , spans, message_mode)
|
||||
else
|
||||
AM.Hear(rendered, src, message_language, message, , spans, message_mode)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_LIVING_SAY_SPECIAL, src, message)
|
||||
|
||||
//speech bubble
|
||||
var/list/speech_bubble_recipients = list()
|
||||
|
||||
@@ -49,6 +49,7 @@ im
|
||||
var/atom/my_atom = null
|
||||
var/chem_temp = 150
|
||||
var/pH = REAGENT_NORMAL_PH//This is definately 7, right?
|
||||
var/overallPurity = 1
|
||||
var/last_tick = 1
|
||||
var/addiction_tick = 1
|
||||
var/list/datum/reagent/addiction_list = new/list()
|
||||
@@ -355,17 +356,6 @@ im
|
||||
var/reaction_occurred = 0 // checks if reaction, binary variable
|
||||
var/continue_reacting = FALSE //Helps keep track what kind of reaction is occuring; standard or fermi.
|
||||
|
||||
//if(fermiIsReacting == TRUE)
|
||||
/* if (reactedVol >= targetVol && targetVol != 0)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
fermiIsReacting = FALSE
|
||||
message_admins("FermiChem processing stopped in reaction handler")
|
||||
reaction_occurred = 1
|
||||
return
|
||||
else
|
||||
message_admins("FermiChem processing passed in reaction handler")
|
||||
return
|
||||
*/
|
||||
|
||||
|
||||
do //What does do do in byond? It sounds very redundant? is it a while loop?
|
||||
@@ -429,9 +419,6 @@ im
|
||||
if (chem_temp > C.ExplodeTemp)//Check to see if reaction is too hot!
|
||||
if (C.FermiExplode == TRUE)
|
||||
//To be added!
|
||||
else
|
||||
FermiExplode()
|
||||
//explode function!!
|
||||
|
||||
TODO: make plastic beakers melt at 447 kalvin, all others at ~850 and meta-material never break.
|
||||
*/
|
||||
@@ -472,11 +459,11 @@ im
|
||||
var/datum/chemical_reaction/C = selected_reaction
|
||||
|
||||
if (C.FermiChem == TRUE && !continue_reacting)
|
||||
message_admins("FermiChem Proc'd")
|
||||
//message_admins("FermiChem Proc'd")
|
||||
|
||||
for(var/P in selected_reaction.results)
|
||||
targetVol = cached_results[P]*multiplier
|
||||
message_admins("FermiChem target volume: [targetVol]")
|
||||
//message_admins("FermiChem target volume: [targetVol]")
|
||||
|
||||
if ((chem_temp > C.OptimalTempMin) && (pH > (C.OptimalpHMin - C.ReactpHLim)) && (pH < (C.OptimalpHMax + C.ReactpHLim)))//To prevent pointless reactions
|
||||
//if (reactedVol < targetVol)
|
||||
@@ -486,7 +473,7 @@ im
|
||||
//reactedVol = FermiReact(selected_reaction, chem_temp, pH, multiplier, reactedVol, targetVol, cached_required_reagents, cached_results)
|
||||
//selected_reaction.on_reaction(src, my_atom, multiplier)
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
message_admins("FermiChem processing started")
|
||||
//message_admins("FermiChem processing started")
|
||||
selected_reaction.on_reaction(src, my_atom, multiplier)
|
||||
fermiIsReacting = TRUE
|
||||
fermiReactID = selected_reaction
|
||||
@@ -496,7 +483,7 @@ im
|
||||
// STOP_PROCESSING(SSfastprocess, src)
|
||||
else if (chem_temp > C.ExplodeTemp)
|
||||
var/datum/chemical_reaction/fermi/Ferm = selected_reaction
|
||||
Ferm.FermiExplode(src, my_atom, total_volume, chem_temp, pH)
|
||||
Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH)
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
@@ -554,13 +541,13 @@ im
|
||||
var/multiplier = INFINITY
|
||||
//var/special_react_result = C.check_special_react(src) Only add if I add in the fermi-izer chem
|
||||
|
||||
message_admins("updating targetVol from [targetVol]")
|
||||
//message_admins("updating targetVol from [targetVol]")
|
||||
for(var/B in cached_required_reagents) //
|
||||
multiplier = min(multiplier, round(get_reagent_amount(B) / cached_required_reagents[B]))
|
||||
if (multiplier == 0)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
fermiIsReacting = FALSE
|
||||
message_admins("FermiChem STOPPED due to reactant removal! Reacted vol: [reactedVol] of [targetVol]")
|
||||
//message_admins("FermiChem STOPPED due to reactant removal! Reacted vol: [reactedVol] of [targetVol]")
|
||||
reactedVol = 0
|
||||
targetVol = 0
|
||||
handle_reactions()
|
||||
@@ -572,20 +559,20 @@ im
|
||||
for(var/P in cached_results)
|
||||
targetVol = cached_results[P]*multiplier
|
||||
|
||||
message_admins("to [targetVol]")
|
||||
//message_admins("to [targetVol]")
|
||||
|
||||
if (fermiIsReacting == FALSE)
|
||||
message_admins("THIS SHOULD NEVER APPEAR!")
|
||||
//message_admins("THIS SHOULD NEVER APPEAR!")
|
||||
CRASH("Fermi has refused to stop reacting even though we asked her nicely.")
|
||||
|
||||
if (chem_temp > C.OptimalTempMin && fermiIsReacting == TRUE)//To prevent pointless reactions
|
||||
if (reactedVol < targetVol)
|
||||
reactedVol = FermiReact(fermiReactID, chem_temp, pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
|
||||
message_admins("FermiChem tick activated started, Reacted vol: [reactedVol] of [targetVol]")
|
||||
//message_admins("FermiChem tick activated started, Reacted vol: [reactedVol] of [targetVol]")
|
||||
else
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
fermiIsReacting = FALSE
|
||||
message_admins("FermiChem STOPPED due to volume reached! Reacted vol: [reactedVol] of [targetVol]")
|
||||
//message_admins("FermiChem STOPPED due to volume reached! Reacted vol: [reactedVol] of [targetVol]")
|
||||
reactedVol = 0
|
||||
targetVol = 0
|
||||
handle_reactions()
|
||||
@@ -596,7 +583,7 @@ im
|
||||
return
|
||||
else
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
message_admins("FermiChem STOPPED due to temperature! Reacted vol: [reactedVol] of [targetVol]")
|
||||
//message_admins("FermiChem STOPPED due to temperature! Reacted vol: [reactedVol] of [targetVol]")
|
||||
fermiIsReacting = FALSE
|
||||
reactedVol = 0
|
||||
targetVol = 0
|
||||
@@ -619,28 +606,28 @@ im
|
||||
var/purity = 1
|
||||
//var/tempVol = totalVol
|
||||
|
||||
message_admins("Loop beginning")
|
||||
//message_admins("Loop beginning")
|
||||
//Begin Parse
|
||||
|
||||
|
||||
//update_holder_purity(C)//updates holder's purity
|
||||
|
||||
//Check extremes first
|
||||
if (cached_temp > C.ExplodeTemp)
|
||||
//go to explode proc
|
||||
message_admins("temperature is over limit: [C.ExplodeTemp] Current temperature: [cached_temp]")
|
||||
//message_admins("temperature is over limit: [C.ExplodeTemp] Current temperature: [cached_temp]")
|
||||
C.FermiExplode(src, my_atom, (reactedVol+targetVol), cached_temp, pH)
|
||||
|
||||
if (pH > 14)
|
||||
pH = 14
|
||||
message_admins("pH is lover limit, cur pH: [pH]")
|
||||
//message_admins("pH is lover limit, cur pH: [pH]")
|
||||
else if (pH < 0)
|
||||
pH = 0
|
||||
//Create chemical sludge eventually(for now just destroy the beaker I guess?)
|
||||
//TODO Strong acids eat glass, make it so you NEED plastic beakers for superacids(for some reactions)
|
||||
message_admins("pH is lover limit, cur pH: [pH]")
|
||||
//message_admins("pH is lover limit, cur pH: [pH]")
|
||||
|
||||
if ((purity < C.PurityMin) && (!C.PurityMin == 0))//If purity is below the min, blow it up.
|
||||
C.FermiExplode(src, (reactedVol+targetVol), cached_temp, pH, C)
|
||||
C.FermiExplode(src, my_atom, (reactedVol+targetVol), cached_temp, pH)
|
||||
|
||||
//For now, purity is handled elsewhere
|
||||
|
||||
@@ -664,10 +651,10 @@ im
|
||||
deltapH = 1
|
||||
//This should never proc:
|
||||
else
|
||||
message_admins("Fermichem's pH broke!! Please let Fermis know!!")
|
||||
//message_admins("Fermichem's pH broke!! Please let Fermis know!!")
|
||||
WARNING("[my_atom] attempted to determine FermiChem pH for '[C.id]' which broke for some reason! ([usr])")
|
||||
//TODO Add CatalystFact
|
||||
message_admins("calculating pH factor(purity), pH: [pH], min: [C.OptimalpHMin]-[C.ReactpHLim], max: [C.OptimalpHMax]+[C.ReactpHLim], deltapH: [deltapH]")
|
||||
//message_admins("calculating pH factor(purity), pH: [pH], min: [C.OptimalpHMin]-[C.ReactpHLim], max: [C.OptimalpHMax]+[C.ReactpHLim], deltapH: [deltapH]")
|
||||
|
||||
//Calculate DeltaT (Deviation of T from optimal)
|
||||
if (cached_temp < C.OptimalTempMax && cached_temp >= C.OptimalTempMin)
|
||||
@@ -676,61 +663,71 @@ im
|
||||
deltaT = 1
|
||||
else
|
||||
deltaT = 0
|
||||
message_admins("calculating temperature factor, min: [C.OptimalTempMin], max: [C.OptimalTempMax], Exponential: [C.CurveSharpT], deltaT: [deltaT]")
|
||||
//message_admins("calculating temperature factor, min: [C.OptimalTempMin], max: [C.OptimalTempMax], Exponential: [C.CurveSharpT], deltaT: [deltaT]")
|
||||
|
||||
|
||||
stepChemAmmount = deltaT //used to have multipler, now it doesn't
|
||||
if (stepChemAmmount > C.RateUpLim)
|
||||
stepChemAmmount = C.RateUpLim
|
||||
else if (stepChemAmmount <= 0.01)
|
||||
message_admins("stepChem underflow [stepChemAmmount]")
|
||||
//message_admins("stepChem underflow [stepChemAmmount]")
|
||||
stepChemAmmount = 0.01
|
||||
|
||||
if ((reactedVol + stepChemAmmount) > targetVol)
|
||||
stepChemAmmount = targetVol - reactedVol
|
||||
message_admins("target volume reached. Reaction should stop after this loop. stepChemAmmount: [stepChemAmmount] + reactedVol: [reactedVol] = targetVol [targetVol]")
|
||||
//message_admins("target volume reached. Reaction should stop after this loop. stepChemAmmount: [stepChemAmmount] + reactedVol: [reactedVol] = targetVol [targetVol]")
|
||||
|
||||
//if (reactedVol > 0)
|
||||
// purity = ((purity * reactedVol) + (deltapH * stepChemAmmount)) /((reactedVol+ stepChemAmmount)) //This should add the purity to the product
|
||||
//else
|
||||
purity = deltapH//set purity equal to pH offset
|
||||
purity = (deltapH)//set purity equal to pH offset
|
||||
|
||||
//TODO: Check overall beaker purity with proc
|
||||
//Then adjust purity of result AND yeild ammount with said purity.
|
||||
|
||||
// End.
|
||||
/*
|
||||
for(var/B in cached_required_reagents) //
|
||||
tempVol = min(reactedVol, round(get_reagent_amount(B) / cached_required_reagents[B]))//a simple one over the other? (Is this for multiplying end product? Useful for toxinsludge buildup)
|
||||
*/
|
||||
message_admins("cached_results: [cached_results], reactedVol: [reactedVol], stepChemAmmount [stepChemAmmount]")
|
||||
//message_admins("cached_results: [cached_results], reactedVol: [reactedVol], stepChemAmmount [stepChemAmmount]")
|
||||
|
||||
|
||||
|
||||
for(var/B in cached_required_reagents)
|
||||
message_admins("cached_required_reagents(B): [cached_required_reagents[B]], reactedVol: [reactedVol], base stepChemAmmount [stepChemAmmount]")
|
||||
//message_admins("cached_required_reagents(B): [cached_required_reagents[B]], reactedVol: [reactedVol], base stepChemAmmount [stepChemAmmount]")
|
||||
remove_reagent(B, (stepChemAmmount * cached_required_reagents[B]), safety = 1)//safety? removes reagents from beaker using remove function.
|
||||
|
||||
for(var/P in cached_results)//Not sure how this works, what is selected_reaction.results?
|
||||
//reactedVol = max(reactedVol, 1) //this shouldnt happen ...
|
||||
SSblackbox.record_feedback("tally", "chemical_reaction", cached_results[P]*stepChemAmmount, P)//log
|
||||
add_reagent(P, cached_results[P]*stepChemAmmount, null, cached_temp, purity)//add reagent function!! I THINK I can do this:
|
||||
add_reagent(P, cached_results[P]*(stepChemAmmount), null, cached_temp, purity)//add reagent function!! I THINK I can do this:
|
||||
//Above should reduce yeild based on holder purity.
|
||||
|
||||
C.FermiCreate(src)
|
||||
message_admins("purity: [purity], purity of beaker")
|
||||
message_admins("Temp before change: [chem_temp], pH after change: [pH]")
|
||||
//message_admins("purity: [purity], purity of beaker")
|
||||
//message_admins("Temp before change: [chem_temp], pH after change: [pH]")
|
||||
//Apply pH changes and thermal output of reaction to beaker
|
||||
chem_temp = round(cached_temp + (C.ThermicConstant * stepChemAmmount)) //Why won't you update!!!
|
||||
//adjust_thermal_energy((cached_temp*(C.ThermicConstant * stepChemAmmount *100)), 0, 1500) //(J, min_temp = 2.7, max_temp = 1000)
|
||||
pH += (C.HIonRelease * stepChemAmmount)
|
||||
message_admins("Temp after change: [chem_temp], pH after change: [pH]")
|
||||
//message_admins("Temp after change: [chem_temp], pH after change: [pH]")
|
||||
|
||||
|
||||
reactedVol = reactedVol + stepChemAmmount
|
||||
|
||||
|
||||
return (reactedVol)
|
||||
/* MOVED TO REAGENTS.DM
|
||||
/datum/reagents/proc/FermiExplode()
|
||||
return
|
||||
*/
|
||||
|
||||
/datum/reagents/proc/update_holder_purity(var/datum/chemical_reaction/fermi/C)
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/i
|
||||
var/cachedPurity
|
||||
//var/fermiChem
|
||||
for(var/reagent in C.required_reagents)
|
||||
cachedPurity += cached_reagents[reagent].purity
|
||||
i++
|
||||
overallPurity = cachedPurity/i
|
||||
|
||||
/datum/reagents/proc/isolate_reagent(reagent)
|
||||
var/list/cached_reagents = reagent_list
|
||||
@@ -877,11 +874,8 @@ im
|
||||
//WIP_TAG //check my maths for purity calculations
|
||||
//Add amount and equalize purity
|
||||
R.volume += amount
|
||||
//Maybe make a pH for reagents, not sure. it's hard to imagine where the H+ ions would go. I'm okay with this solution for now.
|
||||
//R.purity = (our_pure_moles + their_pure_moles) / (R.volume)
|
||||
message_admins("Purity before addition: [R.purity], vol:[R.volume]. Adding [other_purity], vol: [amount]")
|
||||
R.purity = ((R.purity * R.volume) + (other_purity * amount)) /((R.volume + amount)) //This should add the purity to the product
|
||||
message_admins("Purity after [R.purity]")
|
||||
|
||||
|
||||
update_total()
|
||||
if(my_atom)
|
||||
@@ -918,7 +912,7 @@ im
|
||||
if(!no_react)
|
||||
handle_reactions()
|
||||
if(isliving(my_atom))
|
||||
R.on_mob_add(my_atom)
|
||||
R.on_mob_add(my_atom, amount)
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
@@ -16,8 +16,9 @@
|
||||
var/convert_damage = FALSE //If you want to convert the caster's health to the shift, and vice versa.
|
||||
var/convert_damage_type = BRUTE //Since simplemobs don't have advanced damagetypes, what to convert damage back into.
|
||||
|
||||
var/shapeshift_type
|
||||
var/shapeshift_type //Incase I ever get lucky enough to be a wizard. Also why can you be a dog but not a cat!! Racist
|
||||
var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\
|
||||
/mob/living/simple_animal/pet/cat,\
|
||||
/mob/living/simple_animal/pet/dog/corgi,\
|
||||
/mob/living/simple_animal/hostile/carp/ranged/chaos,\
|
||||
/mob/living/simple_animal/bot/ed209,\
|
||||
@@ -167,4 +168,4 @@
|
||||
|
||||
/datum/soullink/shapeshift/sharerDies(gibbed, mob/living/sharer)
|
||||
if(source)
|
||||
source.shapeDeath(gibbed)
|
||||
source.shapeDeath(gibbed)
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
M.Dizzy(1)
|
||||
|
||||
/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
//TODO: add lung damage = less oxygen gains
|
||||
if((H.status_flags & GODMODE))
|
||||
return
|
||||
if(H.has_trait(TRAIT_NOBREATH))
|
||||
@@ -157,7 +158,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5*((damage/maxHealth)/2)) //More damaged lungs = slower oxy rate up to a factor of half
|
||||
H.adjustOxyLoss(-5) //More damaged lungs = slower oxy rate up to a factor of half
|
||||
gas_breathed = breath_gases[/datum/gas/oxygen][MOLES]
|
||||
H.clear_alert("not_enough_oxy")
|
||||
|
||||
@@ -186,7 +187,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5*((damage/maxHealth)/2))
|
||||
H.adjustOxyLoss(-5)
|
||||
gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES]
|
||||
H.clear_alert("nitro")
|
||||
|
||||
@@ -223,7 +224,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5*((damage/maxHealth)/2))
|
||||
H.adjustOxyLoss(-5)
|
||||
gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES]
|
||||
H.clear_alert("not_enough_co2")
|
||||
|
||||
@@ -253,7 +254,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5*((damage/maxHealth)/2))
|
||||
H.adjustOxyLoss(-5)
|
||||
gas_breathed = breath_gases[/datum/gas/plasma][MOLES]
|
||||
H.clear_alert("not_enough_tox")
|
||||
|
||||
|
||||
@@ -670,7 +670,7 @@
|
||||
///////////FermiChem//////////////////
|
||||
//////////////////////////////////////
|
||||
//Removed span_list from input arguments. //mob/living/user
|
||||
/proc/velvetspeech(message, mob/living/user, base_multiplier = 1, include_speaker = FALSE, message_admins = TRUE, debug = TRUE)
|
||||
/proc/velvetspeech(message, mob/living/user, base_multiplier = 1, include_speaker = FALSE, message_admins = TRUE, debug = FALSE)
|
||||
message_admins("Velvet speech proc'd on [user]")
|
||||
var/cooldown = 0
|
||||
|
||||
@@ -703,7 +703,7 @@
|
||||
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
|
||||
continue
|
||||
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)//Check to see if pet is on cooldown from last command
|
||||
if (E.cooldown >= 0)//If they're on cooldown you can't give them more commands.
|
||||
if (E.cooldown > 0)//If they're on cooldown you can't give them more commands.
|
||||
continue
|
||||
listeners += L
|
||||
if(debug == TRUE)
|
||||
@@ -812,7 +812,7 @@
|
||||
//phase 3
|
||||
var/static/regex/statecustom_words = regex("state triggers|state your triggers")
|
||||
var/static/regex/custom_words = regex("new trigger|listen to me")
|
||||
var/static/regex/custom_words_words = regex("speak|echo|shock|cum|kneel|strip|objective")//What a descriptive name!
|
||||
var/static/regex/custom_words_words = regex("speak|echo|shock|cum|kneel|strip|trance")//What a descriptive name!
|
||||
var/static/regex/objective_words = regex("new objective|obey this command|unable to resist|compulsed")
|
||||
var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die")
|
||||
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
|
||||
@@ -827,6 +827,8 @@
|
||||
|
||||
//enthral_words, reward_words, silence_words attract_words punish_words desire_words resist_words forget_words
|
||||
|
||||
//CALLBACKS ARE USED FOR MESSAGES BECAUSE SAY IS HANDLED AFTER THE PROCESSING.
|
||||
|
||||
//Tier 1
|
||||
//ENTHRAL mixable
|
||||
if(findtext(message, enthral_words))
|
||||
@@ -876,7 +878,7 @@
|
||||
if((findtext(message, saymyname_words)))
|
||||
for(var/V in listeners)
|
||||
var/mob/living/carbon/C = V
|
||||
C.remove_trait(TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
C.remove_trait(TRAIT_MUTE, "enthrall")
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "Master"), 5)//When I figure out how to do genedered names put them here
|
||||
|
||||
//WAKE UP
|
||||
@@ -889,7 +891,7 @@
|
||||
if(0)
|
||||
E.phase = 3
|
||||
E.status = null
|
||||
addtimer(CALLBACK(L, /atom/movable/proc/to_chat, "<span class='warning'>The snapping of your Master's fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>"), 5)
|
||||
addtimer(CALLBACK(L, /proc/to_chat, "<span class='warning'>The snapping of your Master's fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>"), 5)
|
||||
//to_chat(L, )
|
||||
|
||||
|
||||
@@ -900,7 +902,7 @@
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
power_multiplier *= distancelist[get_dist(user, C)+1]
|
||||
if (E.phase == 3) //If target is fully enthralled,
|
||||
C.add_trait(TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
C.add_trait(TRAIT_MUTE, "enthrall")
|
||||
else
|
||||
C.silent += ((10 * power_multiplier) * E.phase)
|
||||
E.cooldown += 3
|
||||
@@ -933,11 +935,12 @@
|
||||
else if((findtext(message, forget_words)))
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
C.Sleeping(50)
|
||||
to_chat(C, "<span class='warning'>You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!</b></span>")
|
||||
C.Sleeping(50)
|
||||
switch(E.phase)
|
||||
if(1 to 2)
|
||||
E.phase = -1
|
||||
to_chat(C, "<span class='big warning'>You have no recollection of being enthralled by [E.master]</b></span>")
|
||||
if(3)
|
||||
E.phase = 0
|
||||
E.cooldown = 0
|
||||
@@ -951,22 +954,6 @@
|
||||
E.cooldown += 3
|
||||
|
||||
|
||||
//ORGASM
|
||||
else if((findtext(message, orgasm_words)))
|
||||
for(var/V in listeners)
|
||||
var/mob/living/carbon/human/H = V
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(H.canbearoused && H.has_dna()) // probably a redundant check but for good measure
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.setArousalLoss(H.min_arousal)
|
||||
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
|
||||
E.enthrallTally += power_multiplier
|
||||
else
|
||||
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
|
||||
E.enthrallTally += power_multiplier*1.1
|
||||
to_chat(H, "<span class='warning'>Your Masters command whites out your mind in bliss!</b></span>")
|
||||
E.cooldown += 6
|
||||
|
||||
//teir 2
|
||||
|
||||
|
||||
@@ -976,7 +963,7 @@
|
||||
var/mob/living/carbon/human/H = V
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase > 1)
|
||||
if(H.canbearoused && H.has_dna()) // probably a redundant check but for good measure
|
||||
if(H.canbearoused) // probably a redundant check but for good measure
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.setArousalLoss(H.min_arousal)
|
||||
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
|
||||
@@ -1007,7 +994,7 @@
|
||||
if(2 to INFINITY)
|
||||
var/mob/living/M = V
|
||||
playsound(get_turf(M), pick('sound/effects/meow1.ogg', 'modular_citadel/sound/voice/nya.ogg'), 50, 1, -1)
|
||||
H.emote(H,"lets out a nya!")
|
||||
M.emote(M,"lets out a nya!")
|
||||
E.cooldown += 1
|
||||
|
||||
//SLEEP
|
||||
@@ -1072,10 +1059,10 @@
|
||||
for(var/V in listeners)
|
||||
var/speaktrigger = ""
|
||||
var/mob/living/L = V
|
||||
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if (!E.customTriggers == list())//i.e. if it's not empty
|
||||
for (var/trigger in E.customTriggers)
|
||||
speaktrigger = "[trigger]\n"
|
||||
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)//i.e. if it's not empty
|
||||
for (var/trigger in E.customTriggers)
|
||||
speaktrigger = "[trigger]\n"
|
||||
if(!speaktrigger == "")
|
||||
L.say(speaktrigger)
|
||||
|
||||
//CUSTOM TRIGGERS
|
||||
@@ -1085,7 +1072,7 @@
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase == 3)
|
||||
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
|
||||
to_chat(H, "<span class='warning'>You need to be next to your pet to give them a new trigger!</b></span>")
|
||||
to_chat(user, "<span class='warning'>You need to be next to your pet to give them a new trigger!</b></span>")
|
||||
return
|
||||
else
|
||||
if (E.mental_capacity >= 10)
|
||||
@@ -1110,7 +1097,7 @@
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase == 3)
|
||||
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
|
||||
to_chat(H, "<span class='warning'>You need to be next to your pet to give them a new objective!</b></span>")
|
||||
to_chat(user, "<span class='warning'>You need to be next to your pet to give them a new objective!</b></span>")
|
||||
return
|
||||
else
|
||||
user.emote(user, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.'")
|
||||
@@ -1310,7 +1297,8 @@
|
||||
addtimer(CALLBACK(L, /mob/living/.proc/emote, "deathgasp"), 5 * i)
|
||||
i++
|
||||
*/
|
||||
|
||||
else
|
||||
return
|
||||
if(message_admins)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].")
|
||||
log_game("[key_name(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].")
|
||||
|
||||
@@ -346,6 +346,22 @@ em {font-style: normal; font-weight: bold;}
|
||||
.greentext {color: #00FF00; font-size: 3;}
|
||||
.redtext {color: #FF0000; font-size: 3;}
|
||||
.clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.hypnophrase {color: #202020; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #202020; }
|
||||
25% { color: #4b02ac; }
|
||||
50% { color: #9f41f1; }
|
||||
75% { color: #541c9c; }
|
||||
100% { color: #7adbf3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #f75a5a; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #f75a5a; }
|
||||
}
|
||||
|
||||
|
||||
big img.icon {width: 32px; height: 32px;}
|
||||
|
||||
@@ -359,4 +375,4 @@ big img.icon {width: 32px; height: 32px;}
|
||||
|
||||
/* HELPER CLASSES */
|
||||
.text-normal {font-weight: normal; font-style: normal;}
|
||||
.hidden {display: none; visibility: hidden;}
|
||||
.hidden {display: none; visibility: hidden;}
|
||||
|
||||
@@ -153,6 +153,21 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.redtext {color: #FF0000; font-size: 3;}
|
||||
.clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.hypnophrase {color: #3bb5d3; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #0d0d0d; }
|
||||
25% { color: #410194; }
|
||||
50% { color: #7f17d8; }
|
||||
75% { color: #410194; }
|
||||
100% { color: #3bb5d3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #0d0d0d; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #0d0d0d; }
|
||||
}
|
||||
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
|
||||
@@ -172,7 +172,8 @@
|
||||
//var/mental_cost //Current cost of custom triggers
|
||||
//var/mindbroken = FALSE //Not sure I use this, replaced with phase 4
|
||||
var/datum/weakref/redirect_component //resistance
|
||||
var/datum/weakref/redirect_component2 //say
|
||||
//var/datum/weakref/redirect_component2 //say
|
||||
//var/datum/weakref/redirect_component3 //hear
|
||||
var/distancelist = list(2,1.5,1,0.8,0.6,0.5,0.4,0.3,0.2) //Distance multipliers
|
||||
var/withdrawal = FALSE //withdrawl
|
||||
var/withdrawalTick = 0 //counts how long withdrawl is going on for
|
||||
@@ -194,6 +195,9 @@
|
||||
owner.remove_status_effect(src)//This shouldn't happen, but just in case
|
||||
redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed#
|
||||
//redirect_component2 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_SAY = CALLBACK(src, .proc/owner_say)))) //Do resistance calc if resist is pressed
|
||||
//redirect_component3 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_HEAR = CALLBACK(src, .proc/owner_hear)))) //Do resistance calc if resist is pressed
|
||||
RegisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL, .proc/owner_say)
|
||||
RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear)
|
||||
//Might need to add redirect component for listening too.
|
||||
var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN) //It's their brain!
|
||||
mental_capacity = 500 - B.get_brain_damage()
|
||||
@@ -221,7 +225,7 @@
|
||||
|
||||
//mindshield check
|
||||
if(M.has_trait(TRAIT_MINDSHIELD))//If you manage to enrapture a head, wow, GJ.
|
||||
resistanceTally += 2
|
||||
resistanceTally += 5
|
||||
if(prob(10))
|
||||
to_chat(owner, "<span class='notice'><i>You feel lucidity returning to your mind as the mindshield buzzes, attempting to return your brain to normal function.</i></span>")
|
||||
|
||||
@@ -236,23 +240,26 @@
|
||||
if (enthrallTally > 100)
|
||||
phase += 1
|
||||
mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
|
||||
resistanceTally /= 2
|
||||
enthrallTally = 0
|
||||
to_chat(owner, "<span class='warning'><i>Your conciousness slips, as you sink deeper into trance and servitude.</i></span>")
|
||||
to_chat(owner, "<span class='hypnophrase'><i>Your conciousness slips, as you sink deeper into trance and servitude.</i></span>")
|
||||
else if (resistanceTally > 100)
|
||||
enthrallTally *= 0.5
|
||||
phase = -1
|
||||
resistanceTally = 0
|
||||
to_chat(owner, "<span class='warning'><i>You break free of the influence in your mind, your thoughts suddenly turning lucid!</i></span>")
|
||||
to_chat(owner, "<span class='big redtext'><i>You're now free of [master]'s influence, and fully independant oncemore.'</i></span>")
|
||||
owner.remove_status_effect(src) //If resisted in phase 1, effect is removed.
|
||||
if(prob(10))
|
||||
to_chat(owner, "<span class='notice'><i>[pick("It feels so good to listen to [master].", "You can't keep your eyes off [master].", "[master]'s voice is making you feel so sleepy.", "You feel so comfortable with [master]", "[master] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
to_chat(owner, "<span class='small hypnophrase'><i>[pick("It feels so good to listen to [master].", "You can't keep your eyes off [master].", "[master]'s voice is making you feel so sleepy.", "You feel so comfortable with [master]", "[master] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
if (2) //partially enthralled
|
||||
if (enthrallTally > 150)
|
||||
phase += 1
|
||||
mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
|
||||
enthrallTally = 0
|
||||
resistanceTally /= 2
|
||||
to_chat(owner, "<span class='notice'><i>Your mind gives, eagerly obeying and serving [master].</i></span>")
|
||||
to_chat(owner, "<span class='warning'><i>You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are much less likely to resort to violence, unless it is to defend your [enthrallGender]. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. </i></span>")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
|
||||
to_chat(owner, "<span class='big nicegreen'><i>You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are much less likely to resort to violence, unless it is to defend your [enthrallGender]. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. </i></span>")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
|
||||
else if (resistanceTally > 150)
|
||||
enthrallTally *= 0.5
|
||||
phase -= 1
|
||||
@@ -260,15 +267,15 @@
|
||||
to_chat(owner, "<span class='notice'><i>You manage to shake some of the entrancement from your addled mind, however you can still feel yourself drawn towards [master].</i></span>")
|
||||
//owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. Not at the moment,
|
||||
if(prob(10))
|
||||
to_chat(owner, "<span class='notice'><i>[pick("It feels so good to listen to [enthrallGender].", "You can't keep your eyes off [enthrallGender].", "[enthrallGender]'s voice is making you feel so sleepy.", "You feel so comfortable with [enthrallGender]", "[enthrallGender] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
to_chat(owner, "<span class='hypnophrase'><i>[pick("It feels so good to listen to [enthrallGender].", "You can't keep your eyes off [enthrallGender].", "[enthrallGender]'s voice is making you feel so sleepy.", "You feel so comfortable with [enthrallGender]", "[enthrallGender] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
if (3)//fully entranced
|
||||
if (resistanceTally >= 250 && withdrawalTick >= 150)
|
||||
if (resistanceTally >= 200 && withdrawalTick >= 150)
|
||||
enthrallTally = 0
|
||||
phase -= 1
|
||||
resistanceTally = 0
|
||||
to_chat(owner, "<span class='notice'><i>The separation from you [enthrallGender] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.</i></span>")
|
||||
if(prob(2))
|
||||
to_chat(owner, "<span class='notice'><i>[pick("I belong to [enthrallGender].", "[enthrallGender] known's whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
if(prob(3))
|
||||
to_chat(owner, "<span class='hypnophrase'><i>[pick("I belong to [enthrallGender].", "[enthrallGender] knows whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
if (4) //mindbroken
|
||||
if (mental_capacity >= 499 || owner.getBrainLoss() >=20 || !owner.reagents.has_reagent("MKUltra"))
|
||||
phase = 2
|
||||
@@ -284,7 +291,8 @@
|
||||
//distance calculations
|
||||
switch(get_dist(master, owner))
|
||||
if(0 to 8)//If the enchanter is within range, increase enthrallTally, remove withdrawal subproc and undo withdrawal effects.
|
||||
enthrallTally += distancelist[get_dist(master, owner)+1]
|
||||
if(phase <= 2)
|
||||
enthrallTally += distancelist[get_dist(master, owner)+1]
|
||||
withdrawal = FALSE
|
||||
if(withdrawalTick > 0)
|
||||
withdrawalTick -= 2
|
||||
@@ -301,31 +309,31 @@
|
||||
//Withdrawal subproc:
|
||||
if (withdrawal == TRUE)//Your minions are really REALLY needy.
|
||||
switch(withdrawalTick)//denial
|
||||
if(20 to 40)//Gives wiggle room, so you're not SUPER needy
|
||||
if(10 to 35)//Gives wiggle room, so you're not SUPER needy
|
||||
if(prob(5))
|
||||
to_chat(owner, "You're starting to miss your [enthrallGender].")
|
||||
to_chat(owner, "<span class='notice'><i>You're starting to miss your [enthrallGender].</i></span>")
|
||||
if(prob(5))
|
||||
owner.adjustBrainLoss(0.5)
|
||||
to_chat(owner, "Master will surely be back soon") //denial
|
||||
if(41)
|
||||
to_chat(owner, "<i>Master will surely be back soon</i>") //denial
|
||||
if(36)
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1)
|
||||
if(42 to 65)//barganing
|
||||
if(prob(5))
|
||||
to_chat(owner, "They are coming back, right...?")
|
||||
if(37 to 65)//barganing
|
||||
if(prob(10))
|
||||
to_chat(owner, "<i>They are coming back, right...?</i>")
|
||||
owner.adjustBrainLoss(1)
|
||||
if(prob(5))
|
||||
to_chat(owner, "I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.")
|
||||
if(prob(10))
|
||||
to_chat(owner, "<i>I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.</i>")
|
||||
owner.adjustBrainLoss(-1)
|
||||
if(66)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1") //Why does this not work?
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing2", /datum/mood_event/enthrallmissing2)
|
||||
owner.stuttering += 20
|
||||
owner.jitteriness += 20
|
||||
owner.stuttering += 200
|
||||
owner.jitteriness += 200
|
||||
if(67 to 90) //anger
|
||||
if(prob(10))
|
||||
addtimer(CALLBACK(M, /mob/verb/a_intent_change, INTENT_HARM), 2)
|
||||
addtimer(CALLBACK(M, /mob/proc/click_random_mob), 2)
|
||||
to_chat(owner, "You suddenly lash out at the station in anger for it keeping you away from your [enthrallGender].")
|
||||
to_chat(owner, "<span class='warning'>You are overwhelmed with anger at the lack of [enthrallGender]'s presence and suddenly lash out!</span>")
|
||||
owner.adjustBrainLoss(1)
|
||||
if(90)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") //Why does this not work?
|
||||
@@ -334,10 +342,10 @@
|
||||
if(91 to 120)//depression
|
||||
if(prob(20))
|
||||
owner.adjustBrainLoss(2.5)
|
||||
owner.stuttering += 2
|
||||
owner.jitteriness += 2
|
||||
owner.stuttering += 20
|
||||
owner.jitteriness += 20
|
||||
if(prob(25))
|
||||
M.hallucination += 2
|
||||
M.hallucination += 20
|
||||
if(121)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3")
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing4", /datum/mood_event/enthrallmissing4)
|
||||
@@ -348,34 +356,34 @@
|
||||
owner.emote("cry")//does this exist?
|
||||
to_chat(owner, "You're unable to hold back your tears, suddenly sobbing as the desire to see your [enthrallGender] oncemore overwhelms you.")
|
||||
owner.adjustBrainLoss(5)
|
||||
owner.stuttering += 2
|
||||
owner.jitteriness += 2
|
||||
owner.stuttering += 20
|
||||
owner.jitteriness += 20
|
||||
if(prob(5))
|
||||
deltaResist += 5
|
||||
if(140 to INFINITY) //acceptance
|
||||
if(prob(15))
|
||||
deltaResist += 5
|
||||
if(prob(20))
|
||||
to_chat(owner, "Maybe you'll be okay without your [enthrallGender].")
|
||||
to_chat(owner, "<i><span class='small green'>Maybe you'll be okay without your [enthrallGender].</i></span>")
|
||||
if(prob(10))
|
||||
owner.adjustBrainLoss(2)
|
||||
M.hallucination += 5
|
||||
M.hallucination += 50
|
||||
|
||||
withdrawalTick += 0.5
|
||||
|
||||
//Status subproc - statuses given to you from your Master
|
||||
//currently 3 statuses; antiresist -if you press resist, increases your enthrallment instead, HEAL - which slowly heals the pet, CHARGE - which breifly increases speed, PACIFY - makes pet a pacifist.
|
||||
if (!status == null)
|
||||
if (status)
|
||||
|
||||
if(status = "Antiresist")
|
||||
if (statusStrength == 0)
|
||||
if(status == "Antiresist")
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
to_chat(owner, "You feel able to resist oncemore.")
|
||||
else
|
||||
statusStrength -= 1
|
||||
|
||||
else if(status = "heal")
|
||||
if (statusStrength == 0)
|
||||
else if(status == "heal")
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
to_chat(owner, "You finish licking your wounds.")
|
||||
else
|
||||
@@ -383,13 +391,13 @@
|
||||
owner.heal_overall_damage(1, 1, 0, FALSE, FALSE)
|
||||
cooldown += 1 //Cooldown doesn't process till status is done
|
||||
|
||||
else if(status = "charge")
|
||||
else if(status == "charge")
|
||||
owner.add_trait(TRAIT_GOTTAGOFAST, "MKUltra")
|
||||
status = "charged"
|
||||
to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!")
|
||||
|
||||
else if (status = "charged")
|
||||
if (statusStrength == 0)
|
||||
else if (status == "charged")
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
owner.remove_trait(TRAIT_GOTTAGOFAST, "MKUltra")
|
||||
owner.Knockdown(30)
|
||||
@@ -398,7 +406,7 @@
|
||||
statusStrength -= 1
|
||||
cooldown += 1 //Cooldown doesn't process till status is done
|
||||
|
||||
else if (status = "pacify")
|
||||
else if (status == "pacify")
|
||||
owner.add_trait(TRAIT_PACIFISM, "MKUltra")
|
||||
status = null
|
||||
|
||||
@@ -432,6 +440,10 @@
|
||||
redirect_component = null
|
||||
//qdel(redirect_component2.resolve())
|
||||
//redirect_component2 = null
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
|
||||
UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL)
|
||||
//qdel(redirect_component3.resolve())
|
||||
//redirect_component3 = null
|
||||
|
||||
/*
|
||||
/datum/status_effect/chem/enthrall/mob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
@@ -441,34 +453,37 @@
|
||||
. = ..()
|
||||
*/
|
||||
//Doesn't work
|
||||
/datum/status_effect/chem/enthrall/proc/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
|
||||
/datum/status_effect/chem/enthrall/proc/owner_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
var/mob/living/carbon/C = owner
|
||||
message_admins("[C] heard something!")
|
||||
//message_admins("[C] heard something!")
|
||||
for (var/trigger in customTriggers)
|
||||
if (trigger == message)//if trigger1 is the message
|
||||
//cached_trigger = lowertext(trigger)
|
||||
message_admins("[C] heard something: [message] vs [trigger] vs [raw_message]")
|
||||
if ("[trigger]" == raw_message)//if trigger1 is the message
|
||||
message_admins("[C] has been triggered with [trigger]!")
|
||||
|
||||
//Speak (Forces player to talk)
|
||||
if (customTriggers[trigger][1] == "speak")//trigger2
|
||||
C.visible_message("<span class='notice'>Your mouth moves on it's own, before you can even catch it. You find yourself fully believing in the validity of what you just said and don't think to question it.</span>")
|
||||
if (lowertext(customTriggers[trigger][1]) == "speak")//trigger2
|
||||
to_chat(C, "<span class='notice'><i>Your mouth moves on it's own, before you can even catch it. You find yourself fully believing in the validity of what you just said and don't think to question it.</i></span>")
|
||||
(C.say(customTriggers[trigger][2]))//trigger3
|
||||
|
||||
|
||||
//Echo (repeats message!)
|
||||
else if (customTriggers[trigger][1] == "echo")//trigger2
|
||||
(to_chat(owner, customTriggers[trigger][2]))//trigger3
|
||||
else if (lowertext(customTriggers[trigger][1]) == "echo")//trigger2
|
||||
(to_chat(owner, "<span class='hypnophrase'><i>[customTriggers[trigger][2]]</i></span>"))//trigger3
|
||||
|
||||
//Shocking truth!
|
||||
else if (customTriggers[trigger] == "shock")
|
||||
else if (lowertext(customTriggers[trigger]) == "shock")
|
||||
if (C.canbearoused)
|
||||
C.electrocute_act(10, src, 1, FALSE, FALSE, FALSE, TRUE)//I've no idea how strong this is
|
||||
C.adjustArousalLoss(5)
|
||||
to_chat(owner, "<span class='notice'><i>Your muscles seize up, then start spasming wildy!</i></span>")
|
||||
to_chat(owner, "<span class='warning'><i>Your muscles seize up, then start spasming wildy!</i></span>")
|
||||
else
|
||||
C.electrocute_act(15, src, 1, FALSE, FALSE, FALSE, TRUE)//To make up for the lack of effect
|
||||
|
||||
//wah intensifies
|
||||
else if (customTriggers[trigger][1] == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
else if (lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
if (C.canbearoused)
|
||||
if (C.getArousalLoss() > 80)
|
||||
C.mob_climax(forced_climax=TRUE)
|
||||
@@ -478,17 +493,22 @@
|
||||
C.throw_at(get_step_towards(speaker,C), 3, 1) //cut this if it's too hard to get working
|
||||
|
||||
//kneel (knockdown)
|
||||
else if (customTriggers[trigger][1] == "kneel")//as close to kneeling as you can get, I suppose.
|
||||
else if (lowertext(customTriggers[trigger]) == "kneel")//as close to kneeling as you can get, I suppose.
|
||||
C.Knockdown(20)
|
||||
|
||||
//strip (some) clothes
|
||||
else if (customTriggers[trigger][1] == "strip")//This wasn't meant to just be a lewd thing oops
|
||||
else if (customTriggers[trigger] == "strip")//This wasn't meant to just be a lewd thing oops
|
||||
var/mob/living/carbon/human/o = owner
|
||||
var/items = o.get_contents()
|
||||
for(var/obj/item/W in items)
|
||||
if(W == o.w_uniform || W == o.wear_suit)
|
||||
o.dropItemToGround(W, TRUE)
|
||||
C.visible_message("<span class='notice'>You feel compelled to strip your clothes.</span>")
|
||||
C.visible_message("<span class='notice'><i>You feel compelled to strip your clothes.</i></span>")
|
||||
|
||||
//trance
|
||||
else if (customTriggers[trigger] == "trance")
|
||||
var/mob/living/carbon/human/o = owner
|
||||
o.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
|
||||
|
||||
//add more fun stuff!
|
||||
|
||||
@@ -505,14 +525,14 @@
|
||||
if (status == "Sleeper" || phase == 0)
|
||||
return
|
||||
else if (phase == 4)
|
||||
to_chat(owner, "<span class='notice'><i>Your mind is too far gone to even entertain the thought of resisting.</i></span>")
|
||||
to_chat(owner, "<span class='hypnophrase'><i>Your mind is too far gone to even entertain the thought of resisting.</i></span>")
|
||||
return
|
||||
else if (phase == 3 && withdrawal == FALSE)
|
||||
to_chat(owner, "<span class='notice'><i>The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance.</i></span>")
|
||||
to_chat(owner, "<span class='hypnophrase'><i>The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance.</i></span>")
|
||||
return
|
||||
else if (status == "Antiresist")//If ordered to not resist; resisting while ordered to not makes it last longer, and increases the rate in which you are enthralled.
|
||||
if (statusStrength > 0)
|
||||
to_chat(owner, "<span class='notice'><i>The order from your [enthrallGender] to give in is conflicting with your attempt to resist, drawing you deeper into trance.</i></span>")
|
||||
to_chat(owner, "<span class='warning'><i>The order from your [enthrallGender] to give in is conflicting with your attempt to resist, drawing you deeper into trance.</i></span>")
|
||||
statusStrength += 1
|
||||
enthrallTally += 1
|
||||
return
|
||||
@@ -593,7 +613,8 @@
|
||||
message_admins("[M] is trying to resist with a delta of [deltaResist]!")
|
||||
return
|
||||
|
||||
/datum/status_effect/chem/enthrall/proc/owner_say(message) //I can only hope this works
|
||||
/datum/status_effect/chem/enthrall/proc/owner_say(mob/speaker, message) //I can only hope this works
|
||||
|
||||
//var/datum/status_effect/chem/enthrall/E = owner.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
//var/mob/living/master = E.master
|
||||
message_admins("[owner] said something")
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
//H.update_body()
|
||||
|
||||
/datum/species/proc/handle_genitals(mob/living/carbon/human/H)
|
||||
message_admins("attempting to update sprite")
|
||||
//message_admins("attempting to update sprite")
|
||||
if(!H)//no args
|
||||
CRASH("H = null")
|
||||
if(!LAZYLEN(H.internal_organs))//if they have no organs, we're done
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
var/statuscheck = FALSE
|
||||
var/prev_size = 6
|
||||
|
||||
/obj/item/organ/genital/penis/Initialize()
|
||||
. = ..()
|
||||
prev_size = length
|
||||
cached_length = length
|
||||
|
||||
/obj/item/organ/genital/penis/update_size()
|
||||
var/mob/living/carbon/human/o = owner
|
||||
@@ -33,32 +37,32 @@
|
||||
length = cached_length
|
||||
size = 1
|
||||
if(statuscheck == TRUE)
|
||||
message_admins("Attempting to remove.")
|
||||
//message_admins("Attempting to remove.")
|
||||
o.remove_status_effect(/datum/status_effect/chem/PElarger)
|
||||
statuscheck = FALSE
|
||||
if(5 to 8) //If modest size
|
||||
length = cached_length
|
||||
size = 2
|
||||
if(statuscheck == TRUE)
|
||||
message_admins("Attempting to remove.")
|
||||
//message_admins("Attempting to remove.")
|
||||
o.remove_status_effect(/datum/status_effect/chem/PElarger)
|
||||
statuscheck = FALSE
|
||||
if(9 to INFINITY) //If massive
|
||||
length = cached_length
|
||||
size = 3 //no new sprites for anything larger yet
|
||||
if(statuscheck == FALSE)
|
||||
message_admins("Attempting to apply.")
|
||||
//message_admins("Attempting to apply.")
|
||||
o.remove_status_effect(/datum/status_effect/chem/PElarger)
|
||||
statuscheck = TRUE
|
||||
if(15 to INFINITY)
|
||||
length = cached_length
|
||||
size = 3 //no new sprites for anything larger yet
|
||||
if(statuscheck == FALSE)
|
||||
message_admins("Attempting to apply.")
|
||||
//message_admins("Attempting to apply.")
|
||||
o.apply_status_effect(/datum/status_effect/chem/PElarger)
|
||||
statuscheck = TRUE
|
||||
message_admins("Pinas size: [size], [cached_length], [o]")
|
||||
message_admins("2. size vs prev_size")
|
||||
//message_admins("Pinas size: [size], [cached_length], [o]")
|
||||
//message_admins("2. size vs prev_size")
|
||||
if (round(length) > round(prev_size))
|
||||
to_chat(o, "<span class='warning'>Your [pick("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger")] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(length)] inch penis.</b></span>")
|
||||
else if (round(length) < round(prev_size))
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
id = "fermi" //It's meeee
|
||||
taste_description = "If affection had a taste, this would be it."
|
||||
var/ImpureChem = "toxin" // What chemical is metabolised with an inpure reaction
|
||||
var/InverseChemVal = 0 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising
|
||||
var/InverseChem = "Initropidril" // What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it.
|
||||
var/InverseChemVal = 0.25 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising
|
||||
var/InverseChem = "toxin" // What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it.
|
||||
var/DoNotSplit = FALSE // If impurity is handled within the main chem itself
|
||||
|
||||
///datum/reagent/fermi/on_mob_life(mob/living/carbon/M)
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
//This should process fermichems to find out how pure they are and what effect to do.
|
||||
//TODO: add this to the main on_mob_add proc, and check if Fermichem = TRUE
|
||||
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M)
|
||||
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount)
|
||||
. = ..()
|
||||
if(!M)
|
||||
return
|
||||
@@ -44,15 +44,15 @@
|
||||
if (src.purity == 1 || src.DoNotSplit == TRUE)
|
||||
return
|
||||
else if (src.InverseChemVal > src.purity)
|
||||
M.reagents.remove_reagent(src, volume, FALSE)
|
||||
M.reagents.add_reagent(src.InverseChem, volume, FALSE, other_purity = 1)
|
||||
M.reagents.remove_reagent(src.id, amount, FALSE)
|
||||
M.reagents.add_reagent(src.InverseChem, amount, FALSE, other_purity = 1)
|
||||
message_admins("all convered to [src.InverseChem]")
|
||||
return
|
||||
else
|
||||
//var/pureVol = volume * purity
|
||||
var/impureVol = volume * (1 - (volume * purity))
|
||||
message_admins("splitting [src] [volume] into [src.ImpureChem] [impureVol]")
|
||||
M.reagents.remove_reagent(src, (volume*impureVol), FALSE)
|
||||
//var/pureVol = amount * purity
|
||||
var/impureVol = amount * (1 - purity)
|
||||
message_admins("splitting [src.id] [amount] into [src.ImpureChem] [impureVol]")
|
||||
M.reagents.remove_reagent(src.id, (impureVol), FALSE)
|
||||
M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1)
|
||||
return
|
||||
|
||||
@@ -66,15 +66,15 @@
|
||||
if (other_purity == 1 || src.DoNotSplit == TRUE)
|
||||
return
|
||||
else if (src.InverseChemVal > other_purity)
|
||||
M.reagents.remove_reagent(src, amount, FALSE)
|
||||
M.reagents.remove_reagent(src.id, amount, FALSE)
|
||||
M.reagents.add_reagent(src.InverseChem, amount, FALSE, other_purity = 1)
|
||||
message_admins("all convered to [src.InverseChem]")
|
||||
return
|
||||
else
|
||||
//var/pureVol =
|
||||
var/impureVol = amount * (1 - (amount * other_purity))
|
||||
message_admins("splitting [src] [volume] into [src.ImpureChem] [impureVol]")
|
||||
M.reagents.remove_reagent(src, impureVol, FALSE)
|
||||
var/impureVol = amount * (1 - other_purity)
|
||||
message_admins("splitting [src] [amount] into [src.ImpureChem] [impureVol]")
|
||||
M.reagents.remove_reagent(src.id, impureVol, FALSE)
|
||||
M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1)
|
||||
return
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
taste_description = "wiggly cosmic dust."
|
||||
color = "#5020H4" // rgb: 50, 20, 255
|
||||
overdose_threshold = 15
|
||||
addiction_threshold = 20
|
||||
addiction_threshold = 15
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
addiction_stage2_end = 30
|
||||
addiction_stage3_end = 40
|
||||
@@ -525,7 +525,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
var/startHunger
|
||||
|
||||
/datum/reagent/fermi/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
|
||||
message_admins("SGZF ingested")
|
||||
//message_admins("SGZF ingested")
|
||||
switch(current_cycle)//Pretends to be normal
|
||||
if(20)
|
||||
to_chat(M, "<span class='notice'>You feel the synethic cells rest uncomfortably within your body as they start to pulse and grow rapidly.</span>")
|
||||
@@ -577,7 +577,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
to_chat(M, "<span class='warning'>A large glob of the tumour suddenly splits itself from your body. You feel grossed out and slimey...</span>")
|
||||
if(87 to INFINITY)//purges chemical fast, producing a "slime" for each one. Said slime is weak to fire. TODO: turn tumour slime into real variant.
|
||||
M.adjustToxLoss(1, 0)
|
||||
message_admins("Growth nucleation occuring (SDGF), step [current_cycle] of 20")
|
||||
//message_admins("Growth nucleation occuring (SDGF), step [current_cycle] of 20")
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -821,6 +821,7 @@ Buginess level: works as intended - except teleport makes sparks for some reason
|
||||
var/mob/living/simple_animal/hostile/retaliate/ghost/G = null
|
||||
var/antiGenetics = 255
|
||||
var/sleepytime = 0
|
||||
InverseChemVal = 0.25
|
||||
//var/Svol = volume
|
||||
|
||||
/datum/reagent/fermi/astral/on_mob_life(mob/living/M) // Gives you the ability to astral project for a moment!
|
||||
@@ -1215,10 +1216,10 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "MissingLove", /datum/mood_event/MissingLove)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "InLove")
|
||||
if(prob(10))
|
||||
owner.Stun(10)
|
||||
owner.emote("whimper")//does this exist?
|
||||
to_chat(owner, "You're overcome with a desire to see [love].")
|
||||
owner.adjustBrainLoss(5)
|
||||
M.Stun(10)
|
||||
M.emote("whimper")//does this exist?
|
||||
to_chat(M, "You're overcome with a desire to see [love].")
|
||||
M.adjustBrainLoss(5)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/enthrallExplo/on_mob_delete(mob/living/carbon/M)
|
||||
@@ -1446,9 +1447,36 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
name = "Fermis Test Reagent"
|
||||
id = "fermiTest"
|
||||
description = "You should be really careful with this...! Also, how did you get this?"
|
||||
data = "Big bang"
|
||||
data = list("Big bang" = 1, "please work" = 2)
|
||||
|
||||
/datum/reagent/fermi/fermiTest/on_new()
|
||||
..()
|
||||
message_admins("FermiTest addition!")
|
||||
var/location = get_turf(holder.my_atom)
|
||||
if(purity < 0.34 || purity == 1)
|
||||
var/datum/effect_system/foam_spread/s = new()
|
||||
s.set_up(volume*2, location, holder)
|
||||
s.start()
|
||||
if((purity < 0.67 && purity >= 0.34)|| purity == 1)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
s.set_up(holder, volume*2, location)
|
||||
s.start()
|
||||
if(purity >= 0.67)
|
||||
for (var/datum/reagent/reagent in holder.reagent_list)
|
||||
if (istype(reagent, /datum/reagent/fermi))
|
||||
var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id]
|
||||
Ferm.FermiExplode(src, holder.my_atom, holder, holder.total_volume, holder.chem_temp, holder.pH)
|
||||
else
|
||||
var/datum/chemical_reaction/Ferm = GLOB.chemical_reagents_list[reagent.id]
|
||||
Ferm.on_reaction(holder, reagent.volume)
|
||||
for(var/mob/M in viewers(8, location))
|
||||
to_chat(M, "<span class='danger'>The solution reacts dramatically, with a meow!</span>")
|
||||
playsound(get_turf(M), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
|
||||
holder.clear_reagents()
|
||||
|
||||
/datum/reagent/fermi/fermiTest/on_merge()
|
||||
..()
|
||||
message_admins("FermiTest addition!")
|
||||
var/location = get_turf(holder.my_atom)
|
||||
if(purity < 0.34 || purity == 1)
|
||||
var/datum/effect_system/foam_spread/s = new()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
//Called when temperature is above a certain threshold
|
||||
//....Is this too much?
|
||||
/datum/chemical_reaction/fermi/proc/FermiExplode(src, var/atom/my_atom, datum/reagents/holder, volume, temp, pH, Reaction, Exploding = FALSE) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
/datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
//var/Svol = volume
|
||||
if (Exploding == TRUE)
|
||||
return
|
||||
@@ -19,13 +19,13 @@
|
||||
var/ImpureTot = 0
|
||||
var/pHmod = 1
|
||||
var/turf/T = get_turf(my_atom)
|
||||
if(temp>600)//if hot, start a fire
|
||||
if(temp>500)//if hot, start a fire
|
||||
switch(temp)
|
||||
if (601 to 800)
|
||||
if (500 to 750)
|
||||
for(var/turf/turf in range(1,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
//volume /= 3
|
||||
if (801 to 1100)
|
||||
if (751 to 1100)
|
||||
for(var/turf/turf in range(2,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
//volume /= 4
|
||||
@@ -48,8 +48,8 @@
|
||||
pHmod = 1.5
|
||||
for (var/datum/reagent/reagent in my_atom.reagents.reagent_list)
|
||||
if (istype(reagent, /datum/reagent/fermi))
|
||||
var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id]
|
||||
Ferm.FermiExplode(src, my_atom, holder, volume, temp, pH, Exploding = TRUE)
|
||||
//var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id]
|
||||
//Ferm.FermiExplode(src, my_atom, volume, temp, pH, Exploding = TRUE)
|
||||
continue //Don't allow fermichems into the mix (fermi explosions are handled elsewhere and it's a huge pain)
|
||||
R.add_reagent(reagent, reagent.volume)
|
||||
if (reagent.purity < 0.6)
|
||||
@@ -64,7 +64,7 @@
|
||||
my_atom.reagents.clear_reagents()
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/fermi/eigenstate
|
||||
/datum/chemical_reaction/fermi/eigenstate//done
|
||||
name = "Eigenstasium"
|
||||
id = "eigenstate"
|
||||
results = list("eigenstate" = 1)
|
||||
@@ -81,7 +81,7 @@
|
||||
CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value)
|
||||
CurveSharppH = 2 // How sharp the pH exponential curve is (to the power of value)
|
||||
ThermicConstant = -2.5 //Temperature change per 1u produced
|
||||
HIonRelease = 0.01 //pH change per 1u reaction
|
||||
HIonRelease = 0.08 //pH change per 1u reaction
|
||||
RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect
|
||||
FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
|
||||
FermiExplode = FALSE //If the chemical explodes in a special way
|
||||
@@ -98,8 +98,8 @@
|
||||
name = "Synthetic-derived growth factor"
|
||||
id = "SDGF"
|
||||
results = list("SDGF" = 3)
|
||||
required_reagents = list("plasma" = 1, "stable_plasma" = 1, "sugar" = 1)
|
||||
//required_reagents = list("stable_plasma" = 5, "slimejelly" = 5, "synthflesh" = 10, "blood" = 10)
|
||||
//required_reagents = list("plasma" = 1, "stable_plasma" = 1, "sugar" = 1)
|
||||
required_reagents = list("stable_plasma" = 5, "slimejelly" = 5, "synthflesh" = 10, "blood" = 10)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions
|
||||
OptimalTempMax = 500 // Upper end for above
|
||||
@@ -117,17 +117,17 @@
|
||||
FermiExplode = TRUE // If the chemical explodes in a special way
|
||||
PurityMin = 0.25
|
||||
|
||||
/datum/chemical_reaction/fermi/SDGF/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction)//Spawns an angery teratoma!! Spooky..! be careful!! TODO: Add teratoma slime subspecies
|
||||
var/turf/T = get_turf(holder)
|
||||
/datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!! Spooky..! be careful!! TODO: Add teratoma slime subspecies
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/mob/living/simple_animal/slime/S = new(T,"grey")//should work, in theory
|
||||
S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)//I dunno how slimes work cause fire is burny
|
||||
S.name = "Living teratoma"
|
||||
S.real_name = "Living teratoma"//horrifying!!
|
||||
S.rabid = 1//Make them an angery boi, grr grr
|
||||
to_chat("<span class='warning'>The cells clump up into a horrifying tumour!</span>")
|
||||
holder.clear_reagents()
|
||||
my_atom.reagents.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/fermi/BElarger
|
||||
/datum/chemical_reaction/fermi/BElarger //done
|
||||
name = "Sucubus milk"
|
||||
id = "BElarger"
|
||||
results = list("BElarger" = 6)
|
||||
@@ -136,29 +136,29 @@
|
||||
OptimalTempMin = 200
|
||||
OptimalTempMax = 800
|
||||
ExplodeTemp = 900
|
||||
OptimalpHMin = 5
|
||||
OptimalpHMax = 10
|
||||
OptimalpHMin = 8
|
||||
OptimalpHMax = 12
|
||||
ReactpHLim = 3
|
||||
CatalystFact = 0
|
||||
CurveSharpT = 2
|
||||
CurveSharppH = 2
|
||||
ThermicConstant = 1
|
||||
HIonRelease = 0.1
|
||||
RateUpLim = 10
|
||||
HIonRelease = 0.5
|
||||
RateUpLim = 5
|
||||
FermiChem = TRUE
|
||||
FermiExplode = TRUE
|
||||
PurityMin = 0.1
|
||||
|
||||
/datum/chemical_reaction/fermi/BElarger/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction)
|
||||
/datum/chemical_reaction/fermi/BElarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
//var/obj/item/organ/genital/breasts/B =
|
||||
new /obj/item/organ/genital/breasts(get_turf(holder))
|
||||
var/list/seen = viewers(5, get_turf(holder))
|
||||
new /obj/item/organ/genital/breasts(get_turf(my_atom))
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a pair of breasts!</b></span>")//OwO
|
||||
holder.clear_reagents()
|
||||
my_atom.reagents.clear_reagents()
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/fermi/PElarger //Vars needed
|
||||
/datum/chemical_reaction/fermi/PElarger //done
|
||||
name = "Incubus draft"
|
||||
id = "PElarger"
|
||||
results = list("PElarger" = 3)
|
||||
@@ -168,53 +168,52 @@
|
||||
OptimalTempMin = 200
|
||||
OptimalTempMax = 800
|
||||
ExplodeTemp = 900
|
||||
OptimalpHMin = 5
|
||||
OptimalpHMax = 10
|
||||
OptimalpHMin = 2
|
||||
OptimalpHMax = 6
|
||||
ReactpHLim = 3
|
||||
CatalystFact = 0
|
||||
CurveSharpT = 2
|
||||
CurveSharppH = 2
|
||||
ThermicConstant = 1
|
||||
HIonRelease = 0.1
|
||||
RateUpLim = 10
|
||||
HIonRelease = -0.5
|
||||
RateUpLim = 5
|
||||
FermiChem = TRUE
|
||||
FermiExplode = TRUE
|
||||
PurityMin = 0.1
|
||||
|
||||
/datum/chemical_reaction/fermi/PElarger/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction)
|
||||
/datum/chemical_reaction/fermi/PElarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
//var/obj/item/organ/genital/penis/nP =
|
||||
new /obj/item/organ/genital/penis(get_turf(holder))
|
||||
var/list/seen = viewers(5, get_turf(holder))
|
||||
new /obj/item/organ/genital/penis(get_turf(my_atom))
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a penis!</b></span>")//OwO
|
||||
holder.clear_reagents()
|
||||
my_atom.reagents.clear_reagents()
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/fermi/astral //Vars needed
|
||||
/datum/chemical_reaction/fermi/astral //done
|
||||
name = "Astrogen"
|
||||
id = "astral"
|
||||
results = list("astral" = 3)
|
||||
required_reagents = list("eigenstasium" = 1, "plasma" = 1, "synaptizine" = 1, "aluminium" = 5)
|
||||
//required_reagents = list("stable_plasma" = 5, "slimejelly" = 5, "synthflesh" = 10, "blood" = 10)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 200
|
||||
OptimalTempMax = 800
|
||||
ExplodeTemp = 900
|
||||
OptimalpHMin = 5
|
||||
OptimalpHMax = 10
|
||||
ReactpHLim = 3
|
||||
OptimalpHMin = 12
|
||||
OptimalpHMax = 13
|
||||
ReactpHLim = 2
|
||||
CatalystFact = 0
|
||||
CurveSharpT = 2
|
||||
CurveSharpT = 4
|
||||
CurveSharppH = 2
|
||||
ThermicConstant = 1
|
||||
HIonRelease = 0.1
|
||||
ThermicConstant = 10
|
||||
HIonRelease = 0.5
|
||||
RateUpLim = 10
|
||||
FermiChem = TRUE
|
||||
FermiExplode = TRUE
|
||||
PurityMin = 0.25
|
||||
PurityMin = 0.25 // explode purity!
|
||||
|
||||
|
||||
/datum/chemical_reaction/fermi/enthrall //Vars needed
|
||||
/datum/chemical_reaction/fermi/enthrall//done
|
||||
name = "MKUltra"
|
||||
id = "enthrall"
|
||||
results = list("enthrall" = 3)
|
||||
@@ -275,21 +274,21 @@
|
||||
//var/enthrallID = B.get_blood_data()
|
||||
*/
|
||||
|
||||
/datum/chemical_reaction/fermi/enthrall/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction)
|
||||
var/turf/T = get_turf(holder)
|
||||
/datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
R.add_reagent("enthrallExplo", volume)
|
||||
s.set_up(R, volume, T)
|
||||
s.start()
|
||||
holder.clear_reagents()
|
||||
my_atom.reagents.clear_reagents()
|
||||
//..() //Please don't kill everyone too.
|
||||
|
||||
/datum/chemical_reaction/fermi/hatmium
|
||||
/datum/chemical_reaction/fermi/hatmium // done
|
||||
name = "Hat growth serum"
|
||||
id = "hatmium"
|
||||
results = list("hatmium" = 5)
|
||||
required_reagents = list("whiskey" = 1, "nutriment" = 3, "cooking_oil" = 2, "iron" = 1, "blackpepper" = 3)
|
||||
required_reagents = list("whiskey" = 1, "nutriment" = 3, "cooking_oil" = 2, "iron" = 1)
|
||||
//mix_message = ""
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 500
|
||||
@@ -301,27 +300,27 @@
|
||||
//CatalystFact = 0 //To do 1
|
||||
CurveSharpT = 4
|
||||
CurveSharppH = 0.5
|
||||
ThermicConstant = -2.5
|
||||
HIonRelease = 0.01
|
||||
ThermicConstant = -2
|
||||
HIonRelease = -0.05
|
||||
RateUpLim = 5
|
||||
FermiChem = TRUE
|
||||
//FermiExplode = FALSE
|
||||
//PurityMin = 0.15
|
||||
|
||||
/datum/chemical_reaction/fermi/hatmium/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction)
|
||||
var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(holder.my_atom))
|
||||
/datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH)
|
||||
var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
|
||||
hat.animate_atom_living()
|
||||
var/list/seen = viewers(5, get_turf(holder.my_atom))
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The makes an off sounding pop, as a hat suddenly climbs out of the beaker!</b></span>")
|
||||
holder.clear_reagents()
|
||||
my_atom.reagents.clear_reagents()
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/fermi/furranium //low temp and medium pH
|
||||
/datum/chemical_reaction/fermi/furranium //low temp and medium pH - done
|
||||
name = "Furranium"
|
||||
id = "furranium"
|
||||
results = list("furranium" = 5)
|
||||
required_reagents = list("aphro" = 1, "moonsugar" = 1, "silver" = 1, "salglu_solution" = 1)
|
||||
required_reagents = list("aphro" = 1, "moonsugar" = 1, "silver" = 2, "salglu_solution" = 1)
|
||||
//mix_message = ""
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 350
|
||||
@@ -341,7 +340,7 @@
|
||||
//PurityMin = 0.15
|
||||
|
||||
//Nano-b-gone
|
||||
/datum/chemical_reaction/fermi/naninte_b_gone
|
||||
/datum/chemical_reaction/fermi/naninte_b_gone//done
|
||||
name = "Naninte bain"
|
||||
id = "naninte_b_gone"
|
||||
results = list("naninte_b_gone" = 5)
|
||||
@@ -357,9 +356,9 @@
|
||||
//CatalystFact = 0 //To do 1
|
||||
CurveSharpT = 4
|
||||
CurveSharppH = 2
|
||||
ThermicConstant = -2.5
|
||||
ThermicConstant = 1
|
||||
HIonRelease = 0.01
|
||||
RateUpLim = 5
|
||||
RateUpLim = 100
|
||||
FermiChem = TRUE
|
||||
//FermiExplode = FALSE
|
||||
//PurityMin = 0.15
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
item_flags = NODROP //Tips their hat!
|
||||
|
||||
/*
|
||||
/obj/item/clothing/head/hattip/equipped(mob/living/carbon/human/user, slot)
|
||||
C = user //grumble grumble loc
|
||||
*/
|
||||
|
||||
/obj/item/clothing/head/hattip/attack_hand(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
@@ -19,10 +24,23 @@
|
||||
user.emote("me",1,"admires such a spiffy hat.",TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/hattip/speechModification(message)
|
||||
/obj/item/clothing/head/hattip/speechModification(message, /mob/living/carbon/C)
|
||||
..()
|
||||
var/mob/living/carbon/C = get_wearer()//user
|
||||
//if(istype(C, /mob/living/carbon/C))
|
||||
var/obj/item/organ/tongue/T = C.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
if (T.name == "fluffy tongue")
|
||||
if(prob(0.01))
|
||||
message += "\" and tips their hat. \"swpy's sappin' my swentwy uwu!!"
|
||||
return message
|
||||
message += "\" and tips their hat. \"[pick("weehaw!", "bwoy howdy.", "dawn tuutin'.", "weww don't that beat aww.", "whoooowee, wouwd ya wook at that!", "whoooowee! makin' bwacon!", "cweam gwavy!", "yippekeeyah-heeyapeeah-kwayoh!", "mwove 'em uut!", "gwiddy up!")]"
|
||||
return message
|
||||
if(prob(0.01))
|
||||
message += "\" and tips their hat. \"Spy's sappin' my Sentry!"
|
||||
return message
|
||||
message += "\" and tips their hat. \"[pick("Yeehaw!", "Boy howdy.", "Darn tootin'.", "Well don't that beat all.", "Whoooowee, would ya look at that!", "Whoooowee! Makin' bacon!", "Cream Gravy!", "Yippekeeyah-heeyapeeah-kayoh!", "Move 'em out!", "Giddy up!")]"
|
||||
return message
|
||||
|
||||
|
||||
/obj/item/clothing/head/hattip/proc/get_wearer()
|
||||
return loc
|
||||
|
||||
@@ -328,6 +328,7 @@
|
||||
#include "code\datums\actions\beam_rifle.dm"
|
||||
#include "code\datums\actions\ninja.dm"
|
||||
#include "code\datums\brain_damage\brain_trauma.dm"
|
||||
#include "code\datums\brain_damage\hypnosis.dm"
|
||||
#include "code\datums\brain_damage\imaginary_friend.dm"
|
||||
#include "code\datums\brain_damage\mild.dm"
|
||||
#include "code\datums\brain_damage\phobia.dm"
|
||||
|
||||
Reference in New Issue
Block a user