things with stuff (#6233)
* buncha things from upstream * datums globals, onclick * datums * game folder, holy shit mirror bot why * modules * icons * dme * compiles cleanly * tools purge * updates maps * double check just because. and wew lad * incidentally, this needs more work first * some things * weh * sound cleanup and icons * reeeee * compile issues * oh look, fresh code sync * cleans up some unused icons * dirty vars * reeeeeeeeeeeeeeee * wew lad. fuck off with this already
This commit is contained in:
@@ -40,4 +40,4 @@
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list("synthflesh" = 75)
|
||||
build_path = /obj/item/melee/synthetic_arm_blade
|
||||
category = list("special")
|
||||
category = list("other","emagged")
|
||||
@@ -2,6 +2,42 @@
|
||||
/////////////////Weapons/////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/c38/sec
|
||||
id = "sec_38"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/rubbershot/sec
|
||||
id = "sec_rshot"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/shotgun_slug/sec
|
||||
id = "sec_slug"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/buckshot_shell/sec
|
||||
id = "sec_bshot"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/shotgun_dart/sec
|
||||
id = "sec_dart"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/incendiary_slug/sec
|
||||
id = "sec_Islug"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/pin_testing
|
||||
name = "Test-Range Firing Pin"
|
||||
desc = "This safety firing pin allows firearms to be operated within proximity to a firing range."
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
if(initial(tempCheck.icon_state) != null)
|
||||
critical_items += I
|
||||
|
||||
|
||||
/obj/machinery/rnd/experimentor/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -109,8 +108,7 @@
|
||||
ejectItem()
|
||||
. = ..(O)
|
||||
|
||||
/obj/machinery/rnd/experimentor/attack_hand(mob/user)
|
||||
user.set_machine(src)
|
||||
/obj/machinery/rnd/experimentor/ui_interact(mob/user)
|
||||
var/list/dat = list("<center>")
|
||||
if(!linked_console)
|
||||
dat += "<b><a href='byond://?src=[REF(src)];function=search'>Scan for R&D Console</A></b>"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "technology fabricator"
|
||||
desc = "Makes researched and prototype items with materials and energy."
|
||||
container_type = OPENCONTAINER
|
||||
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/consoleless_interface = FALSE //Whether it can be used without a console.
|
||||
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
|
||||
var/list/categories = list()
|
||||
|
||||
@@ -1012,13 +1012,8 @@ doesn't have toxins access.
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/rdconsole/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/rdconsole/interact(mob/user)
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/rdconsole/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/datum/browser/popup = new(user, "rndconsole", name, 900, 600)
|
||||
popup.add_stylesheet("techwebs", 'html/browser/techwebs.css')
|
||||
popup.set_content(generate_ui())
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
var/console_link = TRUE //allow console link.
|
||||
var/requires_console = TRUE
|
||||
var/disabled = FALSE
|
||||
var/shocked = FALSE
|
||||
var/obj/machinery/computer/rdconsole/linked_console
|
||||
var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer)
|
||||
|
||||
@@ -39,17 +38,7 @@
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/rnd/attack_hand(mob/user)
|
||||
if(shocked)
|
||||
if(shock(user,50))
|
||||
return
|
||||
if(panel_open)
|
||||
wires.interact(user)
|
||||
|
||||
/obj/machinery/rnd/attackby(obj/item/O, mob/user, params)
|
||||
if (shocked)
|
||||
if(shock(user,50))
|
||||
return TRUE
|
||||
if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O))
|
||||
if(linked_console)
|
||||
disconnect_console()
|
||||
|
||||
@@ -80,13 +80,6 @@
|
||||
env.merge(removed)
|
||||
air_update_turf()
|
||||
|
||||
/obj/machinery/rnd/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
|
||||
if (disabled)
|
||||
return
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
return
|
||||
|
||||
/proc/fix_noid_research_servers()
|
||||
var/list/no_id_servers = list()
|
||||
var/list/server_ids = list()
|
||||
@@ -138,10 +131,8 @@
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/rdservercontrol/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/rdservercontrol/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = ""
|
||||
|
||||
switch(screen)
|
||||
@@ -149,8 +140,7 @@
|
||||
dat += "Connected Servers:<BR><BR>"
|
||||
|
||||
for(var/obj/machinery/rnd/server/S in GLOB.machines)
|
||||
dat += "[S.name] || "
|
||||
dat += "<BR>"
|
||||
dat += "[S.name]<BR>"
|
||||
|
||||
//Mining status here
|
||||
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
description = "NT default research technologies."
|
||||
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani",
|
||||
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab",
|
||||
"space_heater","xlarge_beaker") //Default research tech, prevents bricking
|
||||
"space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38") //Default research tech, prevents bricking
|
||||
|
||||
|
||||
/////////////////////////Biotech/////////////////////////
|
||||
/datum/techweb_node/biotech
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
//////////////////////////////////////////////
|
||||
////////// SLIME CROSSBREEDS //////////
|
||||
//////////////////////////////////////////////
|
||||
// A system of combining two extract types. //
|
||||
// Performed by feeding a slime 20 of an //
|
||||
// extract color. //
|
||||
//////////////////////////////////////////////
|
||||
/*==========================================*\
|
||||
To add a crossbreed:
|
||||
The file name is automatically selected
|
||||
by the crossbreeding effect, which uses
|
||||
the format slimecross/[modifier]/[color].
|
||||
|
||||
If a crossbreed doesn't exist, don't
|
||||
worry. If no file is found at that
|
||||
location, it will simple display that
|
||||
the crossbreed was too unstable.
|
||||
|
||||
As a result, do not feel the need to
|
||||
try to add all of the crossbred
|
||||
effects at once, if you're here and
|
||||
trying to make a new slime type. Just
|
||||
get your slimetype in the codebase and
|
||||
get around to the crossbreeds eventually!
|
||||
\*==========================================*/
|
||||
|
||||
/obj/item/slimecross //The base type for crossbred extracts. Mostly here for posterity, and to set base case things.
|
||||
name = "crossbred slime extract"
|
||||
desc = "An extremely potent slime extract, formed through crossbreeding."
|
||||
icon = 'icons/obj/slimecrossing.dmi'
|
||||
icon_state = "base"
|
||||
var/colour = "null"
|
||||
var/effect = "null"
|
||||
force = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
|
||||
/obj/item/slimecross/Initialize()
|
||||
..()
|
||||
name = colour + " " + name
|
||||
var/itemcolor = "#FFFFFF"
|
||||
switch(colour)
|
||||
if("orange")
|
||||
itemcolor = "#FFA500"
|
||||
if("purple")
|
||||
itemcolor = "#B19CD9"
|
||||
if("blue")
|
||||
itemcolor = "#ADD8E6"
|
||||
if("metal")
|
||||
itemcolor = "#7E7E7E"
|
||||
if("yellow")
|
||||
itemcolor = "#FFFF00"
|
||||
if("dark purple")
|
||||
itemcolor = "#551A8B"
|
||||
if("dark blue")
|
||||
itemcolor = "#0000FF"
|
||||
if("silver")
|
||||
itemcolor = "#D3D3D3"
|
||||
if("bluespace")
|
||||
itemcolor = "#32CD32"
|
||||
if("sepia")
|
||||
itemcolor = "#704214"
|
||||
if("cerulean")
|
||||
itemcolor = "#2956B2"
|
||||
if("pyrite")
|
||||
itemcolor = "#FAFAD2"
|
||||
if("red")
|
||||
itemcolor = "#FF0000"
|
||||
if("green")
|
||||
itemcolor = "#00FF00"
|
||||
if("pink")
|
||||
itemcolor = "#FF69B4"
|
||||
if("gold")
|
||||
itemcolor = "#FFD700"
|
||||
if("oil")
|
||||
itemcolor = "#505050"
|
||||
if("black")
|
||||
itemcolor = "#000000"
|
||||
if("light pink")
|
||||
itemcolor = "#FFB6C1"
|
||||
if("adamantine")
|
||||
itemcolor = "#008B8B"
|
||||
add_atom_colour(itemcolor, FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/obj/item/slimecrossbeaker //To be used as a result for extract reactions that make chemicals.
|
||||
name = "result extract"
|
||||
desc = "You shouldn't see this."
|
||||
icon = 'icons/obj/slimecrossing.dmi'
|
||||
icon_state = "base"
|
||||
var/del_on_empty = TRUE
|
||||
container_type = INJECTABLE | DRAWABLE
|
||||
var/list/list_reagents
|
||||
|
||||
/obj/item/slimecrossbeaker/Initialize()
|
||||
..()
|
||||
create_reagents(50)
|
||||
if(list_reagents)
|
||||
for(var/reagent in list_reagents)
|
||||
reagents.add_reagent(reagent, list_reagents[reagent])
|
||||
if(del_on_empty)
|
||||
START_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecrossbeaker/Destroy()
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
return ..()
|
||||
|
||||
/obj/item/slimecrossbeaker/process()
|
||||
if(!reagents.total_volume)
|
||||
visible_message("<span class='notice'>[src] has been drained completely, and melts away.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecrossbeaker/bloodpack //Pack of 50u blood. Deletes on empty.
|
||||
name = "blood extract"
|
||||
desc = "A sphere of liquid blood, somehow managing to stay together."
|
||||
color = "#FF0000"
|
||||
list_reagents = list("blood" = 50)
|
||||
|
||||
/obj/item/slimecrossbeaker/pax //5u synthpax.
|
||||
name = "peace-inducing extract"
|
||||
desc = "A small blob of synthetic pax."
|
||||
color = "#FFCCCC"
|
||||
list_reagents = list("synthpax" = 5)
|
||||
|
||||
/obj/item/slimecrossbeaker/omnizine //15u omnizine.
|
||||
name = "healing extract"
|
||||
desc = "A gelatinous extract of pure omnizine."
|
||||
color = "#FF00FF"
|
||||
list_reagents = list("omnizine" = 15)
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents.
|
||||
container_type = DRAWABLE //Cannot be refilled, since it's basically an autoinjector!
|
||||
var/ignore_flags = FALSE
|
||||
var/self_use_only = FALSE
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user)
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
if(!iscarbon(M))
|
||||
return
|
||||
if(self_use_only && M != user)
|
||||
to_chat(user, "<span class='warning'>This can only be used on yourself.</span>")
|
||||
return
|
||||
if(reagents.total_volume && (ignore_flags || M.can_inject(user, 1)))
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
if(user != M)
|
||||
to_chat(M, "<span class='warning'>[user] presses [src] against you!</span>")
|
||||
to_chat(user, "<span class='notice'>You press [src] against [M], injecting them.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You press [src] against yourself, and it flattens against you!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There's no place to stick [src]!</span>")
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/regenpack
|
||||
ignore_flags = TRUE //It is, after all, intended to heal.
|
||||
name = "mending solution"
|
||||
desc = "A strange glob of sweet-smelling semifluid, which seems to stick to skin rather easily."
|
||||
color = "#FF00FF"
|
||||
list_reagents = list("regen_jelly" = 20)
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/slimejelly //Primarily for slimepeople, but you do you.
|
||||
self_use_only = TRUE
|
||||
ignore_flags = TRUE
|
||||
name = "slime jelly bubble"
|
||||
desc = "A sphere of slime jelly. It seems to stick to your skin, but avoids other surfaces."
|
||||
color = "#00FF00"
|
||||
list_reagents = list("slimejelly" = 50)
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/peaceandlove
|
||||
container_type = null //It won't be *that* easy to get your hands on pax.
|
||||
name = "peaceful distillation"
|
||||
desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy."
|
||||
color = "#DDAAAA"
|
||||
list_reagents = list("synthpax" = 10, "space_drugs" = 15) //Peace, dudes
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/slimestimulant
|
||||
name = "invigorating gel"
|
||||
desc = "A bubbling purple mixture, designed to heal and boost movement."
|
||||
color = "#FF00FF"
|
||||
list_reagents = list("regen_jelly" = 30, "methamphetamine" = 9)
|
||||
@@ -0,0 +1,798 @@
|
||||
/obj/screen/alert/status_effect/rainbow_protection
|
||||
name = "Rainbow Protection"
|
||||
desc = "You are defended from harm, but so are those you might seek to injure!"
|
||||
icon_state = "slime_rainbowshield"
|
||||
|
||||
/datum/status_effect/rainbow_protection
|
||||
id = "rainbow_protection"
|
||||
duration = 100
|
||||
alert_type = /obj/screen/alert/status_effect/rainbow_protection
|
||||
var/originalcolor
|
||||
|
||||
/datum/status_effect/rainbow_protection/on_apply()
|
||||
owner.status_flags |= GODMODE
|
||||
owner.add_trait(TRAIT_PACIFISM, "slimestatus")
|
||||
owner.visible_message("<span class='warning'>[owner] shines with a brilliant rainbow light.</span>",
|
||||
"<span class='notice'>You feel protected by an unknown force!</span>")
|
||||
originalcolor = owner.color
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/rainbow_protection/tick()
|
||||
owner.color = rgb(rand(0,255),rand(0,255),rand(0,255))
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/rainbow_protection/on_remove()
|
||||
owner.status_flags &= ~GODMODE
|
||||
owner.color = originalcolor
|
||||
owner.remove_trait(TRAIT_PACIFISM, "slimestatus")
|
||||
owner.visible_message("<span class='notice'>[owner] stops glowing, the rainbow light fading away.</span>",
|
||||
"<span class='warning'>You no longer feel protected...</span>")
|
||||
|
||||
/obj/screen/alert/status_effect/slimeskin
|
||||
name = "Adamantine Slimeskin"
|
||||
desc = "You are covered in a thick, non-neutonian gel."
|
||||
icon_state = "slime_stoneskin"
|
||||
|
||||
/datum/status_effect/slimeskin
|
||||
id = "slimeskin"
|
||||
duration = 300
|
||||
alert_type = /obj/screen/alert/status_effect/slimeskin
|
||||
var/originalcolor
|
||||
|
||||
/datum/status_effect/slimeskin/on_apply()
|
||||
originalcolor = owner.color
|
||||
owner.color = "#3070CC"
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.damage_resistance += 10
|
||||
owner.visible_message("<span class='warning'>[owner] is suddenly covered in a strange, blue-ish gel!</span>",
|
||||
"<span class='notice'>You are covered in a thick, rubbery gel.</span>")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/slimeskin/on_remove()
|
||||
owner.color = originalcolor
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.damage_resistance -= 10
|
||||
owner.visible_message("<span class='warning'>[owner]'s gel coating liquefies and dissolves away.</span>",
|
||||
"<span class='notice'>Your gel second-skin dissolves!</span>")
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
//////////////////CONSUMING EXTRACTS///////////////////
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
/datum/status_effect/firecookie
|
||||
id = "firecookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/firecookie/on_apply()
|
||||
owner.add_trait(TRAIT_RESISTCOLD,"firecookie")
|
||||
owner.adjust_bodytemperature(110)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/firecookie/on_remove()
|
||||
owner.remove_trait(TRAIT_RESISTCOLD,"firecookie")
|
||||
|
||||
/datum/status_effect/watercookie
|
||||
id = "watercookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/watercookie/on_apply()
|
||||
owner.add_trait(TRAIT_NOSLIPWATER,"watercookie")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/watercookie/tick()
|
||||
for(var/turf/open/T in range(get_turf(owner),1))
|
||||
T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
|
||||
|
||||
/datum/status_effect/watercookie/on_remove()
|
||||
owner.remove_trait(TRAIT_NOSLIPWATER,"watercookie")
|
||||
|
||||
/datum/status_effect/metalcookie
|
||||
id = "metalcookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/metalcookie/on_apply()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.brute_mod *= 0.9
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/metalcookie/on_remove()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.brute_mod /= 0.9
|
||||
|
||||
/datum/status_effect/sparkcookie
|
||||
id = "sparkcookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 300
|
||||
var/original_coeff
|
||||
|
||||
/datum/status_effect/sparkcookie/on_apply()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
original_coeff = H.physiology.siemens_coeff
|
||||
H.physiology.siemens_coeff = 0
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/sparkcookie/on_remove()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.siemens_coeff = original_coeff
|
||||
|
||||
/datum/status_effect/toxincookie
|
||||
id = "toxincookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 600
|
||||
|
||||
/datum/status_effect/toxincookie/on_apply()
|
||||
owner.add_trait(TRAIT_TOXINLOVER,"toxincookie")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/toxincookie/on_remove()
|
||||
owner.remove_trait(TRAIT_TOXINLOVER,"toxincookie")
|
||||
|
||||
/datum/status_effect/timecookie
|
||||
id = "timecookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 600
|
||||
|
||||
/datum/status_effect/timecookie/on_apply()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H
|
||||
H.physiology.do_after_speed *= 0.95
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/timecookie/on_remove()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H
|
||||
H.physiology.do_after_speed /= 0.95
|
||||
|
||||
/datum/status_effect/lovecookie
|
||||
id = "lovecookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 300
|
||||
|
||||
/datum/status_effect/lovecookie/tick()
|
||||
if(owner.stat != CONSCIOUS)
|
||||
return
|
||||
if(iscarbon(owner))
|
||||
var/mob/living/carbon/C = owner
|
||||
if(C.handcuffed)
|
||||
return
|
||||
var/list/huggables = list()
|
||||
for(var/mob/living/carbon/L in range(get_turf(owner),1))
|
||||
if(L != owner)
|
||||
huggables += L
|
||||
if(length(huggables))
|
||||
var/mob/living/carbon/hugged = pick(huggables)
|
||||
owner.visible_message("<span class='notice'>[owner] hugs [hugged]!</span>", "<span class='notice'>You hug [hugged]!</span>")
|
||||
|
||||
/datum/status_effect/tarcookie
|
||||
id = "tarcookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/tarcookie/tick()
|
||||
for(var/mob/living/carbon/human/L in range(get_turf(owner),1))
|
||||
if(L != owner)
|
||||
L.apply_status_effect(/datum/status_effect/tarfoot)
|
||||
|
||||
/datum/status_effect/tarfoot
|
||||
id = "tarfoot"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 30
|
||||
|
||||
/datum/status_effect/tarfoot/on_apply()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
H.physiology.speed_mod += 0.5
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/tarfoot/on_remove()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
H.physiology.speed_mod -= 0.5
|
||||
|
||||
/datum/status_effect/spookcookie
|
||||
id = "spookcookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 300
|
||||
|
||||
/datum/status_effect/spookcookie/on_apply()
|
||||
var/image/I = image(icon = 'icons/mob/simple_human.dmi', icon_state = "skeleton", layer = ABOVE_MOB_LAYER, loc = owner)
|
||||
I.override = 1
|
||||
owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "spookyscary", I)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/spookcookie/on_remove()
|
||||
owner.remove_alt_appearance("spookyscary")
|
||||
|
||||
/datum/status_effect/peacecookie
|
||||
id = "peacecookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/peacecookie/tick()
|
||||
for(var/mob/living/L in range(get_turf(owner),1))
|
||||
L.apply_status_effect(/datum/status_effect/plur)
|
||||
|
||||
/datum/status_effect/plur
|
||||
id = "plur"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 30
|
||||
|
||||
/datum/status_effect/plur/on_apply()
|
||||
owner.add_trait(TRAIT_PACIFISM, "peacecookie")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/plur/on_remove()
|
||||
owner.remove_trait(TRAIT_PACIFISM, "peacecookie")
|
||||
|
||||
/datum/status_effect/adamantinecookie
|
||||
id = "adamantinecookie"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = null
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/adamantinecookie/on_apply()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.burn_mod *= 0.9
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/adamantinecookie/on_remove()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.burn_mod /= 0.9
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
//////////////////STABILIZED EXTRACTS//////////////////
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
/datum/status_effect/stabilized //The base stabilized extract effect, has no effect of its' own.
|
||||
id = "stabilizedbase"
|
||||
duration = -1
|
||||
alert_type = null
|
||||
var/obj/item/slimecross/stabilized/linked_extract
|
||||
var/colour = "null"
|
||||
|
||||
/datum/status_effect/stabilized/tick()
|
||||
if(!linked_extract || !linked_extract.loc) //Sanity checking
|
||||
qdel(src)
|
||||
return
|
||||
if(linked_extract && linked_extract.loc != owner && linked_extract.loc.loc != owner)
|
||||
linked_extract.linked_effect = null
|
||||
if(!QDELETED(linked_extract))
|
||||
linked_extract.owner = null
|
||||
START_PROCESSING(SSobj,linked_extract)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/null //This shouldn't ever happen, but just in case.
|
||||
id = "stabilizednull"
|
||||
|
||||
|
||||
//Stabilized effects start below.
|
||||
/datum/status_effect/stabilized/grey
|
||||
id = "stabilizedgrey"
|
||||
colour = "grey"
|
||||
|
||||
/datum/status_effect/stabilized/grey/tick()
|
||||
for(var/mob/living/simple_animal/slime/S in range(1, get_turf(owner)))
|
||||
if(!(owner in S.Friends))
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] pulses gently as it communicates with [S]</span>")
|
||||
S.Friends[owner] = 1
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/orange
|
||||
id = "stabilizedorange"
|
||||
colour = "orange"
|
||||
|
||||
/datum/status_effect/stabilized/orange/tick()
|
||||
var/body_temperature_difference = BODYTEMP_NORMAL - owner.bodytemperature
|
||||
owner.adjust_bodytemperature(min(5,body_temperature_difference))
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/purple
|
||||
id = "stabilizedpurple"
|
||||
colour = "purple"
|
||||
|
||||
/datum/status_effect/stabilized/purple/tick()
|
||||
var/is_healing = FALSE
|
||||
if(owner.getBruteLoss() > 0)
|
||||
owner.adjustBruteLoss(-0.2)
|
||||
is_healing = TRUE
|
||||
if(owner.getFireLoss() > 0)
|
||||
owner.adjustFireLoss(-0.2)
|
||||
is_healing = TRUE
|
||||
if(owner.getToxLoss() > 0)
|
||||
owner.adjustToxLoss(-0.2, forced = TRUE) //Slimepeople should also get healed.
|
||||
is_healing = TRUE
|
||||
if(is_healing)
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN is regenerating slowly, purplish goo filling in small injuries!</span>"
|
||||
new /obj/effect/temp_visual/heal(get_turf(owner), "#FF0000")
|
||||
else
|
||||
examine_text = null
|
||||
..()
|
||||
|
||||
/datum/status_effect/stabilized/blue
|
||||
id = "stabilizedblue"
|
||||
colour = "blue"
|
||||
|
||||
/datum/status_effect/stabilized/blue/on_apply()
|
||||
owner.add_trait(TRAIT_NOSLIPWATER, "slimestatus")
|
||||
return ..()
|
||||
|
||||
datum/status_effect/stabilized/blue/on_remove()
|
||||
owner.remove_trait(TRAIT_NOSLIPWATER, "slimestatus")
|
||||
|
||||
/datum/status_effect/stabilized/metal
|
||||
id = "stabilizedmetal"
|
||||
colour = "metal"
|
||||
var/cooldown = 30
|
||||
var/max_cooldown = 30
|
||||
|
||||
/datum/status_effect/stabilized/metal/tick()
|
||||
if(cooldown > 0)
|
||||
cooldown--
|
||||
else
|
||||
cooldown = max_cooldown
|
||||
var/list/sheets = list()
|
||||
for(var/obj/item/stack/sheet/S in owner.GetAllContents())
|
||||
if(S.amount < S.max_amount)
|
||||
sheets += S
|
||||
|
||||
if(sheets.len > 0)
|
||||
var/obj/item/stack/sheet/S = pick(sheets)
|
||||
S.amount++
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] adds a layer of slime to [S], which metamorphosizes into another sheet of material!</span>")
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/status_effect/stabilized/yellow
|
||||
id = "stabilizedyellow"
|
||||
colour = "yellow"
|
||||
var/cooldown = 10
|
||||
var/max_cooldown = 10
|
||||
examine_text = "<span class='warning'>Nearby electronics seem just a little more charged wherever SUBJECTPRONOUN goes.</span>"
|
||||
|
||||
/datum/status_effect/stabilized/yellow/tick()
|
||||
if(cooldown > 0)
|
||||
cooldown--
|
||||
return ..()
|
||||
cooldown = max_cooldown
|
||||
var/list/batteries = list()
|
||||
for(var/obj/item/stock_parts/cell/C in owner.GetAllContents())
|
||||
if(C.charge < C.maxcharge)
|
||||
batteries += C
|
||||
if(batteries.len)
|
||||
var/obj/item/stock_parts/cell/ToCharge = pick(batteries)
|
||||
ToCharge.charge += min(ToCharge.maxcharge - ToCharge.charge, ToCharge.maxcharge/10) //10% of the cell, or to maximum.
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] discharges some energy into a device you have.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/hothands
|
||||
name = "burning fingertips"
|
||||
desc = "You shouldn't see this."
|
||||
|
||||
/obj/item/hothands/is_hot()
|
||||
return 290 //Below what's required to ignite plasma.
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple
|
||||
id = "stabilizeddarkpurple"
|
||||
colour = "dark purple"
|
||||
var/obj/item/hothands/fire
|
||||
examine_text = "<span class='notice'>Their fingertips burn brightly!</span>"
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/on_apply()
|
||||
owner.add_trait(TRAIT_RESISTHEATHANDS, "slimestatus")
|
||||
fire = new(owner)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/tick()
|
||||
var/obj/item/I = owner.get_active_held_item()
|
||||
var/obj/item/reagent_containers/food/snacks/F = I
|
||||
if(istype(F))
|
||||
if(F.cooked_type)
|
||||
to_chat(owner, "<span class='warning'>[linked_extract] flares up brightly, and your hands alone are enough cook [F]!</span>")
|
||||
F.microwave_act()
|
||||
else
|
||||
I.attackby(fire, owner)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/on_remove()
|
||||
owner.remove_trait(TRAIT_RESISTHEATHANDS, "slimestatus")
|
||||
qdel(fire)
|
||||
|
||||
/datum/status_effect/stabilized/darkblue
|
||||
id = "stabilizeddarkblue"
|
||||
colour = "dark blue"
|
||||
|
||||
/datum/status_effect/stabilized/darkblue/tick()
|
||||
if(owner.fire_stacks > 0 && prob(80))
|
||||
owner.fire_stacks--
|
||||
if(owner.fire_stacks <= 0)
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] coats you in a watery goo, extinguishing the flames.</span>")
|
||||
var/obj/O = owner.get_active_held_item()
|
||||
O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
|
||||
O.acid_level = 0
|
||||
// Monkey cube
|
||||
if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
|
||||
to_chat(owner, "<span class='warning'>[linked_extract] kept your hands wet! It makes [O] expand!</span>")
|
||||
var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O
|
||||
cube.Expand()
|
||||
|
||||
// Dehydrated carp
|
||||
else if(istype(O, /obj/item/toy/plush/carpplushie/dehy_carp))
|
||||
to_chat(owner, "<span class='warning'>[linked_extract] kept your hands wet! It makes [O] expand!</span>")
|
||||
var/obj/item/toy/plush/carpplushie/dehy_carp/dehy = O
|
||||
dehy.Swell() // Makes a carp
|
||||
|
||||
else if(istype(O, /obj/item/stack/sheet/hairlesshide))
|
||||
to_chat(owner, "<span class='warning'>[linked_extract] kept your hands wet! It wets [O]!</span>")
|
||||
var/obj/item/stack/sheet/hairlesshide/HH = O
|
||||
var/obj/item/stack/sheet/wetleather/WL = new(get_turf(HH))
|
||||
WL.amount = HH.amount
|
||||
qdel(HH)
|
||||
..()
|
||||
|
||||
/datum/status_effect/stabilized/silver
|
||||
id = "stabilizedsilver"
|
||||
colour = "silver"
|
||||
|
||||
/datum/status_effect/stabilized/silver/on_apply()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.hunger_mod *= 0.8 //20% buff
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/silver/on_remove()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.hunger_mod /= 0.8
|
||||
|
||||
//Bluespace has an icon because it's kinda active.
|
||||
/obj/screen/alert/status_effect/bluespaceslime
|
||||
name = "Stabilized Bluespace Extract"
|
||||
desc = "You shouldn't see this, since we set it to change automatically!"
|
||||
icon_state = "slime_bluespace_on"
|
||||
|
||||
/datum/status_effect/bluespacestabilization
|
||||
id = "stabilizedbluespacecooldown"
|
||||
duration = 1200
|
||||
alert_type = null
|
||||
|
||||
/datum/status_effect/stabilized/bluespace
|
||||
id = "stabilizedbluespace"
|
||||
colour = "bluespace"
|
||||
alert_type = /obj/screen/alert/status_effect/bluespaceslime
|
||||
var/healthcheck
|
||||
|
||||
/datum/status_effect/stabilized/bluespace/tick()
|
||||
if(owner.has_status_effect(/datum/status_effect/bluespacestabilization))
|
||||
linked_alert.desc = "The stabilized bluespace extract is still aligning you with the bluespace axis."
|
||||
linked_alert.icon_state = "slime_bluespace_off"
|
||||
return ..()
|
||||
else
|
||||
linked_alert.desc = "The stabilized bluespace extract will try to redirect you from harm!"
|
||||
linked_alert.icon_state = "slime_bluespace_on"
|
||||
|
||||
if(healthcheck && (healthcheck - owner.health) > 5)
|
||||
owner.visible_message("<span class='warning'>[linked_extract] notices the sudden change in [owner]'s physical health, and activates!</span>")
|
||||
do_sparks(5,FALSE,owner)
|
||||
var/F = find_safe_turf(zlevels = owner.z, extended_safety_checks = TRUE)
|
||||
var/range = 0
|
||||
if(!F)
|
||||
F = get_turf(owner)
|
||||
range = 50
|
||||
if(do_teleport(owner, F, range))
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] will take some time to re-align you on the bluespace axis.</span>")
|
||||
do_sparks(5,FALSE,owner)
|
||||
owner.apply_status_effect(/datum/status_effect/bluespacestabilization)
|
||||
healthcheck = owner.health
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/sepia
|
||||
id = "stabilizedsepia"
|
||||
colour = "sepia"
|
||||
var/mod = 0
|
||||
|
||||
/datum/status_effect/stabilized/sepia/tick()
|
||||
if(prob(50) && mod > -1)
|
||||
mod--
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
H.physiology.speed_mod--
|
||||
else if(mod < 1)
|
||||
mod++
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
H.physiology.speed_mod++
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/sepia/on_remove()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
H.physiology.speed_mod += -mod //Reset the changes.
|
||||
|
||||
/datum/status_effect/stabilized/cerulean
|
||||
id = "stabilizedcerulean"
|
||||
colour = "cerulean"
|
||||
var/mob/living/clone
|
||||
|
||||
/datum/status_effect/stabilized/cerulean/on_apply()
|
||||
var/typepath = owner.type
|
||||
clone = new typepath(owner.loc)
|
||||
var/mob/living/carbon/O = owner
|
||||
var/mob/living/carbon/C = clone
|
||||
if(istype(C) && istype(O))
|
||||
C.real_name = O.real_name
|
||||
O.dna.transfer_identity(C)
|
||||
C.updateappearance(mutcolor_update=1)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/cerulean/tick()
|
||||
if(owner.stat == DEAD)
|
||||
if(clone && clone.stat != DEAD)
|
||||
owner.visible_message("<span class='warning'>[owner] blazes with brilliant light, [linked_extract] whisking [owner.p_their()] soul away.</span>",
|
||||
"<span class='notice'>You feel a warm glow from [linked_extract], and you open your eyes... elsewhere.</span>")
|
||||
if(owner.mind)
|
||||
owner.mind.transfer_to(clone)
|
||||
clone = null
|
||||
qdel(linked_extract)
|
||||
if(!clone || clone.stat == DEAD)
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] desperately tries to move your soul to a living body, but can't find one!</span>")
|
||||
qdel(linked_extract)
|
||||
..()
|
||||
|
||||
/datum/status_effect/stabilized/cerulean/on_remove()
|
||||
if(clone)
|
||||
clone.visible_message("<span class='warning'>[clone] dissolves into a puddle of goo!</span>")
|
||||
qdel(clone)
|
||||
|
||||
/datum/status_effect/stabilized/pyrite
|
||||
id = "stabilizedpyrite"
|
||||
colour = "pyrite"
|
||||
var/originalcolor
|
||||
|
||||
/datum/status_effect/stabilized/pyrite/on_apply()
|
||||
originalcolor = owner.color
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/pyrite/tick()
|
||||
owner.color = rgb(rand(0,255),rand(0,255),rand(0,255))
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/pyrite/on_remove()
|
||||
owner.color = originalcolor
|
||||
|
||||
/datum/status_effect/stabilized/red
|
||||
id = "stabilizedred"
|
||||
colour = "red"
|
||||
|
||||
/datum/status_effect/stabilized/red/on_apply()
|
||||
owner.add_trait(TRAIT_IGNORESLOWDOWN,"slimestatus")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/red/on_remove()
|
||||
owner.remove_trait(TRAIT_IGNORESLOWDOWN,"slimestatus")
|
||||
|
||||
/datum/status_effect/stabilized/green
|
||||
id = "stabilizedgreen"
|
||||
colour = "green"
|
||||
var/datum/dna/originalDNA
|
||||
var/originalname
|
||||
|
||||
/datum/status_effect/stabilized/green/on_apply()
|
||||
to_chat(owner, "<span class='warning'>You feel different...</span>")
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
originalDNA = new H.dna.type
|
||||
originalname = H.real_name
|
||||
H.dna.copy_dna(originalDNA)
|
||||
randomize_human(H)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/green/tick() //Only occasionally give examiners a warning.
|
||||
if(prob(50))
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN looks a bit green and gooey...</span>"
|
||||
else
|
||||
examine_text = null
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/green/on_remove()
|
||||
to_chat(owner, "<span class='notice'>You feel more like yourself.</span>")
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
originalDNA.transfer_identity(H)
|
||||
H.real_name = originalname
|
||||
H.updateappearance(mutcolor_update=1)
|
||||
|
||||
/datum/status_effect/brokenpeace
|
||||
id = "brokenpeace"
|
||||
duration = 1200
|
||||
alert_type = null
|
||||
|
||||
/datum/status_effect/pinkdamagetracker
|
||||
id = "pinkdamagetracker"
|
||||
duration = -1
|
||||
alert_type = null
|
||||
var/damage = 0
|
||||
var/lasthealth
|
||||
|
||||
/datum/status_effect/pinkdamagetracker/tick()
|
||||
if((lasthealth - owner.health) > 0)
|
||||
damage += (lasthealth - owner.health)
|
||||
lasthealth = owner.health
|
||||
|
||||
/datum/status_effect/stabilized/pink
|
||||
id = "stabilizedpink"
|
||||
colour = "pink"
|
||||
var/list/mobs = list()
|
||||
var/faction_name
|
||||
|
||||
/datum/status_effect/stabilized/pink/on_apply()
|
||||
faction_name = owner.real_name
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/pink/tick()
|
||||
for(var/mob/living/simple_animal/M in view(7,get_turf(owner)))
|
||||
if(!(M in mobs))
|
||||
mobs += M
|
||||
M.apply_status_effect(/datum/status_effect/pinkdamagetracker)
|
||||
M.faction |= faction_name
|
||||
for(var/mob/living/simple_animal/M in mobs)
|
||||
if(!(M in view(7,get_turf(owner))))
|
||||
M.faction -= faction_name
|
||||
M.remove_status_effect(/datum/status_effect/pinkdamagetracker)
|
||||
mobs -= M
|
||||
var/datum/status_effect/pinkdamagetracker/C = M.has_status_effect(/datum/status_effect/pinkdamagetracker)
|
||||
if(istype(C) && C.damage > 0)
|
||||
C.damage = 0
|
||||
owner.apply_status_effect(/datum/status_effect/brokenpeace)
|
||||
var/HasFaction = FALSE
|
||||
for(var/i in owner.faction)
|
||||
if(i == faction_name)
|
||||
HasFaction = TRUE
|
||||
|
||||
if(HasFaction && owner.has_status_effect(/datum/status_effect/brokenpeace))
|
||||
owner.faction -= faction_name
|
||||
to_chat(owner, "<span class='userdanger'>The peace has been broken! Hostile creatures will now react to you!</span>")
|
||||
if(!HasFaction && !owner.has_status_effect(/datum/status_effect/brokenpeace))
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] pulses, generating a fragile aura of peace.</span>")
|
||||
owner.faction |= faction_name
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/pink/on_remove()
|
||||
for(var/mob/living/simple_animal/M in mobs)
|
||||
M.faction -= faction_name
|
||||
M.remove_status_effect(/datum/status_effect/pinkdamagetracker)
|
||||
for(var/i in owner.faction)
|
||||
if(i == faction_name)
|
||||
owner.faction -= faction_name
|
||||
|
||||
/datum/status_effect/stabilized/oil
|
||||
id = "stabilizedoil"
|
||||
colour = "oil"
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN smells of sulfer and oil!</span>"
|
||||
|
||||
/datum/status_effect/stabilized/oil/tick()
|
||||
if(owner.stat == DEAD)
|
||||
explosion(get_turf(owner),1,2,4,flame_range = 5)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/black
|
||||
id = "stabilizedblack"
|
||||
colour = "black"
|
||||
var/messagedelivered = FALSE
|
||||
var/heal_amount = 1
|
||||
|
||||
/datum/status_effect/stabilized/black/tick()
|
||||
if(owner.pulling && isliving(owner.pulling) && owner.grab_state == GRAB_KILL)
|
||||
var/mob/living/M = owner.pulling
|
||||
if(M.stat == DEAD)
|
||||
return
|
||||
if(!messagedelivered)
|
||||
to_chat(owner,"<span class='notice'>You feel your hands melt around [M]'s neck and start to drain them of life.</span>")
|
||||
to_chat(owner.pulling, "<span class='userdanger'>[owner]'s hands melt around your neck, and you can feel your life starting to drain away!</span>")
|
||||
messagedelivered = TRUE
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN is draining health from [owner.pulling]!</span>"
|
||||
var/list/healing_types = list()
|
||||
if(owner.getBruteLoss() > 0)
|
||||
healing_types += BRUTE
|
||||
if(owner.getFireLoss() > 0)
|
||||
healing_types += BURN
|
||||
if(owner.getToxLoss() > 0)
|
||||
healing_types += TOX
|
||||
if(owner.getCloneLoss() > 0)
|
||||
healing_types += CLONE
|
||||
|
||||
owner.apply_damage_type(-heal_amount, damagetype=pick(healing_types))
|
||||
owner.nutrition += 3
|
||||
M.adjustCloneLoss(heal_amount * 1.2) //This way, two people can't just convert each other's damage away.
|
||||
else
|
||||
messagedelivered = FALSE
|
||||
examine_text = null
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink
|
||||
id = "stabilizedlightpink"
|
||||
colour = "light pink"
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_apply()
|
||||
owner.add_trait(TRAIT_GOTTAGOFAST,"slimestatus")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/tick()
|
||||
for(var/mob/living/carbon/human/H in range(1, get_turf(owner)))
|
||||
if(H != owner && H.stat != DEAD && H.health <= 0 && !H.reagents.has_reagent("epinephrine"))
|
||||
to_chat(owner, "[linked_extract] pulses in sync with [H]'s heartbeat, trying to keep them alive.")
|
||||
H.reagents.add_reagent("epinephrine",5)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_remove()
|
||||
owner.remove_trait(TRAIT_GOTTAGOFAST,"slimestatus")
|
||||
|
||||
/datum/status_effect/stabilized/adamantine
|
||||
id = "stabilizedadamantine"
|
||||
colour = "adamantine"
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN has a strange metallic coating on their skin.</span>"
|
||||
|
||||
/datum/status_effect/stabilized/gold
|
||||
id = "stabilizedgold"
|
||||
colour = "gold"
|
||||
var/mob/living/simple_animal/familiar
|
||||
|
||||
/datum/status_effect/stabilized/gold/tick()
|
||||
if(!familiar)
|
||||
familiar = create_random_mob(get_turf(owner.loc), FRIENDLY_SPAWN)
|
||||
familiar.del_on_death = TRUE
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/gold/on_remove()
|
||||
if(familiar)
|
||||
qdel(familiar)
|
||||
|
||||
/datum/status_effect/stabilized/adamantine/on_apply()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.damage_resistance += 5
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/adamantine/on_remove()
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.physiology.damage_resistance += 5
|
||||
|
||||
/datum/status_effect/stabilized/rainbow
|
||||
id = "stabilizedrainbow"
|
||||
colour = "rainbow"
|
||||
|
||||
/datum/status_effect/stabilized/rainbow/tick()
|
||||
if(owner.health <= 0)
|
||||
var/obj/item/slimecross/stabilized/rainbow/X = linked_extract
|
||||
if(istype(X))
|
||||
if(X.regencore)
|
||||
X.regencore.afterattack(owner,owner,TRUE)
|
||||
X.regencore = null
|
||||
owner.visible_message("<span class='warning'>[owner] flashes a rainbow of colors, and [owner.p_their()] skin is coated in a milky regenerative goo!</span>")
|
||||
qdel(src)
|
||||
qdel(linked_extract)
|
||||
return ..()
|
||||
@@ -0,0 +1,420 @@
|
||||
/*
|
||||
Burning extracts:
|
||||
Have a unique, primarily offensive effect when
|
||||
filled with 10u plasma and activated in-hand.
|
||||
*/
|
||||
/obj/item/slimecross/burning
|
||||
name = "burning extract"
|
||||
desc = "It's boiling over with barely-contained energy."
|
||||
effect = "burning"
|
||||
container_type = INJECTABLE | DRAWABLE
|
||||
icon_state = "burning"
|
||||
|
||||
/obj/item/slimecross/burning/Initialize()
|
||||
..()
|
||||
create_reagents(10)
|
||||
|
||||
/obj/item/slimecross/burning/attack_self(mob/user)
|
||||
if(!reagents.has_reagent("plasma",10))
|
||||
to_chat(user, "<span class='warning'>This extract needs to be full of plasma to activate!</span>")
|
||||
return
|
||||
reagents.remove_reagent("plasma",10)
|
||||
to_chat(user, "<span class='notice'>You squeeze the extract, and it absorbs the plasma!</span>")
|
||||
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
||||
playsound(src, 'sound/magic/fireball.ogg', 50, 1)
|
||||
do_effect(user)
|
||||
|
||||
/obj/item/slimecross/burning/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/slimecross/burning/grey
|
||||
colour = "grey"
|
||||
|
||||
/obj/item/slimecross/burning/grey/do_effect(mob/user)
|
||||
var/mob/living/simple_animal/slime/S = new(get_turf(user),"grey")
|
||||
S.visible_message("<span class='danger'>A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!</span>")
|
||||
S.Friends[user] = 20 //Gas, gas, gas
|
||||
S.bodytemperature = T0C + 400 //We gonna step on the gas.
|
||||
S.nutrition = S.get_hunger_nutrition() //Tonight, we fight!
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/burning/orange/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] boils over with a caustic gas!</span>")
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
R.add_reagent("condensedcapsaicin", 100)
|
||||
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 7, get_turf(user))
|
||||
smoke.start()
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/burning/purple/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] fills with a bubbling liquid!</span>")
|
||||
new /obj/item/slimecrossbeaker/autoinjector/slimestimulant(get_turf(user))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/burning/blue/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] flash-freezes the area!</span>")
|
||||
for(var/turf/open/T in range(3, get_turf(user)))
|
||||
T.MakeSlippery(TURF_WET_PERMAFROST, min_wet_time = 10, wet_time_to_add = 5)
|
||||
for(var/mob/living/carbon/M in range(5, get_turf(user)))
|
||||
if(M != user)
|
||||
M.bodytemperature = BODYTEMP_COLD_DAMAGE_LIMIT + 10 //Not quite cold enough to hurt.
|
||||
to_chat(M, "<span class='danger'>You feel a chill run down your spine, and the floor feels a bit slippery with frost...</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/metal
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/burning/metal/do_effect(mob/user)
|
||||
for(var/turf/closed/wall/W in range(1,get_turf(user)))
|
||||
W.dismantle_wall(1)
|
||||
playsound(W, 'sound/effects/break_stone.ogg', 50, 1)
|
||||
user.visible_message("<span class='danger'>[src] pulses violently, and shatters the walls around it!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/yellow
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/burning/yellow/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] explodes into an electrical field!</span>")
|
||||
playsound(get_turf(src), 'sound/weapons/zapbang.ogg', 50, 1)
|
||||
for(var/mob/living/M in range(4,get_turf(user)))
|
||||
if(M != user)
|
||||
var/mob/living/carbon/C = M
|
||||
if(istype(C))
|
||||
C.electrocute_act(25,src)
|
||||
else
|
||||
M.adjustFireLoss(25)
|
||||
to_chat(M, "<span class='danger'>You feel a sharp electrical pulse!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/darkpurple
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/burning/darkpurple/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] sublimates into a cloud of plasma!</span>")
|
||||
var/turf/T = get_turf(user)
|
||||
T.atmos_spawn_air("plasma=60")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/burning/darkblue/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] releases a burst of chilling smoke!</span>")
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
R.add_reagent("frostoil", 40)
|
||||
user.reagents.add_reagent("cryoxadone",10)
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 7, get_turf(user))
|
||||
smoke.start()
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/burning/silver/do_effect(mob/user)
|
||||
var/amount = rand(3,6)
|
||||
var/list/turfs = list()
|
||||
for(var/turf/open/T in range(1,get_turf(user)))
|
||||
turfs += T
|
||||
for(var/i = 0, i < amount, i++)
|
||||
var/path = get_random_food()
|
||||
var/obj/item/O = new path(pick(turfs))
|
||||
O.reagents.add_reagent("slimejelly",5) //Oh god it burns
|
||||
if(prob(50))
|
||||
O.desc += " It smells strange..."
|
||||
user.visible_message("<span class='danger'>[src] produces a few pieces of food!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/burning/bluespace/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] sparks, and lets off a shockwave of bluespace energy!</span>")
|
||||
for(var/mob/living/L in range(1, get_turf(user)))
|
||||
if(L != user)
|
||||
do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg') //Somewhere between the effectiveness of fake and real BS crystal
|
||||
new /obj/effect/particle_effect/sparks(get_turf(L))
|
||||
playsound(get_turf(L), "sparks", 50, 1)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/sepia
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/burning/sepia/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] shapes itself into a camera!</span>")
|
||||
new /obj/item/device/camera/timefreeze(get_turf(user))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/burning/cerulean/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] produces a potion!</span>")
|
||||
new /obj/item/slimepotion/extract_cloner(get_turf(user))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/burning/pyrite/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] releases a colorful wave of energy, which shatters the lights!</span>")
|
||||
var/area/A = get_area(user.loc)
|
||||
for(var/obj/machinery/light/L in A) //Shamelessly copied from the APC effect.
|
||||
L.on = TRUE
|
||||
L.break_light_tube()
|
||||
L.on = FALSE
|
||||
stoplag()
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/burning/red/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] pulses a hazy red aura for a moment, which wraps around [user]!</span>")
|
||||
for(var/mob/living/simple_animal/slime/S in view(7, get_turf(user)))
|
||||
if(user in S.Friends)
|
||||
var/friendliness = S.Friends[user]
|
||||
S.Friends = list()
|
||||
S.Friends[user] = friendliness
|
||||
else
|
||||
S.Friends = list()
|
||||
S.rabid = 1
|
||||
S.visible_message("<span class='danger'>The [S] is driven into a dangerous frenzy!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/burning/green/do_effect(mob/user)
|
||||
var/which_hand = "l_hand"
|
||||
if(!(user.active_hand_index % 2))
|
||||
which_hand = "r_hand"
|
||||
var/mob/living/L = user
|
||||
if(!istype(user))
|
||||
return
|
||||
var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case...
|
||||
L.dropItemToGround(held)
|
||||
var/obj/item/melee/arm_blade/slime/blade = new(user)
|
||||
if(!L.put_in_hands(blade))
|
||||
qdel(blade)
|
||||
user.visible_message("<span class='warning'>[src] melts onto [user]'s arm, boiling the flesh horribly!</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>[src] sublimates the flesh around [user]'s arm, transforming the bone into a gruesome blade!</span>")
|
||||
user.emote("scream")
|
||||
L.apply_damage(30,BURN,which_hand)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/burning/pink/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] shrinks into a small, gel-filled pellet!</span>")
|
||||
new /obj/item/slimecrossbeaker/pax(get_turf(user))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/gold
|
||||
colour = "gold"
|
||||
|
||||
/obj/item/slimecross/burning/gold/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] shudders violently, and summons an army for [user]!</span>")
|
||||
for(var/i in 1 to 3) //Less than gold normally does, since it's safer and faster.
|
||||
var/mob/living/simple_animal/S = create_random_mob(get_turf(user), HOSTILE_SPAWN)
|
||||
S.faction |= "[REF(user)]"
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(S, pick(NORTH,SOUTH,EAST,WEST))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/oil
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/burning/oil/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] begins to shake with rapidly increasing force!</span>")
|
||||
addtimer(CALLBACK(src, .proc/boom), 50)
|
||||
|
||||
/obj/item/slimecross/burning/oil/proc/boom()
|
||||
explosion(get_turf(src), 2, 4, 4) //Same area as normal oils, but increased high-impact values by one each, then decreased light by 2.
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecross/burning/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/burning/black/do_effect(mob/user)
|
||||
var/mob/living/L = user
|
||||
if(!istype(L))
|
||||
return
|
||||
user.visible_message("<span class='danger'>[src] absorbs [user], transforming them into a slime!</span>")
|
||||
var/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform/S = new()
|
||||
S.remove_on_restore = TRUE
|
||||
user.mind.AddSpell(S)
|
||||
S.cast(list(user),user)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/burning/lightpink/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] lets off a hypnotizing pink glow!</span>")
|
||||
for(var/mob/living/carbon/C in view(7, get_turf(user)))
|
||||
C.reagents.add_reagent("pax",5)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/adamantine
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/burning/adamantine/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] crystallizes into a large shield!</span>")
|
||||
new /obj/item/twohanded/required/adamantineshield(get_turf(user))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/rainbow
|
||||
colour = "rainbow"
|
||||
|
||||
/obj/item/slimecross/burning/rainbow/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] flattens into a glowing rainbow blade.</span>")
|
||||
new /obj/item/kitchen/knife/rainbowknife(get_turf(user))
|
||||
..()
|
||||
|
||||
//Misc. things added
|
||||
|
||||
/obj/item/device/camera/timefreeze
|
||||
name = "sepia-tinted camera"
|
||||
desc = "They say a picture is like a moment stopped in time."
|
||||
pictures_left = 1
|
||||
pictures_max = 1
|
||||
|
||||
/obj/item/device/camera/timefreeze/afterattack(atom/target, mob/user, flag)
|
||||
if(!on || !pictures_left || !isturf(target.loc))
|
||||
return
|
||||
new /obj/effect/timestop(get_turf(target), 2, 50, list(user))
|
||||
..()
|
||||
var/text = "The camera fades away"
|
||||
if(disk)
|
||||
text += ", leaving the disk behind!"
|
||||
user.put_in_hands(disk)
|
||||
else
|
||||
text += "!"
|
||||
to_chat(user,"<span class='notice'>[text]</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/extract_cloner
|
||||
name = "extract cloning potion"
|
||||
desc = "An more powerful version of the extract enhancer potion, capable of cloning regular slime extracts."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potpurple"
|
||||
|
||||
/obj/item/slimepotion/extract_cloner/afterattack(obj/item/target, mob/user , proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target, /obj/item/reagent_containers))
|
||||
return ..(target, user, proximity)
|
||||
if(istype(target, /obj/item/slimecross))
|
||||
to_chat(user, "<span class='warning'>[target] is too complex for the potion to clone!</span>")
|
||||
return
|
||||
if(!istype(target, /obj/item/slime_extract))
|
||||
return
|
||||
var/obj/item/slime_extract/S = target
|
||||
if(S.recurring)
|
||||
to_chat(user, "<span class='warning'>[target] is too complex for the potion to clone!</span>")
|
||||
return
|
||||
var/path = S.type
|
||||
var/obj/item/slime_extract/C = new path(get_turf(target))
|
||||
C.Uses = S.Uses
|
||||
to_chat(user, "<span class='notice'>You pour the potion onto [target], and the fluid solidifies into a copy of it!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/melee/arm_blade/slime
|
||||
name = "slimy boneblade"
|
||||
desc = "What remains of the bones in your arm. Incredibly sharp, and painful for both you and your opponents."
|
||||
force = 15
|
||||
force_string = "painful"
|
||||
|
||||
/obj/item/melee/arm_blade/slime/attack(mob/living/L, mob/user)
|
||||
. = ..()
|
||||
if(prob(20))
|
||||
user.emote("scream")
|
||||
|
||||
/obj/item/kitchen/knife/rainbowknife
|
||||
name = "rainbow knife"
|
||||
desc = "A strange, transparent knife which constantly shifts color. It hums slightly when moved."
|
||||
icon = 'icons/obj/slimecrossing.dmi'
|
||||
icon_state = "rainbowknife"
|
||||
force = 15
|
||||
throwforce = 15
|
||||
damtype = BRUTE
|
||||
|
||||
/obj/item/kitchen/knife/rainbowknife/afterattack(atom/O, mob/user, proximity)
|
||||
if(proximity && istype(O, /mob/living))
|
||||
damtype = pick(BRUTE, BURN, TOX, OXY, CLONE)
|
||||
switch(damtype)
|
||||
if(BRUTE)
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("slashed","sliced","cut")
|
||||
if(BURN)
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
attack_verb = list("burned","singed","heated")
|
||||
if(TOX)
|
||||
hitsound = 'sound/weapons/pierce.ogg'
|
||||
attack_verb = list("poisoned","dosed","toxified")
|
||||
if(OXY)
|
||||
hitsound = 'sound/effects/space_wind.ogg'
|
||||
attack_verb = list("suffocated","winded","vacuumed")
|
||||
if(CLONE)
|
||||
hitsound = 'sound/items/geiger/ext1.ogg'
|
||||
attack_verb = list("irradiated","mutated","maligned")
|
||||
return ..()
|
||||
|
||||
/obj/item/twohanded/required/adamantineshield
|
||||
name = "adamantine shield"
|
||||
desc = "A gigantic shield made of solid adamantium."
|
||||
icon = 'icons/obj/slimecrossing.dmi'
|
||||
icon_state = "adamshield"
|
||||
item_state = "adamshield"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
|
||||
slot_flags = SLOT_BACK
|
||||
block_chance = 75
|
||||
throw_range = 1 //How far do you think you're gonna throw a solid crystalline shield...?
|
||||
throw_speed = 2
|
||||
force = 15 //Heavy, but hard to wield.
|
||||
attack_verb = list("bashed","pounded","slammed")
|
||||
flags_2 = SLOWS_WHILE_IN_HAND_2
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform
|
||||
name = "Slime Transformation"
|
||||
desc = "Transform from a human to a slime, or back again!"
|
||||
action_icon_state = "transformslime"
|
||||
cooldown_min = 0
|
||||
charge_max = 0
|
||||
invocation_type = "none"
|
||||
shapeshift_type = /mob/living/simple_animal/slime/transformedslime
|
||||
convert_damage = TRUE
|
||||
convert_damage_type = CLONE
|
||||
var/remove_on_restore = FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform/Restore(mob/living/M)
|
||||
if(remove_on_restore)
|
||||
if(M.mind)
|
||||
M.mind.RemoveSpell(src)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/slime/transformedslime
|
||||
|
||||
/mob/living/simple_animal/slime/transformedslime/Reproduce() //Just in case.
|
||||
to_chat(src, "<span class='warning'>I can't reproduce...</span>")
|
||||
return
|
||||
@@ -0,0 +1,433 @@
|
||||
/*
|
||||
Charged extracts:
|
||||
Have a unique, effect when filled with
|
||||
10u plasma and activated in-hand, related to their
|
||||
normal extract effect.
|
||||
*/
|
||||
/obj/item/slimecross/charged
|
||||
name = "charged extract"
|
||||
desc = "It sparks with electric power."
|
||||
effect = "charged"
|
||||
container_type = INJECTABLE | DRAWABLE
|
||||
icon_state = "charged"
|
||||
|
||||
/obj/item/slimecross/charged/Initialize()
|
||||
..()
|
||||
create_reagents(10)
|
||||
|
||||
/obj/item/slimecross/charged/attack_self(mob/user)
|
||||
if(!reagents.has_reagent("plasma",10))
|
||||
to_chat(user, "<span class='warning'>This extract needs to be full of plasma to activate!</span>")
|
||||
return
|
||||
reagents.remove_reagent("plasma",10)
|
||||
to_chat(user, "<span class='notice'>You squeeze the extract, and it absorbs the plasma!</span>")
|
||||
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 50, 1)
|
||||
do_effect(user)
|
||||
|
||||
/obj/item/slimecross/charged/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/slimecross/charged/grey
|
||||
colour = "grey"
|
||||
|
||||
/obj/item/slimecross/charged/grey/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/slime_reviver(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/charged/orange/do_effect(mob/user)
|
||||
for(var/turf/turf in range(5,get_turf(user)))
|
||||
if(!locate(/obj/effect/hotspot) in turf)
|
||||
new /obj/effect/hotspot(turf)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/charged/purple/do_effect(mob/user)
|
||||
new /obj/item/slimecrossbeaker/omnizine(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] sparks, and floods with a regenerative solution!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/charged/blue/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/slime/chargedstabilizer(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/metal
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/charged/metal/do_effect(mob/user)
|
||||
var/obj/item/stack/sheet/metal/M = new(get_turf(user))
|
||||
M.amount = 25
|
||||
var/obj/item/stack/sheet/plasteel/P = new(get_turf(user))
|
||||
P.amount = 10
|
||||
user.visible_message("<span class='notice'>[src] grows into a plethora of metals!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/yellow
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/charged/yellow/do_effect(mob/user)
|
||||
new /obj/item/stock_parts/cell/high/slime/hypercharged(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] sparks violently, and swells with electric power!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/darkpurple
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/charged/darkpurple/do_effect(mob/user)
|
||||
var/obj/item/stack/sheet/mineral/plasma/M = new(get_turf(user))
|
||||
M.amount = 10
|
||||
user.visible_message("<span class='notice'>[src] produces a large amount of plasma!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/charged/darkblue/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/spaceproof(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/charged/silver/do_effect(mob/user)
|
||||
new /obj/item/reagent_containers/food/snacks/store/cake/slimecake(get_turf(user))
|
||||
for(var/i in 1 to 10)
|
||||
var/drink_type = get_random_drink()
|
||||
new drink_type(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] produces a party's worth of cake and drinks!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/charged/bluespace/do_effect(mob/user)
|
||||
var/obj/item/stack/sheet/bluespace_crystal/M = new(get_turf(user))
|
||||
M.amount = 10
|
||||
user.visible_message("<span class='notice'>[src] produces several sheets of polycrystal!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/sepia
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/charged/sepia/do_effect(mob/user)
|
||||
new /obj/item/device/camera/spooky(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] flickers in a strange, ethereal manner, and produces a camera!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/charged/cerulean/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/enhancer/max(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/charged/pyrite/do_effect(mob/user)
|
||||
var/obj/item/stack/sheet/mineral/bananium/M = new(get_turf(user))
|
||||
M.amount = 10
|
||||
user.visible_message("<span class='warning'>[src] solidifies with a horrifying banana stench!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/charged/red/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/lavaproof(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/charged/green/do_effect(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!istype(H))
|
||||
to_chat(user, "<span class='warning'>You must be a humanoid to use this!</span>")
|
||||
return
|
||||
var/racechoice = input(H, "Choose your slime subspecies.", "Slime Selection") as null|anything in subtypesof(/datum/species/jelly)
|
||||
if(!racechoice)
|
||||
to_chat(user, "<span class='notice'>You decide not to become a slime for now.</span>")
|
||||
return
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
H.set_species(racechoice, icon_update=1)
|
||||
H.visible_message("<span class='warning'>[H] suddenly shifts form as [src] dissolves into [H.p_their()] skin!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/charged/pink/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/lovepotion(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/gold
|
||||
colour = "gold"
|
||||
var/max_spawn = 10
|
||||
var/spawned = 0
|
||||
|
||||
/obj/item/slimecross/charged/gold/do_effect(mob/user)
|
||||
user.visible_message("<span class='warning'>[src] starts shuddering violently!</span>")
|
||||
addtimer(CALLBACK(src, .proc/startTimer), 50)
|
||||
|
||||
/obj/item/slimecross/charged/gold/proc/startTimer()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/slimecross/charged/gold/process()
|
||||
visible_message("<span class='warning'>[src] lets off a spark, and produces a living creature!</span>")
|
||||
new /obj/effect/particle_effect/sparks(get_turf(src))
|
||||
playsound(get_turf(src), "sparks", 50, 1)
|
||||
create_random_mob(get_turf(src), HOSTILE_SPAWN)
|
||||
spawned++
|
||||
if(spawned >= max_spawn)
|
||||
visible_message("<span class='warning'>[src] collapses into a puddle of goo.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecross/charged/gold/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/oil
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/charged/oil/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] begins to shake with rapidly increasing force!</span>")
|
||||
addtimer(CALLBACK(src, .proc/boom), 50)
|
||||
|
||||
/obj/item/slimecross/charged/oil/proc/boom()
|
||||
explosion(get_turf(src), 3, 2, 1) //Much smaller effect than normal oils, but devastatingly strong where it does hit.
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecross/charged/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/charged/black/do_effect(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!istype(H))
|
||||
to_chat(user, "<span class='warning'>You have to be able to have a species to get your species changed.</span>")
|
||||
return
|
||||
var/list/allowed_species = list()
|
||||
for(var/X in subtypesof(/datum/species))
|
||||
var/datum/species/temp = X
|
||||
if(!initial(temp.blacklisted))
|
||||
allowed_species += X
|
||||
var/datum/species/changed = pick(allowed_species)
|
||||
if(changed)
|
||||
H.set_species(changed, icon_update = 1)
|
||||
to_chat(H, "<span class='danger'>You feel very different!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/charged/lightpink/do_effect(mob/user)
|
||||
new /obj/item/slimepotion/peacepotion(get_turf(user))
|
||||
user.visible_message("<span class='notice'>[src] distills into a potion!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/adamantine
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/charged/adamantine/do_effect(mob/user)
|
||||
user.visible_message("<span class='notice'>[src] produces a fully formed golem shell!</span>")
|
||||
new /obj/effect/mob_spawn/human/golem/servant(get_turf(src), /datum/species/golem/adamantine, user)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/charged/rainbow
|
||||
colour = "rainbow"
|
||||
|
||||
/obj/item/slimecross/charged/rainbow/do_effect(mob/user)
|
||||
user.visible_message("<span class='warning'>[src] swells and splits into three new slimes!</span>")
|
||||
for(var/i in 1 to 3)
|
||||
var/mob/living/simple_animal/slime/S = new(get_turf(user))
|
||||
S.random_colour()
|
||||
..()
|
||||
|
||||
////////////Unique things.
|
||||
|
||||
/obj/item/slimepotion/slime_reviver
|
||||
name = "slime revival potion"
|
||||
desc = "Infused with plasma and compressed gel, this brings dead slimes back to life."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potsilver"
|
||||
|
||||
/obj/item/slimepotion/slime_reviver/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
to_chat(user, "<span class='warning'>The potion only works on slimes!</span>")
|
||||
return ..()
|
||||
if(M.stat != DEAD)
|
||||
to_chat(user, "<span class='warning'>The slime is still alive!</span>")
|
||||
return
|
||||
if(M.maxHealth <= 0)
|
||||
to_chat(user, "<span class='warning'>The slime is too unstable to return!</span>")
|
||||
M.revive(full_heal = 1)
|
||||
M.stat = CONSCIOUS
|
||||
M.visible_message("<span class='notice'>[M] is filled with renewed vigor and blinks awake!</span>")
|
||||
M.maxHealth -= 10 //Revival isn't healthy.
|
||||
M.health -= 10
|
||||
M.regenerate_icons()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/slime/chargedstabilizer
|
||||
name = "slime omnistabilizer"
|
||||
desc = "An extremely potent chemical mix that will stop a slime from mutating completely."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potcyan"
|
||||
|
||||
/obj/item/slimepotion/slime/chargedstabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
to_chat(user, "<span class='warning'>The stabilizer only works on slimes!</span>")
|
||||
return ..()
|
||||
if(M.stat)
|
||||
to_chat(user, "<span class='warning'>The slime is dead!</span>")
|
||||
return
|
||||
if(M.mutation_chance == 0)
|
||||
to_chat(user, "<span class='warning'>The slime already has no chance of mutating!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You feed the slime the omnistabilizer. It will not mutate this cycle!</span>")
|
||||
M.mutation_chance = 0
|
||||
qdel(src)
|
||||
|
||||
/obj/item/stock_parts/cell/high/slime/hypercharged
|
||||
name = "hypercharged slime core"
|
||||
desc = "A charged yellow slime extract, infused with even more plasma. It almost hurts to touch."
|
||||
rating = 7 //Roughly 1.5 times the original.
|
||||
maxcharge = 20000 //2 times the normal one.
|
||||
chargerate = 2250 //1.5 times the normal rate.
|
||||
|
||||
/obj/item/slimepotion/spaceproof
|
||||
name = "slime pressurization potion"
|
||||
desc = "A potent chemical sealant that will render any article of clothing airtight. Has two uses."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potblue"
|
||||
var/uses = 2
|
||||
|
||||
/obj/item/slimepotion/spaceproof/afterattack(obj/item/clothing/C, mob/user, proximity)
|
||||
..()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
return
|
||||
if(!proximity)
|
||||
return
|
||||
if(!istype(C))
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on clothing!</span>")
|
||||
return
|
||||
if(C.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && STOPSPRESSUREDMAGE_1 in C.flags_1)
|
||||
to_chat(user, "<span class='warning'>The [C] is already pressure-resistant!</span>")
|
||||
return ..()
|
||||
to_chat(user, "<span class='notice'>You slather the blue gunk over the [C], making it airtight.</span>")
|
||||
C.name = "pressure-resistant [C.name]"
|
||||
C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
|
||||
C.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
|
||||
C.cold_protection = C.body_parts_covered
|
||||
C.flags_1 |= STOPSPRESSUREDMAGE_1
|
||||
uses--
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/enhancer/max
|
||||
name = "extract maximizer"
|
||||
desc = "An extremely potent chemical mix that will maximize a slime extract's uses."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potpurple"
|
||||
|
||||
/obj/item/slimepotion/lavaproof
|
||||
name = "slime lavaproofing potion"
|
||||
desc = "A strange, reddish goo said to repel lava as if it were water, without reducing flammability. Has two uses."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potred"
|
||||
var/uses = 2
|
||||
|
||||
/obj/item/slimepotion/lavaproof/afterattack(obj/item/C, mob/user, proximity)
|
||||
..()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
return ..()
|
||||
if(!proximity)
|
||||
return ..()
|
||||
if(!istype(C))
|
||||
to_chat(user, "<span class='warning'>You can't coat this with lavaproofing fluid!</span>")
|
||||
return ..()
|
||||
to_chat(user, "<span class='notice'>You slather the red gunk over the [C], making it lavaproof.</span>")
|
||||
C.name = "lavaproof [C.name]"
|
||||
C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
C.add_atom_colour("#800000", FIXED_COLOUR_PRIORITY)
|
||||
C.resistance_flags |= LAVA_PROOF
|
||||
C.flags_2 |= LAVA_PROTECT_2
|
||||
uses--
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/lovepotion
|
||||
name = "love potion"
|
||||
desc = "A pink chemical mix thought to inspire feelings of love."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potpink"
|
||||
|
||||
/obj/item/slimepotion/lovepotion/attack(mob/living/M, mob/user)
|
||||
if(!isliving(M) || M.stat == DEAD)
|
||||
to_chat(user, "<span class='warning'>The love potion only works on living things, sicko!</span>")
|
||||
return ..()
|
||||
if(user == M)
|
||||
to_chat(user, "<span class='warning'>You can't drink the love potion. What are you, a narcissist?</span>")
|
||||
return ..()
|
||||
|
||||
M.visible_message("<span class='danger'>[user] starts to feed [M] a love potion!</span>",
|
||||
"<span class='userdanger'>[user] starts to feed you a love potion!</span>")
|
||||
|
||||
if(!do_after(user, 50, target = M))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You feed [M] the love potion!</span>")
|
||||
to_chat(M, "<span class='notice'>You develop feelings for [user], and anyone [p_they(user)] like.</span>")
|
||||
if(!("[REF(user)]" in M.faction) && M.mind)
|
||||
M.mind.store_memory("You have strong feelings for [user].")
|
||||
M.faction |= "[REF(user)]"
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/peacepotion
|
||||
name = "pacification potion"
|
||||
desc = "A light pink solution of chemicals, smelling like liquid peace. And mercury salts."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potlightpink"
|
||||
|
||||
/obj/item/slimepotion/peacepotion/attack(mob/living/M, mob/user)
|
||||
if(!isliving(M) || M.stat == DEAD)
|
||||
to_chat(user, "<span class='warning'>The pacification potion only works on the living.</span>")
|
||||
return ..()
|
||||
if(M != user)
|
||||
M.visible_message("<span class='danger'>[user] starts to feed [M] a pacification potion!</span>",
|
||||
"<span class='userdanger'>[user] starts to feed you a love potion!</span>")
|
||||
else
|
||||
M.visible_message("<span class='danger'>[user] starts to drink the pacification potion!</span>",
|
||||
"<span class='danger'>You start to drink the pacification potion!</span>")
|
||||
|
||||
if(!do_after(user, 100, target = M))
|
||||
return
|
||||
if(M != user)
|
||||
to_chat(user, "<span class='notice'>You feed [M] the pacification potion!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You drink the pacification potion!</span>")
|
||||
if(isanimal(M))
|
||||
M.add_trait(TRAIT_PACIFISM, MAGIC_TRAIT)
|
||||
else if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_SURGERY)
|
||||
qdel(src)
|
||||
@@ -0,0 +1,426 @@
|
||||
/*
|
||||
Consuming extracts:
|
||||
Can eat food items.
|
||||
After consuming enough, produces special cookies.
|
||||
*/
|
||||
/obj/item/slimecross/consuming
|
||||
name = "consuming extract"
|
||||
desc = "It hungers... for <i>more</i>." //My slimecross has finally decided to eat... my buffet!
|
||||
icon_state = "consuming"
|
||||
effect = "consuming"
|
||||
var/nutriment_eaten = 0
|
||||
var/nutriment_required = 10
|
||||
var/cooldown = 600 //1 minute.
|
||||
var/last_produced = 0
|
||||
var/cookies = 5 //Number of cookies to spawn
|
||||
var/cookietype = /obj/item/slime_cookie
|
||||
|
||||
/obj/item/slimecross/consuming/attackby(obj/item/O, mob/user)
|
||||
if(istype(O,/obj/item/reagent_containers/food/snacks))
|
||||
if(last_produced + cooldown > world.time)
|
||||
to_chat(user, "<span class='warning'>[src] is still digesting after its last meal!<span>")
|
||||
return
|
||||
var/datum/reagent/N = O.reagents.has_reagent("nutriment")
|
||||
if(N)
|
||||
nutriment_eaten += N.volume
|
||||
to_chat(user, "<span class='notice'>[src] opens up and swallows [O] whole!</span>")
|
||||
qdel(O)
|
||||
playsound(src, 'sound/items/eatfood.ogg', 20, 1)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] burbles unhappily at the offering.</span>")
|
||||
if(nutriment_eaten >= nutriment_required)
|
||||
nutriment_eaten = 0
|
||||
user.visible_message("<span class='notice'>[src] swells up and produces a small pile of cookies!</span>")
|
||||
playsound(src, 'sound/effects/splat.ogg', 40, 1)
|
||||
last_produced = world.time
|
||||
for(var/i in 1 to cookies)
|
||||
var/obj/item/S = spawncookie()
|
||||
S.pixel_x = rand(-5, 5)
|
||||
S.pixel_y = rand(-5, 5)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/consuming/proc/spawncookie()
|
||||
return new cookietype(get_turf(src))
|
||||
|
||||
/obj/item/slime_cookie //While this technically acts like food, it's so removed from it that I made it its' own type.
|
||||
name = "error cookie"
|
||||
desc = "A weird slime cookie. You shouldn't see this."
|
||||
icon = 'icons/obj/food/slimecookies.dmi'
|
||||
var/taste = "error"
|
||||
var/nutrition = 5
|
||||
icon_state = "base"
|
||||
force = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
|
||||
/obj/item/slime_cookie/proc/do_effect(mob/living/M, mob/user)
|
||||
return
|
||||
|
||||
/obj/item/slime_cookie/attack(mob/living/M, mob/user)
|
||||
var/fed = FALSE
|
||||
if(M == user)
|
||||
M.visible_message("<span class='notice'>[user] eats [src]!</span>", "<span class='notice'>You eat [src].</span>")
|
||||
fed = TRUE
|
||||
else
|
||||
M.visible_message("<span class='danger'>[user] tries to force [M] to eat [src]!</span>", "<span class='userdanger'>[user] tries to force you to eat [src]!</span>")
|
||||
if(do_after(user, 20, target = M))
|
||||
fed = TRUE
|
||||
M.visible_message("<span class='danger'>[user] forces [M] to eat [src]!</span>", "<span class='warning'>[user] forces you to eat [src].</span>")
|
||||
if(fed)
|
||||
to_chat(M, "Tastes like [taste].")
|
||||
playsound(get_turf(M), 'sound/items/eatfood.ogg', 20, 1)
|
||||
if(nutrition)
|
||||
M.reagents.add_reagent("nutriment",nutrition)
|
||||
do_effect(M, user)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/consuming/grey
|
||||
colour = "grey"
|
||||
cookietype = /obj/item/slime_cookie/grey
|
||||
|
||||
/obj/item/slime_cookie/grey
|
||||
name = "slime cookie"
|
||||
desc = "A grey-ish transparent cookie. Nutritious, probably."
|
||||
icon_state = "grey"
|
||||
taste = "goo"
|
||||
nutrition = 15
|
||||
|
||||
/obj/item/slimecross/consuming/orange
|
||||
colour = "orange"
|
||||
cookietype = /obj/item/slime_cookie/orange
|
||||
|
||||
/obj/item/slime_cookie/orange
|
||||
name = "fiery cookie"
|
||||
desc = "A orange cookie with a fiery pattern. Feels warm."
|
||||
icon_state = "orange"
|
||||
taste = "cinnamon and burning"
|
||||
|
||||
/obj/item/slime_cookie/orange/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/firecookie)
|
||||
|
||||
/obj/item/slimecross/consuming/purple
|
||||
colour = "purple"
|
||||
cookietype = /obj/item/slime_cookie/purple
|
||||
|
||||
/obj/item/slime_cookie/purple
|
||||
name = "health cookie"
|
||||
desc = "A purple cookie with a cross pattern. Soothing."
|
||||
icon_state = "purple"
|
||||
taste = "fruit jam and cough medicine"
|
||||
|
||||
/obj/item/slime_cookie/purple/do_effect(mob/living/M, mob/user)
|
||||
M.adjustBruteLoss(-5)
|
||||
M.adjustFireLoss(-5)
|
||||
M.adjustToxLoss(-5, forced=1) //To heal slimepeople.
|
||||
M.adjustOxyLoss(-5)
|
||||
M.adjustCloneLoss(-5)
|
||||
M.adjustBrainLoss(-5)
|
||||
|
||||
/obj/item/slimecross/consuming/blue
|
||||
colour = "blue"
|
||||
cookietype = /obj/item/slime_cookie/blue
|
||||
|
||||
/obj/item/slime_cookie/blue
|
||||
name = "water cookie"
|
||||
desc = "A transparent blue cookie. Constantly dripping wet."
|
||||
icon_state = "blue"
|
||||
taste = "water"
|
||||
|
||||
/obj/item/slime_cookie/blue/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/watercookie)
|
||||
|
||||
/obj/item/slimecross/consuming/metal
|
||||
colour = "metal"
|
||||
cookietype = /obj/item/slime_cookie/metal
|
||||
|
||||
/obj/item/slime_cookie/metal
|
||||
name = "metallic cookie"
|
||||
desc = "A shiny grey cookie. Hard to the touch."
|
||||
icon_state = "metal"
|
||||
taste = "copper"
|
||||
|
||||
/obj/item/slime_cookie/metal/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/metalcookie)
|
||||
|
||||
/obj/item/slimecross/consuming/yellow
|
||||
colour = "yellow"
|
||||
cookietype = /obj/item/slime_cookie/yellow
|
||||
|
||||
/obj/item/slime_cookie/yellow
|
||||
name = "sparking cookie"
|
||||
desc = "A yellow cookie with a lightning pattern. Has a rubbery texture."
|
||||
icon_state = "yellow"
|
||||
taste = "lemon cake and rubber gloves"
|
||||
|
||||
/obj/item/slime_cookie/yellow/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/sparkcookie)
|
||||
|
||||
/obj/item/slimecross/consuming/darkpurple
|
||||
colour = "dark purple"
|
||||
cookietype = /obj/item/slime_cookie/darkpurple
|
||||
|
||||
/obj/item/slime_cookie/darkpurple
|
||||
name = "toxic cookie"
|
||||
desc = "A dark purple cookie, stinking of plasma."
|
||||
icon_state = "darkpurple"
|
||||
taste = "slime jelly and toxins"
|
||||
|
||||
/obj/item/slime_cookie/darkpurple/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/toxincookie)
|
||||
|
||||
/obj/item/slimecross/consuming/darkblue
|
||||
colour = "dark blue"
|
||||
cookietype = /obj/item/slime_cookie/darkblue
|
||||
|
||||
/obj/item/slime_cookie/darkblue
|
||||
name = "frosty cookie"
|
||||
desc = "A dark blue cookie with a snowflake pattern. Feels cold."
|
||||
icon_state = "darkblue"
|
||||
taste = "mint and bitter cold"
|
||||
|
||||
/obj/item/slime_cookie/darkblue/do_effect(mob/living/M, mob/user)
|
||||
M.adjust_bodytemperature(-110)
|
||||
M.ExtinguishMob()
|
||||
|
||||
/obj/item/slimecross/consuming/silver
|
||||
colour = "silver"
|
||||
cookietype = /obj/item/slime_cookie/silver
|
||||
|
||||
/obj/item/slime_cookie/silver
|
||||
name = "waybread cookie"
|
||||
desc = "A warm, crispy cookie, sparkling silver in the light. Smells wonderful."
|
||||
icon_state = "silver"
|
||||
taste = "masterful elven baking"
|
||||
nutrition = 0 //We don't want normal nutriment
|
||||
|
||||
/obj/item/slime_cookie/silver/do_effect(mob/living/M, mob/user)
|
||||
M.reagents.add_reagent("stabilizednutriment",10)
|
||||
|
||||
/obj/item/slimecross/consuming/bluespace
|
||||
colour = "bluespace"
|
||||
cookietype = /obj/item/slime_cookie/bluespace
|
||||
|
||||
/obj/item/slime_cookie/bluespace
|
||||
name = "space cookie"
|
||||
desc = "A white cookie with green icing. Surprisingly hard to hold."
|
||||
icon_state = "bluespace"
|
||||
taste = "sugar and starlight"
|
||||
|
||||
/obj/item/slime_cookie/bluespace/do_effect(mob/living/M, mob/user)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(get_area(get_turf(M))))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
if(length(L))
|
||||
do_teleport(M, pick(L), 0, asoundin = 'sound/effects/phasein.ogg')
|
||||
new /obj/effect/particle_effect/sparks(get_turf(M))
|
||||
playsound(get_turf(M), "sparks", 50, 1)
|
||||
|
||||
/obj/item/slimecross/consuming/sepia
|
||||
colour = "sepia"
|
||||
cookietype = /obj/item/slime_cookie/sepia
|
||||
|
||||
/obj/item/slime_cookie/sepia
|
||||
name = "time cookie"
|
||||
desc = "A light brown cookie with a clock pattern. Takes some time to chew."
|
||||
icon_state = "sepia"
|
||||
taste = "brown sugar and a metronome"
|
||||
|
||||
/obj/item/slime_cookie/sepia/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/timecookie)
|
||||
|
||||
/obj/item/slimecross/consuming/cerulean
|
||||
colour = "cerulean"
|
||||
cookietype = /obj/item/slime_cookie/cerulean
|
||||
cookies = 3 //You're gonna get more.
|
||||
|
||||
/obj/item/slime_cookie/cerulean
|
||||
name = "duplicookie"
|
||||
desc = "A cerulean cookie with strange proportions. It feels like it could break apart easily."
|
||||
icon_state = "cerulean"
|
||||
taste = "a sugar cookie"
|
||||
|
||||
/obj/item/slime_cookie/cerulean/do_effect(mob/living/M, mob/user)
|
||||
if(prob(50))
|
||||
to_chat(M, "<span class='notice'>A piece of [src] breaks off while you chew, and falls to the ground.</span>")
|
||||
var/obj/item/slime_cookie/cerulean/C = new(get_turf(M))
|
||||
C.taste = taste + " and a sugar cookie"
|
||||
|
||||
/obj/item/slimecross/consuming/pyrite
|
||||
colour = "pyrite"
|
||||
cookietype = /obj/item/slime_cookie/pyrite
|
||||
|
||||
/obj/item/slime_cookie/pyrite
|
||||
name = "color cookie"
|
||||
desc = "A yellow cookie with rainbow-colored icing. Reflects the light strangely."
|
||||
icon_state = "pyrite"
|
||||
taste = "vanilla and " //Randomly selected color dye.
|
||||
var/colour = "#FFFFFF"
|
||||
|
||||
/obj/item/slime_cookie/pyrite/Initialize()
|
||||
..()
|
||||
var/tastemessage = "paint remover"
|
||||
switch(rand(1,7))
|
||||
if(1)
|
||||
tastemessage = "red dye"
|
||||
colour = "#FF0000"
|
||||
if(2)
|
||||
tastemessage = "orange dye"
|
||||
colour = "#FFA500"
|
||||
if(3)
|
||||
tastemessage = "yellow dye"
|
||||
colour = "#FFFF00"
|
||||
if(4)
|
||||
tastemessage = "green dye"
|
||||
colour = "#00FF00"
|
||||
if(5)
|
||||
tastemessage = "blue dye"
|
||||
colour = "#0000FF"
|
||||
if(6)
|
||||
tastemessage = "indigo dye"
|
||||
colour = "#4B0082"
|
||||
if(7)
|
||||
tastemessage = "violet dye"
|
||||
colour = "#FF00FF"
|
||||
taste += tastemessage
|
||||
|
||||
/obj/item/slime_cookie/pyrite/do_effect(mob/living/M, mob/user)
|
||||
M.add_atom_colour(colour,WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
/obj/item/slimecross/consuming/red
|
||||
colour = "red"
|
||||
cookietype = /obj/item/slime_cookie/red
|
||||
|
||||
/obj/item/slime_cookie/red
|
||||
name = "blood cookie"
|
||||
desc = "A red cookie, oozing a thick red fluid. Vampires might enjoy it."
|
||||
icon_state = "red"
|
||||
taste = "red velvet and iron"
|
||||
|
||||
/obj/item/slime_cookie/red/do_effect(mob/living/M, mob/user)
|
||||
new /obj/effect/decal/cleanable/blood(get_turf(M))
|
||||
playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.blood_volume += 25 //Half a vampire drain.
|
||||
|
||||
/obj/item/slimecross/consuming/green
|
||||
colour = "green"
|
||||
cookietype = /obj/item/slime_cookie/green
|
||||
|
||||
/obj/item/slime_cookie/green
|
||||
name = "gross cookie"
|
||||
desc = "A disgusting green cookie, seeping with pus. You kind of feel ill just looking at it."
|
||||
icon_state = "green"
|
||||
taste = "the contents of your stomach"
|
||||
|
||||
/obj/item/slime_cookie/green/do_effect(mob/living/M, mob/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.vomit(25)
|
||||
M.reagents.remove_all()
|
||||
|
||||
/obj/item/slimecross/consuming/pink
|
||||
colour = "pink"
|
||||
cookietype = /obj/item/slime_cookie/pink
|
||||
|
||||
/obj/item/slime_cookie/pink
|
||||
name = "love cookie"
|
||||
desc = "A pink cookie with an icing heart. D'aww."
|
||||
icon_state = "pink"
|
||||
taste = "love and hugs"
|
||||
|
||||
/obj/item/slime_cookie/pink/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/lovecookie)
|
||||
|
||||
/obj/item/slimecross/consuming/gold
|
||||
colour = "gold"
|
||||
cookietype = /obj/item/slime_cookie/gold
|
||||
|
||||
/obj/item/slime_cookie/gold
|
||||
name = "gilded cookie"
|
||||
desc = "A buttery golden cookie, closer to a bread than anything. May good fortune find you."
|
||||
icon_state = "gold"
|
||||
taste = "sweet cornbread and wealth"
|
||||
|
||||
/obj/item/slime_cookie/gold/do_effect(mob/living/M, mob/user)
|
||||
var/obj/item/held = M.get_active_held_item() //This should be itself, but just in case...
|
||||
M.dropItemToGround(held)
|
||||
var/newcoin = /obj/item/coin/gold
|
||||
var/obj/item/coin/C = new newcoin(get_turf(M))
|
||||
playsound(get_turf(C), 'sound/items/coinflip.ogg', 50, 1)
|
||||
M.put_in_hand(C)
|
||||
|
||||
/obj/item/slimecross/consuming/oil
|
||||
colour = "oil"
|
||||
cookietype = /obj/item/slime_cookie/oil
|
||||
|
||||
/obj/item/slime_cookie/oil
|
||||
name = "tar cookie"
|
||||
desc = "An oily black cookie, which sticks to your hands. Smells like chocolate."
|
||||
icon_state = "oil"
|
||||
taste = "rich molten chocolate and tar"
|
||||
|
||||
/obj/item/slime_cookie/oil/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/tarcookie)
|
||||
|
||||
/obj/item/slimecross/consuming/black
|
||||
colour = "black"
|
||||
cookietype = /obj/item/slime_cookie/black
|
||||
|
||||
/obj/item/slime_cookie/black
|
||||
name = "spooky cookie"
|
||||
desc = "A pitch black cookie with an icing ghost on the front. Spooky!"
|
||||
icon_state = "black"
|
||||
taste = "ghosts and stuff"
|
||||
|
||||
/obj/item/slime_cookie/black/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/spookcookie)
|
||||
|
||||
/obj/item/slimecross/consuming/lightpink
|
||||
colour = "light pink"
|
||||
cookietype = /obj/item/slime_cookie/lightpink
|
||||
|
||||
/obj/item/slime_cookie/lightpink
|
||||
name = "peace cookie"
|
||||
desc = "A light pink cookie with a peace symbol in the icing. Lovely!"
|
||||
icon_state = "lightpink"
|
||||
taste = "strawberry icing and P.L.U.R" //Literal candy raver.
|
||||
|
||||
/obj/item/slime_cookie/lightpink/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/peacecookie)
|
||||
|
||||
/obj/item/slimecross/consuming/adamantine
|
||||
colour = "adamantine"
|
||||
cookietype = /obj/item/slime_cookie/adamantine
|
||||
|
||||
/obj/item/slime_cookie/adamantine
|
||||
name = "crystal cookie"
|
||||
desc = "A translucent rock candy in the shape of a cookie. Surprisingly chewy."
|
||||
icon_state = "adamantine"
|
||||
taste = "crystalline sugar and metal"
|
||||
|
||||
/obj/item/slime_cookie/adamantine/do_effect(mob/living/M, mob/user)
|
||||
M.apply_status_effect(/datum/status_effect/adamantinecookie)
|
||||
|
||||
/obj/item/slimecross/consuming/rainbow
|
||||
colour = "rainbow"
|
||||
|
||||
/obj/item/slimecross/consuming/rainbow/spawncookie()
|
||||
var/cookie_type = pick(subtypesof(/obj/item/slime_cookie))
|
||||
var/obj/item/slime_cookie/S = new cookie_type(get_turf(src))
|
||||
S.name = "rainbow cookie"
|
||||
S.desc = "A beautiful rainbow cookie, constantly shifting colors in the light."
|
||||
S.icon_state = "rainbow"
|
||||
return S
|
||||
@@ -0,0 +1,189 @@
|
||||
/*
|
||||
Industrial extracts:
|
||||
Slowly consume plasma, produce items with it.
|
||||
*/
|
||||
/obj/item/slimecross/industrial
|
||||
name = "industrial extract"
|
||||
desc = "A gel-like, sturdy extract, fond of plasma and industry."
|
||||
container_type = INJECTABLE | DRAWABLE
|
||||
effect = "industrial"
|
||||
icon_state = "industrial_still"
|
||||
var/plasmarequired = 2 //Units of plasma required to be consumed to produce item.
|
||||
var/itempath = /obj/item //The item produced by the extract.
|
||||
var/plasmaabsorbed = 0 //Units of plasma aborbed by the extract already. Absorbs at a rate of 2u/obj tick.
|
||||
var/itemamount = 1 //How many items to spawn
|
||||
|
||||
/obj/item/slimecross/industrial/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "It currently has [plasmaabsorbed] units of plasma floating inside the outer shell, out of [plasmarequired] units.")
|
||||
|
||||
/obj/item/slimecross/industrial/proc/do_after_spawn(obj/item/spawned)
|
||||
return
|
||||
|
||||
/obj/item/slimecross/industrial/Initialize()
|
||||
..()
|
||||
create_reagents(100)
|
||||
START_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecross/industrial/Destroy()
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
return ..()
|
||||
|
||||
/obj/item/slimecross/industrial/process()
|
||||
var/IsWorking = FALSE
|
||||
if(reagents.has_reagent("plasma",amount = 2) && plasmarequired > 1) //Can absorb as much as 2
|
||||
IsWorking = TRUE
|
||||
reagents.remove_reagent("plasma",2)
|
||||
plasmaabsorbed += 2
|
||||
else if(reagents.has_reagent("plasma",amount = 1)) //Can absorb as little as 1
|
||||
IsWorking = TRUE
|
||||
reagents.remove_reagent("plasma",1)
|
||||
plasmaabsorbed += 1
|
||||
|
||||
if(plasmaabsorbed >= plasmarequired)
|
||||
playsound(src, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
plasmaabsorbed -= plasmarequired
|
||||
for(var/i = 0, i < itemamount, i++)
|
||||
do_after_spawn(new itempath(get_turf(src)))
|
||||
else if(IsWorking)
|
||||
playsound(src, 'sound/effects/bubbles.ogg', 5, 1)
|
||||
if(IsWorking)
|
||||
icon_state = "industrial"
|
||||
else
|
||||
icon_state = "industrial_still"
|
||||
|
||||
/obj/item/slimecross/industrial/grey
|
||||
colour = "grey"
|
||||
itempath = /obj/item/reagent_containers/food/snacks/monkeycube
|
||||
itemamount = 5
|
||||
|
||||
/obj/item/slimecross/industrial/orange
|
||||
colour = "orange"
|
||||
plasmarequired = 6
|
||||
itempath = /obj/item/lighter/slime
|
||||
|
||||
/obj/item/slimecross/industrial/purple
|
||||
colour = "purple"
|
||||
plasmarequired = 5
|
||||
itempath = /obj/item/slimecrossbeaker/autoinjector/regenpack
|
||||
|
||||
/obj/item/slimecross/industrial/blue
|
||||
colour = "blue"
|
||||
plasmarequired = 10
|
||||
itempath = /obj/item/extinguisher
|
||||
|
||||
/obj/item/slimecross/industrial/metal
|
||||
colour = "metal"
|
||||
plasmarequired = 3
|
||||
itempath = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/item/slimecross/industrial/metal/do_after_spawn(obj/item/spawned)
|
||||
var/obj/item/stack/sheet/metal/M = spawned
|
||||
if(istype(M))
|
||||
M.amount = 10
|
||||
|
||||
/obj/item/slimecross/industrial/yellow
|
||||
colour = "yellow"
|
||||
plasmarequired = 5
|
||||
itempath = /obj/item/stock_parts/cell/high
|
||||
|
||||
/obj/item/slimecross/industrial/yellow/do_after_spawn(obj/item/spawned)
|
||||
var/obj/item/stock_parts/cell/high/C = spawned
|
||||
if(istype(C))
|
||||
C.charge = rand(0,C.maxcharge/2)
|
||||
|
||||
/obj/item/slimecross/industrial/darkpurple
|
||||
colour = "dark purple"
|
||||
plasmarequired = 10
|
||||
itempath = /obj/item/stack/sheet/mineral/plasma
|
||||
|
||||
/obj/item/slimecross/industrial/darkblue
|
||||
colour = "dark blue"
|
||||
plasmarequired = 6
|
||||
itempath = /obj/item/slimepotion/fireproof
|
||||
|
||||
/obj/item/slimecross/industrial/darkblue/do_after_spawn(obj/item/spawned)
|
||||
var/obj/item/slimepotion/fireproof/potion = spawned
|
||||
if(istype(potion))
|
||||
potion.uses = 1
|
||||
|
||||
/obj/item/slimecross/industrial/silver
|
||||
colour = "silver"
|
||||
plasmarequired = 1
|
||||
//Item picked below.
|
||||
|
||||
/obj/item/slimecross/industrial/silver/process()
|
||||
itempath = pick(list(get_random_food(), get_random_drink()))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/industrial/bluespace
|
||||
colour = "bluespace"
|
||||
plasmarequired = 7
|
||||
itempath = /obj/item/stack/ore/bluespace_crystal/artificial
|
||||
|
||||
/obj/item/slimecross/industrial/sepia
|
||||
colour = "sepia"
|
||||
plasmarequired = 2
|
||||
itempath = /obj/item/device/camera
|
||||
|
||||
/obj/item/slimecross/industrial/cerulean
|
||||
colour = "cerulean"
|
||||
plasmarequired = 5
|
||||
itempath = /obj/item/slimepotion/enhancer
|
||||
|
||||
/obj/item/slimecross/industrial/pyrite
|
||||
colour = "pyrite"
|
||||
plasmarequired = 2
|
||||
itempath = /obj/item/toy/crayon/spraycan
|
||||
|
||||
/obj/item/slimecross/industrial/red
|
||||
colour = "red"
|
||||
plasmarequired = 5
|
||||
itempath = /obj/item/slimecrossbeaker/bloodpack
|
||||
|
||||
/obj/item/slimecross/industrial/green
|
||||
colour = "green"
|
||||
plasmarequired = 7
|
||||
itempath = /obj/item/slimecrossbeaker/autoinjector/slimejelly
|
||||
|
||||
/obj/item/slimecross/industrial/pink
|
||||
colour = "pink"
|
||||
plasmarequired = 6
|
||||
itempath = /obj/item/slimecrossbeaker/autoinjector/peaceandlove
|
||||
|
||||
/obj/item/slimecross/industrial/gold
|
||||
colour = "gold"
|
||||
plasmarequired = 10
|
||||
|
||||
/obj/item/slimecross/industrial/gold/process()
|
||||
itempath = pick(/obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/industrial/oil
|
||||
colour = "oil"
|
||||
plasmarequired = 4
|
||||
itempath = /obj/item/grenade/iedcasing
|
||||
|
||||
/obj/item/slimecross/industrial/black //What does this have to do with black slimes? No clue! Fun, though
|
||||
colour = "black"
|
||||
plasmarequired = 6
|
||||
itempath = /obj/item/storage/fancy/cigarettes/cigpack_xeno
|
||||
|
||||
/obj/item/slimecross/industrial/lightpink
|
||||
colour = "light pink"
|
||||
plasmarequired = 3
|
||||
itempath = /obj/item/storage/fancy/heart_box
|
||||
|
||||
/obj/item/slimecross/industrial/adamantine
|
||||
colour = "adamantine"
|
||||
plasmarequired = 10
|
||||
itempath = /obj/item/stack/sheet/mineral/adamantine
|
||||
|
||||
/obj/item/slimecross/industrial/rainbow
|
||||
colour = "rainbow"
|
||||
plasmarequired = 5
|
||||
//Item picked below.
|
||||
|
||||
/obj/item/slimecross/industrial/rainbow/process()
|
||||
itempath = pick(subtypesof(/obj/item/slime_extract))
|
||||
..()
|
||||
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
Prismatic extracts:
|
||||
Becomes an infinite-use paintbrush.
|
||||
*/
|
||||
/obj/item/slimecross/prismatic
|
||||
name = "prismatic extract"
|
||||
desc = "It's constantly wet with a semi-transparent, colored goo."
|
||||
effect = "prismatic"
|
||||
icon_state = "prismatic"
|
||||
var/paintcolor = "#FFFFFF"
|
||||
|
||||
/obj/item/slimecross/prismatic/afterattack(turf/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(!istype(target) || isspaceturf(target))
|
||||
return
|
||||
target.add_atom_colour(paintcolor, WASHABLE_COLOUR_PRIORITY)
|
||||
playsound(target, 'sound/effects/slosh.ogg', 20, 1)
|
||||
|
||||
/obj/item/slimecross/prismatic/grey/
|
||||
colour = "grey"
|
||||
desc = "It's constantly wet with a pungent-smelling, clear chemical."
|
||||
|
||||
/obj/item/slimecross/prismatic/grey/afterattack(turf/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target) && target.color != initial(target.color))
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
playsound(target, 'sound/effects/slosh.ogg', 20, 1)
|
||||
|
||||
/obj/item/slimecross/prismatic/orange
|
||||
paintcolor = "#FFA500"
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/prismatic/purple
|
||||
paintcolor = "#B19CD9"
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/prismatic/blue
|
||||
paintcolor = "#ADD8E6"
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/prismatic/metal
|
||||
paintcolor = "#7E7E7E"
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/prismatic/yellow
|
||||
paintcolor = "#FFFF00"
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/prismatic/darkpurple
|
||||
paintcolor = "#551A8B"
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/prismatic/darkblue
|
||||
paintcolor = "#0000FF"
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/prismatic/silver
|
||||
paintcolor = "#D3D3D3"
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/prismatic/bluespace
|
||||
paintcolor = "#32CD32"
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/prismatic/sepia
|
||||
paintcolor = "#704214"
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/prismatic/cerulean
|
||||
paintcolor = "#2956B2"
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/prismatic/pyrite
|
||||
paintcolor = "#FAFAD2"
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/prismatic/red
|
||||
paintcolor = "#FF0000"
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/prismatic/green
|
||||
paintcolor = "#00FF00"
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/prismatic/pink
|
||||
paintcolor = "#FF69B4"
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/prismatic/gold
|
||||
paintcolor = "#FFD700"
|
||||
colour = "gold"
|
||||
|
||||
/obj/item/slimecross/prismatic/oil
|
||||
paintcolor = "#505050"
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/prismatic/black
|
||||
paintcolor = "#000000"
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/prismatic/lightpink
|
||||
paintcolor = "#FFB6C1"
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/prismatic/adamantine
|
||||
paintcolor = "#008B8B"
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/prismatic/rainbow
|
||||
paintcolor = "#FFFFFF"
|
||||
colour = "rainbow"
|
||||
|
||||
/obj/item/slimecross/prismatic/rainbow/attack_self(mob/user)
|
||||
var/newcolor = input(user, "Choose the slime color:", "Color change",paintcolor) as color|null
|
||||
if ((user.get_active_held_item() != src || user.stat || user.restrained()))
|
||||
return
|
||||
if(!newcolor)
|
||||
return
|
||||
paintcolor = newcolor
|
||||
return
|
||||
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
Recurring extracts:
|
||||
Generates a new charge every few seconds.
|
||||
If depleted of its' last charge, stops working.
|
||||
*/
|
||||
/obj/item/slimecross/recurring
|
||||
name = "recurring extract"
|
||||
desc = "A tiny, glowing core, wrapped in several layers of goo."
|
||||
effect = "recurring"
|
||||
icon_state = "recurring"
|
||||
var/extract_type
|
||||
var/obj/item/slime_extract/extract
|
||||
var/cooldown = 0
|
||||
var/max_cooldown = 5 //In sets of 2 seconds.
|
||||
|
||||
/obj/item/slimecross/recurring/Initialize()
|
||||
..()
|
||||
extract = new extract_type(src.loc)
|
||||
visible_message("<span class='notice'>[src] wraps a layer of goo around itself!</span>")
|
||||
extract.name = name
|
||||
extract.desc = desc
|
||||
extract.icon = icon
|
||||
extract.icon_state = icon_state
|
||||
extract.recurring = TRUE
|
||||
src.forceMove(extract)
|
||||
START_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecross/recurring/process()
|
||||
if(cooldown > 0)
|
||||
cooldown--
|
||||
else if(extract.Uses < 10 && extract.Uses > 0)
|
||||
extract.Uses++
|
||||
cooldown = max_cooldown
|
||||
else if(extract.Uses <= 0)
|
||||
extract.visible_message("<span class='warning'>The light inside [extract] flickers and dies out.</span>")
|
||||
extract.desc = "A tiny, inert core, bleeding dark, cerulean-colored goo."
|
||||
extract.icon_state = "prismatic"
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecross/recurring/Destroy()
|
||||
..()
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecross/recurring/grey
|
||||
extract_type = /obj/item/slime_extract/grey
|
||||
colour = "grey"
|
||||
|
||||
/obj/item/slimecross/recurring/orange
|
||||
extract_type = /obj/item/slime_extract/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/recurring/purple
|
||||
extract_type = /obj/item/slime_extract/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/recurring/blue
|
||||
extract_type = /obj/item/slime_extract/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/recurring/metal
|
||||
extract_type = /obj/item/slime_extract/metal
|
||||
colour = "metal"
|
||||
max_cooldown = 10
|
||||
|
||||
/obj/item/slimecross/recurring/yellow
|
||||
extract_type = /obj/item/slime_extract/yellow
|
||||
colour = "yellow"
|
||||
max_cooldown = 10
|
||||
|
||||
/obj/item/slimecross/recurring/darkpurple
|
||||
extract_type = /obj/item/slime_extract/darkpurple
|
||||
colour = "dark purple"
|
||||
max_cooldown = 10
|
||||
|
||||
/obj/item/slimecross/recurring/darkblue
|
||||
extract_type = /obj/item/slime_extract/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/recurring/silver
|
||||
extract_type = /obj/item/slime_extract/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/recurring/bluespace
|
||||
extract_type = /obj/item/slime_extract/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/recurring/sepia
|
||||
extract_type = /obj/item/slime_extract/sepia
|
||||
colour = "sepia"
|
||||
max_cooldown = 18 //No infinite timestop for you!
|
||||
|
||||
/obj/item/slimecross/recurring/cerulean
|
||||
extract_type = /obj/item/slime_extract/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/recurring/pyrite
|
||||
extract_type = /obj/item/slime_extract/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/recurring/red
|
||||
extract_type = /obj/item/slime_extract/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/recurring/green
|
||||
extract_type = /obj/item/slime_extract/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/recurring/pink
|
||||
extract_type = /obj/item/slime_extract/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/recurring/gold
|
||||
extract_type = /obj/item/slime_extract/gold
|
||||
colour = "gold"
|
||||
max_cooldown = 15
|
||||
|
||||
/obj/item/slimecross/recurring/oil
|
||||
extract_type = /obj/item/slime_extract/oil
|
||||
colour = "oil" //Why would you want this?
|
||||
|
||||
/obj/item/slimecross/recurring/black
|
||||
extract_type = /obj/item/slime_extract/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/recurring/lightpink
|
||||
extract_type = /obj/item/slime_extract/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/recurring/adamantine
|
||||
extract_type = /obj/item/slime_extract/adamantine
|
||||
colour = "adamantine"
|
||||
max_cooldown = 10
|
||||
|
||||
/obj/item/slimecross/recurring/rainbow
|
||||
extract_type = /obj/item/slime_extract/rainbow
|
||||
colour = "rainbow"
|
||||
max_cooldown = 20 //It's pretty powerful.
|
||||
@@ -0,0 +1,254 @@
|
||||
/*
|
||||
Regenerative extracts:
|
||||
Work like a legion regenerative core.
|
||||
Has a unique additional effect.
|
||||
*/
|
||||
/obj/item/slimecross/regenerative
|
||||
name = "regenerative extract"
|
||||
desc = "It's filled with a milky substance, and pulses like a heartbeat."
|
||||
effect = "regenerative"
|
||||
icon_state = "regenerative"
|
||||
|
||||
/obj/item/slimecross/regenerative/proc/core_effect(mob/living/carbon/human/target, mob/user)
|
||||
return
|
||||
/obj/item/slimecross/regenerative/proc/core_effect_before(mob/living/carbon/human/target, mob/user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/slimecross/regenerative/afterattack(atom/target,mob/user,prox)
|
||||
if(!prox || !isliving(target))
|
||||
return
|
||||
var/mob/living/H = target
|
||||
if(H.stat == DEAD)
|
||||
to_chat(user, "<span class='warning'>[src] will not work on the dead!</span>")
|
||||
return
|
||||
if(H != user)
|
||||
user.visible_message("<span class='notice'>[user] crushes the [src] over [H], the milky goo quickly regenerating all of [H.p_their()] injuries!</span>",
|
||||
"<span class='notice'>You squeeze the [src], and it bursts over [H], the milky goo regenerating [H.p_their()] injuries.</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] crushes the [src] over [user.p_them()]self, the milky goo quickly regenerating all of [user.p_their()] injuries!</span>",
|
||||
"<span class='notice'>You squeeze the [src], and it bursts in your hand, splashing you with milky goo which quickly regenerates your injuries!</span>")
|
||||
core_effect_before(H, user)
|
||||
H.revive(full_heal = 1)
|
||||
core_effect(H, user)
|
||||
playsound(target, 'sound/effects/splat.ogg', 40, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecross/regenerative/grey
|
||||
colour = "grey" //Has no bonus effect.
|
||||
|
||||
/obj/item/slimecross/regenerative/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/regenerative/orange/core_effect_before(mob/living/target, mob/user)
|
||||
target.visible_message("<span class='warning'>The [src] boils over!</span>")
|
||||
for(var/turf/turf in range(1,target))
|
||||
if(!locate(/obj/effect/hotspot) in turf)
|
||||
new /obj/effect/hotspot(turf)
|
||||
|
||||
/obj/item/slimecross/regenerative/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/regenerative/purple/core_effect(mob/living/target, mob/user)
|
||||
target.reagents.add_reagent("regen_jelly",10)
|
||||
|
||||
/obj/item/slimecross/regenerative/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/regenerative/blue/core_effect(mob/living/target, mob/user)
|
||||
if(isturf(target.loc))
|
||||
var/turf/open/T = get_turf(target)
|
||||
T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
|
||||
target.visible_message("<span class='warning'>The milky goo in the extract gets all over the floor!</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/metal
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/regenerative/metal/core_effect(mob/living/target, mob/user)
|
||||
target.visible_message("<span class='warning'>The milky goo hardens and reshapes itself, encasing [target]!</span>")
|
||||
var/obj/structure/closet/C = new /obj/structure/closet(target.loc)
|
||||
C.name = "slimy closet"
|
||||
C.desc = "Looking closer, it seems to be made of a sort of solid, opaque, metal-like goo."
|
||||
target.forceMove(C)
|
||||
|
||||
/obj/item/slimecross/regenerative/yellow
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user)
|
||||
var/list/batteries = list()
|
||||
for(var/obj/item/stock_parts/cell/C in target.GetAllContents())
|
||||
if(C.charge < C.maxcharge)
|
||||
batteries += C
|
||||
if(batteries.len)
|
||||
var/obj/item/stock_parts/cell/ToCharge = pick(batteries)
|
||||
ToCharge.charge = ToCharge.maxcharge
|
||||
to_chat(target, "<span class='notice'>You feel a strange electrical pulse, and one of your electrical items was recharged.</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/darkpurple
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user)
|
||||
var/equipped = 0
|
||||
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), slot_shoes)
|
||||
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), slot_w_uniform)
|
||||
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), slot_gloves)
|
||||
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), slot_head)
|
||||
if(equipped > 0)
|
||||
target.visible_message("<span class='notice'>The milky goo congeals into clothing!</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/regenerative/darkblue/core_effect(mob/living/target, mob/user)
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/fireproofed = FALSE
|
||||
if(H.get_item_by_slot(slot_wear_suit))
|
||||
fireproofed = TRUE
|
||||
var/obj/item/clothing/C = H.get_item_by_slot(slot_wear_suit)
|
||||
fireproof(C)
|
||||
if(H.get_item_by_slot(slot_head))
|
||||
fireproofed = TRUE
|
||||
var/obj/item/clothing/C = H.get_item_by_slot(slot_head)
|
||||
fireproof(C)
|
||||
if(fireproofed)
|
||||
target.visible_message("<span class='notice'>Some of [target]'s clothing gets coated in the goo, and turns blue!</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/darkblue/proc/fireproof(obj/item/clothing/C)
|
||||
C.name = "fireproofed [C.name]"
|
||||
C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
|
||||
C.max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
C.heat_protection = C.body_parts_covered
|
||||
C.resistance_flags |= FIRE_PROOF
|
||||
|
||||
/obj/item/slimecross/regenerative/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/regenerative/silver/core_effect(mob/living/target, mob/user)
|
||||
target.nutrition = NUTRITION_LEVEL_FULL - 1
|
||||
to_chat(target, "<span class='notice'>You feel satiated.</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/bluespace
|
||||
colour = "bluespace"
|
||||
var/turf/open/T
|
||||
|
||||
/obj/item/slimecross/regenerative/bluespace/core_effect(mob/living/target, mob/user)
|
||||
target.visible_message("<span class='warning'>[src] disappears in a shower of sparks!</span>","<span class='danger'>The milky goo teleports you somewhere it remembers!</span>")
|
||||
do_sparks(5,FALSE,target)
|
||||
target.forceMove(T)
|
||||
do_sparks(5,FALSE,target)
|
||||
|
||||
/obj/item/slimecross/regenerative/bluespace/Initialize()
|
||||
..()
|
||||
T = get_turf(src)
|
||||
|
||||
/obj/item/slimecross/regenerative/sepia
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/regenerative/sepia/core_effect(mob/living/target, mob/user)
|
||||
new /obj/effect/timestop(get_turf(target), 2, 50, list(user,target))
|
||||
|
||||
/obj/item/slimecross/regenerative/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/regenerative/cerulean/core_effect(mob/living/target, mob/user)
|
||||
src.forceMove(user.loc)
|
||||
var/obj/item/slimecross/X = new /obj/item/slimecross/regenerative(user.loc)
|
||||
X.name = name
|
||||
X.desc = desc
|
||||
user.put_in_active_hand(X)
|
||||
to_chat(user, "<span class='notice'>Some of the milky goo congeals in your hand!</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/regenerative/pyrite/core_effect(mob/living/target, mob/user)
|
||||
target.visible_message("<span class='warning'>The milky goo coating [target] leaves [target.p_them()] a different color!</span>")
|
||||
target.add_atom_colour(rgb(rand(0,255),rand(0,255),rand(0,255)),WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
/obj/item/slimecross/regenerative/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/regenerative/red/core_effect(mob/living/target, mob/user)
|
||||
to_chat(target, "<span class='notice'>You feel... <i>faster.</i></span>")
|
||||
target.reagents.add_reagent("ephedrine",3)
|
||||
|
||||
/obj/item/slimecross/regenerative/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/regenerative/green/core_effect(mob/living/target, mob/user)
|
||||
if(isslime(target))
|
||||
target.visible_message("<span class='warning'>The [target] suddenly changes color!</span>")
|
||||
var/mob/living/simple_animal/slime/S = target
|
||||
S.random_colour()
|
||||
if(isjellyperson(target))
|
||||
target.reagents.add_reagent("slime_toxin",5)
|
||||
|
||||
|
||||
/obj/item/slimecross/regenerative/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/regenerative/pink/core_effect(mob/living/target, mob/user)
|
||||
to_chat(target, "<span class='notice'>You feel more calm.</span>")
|
||||
target.reagents.add_reagent("krokodil",4)
|
||||
|
||||
/obj/item/slimecross/regenerative/gold
|
||||
colour = "gold"
|
||||
|
||||
/obj/item/slimecross/regenerative/gold/core_effect(mob/living/target, mob/user)
|
||||
var/newcoin = pick(/obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium)
|
||||
var/obj/item/coin/C = new newcoin(target.loc)
|
||||
playsound(C, 'sound/items/coinflip.ogg', 50, 1)
|
||||
target.put_in_hand(C)
|
||||
|
||||
/obj/item/slimecross/regenerative/oil
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/regenerative/oil/core_effect(mob/living/target, mob/user)
|
||||
playsound(src, 'sound/weapons/flash.ogg', 100, 1)
|
||||
for(var/mob/living/L in view(user,7))
|
||||
L.flash_act()
|
||||
|
||||
/obj/item/slimecross/regenerative/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/regenerative/black/core_effect_before(mob/living/target, mob/user)
|
||||
var/dummytype = target.type
|
||||
var/mob/living/dummy = new dummytype(target.loc)
|
||||
to_chat(target, "<span class='notice'>The milky goo flows from your skin, forming an imperfect copy of you.</span>")
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/T = target
|
||||
var/mob/living/carbon/D = dummy
|
||||
T.dna.transfer_identity(D)
|
||||
D.updateappearance(mutcolor_update=1)
|
||||
D.real_name = T.real_name
|
||||
dummy.adjustBruteLoss(target.getBruteLoss())
|
||||
dummy.adjustFireLoss(target.getFireLoss())
|
||||
dummy.adjustToxLoss(target.getToxLoss())
|
||||
dummy.adjustOxyLoss(200)
|
||||
|
||||
/obj/item/slimecross/regenerative/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/regenerative/lightpink/core_effect(mob/living/target, mob/user)
|
||||
if(!isliving(user))
|
||||
return
|
||||
if(target == user)
|
||||
return
|
||||
var/mob/living/U = user
|
||||
U.revive(full_heal = 1)
|
||||
to_chat(U, "<span class='notice'>Some of the milky goo sprays onto you, as well!</span>")
|
||||
|
||||
/obj/item/slimecross/regenerative/adamantine
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/regenerative/adamantine/core_effect(mob/living/target, mob/user) //WIP - Find out why this doesn't work.
|
||||
target.apply_status_effect(STATUS_EFFECT_SLIMESKIN)
|
||||
|
||||
/obj/item/slimecross/regenerative/rainbow
|
||||
colour = "rainbow"
|
||||
|
||||
/obj/item/slimecross/regenerative/rainbow/core_effect(mob/living/target, mob/user)
|
||||
target.apply_status_effect(STATUS_EFFECT_RAINBOWPROTECTION)
|
||||
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
Reproductive extracts:
|
||||
When fed three monkey cubes, produces between
|
||||
1 and 4 normal slime extracts of the same colour.
|
||||
*/
|
||||
/obj/item/slimecross/reproductive
|
||||
name = "reproductive extract"
|
||||
desc = "It pulses with a strange hunger."
|
||||
icon_state = "reproductive"
|
||||
effect = "reproductive"
|
||||
var/extract_type = /obj/item/slime_extract/
|
||||
var/cubes_eaten = 0
|
||||
var/last_produce = 0
|
||||
var/cooldown = 30 // 3 seconds.
|
||||
|
||||
/obj/item/slimecross/reproductive/attackby(obj/item/O, mob/user)
|
||||
if((last_produce + cooldown) > world.time)
|
||||
to_chat(user, "<span class='warning'>[src] is still digesting!</span>")
|
||||
return
|
||||
if(istype(O, /obj/item/storage/bag/bio))
|
||||
var/obj/item/storage/P = O
|
||||
var/obj/item/reagent_containers/food/snacks/monkeycube/M
|
||||
for(var/obj/item/X in P.contents)
|
||||
M = X
|
||||
if(M && istype(M))
|
||||
break
|
||||
if(M && istype(M))
|
||||
P.remove_from_storage(M, get_turf(src))
|
||||
attackby(M,user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There are no monkey cubes in the bio bag!</span>")
|
||||
if(istype(O,/obj/item/reagent_containers/food/snacks/monkeycube))
|
||||
qdel(O)
|
||||
cubes_eaten++
|
||||
to_chat(user, "<span class='notice'>You feed [O] to [src], and it pulses gently.</span>")
|
||||
playsound(src, 'sound/items/eatfood.ogg', 20, 1)
|
||||
if(cubes_eaten >= 3)
|
||||
var/cores = rand(1,4)
|
||||
visible_message("<span class='notice'>[src] briefly swells to a massive size, and expels [cores] extract[cores > 1 ? "s":""]!</span>")
|
||||
playsound(src, 'sound/effects/splat.ogg', 40, 1)
|
||||
last_produce = world.time
|
||||
for(var/i = 0, i < cores, i++)
|
||||
new extract_type(get_turf(loc))
|
||||
cubes_eaten = 0
|
||||
|
||||
/obj/item/slimecross/reproductive/grey
|
||||
extract_type = /obj/item/slime_extract/grey
|
||||
colour = "grey"
|
||||
|
||||
/obj/item/slimecross/reproductive/orange
|
||||
extract_type = /obj/item/slime_extract/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/reproductive/purple
|
||||
extract_type = /obj/item/slime_extract/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/reproductive/blue
|
||||
extract_type = /obj/item/slime_extract/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/reproductive/metal
|
||||
extract_type = /obj/item/slime_extract/metal
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/reproductive/yellow
|
||||
extract_type = /obj/item/slime_extract/yellow
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/reproductive/darkpurple
|
||||
extract_type = /obj/item/slime_extract/darkpurple
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/reproductive/darkblue
|
||||
extract_type = /obj/item/slime_extract/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/reproductive/silver
|
||||
extract_type = /obj/item/slime_extract/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/reproductive/bluespace
|
||||
extract_type = /obj/item/slime_extract/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/reproductive/sepia
|
||||
extract_type = /obj/item/slime_extract/sepia
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/reproductive/cerulean
|
||||
extract_type = /obj/item/slime_extract/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/reproductive/pyrite
|
||||
extract_type = /obj/item/slime_extract/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/reproductive/red
|
||||
extract_type = /obj/item/slime_extract/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/reproductive/green
|
||||
extract_type = /obj/item/slime_extract/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/reproductive/pink
|
||||
extract_type = /obj/item/slime_extract/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/reproductive/gold
|
||||
extract_type = /obj/item/slime_extract/gold
|
||||
colour = "gold"
|
||||
|
||||
/obj/item/slimecross/reproductive/oil
|
||||
extract_type = /obj/item/slime_extract/oil
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/reproductive/black
|
||||
extract_type = /obj/item/slime_extract/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/reproductive/lightpink
|
||||
extract_type = /obj/item/slime_extract/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/reproductive/adamantine
|
||||
extract_type = /obj/item/slime_extract/adamantine
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/reproductive/rainbow
|
||||
extract_type = /obj/item/slime_extract/rainbow
|
||||
colour = "rainbow"
|
||||
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
Self-sustaining extracts:
|
||||
Produces 4 extracts that do not need reagents.
|
||||
*/
|
||||
/obj/item/slimecross/selfsustaining
|
||||
name = "self-sustaining extract"
|
||||
effect = "selfsustaining"
|
||||
icon_state = "selfsustaining"
|
||||
var/extract_type = /obj/item/slime_extract
|
||||
|
||||
/obj/item/autoslime
|
||||
name = "autoslime"
|
||||
desc = "It resembles a normal slime extract, but seems filled with a strange, multi-colored fluid."
|
||||
var/obj/item/slime_extract/extract
|
||||
|
||||
//Just divides into the actual item.
|
||||
/obj/item/slimecross/selfsustaining/Initialize()
|
||||
. = ..()
|
||||
visible_message("<span class='warning'>The [src] shudders, and splits into four smaller extracts.</span>")
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/obj/item/autoslime/A = new /obj/item/autoslime(src.loc)
|
||||
var/obj/item/slime_extract/X = new extract_type(A)
|
||||
A.extract = X
|
||||
A.icon = icon
|
||||
A.icon_state = icon_state
|
||||
qdel(src)
|
||||
|
||||
/obj/item/autoslime/Initialize()
|
||||
name = "self-sustaining " + extract.name
|
||||
..()
|
||||
|
||||
/obj/item/autoslime/attack_self(mob/user)
|
||||
var/reagentselect = input(user, "Choose the reagent the extract will produce.", "Self-sustaining Reaction") as null|anything in extract.activate_reagents
|
||||
var/amount = 5
|
||||
var/secondary
|
||||
|
||||
if ((user.get_active_held_item() != src || user.stat || user.restrained()))
|
||||
return
|
||||
if(!reagentselect)
|
||||
return
|
||||
if(reagentselect == "lesser plasma")
|
||||
amount = 4
|
||||
reagentselect = "plasma"
|
||||
if(reagentselect == "holy water and uranium")
|
||||
reagentselect = "holywater"
|
||||
secondary = "uranium"
|
||||
extract.forceMove(user.drop_location())
|
||||
qdel(src)
|
||||
user.put_in_active_hand(extract)
|
||||
extract.reagents.add_reagent(reagentselect,amount)
|
||||
if(secondary)
|
||||
extract.reagents.add_reagent(secondary,amount)
|
||||
|
||||
//Different types.
|
||||
|
||||
/obj/item/slimecross/selfsustaining/grey
|
||||
extract_type = /obj/item/slime_extract/grey
|
||||
colour = "grey"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/orange
|
||||
extract_type = /obj/item/slime_extract/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/purple
|
||||
extract_type = /obj/item/slime_extract/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/blue
|
||||
extract_type = /obj/item/slime_extract/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/metal
|
||||
extract_type = /obj/item/slime_extract/metal
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/yellow
|
||||
extract_type = /obj/item/slime_extract/yellow
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/darkpurple
|
||||
extract_type = /obj/item/slime_extract/darkpurple
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/darkblue
|
||||
extract_type = /obj/item/slime_extract/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/silver
|
||||
extract_type = /obj/item/slime_extract/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/bluespace
|
||||
extract_type = /obj/item/slime_extract/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/sepia
|
||||
extract_type = /obj/item/slime_extract/sepia
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/cerulean
|
||||
extract_type = /obj/item/slime_extract/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/pyrite
|
||||
extract_type = /obj/item/slime_extract/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/red
|
||||
extract_type = /obj/item/slime_extract/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/green
|
||||
extract_type = /obj/item/slime_extract/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/pink
|
||||
extract_type = /obj/item/slime_extract/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/gold
|
||||
extract_type = /obj/item/slime_extract/gold
|
||||
colour = "gold"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/oil
|
||||
extract_type = /obj/item/slime_extract/oil
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/black
|
||||
extract_type = /obj/item/slime_extract/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/lightpink
|
||||
extract_type = /obj/item/slime_extract/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/adamantine
|
||||
extract_type = /obj/item/slime_extract/adamantine
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/selfsustaining/rainbow
|
||||
extract_type = /obj/item/slime_extract/rainbow
|
||||
colour = "rainbow"
|
||||
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
Stabilized extracts:
|
||||
Provides a passive buff to the holder.
|
||||
*/
|
||||
|
||||
//To add: Create an effect in crossbreeding/_status_effects.dm with the name "/datum/status_effect/stabilized/[color]"
|
||||
//Status effect will automatically be applied while held, and lost on drop.
|
||||
|
||||
/obj/item/slimecross/stabilized
|
||||
name = "stabilized extract"
|
||||
desc = "It seems inert, but anything it touches glows softly..."
|
||||
effect = "stabilized"
|
||||
icon_state = "stabilized"
|
||||
var/datum/status_effect/linked_effect
|
||||
var/mob/living/owner
|
||||
|
||||
/obj/item/slimecross/stabilized/Initialize()
|
||||
..()
|
||||
START_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecross/stabilized/Destroy()
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
qdel(linked_effect)
|
||||
return ..()
|
||||
|
||||
/obj/item/slimecross/stabilized/process()
|
||||
var/humanfound = null
|
||||
if(ishuman(loc))
|
||||
humanfound = loc
|
||||
if(ishuman(loc.loc)) //Check if in backpack.
|
||||
humanfound = (loc.loc)
|
||||
if(!humanfound)
|
||||
return
|
||||
var/mob/living/carbon/human/H = humanfound
|
||||
var/effectpath = /datum/status_effect/stabilized
|
||||
var/static/list/effects = subtypesof(/datum/status_effect/stabilized)
|
||||
for(var/X in effects)
|
||||
var/datum/status_effect/stabilized/S = X
|
||||
if(initial(S.colour) == colour)
|
||||
effectpath = S
|
||||
break
|
||||
if(!H.has_status_effect(effectpath))
|
||||
var/datum/status_effect/stabilized/S = H.apply_status_effect(effectpath)
|
||||
owner = H
|
||||
S.linked_extract = src
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
|
||||
//Colors and subtypes:
|
||||
/obj/item/slimecross/stabilized/grey
|
||||
colour = "grey"
|
||||
|
||||
/obj/item/slimecross/stabilized/orange
|
||||
colour = "orange"
|
||||
|
||||
/obj/item/slimecross/stabilized/purple
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/stabilized/blue
|
||||
colour = "blue"
|
||||
|
||||
/obj/item/slimecross/stabilized/metal
|
||||
colour = "metal"
|
||||
|
||||
/obj/item/slimecross/stabilized/yellow
|
||||
colour = "yellow"
|
||||
|
||||
/obj/item/slimecross/stabilized/darkpurple
|
||||
colour = "dark purple"
|
||||
|
||||
/obj/item/slimecross/stabilized/darkblue
|
||||
colour = "dark blue"
|
||||
|
||||
/obj/item/slimecross/stabilized/silver
|
||||
colour = "silver"
|
||||
|
||||
/obj/item/slimecross/stabilized/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
/obj/item/slimecross/stabilized/sepia
|
||||
colour = "sepia"
|
||||
|
||||
/obj/item/slimecross/stabilized/cerulean
|
||||
colour = "cerulean"
|
||||
|
||||
/obj/item/slimecross/stabilized/pyrite
|
||||
colour = "pyrite"
|
||||
|
||||
/obj/item/slimecross/stabilized/red
|
||||
colour = "red"
|
||||
|
||||
/obj/item/slimecross/stabilized/green
|
||||
colour = "green"
|
||||
|
||||
/obj/item/slimecross/stabilized/pink
|
||||
colour = "pink"
|
||||
|
||||
/obj/item/slimecross/stabilized/gold
|
||||
colour = "gold"
|
||||
|
||||
/obj/item/slimecross/stabilized/oil
|
||||
colour = "oil"
|
||||
|
||||
/obj/item/slimecross/stabilized/black
|
||||
colour = "black"
|
||||
|
||||
/obj/item/slimecross/stabilized/lightpink
|
||||
colour = "light pink"
|
||||
|
||||
/obj/item/slimecross/stabilized/adamantine
|
||||
colour = "adamantine"
|
||||
|
||||
/obj/item/slimecross/stabilized/rainbow
|
||||
colour = "rainbow"
|
||||
var/obj/item/slimecross/regenerative/regencore
|
||||
|
||||
/obj/item/slimecross/stabilized/rainbow/attackby(obj/item/O, mob/user)
|
||||
var/obj/item/slimecross/regenerative/regen = O
|
||||
if(istype(O) && !regencore)
|
||||
to_chat(user, "<span class='notice'>You place the [O] in the [src], prepping the extract for automatic application!</span>")
|
||||
regencore = regen
|
||||
regen.forceMove(src)
|
||||
return
|
||||
return ..()
|
||||
@@ -87,13 +87,13 @@
|
||||
return
|
||||
else if(istype(O, /obj/item/storage/bag) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
|
||||
var/obj/item/storage/P = O
|
||||
var/loaded = 0
|
||||
var/loaded = FALSE
|
||||
for(var/obj/G in P.contents)
|
||||
if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube))
|
||||
loaded = 1
|
||||
loaded = TRUE
|
||||
monkeys++
|
||||
qdel(G)
|
||||
if (loaded)
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.</span>")
|
||||
return
|
||||
else if(istype(O, /obj/item/slimepotion/slime) && (upgradetier & XENOBIO_UPGRADE_SLIMEADV)) // CIT CHANGE - makes giving slimes potions via console require XENOBIO_UPGRADE_SLIMEADV
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/// Slime Extracts ///
|
||||
|
||||
/obj/item/slime_extract
|
||||
@@ -6,7 +5,7 @@
|
||||
desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"."
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "grey slime extract"
|
||||
force = 1
|
||||
force = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
@@ -15,14 +14,26 @@
|
||||
grind_results = list()
|
||||
var/Uses = 1 // uses before it goes inert
|
||||
var/qdel_timer = null // deletion timer, for delayed reactions
|
||||
var/effectmod
|
||||
var/list/activate_reagents = list() //Reagents required for activation
|
||||
var/recurring = FALSE
|
||||
|
||||
/obj/item/slime_extract/examine(mob/user)
|
||||
..()
|
||||
if(Uses > 1)
|
||||
to_chat(user,"It has [Uses] uses remaining.")
|
||||
|
||||
/obj/item/slime_extract/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/slimepotion/enhancer))
|
||||
if(Uses >= 5)
|
||||
if(Uses >= 5 || recurring)
|
||||
to_chat(user, "<span class='warning'>You cannot enhance this extract further!</span>")
|
||||
return ..()
|
||||
to_chat(user, "<span class='notice'>You apply the enhancer to the slime extract. It may now be reused one more time.</span>")
|
||||
Uses++
|
||||
if(O.type == /obj/item/slimepotion/enhancer) //Seriously, why is this defined here...?
|
||||
to_chat(user, "<span class='notice'>You apply the enhancer to the slime extract. It may now be reused one more time.</span>")
|
||||
Uses++
|
||||
if(O.type == /obj/item/slimepotion/enhancer/max)
|
||||
to_chat(user, "<span class='notice'>You dump the maximizer on the slime extract. It can now be used a total of 5 times!</span>")
|
||||
Uses = 5
|
||||
qdel(O)
|
||||
..()
|
||||
|
||||
@@ -39,9 +50,36 @@
|
||||
to_chat(user, "<span class='notice'>Nothing happened... This slime extract cannot be activated this way.</span>")
|
||||
return 0
|
||||
|
||||
//Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract.
|
||||
/obj/item/slime_extract/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
return ..()
|
||||
if(M.stat)
|
||||
to_chat(user, "<span class='warning'>The slime is dead!</span>")
|
||||
return
|
||||
if(!M.is_adult)
|
||||
to_chat(user, "<span class='warning'>The slime must be an adult to cross it's core!</span>")
|
||||
return
|
||||
if(M.effectmod && M.effectmod != effectmod)
|
||||
to_chat(user, "<span class='warning'>The slime is already being crossed with a different extract!</span>")
|
||||
return
|
||||
|
||||
if(!M.effectmod)
|
||||
M.effectmod = effectmod
|
||||
|
||||
M.applied++
|
||||
qdel(src)
|
||||
to_chat(user, "<span class='notice'>You feed the slime [src], [M.applied == 1 ? "starting to mutate its core." : "further mutating its core."]</span>")
|
||||
playsound(M, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
|
||||
if(M.applied >= SLIME_EXTRACT_CROSSING_REQUIRED)
|
||||
M.spawn_corecross()
|
||||
|
||||
/obj/item/slime_extract/grey
|
||||
name = "grey slime extract"
|
||||
icon_state = "grey slime extract"
|
||||
effectmod = "reproductive"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -65,6 +103,8 @@
|
||||
/obj/item/slime_extract/gold
|
||||
name = "gold slime extract"
|
||||
icon_state = "gold slime extract"
|
||||
effectmod = "symbiont"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/gold/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -92,6 +132,8 @@
|
||||
/obj/item/slime_extract/silver
|
||||
name = "silver slime extract"
|
||||
icon_state = "silver slime extract"
|
||||
effectmod = "consuming"
|
||||
activate_reagents = list("plasma","water")
|
||||
|
||||
/obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -115,6 +157,8 @@
|
||||
/obj/item/slime_extract/metal
|
||||
name = "metal slime extract"
|
||||
icon_state = "metal slime extract"
|
||||
effectmod = "industrial"
|
||||
activate_reagents = list("plasma","water")
|
||||
|
||||
/obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -137,6 +181,8 @@
|
||||
/obj/item/slime_extract/purple
|
||||
name = "purple slime extract"
|
||||
icon_state = "purple slime extract"
|
||||
effectmod = "regenerative"
|
||||
activate_reagents = list("blood","plasma")
|
||||
|
||||
/obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -154,6 +200,8 @@
|
||||
/obj/item/slime_extract/darkpurple
|
||||
name = "dark purple slime extract"
|
||||
icon_state = "dark purple slime extract"
|
||||
effectmod = "self-sustaining"
|
||||
activate_reagents = list("plasma")
|
||||
|
||||
/obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -175,6 +223,8 @@
|
||||
/obj/item/slime_extract/orange
|
||||
name = "orange slime extract"
|
||||
icon_state = "orange slime extract"
|
||||
effectmod = "burning"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -193,6 +243,8 @@
|
||||
/obj/item/slime_extract/yellow
|
||||
name = "yellow slime extract"
|
||||
icon_state = "yellow slime extract"
|
||||
effectmod = "charged"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -214,6 +266,8 @@
|
||||
/obj/item/slime_extract/red
|
||||
name = "red slime extract"
|
||||
icon_state = "red slime extract"
|
||||
effectmod = "sanguine"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -232,6 +286,8 @@
|
||||
/obj/item/slime_extract/blue
|
||||
name = "blue slime extract"
|
||||
icon_state = "blue slime extract"
|
||||
effectmod = "stabilized"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -254,6 +310,8 @@
|
||||
/obj/item/slime_extract/darkblue
|
||||
name = "dark blue slime extract"
|
||||
icon_state = "dark blue slime extract"
|
||||
effectmod = "chilling"
|
||||
activate_reagents = list("plasma","water")
|
||||
|
||||
/obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -275,6 +333,8 @@
|
||||
/obj/item/slime_extract/pink
|
||||
name = "pink slime extract"
|
||||
icon_state = "pink slime extract"
|
||||
effectmod = "gentle"
|
||||
activate_reagents = list("blood","plasma")
|
||||
|
||||
/obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -301,6 +361,8 @@
|
||||
/obj/item/slime_extract/green
|
||||
name = "green slime extract"
|
||||
icon_state = "green slime extract"
|
||||
effectmod = "mutative"
|
||||
activate_reagents = list("blood","plasma","radium")
|
||||
|
||||
/obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -323,6 +385,8 @@
|
||||
/obj/item/slime_extract/lightpink
|
||||
name = "light pink slime extract"
|
||||
icon_state = "light pink slime extract"
|
||||
effectmod = "loyal"
|
||||
activate_reagents = list("plasma")
|
||||
|
||||
/obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -345,6 +409,8 @@
|
||||
/obj/item/slime_extract/black
|
||||
name = "black slime extract"
|
||||
icon_state = "black slime extract"
|
||||
effectmod = "transformative"
|
||||
activate_reagents = list("plasma")
|
||||
|
||||
/obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -364,6 +430,8 @@
|
||||
/obj/item/slime_extract/oil
|
||||
name = "oil slime extract"
|
||||
icon_state = "oil slime extract"
|
||||
effectmod = "detonating"
|
||||
activate_reagents = list("blood","plasma")
|
||||
|
||||
/obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -385,6 +453,8 @@
|
||||
/obj/item/slime_extract/adamantine
|
||||
name = "adamantine slime extract"
|
||||
icon_state = "adamantine slime extract"
|
||||
effectmod = "crystalline"
|
||||
activate_reagents = list("plasma")
|
||||
|
||||
/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -412,6 +482,8 @@
|
||||
/obj/item/slime_extract/bluespace
|
||||
name = "bluespace slime extract"
|
||||
icon_state = "bluespace slime extract"
|
||||
effectmod = "warping"
|
||||
activate_reagents = list("blood","plasma")
|
||||
var/teleport_ready = FALSE
|
||||
var/teleport_x = 0
|
||||
var/teleport_y = 0
|
||||
@@ -446,6 +518,8 @@
|
||||
/obj/item/slime_extract/pyrite
|
||||
name = "pyrite slime extract"
|
||||
icon_state = "pyrite slime extract"
|
||||
effectmod = "prismatic"
|
||||
activate_reagents = list("blood","plasma")
|
||||
|
||||
/obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -470,6 +544,8 @@
|
||||
/obj/item/slime_extract/cerulean
|
||||
name = "cerulean slime extract"
|
||||
icon_state = "cerulean slime extract"
|
||||
effectmod = "recurring"
|
||||
activate_reagents = list("blood","plasma")
|
||||
|
||||
/obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -488,6 +564,8 @@
|
||||
/obj/item/slime_extract/sepia
|
||||
name = "sepia slime extract"
|
||||
icon_state = "sepia slime extract"
|
||||
effectmod = "lengthened"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
|
||||
/obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -508,6 +586,8 @@
|
||||
/obj/item/slime_extract/rainbow
|
||||
name = "rainbow slime extract"
|
||||
icon_state = "rainbow slime extract"
|
||||
effectmod = "hyperchromatic"
|
||||
activate_reagents = list("blood","plasma","lesser plasma","slimejelly","holy water and uranium") //Curse this snowflake reagent list.
|
||||
|
||||
/obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
|
||||
Reference in New Issue
Block a user