Files
VOREStation/code/modules/xenobio/items/slime_objects.dm
Cameron Lennox c42610c5ae Have you bingled that (#17407)
* Initial wiki system

* wiki organization and spoilers

* hide belly chems

* move ads to tgui

* add search

* .

* load screen

* error screen

* 8

* center

* .

* .

* make this more realistic

* tgui errro col

* move search to top

* .

* non NT theme

* logo to common

* base custom theme

* .

* wip refactor

* almost halfway

* reworked wiki data

* easy fix

* get data fix

* Material Page in tgui

* catch null supply points

* .

* forward crash

* reset pages

* .

* canvas prep

* fix icon stacking

* .

* colored outlined images

* fix sm datum

* fix material names

* subType prep

* only on crash

* fix null crash

* .

* fix solgov

* clean hiding

* .

* implement catalog page

* .

* particle smasher page

* I'm lazy

* unfuck some sins

* ore page

* botany page

* allergen list

* allergen returns null too

* slime injection var

* slime core data

* fixed warning

* wip

* proper data list for chems

* pass is_slime as null

* chems

* split that

* .

* .

* .

* .

* donation for bingle, some cleanup

* return types

* partially colord icons for chemistry

* .

* more sillies

* donation page

* thaler

* needs some variation

* .

* this will crash until implemented

* handle it

* fix that

* dismiss donation banner button

* .

* fix that

* donating procs

* donation stuff for comp

* -

* drink glass for drinks

* illegal iconstate pass

* fixes

* .

* nuke drink fix

* .

* .

* .

* Drink reagent fix

* more cleanup

* adjust

* .

* simple food

* .

* food list

* sending nulls, removed flavor from recipes

* .

* .

* get_donation_current added

* .

* missing key

* .

* duped recipes fixed

* .

* .

* wiki food reagent recipes

* double list add

* properly forbid remaining bad reagent

* hide this too

* stacky

* enable eslint const

* fix typing

* update that

* use proper donation proc

* printing fixes

* grinding

* .

* beaker fill volume

* plant ore and mat grinding results

* duped recipes fixed, unit test tweak

* yes this is terrible

* .

* .

* .

* chem analyzer tgui mode, some subsystem changes to support it

* redoce

* .

* ,

* .

* small fixes, missing reagent volume

* push

* sort

* catalog entries unlocked by explo

* new chem stuff

* .

* fix byond code

* fix scroll tracking

* comment

* alphabetical

* also this

* .

* fallback icon

* .

* ...

* rel path

* that too

* to defines

* organ to define

* .

* .

* .

---------

Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
2025-03-28 19:00:50 +01:00

221 lines
7.4 KiB
Plaintext

// Slime cube lives here. Makes Prometheans.
/obj/item/slime_cube
name = "slimy monkey cube"
desc = "Wonder what might come out of this."
icon = 'icons/mob/slime2.dmi'
icon_state = "slime cube"
description_info = "Use in your hand to attempt to create a Promethean. It functions similarly to a positronic brain, in that a ghost is needed to become the Promethean."
var/searching = 0
/obj/item/slime_cube/attack_self(mob/user as mob)
if(!searching)
to_chat(user, span_warning("You stare at the slimy cube, watching as some activity occurs."))
icon_state = "slime cube active"
searching = 1
request_player()
spawn(60 SECONDS)
reset_search()
// Sometime down the road it would be great to make all of these 'ask ghosts if they want to be X' procs into a generic datum.
/obj/item/slime_cube/proc/request_player()
for(var/mob/observer/dead/O in player_list)
if(!O.MayRespawn())
continue
if(O.client)
if(O.client.prefs.be_special & BE_ALIEN)
question(O.client)
/obj/item/slime_cube/proc/question(var/client/C)
spawn(0)
if(!C)
return
var/response = tgui_alert(C, "Someone is requesting a soul for a promethean. Would you like to play as one?", "Promethean request", list("Yes", "No", "Never for this round"))
if(response == "Yes")
response = tgui_alert(C, "Are you sure you want to play as a promethean?", "Promethean request", list("Yes", "No"))
if(!C || 2 == searching)
return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
if(response == "Yes")
transfer_personality(C.mob)
else if(response == "Never for this round")
C.prefs.be_special ^= BE_ALIEN
/obj/item/slime_cube/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
icon_state = "slime cube"
if(searching == 1)
searching = 0
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
M.show_message(span_warning("The activity in the cube dies down. Maybe it will spark another time."))
/obj/item/slime_cube/proc/transfer_personality(var/mob/candidate)
announce_ghost_joinleave(candidate, 0, "They are a promethean now.")
src.searching = 2
var/mob/living/carbon/human/S = new(get_turf(src))
S.client = candidate.client
to_chat(S, span_infoplain(span_bold("You are a promethean, brought into existence on [station_name()].")))
S.mind.assigned_role = JOB_PROMETHEAN
S.set_species("Promethean")
S.shapeshifter_set_colour("#2398FF")
visible_message(span_warning("The monkey cube suddenly takes the shape of a humanoid!"))
var/newname = sanitize(tgui_input_text(S, "You are a Promethean. Would you like to change your name to something else?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(newname)
S.real_name = newname
S.name = S.real_name
S.dna.real_name = newname
if(S.mind)
S.mind.name = S.name
qdel(src)
// More or less functionally identical to the telecrystal tele.
/obj/item/slime_crystal
name = "lesser slime cystal"
desc = "A small, gooy crystal."
description_info = "This will teleport you to a mostly 'safe' tile when used in-hand, consuming the slime crystal. \
It can also teleport someone else, by throwing it at them or attacking them with it."
icon = 'icons/obj/objects.dmi'
icon_state = "slime_crystal_small"
w_class = ITEMSIZE_TINY
origin_tech = list(TECH_MAGNET = 6, TECH_BLUESPACE = 3)
force = 1 //Needs a token force to ensure you can attack because for some reason you can't attack with 0 force things
/obj/item/slime_crystal/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
target.visible_message(span_warning("\The [target] has been teleported with \the [src] by \the [user]!"))
safe_blink(target, 14)
qdel(src)
/obj/item/slime_crystal/attack_self(mob/user)
user.visible_message(span_warning("\The [user] teleports themselves with \the [src]!"))
safe_blink(user, 14)
qdel(src)
/obj/item/slime_crystal/throw_impact(atom/movable/AM)
if(!istype(AM))
return
if(AM.anchored)
return
AM.visible_message(span_warning("\The [AM] has been teleported with \the [src]!"))
safe_blink(AM, 14)
qdel(src)
/obj/item/disposable_teleporter/slime
name = "greater slime crystal"
desc = "A larger, gooier crystal."
description_info = "This will teleport you to a specific area once, when used in-hand."
icon = 'icons/obj/objects.dmi'
icon_state = "slime_crystal_large"
uses = 1
w_class = ITEMSIZE_SMALL
origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 4)
// Very filling food.
/obj/item/reagent_containers/food/snacks/slime
name = "slimy clump"
desc = "A glob of slime that is thick as honey. For the brave " + JOB_XENOBIOLOGIST + "."
icon_state = "honeycomb"
filling_color = "#FFBB00"
center_of_mass_x = 17
center_of_mass_y = 10
nutriment_amt = 25 // Very filling.
nutriment_desc = list("slime" = 10, "sweetness" = 10, REAGENT_ID_BLISS = 5)
/obj/item/reagent_containers/food/snacks/slime/Initialize(mapload)
. = ..()
bitesize = 5
//Flashlight
/obj/item/flashlight/slime
gender = PLURAL
name = "glowing slime extract"
desc = "A slimy ball that appears to be glowing from bioluminesence."
icon = 'icons/obj/lighting.dmi'
icon_state = "floor1" //not a slime extract sprite but... something close enough!
item_state = "slime"
light_color = "#FFF423"
w_class = ITEMSIZE_TINY
light_range = 6
on = 1 //Bio-luminesence has one setting, on.
power_use = 0
/obj/item/flashlight/slime/Initialize(mapload)
. = ..()
set_light(light_range, light_power, light_color)
/obj/item/flashlight/slime/update_brightness()
return
/obj/item/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle.
//Radiation Emitter
/obj/item/slime_irradiator
name = "glowing slime extract"
desc = "A slimy ball that appears to be glowing from bioluminesence."
icon = 'icons/mob/slimes_vr.dmi'
icon_state = "irradiator"
light_color = "#00FF00"
light_power = 0.4
light_range = 2
w_class = ITEMSIZE_TINY
/obj/item/slime_irradiator/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
set_light(light_range, light_power, light_color)
/obj/item/slime_irradiator/process()
SSradiation.radiate(src, 5)
/obj/item/slime_irradiator/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
//BS Pouch
/obj/item/storage/backpack/holding/slime
name = "bluespace slime pouch"
desc = "A slimy pouch that opens into a localized pocket of bluespace."
icon_state = "slimepouch"
//Slime Chems
/datum/reagent/myelamine/slime
name = "Agent A"
id = REAGENT_ID_SLIMEBLEEDFIXER
description = "A slimy liquid which appears to rapidly clot internal hemorrhages by increasing the effectiveness of platelets at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/osteodaxon/slime
name = "Agent B"
id = REAGENT_ID_SLIMEBONEFIXER
description = "A slimy liquid which can be used to heal bone fractures at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/peridaxon/slime
name = "Agent C"
id = REAGENT_ID_SLIMEORGANFIXER
description = "A slimy liquid which is used to encourage recovery of internal organs and nervous systems in low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/nutriment/glucose/slime
name = "Slime Goop"
id = "slime_goop"
description = "A slimy liquid, with very compelling smell. Extremely nutritious."
color = "#FABA3A"
nutriment_factor = 30
taste_description = "slimy nectar"
wiki_flag = WIKI_FOOD|WIKI_SPOILER