mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-14 08:35:39 +01:00
Merge pull request #10412 from Heroman3003/grand-theft-gender
Adds gender TF chemicals + Spontaneous TF pref
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -117,16 +117,74 @@
|
||||
P.absorbed = 0
|
||||
M.visible_message("<font color='green'><b>Something spills into [M]'s [lowertext(B.name)]!</b></font>")
|
||||
|
||||
//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("<span class='notice'>[H] suddenly twitches as some of their features seem to contort and reshape, adjusting... In the end, it seems they are now male.</span>",
|
||||
"<span class='warning'>Your body suddenly contorts, feeling very different in various ways... By the time the rushing feeling is over it seems you just became male.</span>")
|
||||
|
||||
/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("<span class='notice'>[H] suddenly twitches as some of their features seem to contort and reshape, adjusting... In the end, it seems they are now female.</span>",
|
||||
"<span class='warning'>Your body suddenly contorts, feeling very different in various ways... By the time the rushing feeling is over it seems you just became female.</span>")
|
||||
|
||||
/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("<span class='notice'>[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.</span>",
|
||||
"<span class='warning'>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.</span>")
|
||||
@@ -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 += "<b>Healbelly permission:</b> [permit_healbelly ? "Allowed" : "Disallowed"]<br>"
|
||||
dispvoreprefs += "<b>Spontaneous vore prey:</b> [can_be_drop_prey ? "Enabled" : "Disabled"]<br>"
|
||||
dispvoreprefs += "<b>Spontaneous vore pred:</b> [can_be_drop_pred ? "Enabled" : "Disabled"]<br>"
|
||||
dispvoreprefs += "<b>Spontaneous transformation:</b> [allow_spontaneous_tf ? "Enabled" : "Disabled"]<br>"
|
||||
dispvoreprefs += "<b>Can be stepped on/over:</b> [step_mechanics_pref ? "Allowed" : "Disallowed"]<br>"
|
||||
dispvoreprefs += "<b>Can be picked up:</b> [pickup_pref ? "Allowed" : "Disallowed"]<br>"
|
||||
user << browse("<html><head><title>Vore prefs: [src]</title></head><body><center>[dispvoreprefs]</center></body></html>", "window=[name]mvp;size=200x300;can_resize=0;can_minimize=0")
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"} />
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="49%">
|
||||
<Flex.Item basis="32%">
|
||||
<Button
|
||||
onClick={() => act("toggle_leaveremains")}
|
||||
icon={digest_leave_remains ? "toggle-on" : "toggle-off"}
|
||||
@@ -779,9 +780,9 @@ const VoreUserPreferences = (props, context) => {
|
||||
+ "if they do not, they will not leave your remains behind, even with this on. Click to disable remains"
|
||||
: ("Regardless of Predator Setting, you will not leave remains behind."
|
||||
+ " Click this to allow leaving remains.")}
|
||||
content={digest_leave_remains ? "Allow Leaving Remains Behind" : "Do Not Allow Leaving Remains Behind"} />
|
||||
content={digest_leave_remains ? "Allow Leaving Remains" : "Do Not Allow Leaving Remains"} />
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="49%">
|
||||
<Flex.Item basis="32%" grow={1}>
|
||||
<Button
|
||||
onClick={() => act("toggle_pickuppref")}
|
||||
icon={pickup_mechanics_active ? "toggle-on" : "toggle-off"}
|
||||
@@ -795,6 +796,19 @@ const VoreUserPreferences = (props, context) => {
|
||||
+ " Click this to allow picking up/being picked up.")}
|
||||
content={pickup_mechanics_active ? "Pick-up Mechanics Enabled" : "Pick-up Mechanics Disabled"} />
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="32%">
|
||||
<Button
|
||||
onClick={() => act("toggle_allow_spontaneous_tf")}
|
||||
icon={allow_spontaneous_tf ? "toggle-on" : "toggle-off"}
|
||||
selected={allow_spontaneous_tf}
|
||||
fluid
|
||||
tooltip={"This toggle is for spontaneous or environment related transformation"
|
||||
+ " as a victim, such as via chemicals. "
|
||||
+ (allow_spontaneous_tf
|
||||
? "Click here to allow being spontaneously transformed."
|
||||
: "Click here to disable being spontaneously transformed.")}
|
||||
content={allow_spontaneous_tf ? "Spontaneous TF Enabled" : "Spontaneous TF Disabled"} />
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="49%">
|
||||
<Button
|
||||
fluid
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user