From e633b1b715358b432343aa4661ffe9d31c0209e4 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 00:16:05 -0400 Subject: [PATCH 01/22] Initial --- .../human/species/station/prometheans_vr.dm | 28 ++++ .../human/species/station/prommie_blob.dm | 140 ++++++++++++++++++ vorestation.dme | 3 +- 3 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 code/modules/mob/living/carbon/human/species/station/prommie_blob.dm diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index f2b233cccf5..c7562307894 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -32,6 +32,34 @@ /mob/living/carbon/human/proc/shapeshifter_select_wings, /mob/living/carbon/human/proc/shapeshifter_select_tail, /mob/living/carbon/human/proc/shapeshifter_select_ears, + /mob/living/carbon/human/proc/prommie_blobform, /mob/living/proc/set_size, /mob/living/carbon/human/proc/promethean_select_opaqueness, ) + +/mob/living/carbon/human/proc/prommie_blobform() + set name = "Toggle Blobform" + set desc = "Switch between amorphous and humanoid forms." + set category = "Abilities" + set hidden = TRUE + + var/atom/movable/to_locate = temporary_form || src + if(!isturf(to_locate.loc)) + to_chat(to_locate,"You need more space to perform this action!") + return + + //Blob form + if(temporary_form) + if(health < maxHealth*0.5) + to_chat(temporary_form,"You need to regenerate more nanites first!") + else if(temporary_form.stat) + to_chat(temporary_form,"You can only do this while not stunned.") + else + prommie_outofblob(temporary_form) + + //Human form + else if(stat) + to_chat(src,"You can only do this while not stunned.") + return + else + prommie_intoblob() \ No newline at end of file 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 new file mode 100644 index 00000000000..cdd39ac7ab4 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm @@ -0,0 +1,140 @@ +// Prommies are slimes, lets make them a subtype of slimes. +/mob/living/simple_mob/slime/promethean + desc = "This slime changes colors constantly." + color = null // Uses a special icon_state. + slime_color = "rainbow" + unity = TRUE + water_resist = 100 // Lets not kill the prommies + + description_info = "It's a little squisher! Lil' Blurble! Small wurble! It's a flowing blob of goop, with a spark of intelligence!" + + var/mob/living/carbon/human/humanform + var/datum/modifier/healing + + var/obj/prev_left_hand + var/obj/prev_right_hand + +// Helpers - Unsafe, WILL perform change. +/mob/living/carbon/human/proc/prommie_intoblob(force) + if(!force && !isturf(loc)) + to_chat(src,"You can't change forms while inside something.") + return + + 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) + buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + + //Record where they should go + var/atom/creation_spot = drop_location() + + //Create our new blob + var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) + + //Drop all our things + var/list/things_to_drop = contents.Copy() + var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. + + things_to_drop -= things_to_not_drop //Crunch the lists + things_to_drop -= organs //Mah armbs + things_to_drop -= internal_organs //Mah sqeedily spooch + + for(var/obj/item/I in things_to_drop) //rip hoarders + drop_from_inventory(I) + + if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way + var/obj/item/clothing/uniform = w_uniform + if(LAZYLEN(uniform.accessories)) + for(var/obj/item/clothing/accessory/A in uniform.accessories) + if(is_type_in_list(A, disallowed_protean_accessories)) + uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages + + //Size update + blob.transform = matrix()*size_multiplier + blob.size_multiplier = size_multiplier + + if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled. + if(r_hand) blob.prev_right_hand = r_hand + + //Put our owner in it (don't transfer var/mind) + blob.ckey = ckey + temporary_form = blob + + //Mail them to nullspace + moveToNullspace() + + //Message + blob.visible_message("[src.name] collapses into a gooey blob!") + + //Transfer vore organs + blob.vore_organs = vore_organs + blob.vore_selected = vore_selected + for(var/obj/belly/B as anything in vore_organs) + B.forceMove(blob) + B.owner = blob + + //We can still speak our languages! + blob.languages = languages.Copy() + + //Return our blob in case someone wants it + return blob + +mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) + if(!istype(blob)) + return + + if(!force && !isturf(blob.loc)) + to_chat(blob,"You can't change forms while inside something.") + return + + if(buckled) + buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + + //Stop healing if we are + if(blob.healing) + blob.healing.expire() + + //Message + blob.visible_message("[src.name] reshapes into a humanoid appearance!") + + //Record where they should go + var/atom/reform_spot = blob.drop_location() + + //Size update + resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE) + + //Move them back where the blob was + forceMove(reform_spot) + + //Put our owner in it (don't transfer var/mind) + ckey = blob.ckey + temporary_form = null + + //Transfer vore organs + vore_selected = blob.vore_selected + for(var/obj/belly/B as anything in blob.vore_organs) + B.forceMove(src) + B.owner = src + + if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. + if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) + + Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. + + //Get rid of friend blob + qdel(blob) + + //Return ourselves in case someone wants it + return src \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index ec74fd632c5..6ae5acf3e24 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2841,6 +2841,7 @@ #include "code\modules\mob\living\carbon\human\species\station\monkey_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\prometheans.dm" #include "code\modules\mob\living\carbon\human\species\station\prometheans_vr.dm" +#include "code\modules\mob\living\carbon\human\species\station\prommie_blob.dm" #include "code\modules\mob\living\carbon\human\species\station\station.dm" #include "code\modules\mob\living\carbon\human\species\station\station_special_abilities_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\station_special_vr.dm" @@ -4099,7 +4100,6 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" -#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4109,5 +4109,6 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" +#include "maps\virgo_minitest\virgo_minitest.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From abfb6d2b62eb5f73ec8ca18d21fbb3625050294b Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 01:21:05 -0400 Subject: [PATCH 02/22] Stuff --- .../human/species/station/prometheans_vr.dm | 2 +- .../human/species/station/prommie_blob.dm | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index c7562307894..f040c377758 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -41,7 +41,7 @@ set name = "Toggle Blobform" set desc = "Switch between amorphous and humanoid forms." set category = "Abilities" - set hidden = TRUE + set hidden = FALSE var/atom/movable/to_locate = temporary_form || src if(!isturf(to_locate.loc)) 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 cdd39ac7ab4..41628145f61 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 @@ -5,6 +5,8 @@ slime_color = "rainbow" unity = TRUE water_resist = 100 // Lets not kill the prommies + can_buckle = TRUE + cores = 0 description_info = "It's a little squisher! Lil' Blurble! Small wurble! It's a flowing blob of goop, with a spark of intelligence!" @@ -14,6 +16,28 @@ var/obj/prev_left_hand var/obj/prev_right_hand +/mob/living/simple_mob/slime/promethean/Initialize() + verbs |= /mob/living/proc/ventcrawl + verbs += /mob/living/carbon/human/proc/prommie_blobform + verbs += /mob/living/proc/set_size + verbs += /mob/living/proc/hide + update_mood() + glow_color = color + handle_light() + update_icon() + return + +//Constructor allows passing the human to sync damages +/mob/living/simple_mob/slime/promethean/New(var/newloc, var/mob/living/carbon/human/H) + ..() + if(H) + humanform = H + updatehealth() + + verbs |= /mob/living/proc/hide + else + update_icon() + // Helpers - Unsafe, WILL perform change. /mob/living/carbon/human/proc/prommie_intoblob(force) if(!force && !isturf(loc)) @@ -64,6 +88,9 @@ //Put our owner in it (don't transfer var/mind) blob.ckey = ckey + blob.name = name + blob.color = color + blob.mood = ":3" temporary_form = blob //Mail them to nullspace @@ -120,6 +147,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p //Put our owner in it (don't transfer var/mind) ckey = blob.ckey + color = blob.color temporary_form = null //Transfer vore organs From 890e03f17db0cf755f40c2a609c49663d65dacfe Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 02:12:33 -0400 Subject: [PATCH 03/22] Update prommie_blob.dm --- .../living/carbon/human/species/station/prommie_blob.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 41628145f61..12fbe1807f2 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 @@ -25,7 +25,12 @@ glow_color = color handle_light() update_icon() - return + return ..() + +/mob/living/simple_mob/slime/promethean/Stat() + ..() + if(humanform) + humanform.species.Stat(humanform) //Constructor allows passing the human to sync damages /mob/living/simple_mob/slime/promethean/New(var/newloc, var/mob/living/carbon/human/H) @@ -89,7 +94,7 @@ //Put our owner in it (don't transfer var/mind) blob.ckey = ckey blob.name = name - blob.color = color + blob.color = rgb(r_skin, g_skin, b_skin) blob.mood = ":3" temporary_form = blob From b378548ec3fae88d544265af7650bb6fcd79531f Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 02:19:26 -0400 Subject: [PATCH 04/22] Update prommie_blob.dm --- .../mob/living/carbon/human/species/station/prommie_blob.dm | 1 + 1 file changed, 1 insertion(+) 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 12fbe1807f2..62004eb7562 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 @@ -7,6 +7,7 @@ water_resist = 100 // Lets not kill the prommies can_buckle = TRUE cores = 0 + movement_cooldown = 3 description_info = "It's a little squisher! Lil' Blurble! Small wurble! It's a flowing blob of goop, with a spark of intelligence!" From 31d5b7a21708efce9061f3eda901035c39b14f70 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 14:27:35 -0400 Subject: [PATCH 05/22] Blobs can now humanoid --- .../human/species/station/prometheans_vr.dm | 23 ++- .../human/species/station/prommie_blob.dm | 163 +++++++++++++++++- 2 files changed, 177 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index f040c377758..66543b70a80 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -47,19 +47,30 @@ if(!isturf(to_locate.loc)) to_chat(to_locate,"You need more space to perform this action!") return - + /* //Blob form if(temporary_form) - if(health < maxHealth*0.5) - to_chat(temporary_form,"You need to regenerate more nanites first!") - else if(temporary_form.stat) + if(temporary_form.stat) to_chat(temporary_form,"You can only do this while not stunned.") else prommie_outofblob(temporary_form) - + */ //Human form else if(stat) to_chat(src,"You can only do this while not stunned.") return else - prommie_intoblob() \ No newline at end of file + prommie_intoblob() + +/datum/species/shapeshifter/promethean/handle_death(var/mob/living/carbon/human/H) + if(!H) + return // Iono! + + if(H.temporary_form) + H.forceMove(H.temporary_form.drop_location()) + H.ckey = H.temporary_form.ckey + QDEL_NULL(H.temporary_form) + + spawn(1) + if(H) + H.gib() \ No newline at end of file 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 62004eb7562..088d6866205 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 @@ -8,6 +8,7 @@ can_buckle = TRUE cores = 0 movement_cooldown = 3 + appearance_flags = RADIATION_GLOWS description_info = "It's a little squisher! Lil' Blurble! Small wurble! It's a flowing blob of goop, with a spark of intelligence!" @@ -16,10 +17,12 @@ var/obj/prev_left_hand var/obj/prev_right_hand + var/human_brute = 0 + var/human_burn = 0 /mob/living/simple_mob/slime/promethean/Initialize() - verbs |= /mob/living/proc/ventcrawl - verbs += /mob/living/carbon/human/proc/prommie_blobform + verbs -= /mob/living/proc/ventcrawl + verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_blobform verbs += /mob/living/proc/set_size verbs += /mob/living/proc/hide update_mood() @@ -97,6 +100,7 @@ blob.name = name blob.color = rgb(r_skin, g_skin, b_skin) blob.mood = ":3" + blob.update_icon() temporary_form = blob //Mail them to nullspace @@ -171,4 +175,157 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p qdel(blob) //Return ourselves in case someone wants it - return src \ No newline at end of file + return src + +/mob/living/simple_mob/slime/promethean/updatehealth() + if(!humanform) + return ..() + + //Set the max + maxHealth = humanform.getMaxHealth()*2 //HUMANS, and their 'double health', bleh. + //Set us to their health, but, human health ignores robolimbs so we do it 'the hard way' + human_brute = humanform.getActualBruteLoss() + human_burn = humanform.getActualFireLoss() + health = maxHealth - humanform.getOxyLoss() - humanform.getToxLoss() - humanform.getCloneLoss() - human_brute - human_burn + + //Alive, becoming dead + if((stat < DEAD) && (health <= 0)) + death() + + //Overhealth + if(health > getMaxHealth()) + health = getMaxHealth() + + //Grab any other interesting values + confused = humanform.confused + radiation = humanform.radiation + paralysis = humanform.paralysis + + //Update our hud if we have one + if(healths) + if(stat != DEAD) + var/heal_per = (health / getMaxHealth()) * 100 + switch(heal_per) + if(100 to INFINITY) + healths.icon_state = "health0" + if(80 to 100) + healths.icon_state = "health1" + if(60 to 80) + healths.icon_state = "health2" + if(40 to 60) + healths.icon_state = "health3" + if(20 to 40) + healths.icon_state = "health4" + if(0 to 20) + healths.icon_state = "health5" + else + healths.icon_state = "health6" + else + healths.icon_state = "health7" + +// All the damage and such to the blob translates to the human +/mob/living/simple_mob/slime/promethean/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) + if(humanform) + return humanform.apply_effect(effect, effecttype, blocked, check_protection) + else + return ..() + +/mob/living/simple_mob/slime/promethean/adjustBruteLoss(var/amount,var/include_robo) + amount *= 1.5 + if(humanform) + return humanform.adjustBruteLoss(amount) + else + return ..() + +/mob/living/simple_mob/slime/promethean/adjustFireLoss(var/amount,var/include_robo) + amount *= 1.5 + if(humanform) + return humanform.adjustFireLoss(amount) + else + return ..() + +/mob/living/simple_mob/slime/promethean/adjustToxLoss(amount) + if(humanform) + return humanform.adjustToxLoss(amount) + else + return ..() + +/mob/living/simple_mob/slime/promethean/adjustOxyLoss(amount) + if(humanform) + return humanform.adjustOxyLoss(amount) + else + return ..() + +/mob/living/simple_mob/slime/promethean/adjustHalLoss(amount) + if(humanform) + return humanform.adjustHalLoss(amount) + else + return ..() + +/mob/living/simple_mob/slime/promethean/adjustCloneLoss(amount) + if(humanform) + return humanform.adjustCloneLoss(amount) + else + return ..() + +/mob/living/simple_mob/slime/promethean/ex_act(severity) + if(humanform) + return humanform.ex_act(severity) + else + return ..() + +/mob/living/simple_mob/slime/promethean/rad_act(severity) + if(humanform) + return humanform.ex_act(severity) + else + return ..() + +/mob/living/simple_mob/slime/promethean/bullet_act(obj/item/projectile/P) + if(humanform) + return humanform.bullet_act(P) + else + return ..() + +/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!") + if(humanform) + humanform.death(gibbed, deathmessage) + else + animate(src, alpha = 0, time = 2 SECONDS) + sleep(2 SECONDS) + + if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart + qdel(src) + +/mob/living/simple_mob/slime/promethean/proc/prommie_blobform() + set name = "Toggle Blobform" + set desc = "Switch between amorphous and humanoid forms." + set category = "Abilities" + set hidden = FALSE + + to_chat(src,"Blob form attepted to revert!") + var/atom/movable/to_locate = src + if(!isturf(to_locate.loc)) + to_chat(src,"You need more space to perform this action!") + return + + //Blob form + if(!ishuman(src)) + to_chat(src,"They are a blob!") + 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) + +/datum/species/shapeshifter/promethean/handle_death(var/mob/living/carbon/human/H) + if(!H) + return // Iono! + + if(H.temporary_form) + H.forceMove(H.temporary_form.drop_location()) + H.ckey = H.temporary_form.ckey + QDEL_NULL(H.temporary_form) + + spawn(1) + if(H) + H.gib() \ No newline at end of file From f0319310306011329022a8463d80b681fe128d0c Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 17:05:29 -0400 Subject: [PATCH 06/22] Update prommie_blob.dm --- .../human/species/station/prommie_blob.dm | 83 +++++++++++++------ 1 file changed, 56 insertions(+), 27 deletions(-) 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 088d6866205..ff587868205 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 @@ -1,6 +1,7 @@ // Prommies are slimes, lets make them a subtype of slimes. -/mob/living/simple_mob/slime/promethean - desc = "This slime changes colors constantly." +/mob/living/simple_mob/slime/xenobio/promethean + desc = "A promethean expressing their true form." + //ai_holder_type = null color = null // Uses a special icon_state. slime_color = "rainbow" unity = TRUE @@ -9,8 +10,9 @@ cores = 0 movement_cooldown = 3 appearance_flags = RADIATION_GLOWS - - description_info = "It's a little squisher! Lil' Blurble! Small wurble! It's a flowing blob of goop, with a spark of intelligence!" + shock_resist = 0 // Lets not be immune to zaps. + is_adult = TRUE + harmless = TRUE var/mob/living/carbon/human/humanform var/datum/modifier/healing @@ -20,9 +22,9 @@ var/human_brute = 0 var/human_burn = 0 -/mob/living/simple_mob/slime/promethean/Initialize() - verbs -= /mob/living/proc/ventcrawl - verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_blobform +/mob/living/simple_mob/slime/xenobio/promethean/Initialize() + //verbs -= /mob/living/proc/ventcrawl + verbs += /mob/living/simple_mob/slime/xenobio/promethean/proc/prommie_blobform verbs += /mob/living/proc/set_size verbs += /mob/living/proc/hide update_mood() @@ -31,19 +33,19 @@ update_icon() return ..() -/mob/living/simple_mob/slime/promethean/Stat() +/mob/living/simple_mob/slime/xenobio/promethean/Stat() ..() if(humanform) humanform.species.Stat(humanform) //Constructor allows passing the human to sync damages -/mob/living/simple_mob/slime/promethean/New(var/newloc, var/mob/living/carbon/human/H) +/mob/living/simple_mob/slime/xenobio/promethean/New(var/newloc, var/mob/living/carbon/human/H) ..() if(H) humanform = H updatehealth() - verbs |= /mob/living/proc/hide + verbs += /mob/living/proc/hide else update_icon() @@ -68,7 +70,7 @@ var/atom/creation_spot = drop_location() //Create our new blob - var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) + var/mob/living/simple_mob/slime/xenobio/promethean/blob = new(creation_spot,src) //Drop all our things var/list/things_to_drop = contents.Copy() @@ -96,11 +98,18 @@ if(r_hand) blob.prev_right_hand = r_hand //Put our owner in it (don't transfer var/mind) + qdel(blob.ai_holder) + blob.ai_holder = null blob.ckey = ckey blob.name = name blob.color = rgb(r_skin, g_skin, b_skin) + //blob.pacify() + //blob.make_adult() blob.mood = ":3" blob.update_icon() + blob.verbs -= /mob/living/proc/ventcrawl + blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/evolve + blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/reproduce temporary_form = blob //Mail them to nullspace @@ -122,7 +131,7 @@ //Return our blob in case someone wants it return blob -mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) +mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/xenobio/promethean/blob, force) if(!istype(blob)) return @@ -157,7 +166,6 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p //Put our owner in it (don't transfer var/mind) ckey = blob.ckey - color = blob.color temporary_form = null //Transfer vore organs @@ -177,7 +185,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p //Return ourselves in case someone wants it return src -/mob/living/simple_mob/slime/promethean/updatehealth() +/mob/living/simple_mob/slime/xenobio/promethean/updatehealth() if(!humanform) return ..() @@ -224,69 +232,69 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p healths.icon_state = "health7" // All the damage and such to the blob translates to the human -/mob/living/simple_mob/slime/promethean/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) +/mob/living/simple_mob/slime/xenobio/promethean/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) if(humanform) return humanform.apply_effect(effect, effecttype, blocked, check_protection) else return ..() -/mob/living/simple_mob/slime/promethean/adjustBruteLoss(var/amount,var/include_robo) +/mob/living/simple_mob/slime/xenobio/promethean/adjustBruteLoss(var/amount,var/include_robo) amount *= 1.5 if(humanform) return humanform.adjustBruteLoss(amount) else return ..() -/mob/living/simple_mob/slime/promethean/adjustFireLoss(var/amount,var/include_robo) +/mob/living/simple_mob/slime/xenobio/promethean/adjustFireLoss(var/amount,var/include_robo) amount *= 1.5 if(humanform) return humanform.adjustFireLoss(amount) else return ..() -/mob/living/simple_mob/slime/promethean/adjustToxLoss(amount) +/mob/living/simple_mob/slime/xenobio/promethean/adjustToxLoss(amount) if(humanform) return humanform.adjustToxLoss(amount) else return ..() -/mob/living/simple_mob/slime/promethean/adjustOxyLoss(amount) +/mob/living/simple_mob/slime/xenobio/promethean/adjustOxyLoss(amount) if(humanform) return humanform.adjustOxyLoss(amount) else return ..() -/mob/living/simple_mob/slime/promethean/adjustHalLoss(amount) +/mob/living/simple_mob/slime/xenobio/promethean/adjustHalLoss(amount) if(humanform) return humanform.adjustHalLoss(amount) else return ..() -/mob/living/simple_mob/slime/promethean/adjustCloneLoss(amount) +/mob/living/simple_mob/slime/xenobio/promethean/adjustCloneLoss(amount) if(humanform) return humanform.adjustCloneLoss(amount) else return ..() -/mob/living/simple_mob/slime/promethean/ex_act(severity) +/mob/living/simple_mob/slime/xenobio/promethean/ex_act(severity) if(humanform) return humanform.ex_act(severity) else return ..() -/mob/living/simple_mob/slime/promethean/rad_act(severity) +/mob/living/simple_mob/slime/xenobio/promethean/rad_act(severity) if(humanform) return humanform.ex_act(severity) else return ..() -/mob/living/simple_mob/slime/promethean/bullet_act(obj/item/projectile/P) +/mob/living/simple_mob/slime/xenobio/promethean/bullet_act(obj/item/projectile/P) if(humanform) return humanform.bullet_act(P) else return ..() -/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!") +/mob/living/simple_mob/slime/xenobio/promethean/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!") if(humanform) humanform.death(gibbed, deathmessage) else @@ -296,7 +304,11 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart qdel(src) -/mob/living/simple_mob/slime/promethean/proc/prommie_blobform() +/mob/living/simple_mob/slime/xenobio/promethean/Login() + . = ..() + copy_from_prefs_vr(bellies = FALSE) + +/mob/living/simple_mob/slime/xenobio/promethean/proc/prommie_blobform() set name = "Toggle Blobform" set desc = "Switch between amorphous and humanoid forms." set category = "Abilities" @@ -328,4 +340,21 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p spawn(1) if(H) - H.gib() \ No newline at end of file + H.gib() + +/mob/living/simple_mob/slime/xenobio/promethean/get_description_interaction() + return + + +/mob/living/simple_mob/slime/xenobio/promethean/get_description_info() + return + +/mob/living/simple_mob/slime/xenobio/promethean/examine(mob/user) + . = ..() + . -= "It appears to have been pacified." + +/mob/living/simple_mob/slime/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/slimepotion)) + to_chat(user, "You can't feed this to a promethean!.") + return + ..() \ No newline at end of file From 583cc5c925aa06101a30e37447237a2487abbacb Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 18:42:14 -0400 Subject: [PATCH 07/22] Update prommie_blob.dm --- .../human/species/station/prommie_blob.dm | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) 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 ff587868205..ab00e584852 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 @@ -13,6 +13,7 @@ shock_resist = 0 // Lets not be immune to zaps. is_adult = TRUE harmless = TRUE + friendly = list("nuzzles", "glomps", "snuggles", "hugs") // lets be cute :3 var/mob/living/carbon/human/humanform var/datum/modifier/healing @@ -27,6 +28,8 @@ verbs += /mob/living/simple_mob/slime/xenobio/promethean/proc/prommie_blobform verbs += /mob/living/proc/set_size verbs += /mob/living/proc/hide + verbs += /mob/living/simple_mob/proc/animal_nom + verbs += /mob/living/proc/shred_limb update_mood() glow_color = color handle_light() @@ -74,14 +77,16 @@ //Drop all our things var/list/things_to_drop = contents.Copy() - var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. - + var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear,head) //And whatever else we decide for balancing. + var/obj/item/clothing/head/new_hat things_to_drop -= things_to_not_drop //Crunch the lists things_to_drop -= organs //Mah armbs things_to_drop -= internal_organs //Mah sqeedily spooch for(var/obj/item/I in things_to_drop) //rip hoarders drop_from_inventory(I) + for(var/obj/item/clothing/head/H in things_to_not_drop) + new_hat = H if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way var/obj/item/clothing/uniform = w_uniform @@ -100,16 +105,23 @@ //Put our owner in it (don't transfer var/mind) qdel(blob.ai_holder) blob.ai_holder = null + if(new_hat) + blob.hat = new_hat + unEquip(new_hat) + new_hat.forceMove(src) blob.ckey = ckey blob.name = name blob.color = rgb(r_skin, g_skin, b_skin) //blob.pacify() //blob.make_adult() blob.mood = ":3" + + blob.update_icon() - blob.verbs -= /mob/living/proc/ventcrawl - blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/evolve + blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. + blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/evolve // We aren't really xenobio, so none of this. blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/reproduce + blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. temporary_form = blob //Mail them to nullspace @@ -166,6 +178,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x //Put our owner in it (don't transfer var/mind) ckey = blob.ckey + equip_to_slot_if_possible(blob.hat, slot_head) temporary_form = null //Transfer vore organs @@ -239,14 +252,14 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x return ..() /mob/living/simple_mob/slime/xenobio/promethean/adjustBruteLoss(var/amount,var/include_robo) - amount *= 1.5 + amount *= 0.75 if(humanform) return humanform.adjustBruteLoss(amount) else return ..() /mob/living/simple_mob/slime/xenobio/promethean/adjustFireLoss(var/amount,var/include_robo) - amount *= 1.5 + amount *= 2 if(humanform) return humanform.adjustFireLoss(amount) else From 7404f10522b12bdf4cefa7f253c8e9fa24e9d222 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 21:05:52 -0400 Subject: [PATCH 08/22] Update prommie_blob.dm --- .../mob/living/carbon/human/species/station/prommie_blob.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 ab00e584852..6866dbeae59 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 @@ -79,6 +79,7 @@ var/list/things_to_drop = contents.Copy() var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear,head) //And whatever else we decide for balancing. var/obj/item/clothing/head/new_hat + var/has_hat = FALSE things_to_drop -= things_to_not_drop //Crunch the lists things_to_drop -= organs //Mah armbs things_to_drop -= internal_organs //Mah sqeedily spooch @@ -86,8 +87,9 @@ for(var/obj/item/I in things_to_drop) //rip hoarders drop_from_inventory(I) for(var/obj/item/clothing/head/H in things_to_not_drop) - new_hat = H - + if(H) + new_hat = H + has_hat = TRUE if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way var/obj/item/clothing/uniform = w_uniform if(LAZYLEN(uniform.accessories)) From bc1aed4c86ab49ed2f02d45928661041ba6b2972 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 21:35:15 -0400 Subject: [PATCH 09/22] Update prommie_blob.dm --- .../carbon/human/species/station/prommie_blob.dm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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 6866dbeae59..a1dda958cc6 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 @@ -14,6 +14,8 @@ is_adult = TRUE harmless = TRUE friendly = list("nuzzles", "glomps", "snuggles", "hugs") // lets be cute :3 + melee_damage_upper = 0 + melee_damage_lower = 0 var/mob/living/carbon/human/humanform var/datum/modifier/healing @@ -107,9 +109,10 @@ //Put our owner in it (don't transfer var/mind) qdel(blob.ai_holder) blob.ai_holder = null - if(new_hat) + if(has_hat) blob.hat = new_hat - unEquip(new_hat) + src.u_equip(new_hat) + //unEquip(new_hat) new_hat.forceMove(src) blob.ckey = ckey blob.name = name @@ -182,6 +185,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x ckey = blob.ckey equip_to_slot_if_possible(blob.hat, slot_head) temporary_form = null + update_icon() //Transfer vore organs vore_selected = blob.vore_selected @@ -368,8 +372,11 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x . = ..() . -= "It appears to have been pacified." -/mob/living/simple_mob/slime/attackby(obj/item/I, mob/user) +/mob/living/simple_mob/slime/xenobio/promethean/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/slimepotion)) to_chat(user, "You can't feed this to a promethean!.") return - ..() \ No newline at end of file + ..() + +/mob/living/simple_mob/slime/xenobio/promethean/init_vore() + return \ No newline at end of file From 23a0f3e8a0049bab067052111349dbb3b5cbbe09 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 23:11:24 -0400 Subject: [PATCH 10/22] Update prommie_blob.dm --- .../carbon/human/species/station/prommie_blob.dm | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) 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 a1dda958cc6..c8c79e8e364 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 @@ -1,12 +1,12 @@ // Prommies are slimes, lets make them a subtype of slimes. /mob/living/simple_mob/slime/xenobio/promethean + name = "Promethean Blob" desc = "A promethean expressing their true form." //ai_holder_type = null color = null // Uses a special icon_state. slime_color = "rainbow" unity = TRUE water_resist = 100 // Lets not kill the prommies - can_buckle = TRUE cores = 0 movement_cooldown = 3 appearance_flags = RADIATION_GLOWS @@ -16,6 +16,7 @@ friendly = list("nuzzles", "glomps", "snuggles", "hugs") // 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." var/mob/living/carbon/human/humanform var/datum/modifier/healing @@ -25,7 +26,7 @@ var/human_brute = 0 var/human_burn = 0 -/mob/living/simple_mob/slime/xenobio/promethean/Initialize() +/mob/living/simple_mob/slime/xenobio/promethean/Initialize(mapload, null) //verbs -= /mob/living/proc/ventcrawl verbs += /mob/living/simple_mob/slime/xenobio/promethean/proc/prommie_blobform verbs += /mob/living/proc/set_size @@ -50,7 +51,6 @@ humanform = H updatehealth() - verbs += /mob/living/proc/hide else update_icon() @@ -89,9 +89,11 @@ for(var/obj/item/I in things_to_drop) //rip hoarders drop_from_inventory(I) for(var/obj/item/clothing/head/H in things_to_not_drop) - if(H) - new_hat = H - has_hat = TRUE + drop_from_inventory(H) + //if(H) + new_hat = H + has_hat = TRUE + if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way var/obj/item/clothing/uniform = w_uniform if(LAZYLEN(uniform.accessories)) @@ -111,7 +113,6 @@ blob.ai_holder = null if(has_hat) blob.hat = new_hat - src.u_equip(new_hat) //unEquip(new_hat) new_hat.forceMove(src) blob.ckey = ckey @@ -188,6 +189,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x update_icon() //Transfer vore organs + vore_organs = blob.vore_organs vore_selected = blob.vore_selected for(var/obj/belly/B as anything in blob.vore_organs) B.forceMove(src) From b47f58e1390299f98e2b5f0ab87ea5f2abfd1e9f Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Thu, 17 Mar 2022 23:30:55 -0400 Subject: [PATCH 11/22] Update prommie_blob.dm --- .../human/species/station/prommie_blob.dm | 79 ++++++++++--------- 1 file changed, 40 insertions(+), 39 deletions(-) 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 c8c79e8e364..e921afe6706 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 @@ -1,5 +1,5 @@ // Prommies are slimes, lets make them a subtype of slimes. -/mob/living/simple_mob/slime/xenobio/promethean +/mob/living/simple_mob/slime/promethean name = "Promethean Blob" desc = "A promethean expressing their true form." //ai_holder_type = null @@ -11,8 +11,8 @@ movement_cooldown = 3 appearance_flags = RADIATION_GLOWS shock_resist = 0 // Lets not be immune to zaps. - is_adult = TRUE - harmless = TRUE + //is_adult = TRUE + //harmless = TRUE friendly = list("nuzzles", "glomps", "snuggles", "hugs") // lets be cute :3 melee_damage_upper = 0 melee_damage_lower = 0 @@ -26,9 +26,9 @@ var/human_brute = 0 var/human_burn = 0 -/mob/living/simple_mob/slime/xenobio/promethean/Initialize(mapload, null) +/mob/living/simple_mob/slime/promethean/Initialize(mapload, null) //verbs -= /mob/living/proc/ventcrawl - verbs += /mob/living/simple_mob/slime/xenobio/promethean/proc/prommie_blobform + verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_blobform verbs += /mob/living/proc/set_size verbs += /mob/living/proc/hide verbs += /mob/living/simple_mob/proc/animal_nom @@ -39,13 +39,13 @@ update_icon() return ..() -/mob/living/simple_mob/slime/xenobio/promethean/Stat() +/mob/living/simple_mob/slime/promethean/Stat() ..() if(humanform) humanform.species.Stat(humanform) //Constructor allows passing the human to sync damages -/mob/living/simple_mob/slime/xenobio/promethean/New(var/newloc, var/mob/living/carbon/human/H) +/mob/living/simple_mob/slime/promethean/New(var/newloc, var/mob/living/carbon/human/H) ..() if(H) humanform = H @@ -75,11 +75,11 @@ var/atom/creation_spot = drop_location() //Create our new blob - var/mob/living/simple_mob/slime/xenobio/promethean/blob = new(creation_spot,src) + var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) //Drop all our things var/list/things_to_drop = contents.Copy() - var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear,head) //And whatever else we decide for balancing. + var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. var/obj/item/clothing/head/new_hat var/has_hat = FALSE things_to_drop -= things_to_not_drop //Crunch the lists @@ -88,11 +88,14 @@ for(var/obj/item/I in things_to_drop) //rip hoarders drop_from_inventory(I) - for(var/obj/item/clothing/head/H in things_to_not_drop) - drop_from_inventory(H) + if(I == new_hat) + new_hat = I + has_hat = TRUE + //for(var/obj/item/clothing/head/H in things_to_not_drop) + // drop_from_inventory(H) //if(H) - new_hat = H - has_hat = TRUE + // new_hat = H + // has_hat = TRUE if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way var/obj/item/clothing/uniform = w_uniform @@ -125,8 +128,8 @@ blob.update_icon() blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. - blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/evolve // We aren't really xenobio, so none of this. - blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/reproduce + //blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/evolve // We aren't really xenobio, so none of this. + //blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/reproduce blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. temporary_form = blob @@ -149,7 +152,7 @@ //Return our blob in case someone wants it return blob -mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/xenobio/promethean/blob, force) +mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) if(!istype(blob)) return @@ -206,7 +209,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x //Return ourselves in case someone wants it return src -/mob/living/simple_mob/slime/xenobio/promethean/updatehealth() +/mob/living/simple_mob/slime/promethean/updatehealth() if(!humanform) return ..() @@ -253,69 +256,69 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x healths.icon_state = "health7" // All the damage and such to the blob translates to the human -/mob/living/simple_mob/slime/xenobio/promethean/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) +/mob/living/simple_mob/slime/promethean/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1) if(humanform) return humanform.apply_effect(effect, effecttype, blocked, check_protection) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/adjustBruteLoss(var/amount,var/include_robo) +/mob/living/simple_mob/slime/promethean/adjustBruteLoss(var/amount,var/include_robo) amount *= 0.75 if(humanform) return humanform.adjustBruteLoss(amount) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/adjustFireLoss(var/amount,var/include_robo) +/mob/living/simple_mob/slime/promethean/adjustFireLoss(var/amount,var/include_robo) amount *= 2 if(humanform) return humanform.adjustFireLoss(amount) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/adjustToxLoss(amount) +/mob/living/simple_mob/slime/promethean/adjustToxLoss(amount) if(humanform) return humanform.adjustToxLoss(amount) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/adjustOxyLoss(amount) +/mob/living/simple_mob/slime/promethean/adjustOxyLoss(amount) if(humanform) return humanform.adjustOxyLoss(amount) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/adjustHalLoss(amount) +/mob/living/simple_mob/slime/promethean/adjustHalLoss(amount) if(humanform) return humanform.adjustHalLoss(amount) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/adjustCloneLoss(amount) +/mob/living/simple_mob/slime/promethean/adjustCloneLoss(amount) if(humanform) return humanform.adjustCloneLoss(amount) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/ex_act(severity) +/mob/living/simple_mob/slime/promethean/ex_act(severity) if(humanform) return humanform.ex_act(severity) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/rad_act(severity) +/mob/living/simple_mob/slime/promethean/rad_act(severity) if(humanform) return humanform.ex_act(severity) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/bullet_act(obj/item/projectile/P) +/mob/living/simple_mob/slime/promethean/bullet_act(obj/item/projectile/P) if(humanform) return humanform.bullet_act(P) else return ..() -/mob/living/simple_mob/slime/xenobio/promethean/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!") +/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!") if(humanform) humanform.death(gibbed, deathmessage) else @@ -325,17 +328,16 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart qdel(src) -/mob/living/simple_mob/slime/xenobio/promethean/Login() +/mob/living/simple_mob/slime/promethean/Login() . = ..() copy_from_prefs_vr(bellies = FALSE) -/mob/living/simple_mob/slime/xenobio/promethean/proc/prommie_blobform() +/mob/living/simple_mob/slime/promethean/proc/prommie_blobform() set name = "Toggle Blobform" set desc = "Switch between amorphous and humanoid forms." set category = "Abilities" set hidden = FALSE - to_chat(src,"Blob form attepted to revert!") var/atom/movable/to_locate = src if(!isturf(to_locate.loc)) to_chat(src,"You need more space to perform this action!") @@ -343,7 +345,6 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x //Blob form if(!ishuman(src)) - to_chat(src,"They are a blob!") if(humanform.temporary_form.stat) to_chat(src,"You can only do this while not stunned.") else @@ -363,22 +364,22 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/x if(H) H.gib() -/mob/living/simple_mob/slime/xenobio/promethean/get_description_interaction() +/mob/living/simple_mob/slime/promethean/get_description_interaction() return -/mob/living/simple_mob/slime/xenobio/promethean/get_description_info() +/mob/living/simple_mob/slime/promethean/get_description_info() return - -/mob/living/simple_mob/slime/xenobio/promethean/examine(mob/user) +/* +/mob/living/simple_mob/slime/promethean/examine(mob/user) . = ..() . -= "It appears to have been pacified." -/mob/living/simple_mob/slime/xenobio/promethean/attackby(obj/item/I, mob/user) +/mob/living/simple_mob/slime/promethean/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/slimepotion)) to_chat(user, "You can't feed this to a promethean!.") return ..() - -/mob/living/simple_mob/slime/xenobio/promethean/init_vore() +*/ +/mob/living/simple_mob/slime/promethean/init_vore() return \ No newline at end of file From 4d37f3cc9eb246aa43cc8e01971f6ced88c54ebd Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 00:06:31 -0400 Subject: [PATCH 12/22] Update prommie_blob.dm --- .../human/species/station/prommie_blob.dm | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) 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 e921afe6706..fd2b8522e57 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 @@ -60,6 +60,10 @@ 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) @@ -86,11 +90,15 @@ things_to_drop -= organs //Mah armbs things_to_drop -= internal_organs //Mah sqeedily spooch + for(var/obj/item/clothing/head/H in things_to_drop) + if(H) + new_hat = H + has_hat = TRUE + drop_from_inventory(H) + things_to_drop -= H + for(var/obj/item/I in things_to_drop) //rip hoarders drop_from_inventory(I) - if(I == new_hat) - new_hat = I - has_hat = TRUE //for(var/obj/item/clothing/head/H in things_to_not_drop) // drop_from_inventory(H) //if(H) @@ -119,10 +127,8 @@ //unEquip(new_hat) new_hat.forceMove(src) blob.ckey = ckey - blob.name = name + //blob.name = name blob.color = rgb(r_skin, g_skin, b_skin) - //blob.pacify() - //blob.make_adult() blob.mood = ":3" @@ -149,6 +155,9 @@ //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 @@ -156,6 +165,10 @@ 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 @@ -169,10 +182,6 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p pulledby.stop_pulling() stop_pulling() - //Stop healing if we are - if(blob.healing) - blob.healing.expire() - //Message blob.visible_message("[src.name] reshapes into a humanoid appearance!") @@ -187,16 +196,21 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p //Put our owner in it (don't transfer var/mind) ckey = blob.ckey - equip_to_slot_if_possible(blob.hat, slot_head) + var/obj/item/hat = blob.hat + blob.drop_hat() + drop_from_inventory(hat) + equip_to_slot_if_possible(hat, slot_head) temporary_form = null update_icon() //Transfer vore organs - vore_organs = blob.vore_organs + //vore_organs = blob.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].") if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) @@ -206,6 +220,9 @@ 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 From 6791dc2b4a69ccc82c4f51856fcacf939ed28510 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 00:25:13 -0400 Subject: [PATCH 13/22] Update prommie_blob.dm --- .../carbon/human/species/station/prommie_blob.dm | 15 --------------- 1 file changed, 15 deletions(-) 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 fd2b8522e57..3cbfdb2affd 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 @@ -204,14 +204,12 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p update_icon() //Transfer vore organs - //vore_organs = blob.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].") - if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) @@ -368,19 +366,6 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p to_chat(src,"Attempting to revert!") humanform.prommie_outofblob(src) -/datum/species/shapeshifter/promethean/handle_death(var/mob/living/carbon/human/H) - if(!H) - return // Iono! - - if(H.temporary_form) - H.forceMove(H.temporary_form.drop_location()) - H.ckey = H.temporary_form.ckey - QDEL_NULL(H.temporary_form) - - spawn(1) - if(H) - H.gib() - /mob/living/simple_mob/slime/promethean/get_description_interaction() return From 54268c0a58dc813c6a4a2e33472f06fc8ad78cdf Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 00:33:56 -0400 Subject: [PATCH 14/22] Update prommie_blob.dm --- .../mob/living/carbon/human/species/station/prommie_blob.dm | 2 ++ 1 file changed, 2 insertions(+) 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 3cbfdb2affd..8a7bb223fc7 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 @@ -210,6 +210,8 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p B.forceMove(src) B.owner = src to_chat(src,"[B]'s owner is [src].") + + blob.vore_organs.Cut() if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) From 2265b4f63bdcf875b4a2f6970c5c1837b7bfc377 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 00:42:39 -0400 Subject: [PATCH 15/22] Update prommie_blob.dm --- .../mob/living/carbon/human/species/station/prommie_blob.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8a7bb223fc7..92c484f9dcf 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 @@ -211,7 +211,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p B.owner = src to_chat(src,"[B]'s owner is [src].") - blob.vore_organs.Cut() + //vore_organs.Cut() if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) From dbf5948dc9277b18cab1350e8ab2fcc3cb992b3c Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 02:42:26 -0400 Subject: [PATCH 16/22] Update prommie_blob.dm --- .../human/species/station/prommie_blob.dm | 127 ++++++++++++++---- 1 file changed, 102 insertions(+), 25 deletions(-) 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 From b1c45b1cad3441b3aa1ff5ea8169fe3a86f8d1f9 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 02:46:02 -0400 Subject: [PATCH 17/22] Blep --- vorestation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vorestation.dme b/vorestation.dme index 6ae5acf3e24..ca58989588f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4100,6 +4100,7 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" +#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4109,6 +4110,5 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" -#include "maps\virgo_minitest\virgo_minitest.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From 33b58fcc3dbe30ca8f87d484676b4ae400ad8c4e Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 15:14:06 -0400 Subject: [PATCH 18/22] Fixing radiation death and keeping glow --- .../human/species/station/prometheans_vr.dm | 171 +++++++++++++++- .../human/species/station/prommie_blob.dm | 190 ++---------------- vorestation.dme | 2 +- 3 files changed, 193 insertions(+), 170 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index 66543b70a80..042945e0f59 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -73,4 +73,173 @@ spawn(1) if(H) - H.gib() \ No newline at end of file + H.gib() + +// Helpers - Unsafe, WILL perform change. +/mob/living/carbon/human/proc/prommie_intoblob(force) + if(!force && !isturf(loc)) + to_chat(src,"You can't change forms while inside something.") + return + + 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) + buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + + //Record where they should go + var/atom/creation_spot = drop_location() + + //Create our new blob + var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) + + //Drop all our things + var/list/things_to_drop = contents.Copy() + var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. + var/obj/item/clothing/head/new_hat + var/has_hat = FALSE + things_to_drop -= things_to_not_drop //Crunch the lists + things_to_drop -= organs //Mah armbs + things_to_drop -= internal_organs //Mah sqeedily spooch + + for(var/obj/item/clothing/head/H in things_to_drop) + if(H) + new_hat = H + has_hat = TRUE + drop_from_inventory(H) + things_to_drop -= H + + for(var/obj/item/I in things_to_drop) //rip hoarders + drop_from_inventory(I) + //for(var/obj/item/clothing/head/H in things_to_not_drop) + // drop_from_inventory(H) + //if(H) + // new_hat = H + // has_hat = TRUE + + if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way + var/obj/item/clothing/uniform = w_uniform + if(LAZYLEN(uniform.accessories)) + for(var/obj/item/clothing/accessory/A in uniform.accessories) + if(is_type_in_list(A, disallowed_protean_accessories)) + uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages + + //Size update + blob.transform = matrix()*size_multiplier + blob.size_multiplier = size_multiplier + + if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled. + if(r_hand) blob.prev_right_hand = r_hand + + //Put our owner in it (don't transfer var/mind) + qdel(blob.ai_holder) + + blob.ai_holder = null + if(has_hat) + blob.hat = new_hat + new_hat.forceMove(src) + blob.ckey = ckey + blob.name = name + blob.nutrition = nutrition + blob.color = rgb(r_skin, g_skin, b_skin) + blob.mood = ":3" + if(radiation) + blob.rad_glow = CLAMP(radiation,0,250) + blob.glow_intensity = max(1,min(5,blob.rad_glow/15)) + blob.glow_range = max(1,min(10,blob.rad_glow/25)) + blob.glow_toggle = TRUE + set_light(0) + blob.set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), blob.color) + blob.handle_light() + blob.update_icon() + blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. + blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. + temporary_form = blob + + //Mail them to nullspace + moveToNullspace() + + //Message + blob.visible_message("[src.name] squishes into their true form!") + + //Transfer vore organs + blob.vore_organs = vore_organs + blob.vore_selected = vore_selected + for(var/obj/belly/B as anything in vore_organs) + B.forceMove(blob) + B.owner = blob + + //We can still speak our languages! + blob.languages = languages.Copy() + + //Return our blob in case someone wants it + return blob + +mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) + if(!istype(blob)) + return + + if(!force && !isturf(blob.loc)) + to_chat(blob,"You can't change forms while inside something.") + return + + if(buckled) + buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + + //Message + blob.visible_message("[src.name] pulls together, forming a humanoid shape!") + + //Record where they should go + var/atom/reform_spot = blob.drop_location() + + //Size update + resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE) + + //Move them back where the blob was + forceMove(reform_spot) + + //Put our owner in it (don't transfer var/mind) + ckey = blob.ckey + var/obj/item/hat = blob.hat + blob.drop_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) + if(blob.rad_glow) + radiation = CLAMP(blob.rad_glow,0,250) + set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src)) + update_icon() + + //Transfer vore organs + vore_selected = blob.vore_selected + for(var/obj/belly/B as anything in blob.vore_organs) + B.forceMove(src) + B.owner = src + + //vore_organs.Cut() + if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. + if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) + + Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. + + //Get rid of friend blob + qdel(blob) + + //Return ourselves in case someone wants it + return src \ No newline at end of file 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 7d2ac8f97d6..0e740649936 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 @@ -9,7 +9,7 @@ water_resist = 100 // Lets not kill the prommies cores = 0 movement_cooldown = 3 - appearance_flags = RADIATION_GLOWS + //appearance_flags = RADIATION_GLOWS shock_resist = 0 // Lets not be immune to zaps. friendly = list("nuzzles", "glomps", "snuggles", "cuddles", "squishes") // lets be cute :3 melee_damage_upper = 0 @@ -17,6 +17,8 @@ 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 + //glow_range = 0 + //glow_intensity = 0 var/mob/living/carbon/human/humanform var/datum/modifier/healing @@ -26,6 +28,7 @@ var/human_brute = 0 var/human_burn = 0 var/is_wide = FALSE + var/rad_glow = 0 var/list/default_emotes = list( /decl/emote/audible/squish, @@ -50,18 +53,25 @@ verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_shine update_mood() glow_color = color - handle_light() + if(rad_glow) + rad_glow = CLAMP(rad_glow,0,250) + set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) 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"][""]" + //if(rad_glow) + // set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) + //else + // set_light(0) ..() /mob/living/simple_mob/slime/promethean/Destroy() humanform = null vore_organs = null vore_selected = null + set_light(0) return ..() /mob/living/simple_mob/slime/promethean/Stat() @@ -70,6 +80,11 @@ humanform.species.Stat(humanform) /mob/living/simple_mob/slime/promethean/handle_special() // Should disable default slime healing, we'll use nutrition based heals instead. + if(rad_glow) + rad_glow = CLAMP(rad_glow,0,250) + set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) + else + set_light(0) return //Constructor allows passing the human to sync damages @@ -82,167 +97,6 @@ else update_icon() -// Helpers - Unsafe, WILL perform change. -/mob/living/carbon/human/proc/prommie_intoblob(force) - if(!force && !isturf(loc)) - to_chat(src,"You can't change forms while inside something.") - return - - 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) - buckled.unbuckle_mob() - if(LAZYLEN(buckled_mobs)) - for(var/buckledmob in buckled_mobs) - riding_datum.force_dismount(buckledmob) - if(pulledby) - pulledby.stop_pulling() - stop_pulling() - - //Record where they should go - var/atom/creation_spot = drop_location() - - //Create our new blob - var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) - - //Drop all our things - var/list/things_to_drop = contents.Copy() - var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. - var/obj/item/clothing/head/new_hat - var/has_hat = FALSE - things_to_drop -= things_to_not_drop //Crunch the lists - things_to_drop -= organs //Mah armbs - things_to_drop -= internal_organs //Mah sqeedily spooch - - for(var/obj/item/clothing/head/H in things_to_drop) - if(H) - new_hat = H - has_hat = TRUE - drop_from_inventory(H) - things_to_drop -= H - - for(var/obj/item/I in things_to_drop) //rip hoarders - drop_from_inventory(I) - //for(var/obj/item/clothing/head/H in things_to_not_drop) - // drop_from_inventory(H) - //if(H) - // new_hat = H - // has_hat = TRUE - - if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way - var/obj/item/clothing/uniform = w_uniform - if(LAZYLEN(uniform.accessories)) - for(var/obj/item/clothing/accessory/A in uniform.accessories) - if(is_type_in_list(A, disallowed_protean_accessories)) - uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages - - //Size update - blob.transform = matrix()*size_multiplier - blob.size_multiplier = size_multiplier - - if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled. - if(r_hand) blob.prev_right_hand = r_hand - - //Put our owner in it (don't transfer var/mind) - qdel(blob.ai_holder) - blob.ai_holder = null - if(has_hat) - blob.hat = new_hat - //unEquip(new_hat) - new_hat.forceMove(src) - blob.ckey = ckey - blob.name = name - blob.nutrition = nutrition - blob.color = rgb(r_skin, g_skin, b_skin) - blob.mood = ":3" - - - blob.update_icon() - blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. - //blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/evolve // We aren't really xenobio, so none of this. - //blob.verbs -= /mob/living/simple_mob/slime/xenobio/verb/reproduce - blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. - temporary_form = blob - - //Mail them to nullspace - moveToNullspace() - - //Message - blob.visible_message("[src.name] squishes into their true form!") - - //Transfer vore organs - blob.vore_organs = vore_organs - blob.vore_selected = vore_selected - for(var/obj/belly/B as anything in vore_organs) - B.forceMove(blob) - B.owner = blob - - //We can still speak our languages! - blob.languages = languages.Copy() - - //Return our blob in case someone wants it - return blob - -mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) - if(!istype(blob)) - return - - if(!force && !isturf(blob.loc)) - to_chat(blob,"You can't change forms while inside something.") - return - - if(buckled) - buckled.unbuckle_mob() - if(LAZYLEN(buckled_mobs)) - for(var/buckledmob in buckled_mobs) - riding_datum.force_dismount(buckledmob) - if(pulledby) - pulledby.stop_pulling() - stop_pulling() - - //Message - blob.visible_message("[src.name] pulls together, forming a humanoid shape!") - - //Record where they should go - var/atom/reform_spot = blob.drop_location() - - //Size update - resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE) - - //Move them back where the blob was - forceMove(reform_spot) - - //Put our owner in it (don't transfer var/mind) - ckey = blob.ckey - var/obj/item/hat = blob.hat - blob.drop_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 - vore_selected = blob.vore_selected - for(var/obj/belly/B as anything in blob.vore_organs) - B.forceMove(src) - B.owner = src - - //vore_organs.Cut() - if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. - if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) - - Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. - - //Get rid of friend blob - qdel(blob) - - //Return ourselves in case someone wants it - return src - /mob/living/simple_mob/slime/promethean/updatehealth() if(!humanform) return ..() @@ -341,10 +195,10 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p return ..() /mob/living/simple_mob/slime/promethean/rad_act(severity) - if(humanform) - return humanform.ex_act(severity) - else - return ..() + rad_glow += severity + rad_glow = CLAMP(rad_glow,0,250) + if(rad_glow) + set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) /mob/living/simple_mob/slime/promethean/bullet_act(obj/item/projectile/P) if(humanform) @@ -352,7 +206,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p else return ..() -/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!") +/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "rapidly loses cohesion, splattering across the ground...") if(humanform) humanform.death(gibbed, deathmessage) else diff --git a/vorestation.dme b/vorestation.dme index ca58989588f..6ae5acf3e24 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4100,7 +4100,6 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" -#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4110,5 +4109,6 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" +#include "maps\virgo_minitest\virgo_minitest.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From ebf014907ab6851f50ab22572bacbd4f6c38200d Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 15:57:39 -0400 Subject: [PATCH 19/22] Final (I hope) Should fix some lingering radiation problems and allow the little guys to glow. --- .../carbon/human/species/station/prometheans_vr.dm | 10 +++++----- .../carbon/human/species/station/prommie_blob.dm | 5 ++--- vorestation.dme | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index 042945e0f59..47e4755cc52 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -140,15 +140,12 @@ qdel(blob.ai_holder) blob.ai_holder = null - if(has_hat) - blob.hat = new_hat - new_hat.forceMove(src) blob.ckey = ckey blob.name = name blob.nutrition = nutrition blob.color = rgb(r_skin, g_skin, b_skin) blob.mood = ":3" - if(radiation) + if(radiation > 0) blob.rad_glow = CLAMP(radiation,0,250) blob.glow_intensity = max(1,min(5,blob.rad_glow/15)) blob.glow_range = max(1,min(10,blob.rad_glow/25)) @@ -156,6 +153,9 @@ set_light(0) blob.set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), blob.color) blob.handle_light() + if(has_hat) + blob.hat = new_hat + new_hat.forceMove(src) blob.update_icon() blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. @@ -221,7 +221,7 @@ mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/p temporary_form = null shapeshifter_set_colour(blob.color) - if(blob.rad_glow) + if(blob.rad_glow > 0) radiation = CLAMP(blob.rad_glow,0,250) set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src)) update_icon() 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 0e740649936..ebc8ff25d16 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 @@ -52,11 +52,9 @@ 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 if(rad_glow) rad_glow = CLAMP(rad_glow,0,250) set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) - update_icon() return ..() /mob/living/simple_mob/slime/promethean/update_icon() @@ -197,8 +195,9 @@ /mob/living/simple_mob/slime/promethean/rad_act(severity) rad_glow += severity rad_glow = CLAMP(rad_glow,0,250) - if(rad_glow) + if(rad_glow > 1) set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) + update_icon() /mob/living/simple_mob/slime/promethean/bullet_act(obj/item/projectile/P) if(humanform) diff --git a/vorestation.dme b/vorestation.dme index 6ae5acf3e24..ca58989588f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4100,6 +4100,7 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" +#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4109,6 +4110,5 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" -#include "maps\virgo_minitest\virgo_minitest.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From 31ec0b11801c302979ec8a5c5e03c9e166b84988 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 16:08:17 -0400 Subject: [PATCH 20/22] Fixing issue --- .../mob/living/carbon/human/species/station/prometheans_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index 47e4755cc52..f360599d16a 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -180,7 +180,7 @@ //Return our blob in case someone wants it return blob -mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) +/mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) if(!istype(blob)) return From 019dcfb674a149e4d97d798f78e632ec8e90f69b Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Fri, 18 Mar 2022 16:38:09 -0400 Subject: [PATCH 21/22] Cleanup Removing unused and redundant code. --- .../human/species/station/prometheans_vr.dm | 171 +---------------- .../human/species/station/prommie_blob.dm | 177 ++++++++++++++++-- 2 files changed, 163 insertions(+), 185 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index f360599d16a..66543b70a80 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -73,173 +73,4 @@ spawn(1) if(H) - H.gib() - -// Helpers - Unsafe, WILL perform change. -/mob/living/carbon/human/proc/prommie_intoblob(force) - if(!force && !isturf(loc)) - to_chat(src,"You can't change forms while inside something.") - return - - 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) - buckled.unbuckle_mob() - if(LAZYLEN(buckled_mobs)) - for(var/buckledmob in buckled_mobs) - riding_datum.force_dismount(buckledmob) - if(pulledby) - pulledby.stop_pulling() - stop_pulling() - - //Record where they should go - var/atom/creation_spot = drop_location() - - //Create our new blob - var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) - - //Drop all our things - var/list/things_to_drop = contents.Copy() - var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. - var/obj/item/clothing/head/new_hat - var/has_hat = FALSE - things_to_drop -= things_to_not_drop //Crunch the lists - things_to_drop -= organs //Mah armbs - things_to_drop -= internal_organs //Mah sqeedily spooch - - for(var/obj/item/clothing/head/H in things_to_drop) - if(H) - new_hat = H - has_hat = TRUE - drop_from_inventory(H) - things_to_drop -= H - - for(var/obj/item/I in things_to_drop) //rip hoarders - drop_from_inventory(I) - //for(var/obj/item/clothing/head/H in things_to_not_drop) - // drop_from_inventory(H) - //if(H) - // new_hat = H - // has_hat = TRUE - - if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way - var/obj/item/clothing/uniform = w_uniform - if(LAZYLEN(uniform.accessories)) - for(var/obj/item/clothing/accessory/A in uniform.accessories) - if(is_type_in_list(A, disallowed_protean_accessories)) - uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages - - //Size update - blob.transform = matrix()*size_multiplier - blob.size_multiplier = size_multiplier - - if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled. - if(r_hand) blob.prev_right_hand = r_hand - - //Put our owner in it (don't transfer var/mind) - qdel(blob.ai_holder) - - blob.ai_holder = null - blob.ckey = ckey - blob.name = name - blob.nutrition = nutrition - blob.color = rgb(r_skin, g_skin, b_skin) - blob.mood = ":3" - if(radiation > 0) - blob.rad_glow = CLAMP(radiation,0,250) - blob.glow_intensity = max(1,min(5,blob.rad_glow/15)) - blob.glow_range = max(1,min(10,blob.rad_glow/25)) - blob.glow_toggle = TRUE - set_light(0) - blob.set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), blob.color) - blob.handle_light() - if(has_hat) - blob.hat = new_hat - new_hat.forceMove(src) - blob.update_icon() - blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. - blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. - temporary_form = blob - - //Mail them to nullspace - moveToNullspace() - - //Message - blob.visible_message("[src.name] squishes into their true form!") - - //Transfer vore organs - blob.vore_organs = vore_organs - blob.vore_selected = vore_selected - for(var/obj/belly/B as anything in vore_organs) - B.forceMove(blob) - B.owner = blob - - //We can still speak our languages! - blob.languages = languages.Copy() - - //Return our blob in case someone wants it - return blob - -/mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) - if(!istype(blob)) - return - - if(!force && !isturf(blob.loc)) - to_chat(blob,"You can't change forms while inside something.") - return - - if(buckled) - buckled.unbuckle_mob() - if(LAZYLEN(buckled_mobs)) - for(var/buckledmob in buckled_mobs) - riding_datum.force_dismount(buckledmob) - if(pulledby) - pulledby.stop_pulling() - stop_pulling() - - //Message - blob.visible_message("[src.name] pulls together, forming a humanoid shape!") - - //Record where they should go - var/atom/reform_spot = blob.drop_location() - - //Size update - resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE) - - //Move them back where the blob was - forceMove(reform_spot) - - //Put our owner in it (don't transfer var/mind) - ckey = blob.ckey - var/obj/item/hat = blob.hat - blob.drop_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) - if(blob.rad_glow > 0) - radiation = CLAMP(blob.rad_glow,0,250) - set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src)) - update_icon() - - //Transfer vore organs - vore_selected = blob.vore_selected - for(var/obj/belly/B as anything in blob.vore_organs) - B.forceMove(src) - B.owner = src - - //vore_organs.Cut() - if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. - if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) - - Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. - - //Get rid of friend blob - qdel(blob) - - //Return ourselves in case someone wants it - return src \ No newline at end of file + H.gib() \ No newline at end of file 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 ebc8ff25d16..0f59fdb8729 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 @@ -59,10 +59,6 @@ /mob/living/simple_mob/slime/promethean/update_icon() icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_wide ? "adult" : "baby"][""]" - //if(rad_glow) - // set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) - //else - // set_light(0) ..() /mob/living/simple_mob/slime/promethean/Destroy() @@ -299,21 +295,172 @@ /mob/living/simple_mob/slime/promethean/get_description_info() return -/* -/mob/living/simple_mob/slime/promethean/examine(mob/user) - . = ..() - . -= "It appears to have been pacified." -/mob/living/simple_mob/slime/promethean/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/slimepotion)) - to_chat(user, "You can't feed this to a promethean!.") - return - ..() -*/ /mob/living/simple_mob/slime/promethean/init_vore() 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 + return fulllist + +// Helpers - Unsafe, WILL perform change. +/mob/living/carbon/human/proc/prommie_intoblob(force) + if(!force && !isturf(loc)) + to_chat(src,"You can't change forms while inside something.") + return + + 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) + buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + + //Record where they should go + var/atom/creation_spot = drop_location() + + //Create our new blob + var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) + + //Drop all our things + var/list/things_to_drop = contents.Copy() + var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing. + var/obj/item/clothing/head/new_hat + var/has_hat = FALSE + things_to_drop -= things_to_not_drop //Crunch the lists + things_to_drop -= organs //Mah armbs + things_to_drop -= internal_organs //Mah sqeedily spooch + + for(var/obj/item/clothing/head/H in things_to_drop) + if(H) + new_hat = H + has_hat = TRUE + drop_from_inventory(H) + things_to_drop -= H + + for(var/obj/item/I in things_to_drop) //rip hoarders + drop_from_inventory(I) + + if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way + var/obj/item/clothing/uniform = w_uniform + if(LAZYLEN(uniform.accessories)) + for(var/obj/item/clothing/accessory/A in uniform.accessories) + if(is_type_in_list(A, disallowed_protean_accessories)) + uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages + + //Size update + blob.transform = matrix()*size_multiplier + blob.size_multiplier = size_multiplier + + if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled. + if(r_hand) blob.prev_right_hand = r_hand + + //Put our owner in it (don't transfer var/mind) + qdel(blob.ai_holder) + + blob.ai_holder = null + blob.ckey = ckey + blob.name = name + blob.nutrition = nutrition + blob.color = rgb(r_skin, g_skin, b_skin) + blob.mood = ":3" + if(radiation > 0) + blob.rad_glow = CLAMP(radiation,0,250) + set_light(0) + blob.set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), blob.color) + blob.handle_light() + if(has_hat) + blob.hat = new_hat + new_hat.forceMove(src) + blob.update_icon() + blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. + blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. + temporary_form = blob + + //Mail them to nullspace + moveToNullspace() + + //Message + blob.visible_message("[src.name] squishes into their true form!") + + //Transfer vore organs + blob.vore_organs = vore_organs + blob.vore_selected = vore_selected + for(var/obj/belly/B as anything in vore_organs) + B.forceMove(blob) + B.owner = blob + + //We can still speak our languages! + blob.languages = languages.Copy() + + //Return our blob in case someone wants it + return blob + +/mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force) + if(!istype(blob)) + return + + if(!force && !isturf(blob.loc)) + to_chat(blob,"You can't change forms while inside something.") + return + + if(buckled) + buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + + //Message + blob.visible_message("[src.name] pulls together, forming a humanoid shape!") + + //Record where they should go + var/atom/reform_spot = blob.drop_location() + + //Size update + resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE) + + //Move them back where the blob was + forceMove(reform_spot) + + //Put our owner in it (don't transfer var/mind) + ckey = blob.ckey + var/obj/item/hat = blob.hat + blob.drop_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) + if(blob.rad_glow > 0) + radiation = CLAMP(blob.rad_glow,0,250) + set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src)) + update_icon() + + //Transfer vore organs + vore_selected = blob.vore_selected + for(var/obj/belly/B as anything in blob.vore_organs) + B.forceMove(src) + B.owner = src + + //vore_organs.Cut() + if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. + if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) + + Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. + + //Get rid of friend blob + qdel(blob) + + //Return ourselves in case someone wants it + return src \ No newline at end of file From c5b52849b1cc2f5633dc513461ecb772de0ff4ba Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Sun, 20 Mar 2022 01:57:56 -0400 Subject: [PATCH 22/22] Saving the blob instead of deleting it Saves the blob instead of deleting it! --- .../human/species/station/prometheans_vr.dm | 8 ++- .../human/species/station/prommie_blob.dm | 62 ++++++++++++++----- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index 66543b70a80..fd040e64dd9 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -16,10 +16,9 @@ spawn_flags = SPECIES_CAN_JOIN wikilink="https://wiki.vore-station.net/Promethean" genders = list(MALE, FEMALE, PLURAL, NEUTER) - color_mult = 1 mob_size = MOB_MEDIUM //As of writing, original was MOB_SMALL - Allows normal swapping - + //var/mob/living/simple_mob/slime/promethean/stored_blob = null appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR inherent_verbs = list( @@ -56,7 +55,7 @@ prommie_outofblob(temporary_form) */ //Human form - else if(stat) + else if(stat || paralysis || stunned || weakened || restrained()) to_chat(src,"You can only do this while not stunned.") return else @@ -70,6 +69,9 @@ H.forceMove(H.temporary_form.drop_location()) H.ckey = H.temporary_form.ckey QDEL_NULL(H.temporary_form) + //else if(H.stored_blob) // Should prevent phantom blobs in the aether. I don't anticipate this being an issue, but if it is just uncomment. + // qdel(stored_blob) + // stored_blob = null spawn(1) if(H) 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 0f59fdb8729..5ec9a83bb71 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 @@ -68,6 +68,12 @@ set_light(0) return ..() +/mob/living/carbon/human/Destroy() + if(stored_blob) + stored_blob = null + qdel(stored_blob) + return ..() + /mob/living/simple_mob/slime/promethean/Stat() ..() if(humanform) @@ -79,6 +85,11 @@ set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color) else set_light(0) + update_icon() + + if(!humanform) // If we somehow have a blob with no human, lets just clean up. + log_debug("Cleaning up blob with no prommie!") + qdel(src) return //Constructor allows passing the human to sync damages @@ -89,7 +100,7 @@ updatehealth() else - update_icon() + qdel(src) /mob/living/simple_mob/slime/promethean/updatehealth() if(!humanform) @@ -228,7 +239,7 @@ //Blob form if(!ishuman(src)) - if(humanform.temporary_form.stat) + if(humanform.temporary_form.stat || paralysis || stunned || weakened || restrained()) to_chat(src,"You can only do this while not stunned.") else humanform.prommie_outofblob(src) @@ -242,7 +253,7 @@ if(stat || world.time < last_special) return - last_special = world.time + 50 + last_special = world.time + 25 if(is_wide) is_wide = FALSE @@ -262,7 +273,7 @@ if(stat || world.time < last_special) return - last_special = world.time + 50 + last_special = world.time + 25 if(shiny) shiny = FALSE @@ -281,7 +292,7 @@ if(stat || world.time < last_special) return - last_special = world.time + 50 + last_special = world.time + 25 var/new_skin = input(usr, "Please select a new body color.", "Shapeshifter Colour", color) as null|color if(!new_skin) @@ -303,7 +314,8 @@ var/list/fulllist = _slime_default_emotes fulllist += default_emotes return fulllist - +/mob/living/carbon/human + var/mob/living/simple_mob/slime/promethean/stored_blob = null // Helpers - Unsafe, WILL perform change. /mob/living/carbon/human/proc/prommie_intoblob(force) if(!force && !isturf(loc)) @@ -323,9 +335,16 @@ //Record where they should go var/atom/creation_spot = drop_location() - + var/mob/living/simple_mob/slime/promethean/blob = null //Create our new blob - var/mob/living/simple_mob/slime/promethean/blob = new(creation_spot,src) + if(!stored_blob) + blob = new(creation_spot,src) + blob.mood = ":3" + qdel(blob.ai_holder) + blob.ai_holder = null + else + blob = stored_blob + blob.forceMove(creation_spot) //Drop all our things var/list/things_to_drop = contents.Copy() @@ -361,14 +380,14 @@ if(r_hand) blob.prev_right_hand = r_hand //Put our owner in it (don't transfer var/mind) - qdel(blob.ai_holder) - - blob.ai_holder = null + blob.Weaken(2) + blob.transforming = TRUE blob.ckey = ckey + blob.transforming = FALSE blob.name = name blob.nutrition = nutrition blob.color = rgb(r_skin, g_skin, b_skin) - blob.mood = ":3" + playsound(src.loc, "sound/effects/slime_squish.ogg", 15) if(radiation > 0) blob.rad_glow = CLAMP(radiation,0,250) set_light(0) @@ -377,11 +396,11 @@ if(has_hat) blob.hat = new_hat new_hat.forceMove(src) + blob.update_icon() blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not. blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name. temporary_form = blob - //Mail them to nullspace moveToNullspace() @@ -431,7 +450,12 @@ forceMove(reform_spot) //Put our owner in it (don't transfer var/mind) + Weaken(2) + playsound(src.loc, "sound/effects/slime_squish.ogg", 15) + transforming = TRUE ckey = blob.ckey + transforming = FALSE + blob.name = "Promethean Blob" var/obj/item/hat = blob.hat blob.drop_hat() drop_from_inventory(hat) // Hat me baby @@ -460,7 +484,15 @@ Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. //Get rid of friend blob - qdel(blob) + stored_blob = blob + blob.set_light(0) + blob.moveToNullspace() + //qdel(blob) //Return ourselves in case someone wants it - return src \ No newline at end of file + return src + +/mob/living/simple_mob/slime/promethean/examine(mob/user) + . = ..() + if(hat) + . += "They are wearing \a [hat]." \ No newline at end of file