diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index 297e514e0d..97883c6cb9 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -242,6 +242,7 @@ prob(2);/obj/item/weapon/storage/box/syndie_kit/spy, prob(2);/obj/item/weapon/grenade/anti_photon, prob(2);/obj/item/clothing/under/hyperfiber/bluespace, + prob(2);/obj/item/weapon/reagent_containers/glass/beaker/vial/amorphorovir, prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc, prob(1);/obj/item/device/nif/bad, prob(1);/obj/item/device/radio_jammer, diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm index b2fef2977c..22f6ea9511 100644 --- a/code/modules/reagents/reactions/instant/instant_vr.dm +++ b/code/modules/reagents/reactions/instant/instant_vr.dm @@ -47,6 +47,58 @@ s.start() holder.clear_reagents() +/////////////////////////////////////////////////////////////////////////////////// +/// TF chemicals +/decl/chemical_reaction/instant/amorphorovir + name = "Amorphorovir" + id = "amorphorovir" + result = "amorphorovir" + required_reagents = list("cryptobiolin" = 30, "biomass" = 30, "hyperzine" = 20) + catalysts = list("phoron" = 5) + result_amount = 1 + +/decl/chemical_reaction/instant/androrovir + name = "Androrovir" + id = "androrovir" + result = "androrovir" + required_reagents = list("amorphorovir" = 1, "bicaridine" = 20, "iron" = 20, "ethanol" = 20) + result_amount = 1 + +/decl/chemical_reaction/instant/gynorovir + name = "Gynorovir" + id = "gynorovir" + result = "gynorovir" + required_reagents = list("amorphorovir" = 1, "inaprovaline" = 20, "silicon" = 20, "sugar" = 20) + result_amount = 1 + +/decl/chemical_reaction/instant/androgynorovir + name = "Androgynorovir" + id = "androgynorovir" + result = "androgynorovir" + required_reagents = list("amorphorovir" = 1, "anti_toxin" = 20, "fluorine" = 20, "tungsten" = 20) + result_amount = 1 + +/decl/chemical_reaction/instant/androrovir_bootleg + name = "Bootleg Androrovir" + id = "androrovir_bootleg" + result = "androrovir" + required_reagents = list("amorphorovir" = 1, "protein" = 10, "capsaicin" = 10) + result_amount = 1 + +/decl/chemical_reaction/instant/gynorovir_bootleg + name = "Bootleg Gynorovir" + id = "gynorovir_bootleg" + result = "gynorovir" + required_reagents = list("amorphorovir" = 1, "soymilk" = 10, "sugar" = 10) + result_amount = 1 + +/decl/chemical_reaction/instant/androgynorovir_bootleg + name = "Bootleg Androgynorovir" + id = "androgynorovir_bootleg" + result = "androgynorovir" + required_reagents = list("amorphorovir" = 1, "cola" = 10, "berryjuice" = 10) + result_amount = 1 + /////////////////////////////////////////////////////////////////////////////////// /// Miscellaneous Reactions @@ -85,7 +137,7 @@ required_reagents = list("water" = 1) catalysts = list("fluorine" = 10) result_amount = 1 - + /decl/chemical_reaction/instant/firefightingfoamqol //Please don't abuse this and make us remove it. Seriously. name = "Firefighting Foam EZ" id = "firefighting foam ez" diff --git a/code/modules/reagents/reagent_containers/glass_vr.dm b/code/modules/reagents/reagent_containers/glass_vr.dm index 79c19b8288..86601ea777 100644 --- a/code/modules/reagents/reagent_containers/glass_vr.dm +++ b/code/modules/reagents/reagent_containers/glass_vr.dm @@ -49,6 +49,10 @@ name = "vial (hyronalin)" prefill = list("hyronalin" = 30) +/obj/item/weapon/reagent_containers/glass/beaker/vial/amorphorovir + name = "vial (amorphorovir)" + prefill = list("amorphorovir" = 1) + /obj/item/weapon/reagent_containers/glass/beaker/measuring_cup name = "measuring cup" desc = "A measuring cup." diff --git a/code/modules/reagents/reagents/other_vr.dm b/code/modules/reagents/reagents/other_vr.dm index b1146960ed..f0286667df 100644 --- a/code/modules/reagents/reagents/other_vr.dm +++ b/code/modules/reagents/reagents/other_vr.dm @@ -6,6 +6,8 @@ color = "#13BC5E" /datum/reagent/advmutationtoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(!(M.allow_spontaneous_tf)) + return if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.species.name != "Promethean") @@ -119,3 +121,16 @@ if(nif.stat == NIF_TEMPFAIL) nif.stat = NIF_INSTALLING nif.durability = min(nif.durability + removed*0.1, initial(nif.durability)) + +//Special toxins for solargrubs +/datum/reagent/grubshock + name = "200 V" //in other words a painful shock + id = "shockchem" + description = "A liquid that quickly dissapates to deliver a painful shock." + reagent_state = LIQUID + color = "#E4EC2F" + metabolism = 2.50 + var/power = 9 + +/datum/reagent/grubshock/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.take_organ_damage(0, removed * power * 0.2) diff --git a/code/modules/reagents/reagents/vore_vr.dm b/code/modules/reagents/reagents/vore_vr.dm index 20af3a57e3..a86c755c3d 100644 --- a/code/modules/reagents/reagents/vore_vr.dm +++ b/code/modules/reagents/reagents/vore_vr.dm @@ -117,16 +117,74 @@ P.absorbed = 0 M.visible_message("Something spills into [M]'s [lowertext(B.name)]!") -//Special toxins for solargrubs +////////////////////////// TF Drugs ////////////////////////// -/datum/reagent/grubshock - name = "200 V" //in other words a painful shock - id = "shockchem" - description = "A liquid that quickly dissapates to deliver a painful shock." +/datum/reagent/amorphorovir + name = "Amorphorovir" + id = "amorphorovir" + description = "A base medical concoction, capable of rapidly altering genetic and physical structure of the body. Requires extra processing to allow for a targeted transformation." reagent_state = LIQUID - color = "#E4EC2F" - metabolism = 2.50 - var/power = 9 + color = "#AAAAAA" -/datum/reagent/grubshock/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.take_organ_damage(0, removed * power * 0.2) +/datum/reagent/androrovir + name = "Androrovir" + id = "androrovir" + description = "A medical concoction, capable of rapidly altering genetic and physical structure of the body. This one seems to realign the target's gender to be male." + reagent_state = LIQUID + color = "#00BBFF" + +/datum/reagent/androrovir/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(!(M.allow_spontaneous_tf)) + return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(M.reagents.has_reagent("gynorovir") || M.reagents.has_reagent("androgynorovir")) + H.Confuse(1) + else + if(!(H.gender == MALE)) + H.set_gender(MALE) + H.change_gender_identity(MALE) + H.visible_message("[H] suddenly twitches as some of their features seem to contort and reshape, adjusting... In the end, it seems they are now male.", + "Your body suddenly contorts, feeling very different in various ways... By the time the rushing feeling is over it seems you just became male.") + +/datum/reagent/gynorovir + name = "Gynorovir" + id = "gynorovir" + description = "A medical concoction, capable of rapidly altering genetic and physical structure of the body. This one seems to realign the target's gender to be female." + reagent_state = LIQUID + color = "#FF00AA" + +/datum/reagent/gynorovir/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(!(M.allow_spontaneous_tf)) + return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(M.reagents.has_reagent("androrovir") || M.reagents.has_reagent("androgynorovir")) + H.Confuse(1) + else + if(!(H.gender == FEMALE)) + H.set_gender(FEMALE) + H.change_gender_identity(FEMALE) + H.visible_message("[H] suddenly twitches as some of their features seem to contort and reshape, adjusting... In the end, it seems they are now female.", + "Your body suddenly contorts, feeling very different in various ways... By the time the rushing feeling is over it seems you just became female.") + +/datum/reagent/androgynorovir + name = "Androgynorovir" + id = "androgynorovir" + description = "A medical concoction, capable of rapidly altering genetic and physical structure of the body. This one seems to realign the target's gender to be mixed." + reagent_state = LIQUID + color = "#6600FF" + +/datum/reagent/androgynorovir/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(!(M.allow_spontaneous_tf)) + return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(M.reagents.has_reagent("gynorovir") || M.reagents.has_reagent("androrovir")) + H.Confuse(1) + else + if(!(H.gender == PLURAL)) + H.set_gender(PLURAL) + H.change_gender_identity(PLURAL) + H.visible_message("[H] suddenly twitches as some of their features seem to contort and reshape, adjusting... In the end, it seems they are now of mixed gender.", + "Your body suddenly contorts, feeling very different in various ways... By the time the rushing feeling is over it seems you just became of mixed gender.") \ No newline at end of file diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 37c3f27782..f2eb242256 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -28,6 +28,7 @@ var/permit_healbelly = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = TRUE // Mobs are pred by default. + var/allow_spontaneous_tf = FALSE // Obviously. var/next_preyloop // For Fancy sound internal loop var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans. var/adminbus_eat_minerals = FALSE // This creature subsists on a diet of pure adminium. @@ -236,6 +237,7 @@ P.show_vore_fx = src.show_vore_fx P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred + P.allow_spontaneous_tf = src.allow_spontaneous_tf P.step_mechanics_pref = src.step_mechanics_pref P.pickup_pref = src.pickup_pref @@ -271,6 +273,7 @@ show_vore_fx = P.show_vore_fx can_be_drop_prey = P.can_be_drop_prey can_be_drop_pred = P.can_be_drop_pred + allow_spontaneous_tf = P.allow_spontaneous_tf step_mechanics_pref = P.step_mechanics_pref pickup_pref = P.pickup_pref @@ -857,6 +860,7 @@ dispvoreprefs += "Healbelly permission: [permit_healbelly ? "Allowed" : "Disallowed"]
" dispvoreprefs += "Spontaneous vore prey: [can_be_drop_prey ? "Enabled" : "Disabled"]
" dispvoreprefs += "Spontaneous vore pred: [can_be_drop_pred ? "Enabled" : "Disabled"]
" + dispvoreprefs += "Spontaneous transformation: [allow_spontaneous_tf ? "Enabled" : "Disabled"]
" dispvoreprefs += "Can be stepped on/over: [step_mechanics_pref ? "Allowed" : "Disallowed"]
" dispvoreprefs += "Can be picked up: [pickup_pref ? "Allowed" : "Disallowed"]
" user << browse("Vore prefs: [src]
[dispvoreprefs]
", "window=[name]mvp;size=200x300;can_resize=0;can_minimize=0") diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 82df33ccf2..e3e7b9befa 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -49,6 +49,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/feeding = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = FALSE + var/allow_spontaneous_tf = FALSE var/digest_leave_remains = FALSE var/allowmobvore = TRUE var/permit_healbelly = TRUE @@ -136,6 +137,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] can_be_drop_pred = json_from_file["can_be_drop_pred"] + allow_spontaneous_tf = json_from_file["allow_spontaneous_tf"] step_mechanics_pref = json_from_file["step_mechanics_pref"] pickup_pref = json_from_file["pickup_pref"] belly_prefs = json_from_file["belly_prefs"] @@ -163,6 +165,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE can_be_drop_prey = FALSE if(isnull(can_be_drop_pred)) can_be_drop_pred = FALSE + if(isnull(allow_spontaneous_tf)) + allow_spontaneous_tf = FALSE if(isnull(step_mechanics_pref)) step_mechanics_pref = TRUE if(isnull(pickup_pref)) @@ -192,6 +196,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, + "allow_spontaneous_tf" = allow_spontaneous_tf, "step_mechanics_pref" = step_mechanics_pref, "pickup_pref" = pickup_pref, "belly_prefs" = belly_prefs, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 27382bda45..249b3051cb 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -224,6 +224,7 @@ "show_vore_fx" = host.show_vore_fx, "can_be_drop_prey" = host.can_be_drop_prey, "can_be_drop_pred" = host.can_be_drop_pred, + "allow_spontaneous_tf" = host.allow_spontaneous_tf, "step_mechanics_active" = host.step_mechanics_pref, "pickup_mechanics_active" = host.pickup_pref, "noisy" = host.noisy, @@ -354,6 +355,12 @@ host.client.prefs_vr.can_be_drop_prey = host.can_be_drop_prey unsaved_changes = TRUE return TRUE + if("toggle_allow_spontaneous_tf") + host.allow_spontaneous_tf = !host.allow_spontaneous_tf + if(host.client.prefs_vr) + host.client.prefs_vr.allow_spontaneous_tf = host.allow_spontaneous_tf + unsaved_changes = TRUE + return TRUE if("toggle_digest") host.digestable = !host.digestable if(host.client.prefs_vr) diff --git a/tgui/packages/tgui/interfaces/VorePanel.js b/tgui/packages/tgui/interfaces/VorePanel.js index 34722433ff..bc91fb376c 100644 --- a/tgui/packages/tgui/interfaces/VorePanel.js +++ b/tgui/packages/tgui/interfaces/VorePanel.js @@ -607,6 +607,7 @@ const VoreUserPreferences = (props, context) => { show_vore_fx, can_be_drop_prey, can_be_drop_pred, + allow_spontaneous_tf, step_mechanics_active, pickup_mechanics_active, noisy, @@ -767,7 +768,7 @@ const VoreUserPreferences = (props, context) => { + " Click this to enable showing FX.")} content={show_vore_fx ? "Show Vore FX" : "Do Not Show Vore FX"} /> - +