Final changes before checks.

This commit is contained in:
Fermi
2019-05-26 17:37:20 +01:00
parent bd85095590
commit 4cb697d2ec
13 changed files with 180 additions and 30 deletions
+1
View File
@@ -205,6 +205,7 @@
owner.remove_trait(TRAIT_PACIFISM, TRAUMA_TRAIT)
..()
//ported from TG
/datum/brain_trauma/severe/hypnotic_stupor
name = "Hypnotic Stupor"
desc = "Patient is prone to episodes of extreme stupor that leaves them extremely suggestible."
@@ -27,6 +27,7 @@
var/mob/living/L = owner
L.remove_status_effect(STATUS_EFFECT_INLOVE)
/datum/antagonist/valentine/greet()
to_chat(owner, "<span class='warning'><B>You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.</B></span>")
@@ -42,4 +43,26 @@
if(objectives_complete)
return "<span class='greentext big'>[owner.name] protected [owner.p_their()] date</span>"
else
return "<span class='redtext big'>[owner.name] date failed!</span>"
return "<span class='redtext big'>[owner.name] date failed!</span>"
//Just so it's distinct, basically.
/datum/antagonist/valentine/chem/greet()
to_chat(owner, "<span class='warning'><B>You're in love with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.</B></span>")
/datum/antagonist/valentine/chem/check_completion()
if(date.M.stat != DEAD)
return TRUE
return FALSE
/datum/antagonist/valentine/chem/roundend_report()
var/objectives_complete = TRUE
if(owner.objectives.len)
for(var/datum/objective/objective in owner.objectives)
if(!objective.check_completion())
objectives_complete = FALSE
break
if(objectives_complete)
return "<span class='love big'>[owner.name] protected [owner.p_their()] love: [date.name]! <i>What a cutie!</i></span>"
else
return "<span class='redtext big'>[owner.name] date failed!</span>"
+5 -2
View File
@@ -41,9 +41,12 @@
else
L.mind.add_antag_datum(/datum/antagonist/heartbreaker)
/proc/forge_valentines_objective(mob/living/lover,mob/living/date)
/proc/forge_valentines_objective(mob/living/lover,mob/living/date,var/chemLove = FALSE)
lover.mind.special_role = "valentine"
var/datum/antagonist/valentine/V = new
if (chemLove == TRUE)
var/datum/antagonist/valentine/chem/V = new //Changes text and EOG check basically.
else
var/datum/antagonist/valentine/V = new
V.date = date.mind
lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now
+2
View File
@@ -46,6 +46,8 @@
nutrition_ratio = 0.8
else
nutrition_ratio = 1
if(has_trait(TRAIT_HIGH_BLOOD))
nutrition_ratio *= 1.2
if(satiety > 80)
nutrition_ratio *= 1.25
nutrition = max(0, nutrition - nutrition_ratio * HUNGER_FACTOR)
@@ -296,3 +296,109 @@
if(L.a_intent == INTENT_HARM && L.reagents && !stat)
L.reagents.add_reagent("nutriment", 0.4)
L.reagents.add_reagent("vitamin", 0.4)
//Cat made
/mob/living/simple_animal/pet/cat/custom_cat
name = "White cat" //Incase it somehow gets spawned without an ID
desc = "A cute white catto!"
icon_state = "custom_cat"
icon_living = "custom_cat"
icon_dead = "custom_cat_dead"
gender = FEMALE
gold_core_spawnable = NO_SPAWN
health = 50 //So people can't instakill it
maxHealth = 50
//secretcatchemcode, shh!! Of couse I hide it amongst cats. Also, yes, I expect you, Mr.Maintaner to read and review this, dispite it being hidden and not mentioned in the changelogs.
//ChemReactionVars:
/datum/chemical_reaction/fermi/secretcatchem //DONE
name = "secretcatchem"
id = "secretcatchem"
results = list("secretcatchem" = 2)
required_reagents = list("stable_plasma" = 0.5, "sugar" = 0.5, "cream" = 0.5, "blood" = 0.5)
required_catalysts = list("felinidmutationtoxin" = 5)
mix_message = "the reaction gives off a meow!"
//FermiChem vars:
OptimalTempMin = 700 // Lower area of bell curve for determining heat based rate reactions
OptimalTempMax = 800 // Upper end for above
ExplodeTemp = 900 // Temperature at which reaction explodes
OptimalpHMin = 6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
OptimalpHMax = 8 // Higest value for above
ReactpHLim = 2 // How far out pH wil react, giving impurity place (Exponential phase)
CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
CurveSharpT = 0 // How sharp the temperature exponential curve is (to the power of value)
CurveSharppH = 0 // How sharp the pH exponential curve is (to the power of value)
ThermicConstant = 0 // Temperature change per 1u produced
HIonRelease = 0 // pH change per 1u reaction (inverse for some reason)
RateUpLim = 0.1 // 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
PurityMin = 0.2
/datum/chemical_reaction/fermi/secretcatchem/Initialize()
message_admins("randomizing reaction")
OptimalTempMin += rand(-100, 100)
OptimalTempMax += rand(-100, 100)
ExplodeTemp += rand(-100, 100)
OptimalpHMin += rand(-1, 1)
OptimalpHMax += rand(-1, 1)
ReactpHLim += rand(-2, 2)
CurveSharpT += rand(0.01, 5)
CurveSharppH += rand(0.01, 5)
ThermicConstant += rand(-50, 50)
HIonRelease += rand(-0.25, 0.25)
RateUpLim += rand(0, 100)
PurityMin += rand(-0.1, 0.1)
var/additions = list("aluminum", "silver", "gold", "plasma", "silicon", "bluespace")
var/chosenA = pick(additions)
required_reagents[chosenA] = rand(0.1, 1)
/datum/chemical_reaction/fermi/secretcatchem/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
message_admins("Someone found the hidden reaction. Amazing!! Please tell Fermi!!")
//ReagentVars
//Turns you into a cute catto while it's in your system.
//If you manage to gamble perfectly, makes you a catgirl after you transform back. But really, you shouldn't end up with that with how random it is.
/datum/reagent/fermi/secretcatchem //Should I hide this from code divers? A secret cit chem?
name = "secretcatchem" //an attempt at hiding it
id = "secretcatchem"
description = "An illegal and hidden chem that turns people into cats/catgirls. It's said that it's so rare and unstable that having it means you've been blessed."
taste_description = "hairballs and cream"
color = "#ffc224"
var/catshift = FALSE
var/mob/living/simple_animal/pet/cat/custom_cat/catto
//var/mob/living/carbon/human/origin maybe unneeded
/datum/reagent/fermi/secretcatchem/New()
name = "Catgirli[pick("a","u","e","y")]m [pick("apex", "prime", "meow")]"
/datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H)
. = ..()
//origin = H
var/current_species = H.dna.species.type
var/datum/species/mutation = /datum/species/human/felinid
if((mutation && mutation != current_species) && (purity > 0.9))//ONLY if purity is 1, and given the stuff is random. It's basically impossible to get this to 1.
H.set_species(mutation)
H.gender = FEMALE
catshift = TRUE
catto = new(get_turf(H.loc))
H.mind.transfer_to(catto)
H.moveToNullspace()
catto.name = M.name
catto.desc = "A cute catto! They remind you of [M] somehow."
catto.color = "#[dna.features["mcolor"]]"
/datum/reagent/fermi/secretcatchem/on_mob_life(mob/living/carbon/human/H)
if(prob(5))
playsound(get_turf(catto), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
catto.emote("me","lets out a meowrowr!")
..()
/datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H)
var/words = "<span class='notice'>Your body shifts back to normal."
if(catshift == TRUE)
words += " ...But wait, are those ears and a tail?")
to_chat(H, "[words]</span>")
H.doMove(catto)
catto.mind.transfer_to(M)
qdel(catto)
+7 -5
View File
@@ -128,7 +128,7 @@ im
update_total()
handle_reactions()
//pH = REAGENT_NORMAL_PH Maybe unnessicary?
pH = REAGENT_NORMAL_PH //Maybe unnessicary? NO incredibly nessicary, blows the beaker up otherwise
return amount
/datum/reagents/proc/get_master_reagent_name()
@@ -347,7 +347,7 @@ im
/datum/reagents/proc/beaker_check(atom/A)
if(istype(A, /obj/item/reagent_containers/glass/beaker/meta))
return
if(istype(A, /obj/item/reagent_containers/glass/beaker/plastic))
if(istype(A, /obj/item/reagent_containers/glass/beaker/plastic))//reaclly weird how this runtimes but the previous doesn't
if(chem_temp > 444)//assuming polypropylene
var/list/seen = viewers(5, get_turf(A))
var/iconhtml = icon2html(A, seen)
@@ -379,6 +379,10 @@ im
if(reagents_holder_flags & REAGENT_NOREACT) //Not sure on reagents_holder_flags, but I think it checks to see if theres a reaction with current stuff.
return //Yup, no reactions here. No siree.
//QPlasticCheck - this is done to reduce calculations
if (istype(my_atom, /obj/item/reagent_containers/glass/beaker/plastic))
beaker_check()
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.
@@ -692,7 +696,7 @@ 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]")
@@ -728,8 +732,6 @@ im
// 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]")
@@ -18,7 +18,7 @@
var/shapeshift_type //Incase I ever get lucky enough to be a wizard. Also why can you be a dog but not a cat!! I know this isn't fermichem related, but this is really important!!!
var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\
/mob/living/simple_animal/pet/cat,\
/mob/living/simple_animal/pet/cat,\ //TODO: Remember to remove this before making final commit and make a new request for this. But until then, I'm gonna be a catto wizard!
/mob/living/simple_animal/pet/dog/corgi,\
/mob/living/simple_animal/hostile/carp/ranged/chaos,\
/mob/living/simple_animal/bot/ed209,\
Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 62 KiB

@@ -1,5 +1,6 @@
// Citadel-specific Negative Traits
//For reviewers: If you think it's a bad idea, feel free to remove it. I won't be upset :blobcat:
/datum/quirk/Hypno
name = "Hypnotherapy user"
desc = "You had hypnotherapy right before your shift, you're not sure it had any effects, though."
@@ -1,6 +1,5 @@
// Citadel-specific Neutral Traits
//For reviewers: If you think it's a bad idea, feel free to remove it. I won't be upset :blobcat:
/datum/quirk/libido
name = "Nymphomania"
desc = "You're always feeling a bit in heat. Also, you get aroused faster than usual."
@@ -2,8 +2,8 @@
/datum/quirk/BloodPressure
name = "Synthetic blood"
desc = "You've got a new form of synthetic blood that increases the total blood volume inside of you!"
value = 0 //I honeslty dunno if this is a good trait? I just means you use more of medbays blood and make janitors madder.
desc = "You've got a new form of synthetic blood that increases the total blood volume inside of you as well as the rate of replenishment!"
value = 1 //I honeslty dunno if this is a good trait? I just means you use more of medbays blood and make janitors madder, but you also regen blood a lil faster.
mob_trait = TRAIT_HIGH_BLOOD
gain_text = "<span class='notice'>You feel full of blood!</span>"
lose_text = "<span class='notice'>You feel like your blood pressure went down.</span>"
@@ -1159,13 +1159,17 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
if(!creatorID)
message_admins("Something went wrong in enthral creation THIS SHOULD NOT APPEAR")
return
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
if(!ishuman(M))//Just to make sure screwy stuff doesn't happen.
return
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall) //Somehow a beaker got here? (what)
if(E)
return
message_admins("key: [M.ckey] vs [creatorID], ")
if(purity < 0.5)//Impure chems don't function as you expect
return
if((M.ckey == creatorID) && (creatorName == M.real_name)) //same name AND same player - same instance of the player. (should work for clones?)
//if(M.has_status_effect(STATUS_EFFECT_INLOVE) Not sure if I need/want this.
// to_chat(M, "<span class='warning'><i>You are too busy being in love for this to work!</i></span>")
var/obj/item/organ/vocal_cords/Vc = M.getorganslot(ORGAN_SLOT_VOICE)
var/obj/item/organ/vocal_cords/nVc = new /obj/item/organ/vocal_cords/velvet
if(Vc)
@@ -1254,7 +1258,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
E.master = creator
else
E = M.has_status_effect(/datum/status_effect/chem/enthrall)
to_chat(M, "<span class='warning'><i>Your mind shatters under the volume of the mild altering chem inside of you, breaking all will and thought completely. Instead the only force driving you now is the instinctual desire to obey and follow [creatorName].</i></span>")
to_chat(M, "<span class='love'><i>Your mind shatters under the volume of the mild altering chem inside of you, breaking all will and thought completely. Instead the only force driving you now is the instinctual desire to obey and follow [creatorName].</i></span>")
M.slurring = 100
M.confused = 100
E.phase = 4
@@ -1288,7 +1292,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
if(!love)
return
M.apply_status_effect(STATUS_EFFECT_INLOVE, love)
to_chat(M, "<span class='notice'>You develop overwhelmingly deep feelings for [love], your heart beginning to race as you look upon them with new eyes. You are determined to keep them safe above all other priorities.</span>")
to_chat(M, "<span class='big love'>You develop overwhelmingly deep feelings for [love], your heart beginning to race as you look upon them with new eyes. You are determined to keep them safe above all other priorities.</span>")
else
if(get_dist(M, love) < 8)
if(M.has_trait(TRAIT_NYMPHO)) //Add this back when merged/updated.
@@ -1301,7 +1305,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
if(prob(10))
M.Stun(10)
M.emote("whimper")//does this exist?
to_chat(M, "<span class='notice'> You're overcome with a desire to see [love].</span>")
to_chat(M, "<span class='love'> You're overcome with a desire to see [love].</span>")
M.adjustBrainLoss(1)//I found out why everyone was so damaged!
..()
@@ -1316,12 +1320,12 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
if(Lover.has_status_effect(STATUS_EFFECT_INLOVE))
to_chat(Lover, "<span class='warning'>You are already fully devoted to someone else!</span>")
return
to_chat(Lover, "<span class='notice'>You develop deep feelings for [Love], your heart beginning to race as you look upon them with new eyes.</span>")
to_chat(Lover, "<span class='love'>You develop deep feelings for [Love], your heart beginning to race as you look upon them with new eyes.</span>")
if(Lover.mind)
Lover.mind.store_memory("You are in love with [Love].")
Lover.faction |= "[REF(Love)]"
Lover.apply_status_effect(STATUS_EFFECT_INLOVE, Love)
forge_valentines_objective(Lover, Love)
forge_valentines_objective(Lover, Love, TRUE)
return
//Requires player to be within vicinity of creator
@@ -1367,7 +1371,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
/datum/reagent/fermi/hatmium/on_mob_life(mob/living/carbon/human/M)
//hat.armor = list("melee" = (1+(current_cycle/20)), "bullet" = (1+(current_cycle/20)), "laser" = (1+(current_cycle/20)), "energy" = (1+(current_cycle/20)), "bomb" = (1+(current_cycle/20)), "bio" = (1+(current_cycle/20)), "rad" = (1+(current_cycle/20)), "fire" = (1+(current_cycle/20)), "acid" = (1+(current_cycle/20)))
var/hatArmor = (1+(current_cycle/100))*purity
var/hatArmor = (1+(current_cycle/30))*purity
if(!overdosed)
hat.armor = list("melee" = hatArmor, "bullet" = hatArmor, "laser" = hatArmor, "energy" = hatArmor, "bomb" = hatArmor, "bio" = hatArmor, "rad" = hatArmor, "fire" = hatArmor)
else
@@ -1393,6 +1397,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
var/obj/item/organ/tongue/nT
DoNotSplit = TRUE
pH = 5
var/obj/item/organ/tongue/T
/datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M)
@@ -1415,7 +1420,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
if(seen)
to_chat(M, "You notice [pick(seen)]'s bulge [pick("OwO!", "uwu!")]")
if(21)
var/obj/item/organ/tongue/T = M.getorganslot(ORGAN_SLOT_TONGUE)
T = M.getorganslot(ORGAN_SLOT_TONGUE)
var/obj/item/organ/tongue/nT = new /obj/item/organ/tongue/OwO
T.Remove(M)
nT.Insert(M)
@@ -1436,6 +1441,14 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
to_chat(M, "You notice [pick(seen)]'s bulge [pick("OwO!", "uwu!")]")
..()
/datum/reagent/fermi/furranium/on_mob_delete(mob/living/carbon/M)
if(purity <= 0.9)//Only permanent if you're a good chemist.
nT = M.getorganslot(ORGAN_SLOT_TONGUE)
nT.Remove(M)
T.Insert(M)
to_chat(M, "<span class='notice'>You feel your tongue.... unfluffify...?</span>"
M.say("Pleh!")
///////////////////////////////////////////////////////////////////////////////////////////////
//Nanite removal
@@ -26,18 +26,18 @@
var/datum/effect_system/smoke_spread/chem/s = new()
if(pH < 4) //if acidic, make acid spray
//s.set_up(/datum/reagent/fermi/fermiAcid, (volume/3), pH*10, T)
R.add_reagent("fermiAcid", ((volume/3)/pH))
pHmod = 2
my_atom.reagents.add_reagent("fermiAcid", ((volume/3)/pH))
//pHmod = 2
for (var/datum/reagent/reagent in my_atom.reagents.reagent_list) //make gas for reagents
/*if (istype(reagent, /datum/reagent/fermi))
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)
//R.add_reagent(reagent, reagent.volume)
if (reagent.purity < 0.6)
ImpureTot = (ImpureTot + (1-reagent.purity)) / 2
if(R.reagent_list)
s.set_up(R, (volume/10)*pHmod, 10, T)
s.set_up(my_atom.reagents, (volume/10), 10, T)
s.start()
if(temp>500)//if hot, start a fire
@@ -59,7 +59,7 @@
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round((volume/30)*(pH-9)), T, 0, 0)
e.start()
pHmod = 1.5
//pHmod = 1.5
if(!ImpureTot == 0) //If impure, v.small emp
ImpureTot *= volume
@@ -92,7 +92,7 @@
/datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
var/location = get_turf(my_atom)
var/turf/open/location = get_turf(my_atom)
var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list
E.location_created = location
//add on_new() handling of vars
@@ -253,11 +253,11 @@
message_admins("On finish for enthral proc'd")
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in my_atom.reagents.reagent_list
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list
if(!B)
if(!B.data)
var/list/seen = viewers(5, get_turf(my_atom))
for(var/mob/M in seen)
to_chat(M, "<span class='warning'>The reaction splutters and fails to react.</span>")
//E.purity = 0
to_chat(M, "<span class='warning'>The reaction splutters and fails to react.</span>") //if this appears, WHAT?!
E.purity = 0
if (B.data.["gender"] == "female")
E.data.["creatorGender"] = "Mistress"
E.creatorGender = "Mistress"
@@ -278,7 +278,7 @@
s.set_up(R, volume, T)
s.start()
my_atom.reagents.clear_reagents()
..(volume = 0, pH = 7, purity = 1) //Just a lil fire.
..(volume = 0, pH = 7) //Just a lil fire.
/datum/chemical_reaction/fermi/hatmium // done
name = "Hat growth serum"