Explode proc set up
This commit is contained in:
@@ -16,41 +16,45 @@
|
||||
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/DoNotSplit = FALSE // If impurity is handled within the main chem itself
|
||||
|
||||
///datum/reagent/fermi/on_mob_life(mob/living/carbon/M)
|
||||
//current_cycle++
|
||||
//holder.remove_reagent(src.id, metabolization_rate / M.metabolism_efficiency, FALSE) //fermi reagents stay longer if you have a better metabolism
|
||||
//return ..()
|
||||
|
||||
//Called when reaction stops.
|
||||
//Called when reaction stops. #STOP_PROCESSING
|
||||
/datum/reagent/fermi/proc/FermiFinish(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
return
|
||||
|
||||
//Called when added to a beaker without the reagent added.
|
||||
//Called when added to a beaker without any of the reagent present. #add_reagent
|
||||
/datum/reagent/fermi/proc/FermiNew(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
return
|
||||
|
||||
//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)
|
||||
message_admins("purity of chem is [src.purity]")
|
||||
if(src.purity < 0)
|
||||
CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!")
|
||||
if (src.purity == 1)
|
||||
if (src.purity == 1 || src.DoNotSplit == TRUE)
|
||||
return
|
||||
else if (src.InverseChemVal > src.purity)
|
||||
holder.remove_reagent(src.id, volume, FALSE)
|
||||
holder.add_reagent(src.InverseChem, volume, FALSE)
|
||||
M.reagents.remove_reagent(src.id, volume, FALSE)
|
||||
M.reagents.add_reagent(src.InverseChem, volume, FALSE)
|
||||
message_admins("all convered to []")
|
||||
return
|
||||
else
|
||||
var/pureVol = volume * purity
|
||||
var/impureVol = volume * (1 - pureVol)
|
||||
holder.remove_reagent(src.id, (volume*impureVol), FALSE)
|
||||
holder.add_reagent(src.ImpureChem, impureVol, FALSE)
|
||||
M.reagents.remove_reagent(src.id, (volume*impureVol), FALSE)
|
||||
M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE)
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///datum/reagent/fermi/overdose_start(mob/living/carbon/M)
|
||||
//current_cycle++
|
||||
|
||||
@@ -1023,16 +1027,15 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
description = "A forbidden deep red mixture that overwhelms a foreign body with waves of pleasure, intoxicating them into servitude. When taken by the creator, it will enhance the draw of their voice to those affected by it."
|
||||
color = "#2C051A" // rgb: , 0, 255
|
||||
taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses"
|
||||
//metabolization_rate = 0.5
|
||||
overdose_threshold = 100 //If this is too easy to get 100u of this, then double it please.
|
||||
//addiction_threshold = 30
|
||||
//addiction_stage1_end = 9999//Should never end.
|
||||
DoNotSplit = TRUE
|
||||
var/creatorID //ckey
|
||||
var/creatorGender
|
||||
var/creatorName
|
||||
var/mob/living/creator
|
||||
|
||||
/datum/reagent/fermi/enthrall/FermiFinish()
|
||||
|
||||
/datum/reagent/fermi/enthrall/FermiNew()
|
||||
message_admins("On new for enthral proc'd")
|
||||
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
|
||||
//var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in holder.reagent_list
|
||||
@@ -1050,6 +1053,8 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
. = ..()
|
||||
if(!creatorID)
|
||||
CRASH("Something went wrong in enthral creation")
|
||||
if(purity < 0.5)//Impure chems don't function as you expect
|
||||
return
|
||||
else if(M.key == creatorID && creatorName == M.real_name) //same name AND same player - same instance of the player. (should work for clones?)
|
||||
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
|
||||
@@ -1067,12 +1072,26 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
|
||||
|
||||
/datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M)
|
||||
if(purity < 0.5)//Placeholder for now. I'd like to get this done.
|
||||
if (M.key == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them.
|
||||
var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers
|
||||
if(!seen)
|
||||
return
|
||||
M.reagents.remove_reagent(src.id, src.volume)
|
||||
FallInLove(M, seen)
|
||||
return
|
||||
else // If someone else drinks it, the creator falls in love with them!
|
||||
var/mob/living/carbon/C = get_mob_by_key(creatorID)
|
||||
if(C in viewers(7, get_turf(M)))
|
||||
M.reagents.remove_reagent(src.id, src.volume)
|
||||
FallInLove(C, M)
|
||||
return
|
||||
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
E.enthrallTally += 1
|
||||
M.adjustBrainLoss(0.1)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/enthrall/overdose_start(mob/living/carbon/M)
|
||||
/datum/reagent/fermi/enthrall/overdose_start(mob/living/carbon/M)//I have no idea what happens if you OD yourself honestly.
|
||||
. = ..()
|
||||
M.add_trait(TRAIT_PACIFISM, "MKUltra")
|
||||
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
@@ -1092,6 +1111,18 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
M.adjustBrainLoss(0.2)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/enthrall/proc/FallInLove(mob/living/carbon/Lover, mob/living/carbon/Love)
|
||||
if(Lover.has_status_effect(STATUS_EFFECT_INLOVE))
|
||||
to_chat(Lover, "<span class='warning'>You are already fully devoted to your love!</span>")
|
||||
return
|
||||
to_chat(Lover, "<span class='notice'>You develop feelings for [Love], and anyone they like.</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)
|
||||
return
|
||||
|
||||
//Requires player to be within vicinity of creator
|
||||
//bonuses to mood
|
||||
//gives creator a silver(velvet?) tongue
|
||||
@@ -1116,6 +1147,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
taste_description = "like jerky, whiskey and an off aftertaste of a crypt"
|
||||
overdose_threshold = 100
|
||||
var/obj/item/clothing/head/hattip/hat
|
||||
DoNotSplit = TRUE
|
||||
|
||||
|
||||
/datum/reagent/fermi/hatmium/on_mob_add(mob/living/carbon/human/M)
|
||||
@@ -1130,13 +1162,11 @@ 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/10))
|
||||
var/hatArmor = (1+(current_cycle/10))*purity
|
||||
if(!overdosed)
|
||||
for (var/i in hat.armor)
|
||||
hat.armor = list("melee" = hatArmor, "bullet" = hatArmor, "laser" = hatArmor, "energy" = hatArmor, "bomb" = hatArmor, "bio" = hatArmor, "rad" = hatArmor, "fire" = hatArmor)
|
||||
hat.armor = list("melee" = hatArmor, "bullet" = hatArmor, "laser" = hatArmor, "energy" = hatArmor, "bomb" = hatArmor, "bio" = hatArmor, "rad" = hatArmor, "fire" = hatArmor)
|
||||
else
|
||||
for (var/i in hat.armor)
|
||||
hat.armor = list("melee" = -hatArmor, "bullet" = -hatArmor, "laser" = -hatArmor, "energy" = -hatArmor, "bomb" = -hatArmor, "bio" = -hatArmor, "rad" = -hatArmor, "fire" = -hatArmor)
|
||||
hat.armor = list("melee" = -hatArmor, "bullet" = -hatArmor, "laser" = -hatArmor, "energy" = -hatArmor, "bomb" = -hatArmor, "bio" = -hatArmor, "rad" = -hatArmor, "fire" = -hatArmor)
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1154,6 +1184,9 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
description = "OwO whats this?"
|
||||
color = "#H04044" // rgb: , 0, 255
|
||||
taste_description = "dewicious degenyewacy"
|
||||
InverseChemVal = 0
|
||||
var/obj/item/organ/tongue/nT
|
||||
DoNotSplit = TRUE
|
||||
|
||||
/datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -1188,38 +1221,78 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
if(prob(20))
|
||||
var/list/seen = viewers(5, get_turf(M))//Sound and sight checkers
|
||||
//for(var/victim in seen)
|
||||
to_chat(M, "You notice [pick(seen)]'s bulge [pick("OwO!", "uwu!")]")
|
||||
if(seen)
|
||||
to_chat(M, "You notice [pick(seen)]'s bulge [pick("OwO!", "uwu!")]")
|
||||
nT.maxHealth += purity //I like to have some reason for purity..!
|
||||
..()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/* Needs to be fixed, I cannot get it to work and it's giving me compile errors aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
//Needs to be fixed, I cannot get it to work and it's giving me compile errors aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
//Nanite removal
|
||||
//Writen by Trilby!!
|
||||
//Status: Done - needs bug test
|
||||
/datum/reagent/fermi/naninte_b_gone
|
||||
name = "Naninte bain"
|
||||
id = "naninte_b_gone"
|
||||
description = "A rather simple toxin to small nano machines that will kill them off at a rapid rate well in system."
|
||||
color = "#5a7267" // rgb: 90, 114, 103
|
||||
overdose_threshold = 25
|
||||
v/component/nanites/nan
|
||||
overdose_threshold = 15
|
||||
ImpureChem = "naninte_b_goneTox" //If you make an inpure chem, it stalls growth
|
||||
InverseChemVal = 0.25
|
||||
InverseChem = "naninte_b_goneTox" //At really impure vols, it just becomes 100% inverse
|
||||
|
||||
/datum/reagent/fermi/naninte_b_gone/on_mob_life(mob/living/carbon/C)
|
||||
var/component/nanites/nane = C.GetComponent(/component/nanites)
|
||||
if(isnull(nane))
|
||||
//var/component/nanites/N = M.GetComponent(/datum/component/nanites)
|
||||
GET_COMPONENT_FROM(N, /datum/component/nanites, C)
|
||||
if(isnull(N))
|
||||
return
|
||||
nane.regen_rate = -5.0//This seems really high
|
||||
N.regen_rate = -0.25//This seems really high
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/naninte_b_gone/overdose_start(mob/living/carbon/C)
|
||||
var/component/nanites/nane = C.GetComponent(/component/nanites)
|
||||
if(isnull(nane))
|
||||
//var/component/nanites/N = M.GetComponent(/datum/component/nanites)
|
||||
GET_COMPONENT_FROM(N, /datum/component/nanites, C)
|
||||
if(isnull(N))
|
||||
return
|
||||
nane.regen_rate = -7.5//12.5 seems crazy high?
|
||||
*/
|
||||
N.regen_rate = -1//12.5 seems crazy high?
|
||||
if(prob(20))
|
||||
to_chat(C, "<span class='warning'>The residual voltage from the nanites causes you to seize up!</b></span>")
|
||||
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
|
||||
if(prob(10))
|
||||
empulse((get_turf(C)), 3, 2)//So the nanites randomize
|
||||
to_chat(C, "<span class='warning'>The nanintes short circuit within your system!</b></span>")
|
||||
..()
|
||||
|
||||
/*
|
||||
_________________________________________
|
||||
||Fermichem toxic / impure chems here. ||
|
||||
|| ||
|
||||
||_______________________________________||
|
||||
*/
|
||||
//Unobtainable, used if SDGF is impure but not too impure
|
||||
/datum/reagent/fermi/naninte_b_goneTox
|
||||
name = "Naninte bain"
|
||||
id = "naninte_b_goneTox"
|
||||
description = "Poorly made, and shocks you!"
|
||||
metabolization_rate = 1
|
||||
|
||||
//Increases shock events.
|
||||
/datum/reagent/fermi/naninte_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
|
||||
if(prob(20))
|
||||
to_chat(C, "<span class='warning'>The residual voltage in your system causes you to seize up!</b></span>")
|
||||
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
|
||||
if(prob(10))
|
||||
empulse((get_turf(C)), 2, 1, 1)//So the nanites randomize
|
||||
to_chat(C, "<span class='warning'>You feel your hair stand on end as you glow brightly for a moment!</b></span>")
|
||||
..()
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/reagent/fermi/fermiAcid
|
||||
name = "Acid vapour"
|
||||
id = "fermiAcid"
|
||||
description = "Someone didn't do like an otter, and add acid to water."
|
||||
|
||||
/datum/reagent/fermi/fermiAcid/on_mob_life(mob/living/carbon/C)
|
||||
var/target = C.get_bodypart(BODY_ZONE_CHEST)
|
||||
if(prob(20))
|
||||
to_chat(C, "<span class='warning'>You can feel your lungs burning!</b></span>")
|
||||
C.apply_damage(2, BURN, target)
|
||||
var/obj/item/organ/lungs/L = C.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
L.adjustLungLoss(2)
|
||||
|
||||
@@ -4,8 +4,41 @@
|
||||
/datum/chemical_reaction/fermi/proc/FermiCreate(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
return
|
||||
|
||||
//Called for every reaction step
|
||||
/datum/chemical_reaction/fermi/proc/FermiExplode(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
//Called when temperature is above a certain threshold
|
||||
//....Is this too much?
|
||||
/datum/chemical_reaction/fermi/proc/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
var/Svol = volume
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
if(temp>600)//if hot, start a fire
|
||||
switch(temp)
|
||||
if (601 to 800)
|
||||
for(var/turf/turf in range(1,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume /= 3
|
||||
if (801 to 1100)
|
||||
for(var/turf/turf in range(2,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume /= 4
|
||||
if (1101 to INFINITY)
|
||||
for(var/turf/turf in range(3,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume /= 5
|
||||
|
||||
var/datum/effect_system/smoke_spread/chem/smoke_machine/s = new
|
||||
if(pH < 2.5)
|
||||
s.set_up("fermiAcid", (volume/3), pH*10, T)
|
||||
volume /=3
|
||||
for (var/reagent in holder.reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
s.set_up(R.id, R.volume/3, pH*10, T)
|
||||
//R.on_reaction(T, volume/10) //Uneeded, I think (hope)
|
||||
s.start()
|
||||
|
||||
if (pH > 12)
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round(volume/Svol, 1), T, 0, 0)
|
||||
e.start()
|
||||
message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], containing [holder.reagent_list]")
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/fermi/eigenstate
|
||||
@@ -30,6 +63,7 @@
|
||||
FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
|
||||
FermiExplode = FALSE //If the chemical explodes in a special way
|
||||
|
||||
|
||||
/datum/chemical_reaction/fermi/eigenstate/FermiCreate(datum/reagents/holder)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in holder.reagent_list
|
||||
@@ -99,7 +133,6 @@
|
||||
RateUpLim = 5
|
||||
FermiChem = TRUE
|
||||
FermiExplode = FALSE
|
||||
ImpureChem = "carpotoxin"
|
||||
|
||||
/datum/chemical_reaction/enthral
|
||||
name = "need a name"
|
||||
|
||||
Reference in New Issue
Block a user