Added OwO chem,

Fixed asset growth
Added new sprites
This commit is contained in:
Fermi
2019-04-30 01:02:01 +01:00
parent 55cb20ddc9
commit 4bd2da202b
6 changed files with 249 additions and 43 deletions
+24
View File
@@ -196,3 +196,27 @@
/obj/item/organ/tongue/robot/get_spans() /obj/item/organ/tongue/robot/get_spans()
return ..() | SPAN_ROBOT return ..() | SPAN_ROBOT
//FermiChem
/obj/item/organ/tongue/OwO
name = "fluffy tongue"
desc = "OwO what's this?"
icon_state = "tonguenormal"
taste_sensitivity = 10 // extra sensitive and inquisitive uwu
/obj/item/organ/tongue/OwO/TongueSpeech(var/message)
if(copytext(message, 1, 2) != "*")
message = replacetext(message, "ne", "nye")
message = replacetext(message, "nu", "nyu")
message = replacetext(message, "na", "nya")
message = replacetext(message, "no", "nyo")
message = replacetext(message, "ove", "uv")
message = replacetext(message, "ove", "uv")
message = replacetext(message, "th", "ff")
message = replacetext(message, "l", "w")
message = replacetext(message, "r", "w")
if(prob(20))
message = replacetext(message, ".", "OwO.")
else if(prob(30))
message = replacetext(message, ".", "uwu.")
message = lowertext(message)
@@ -81,7 +81,7 @@
if (cached_size == null) if (cached_size == null)
prev_size = size prev_size = size
return return
message_admins("Breast size at start: [size], [cached_size], [owner]") //message_admins("Breast size at start: [size], [cached_size], [owner]")
if(cached_size < 0)//I don't actually know what round() does to negative numbers, so to be safe!! if(cached_size < 0)//I don't actually know what round() does to negative numbers, so to be safe!!
to_chat(owner, "<span class='warning'>You feel your breasts shrinking away from your body as your chest flattens out.</b></span>") to_chat(owner, "<span class='warning'>You feel your breasts shrinking away from your body as your chest flattens out.</b></span>")
src.Remove(owner) src.Remove(owner)
@@ -116,7 +116,7 @@
size = "flat" size = "flat"
if(isnum(prev_size)) if(isnum(prev_size))
prev_size = breast_sizes[prev_size] prev_size = breast_sizes[prev_size]
message_admins("2. [breast_values[size]] vs [breast_values[prev_size]] || [size] vs [prev_size]") //message_admins("2. [breast_values[size]] vs [breast_values[prev_size]] || [size] vs [prev_size]")
if (breast_values[size] > breast_values[prev_size]) if (breast_values[size] > breast_values[prev_size])
to_chat(owner, "<span class='warning'>Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [uppertext(size)]-cup.</b></span>") to_chat(owner, "<span class='warning'>Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [uppertext(size)]-cup.</b></span>")
else if (breast_values[size] < breast_values[prev_size]) else if (breast_values[size] < breast_values[prev_size])
@@ -129,3 +129,9 @@
//icon_state = sanitize_text("breasts_[shape]_[size]") //icon_state = sanitize_text("breasts_[shape]_[size]")
//owner.update_body() //owner.update_body()
//update_icon() //update_icon()
message_admins("attempting to update sprite")
var/mob/living/carbon/human/H = owner
H.update_genitals()
//owner.update_genitals()
//if(src.is_exposed())
// update_icon()
@@ -348,3 +348,71 @@
for(var/L in relevant_layers) for(var/L in relevant_layers)
H.apply_overlay(L) H.apply_overlay(L)
/*
/datum/species/proc/handle_breasts(mob/living/carbon/human/H)
//check for breasts first!
var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts")
if(!B)
return
///obj/item/organ/genital/breasts/update_icon(/obj/item/organ/genital) Where did this come from?
//Variables:
var/size = B.size
var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER)
var/datum/sprite_accessory/S = GLOB.breasts_shapes_list[B.shape]
var/list/standing = list()
if(!S || S.icon_state == "none")
return
for(var/layer in relevant_layers)
var/layertext = genitals_layertext(layer)
S = GLOB.breasts_shapes_list[B.shape]
var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
//If breasts are hueg (larger than 5 only have one sprite atm)
if (size > 5)
genital_overlay.icon_state = "[B.slot]_pair_[size]_0_[layertext]"//I haven't done around sizes above 5, I dunno how..!
else
genital_overlay.icon_state = "[B.slot]_[S.icon_state]_[size]_[B.aroused_state]_[layertext]"
//center icon
if(S.center)
genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
//Check skin colour
if(use_skintones && H.dna.features["genitals_use_skintone"])
genital_overlay.color = "#[skintone2hex(H.skin_tone)]"
else
switch(S.color_src)
if("cock_color")
genital_overlay.color = "#[H.dna.features["cock_color"]]"
if("breasts_color")
genital_overlay.color = "#[H.dna.features["breasts_color"]]"
if("vag_color")
genital_overlay.color = "#[H.dna.features["vag_color"]]"
if(MUTCOLORS)
if(fixed_mut_color)
genital_overlay.color = "#[fixed_mut_color]"
else
genital_overlay.color = "#[H.dna.features["mcolor"]]"
if(MUTCOLORS2)
if(fixed_mut_color2)
genital_overlay.color = "#[fixed_mut_color2]"
else
genital_overlay.color = "#[H.dna.features["mcolor2"]]"
if(MUTCOLORS3)
if(fixed_mut_color3)
genital_overlay.color = "#[fixed_mut_color3]"
else
genital_overlay.color = "#[H.dna.features["mcolor3"]]"
standing += genital_overlay
//Standing..?
if(LAZYLEN(standing))
H.overlays_standing[layer] = standing.Copy()
standing = list()
for(var/L in relevant_layers)
H.apply_overlay(L)
*/
@@ -44,6 +44,13 @@
o.remove_status_effect(/datum/status_effect/chem/PElarger) o.remove_status_effect(/datum/status_effect/chem/PElarger)
statuscheck = FALSE statuscheck = FALSE
if(9 to INFINITY) //If massive 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.")
o.remove_status_effect(/datum/status_effect/chem/PElarger)
statuscheck = TRUE
if(15 to INFINITY)
length = cached_length length = cached_length
size = 3 //no new sprites for anything larger yet size = 3 //no new sprites for anything larger yet
if(statuscheck == FALSE) if(statuscheck == FALSE)
@@ -53,14 +60,17 @@
message_admins("Pinas size: [size], [cached_length], [o]") message_admins("Pinas size: [size], [cached_length], [o]")
message_admins("2. size vs prev_size") message_admins("2. size vs prev_size")
if (round(length) > round(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(size)] inch penis.</b></span>") 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)) else 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("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(size)] inch penis.</b></span>") 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("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(length)] inch penis.</b></span>")
prev_size = length prev_size = length
icon_state = sanitize_text("penis_[shape]_[size]") icon_state = sanitize_text("penis_[shape]_[size]")
//update_body() //update_body()
//P.update_icon() //Either of these don't work, why??? //P.update_icon() //Either of these don't work, why???
girth = (length * girth_ratio) girth = (length * girth_ratio)
var/mob/living/carbon/human/H = owner
H.update_genitals()
//owner.update_genitals()
/obj/item/organ/genital/penis/update_appearance() /obj/item/organ/genital/penis/update_appearance()
//var/mob/living/carbon/o = owner //var/mob/living/carbon/o = owner
@@ -179,6 +179,42 @@
//eigenstate END //eigenstate END
/*SDGF
////////////////////////////////////////////////////
// synthetic-derived growth factor //
//////////////////////////////////////////////////
WHAT IT DOES
Several outcomes are possible (in priority order):
Before the chem is even created, there is a risk of the reaction "exploding", which produces an angry teratoma that attacks the player.
0. Before the chem is activated, the purity is checked, if the purity of the reagent is less than 0.5, then sythetic-derived zombie factor is metabolised instead
0.1 If SDZF is injected, the chem appears to act the same as normal, with nutrition gain, until the end, where it becomes toxic instead, giving a short window of warning to the player
0.1.2 If the player can take pent in time, the player will spawn a hostile teratoma on them (less damaging), if they don't, then a zombie is spawned instead, with a small defence increase propotional to the volume
0.2 If the purity is above 0.5, then the remaining impure volume created SDGFtox instead, which reduces blood volume and causes clone damage
1.Normal function creates a (another)player controlled clone of the player, which is spawned nude, with damage to the clone
1.1 The remaining volume is transferred to the clone, which heals it over time, thus the player has to make a substantial ammount of the chem in order to produce a healthy clone
1.2 If the player is infected with a zombie tumor, the tumor is transferred to the ghost controlled clone ONLY.
2. If no player can be found, a brainless clone is created over a long period of time, this body has no controller.
2.1 If the player dies with a clone, then they play as the clone instead. However no memories are retained after splitting.
3. If there is already a clone, then SDGF heals clone, fire and brute damage slowly. This shouldn't normalise this chem as the de facto clone healing chem, as it will always try to make a ghost clone, and then a brainless clone first.
4. If there is insuffient volume to complete the cloning process, there are two outcomes
4.1 At lower volumes, the players nutrition and blood is refunded, with light healing
4.2 At higher volumes a stronger heal is applied to the user
IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
1. The most important factor is the required volume, this is easily edited with the metabolism rate, this chem is HARD TO MAKE, You need to make a lot of it and it's a substantial effort on the players part. There is also a substantial risk; you could spawn a hotile teratoma during the reation, you could damage yourself with clone damage, you could accidentally spawn a zombie... Basically, you've a good chance of killing yourself.
1.1 Additionally, if you're trying to make SDZF purposely, you've no idea if you have or not, and that reaction is even harder to do. Plus, the player has a huge time window to get to medical to deal with it. If you take pent while it's in you, it'll be removed before it can spawn, and only spawns a teratoma if it's late stage.
2. The rate in which the clone is made, This thing takes time to produce fruits, it slows you down and makes you useless in combat/working. Basically you can't do anything during it. It will only get you killed if you use it in combat, If you do use it and you spawn a player clone, they're gimped for a long time, as they have to heal off the clone damage.
3. The healing - it's pretty low and a cyropod is more Useful
4. If you're an antag, you've a 50% chance of making a clone that will help you with your efforts, and you've no idea if they will or not. While clones can't directly harm you and care for you, they can hinder your efforts.
5. If people are being arses when they're a clone, slap them for it, they are told to NOT bugger around with someone else character, if it gets bad I'll add a blacklist, or do a check to see if you've played X amount of hours.
5.1 Another solution I'm okay with is to rename the clone to [M]'s clone, so it's obvious, this obviously ruins anyone trying to clone themselves to get an alibi however. I'd prefer this to not be the case.
5.2 Additionally, this chem is a soft buff to changelings, which apparently need a buff!
5.3 Other similar things exist though; impostors, split personalites, abductors, ect.
6. Giving this to someone without concent is against space law and gets you sent to gulag.
*/
//Clone serum #chemClone //Clone serum #chemClone
/datum/reagent/fermi/SDGF //vars, mostly only care about keeping track if there's a player in the clone or not. /datum/reagent/fermi/SDGF //vars, mostly only care about keeping track if there's a player in the clone or not.
name = "synthetic-derived growth factor" name = "synthetic-derived growth factor"
@@ -195,16 +231,19 @@
var/list/group = null var/list/group = null
var/pollStarted = FALSE var/pollStarted = FALSE
var/location_created var/location_created
var/startHunger
//var/fClone_current_controller = OWNER //var/fClone_current_controller = OWNER
//var/mob/living/split_personality/clone//there's two so they can swap without overwriting //var/mob/living/split_personality/clone//there's two so they can swap without overwriting
//var/mob/living/split_personality/owner //var/mob/living/split_personality/owner
//var/mob/living/carbon/SM //var/mob/living/carbon/SM
//Main SDGF chemical
/datum/reagent/fermi/SDGF/on_mob_life(mob/living/carbon/M) //Clones user, then puts a ghost in them! If that fails, makes a braindead clone. /datum/reagent/fermi/SDGF/on_mob_life(mob/living/carbon/M) //Clones user, then puts a ghost in them! If that fails, makes a braindead clone.
//Setup clone //Setup clone
switch(current_cycle) switch(current_cycle)
if(1) if(1)
startHunger = M.nutrition
if(pollStarted == FALSE) if(pollStarted == FALSE)
pollStarted = TRUE 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.") 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.")
@@ -233,10 +272,10 @@
//var/typepath = owner.type //var/typepath = owner.type
//clone = new typepath(owner.loc) //clone = new typepath(owner.loc)
var/typepath = M.type var/typepath = M.type
var/mob/living/carbon/fermi_Gclone = new typepath(M.loc) var/mob/living/carbon/human/fermi_Gclone = new typepath(M.loc)
//var/mob/living/carbon/SM = owner //var/mob/living/carbon/SM = owner
//var/mob/living/carbon/M = M //var/mob/living/carbon/M = M
var/mob/living/carbon/SM = fermi_Gclone var/mob/living/carbon/human/SM = fermi_Gclone
if(istype(SM) && istype(M)) if(istype(SM) && istype(M))
SM.real_name = M.real_name SM.real_name = M.real_name
M.dna.transfer_identity(SM) M.dna.transfer_identity(SM)
@@ -245,6 +284,7 @@
SM.key = C.key SM.key = C.key
SM.mind.enslave_mind_to_creator(M) SM.mind.enslave_mind_to_creator(M)
//If they're a zombie, they can try to negate it with this.
if(M.getorganslot(ORGAN_SLOT_ZOMBIE))//sure, it "treats" it, but "you've" still got it. Doesn't always work as well; needs a ghost. if(M.getorganslot(ORGAN_SLOT_ZOMBIE))//sure, it "treats" it, but "you've" still got it. Doesn't always work as well; needs a ghost.
var/obj/item/organ/zombie_infection/ZI = M.getorganslot(ORGAN_SLOT_ZOMBIE) var/obj/item/organ/zombie_infection/ZI = M.getorganslot(ORGAN_SLOT_ZOMBIE)
ZI.Remove(M) ZI.Remove(M)
@@ -257,18 +297,29 @@
M.visible_message("[M] suddenly shudders, and splits into two identical twins!") M.visible_message("[M] suddenly shudders, and splits into two identical twins!")
SM.copy_known_languages_from(M, FALSE) SM.copy_known_languages_from(M, FALSE)
playerClone = TRUE playerClone = TRUE
M.next_move_modifier = 1 M.next_move_modifier = 1
M.nutrition = 150 M.nutrition -= 500
//reaction_mob(SM, )I forget what this is for
reaction_mob(SM, ) //Damage the clone
SM.blood_volume = BLOOD_VOLUME_NORMAL/2
SM.adjustCloneLoss(80, 0)
SM.setBrainLoss(20)
SM.nutrition = startHunger/2
var/datum/reagents/SMR = SM
///datum/reagents
//var/mob/living/carbon/human has a holder, carbon does not
// You need to add to a holder.
// reagentS not reagent (?)
//SM.create_reagents()
SMR = locate(/datum/reagents) in SM
SMR.add_reagent("SDGFheal", volume)
holder.remove_reagent(src.id, 999) holder.remove_reagent(src.id, 999)
//BALANCE: should I make them a pacifist, or give them some cellular damage or weaknesses? //BALANCE: should I make them a pacifist, or give them some cellular damage or weaknesses?
//after_success(user, SM) //after_success(user, SM)
//qdel(src) //qdel(src)
else //No candidates leads to two outcomes; if there's already a braincless clone, it heals the user, as well as being a rare souce of clone healing (thematic!). else if(src.playerClone == FALSE) //No candidates leads to two outcomes; if there's already a braincless clone, it heals the user, as well as being a rare souce of clone healing (thematic!).
message_admins("Failed to find clone Candidate") message_admins("Failed to find clone Candidate")
src.unitCheck = TRUE src.unitCheck = TRUE
if(M.has_status_effect(/datum/status_effect/chem/SGDF)) // Heal the user if they went to all this trouble to make it and can't get a clone, the poor fellow. if(M.has_status_effect(/datum/status_effect/chem/SGDF)) // Heal the user if they went to all this trouble to make it and can't get a clone, the poor fellow.
@@ -331,13 +382,15 @@
M.nutrition += 250 M.nutrition += 250
else if (src.unitCheck == TRUE && !M.has_status_effect(/datum/status_effect/chem/SGDF))// If they're ingested a little bit (10u minimum), then give them a little healing. else if (src.unitCheck == TRUE && !M.has_status_effect(/datum/status_effect/chem/SGDF))// If they're ingested a little bit (10u minimum), then give them a little healing.
src.unitCheck = FALSE src.unitCheck = FALSE
to_chat(M, "<span class='notice'>the cells fail to hold enough mass to generate a clone, instead diffusing into your system instead. you can fee</span>") to_chat(M, "<span class='notice'>the cells fail to hold enough mass to generate a clone, instead diffusing into your system.</span>")
M.adjustBruteLoss(-10, 0) M.adjustBruteLoss(-10, 0)
M.adjustFireLoss(-10, 0) M.adjustFireLoss(-10, 0)
M.blood_volume += 100 M.blood_volume += 100
M.next_move_modifier = 1
if (M.nutrition < 1500) if (M.nutrition < 1500)
M.nutrition += 500 M.nutrition += 500
//If the reaction explodes //If the reaction explodes
/*
/datum/reagent/fermi/SDGF/FermiExplode(turf/open/T)//Spawns an angery teratoma!! Spooky..! be careful!! /datum/reagent/fermi/SDGF/FermiExplode(turf/open/T)//Spawns an angery teratoma!! Spooky..! be careful!!
//var/mob/living/simple_animal/slime/S = new(get_turf(location_created),"grey") //var/mob/living/simple_animal/slime/S = new(get_turf(location_created),"grey")
var/mob/living/simple_animal/slime/S = new(T,"grey")//should work, in theory var/mob/living/simple_animal/slime/S = new(T,"grey")//should work, in theory
@@ -345,11 +398,36 @@
S.name = "Living teratoma" S.name = "Living teratoma"
S.real_name = "Living teratoma"//horrifying!! S.real_name = "Living teratoma"//horrifying!!
S.rabid = 1//Make them an angery boi S.rabid = 1//Make them an angery boi
to_chat(M, "<span class='notice'>The cells clump up into a horrifying tumour.</span>") to_chat("<span class='notice'>The cells clump up into a horrifying tumour.</span>")
*/
//Unobtainable, used in clone spawn.
/datum/reagent/fermi/SDGFheal
name = "synthetic-derived growth factor"
id = "SDGFheal"
metabolization_rate = 1
/datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated)
if(M.blood_volume < BLOOD_VOLUME_NORMAL)
M.blood_volume += 10
M.adjustCloneLoss(-2.5, 0)
M.setBrainLoss(-1)
M.nutrition += 10
//Unobtainable, used if SDGF is impure but not too impure
/datum/reagent/fermi/SDGFtox
name = "synthetic-derived growth factor"
id = "SDGFtox"
description = "A chem that makes Fermis angry at you if you're reading this, how did you get this???"
metabolization_rate = 1
/datum/reagent/fermi/SDGFtox/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting - the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated)
M.blood_volume -= 10
M.adjustCloneLoss(2, 0)
//Fail state of SDGF //Fail state of SDGF
/datum/reagent/fermi/SDZF /datum/reagent/fermi/SDZF
name = "synthetic-derived zombie factor" name = "synthetic-derived growth factor"
id = "SDZF" id = "SDZF"
description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. This message should never appear, how did you manage to get a hold of this?" description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. This message should never appear, how did you manage to get a hold of this?"
color = "#60A584" // rgb: 96, 0, 255 color = "#60A584" // rgb: 96, 0, 255
@@ -363,7 +441,6 @@
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>") 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>")
startHunger = M.nutrition startHunger = M.nutrition
if(21 to 29) if(21 to 29)
M.nutrition = M.nutrition + (M.nutrition/10) M.nutrition = M.nutrition + (M.nutrition/10)
if(30) if(30)
to_chat(M, "<span class='notice'>You feel the synethic cells grow and expand within yourself, bloating your body outwards.</span>") to_chat(M, "<span class='notice'>You feel the synethic cells grow and expand within yourself, bloating your body outwards.</span>")
@@ -393,10 +470,12 @@
ZI.damage_coeff = list(BRUTE = ((1 / volume)**0.25) , BURN = ((1 / volume)**0.1), TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) ZI.damage_coeff = list(BRUTE = ((1 / volume)**0.25) , BURN = ((1 / volume)**0.1), TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
ZI.real_name = M.real_name//Give your offspring a big old kiss. ZI.real_name = M.real_name//Give your offspring a big old kiss.
ZI.name = M.real_name ZI.name = M.real_name
ZI.desc = "[M]'s clone, gone horribly wrong."
ZI.zombiejob = null
//ZI.updateappearance(mutcolor_update=1) //ZI.updateappearance(mutcolor_update=1)
holder.remove_reagent(src.id, 20) holder.remove_reagent(src.id, 20)
else//easier to deal with else//easier to deal with
to_chat(M, "<span class='notice'>The pentetic acid seems to have stopped the decay for now, clumping up the cells into a horrifying tumour.</span>") to_chat(M, "<span class='notice'>The pentetic acid seems to have stopped the decay for now, clumping up the cells into a horrifying tumour!</span>")
M.nutrition = startHunger - 500 M.nutrition = startHunger - 500
var/mob/living/simple_animal/slime/S = new(get_turf(M.loc),"grey") //TODO: replace slime as own simplemob/add tumour slime cores for science/chemistry interplay var/mob/living/simple_animal/slime/S = new(get_turf(M.loc),"grey") //TODO: replace slime as own simplemob/add tumour slime cores for science/chemistry interplay
S.damage_coeff = list(BRUTE = ((1 / volume)**0.1) , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) S.damage_coeff = list(BRUTE = ((1 / volume)**0.1) , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
@@ -430,11 +509,7 @@
var/mob/living/carbon/human/H var/mob/living/carbon/human/H
/datum/reagent/fermi/BElarger/on_mob_life(mob/living/carbon/M) //Increases breast size /datum/reagent/fermi/BElarger/on_mob_life(mob/living/carbon/M) //Increases breast size
/* var/mob/living/carbon/human/H = M
switch(current_cycle)
if(0)
*/
var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts") var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts")
if(!B) //If they don't have breasts, give them breasts. if(!B) //If they don't have breasts, give them breasts.
message_admins("No breasts found!") message_admins("No breasts found!")
@@ -457,10 +532,11 @@
message_admins("Breast size: [B.size], [B.cached_size], [holder]") message_admins("Breast size: [B.size], [B.cached_size], [holder]")
B.cached_size = B.cached_size + 0.1 B.cached_size = B.cached_size + 0.1
if (B.cached_size >= 8.5 && B.cached_size < 9) if (B.cached_size >= 8.5 && B.cached_size < 9)
var/target = M.get_bodypart(BODY_ZONE_CHEST) if(H.w_uniform || H.wear_suit)
to_chat(M, "<span class='warning'>Your breasts begin to strain against your clothes tightly!</b></span>") var/target = M.get_bodypart(BODY_ZONE_CHEST)
M.adjustOxyLoss(10, 0) to_chat(M, "<span class='warning'>Your breasts begin to strain against your clothes tightly!</b></span>")
M.apply_damage(2, BRUTE, target) M.adjustOxyLoss(10, 0)
M.apply_damage(2, BRUTE, target)
B.update() B.update()
..() ..()
@@ -511,6 +587,7 @@
var/mob/living/carbon/human/H var/mob/living/carbon/human/H
/datum/reagent/fermi/PElarger/on_mob_life(mob/living/carbon/M) //Increases penis size /datum/reagent/fermi/PElarger/on_mob_life(mob/living/carbon/M) //Increases penis size
var/mob/living/carbon/human/H = M
var/obj/item/organ/genital/penis/P = M.getorganslot("penis") var/obj/item/organ/genital/penis/P = M.getorganslot("penis")
if(!P) if(!P)
message_admins("No penis found!")//They do have a preponderance for escapism, or so I've heard. message_admins("No penis found!")//They do have a preponderance for escapism, or so I've heard.
@@ -526,9 +603,10 @@
P.cached_length = P.cached_length + 0.1 P.cached_length = P.cached_length + 0.1
if (P.cached_length >= 10.5 && P.cached_length < 11) //too low? if (P.cached_length >= 10.5 && P.cached_length < 11) //too low?
var/target = M.get_bodypart(BODY_ZONE_CHEST) if(H.w_uniform || H.wear_suit)
to_chat(M, "<span class='warning'>Your cock begin to strain against your clothes tightly!</b></span>") var/target = M.get_bodypart(BODY_ZONE_CHEST)
M.apply_damage(5, BRUTE, target) to_chat(M, "<span class='warning'>Your cock begin to strain against your clothes tightly!</b></span>")
M.apply_damage(5, BRUTE, target)
P.update() P.update()
..() ..()
@@ -558,7 +636,6 @@
T = nT T = nT
..() ..()
/datum/reagent/fermi/astral // Gives you the ability to astral project for a moment! /datum/reagent/fermi/astral // Gives you the ability to astral project for a moment!
name = "Astrogen" name = "Astrogen"
id = "astral" id = "astral"
@@ -668,10 +745,42 @@
taste_description = "dewicious degenyewacy" taste_description = "dewicious degenyewacy"
/datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M) /datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M)
M.apply_status_effect(/datum/status_effect/chem/OwO)
/datum/reagent/fermi/astral/on_mob_delete(mob/living/carbon/M) switch(current_cycle)
M.remove_status_effect(/datum/status_effect/chem/OwO) if(1 to 9)
if(prob(20))
to_chat(M, "<span class='notice'>Your tongue feels... fluffy</span>")
if(10 to 20)
if(prob(20))
to_chat(M, "You find yourself unable to supress the desire to meow!")
M.emote("nya")
if(prob(20))
to_chat(M, "You find yourself unable to supress the desire to howl!")
M.emote("awoo")
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 [victim]'s bulge, OwO!")
if(21)
message_admins("holder define: [holder]")
var/obj/item/organ/tongue/T = M.getorganslot(BODY_ZONE_PRECISE_MOUTH)
var/obj/item/organ/tongue/nT = new /obj/item/organ/tongue/OwO
T.Remove(M)
nT.Insert(M)
qdel(T)
if(22 to INFINITY)
if(prob(20))
to_chat(M, "You find yourself unable to supress the desire to meow!")
M.emote("nya")
if(prob(20))
to_chat(M, "You find yourself unable to supress the desire to howl!")
M.emote("awoo")
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 [victim]'s bulge, OwO!")
..()
/* /*
/mob/living/simple_animal/hostile/retaliate/ghost /mob/living/simple_animal/hostile/retaliate/ghost
incorporeal_move = 1 incorporeal_move = 1
@@ -710,14 +819,3 @@ reduce viewrange?
|| || || ||
||_______________________________________|| ||_______________________________________||
*/ */
/datum/reagent/fermi/SDGFTox
name = "Impure synthetic cells"
id = "SDGFtox"
description = "A chem that makes Fermis angry at you if you're reading this, how did you get this??."
color = "#A080H4" // rgb: , 0, 255
taste_description = "Forbidden chemistry" //Check to make sure this doesn't proc taste when added to mobs
metabolization_rate = 1 //1u = 2clone damage (too much?)
/datum/reagent/fermi/SDGFTox/on_mob_life(mob/living/M)
M.adjustCloneLoss(2, 0)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB