Skip to content

Commit

Permalink
[DNM]Oozling qol fixes (#4343)
Browse files Browse the repository at this point in the history
* Restores Oozling wetness system. Bring a Towel.
-Restores dormant Oozling wetness system
-Makes wetness affect unconscious Oozlings.
-Removes flat bloodloss from getting wet.

* Oozling core gps Fix
-Fixes bug where core still broadcasting after crushing
-Fixes bug being unable to crush a core with a off gps
-Adds a bit of flavor text for crushing cores with off gps

* fix: Dup/Del Bug with chasms.
- Ensures items are properly transferred to the core to prevent conflicts between overlapping movement mechanics. e.g. Chasms

* fix: Limb implants being voided when dismemebered
-If the limb has an implant it will drop them to the floor instead of voiding it.

* Readds oozling melting from touch water sources.

* fix: Chest and Cavity implants. Revive visual bug
-Implants that go into the chest now drop unpon revival
-Cavity implant objects now drop unpon revival
-Fixes visual bugs caused by reviving a oozling core
-Minor grammar fixes

* Restores Oozling healing and tones it down
-Restores oozlings healing ability from plasma
-Heals 2.5 shared between heal and brute
-Healing is disabled by hydrophobia or if Oozlings skin reaches cold limit

* Refactor item core storage system
-General refactoring
-Added filters for banned items and allowed implants and organs
-Fixes bug with Nuclear Authentation Disk. Resolve other protected items with the banned items list.

* Allows external organs to be stored and saved
-External features (Not Anime Traits) such as tails wings antenna will be removed and stored in the core

* fix: Core can now case and store injector implants
-Oozling cores now recase injector implants before storing
-Minor fixes

* add: Oozlings scream and jitter upon revive

* fix: Resolves (#4219)

* Minor text fix

* Removes hyno plasma remineder when souless.

* fix:Legions absorb oozling core and drops on death

* Should make gibbing deaths delete the core

* Fix Oozling ability status effects remaining

* Refix eyesight repair clean up from #4584

* For code testing

* Refactored core item proccessing. Deep item filter

* Fixes quirk item duplications and rerolls

* Fixes hydrophobia blocking touch water

* bal moves revival effects to nugget revivals

* Properly removes and fixes blindess.

* Revival limb removal refeactor.
	-Moves the slime blood drop from drop_limb to dismemberment
	-nugget revival now uses drop_limb allowing for the body and UI to update properly.
	-head decapitations now drop contents except normal eyes
	-makes revival compatable with bright eyes. No more duping eyes.

* Various small fixes picked 09cc588 from PR #4269

* Quick compat fix for TM #4642
  • Loading branch information
Coll6 authored Dec 29, 2024
1 parent 3b4bf2b commit 7441a7a
Show file tree
Hide file tree
Showing 10 changed files with 269 additions and 90 deletions.
3 changes: 3 additions & 0 deletions code/modules/mob/living/basic/lavaland/legion/legion.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@

/mob/living/basic/mining/legion/death(gibbed)
if (isnull(stored_mob))
for(var/obj/item/organ/internal/brain/slime in contents) // If oozling brain in contents eject instead of corpse.
slime.forceMove(get_turf(slime))
return ..()
new corpse_type(loc)
return ..()

Expand Down
4 changes: 0 additions & 4 deletions code/modules/reagents/chemistry/reagents/other_reagents.dm
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,6 @@
*/
/datum/reagent/water/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume)//Splashing people with water can help put them out!
. = ..()
if(isoozeling(exposed_mob))
exposed_mob.blood_volume = max(exposed_mob.blood_volume - 30, 0)
to_chat(exposed_mob, span_warning("The water causes you to melt away!"))
return
if(methods & TOUCH)
exposed_mob.extinguish_mob() // extinguish removes all fire stacks
exposed_mob.adjust_wet_stacks(reac_volume * WATER_TO_WET_STACKS_FACTOR_TOUCH) // Water makes you wet, at a 50% water-to-wet-stacks ratio. Which, in turn, gives you some mild protection from being set on fire!
Expand Down
20 changes: 17 additions & 3 deletions code/modules/surgery/bodyparts/dismemberment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
if (wounding_type)
LAZYSET(limb_owner.body_zone_dismembered_by, body_zone, wounding_type)

if((limb_id == SPECIES_OOZELING))
to_chat(limb_owner, span_warning("Your [src] splatters with an unnerving squelch!"))
playsound(limb_owner, 'sound/effects/blobattack.ogg', 60, TRUE)
limb_owner.blood_volume -= 60 //Makes for 120 when you regenerate it. monkeedit it actually it costs 100 limbs are 40 right now.

drop_limb()

limb_owner.update_equipment_speed_mods() // Update in case speed affecting item unequipped by dismemberment
Expand Down Expand Up @@ -136,9 +141,18 @@
return

if((limb_id == SPECIES_OOZELING) && !special)
to_chat(phantom_owner, span_warning("Your [src] splatters with an unnerving squelch!"))
playsound(phantom_owner, 'sound/effects/blobattack.ogg', 60, TRUE)
phantom_owner.blood_volume -= 60 //Makes for 120 when you regenerate it.
if(deprecise_zone(src.body_zone) in list(BODY_ZONE_HEAD, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG ))
var/list/limborgans = src.contents
if(limborgans) //Handle implants dropping when limb is dismembered
for(var/obj/item/organ/lmbimplant in limborgans)
lmbimplant.forceMove(drop_loc)
if(istype(lmbimplant, /obj/item/organ/internal/eyes)) // The eye slot is going to be some type of eyes right?
if(lmbimplant.type == /obj/item/organ/internal/eyes) // but we don't want to to drop oozlings natural eyes. Do the proper species check for eyes.
qdel(lmbimplant)
continue
var/obj/item/bodypart/head/oozeling/oozhead = src
oozhead.eyes = null // Need this otherwise qdel on head deletes the eyes.
to_chat(phantom_owner, span_notice("Something small falls out the [src]."))
qdel(src)
return

Expand Down
2 changes: 1 addition & 1 deletion code/modules/surgery/organs/internal/tongue/_tongue.dm
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
name = "jelly tongue"
desc = "Ah... That's not the sound I expected it to make. Sounds like a Space Autumn Bird."
say_mod = "chirps"
liked_foodtypes = MEAT | BUGS
liked_foodtypes = MEAT | BUGS | TOXIC
disliked_foodtypes = GROSS
toxic_foodtypes = NONE

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,10 @@
else if(istype(sacrifice_candidate, /obj/item/organ/internal/brain/slime))
var/obj/item/organ/internal/brain/slime/core = sacrifice_candidate
sacrifice = core.rebuild_body(nugget = FALSE)
selected_atoms -= core
break
if(!sacrifice && core.brainmob)
sacrifice = core.brainmob
selected_atoms -= core
break
if(!sacrifice)
CRASH("[type] sacrifice_process didn't have a human in the atoms list. How'd it make it so far?")
if(!heretic_datum.can_sacrifice(sacrifice))
Expand All @@ -199,7 +201,13 @@
heretic_datum.remove_sacrifice_target(sacrifice)

var/feedback = "Your patrons accept your offer"
var/sac_department_flag = sacrifice.mind?.assigned_role?.departments_bitflags | sacrifice.last_mind?.assigned_role?.departments_bitflags
var/sac_department_flag = 0

if(sacrifice.mind)
sac_department_flag |= sacrifice.mind.assigned_role?.departments_bitflags
if(istype(sacrifice, /mob/living/carbon/human) && sacrifice.last_mind) // If mob even has a last mind. Oozling issue.
sac_department_flag |= sacrifice.last_mind.assigned_role?.departments_bitflags

if(sac_department_flag & DEPARTMENT_BITFLAG_COMMAND)
heretic_datum.knowledge_points++
heretic_datum.high_value_sacrifices++
Expand All @@ -209,10 +217,20 @@
heretic_datum.total_sacrifices++
heretic_datum.knowledge_points += 2

sacrifice.apply_status_effect(/datum/status_effect/heretic_curse, user)
if(!istype(sacrifice, /mob/living/carbon/human))
notify_ghosts( // Sorry for copy paste. Trying to keep consistency
"[heretic_mind.name] has sacrificed [sacrifice] to the Mansus!",
source = sacrifice,
action = NOTIFY_ORBIT,
notify_flags = NOTIFY_CATEGORY_NOFLASH,
header = "Oozling core Sacrificed to Mansus.",
)
log_combat(heretic_mind.current, sacrifice, "sacrificed")
else
sacrifice.apply_status_effect(/datum/status_effect/heretic_curse, user)

if(!begin_sacrifice(sacrifice))
disembowel_target(sacrifice)
if(!begin_sacrifice(sacrifice))
disembowel_target(sacrifice)

/**
* This proc is called from [proc/sacrifice_process] after the heretic successfully sacrifices [sac_target].)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#define DAMAGE_WATER_STACKS 5
#define REGEN_WATER_STACKS 1
#define HEALTH_HEALED 2.5

/datum/species/oozeling
name = "\improper Oozeling"
Expand Down Expand Up @@ -87,8 +88,6 @@

/datum/species/oozeling/spec_life(mob/living/carbon/human/slime, seconds_per_tick, times_fired)
. = ..()
if(slime.stat != CONSCIOUS)
return

var/datum/status_effect/fire_handler/wet_stacks/wetness = locate() in slime.status_effects
if(HAS_TRAIT(slime, TRAIT_SLIME_HYDROPHOBIA))
Expand All @@ -99,10 +98,21 @@
slime.visible_message(span_danger("[slime]'s form begins to lose cohesion, seemingly diluting with the water!"), span_warning("The water starts to dilute your body, dry it off!"))

if(istype(wetness) && wetness.stacks > (REGEN_WATER_STACKS))
if (SPT_PROB(25, seconds_per_tick))
to_chat(slime, span_warning("You can't pull your body together and regenerate with water inside it!"))
if (SPT_PROB(25, seconds_per_tick)) //Used for old healing system. Maybe use later? For now increase loss for being soaked.
//to_chat(slime, span_warning("You can't pull your body together and regenerate with water inside it!"))
to_chat(slime, span_warning("You can't pull your body together it is dripping wet!"))
slime.blood_volume -= 1 * seconds_per_tick

//////
/// DEATH OF BODY SECTION
/// Handles gibbing

/datum/species/oozeling/spec_death(gibbed, mob/living/carbon/human/H)
. = ..()

if(gibbed)
H.dna = null

///////
/// CHEMICAL HANDLING
/// Here's where slimes heal off plasma and where they hate drinking water.
Expand All @@ -118,9 +128,17 @@
ORGAN_SLOT_EARS,
)
if(chem.type == /datum/reagent/toxin/plasma || chem.type == /datum/reagent/toxin/hot_ice)
for(var/datum/wound/iter_wound as anything in slime.all_wounds)
iter_wound.on_xadone(4 * REM * seconds_per_tick)
slime.reagents.remove_reagent(chem.type, min(chem.volume * 0.22, 10))
var/brute_damage = slime.get_current_damage_of_type(damagetype = BRUTE)
var/burn_damage = slime.get_current_damage_of_type(damagetype = BURN)
var/remaining_heal = HEALTH_HEALED
if(brute_damage + burn_damage > 0)
if(!HAS_TRAIT(slime, TRAIT_SLIME_HYDROPHOBIA) && slime.get_skin_temperature() > slime.bodytemp_cold_damage_limit)
// Make sure to double check this later.
remaining_heal -= abs(slime.heal_damage_type(rand(0, remaining_heal) * REM * seconds_per_tick, BRUTE))
slime.heal_damage_type(remaining_heal * REM * seconds_per_tick, BURN)
slime.reagents.remove_reagent(chem.type, min(chem.volume * 0.22, 10))
else
to_chat(slime, span_purple("Your membrane is too viscous to mend its wounds"))
if(slime.blood_volume > BLOOD_VOLUME_SLIME_SPLIT)
slime.adjustOrganLoss(
pick(organs_we_mend),
Expand All @@ -140,6 +158,16 @@

return ..()

/datum/reagent/water/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume)
//Flat blood loss damage from being touched by water
. = ..()

if(isoozeling(exposed_mob))
if(HAS_TRAIT(exposed_mob, TRAIT_SLIME_HYDROPHOBIA))
to_chat(exposed_mob, span_warning("Water splashes against your oily membrane and rolls right off your body!"))
return
exposed_mob.blood_volume = max(exposed_mob.blood_volume - 30, 0)
to_chat(exposed_mob, span_warning("The water causes you to melt away!"))

/datum/reagent/toxin/slimeooze
name = "Slime Ooze"
Expand Down Expand Up @@ -172,7 +200,7 @@
list(
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
SPECIES_PERK_ICON = "burn",
SPECIES_PERK_NAME = "incombustible",
SPECIES_PERK_NAME = "Incombustible",
SPECIES_PERK_DESC = "[plural_form] cannot be set aflame.",
),
list(
Expand All @@ -190,8 +218,8 @@
list(
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
SPECIES_PERK_ICON = "tint",
SPECIES_PERK_NAME = "Liquid Being",
SPECIES_PERK_DESC = "[plural_form] will melt away when in contact with water.",
SPECIES_PERK_NAME = "Water Soluble",
SPECIES_PERK_DESC = "[plural_form] will dissolve away when in contact with water.",
),
list(
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
Expand Down
52 changes: 9 additions & 43 deletions monkestation/code/modules/smithing/oozelings/actions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
user.remove_status_effect(/datum/status_effect/slime_washing)
user.visible_message(span_notice("[user]'s outer membrane returns to normal, no longer cleaning [user.p_their()] surroundings."), span_notice("Your outer membrane returns to normal, filth no longer being cleansed."))

/datum/action/cooldown/spell/slime_washing/Remove(mob/living/remove_from) // If we lose the spell make sure to remove its effects
. = ..()
if(remove_from.has_status_effect(/datum/status_effect/slime_washing))
remove_from.remove_status_effect(/datum/status_effect/slime_washing)

/datum/status_effect/slime_washing
id = "slime_washing"
alert_type = null
Expand Down Expand Up @@ -103,50 +108,11 @@
/datum/status_effect/slime_hydrophobia/get_examine_text()
return span_notice("[owner.p_They()] is oozing out an oily coating onto [owner.p_their()] outer membrane, water rolling right off.")


/// REGENERATE LIMBS
/datum/action/innate/regenerate_limbs
name = "Regenerate Limbs"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "slimeheal"
button_icon = 'icons/mob/actions/actions_slime.dmi'
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"

/datum/action/innate/regenerate_limbs/IsAvailable(feedback = FALSE)
/datum/action/cooldown/spell/slime_hydrophobia/Remove(mob/living/remove_from) // If we lose the spell make sure to remove its effects
. = ..()
if(!.)
return
var/mob/living/carbon/human/H = owner
var/list/limbs_to_heal = H.get_missing_limbs()
if(!length(limbs_to_heal))
return FALSE
if(H.blood_volume >= BLOOD_VOLUME_OKAY+40)
return TRUE

/datum/action/innate/regenerate_limbs/Activate()
var/mob/living/carbon/human/H = owner
var/list/limbs_to_heal = H.get_missing_limbs()
if(!length(limbs_to_heal))
to_chat(H, span_notice("You feel intact enough as it is."))
return
to_chat(H, span_notice("You focus intently on your missing [length(limbs_to_heal) >= 2 ? "limbs" : "limb"]..."))
if(H.blood_volume >= 40*length(limbs_to_heal)+BLOOD_VOLUME_OKAY)
H.regenerate_limbs()
H.blood_volume -= 40*length(limbs_to_heal)
to_chat(H, span_notice("...and after a moment you finish reforming!"))
return
else if(H.blood_volume >= 40)//We can partially heal some limbs
while(H.blood_volume >= BLOOD_VOLUME_OKAY+40)
var/healed_limb = pick(limbs_to_heal)
H.regenerate_limb(healed_limb)
var/obj/item/bodypart/limb = H.get_bodypart(healed_limb)
limb.update_disabled() // we toggle these
limbs_to_heal -= healed_limb
H.blood_volume -= 40
to_chat(H, span_warning("...but there is not enough of you to fix everything! You must attain more mass to heal completely!"))
return
to_chat(H, span_warning("...but there is not enough of you to go around! You must attain more mass to heal!"))
if(remove_from.has_status_effect(/datum/status_effect/slime_hydrophobia))
REMOVE_TRAIT(remove_from, TRAIT_SLIME_HYDROPHOBIA, ACTION_TRAIT)
remove_from.remove_status_effect(/datum/status_effect/slime_hydrophobia)

/**
* Toggle Death Signal simply adds and removes the trait required for slimepeople to transmit a GPS signal upon core ejection.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
icon_greyscale = 'monkestation/icons/mob/species/oozeling/bodyparts.dmi'
limb_id = SPECIES_OOZELING
biological_state = BIO_INORGANIC

dmg_overlay_type = null
composition_effects = list(/datum/element/soft_landing = 0.5)
palette = /datum/color_palette/generic_colors
palette_key = MUTANT_COLOR
Expand Down
Loading

0 comments on commit 7441a7a

Please sign in to comment.