Merge pull request #672 from Chemlight/Funny-Coder-Bus

Funny-character-bus-code
This commit is contained in:
Dahlular
2020-11-10 03:10:29 -07:00
committed by GitHub
8 changed files with 475 additions and 2 deletions
@@ -76,3 +76,26 @@
if(S.emptrig == TRUE)
var/obj/item/projectile/bullet/dart/syringe/dart/D = BB
D.emptrig = TRUE
//Chemlight was here, adding dumb bussing things
/obj/item/ammo_casing/chemgun_debug
name = "dart synthesiser"
desc = "A high-power spring, linked to an energy-based dart synthesiser."
projectile_type = /obj/item/projectile/bullet/dart/syringe/debug
firing_effect_type = null
/obj/item/ammo_casing/chemgun_debug/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
if(!BB)
return
if(istype(loc, /obj/item/gun/chem/debug))
var/obj/item/gun/chem/debug/CGD = loc
if(CGD.syringes_left <= 0)
return
if(!CGD.infinite)
CGD.reagents.trans_to(BB, 10)
else
CGD.reagents.copy_to(BB, 10)
BB.name = "chemical dart"
CGD.syringes_left--
..()
+60 -1
View File
@@ -43,4 +43,63 @@
syringes_left++
if(chambered && !chambered.BB)
chambered.newshot()
last_synth = world.time
last_synth = world.time
//Chemlight was here, adding dumb busing things
/obj/item/gun/chem/debug
name = "experimental reagent gun"
desc = "a reagent gun seemingly made to be a part of the user, suggesting the individual generates reagents in their body for it to work."
icon_state = "syringe_pistol"
item_state = "gun" //Smaller inhand
suppressed = TRUE //Softer fire sound
can_unsuppress = FALSE //Permanently silenced
time_per_syringe = 150
syringes_left = 6
max_syringes = 6
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
var/infinite = FALSE
/obj/item/gun/chem/debug/Initialize()
. = ..()
chambered = new /obj/item/ammo_casing/chemgun_debug(src)
START_PROCESSING(SSobj, src)
create_reagents(100, OPENCONTAINER | NO_REACT)
/obj/item/gun/chem/debug/Destroy()
. = ..()
STOP_PROCESSING(SSobj, src)
/obj/item/gun/chem/debug/attack_self(mob/user)
var/list/reagent_ids = sortList(GLOB.chemical_reagents_list)
var/choose_operation = input(user, "Select an option", "Reagent fabricator", "cancel") in list("Select reagent", "Enable production", "Cancel")
if (choose_operation == "Select reagent")
reagents.clear_reagents()
var/chosen_reagent
switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID"))
if("Enter ID")
var/valid_id
while(!valid_id)
chosen_reagent = stripped_input(usr, "Enter the ID of the reagent you want to add to your syringes.")
if(!chosen_reagent) //Get me out of here!
break
for(var/ID in reagent_ids)
if(ID == chosen_reagent)
valid_id = 1
if(!valid_id)
to_chat(usr, "<span class='warning'>A reagent with that ID doesn't exist!</span>")
if("Choose ID")
chosen_reagent = input(usr, "Choose a reagent to add to your syringes.", "Choose a reagent.") as null|anything in reagent_ids
if(chosen_reagent)
reagents.add_reagent(chosen_reagent, 100, null)
else if (choose_operation == "Enable production")
if(!infinite)
infinite = TRUE
to_chat(user, "Now constantly generating reagents.")
else
infinite = FALSE
to_chat(user, "Reagents generation now off.")
else
return
@@ -79,3 +79,10 @@
target.visible_message("<span class='danger'>\The [src] fails to land on target!</span>")
return TRUE
//Chemlight was here, adding dumb bussing things
/obj/item/projectile/bullet/dart/syringe/debug
name = "syringe"
icon_state = "syringeproj"
damage = 0
@@ -0,0 +1,131 @@
// This is more or less my funny tongue being being coded in. - Ken
/obj/item/reagent_containers/chemical_tongue
name = "synthetic reagent tongue"
desc = "A cybernetic organ with the ability to produce reagents, neat!"
icon = 'icons/mob/dogborg.dmi'
icon_state = "synthtongue"
amount_per_transfer_from_this = 5
volume = 200
possible_transfer_amounts = list()
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
spillable = FALSE
splashable = FALSE
reagent_flags = OPENCONTAINER | NO_REACT
var/list/fun_ids = list("growthchem", "shrinkchem", "aphro", "aphro+", "penis_enlarger", "breast_enlarger", "space_drugs", "lithium")
/obj/item/reagent_containers/chemical_tongue/attack(mob/M, mob/user, obj/target)
if(user.a_intent == INTENT_HARM && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
if(M != user)
M.visible_message("<span class='danger'>[user] locks their lips with [M], attempting to give a deep kiss to [M].</span>", \
"<span class='userdanger'>[user] locks their lips with yours, you feel what might be a tongue pushing past your lips then towards your throat!</span>")
if(!do_mob(user, M, 80))
return
playsound(M.loc,'sound/effects/attackblob.ogg', rand(10,50), 1)
if(isliving(M))
var/mob/living/deepkiss = M
deepkiss.adjustOxyLoss(10)
if(!reagents || !reagents.total_volume)
M.visible_message("<span class='warning'>[user] pulls away from the kiss as their tongue in [M]'s mouth soon follows, slurping back into [user]'s muzzle.</span>", \
"<span class='userwarning'>[user] thrusts their tongue down your throat! Pulling it back up as it slithers up then out from your mouth.</span>")
return // The drink might be empty after the delay, such as by spam-feeding
M.visible_message("<span class='warning'>[user] pulls away from the kiss as their tongue in [M]'s mouth soon follows, slurping back into [user]'s muzzle, leaving a long strand of liquid from their lips to [M]'s own before wiping it away.</span>", \
"<span class='userwarning'>[user] thrusts their tongue down your throat! Pulling it back up as it slithers up then out from your mouth. You feel a strange liquid in your throat!</span>")
log_combat(user, M, "fed", reagents.log_list())
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, /datum/reagents.proc/copy_to, M, 10), 5)
if(user.a_intent == INTENT_GRAB && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
if(M != user)
M.visible_message("<span class='warning'>[user] lightly places their lips on [M]'s providing a kiss.</span>", \
"<span class='userwarning'>[user] lightly places their lips against your, you can feel tongue pushing against your lips in the kiss.</span>")
if(!do_mob(user, M, 40))
return
playsound(M.loc,'sound/effects/attackblob.ogg', rand(10,50), 1)
if(!reagents || !reagents.total_volume)
M.visible_message("<span class='warning'>[user] breaks away from the kiss with [M]'s.</span>", \
"<span class='userwarning'>[user] rolls their tongue around the inside of your mouth, before pulling away.</span>")
return // The drink might be empty after the delay, such as by spam-feeding
M.visible_message("<span class='warning'>[user] breaks away from the kiss with [M]'s.</span>", \
"<span class='userwarning'>[user] rolls their tongue around the inside of your mouth, before pulling away. You can almost taste something as [user]'s tongue was laced in something.</span>")
log_combat(user, M, "fed", reagents.log_list())
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, /datum/reagents.proc/copy_to, M, 5), 5)
if(user.a_intent == INTENT_DISARM && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
if(M != user)
M.visible_message("<span class='warning'>[user] attempts nuzzles into [M]'s.</span>", \
"<span class='userwarning'>[user] attempts to bump his snout against yours.</span>")
if(!do_mob(user, M, 10))
return
playsound(M.loc,'sound/effects/attackblob.ogg', rand(10,50), 1)
if(!reagents || !reagents.total_volume)
M.visible_message("<span class='warning'>[user] playfully licks over [M]'s lips.</span>", \
"<span class='userwarning'>[user] playfully licks over your lips.</span>")
return // The drink might be empty after the delay, such as by spam-feeding
M.visible_message("<span class='warning'>[user] playfully licks over [M]'s lips.</span>", \
"<span class='userwarning'>[user] playfully licks over your lips, leaving some chemicals along it.</span>")
log_combat(user, M, "fed", reagents.log_list())
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, /datum/reagents.proc/copy_to, M, 1), 5)
if(user.a_intent == INTENT_HELP)
if(M != user && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
M.visible_message("<span class='notice'>[user] affectionately licks [M]'s lips.</span>", \
"<span class='userwarning'>[user] affectionately licks over your lips.</span>")
playsound(M.loc,'sound/effects/attackblob.ogg', rand(10,50), 1)
else
if(M != user)
M.visible_message("<span class='notice'>[user] affectionately licks [M].</span>", \
"<span class='userwarning'>[user] affectionately licks over you.</span>")
playsound(M.loc,'sound/effects/attackblob.ogg', rand(10,50), 1)
else
return
/obj/item/reagent_containers/chemical_tongue/attack_self(mob/user)
var/chosen_reagent
var/list/reagent_ids = sortList(GLOB.chemical_reagents_list)
var/quick_select = input(user, "Select an option", "Press start") in list("Quick Select", "Debug", "Cancel")
switch (quick_select)
if("Quick Select")
reagents.clear_reagents()
amount_per_transfer_from_this = 5
chosen_reagent = input(user, "What reagent do you want to dispense?") as null|anything in fun_ids
if(chosen_reagent)
reagents.add_reagent(chosen_reagent, 20, null)
if("Debug")
var/operation_selection = input(user, "Select an option", "Reagent fabricator", "cancel") in list("Select reagent", "Clear reagents", "Select transfer amount", "Cancel")
switch (operation_selection)
if("Select reagent")
switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID"))
if("Enter ID")
var/valid_id
while(!valid_id)
chosen_reagent = stripped_input(usr, "Enter the ID of the reagent you want to add.")
if(!chosen_reagent) //Get me out of here!
break
for(var/ID in reagent_ids)
if(ID == chosen_reagent)
valid_id = 1
if(!valid_id)
to_chat(usr, "<span class='warning'>A reagent with that ID doesn't exist!</span>")
if("Choose ID")
chosen_reagent = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in reagent_ids
if(chosen_reagent)
reagents.add_reagent(chosen_reagent, 20, null)
if("Clear reagents")
reagents.clear_reagents()
if("Select transfer amount")
var/transfer_select = input(user, "Select the amount of reagents you'd like to transfer.", "Transfer amount") as num|null
if(transfer_select)
amount_per_transfer_from_this = max(min(round(text2num(transfer_select)),20),1)
else
return
@@ -181,3 +181,77 @@
volume = 250
list_reagents = list("holywater" = 150, "tiresolution" = 50, "dizzysolution" = 50)
amount_per_transfer_from_this = 50
//Chemlight was here.
/obj/item/reagent_containers/hypospray/debug
name = "retractable hypospray syringe"
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
icon = 'icons/obj/syringe.dmi'
item_state = "hypo"
icon_state = "borghypo"
amount_per_transfer_from_this = 5
volume = 200
possible_transfer_amounts = list()
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
reagent_flags = OPENCONTAINER | NO_REACT
slot_flags = ITEM_SLOT_BELT
infinite = TRUE
var/list/fun_ids = list("growthchem", "shrinkchem", "aphro", "aphro+", "penis_enlarger", "breast_enlarger", "space_drugs", "lithium")
/obj/item/reagent_containers/hypospray/debug/attack_self(mob/user)
var/chosen_reagent
var/list/reagent_ids = sortList(GLOB.chemical_reagents_list)
var/quick_select = input(user, "Select an option", "Press start") in list("Quick menu", "Debug", "Cancel")
switch (quick_select)
if("Quick menu")
var/list_selection = input(user, "Choose an catagory", "List Choice") in list("Emergency Meds", "Fun Chemicals", "Self Defense", "Cancel")
switch(list_selection)
if("Emergency Meds")
reagents.clear_reagents()
amount_per_transfer_from_this = 10
reagents.add_reagent_list(list("atropine" = 10, "oxandrolone" = 20, "sal_acid" = 20, "salbutamol" = 10))
if("Self Defense")
reagents.clear_reagents()
amount_per_transfer_from_this = 10
reagents.add_reagent_list(list("tirizene" = 14, "tiresolution" = 21, "bonehurtingjuice" = 14,)) // OOF
if("Fun Chemicals")
reagents.clear_reagents()
amount_per_transfer_from_this = 5
chosen_reagent = input(user, "What reagent do you want to dispense?") as null|anything in fun_ids
if(chosen_reagent)
reagents.add_reagent(chosen_reagent, 20, null)
if("Debug")
var/operation_selection = input(user, "Select an option", "Reagent fabricator", "cancel") in list("Select reagent", "Clear reagents", "Select transfer amount", "Cancel")
switch (operation_selection)
if("Select reagent")
switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID"))
if("Enter ID")
var/valid_id
while(!valid_id)
chosen_reagent = stripped_input(usr, "Enter the ID of the reagent you want to add.")
if(!chosen_reagent) //Get me out of here!
break
for(var/ID in reagent_ids)
if(ID == chosen_reagent)
valid_id = 1
if(!valid_id)
to_chat(usr, "<span class='warning'>A reagent with that ID doesn't exist!</span>")
if("Choose ID")
chosen_reagent = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in reagent_ids
if(chosen_reagent)
reagents.add_reagent(chosen_reagent, 20, null)
if("Clear reagents")
reagents.clear_reagents()
if("Select transfer amount")
var/transfer_select = input(user, "Select the amount of reagents you'd like to inject.", "Transfer amount") as num|null
if(transfer_select)
amount_per_transfer_from_this = max(min(round(text2num(transfer_select)),20),1)
else
return
@@ -0,0 +1,171 @@
// Testing things
/obj/effect/proc_holder/spell/self/Alteration_Mechanical
name = "Alter figure"
desc = "Change and alter your physical form."
human_req = 1
clothes_req = 0
charge_max = 100
cooldown_min = 50
action_icon = 'icons/mob/actions/actions_changeling.dmi'
action_icon_state = "ling_transform"
action_background_icon_state = "bg_spell"
still_recharging_msg = "<span class='notice'>Your reagents are still recharging.</span>"
invocation = null //what is uttered when the wizard casts the spell
invocation_emote_self = null
school = null
sound = 'sound/effects/pop.ogg'
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/rped.ogg'
/obj/effect/proc_holder/spell/self/Alteration_Mechanical/cast(mob/living/carbon/human/user)
var/mob/living/carbon/human/H = user
var/list/reagent_options = sortList(GLOB.chemical_reagents_list)
H.visible_message("<span class='notice'> user] gains a look of \
concentration while standing perfectly still.\
Their body seems to shift and starts reshaping itself.</span>",
"<span class='notice'>You focus intently on altering your body while \
standing perfectly still...</span>")
var/select_alteration = input(user, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Genitals", "Penis", "Vagina", "Penis Length", "Breast Size", "Penis Production", "Breast Production", "Alter Height", "Cancel")
do_sparks(5, FALSE, user.loc)
if (select_alteration == "Genitals")
var/list/organs = list()
var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
switch(operation)
if("add sexual organ")
var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel")
if(new_organ == "Penis")
H.give_penis()
else if(new_organ == "Testicles")
H.give_balls()
else if(new_organ == "Breasts")
H.give_breasts()
else if(new_organ == "Vagina")
H.give_vagina()
else if(new_organ == "Womb")
H.give_womb()
else
return
if("remove sexual organ")
for(var/obj/item/organ/genital/X in H.internal_organs)
var/obj/item/organ/I = X
organs["[I.name] ([I.type])"] = I
var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs
organ = organs[organ]
if(!organ)
return
var/obj/item/organ/genital/O
if(isorgan(organ))
O = organ
O.Remove(H)
organ.forceMove(get_turf(H))
qdel(organ)
H.update_genitals()
else if (select_alteration == "Penis")
for(var/obj/item/organ/genital/penis/X in H.internal_organs)
qdel(X)
var/new_shape
new_shape = input(user, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list
if(new_shape)
H.dna.features["cock_shape"] = new_shape
H.update_genitals()
H.give_balls()
H.give_penis()
H.apply_overlay()
else if (select_alteration == "Vagina")
for(var/obj/item/organ/genital/vagina/X in H.internal_organs)
qdel(X)
var/new_shape
new_shape = input(user, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list
if(new_shape)
H.dna.features["vag_shape"] = new_shape
H.update_genitals()
H.give_womb()
H.give_vagina()
H.apply_overlay()
else if (select_alteration == "Penis Length")
for(var/obj/item/organ/genital/penis/X in H.internal_organs)
qdel(X)
var/new_length
new_length = input(user, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Genital Alteration") as num|null
if(new_length)
H.dna.features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN)
H.update_genitals()
H.apply_overlay()
H.give_balls()
H.give_penis()
else if (select_alteration == "Breast Size")
for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
qdel(X)
var/new_size
new_size = input(user, "Breast Size", "Genital Alteration") as null|anything in GLOB.breasts_size_list
if(new_size)
H.dna.features["breasts_size"] = new_size
H.update_genitals()
H.apply_overlay()
H.give_breasts()
else if (select_alteration == "Penis Production")
if(H.getorganslot("testicles"))
var/obj/item/organ/genital/testicles/T = H.getorganslot("testicles")
var/new_fluid_penis
switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID"))
if("Enter ID")
var/valid_id
while(!valid_id)
new_fluid_penis = stripped_input(usr, "Enter the ID of the reagent you want to add to your testicles.")
if(!new_fluid_penis) //Get me out of here!
break
for(var/ID in reagent_options)
if(ID == new_fluid_penis)
valid_id = 1
if(!valid_id)
to_chat(usr, "<span class='warning'>A reagent with that ID doesn't exist!</span>")
if("Choose ID")
new_fluid_penis = input(usr, "Choose a reagent to add to your testicles.", "Choose a reagent.") as null|anything in reagent_options
if(new_fluid_penis)
T.fluid_id = new_fluid_penis
H.update_genitals()
H.apply_overlay()
else
to_chat(user, "You need balls for this to work.")
else if(select_alteration == "Breast Production")
if(H.getorganslot("breasts"))
var/obj/item/organ/genital/testicles/B = H.getorganslot("breasts")
var/new_fluid_breasts
switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID"))
if("Enter ID")
var/valid_id
while(!valid_id)
new_fluid_breasts = stripped_input(usr, "Enter the ID of the reagent you want to add to your breasts.")
if(!new_fluid_breasts) //Get me out of here!
break
for(var/ID in reagent_options)
if(ID == new_fluid_breasts)
valid_id = 1
if(!valid_id)
to_chat(usr, "<span class='warning'>A reagent with that ID doesn't exist!</span>")
if("Choose ID")
new_fluid_breasts = input(usr, "Choose a reagent to add to your breasts.", "Choose a reagent.") as null|anything in reagent_options
if(new_fluid_breasts)
B.fluid_id = new_fluid_breasts
H.update_genitals()
H.apply_overlay()
else
to_chat(user, "You need functioning breasts for this to work.")
else if (select_alteration == "Alter Height")
var/altered_height
altered_height = input(user, "Choose your desired sprite size:\n([MIN_BODYSIZE]-400%)", "Height Alteration") as num|null
if(altered_height)
H.size_multiplier = (max(min( round(text2num(altered_height)),400),MIN_BODYSIZE))/100
playsound(user.loc, pshoom_or_beepboopblorpzingshadashwoosh, 40, 1)
do_sparks(5, FALSE, user.loc)
H.visible_message("<span class='danger'>[pick("[H] shifts in size!", "[H] alters in height!", "[H] reshapes into a new stature!")]</span>")
else
return
@@ -234,3 +234,10 @@
name = "surgical toolset implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes)
//Ignore this one this is for a bus character.
/obj/item/organ/cyberimp/arm/COMPound
name = "chemical cybernetics implant"
desc = "A powerful cybernetic implant that contains chemical fabrication modules built into the user's arm."
contents = newlist(/obj/item/reagent_containers/hypospray/debug, /obj/item/gun/chem/debug, /obj/item/reagent_containers/chemical_tongue, /obj/item/fermichem/pHmeter)
+2 -1
View File
@@ -1775,7 +1775,6 @@
#include "code\modules\holiday\easter.dm"
#include "code\modules\holiday\holidays.dm"
#include "code\modules\holiday\halloween\bartholomew.dm"
//#include "code\modules\holiday\halloween\halloween.dm" //Time to go ahead and disable this. See you next year.
#include "code\modules\holiday\halloween\jacqueen.dm"
#include "code\modules\holodeck\area_copy.dm"
#include "code\modules\holodeck\computer.dm"
@@ -2614,6 +2613,7 @@
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\bottle.dm"
#include "code\modules\reagents\reagent_containers\chem_pack.dm"
#include "code\modules\reagents\reagent_containers\Chemical_tongue.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"
#include "code\modules\reagents\reagent_containers\glass.dm"
#include "code\modules\reagents\reagent_containers\hypospray.dm"
@@ -2788,6 +2788,7 @@
#include "code\modules\shuttle\syndicate.dm"
#include "code\modules\shuttle\white_ship.dm"
#include "code\modules\spells\spell.dm"
#include "code\modules\spells\spell_types\adminbussed.dm"
#include "code\modules\spells\spell_types\aimed.dm"
#include "code\modules\spells\spell_types\area_teleport.dm"
#include "code\modules\spells\spell_types\barnyard.dm"