diff --git a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
index 92c484f9dcf..7d2ac8f97d6 100644
--- a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
@@ -11,12 +11,12 @@
movement_cooldown = 3
appearance_flags = RADIATION_GLOWS
shock_resist = 0 // Lets not be immune to zaps.
- //is_adult = TRUE
- //harmless = TRUE
- friendly = list("nuzzles", "glomps", "snuggles", "hugs") // lets be cute :3
+ friendly = list("nuzzles", "glomps", "snuggles", "cuddles", "squishes") // lets be cute :3
melee_damage_upper = 0
melee_damage_lower = 0
player_msg = "You're a little squisher! Your cuteness level has increased tenfold."
+ heat_damage_per_tick = 20 // Hot and cold are bad, but cold is AS bad for prommies as it is for slimes.
+ cold_damage_per_tick = 20
var/mob/living/carbon/human/humanform
var/datum/modifier/healing
@@ -25,7 +25,19 @@
var/obj/prev_right_hand
var/human_brute = 0
var/human_burn = 0
+ var/is_wide = FALSE
+ var/list/default_emotes = list(
+ /decl/emote/audible/squish,
+ /decl/emote/audible/chirp,
+ /decl/emote/visible/bounce,
+ /decl/emote/visible/jiggle,
+ /decl/emote/visible/lightup,
+ /decl/emote/visible/vibrate,
+ /decl/emote/visible/flip,
+ /decl/emote/visible/spin,
+ /decl/emote/visible/floorspin
+ )
/mob/living/simple_mob/slime/promethean/Initialize(mapload, null)
//verbs -= /mob/living/proc/ventcrawl
verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_blobform
@@ -33,17 +45,33 @@
verbs += /mob/living/proc/hide
verbs += /mob/living/simple_mob/proc/animal_nom
verbs += /mob/living/proc/shred_limb
+ verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_expand
+ verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_select_colour
+ verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_shine
update_mood()
glow_color = color
handle_light()
update_icon()
return ..()
+/mob/living/simple_mob/slime/promethean/update_icon()
+ icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_wide ? "adult" : "baby"][""]"
+ ..()
+
+/mob/living/simple_mob/slime/promethean/Destroy()
+ humanform = null
+ vore_organs = null
+ vore_selected = null
+ return ..()
+
/mob/living/simple_mob/slime/promethean/Stat()
..()
if(humanform)
humanform.species.Stat(humanform)
+/mob/living/simple_mob/slime/promethean/handle_special() // Should disable default slime healing, we'll use nutrition based heals instead.
+ return
+
//Constructor allows passing the human to sync damages
/mob/living/simple_mob/slime/promethean/New(var/newloc, var/mob/living/carbon/human/H)
..()
@@ -60,10 +88,6 @@
to_chat(src,"You can't change forms while inside something.")
return
- var/panel_was_up = FALSE
- if(client?.statpanel == "Abilities")
- panel_was_up = TRUE
-
handle_grasp() //It's possible to blob out before some key parts of the life loop. This results in things getting dropped at null. TODO: Fix the code so this can be done better.
remove_micros(src, src) //Living things don't fare well in roblobs.
if(buckled)
@@ -127,7 +151,8 @@
//unEquip(new_hat)
new_hat.forceMove(src)
blob.ckey = ckey
- //blob.name = name
+ blob.name = name
+ blob.nutrition = nutrition
blob.color = rgb(r_skin, g_skin, b_skin)
blob.mood = ":3"
@@ -143,7 +168,7 @@
moveToNullspace()
//Message
- blob.visible_message("[src.name] collapses into a gooey blob!")
+ blob.visible_message("[src.name] squishes into their true form!")
//Transfer vore organs
blob.vore_organs = vore_organs
@@ -155,9 +180,6 @@
//We can still speak our languages!
blob.languages = languages.Copy()
- if(panel_was_up)
- client?.statpanel = "Abilities"
-
//Return our blob in case someone wants it
return blob
@@ -165,10 +187,6 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p
if(!istype(blob))
return
- var/panel_was_up = FALSE
- if(client?.statpanel == "Abilities")
- panel_was_up = TRUE
-
if(!force && !isturf(blob.loc))
to_chat(blob,"You can't change forms while inside something.")
return
@@ -183,7 +201,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p
stop_pulling()
//Message
- blob.visible_message("[src.name] reshapes into a humanoid appearance!")
+ blob.visible_message("[src.name] pulls together, forming a humanoid shape!")
//Record where they should go
var/atom/reform_spot = blob.drop_location()
@@ -198,18 +216,20 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p
ckey = blob.ckey
var/obj/item/hat = blob.hat
blob.drop_hat()
- drop_from_inventory(hat)
+ drop_from_inventory(hat) // Hat me baby
equip_to_slot_if_possible(hat, slot_head)
+ nutrition = blob.nutrition // food good
temporary_form = null
+
+ shapeshifter_set_colour(blob.color)
+
update_icon()
//Transfer vore organs
- to_chat(src,"Attempting to get vore bellies back.")
vore_selected = blob.vore_selected
for(var/obj/belly/B as anything in blob.vore_organs)
B.forceMove(src)
B.owner = src
- to_chat(src,"[B]'s owner is [src].")
//vore_organs.Cut()
if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming.
@@ -220,9 +240,6 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p
//Get rid of friend blob
qdel(blob)
- if(panel_was_up)
- client?.statpanel = "Abilities"
-
//Return ourselves in case someone wants it
return src
@@ -365,9 +382,64 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p
if(humanform.temporary_form.stat)
to_chat(src,"You can only do this while not stunned.")
else
- to_chat(src,"Attempting to revert!")
humanform.prommie_outofblob(src)
+/mob/living/simple_mob/slime/promethean/proc/toggle_expand()
+ set name = "Toggle Width"
+ set desc = "Switch between smole and lorge."
+ set category = "Abilities"
+ set hidden = FALSE
+
+ if(stat || world.time < last_special)
+ return
+
+ last_special = world.time + 50
+
+ if(is_wide)
+ is_wide = FALSE
+ src.visible_message("[src.name] pulls together, compacting themselves into a small ball!")
+ update_icon()
+ else
+ is_wide = TRUE
+ src.visible_message("[src.name] flows outwards, their goop expanding!")
+ update_icon()
+
+/mob/living/simple_mob/slime/promethean/proc/toggle_shine()
+ set name = "Toggle Shine"
+ set desc = "Shine on you crazy diamond."
+ set category = "Abilities"
+ set hidden = FALSE
+
+ if(stat || world.time < last_special)
+ return
+
+ last_special = world.time + 50
+
+ if(shiny)
+ shiny = FALSE
+ src.visible_message("[src.name] dulls their shine, becoming more translucent.")
+ update_icon()
+ else
+ shiny = TRUE
+ src.visible_message("[src.name] glistens and sparkles, shining brilliantly.")
+ update_icon()
+
+/mob/living/simple_mob/slime/promethean/proc/prommie_select_colour()
+
+ set name = "Select Body Colour"
+ set category = "Abilities"
+
+ if(stat || world.time < last_special)
+ return
+
+ last_special = world.time + 50
+
+ var/new_skin = input(usr, "Please select a new body color.", "Shapeshifter Colour", color) as null|color
+ if(!new_skin)
+ return
+ color = new_skin
+ update_icon()
+
/mob/living/simple_mob/slime/promethean/get_description_interaction()
return
@@ -386,4 +458,9 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p
..()
*/
/mob/living/simple_mob/slime/promethean/init_vore()
- return
\ No newline at end of file
+ return
+
+/mob/living/simple_mob/slime/promethean/get_available_emotes()
+ var/list/fulllist = _slime_default_emotes
+ fulllist += default_emotes
+ return fulllist
\ No newline at end of file