[MIRROR] Ports Venom Bite / Injection from Rogue Star (#8562)

Co-authored-by: C.L <killer65311@gmail.com>
Co-authored-by: Kashargul <KashL@t-online.de>
This commit is contained in:
CHOMPStation2
2024-06-27 07:19:38 -07:00
committed by GitHub
parent 924c5302a6
commit 2c06203b21
4 changed files with 240 additions and 0 deletions

View File

@@ -1531,3 +1531,145 @@
if(Adjacent(target)) //We leapt at them but we didn't manage to hit them, let's see if we're next to them if(Adjacent(target)) //We leapt at them but we didn't manage to hit them, let's see if we're next to them
target.Weaken(2) //get knocked down, idiot target.Weaken(2) //get knocked down, idiot
/mob/living/proc/injection() // Allows the user to inject reagents into others somehow, like stinging, or biting.
set name = "Injection"
set category = "Abilities.General" //CHOMPEdit
set desc = "Inject another being with something!"
if(stat || paralysis || weakened || stunned || world.time < last_special) //Epic copypasta from tongue grabbing.
to_chat(src, "<span class='warning'>You can't do that in your current state.</span>")
return
last_special = world.time + 10 //Anti-spam.
var/list/choices = list("Inject")
if(trait_injection_reagents.len > 1) //Should never happen, but who knows!
choices += "Change reagent"
else if(!trait_injection_selected)
trait_injection_selected = trait_injection_reagents[1]
choices += "Change amount"
choices += "Change verb"
choices += "Chemical Refresher"
var/choice = tgui_alert(src, "Do you wish to inject somebody, or adjust settings?", "Selection List", choices)
if(choice == "Change reagent")
var/reagent_choice = tgui_input_list(usr, "Choose which reagent to inject!", "Select reagent", trait_injection_reagents)
if(reagent_choice)
trait_injection_selected = reagent_choice
to_chat(src, "<span class='notice'>You prepare to inject [trait_injection_amount] units of [trait_injection_selected ? "[trait_injection_selected]" : "...nothing. Select a reagent before trying to inject anything."]</span>")
return
if(choice == "Change amount")
var/amount_choice = tgui_input_number(usr, "How much of the reagent do you want to inject? (Up to 5 units) (Can select 0 for a bite that doesn't inject venom!)", "How much?", trait_injection_amount, 5, 0)
if(amount_choice >= 0)
trait_injection_amount = amount_choice
to_chat(src, "<span class='notice'>You prepare to inject [trait_injection_amount] units of [trait_injection_selected ? "[trait_injection_selected]" : "...nothing. Select a reagent before trying to inject anything."]</span>")
return
if(choice == "Change verb")
var/verb_choice = tgui_input_text(usr, "Choose the percieved manner of injection, such as 'bites' or 'stings', don't be misleading or abusive. This will show up in game as ('X' 'Verb' 'Y'. Example: X bites Y.)", "How are you injecting?", trait_injection_verb, max_length = 60) //Whoaa there cowboy don't put a novel in there.
if(verb_choice)
trait_injection_verb = verb_choice
to_chat(src, "<span class='notice'>You will [trait_injection_verb] your targets.</span>")
return
if(choice == "Chemical Refresher")
var/output = {"<B>Chemical Refresher!</B><HR>
<B>Options for venoms</B><BR>
<BR>
<B>Size Chemicals</B><BR>
Microcillin: Will make someone shrink. <br>
Macrocillin: Will make someone grow. <br>
Normalcillin: Will make someone normal size. <br>
Note: 1 unit = 100% size diff. 0.01 unit = 1% size diff. <br>
Note: Normacillin stops at 100% size. <br>
<br>
<B>Gender Chemicals</B><BR>
Androrovir: Will transform someone's sex to male. <br>
Gynorovir: Will transform someone's sex to female. <br>
Androgynorovir: Will transform someone's sex to plural. <br>
<br>
<B>Special Chemicals</B><BR>
Stoxin: Will make someone drowsy. <br>
Rainbow Toxin: Will make someone see rainbows. <br>
Paralysis Toxin: Will make someone paralyzed. <br>
Numbing Enzyme: Will make someone unable to feel pain. <br>
Pain Enzyme: Will make someone feel amplified pain. <br>
<br>
<B>Side Notes</B><BR>
You can select a value of 0 to inject nothing! <br>
Overdose threshold for most chemicals is 30 units. <br>
Exceptions to OD is: (Numbing Enzyme:20)<br>
You can also bite synthetics, but due to how synths work, they won't have anything injected into them.
<br>
"}
usr << browse(output,"window=chemicalrefresher")
return
else
var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. AND KEEP COPYPASTING IT (Pointing Rick Dalton: "That's my code!" ~CL)
for(var/mob/living/carbon/L in living_mobs(1, TRUE)) //Noncarbons don't even process reagents so don't bother listing others.
if(!istype(L, /mob/living/carbon))
continue
if(L == src) //no getting high off your own supply, get a nif or something, nerd.
continue
if(!L.resizable && (trait_injection_selected == "macrocillin" || trait_injection_selected == "microcillin" || trait_injection_selected == "normalcillin")) // If you're using a size reagent, ignore those with pref conflicts.
continue
if(!L.allow_spontaneous_tf && (trait_injection_selected == "androrovir" || trait_injection_selected == "gynorovir" || trait_injection_selected == "androgynorovir")) // If you're using a TF reagent, ignore those with pref conflicts.
continue
targets += L
if(!(targets.len))
to_chat(src, "<span class='notice'>No eligible targets found.</span>")
return
var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets)
if(!target)
return
if(!istype(target, /mob/living/carbon)) //Safety.
to_chat(src, "<span class='warning'>That won't work on that kind of creature! (Only works on crew/monkeys)</span>")
return
var/synth = 0
if(target.isSynthetic())
synth = 1
if(!trait_injection_selected)
to_chat(src, "<span class='notice'>You need to select a reagent.</span>")
return
if(!trait_injection_verb)
to_chat(src, "<span class='notice'>Somehow, you forgot your means of injecting. (Select a verb!)</span>")
return
if(do_after(src, 50, target)) //A decent enough timer.
add_attack_logs(src,target,"Injection trait ([trait_injection_selected], [trait_injection_amount])")
if(target.reagents && (trait_injection_amount > 0) && !synth)
target.reagents.add_reagent(trait_injection_selected, trait_injection_amount)
var/ourmsg = "<span class='warning'>[usr] [trait_injection_verb] [target] "
switch(zone_sel.selecting)
if(BP_HEAD)
ourmsg += "on the head!"
if(BP_TORSO)
ourmsg += "on the chest!"
if(BP_GROIN)
ourmsg += "on the groin!"
if(BP_R_ARM, BP_L_ARM)
ourmsg += "on the arm!"
if(BP_R_HAND, BP_L_HAND)
ourmsg += "on the hand!"
if(BP_R_LEG, BP_L_LEG)
ourmsg += "on the leg!"
if(BP_R_FOOT, BP_L_FOOT)
ourmsg += "on the foot!"
if("mouth")
ourmsg += "on the mouth!"
if("eyes")
ourmsg += "on the eyes!"
ourmsg += "</span>"
visible_message(ourmsg)

View File

@@ -147,6 +147,45 @@
add_verb(H,/mob/living/carbon/human/proc/succubus_drain_finalize) //CHOMPEdit TGPanel add_verb(H,/mob/living/carbon/human/proc/succubus_drain_finalize) //CHOMPEdit TGPanel
add_verb(H,/mob/living/carbon/human/proc/succubus_drain_lethal) //CHOMPEdit TGPanel add_verb(H,/mob/living/carbon/human/proc/succubus_drain_lethal) //CHOMPEdit TGPanel
/datum/trait/neutral/venom_bite
name = "Venomous Injection"
desc = "Allows for injecting prey through one method or another to inject them with a variety of chemicals with varying effects!"
tutorial = "This trait allows you to bite prey with varying effects! <br> \
Options for venoms: <br> \
=====Size Chemicals ===== <br> \
Microcillin: Will make someone shrink. (This is 1% per 0.01 units. So 1 unit = 100% size change) <br> \
Macrocillin: Will make someone grow. (This is 1% per 0.01 units. So 1 unit = 100% size change) <br> \
Normalcillin: Will make someone normal size. (This is 1% per 0.01 units. So 1 unit = 100% size change) Stops at 100% size. <br> \
===== Gender Chemicals ===== <br> \
Androrovir: Will transform someone's sex to male. <br> \
Gynorovir: Will transform someone's sex to female. <br> \
Androgynorovir: Will transform someone's sex to pleural. <br> \
===== Special Chemicals ===== <br> \
Stoxin: Will make someone drowsy. <br> \
Rainbow Toxin: Will make someone see rainbows. <br> \
Paralysis Toxin: Will make someone paralyzed. <br> \
Numbing Enzyme: Will make someone unable to feel pain. <br> \
Pain Enzyme: Will make someone feel pain, amplifieed <br> \
===== Side Notes ===== <br> \
You aren't required to inject anything if you prefer to just use it as a normal bite!"
cost = 0
custom_only = FALSE
/datum/trait/neutral/venom_bite/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.verbs |= /mob/living/proc/injection
H.trait_injection_reagents += "microcillin" // get small
H.trait_injection_reagents += "macrocillin" // get BIG
H.trait_injection_reagents += "normalcillin" // normal
H.trait_injection_reagents += "numbenzyme" // no feelings
H.trait_injection_reagents += "androrovir" // -> MALE
H.trait_injection_reagents += "gynorovir" // -> FEMALE
H.trait_injection_reagents += "androgynorovir" // -> PLURAL
H.trait_injection_reagents += "stoxin" // night night chem
H.trait_injection_reagents += "rainbowtoxin" // Funny flashing lights.
H.trait_injection_reagents += "paralysistoxin" // Paralysis!
H.trait_injection_reagents += "painenzyme" // Pain INCREASER
/datum/trait/neutral/long_vore /datum/trait/neutral/long_vore
name = "Long Predatorial Reach" name = "Long Predatorial Reach"
desc = "Makes you able to use an unspecified appendage to grab creatures." desc = "Makes you able to use an unspecified appendage to grab creatures."

View File

@@ -187,3 +187,58 @@
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>", 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>") "<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>")
*/ */
////////////////////////// Misc Drugs //////////////////////////
/datum/reagent/drugs/rainbow_toxin /// Replaces Space Drugs.
name = "Rainbow Toxin"
id = "rainbowtoxin"
description = "Known for providing a euphoric high, this psychoactive drug is often injected into unknowing prey by serpents and other fanged beasts. Highly valuable and frequently sought after by hypno-enthusiasts and party-goers."
taste_description = "mixed euphoria"
taste_mult = 0.8 //You ARE going to taste this!
scannable = 1 //Sure! If you manage to milk a snake for some of this, go ahead and scan it and mass produce it. Your local club will love you!
/datum/reagent/drugs/rainbow_toxin/affect_blood(mob/living/carbon/M, var/alien, var/removed)
..()
var/drug_strength = 20
M.druggy = max(M.druggy, drug_strength)
/datum/reagent/drugs/bliss/overdose(var/mob/living/M as mob)
if(prob_proc == TRUE && prob(20))
M.hallucination = max(M.hallucination, 5)
prob_proc = FALSE
M.adjustBrainLoss(0.25*REM) //Too much isn't good for your long term health...
M.adjustToxLoss(0.01*REM) //Enough that it'll make your HUD dummy update, but not enough that you'll vomit mid scene. (Sorry emetophiliacs!)
..()
/datum/reagent/paralysis_toxin
name = "Tetrodotoxin"
id = "paralysistoxin"
description = "A potent toxin commonly found in a plethora of species. When exposed to the toxin, causes extreme, paralysis for a prolonged period, with only essential functions of the body being unhindered. Commonly used by covert operatives and used as a crowd control tool."
taste_description = "bitterness"
reagent_state = LIQUID
color = "#37007f"
metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
scannable = 0 //YOU ARE NOT SCANNING THE FUNNY PARALYSIS TOXIN. NO. BAD. STAY AWAY.
/datum/reagent/paralysis_toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.weakened < 50) //Let's not leave them PERMA stuck, after all.
M.AdjustWeakened(5) //Stand in for paralyze so you can still talk/emote/see
/datum/reagent/pain_enzyme
name = "Pain Enzyme"
id = "painenzyme"
description = "An enzyme found in a variety of species. When exposed to the toxin, will cause severe, agonizing pain. The effects can last for hours depending on the dose. Only known cure is an equally strong painkiller or dialysis."
taste_description = "sourness"
reagent_state = LIQUID
color = "#04b8fa" //Light blue in honor of Perry.
metabolism = 0.1 //Lasts up to 50 seconds if you give 5 units.
mrate_static = TRUE
overdose = 100 //There is no OD. You already are taking the worst of it.
scannable = 0 //Let's not have medical mechs able to make an extremely strong 'I hit you you fall down in agony' chem.
/datum/reagent/pain_enzyme/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, -200)
if(prob(0.01)) //1 in 10000 chance per tick. Extremely rare.
to_chat(M,"<span class='warning'>Your body feels as though it's on fire!</span>")

View File

@@ -35,6 +35,10 @@
'sound/effects/mob_effects/xenochimera/regen_5.ogg' 'sound/effects/mob_effects/xenochimera/regen_5.ogg'
) )
var/trash_catching = FALSE //Toggle for trash throw vore from chompstation var/trash_catching = FALSE //Toggle for trash throw vore from chompstation
var/list/trait_injection_reagents = list() //List of all the reagents allowed to be used for injection via venom bite
var/trait_injection_selected = null //RSEdit: What trait reagent you're injecting.
var/trait_injection_amount = 5 //RSEdit: How much you're injecting with traits.
var/trait_injection_verb = "bites" //RSEdit: Which fluffy manner you're doing the injecting.
// //
// Hook for generic creation of stuff on new creatures // Hook for generic creation of stuff on new creatures