More fixed upon the last!

This commit is contained in:
Fermi
2019-05-21 22:06:55 +01:00
parent ac3f0c790e
commit 485def8d28
4 changed files with 61 additions and 35 deletions
+2 -2
View File
@@ -902,7 +902,7 @@ im
my_atom.on_reagent_change(ADD_REAGENT)
//if(R.FermiChem == TRUE)
// R.on_mob_add(my_atom)
R.on_merge(data, amount)
R.on_merge(data, amount, my_atom, other_purity)
if(!no_react)
handle_reactions()
@@ -920,7 +920,7 @@ im
R.data = data
R.on_new(data)
if(R.addProc == TRUE)
R.on_new()
R.on_new(my_atom)
if(istype(D, /datum/reagent/fermi))//Is this a fermichem?
var/datum/reagent/fermi/Ferm = D //It's Fermi time!
Ferm.FermiNew(my_atom) //Seriously what is "data" ????
+32 -14
View File
@@ -805,11 +805,13 @@
var/static/regex/strip_words = regex("strip|derobe|nude")
var/static/regex/walk_words = regex("slow down")
var/static/regex/run_words = regex("run")
var/static/regex/liedown_words = regex("lie down") //TO ADD
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel")
//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|trance")//What a descriptive name!
var/static/regex/recognise_words = regex("recognise me|i'm back|did you miss me?")
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")
@@ -839,7 +841,7 @@
else
E.enthrallTally += power_multiplier*1.25
if(L.canbearoused)
addtimer(CALLBACK(L, .proc/to_chat, "<span class='nicegreen'>[E.master] is so nice to listen to.</b></span>"), 5)
addtimer(CALLBACK(L, .proc.to_chat, "<span class='nicegreen'>[E.master] is so nice to listen to.</b></span>"), 5)
E.cooldown += 1
//REWARD mixable works
@@ -852,10 +854,10 @@
if (L.canbearoused)
//E.resistanceTally -= 1
L.adjustArousalLoss(1*power_multiplier)
addtimer(CALLBACK(L, .proc/to_chat, "<span class='nicegreen'>[E.enthrallGender] has praised me!!</b></span>"), 5)
addtimer(CALLBACK(L, .proc.to_chat, "<span class='nicegreen'>[E.enthrallGender] has praised me!!</b></span>"), 5)
else
E.resistanceTally /= 2*power_multiplier
addtimer(CALLBACK(L, .proc/to_chat, "<span class='nicegreen'>I've been praised for doing a good job!</b></span>"), 5)
addtimer(CALLBACK(L, .proc.to_chat, "<span class='nicegreen'>I've been praised for doing a good job!</b></span>"), 5)
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallpraise", /datum/mood_event/enthrallpraise)
E.cooldown += 1
@@ -869,10 +871,10 @@
if (L.canbearoused)
E.resistanceTally /= 1*power_multiplier
L.adjustArousalLoss(-2*power_multiplier)
addtimer(CALLBACK(L, .proc/to_chat, "<span class='warning'>I've let [E.enthrallGender] down...</b></span>"), 5)
addtimer(CALLBACK(L, .proc.to_chat, "<span class='warning'>I've let [E.enthrallGender] down...</b></span>"), 5)
else
E.resistanceTally /= 3*power_multiplier //asexuals are masochists apparently (not seriously)
addtimer(CALLBACK(L, .proc/to_chat, "<span class='warning'>I've failed [E.master]...</b></span>"), 5)
addtimer(CALLBACK(L, .proc.to_chat, "<span class='warning'>I've failed [E.master]...</b></span>"), 5)
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallscold", /datum/mood_event/enthrallscold)
E.cooldown += 1
@@ -898,9 +900,9 @@
E.phase = 3
E.status = null
if(L.canbearoused)
addtimer(CALLBACK(L, .proc/to_chat, "<span class='big warning'>The snapping of your [E.enthrallGender]'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='big warning'>The snapping of your [E.enthrallGender]'s fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>"), 5)
else
addtimer(CALLBACK(L, .proc/to_chat, "<span class='big warning'>The snapping of [E.master]'s fingers brings you back to being under their command.</b></span>"), 5)
addtimer(CALLBACK(L, .proc.to_chat, "<span class='big warning'>The snapping of [E.master]'s fingers brings you back to being under their command.</b></span>"), 5)
//to_chat(L, )
@@ -954,9 +956,9 @@
E.phase = 0
E.cooldown = 0
if(C.canbearoused)
addtimer(CALLBACK(C, .proc/to_chat, "<span class='big warning'>You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened.</b></span>"), 5)
addtimer(CALLBACK(C, .proc.to_chat, "<span class='big warning'>You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened.</b></span>"), 5)
else
addtimer(CALLBACK(C, .proc/to_chat, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master].</b></span>"), 5)
addtimer(CALLBACK(C, .proc.to_chat, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master].</b></span>"), 5)
//ATTRACT
else if((findtext(message, attract_words)))
@@ -1071,12 +1073,15 @@
else if((findtext(message, statecustom_words)))//doesn't work
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)//i.e. if it's not empty
var/mob/living/carbon/C = V
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)//i.e. if it's not empty
for (var/trigger in E.customTriggers)
speaktrigger = "[trigger]\n"
speaktrigger += "[trigger], "
if(!speaktrigger == "")
L.say(speaktrigger)
C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself!
addtimer(CALLBACK(C, /atom/movable/proc/say, "[speaktrigger]"), 5)
C.remove_trait(TRAIT_DEAF, "Triggers")
//CUSTOM TRIGGERS
else if((findtext(message, custom_words)))
@@ -1132,6 +1137,19 @@
to_chat(user, "<span class='warning'>Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them</b></span>")
//RECOGNISE
else if((findtext(message, recognise_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(E.phase > 1)
if(user.ckey == E.enthrallID && user.real_name == E.master.real_name)
E.master = user
if(H.canbearoused)
addtimer(CALLBACK(H, .proc.to_chat, "<span class='nicegreen'>You hear the words of your [E.enthrallID] again!! They're back!!</b></span>"), 5)
else
addtimer(CALLBACK(H, .proc.to_chat, "<span class='nicegreen'>You recognise the words of [user], and comply with their orders oncemore.</b></span>"), 5)//It's a bit like a job, It's a living.
//I dunno how to do state objectives without them revealing they're an antag
//HEAL (maybe make this nap instead?)
@@ -1146,7 +1164,7 @@
E.cooldown += 5
//STUN
if(findtext(message, stun_words))
else if(findtext(message, stun_words))
for(var/V in listeners)
var/mob/living/L = V
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
@@ -463,7 +463,7 @@
else
. = ..()
*/
//Doesn't work
//WORKS!! AAAAA
/datum/status_effect/chem/enthrall/proc/owner_hear(var/hearer, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
//message_admins("post: hear:[hearer], msg:[message], spk:[speaker], lng:[message_language], raw:[raw_message], freq:[radio_freq], spen:[spans], mod:[message_mode]")
@@ -471,22 +471,22 @@
//message_admins("[C] heard something!")
raw_message = lowertext(raw_message)
for (var/trigger in customTriggers)
//cached_trigger = lowertext(trigger)
message_admins("[C] heard something: [message] vs [trigger] vs [raw_message]")
if ("[trigger]" == raw_message)//if trigger1 is the message
var/cached_trigger = lowertext(trigger)
//message_admins("[C] heard something: [message] vs [trigger] vs [raw_message]")
if (findtext(raw_message, cached_trigger))//if trigger1 is the message
message_admins("[C] has been triggered with [trigger]!")
//Speak (Forces player to talk)
//Speak (Forces player to talk) works
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>")
to_chat(C, "<span class='notice'><i>Your body 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!)
//Echo (repeats message!) works
else if (lowertext(customTriggers[trigger][1]) == "echo")//trigger2
(to_chat(owner, "<span class='hypnophrase'><i>[customTriggers[trigger][2]]</i></span>"))//trigger3
//Shocking truth!
//Shocking truth! works
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
@@ -495,7 +495,7 @@
else
C.electrocute_act(15, src, 1, FALSE, FALSE, FALSE, TRUE)//To make up for the lack of effect
//wah intensifies
//wah intensifies wah-rks
else if (lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
if (C.canbearoused)
if (C.getArousalLoss() > 80)
@@ -507,7 +507,8 @@
//kneel (knockdown)
else if (lowertext(customTriggers[trigger]) == "kneel")//as close to kneeling as you can get, I suppose.
C.Knockdown(20)
C.resting = 1
C.lying = 1
//strip (some) clothes
else if (lowertext(customTriggers[trigger]) == "strip")//This wasn't meant to just be a lewd thing oops
@@ -516,7 +517,7 @@
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'><i>You feel compelled to strip your clothes.</i></span>")
to_chat(owner,"<span class='notice'><i>You feel compelled to strip your clothes.</i></span>")
//trance
else if (lowertext(customTriggers[trigger]) == "trance")
@@ -56,23 +56,25 @@
M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1)
return
/datum/reagent/fermi/on_merge(mob/living/carbon/M, amount, other_purity)
//When merging two fermichems
/datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)
. = ..()
message_admins("purity of chem is [purity]")
if(!M)
return
message_admins("purity of chem is [purity]")
if(other_purity < 0)
if (purity < 0)
CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!")
if (other_purity == 1 || src.DoNotSplit == TRUE)
if (purity == 1 || src.DoNotSplit == TRUE)
return
else if (src.InverseChemVal > other_purity)
else if (src.InverseChemVal > purity)
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 - other_purity)
var/impureVol = amount * (1 - 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)
@@ -334,9 +336,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
pollStarted = TRUE
candies = pollGhostCandidates("Do you want to play as a clone and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you.")
if(20 to INFINITY)
message_admins("Number of candidates [LAZYLEN(candies)]")
//message_admins("Number of candidates [LAZYLEN(candies)]")
if(LAZYLEN(candies) && src.playerClone == FALSE) //If there's candidates, clone the person and put them in there!
message_admins("Candidate found!")
message_admins("Candidate found! [candies] is becomeing a clone of [M]! Hee~!! Exciting!!")
to_chat(M, "<span class='warning'>The cells reach a critical micelle concentration, nucleating rapidly within your body!</span>")
//var/typepath = owner.type
//clone = new typepath(owner.loc)
@@ -420,6 +422,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
M.adjustBruteLoss(-1, 0)
M.adjustFireLoss(-1, 0)
M.heal_bodypart_damage(1,1)
M.reagents.remove_reagent(src.id, 1)//faster rate of loss.
else //If there's no ghosts, but they've made a large amount, then proceed to make flavourful clone, where you become fat and useless until you split.
switch(current_cycle)
if(21)
@@ -448,7 +451,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
if(87 to INFINITY)
M.reagents.remove_reagent(src.id, 1000)//removes SGDF on completion. Has to do it this way because of how i've coded it. If some madlab gets over 1k of SDGF, they can have the clone healing.
message_admins("Purging SGDF [volume]")
message_admins("Growth nucleation occuring (SDGF), step [current_cycle] of 77")
//message_admins("Growth nucleation occuring (SDGF), step [current_cycle] of 77")
..()
@@ -1470,6 +1473,10 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
/datum/reagent/fermi/fermiTest/on_new()
..()
if(LAZYLEN(holder.reagent_list) == 1)
return
else
holder.remove_reagent(src.id, 1000)//Avoiding recurrsion
message_admins("FermiTest addition!")
var/location = get_turf(holder.my_atom)
if(purity < 0.34 || purity == 1)