diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 9425f43a79a..e6a132b91bb 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -126,7 +126,7 @@ #define ORGAN_SLOT_LIVER "liver" #define ORGAN_SLOT_LUNGS "lungs" #define ORGAN_SLOT_PARASITE_EGG "parasite_egg" -#define ORGAN_SLOT_REGENERATIVE_CORE "hivecore" +#define ORGAN_SLOT_MONSTER_CORE "monstercore" #define ORGAN_SLOT_RIGHT_ARM_AUG "r_arm_device" #define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" //This one ignores alphabetical order cause the arms should be together #define ORGAN_SLOT_STOMACH "stomach" @@ -197,7 +197,7 @@ GLOBAL_LIST_INIT(organ_process_order, list( ORGAN_SLOT_BRAIN_ANTIDROP, ORGAN_SLOT_BRAIN_ANTISTUN, ORGAN_SLOT_PARASITE_EGG, - ORGAN_SLOT_REGENERATIVE_CORE, + ORGAN_SLOT_MONSTER_CORE, ORGAN_SLOT_XENO_PLASMAVESSEL, ORGAN_SLOT_XENO_HIVENODE, ORGAN_SLOT_XENO_RESINSPINNER, diff --git a/code/game/objects/effects/spawners/random/medical.dm b/code/game/objects/effects/spawners/random/medical.dm index af56c76ea6c..21fdcc2ad97 100644 --- a/code/game/objects/effects/spawners/random/medical.dm +++ b/code/game/objects/effects/spawners/random/medical.dm @@ -34,7 +34,9 @@ /obj/item/organ/internal/heart/gland/slime = 4, /obj/item/organ/internal/heart/gland/trauma = 4, /obj/item/organ/internal/heart/gland/electric = 3, - /obj/item/organ/internal/regenerative_core = 2, + /obj/item/organ/internal/monster_core/regenerative_core = 2, + /obj/item/organ/internal/monster_core/rush_gland = 2, + /obj/item/organ/internal/monster_core/brimdust_sac = 2, /obj/item/organ/internal/heart/gland/ventcrawling = 1, /obj/item/organ/internal/body_egg/alien_embryo = 1, ) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 2b1d10db0cc..1f55c9d75ef 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -405,13 +405,13 @@ /obj/item/extinguisher/mini, /obj/item/flashlight, /obj/item/gps, - /obj/item/hivelordstabilizer, + /obj/item/mining_stabilizer, /obj/item/key/lasso, /obj/item/knife, /obj/item/lighter, /obj/item/mining_scanner, /obj/item/multitool, - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core, /obj/item/pickaxe, /obj/item/radio, /obj/item/reagent_containers/cup/glass, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm index f88b0276493..0b4b3135163 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm @@ -107,7 +107,7 @@ time = 40 reqs = list( /obj/item/food/meat/steak/goliath = 1, - /obj/item/organ/internal/regenerative_core/legion = 1, + /obj/item/organ/internal/monster_core/regenerative_core/legion = 1, /datum/reagent/consumable/ketchup = 2, /datum/reagent/consumable/capsaicin = 2 ) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index db5ce0459e8..613b4f5c947 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -99,7 +99,7 @@ /obj/item/flashlight, /obj/item/knife/combat/bone, /obj/item/knife/combat/survival, - /obj/item/organ/internal/regenerative_core/legion, + /obj/item/organ/internal/monster_core, /obj/item/pickaxe, /obj/item/spear, /obj/item/tank/internals, diff --git a/code/modules/mining/equipment/monster_organs/brimdust_sac.dm b/code/modules/mining/equipment/monster_organs/brimdust_sac.dm new file mode 100644 index 00000000000..9c15616e7db --- /dev/null +++ b/code/modules/mining/equipment/monster_organs/brimdust_sac.dm @@ -0,0 +1,183 @@ +/** + * Gives you three stacks of Brimdust Coating, when you get hit by anything it will make a short ranged explosion. + * If this happens on the station it also sets you on fire. + * If implanted, you can shake off a cloud of brimdust to give this buff to people around you.area + * I you have this inside you on the station and you catch fire it explodes. + */ +/obj/item/organ/internal/monster_core/brimdust_sac + name = "brimdust sac" + desc = "A strange organ from a brimdemon. You can shake it out to coat yourself in explosive powder." + icon_state = "brim_sac" + icon_state_preserved = "brim_sac_stable" + icon_state_inert = "brim_sac_decayed" + desc_preserved = "A strange organ from a brimdemon. It is preserved, allowing you to coat yourself in its explosive contents at your leisure." + desc_inert = "A decayed brimdemon organ. There's nothing usable left inside it." + user_status = /datum/status_effect/stacking/brimdust_coating + actions_types = list(/datum/action/cooldown/monster_core_action/exhale_brimdust) + +/obj/item/organ/internal/monster_core/brimdust_sac/Initialize(mapload) + . = ..() + AddComponent(/datum/component/explodable, light_impact_range = 1) + +/obj/item/organ/internal/monster_core/brimdust_sac/on_life(delta_time, times_fired) + . = ..() + if(!owner.on_fire) + return + if(lavaland_equipment_pressure_check(get_turf(owner))) + return + explode_organ() + +/// Your gunpowder organ blows up, uh oh +/obj/item/organ/internal/monster_core/brimdust_sac/proc/explode_organ() + owner.visible_message(span_boldwarning("[owner]'s chest bursts open as something inside ignites!")) + var/turf/origin_turf = get_turf(owner) + playsound(origin_turf, 'sound/effects/pop_expl.ogg', 100) + new /obj/effect/temp_visual/explosion/fast(origin_turf) + owner.Paralyze(5 SECONDS) + + for(var/mob/living/target in range(1, origin_turf)) + var/armor = target.run_armor_check(attack_flag = BOMB) + target.apply_damage(15, damagetype = BURN, blocked = armor, spread_damage = TRUE) + + owner.apply_damage(15, damagetype = BRUTE, def_zone = BODY_ZONE_CHEST) + var/obj/item/bodypart/chest/torso = owner.get_bodypart(BODY_ZONE_CHEST) + torso.force_wound_upwards(/datum/wound/burn/severe) + owner.emote("scream") + qdel(src) + +/// Make a cloud which applies brimdust to everyone nearby +/obj/item/organ/internal/monster_core/brimdust_sac/trigger_organ_action() + var/turf/origin_turf = get_turf(owner) + do_smoke(range = 2, holder = owner, location = origin_turf, smoke_type = /obj/effect/particle_effect/fluid/smoke/bad/brimdust) + +/// Smoke which applies brimdust to you, and is also bad for your lungs +/obj/effect/particle_effect/fluid/smoke/bad/brimdust + lifetime = 5 SECONDS + color = "#383838" + +/obj/effect/particle_effect/fluid/smoke/bad/brimdust/smoke_mob(mob/living/carbon/smoker) + if(!istype(smoker)) + return FALSE + if(lifetime < 1) + return FALSE + if(smoker.smoke_delay) + return FALSE + smoker.apply_status_effect(/datum/status_effect/stacking/brimdust_coating) + return ..() + +/** + * If you take brute damage with this buff, hurt and push everyone next to you. + * If you catch fire and or on the space station, detonate all remaining stacks in a way which hurts you. + * Washes off if you get wet. + */ +/datum/status_effect/stacking/brimdust_coating + id = "brimdust_coating" + stacks = 3 + max_stacks = 3 + tick_interval = -1 + consumed_on_threshold = FALSE + alert_type = /atom/movable/screen/alert/status_effect/brimdust_coating + /// Damage to deal on explosion + var/blast_damage = 40 + /// Damage reduction when not in a mining pressure area + var/pressure_modifier = 0.25 + /// Time to wait between consuming stacks + var/delay_between_explosions = 5 SECONDS + /// Cooldown between explosions + COOLDOWN_DECLARE(explosion_cooldown) + /// Overlay effect added to mob when buff is present + var/mutable_appearance/dust_overlay + +/atom/movable/screen/alert/status_effect/brimdust_coating + name = "Brimdust Coating" + desc = "You %STACKS% explosive dust, kinetic impacts will cause it to detonate! \ + The explosion will not harm you as long as you're not under atmospheric pressure." + +/atom/movable/screen/alert/status_effect/brimdust_coating/MouseEntered(location,control,params) + desc = initial(desc) + var/datum/status_effect/stacking/brimdust_coating/dust = attached_effect + var/dust_amount_string + switch(dust.stacks) + if (3) + dust_amount_string = "are heavily caked in" + if (2) + dust_amount_string = "have a generous coating of" + if (1) + dust_amount_string = "are lightly sprinkled with" + + desc = replacetext(desc, "%STACKS%", dust_amount_string) + return ..() + +/datum/status_effect/stacking/brimdust_coating/add_stacks(stacks_added) + . = ..() + if (stacks == 0) + return + linked_alert.icon_state = "brimdemon_[stacks]" + +/datum/status_effect/stacking/brimdust_coating/on_creation(mob/living/new_owner, stacks_to_apply) + . = ..() + linked_alert?.icon_state = "brimdemon_[stacks]" + +/datum/status_effect/stacking/brimdust_coating/on_apply() + . = ..() + + dust_overlay = mutable_appearance('icons/effects/weather_effects.dmi', "ash_storm") + dust_overlay.blend_mode = BLEND_INSET_OVERLAY + owner.add_overlay(dust_overlay) + RegisterSignal(owner, COMSIG_COMPONENT_CLEAN_ACT, .proc/on_cleaned) + RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, .proc/on_take_damage) + +/datum/status_effect/stacking/brimdust_coating/on_remove() + . = ..() + owner.cut_overlay(dust_overlay) + UnregisterSignal(owner, list(COMSIG_MOB_APPLY_DAMAGE, COMSIG_COMPONENT_CLEAN_ACT)) + +/// When you are cleaned, wash off the buff +/datum/status_effect/stacking/brimdust_coating/proc/on_cleaned() + SIGNAL_HANDLER + owner.remove_status_effect(/datum/status_effect/stacking/brimdust_coating) + return COMPONENT_CLEANED + +/// When you take brute damage, schedule an explosion +/datum/status_effect/stacking/brimdust_coating/proc/on_take_damage(datum/source, damage, damagetype) + SIGNAL_HANDLER + if(damagetype != BRUTE) + return + if(!COOLDOWN_FINISHED(src, explosion_cooldown)) + return + owner.visible_message(span_boldwarning("The brimstone dust surrounding [owner] ignites!")) + addtimer(CALLBACK(src, .proc/explode), 0.25 SECONDS) + COOLDOWN_START(src, explosion_cooldown, delay_between_explosions) + +/** + * Hurts everything in a circle around you. Hurts less if in a pressurised environment. + */ +/datum/status_effect/stacking/brimdust_coating/proc/explode() + var/turf/origin_turf = get_turf(owner) + playsound(origin_turf, 'sound/effects/pop_expl.ogg', 50) + new /obj/effect/temp_visual/explosion/fast(origin_turf) + + var/under_pressure = !lavaland_equipment_pressure_check(origin_turf) + var/damage_dealt = blast_damage + if(under_pressure) + damage_dealt *= pressure_modifier + + var/list/possible_targets = range(1, origin_turf) + if(!under_pressure) + possible_targets -= owner + for(var/mob/living/target in possible_targets) + var/armor = target.run_armor_check(attack_flag = BOMB) + target.apply_damage(damage_dealt, damagetype = BURN, blocked = armor, spread_damage = TRUE) + + if(under_pressure) + owner.adjust_fire_stacks(5) + owner.ignite_mob() + add_stacks(-1) + +/// Action used by the rush gland +/datum/action/cooldown/monster_core_action/exhale_brimdust + name = "Exhale Brimdust" + desc = "Cough out a cloud of explosive brimdust to coat those nearby. \ + This organ and the dust it produces are extremely flammable under atmospheric pressure." + button_icon_state = "brim_sac_stable" + cooldown_time = 3 MINUTES diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm new file mode 100644 index 00000000000..0562c416d67 --- /dev/null +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -0,0 +1,211 @@ +/** + * Stabilising serum prevents monster organs from decaying before you can use them. + */ +/obj/item/mining_stabilizer + name = "stabilizing serum" + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "bottle19" + desc = "Inject certain types of monster organs with this stabilizer to prevent their rapid decay." + w_class = WEIGHT_CLASS_TINY + +/obj/item/mining_stabilizer/afterattack(obj/item/organ/target_organ, mob/user, proximity) + . = ..() + if (!proximity) + return + var/obj/item/organ/internal/monster_core/target_core = target_organ + if (!istype(target_core, /obj/item/organ/internal/monster_core)) + balloon_alert(user, "invalid target!") + return + + if (!target_core.preserve()) + balloon_alert(user, "organ decayed!") + return + + balloon_alert(user, "organ stabilized") + qdel(src) + +/** + * Useful organs which drop as loot from a mining creature. + * Generalised behaviour is that they will decay and become useless unless provided with serum. + * These should usually do something both when used in-hand, or when implanted into someone. + */ +/obj/item/organ/internal/monster_core + name = "monster core" + desc = "All that remains of a monster. This abstract item should not spawn. \ + It will rapidly decay into uselessness. but don't worry because it's already useless." + icon = 'icons/obj/medical/organs/mining_organs.dmi' + icon_state = "hivelord_core" + actions_types = list(/datum/action/cooldown/monster_core_action) + visual = FALSE + item_flags = NOBLUDGEON + slot = ORGAN_SLOT_MONSTER_CORE + organ_flags = NONE + force = 0 + /// Set to true if this organ has decayed into uselessness. + var/inert = FALSE + /// ID of the timer which will decay this organ + var/decay_timer + /// Time after which organ should become useless + var/time_to_decay = 4 MINUTES + /// Icon state to apply when preserved + var/icon_state_preserved + /// Description to use once organ has been preserved + var/desc_preserved + /// Icon state to apply when inert + var/icon_state_inert + /// Description to use once organ is inert + var/desc_inert + /// Status effect applied by this organ + var/datum/status_effect/user_status + +/obj/item/organ/internal/monster_core/Initialize(mapload) + . = ..() + decay_timer = addtimer(CALLBACK(src, .proc/go_inert), time_to_decay, TIMER_STOPPABLE) + +/obj/item/organ/internal/monster_core/Destroy(force, silent) + deltimer(decay_timer) + return ..() + +/obj/item/organ/internal/monster_core/Insert(mob/living/carbon/target_carbon, special = 0, drop_if_replaced = TRUE) + . = ..() + if (!.) + return + if (inert) + to_chat(owner, span_notice("[src] breaks down as you try to insert it.")) + qdel(src) + return FALSE + if (!decay_timer) + return TRUE + preserve(TRUE) + owner.visible_message(span_notice("[src] stabilizes as it's inserted.")) + return TRUE + +/obj/item/organ/internal/monster_core/Remove(mob/living/carbon/target_carbon, special = 0) + if (!inert && !special) + owner.visible_message(span_notice("[src] rapidly decays as it's removed.")) + go_inert() + return ..() + +/** + * Preserves the organ so that it will not decay. + * Returns true if successful. + * * Implanted - If true, organ has just been inserted into someone. + */ +/obj/item/organ/internal/monster_core/proc/preserve(implanted = FALSE) + if (inert) + return FALSE + deltimer(decay_timer) + decay_timer = null + update_appearance() + return TRUE + +/** + * Decays the organ, it is now useless. + */ +/obj/item/organ/internal/monster_core/proc/go_inert() + if (inert) + return FALSE + inert = TRUE + deltimer(decay_timer) + decay_timer = null + name = "decayed [name]" + update_appearance() + return TRUE + +/obj/item/organ/internal/monster_core/update_desc() + if (inert) + desc = desc_inert ? desc_inert : initial(desc) + return ..() + if (!decay_timer) + desc = desc_preserved ? desc_preserved : initial(desc) + return ..() + desc = initial(desc) + return ..() + +/obj/item/organ/internal/monster_core/update_icon_state() + if (inert) + icon_state = icon_state_inert ? icon_state_inert : initial(icon_state) + return ..() + if (!decay_timer) + icon_state = icon_state_preserved ? icon_state_preserved : initial(icon_state) + return ..() + icon_state = initial(icon_state) + return ..() + +/obj/item/organ/internal/monster_core/afterattack(atom/target, mob/user, proximity_flag) + . = ..() + if (!proximity_flag) + return + try_apply(target, user) + +/obj/item/organ/internal/monster_core/attack_self(mob/user) + if (!user.canUseTopic(src, be_close = TRUE, no_dexterity = FALSE, no_tk = TRUE)) + return + try_apply(user, user) + +/** + * Tries to apply organ effect to target. + * Usually you should not need to override this, only apply_to. + * Arguments + * * target - Person you are applying this to. + * * user - Person who is doing the applying. + */ +/obj/item/organ/internal/monster_core/proc/try_apply(atom/target, mob/user) + if (!isliving(target)) + balloon_alert(user, "invalid target!") + return + if (inert) + balloon_alert(user, "organ decayed!") + return + var/mob/living/live_target = target + if (live_target.stat == DEAD) + balloon_alert(user, "they're dead!") + return + balloon_alert(user, "applied organ") + apply_to(target, user) + +/** + * Applies the effect of this organ to the target. + * Arguments + * * target - Person you are applying this to. + * * user - Person who is doing the applying. + */ +/obj/item/organ/internal/monster_core/proc/apply_to(mob/living/target, mob/user) + if (user_status) + target.apply_status_effect(user_status) + qdel(src) + +/** + * Utility proc to find the associated monster organ action and trigger it. + * Call this instead of on_triggered_internal() if the action needs to trigger automatically, or the cooldown won't happen. + */ +/obj/item/organ/internal/monster_core/proc/trigger_organ_action() + var/datum/action/cooldown/monster_core_action/action = locate() in actions + action?.Trigger() + +/** + * Called when activated while implanted inside someone. + * This could be via clicking the associated action button or through the above method. + */ +/obj/item/organ/internal/monster_core/proc/on_triggered_internal() + SHOULD_CALL_PARENT(FALSE) + CRASH("Someone forgot to make their organ do something when you implant it.") + +/** + * Boilerplate to set the name and icon of the cooldown action. + * Makes it call 'ui_action_click' when the action is activated. + */ +/datum/action/cooldown/monster_core_action + check_flags = AB_CHECK_CONSCIOUS + icon_icon = 'icons/obj/medical/organs/mining_organs.dmi' + button_icon_state = "hivelord_core_2" + text_cooldown = FALSE //Looks really bad when you have minutes long cooldowns + +/datum/action/cooldown/monster_core_action/Activate(trigger_flags) + . = ..() + if (!target) + return + var/obj/item/organ/internal/monster_core/organ = target + if (!istype(organ)) + return + organ.trigger_organ_action() diff --git a/code/modules/mining/equipment/monster_organs/regenerative_core.dm b/code/modules/mining/equipment/monster_organs/regenerative_core.dm new file mode 100644 index 00000000000..4f89e66ce96 --- /dev/null +++ b/code/modules/mining/equipment/monster_organs/regenerative_core.dm @@ -0,0 +1,65 @@ +/** + * On use in hand, heals you over time and removes injury movement debuffs. Also makes you a bit sad. + * On use when implanted, fully heals. Automatically fully heals if you would enter crit. + */ +/obj/item/organ/internal/monster_core/regenerative_core + name = "regenerative core" + desc = "All that remains of a hivelord. It can be used to help keep your body going, but it will rapidly decay into uselessness." + desc_preserved = "All that remains of a hivelord. It is preserved, allowing you to use it to heal completely without danger of decay." + desc_inert = "All that remains of a hivelord. It has decayed, and is completely useless." + user_status = /datum/status_effect/regenerative_core + actions_types = list(/datum/action/cooldown/monster_core_action/regenerative_core) + icon_state = "hivelord_core" + icon_state_inert = "hivelord_core_decayed" + +/obj/item/organ/internal/monster_core/regenerative_core/preserve(implanted = FALSE) + if (implanted) + SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "implanted")) + else + SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "stabilizer")) + return ..() + +/obj/item/organ/internal/monster_core/regenerative_core/go_inert() + . = .. () + if (!.) + return + SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "inert")) + +/obj/item/organ/internal/monster_core/regenerative_core/on_life(delta_time, times_fired) + . = ..() + if (owner.health <= owner.crit_threshold) + trigger_organ_action() + +/obj/item/organ/internal/monster_core/regenerative_core/trigger_organ_action() + owner.revive(full_heal = TRUE, admin_revive = FALSE) + qdel(src) + +/// Log applications and apply moodlet. +/obj/item/organ/internal/monster_core/regenerative_core/apply_to(mob/living/target, mob/user) + target.add_mood_event("regenerative core", /datum/mood_event/healsbadman) + if (target != user) + target.visible_message(span_notice("[user] forces [target] to apply [src]... Black tendrils entangle and reinforce [target.p_them()]!")) + SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "other")) + else + to_chat(user, span_notice("You start to smear [src] on yourself. Disgusting tendrils hold you together and allow you to keep moving, but for how long?")) + SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self")) + return ..() + +/// Different graphics/desc for the lavaland legion +/obj/item/organ/internal/monster_core/regenerative_core/legion + desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness." + desc_preserved = "The core has been stabilized, allowing you to use it to heal completely without danger of decay." + desc_inert = "The core has decayed, and is completely useless." + icon_state = "legion_core" + icon_state_inert = "legion_core_decayed" + icon_state_preserved = "legion_core_stable" + +/// Action used by the regenerative core +/datum/action/cooldown/monster_core_action/regenerative_core + name = "Regenerate" + desc = "Fully regenerate your body, consuming your regenerative core in the process. \ + This process will trigger automatically if you are badly wounded." + button_icon_state = "legion_core_stable" + check_flags = NONE + +/datum/action/cooldown/monster_core_action/regenerative_core diff --git a/code/modules/mining/equipment/monster_organs/rush_gland.dm b/code/modules/mining/equipment/monster_organs/rush_gland.dm new file mode 100644 index 00000000000..c450ebe2d98 --- /dev/null +++ b/code/modules/mining/equipment/monster_organs/rush_gland.dm @@ -0,0 +1,98 @@ +/// Health under which implanted gland will automatically activate +#define HEALTH_DANGER_ZONE 30 + +/** + * On use in hand, makes you run really fast for 5 seconds and ignore injury movement decrease. + * On use when implanted, run for longer and ignore all negative movement. Automatically triggers if health is low (to escape). + */ +/obj/item/organ/internal/monster_core/rush_gland + name = "rush gland" + icon_state = "lobster_gland" + icon_state_preserved = "lobster_gland_stable" + icon_state_inert = "lobster_gland_decayed" + desc = "A lobstrosity's engorged adrenal gland. You can squeeze it to get a rush of energy on demand." + desc_preserved = "A lobstrosity's engorged adrenal gland. It is preserved, allowing you to use it for a burst of speed whenever you need it." + desc_inert = "A lobstrosity's adrenal gland. It is all shrivelled up." + user_status = /datum/status_effect/lobster_rush + actions_types = list(/datum/action/cooldown/monster_core_action/adrenal_boost) + +/obj/item/organ/internal/monster_core/rush_gland/on_life(delta_time, times_fired) + . = ..() + if (owner.health <= HEALTH_DANGER_ZONE) + trigger_organ_action() + +/obj/item/organ/internal/monster_core/rush_gland/trigger_organ_action() + owner.apply_status_effect(/datum/status_effect/lobster_rush/extended) + +/** + * Status effect: Makes you run really fast and ignore speed penalties for a short duration. + * If you run into a wall indoors you will fall over and lose the buff. + * If you run into someone you both fall over. + */ +/datum/status_effect/lobster_rush + id = "lobster_rush" + duration = 3 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/lobster_rush + var/spawned_last_move = FALSE + +/atom/movable/screen/alert/status_effect/lobster_rush + name = "Lobster Rush" + desc = "Adrenaline is surging through you!" + icon_state = "lobster" + +/datum/status_effect/lobster_rush/on_apply() + . = ..() + RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, .proc/on_move) + RegisterSignal(owner, COMSIG_MOVABLE_BUMP, .proc/on_bump) + ADD_TRAIT(owner, TRAIT_IGNORESLOWDOWN, TRAIT_STATUS_EFFECT(id)) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/lobster_rush) + to_chat(owner, span_notice("You feel your blood pumping!")) + +/datum/status_effect/lobster_rush/on_remove() + . = ..() + UnregisterSignal(owner, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_BUMP)) + REMOVE_TRAIT(owner, TRAIT_IGNORESLOWDOWN, TRAIT_STATUS_EFFECT(id)) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/lobster_rush) + to_chat(owner, span_notice("Your pulse returns to normal.")) + +/// Spawn an afterimage every other step, because every step was too many +/datum/status_effect/lobster_rush/proc/on_move() + SIGNAL_HANDLER + if (!spawned_last_move) + new /obj/effect/temp_visual/decoy/fading(owner.loc, owner) + spawned_last_move = !spawned_last_move + +/datum/status_effect/lobster_rush/proc/on_bump(mob/living/source, atom/target) + SIGNAL_HANDLER + if (!target.density) + return + if (isliving(target)) + source.visible_message(span_warning("[source] crashes into [target]!")) + smack_into(source) + smack_into(target) + qdel(src) + return + if (lavaland_equipment_pressure_check(get_turf(source))) + return + smack_into(source) + source.visible_message(span_warning("[source] crashes into [target]!")) + qdel(src) + +/datum/status_effect/lobster_rush/proc/smack_into(mob/living/target) + target.Knockdown(5 SECONDS) + target.apply_damage(40, STAMINA) + target.apply_damage(20, BRUTE, spread_damage = TRUE) + +/// You get a longer buff if you take the time to implant it in yourself +/datum/status_effect/lobster_rush/extended + duration = 5 SECONDS + +/// Action used by the rush gland +/datum/action/cooldown/monster_core_action/adrenal_boost + name = "Adrenal Boost" + desc = "Pump your rush gland to give yourself a boost of speed. \ + Impacts with objects can be dangerous under atmospheric pressure." + button_icon_state = "lobster_gland_stable" + cooldown_time = 3 MINUTES + +#undef HEALTH_DANGER_ZONE diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm deleted file mode 100644 index 7d17a29c934..00000000000 --- a/code/modules/mining/equipment/regenerative_core.dm +++ /dev/null @@ -1,139 +0,0 @@ -/*********************Hivelord stabilizer****************/ -/obj/item/hivelordstabilizer - name = "stabilizing serum" - icon = 'icons/obj/medical/chemical.dmi' - icon_state = "bottle19" - desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely." - w_class = WEIGHT_CLASS_TINY - -/obj/item/hivelordstabilizer/afterattack(obj/item/organ/target_organ, mob/user, proximity) - . = ..() - if(!proximity) - return - var/obj/item/organ/internal/regenerative_core/target_core = target_organ - if(!istype(target_core, /obj/item/organ/internal/regenerative_core)) - to_chat(user, span_warning("The stabilizer only works on certain types of monster organs, generally regenerative in nature.")) - return - - target_core.preserved() - to_chat(user, span_notice("You inject the [target_organ] with the stabilizer. It will no longer go inert.")) - qdel(src) - -/************************Hivelord core*******************/ -/obj/item/organ/internal/regenerative_core - name = "regenerative core" - desc = "All that remains of a hivelord. It can be used to help keep your body going, but it will rapidly decay into uselessness." - icon_state = "roro core 2" - visual = FALSE - item_flags = NOBLUDGEON - slot = ORGAN_SLOT_REGENERATIVE_CORE - organ_flags = NONE - force = 0 - actions_types = list(/datum/action/item_action/organ_action/use) - var/inert = 0 - var/preserved = 0 - -/obj/item/organ/internal/regenerative_core/Initialize(mapload) - . = ..() - addtimer(CALLBACK(src, .proc/inert_check), 2400) - -/obj/item/organ/internal/regenerative_core/proc/inert_check() - if(!preserved) - go_inert() - -/obj/item/organ/internal/regenerative_core/proc/preserved(implanted = 0) - inert = FALSE - preserved = TRUE - update_appearance() - desc = "All that remains of a hivelord. It is preserved, allowing you to use it to heal completely without danger of decay." - if(implanted) - SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "implanted")) - else - SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "stabilizer")) - -/obj/item/organ/internal/regenerative_core/proc/go_inert() - inert = TRUE - name = "decayed regenerative core" - desc = "All that remains of a hivelord. It has decayed, and is completely useless." - SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "inert")) - update_appearance() - -/obj/item/organ/internal/regenerative_core/ui_action_click() - if(inert) - to_chat(owner, span_notice("[src] breaks down as it tries to activate.")) - else - owner.revive(full_heal = TRUE, admin_revive = FALSE) - qdel(src) - -/obj/item/organ/internal/regenerative_core/on_life(delta_time, times_fired) - ..() - if(owner.health <= owner.crit_threshold) - ui_action_click() - -///Handles applying the core, logging and status/mood events. -/obj/item/organ/internal/regenerative_core/proc/applyto(atom/target, mob/user) - if(ishuman(target)) - var/mob/living/carbon/human/target_human = target - if(inert) - to_chat(user, span_notice("[src] has decayed and can no longer be used to heal.")) - return - else - if(target_human.stat == DEAD) - to_chat(user, span_notice("[src] is useless on the dead.")) - return - if(target_human != user) - target_human.visible_message(span_notice("[user] forces [target_human] to apply [src]... Black tendrils entangle and reinforce [target_human.p_them()]!")) - SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "other")) - else - to_chat(user, span_notice("You start to smear [src] on yourself. Disgusting tendrils hold you together and allow you to keep moving, but for how long?")) - SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self")) - target_human.apply_status_effect(/datum/status_effect/regenerative_core) - target_human.add_mood_event("core", /datum/mood_event/healsbadman) //Now THIS is a miner buff (fixed - nerf) - qdel(src) - -/obj/item/organ/internal/regenerative_core/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - applyto(target, user) - -/obj/item/organ/internal/regenerative_core/attack_self(mob/user) - if(user.canUseTopic(src, be_close = TRUE, no_dexterity = FALSE, no_tk = TRUE)) - applyto(user, user) - -/obj/item/organ/internal/regenerative_core/Insert(mob/living/carbon/target_carbon, special = 0, drop_if_replaced = TRUE) - . = ..() - if(!preserved && !inert) - preserved(TRUE) - owner.visible_message(span_notice("[src] stabilizes as it's inserted.")) - -/obj/item/organ/internal/regenerative_core/Remove(mob/living/carbon/target_carbon, special = 0) - if(!inert && !special) - owner.visible_message(span_notice("[src] rapidly decays as it's removed.")) - go_inert() - return ..() - -/*************************Legion core********************/ -/obj/item/organ/internal/regenerative_core/legion - desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness." - icon_state = "legion_soul" - -/obj/item/organ/internal/regenerative_core/legion/Initialize(mapload) - . = ..() - update_appearance() - -/obj/item/organ/internal/regenerative_core/update_icon_state() - if (inert) - icon_state = "legion_soul_inert" - if (preserved) - icon_state = "legion_soul" - if (!inert && !preserved) - icon_state = "legion_soul_unstable" - return ..() - -/obj/item/organ/internal/regenerative_core/legion/go_inert() - ..() - desc = "[src] has become inert. It has decayed, and is completely useless." - -/obj/item/organ/internal/regenerative_core/legion/preserved(implanted = 0) - ..() - desc = "[src] has been stabilized. It is preserved, allowing you to use it to heal completely without danger of decay." diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 9ae262c2922..8fd9f90503d 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -631,7 +631,17 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS resistance_flags = FIRE_PROOF clothing_flags = THICKMATERIAL - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/internal/regenerative_core/legion, /obj/item/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/cleaving_saw) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/pickaxe, + /obj/item/spear, + /obj/item/organ/internal/monster_core, + /obj/item/knife, + /obj/item/kinetic_crusher, + /obj/item/resonator, + /obj/item/melee/cleaving_saw, + ) /obj/item/clothing/suit/hooded/berserker/Initialize(mapload) . = ..() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 86dddfa1860..54d6845881f 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -21,7 +21,7 @@ new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200), new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300), new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), - new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400), + new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/mining_stabilizer, 400), new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400), new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400), new /datum/data/mining_equipment("Environment Proof Bodybag", /obj/item/bodybag/environmental, 500), //SKYRAT EDIT - ADDITION diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm index 51f30aee8de..2ea8d46f4de 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm @@ -29,7 +29,11 @@ attack_verb_simple = "bite" attack_sound = 'sound/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE - butcher_results = list(/obj/item/food/meat/slab = 2, /obj/effect/decal/cleanable/brimdust = 1) + butcher_results = list( + /obj/item/food/meat/slab = 2, + /obj/effect/decal/cleanable/brimdust = 1, + /obj/item/organ/internal/monster_core/brimdust_sac = 1, + ) loot = list() robust_searching = TRUE footstep_type = FOOTSTEP_MOB_CLAW diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 7fa3c128fa2..f55ea598138 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -258,8 +258,8 @@ While using this makes the system rely on OnFire, it still gives options for tim /obj/structure/elite_tumor/attackby(obj/item/attacking_item, mob/user, params) . = ..() - if(istype(attacking_item, /obj/item/organ/internal/regenerative_core) && activity == TUMOR_INACTIVE && !boosted) - var/obj/item/organ/internal/regenerative_core/core = attacking_item + if(istype(attacking_item, /obj/item/organ/internal/monster_core/regenerative_core) && activity == TUMOR_INACTIVE && !boosted) + var/obj/item/organ/internal/monster_core/regenerative_core/core = attacking_item visible_message(span_boldwarning("As [user] drops the core into [src], [src] appears to swell.")) icon_state = "advanced_tumor" boosted = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 675924fa8ec..4d460f02ffc 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -30,7 +30,7 @@ retreat_distance = 3 minimum_distance = 3 pass_flags = PASSTABLE - loot = list(/obj/item/organ/internal/regenerative_core) + loot = list(/obj/item/organ/internal/monster_core/regenerative_core) var/brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood var/has_clickbox = TRUE @@ -119,7 +119,7 @@ attack_sound = 'sound/weapons/pierce.ogg' throw_message = "bounces harmlessly off of" crusher_loot = /obj/item/crusher_trophy/legion_skull - loot = list(/obj/item/organ/internal/regenerative_core/legion) + loot = list(/obj/item/organ/internal/monster_core/regenerative_core/legion) brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion del_on_death = 1 stat_attack = HARD_CRIT @@ -264,7 +264,7 @@ layer = MOB_LAYER del_on_death = TRUE sentience_type = SENTIENCE_BOSS - loot = list(/obj/item/organ/internal/regenerative_core/legion = 3, /obj/effect/mob_spawn/corpse/human/legioninfested = 5) + loot = list(/obj/item/organ/internal/monster_core/regenerative_core/legion = 3, /obj/effect/mob_spawn/corpse/human/legioninfested = 5) move_to_delay = 14 vision_range = 5 aggro_vision_range = 9 @@ -292,7 +292,7 @@ icon_aggro = "snowlegion_alive" icon_dead = "snowlegion" crusher_loot = /obj/item/crusher_trophy/legion_skull - loot = list(/obj/item/organ/internal/regenerative_core/legion) + loot = list(/obj/item/organ/internal/monster_core/regenerative_core/legion) brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/snow /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/snow/make_legion(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm index 553109c1373..483f0fa2b2b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm @@ -29,7 +29,11 @@ weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) vision_range = 5 aggro_vision_range = 7 - butcher_results = list(/obj/item/food/meat/crab = 2, /obj/item/stack/sheet/bone = 2) + butcher_results = list( + /obj/item/food/meat/crab = 2, + /obj/item/stack/sheet/bone = 2, + /obj/item/organ/internal/monster_core/rush_gland = 1, + ) robust_searching = TRUE footstep_type = FOOTSTEP_MOB_CLAW crusher_loot = /obj/item/crusher_trophy/lobster_claw diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 27384d28aeb..e0af6797f74 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -21,3 +21,7 @@ /datum/movespeed_modifier/status_effect/hazard_area multiplicative_slowdown = 4 + +/datum/movespeed_modifier/status_effect/lobster_rush + multiplicative_slowdown = -0.5 + blacklisted_movetypes = (FLYING|FLOATING) diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index a0e56f7f643..a23c594698a 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -101,8 +101,8 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /* * Remove the organ from the select mob. * - * organ_owner - the mob who owns our organ, that we're removing the organ from. - * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment + * * organ_owner - the mob who owns our organ, that we're removing the organ from. + * * special - "quick swapping" an organ out - when TRUE, the mob will be unaffected by not having that organ for the moment */ /obj/item/organ/proc/Remove(mob/living/carbon/organ_owner, special = FALSE) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index d4c3855f299..8bc0643a43d 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -21,8 +21,8 @@ owner.internal_organs |= src owner.internal_organs_slot[slot] = src - /// internal_organs_slot must ALWAYS be ordered in the same way as organ_process_order - /// Otherwise life processing breaks down + // internal_organs_slot must ALWAYS be ordered in the same way as organ_process_order + // Otherwise life processing breaks down sortTim(owner.internal_organs_slot, /proc/cmp_organ_slot_asc) STOP_PROCESSING(SSobj, src) diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index cea41599afa..6292810e99e 100755 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/obj/medical/organs/mining_organs.dmi b/icons/obj/medical/organs/mining_organs.dmi new file mode 100644 index 00000000000..f3fc298284b Binary files /dev/null and b/icons/obj/medical/organs/mining_organs.dmi differ diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index 898be667273..85e372b4b08 100644 Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm b/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm index f9d60effdd4..4456de10826 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm @@ -187,7 +187,7 @@ return //if its a regen core, then create four harvests - else if(istype(attacking_item, /obj/item/organ/internal/regenerative_core)) + else if(istype(attacking_item, /obj/item/organ/internal/monster_core/regenerative_core)) qdel(attacking_item) for(var/i in 1 to regen_harvest_num) create_harvest() diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm b/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm index c9756a1ad44..3a55099019c 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm @@ -3,15 +3,18 @@ //this is for revitalizing/preserving regen cores /obj/structure/lavaland/ash_walker/attackby(obj/item/attacking_item, mob/living/user, params) - if(!istype(attacking_item, /obj/item/organ/internal/regenerative_core)) + if(!istype(attacking_item, /obj/item/organ/internal/monster_core/regenerative_core)) return ..() if(!user.mind.has_antag_datum(/datum/antagonist/ashwalker)) balloon_alert(user, "must be an ashwalker!") return - var/obj/item/organ/internal/regenerative_core/regen_core = attacking_item - regen_core.preserved() + var/obj/item/organ/internal/monster_core/regenerative_core/regen_core = attacking_item + + if(!regen_core.preserve()) + balloon_alert(user, "organ decayed!") + return playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) balloon_alert_to_viewers("[src] revitalizes [regen_core]!") return diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm index 6b759e0fa68..b05ab40cafe 100644 --- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm +++ b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm @@ -3,11 +3,11 @@ desc = "Summon a staff that is imbued with the power of the tendril. Requires permission from the mother tendril." required_components = list( "north" = /obj/item/stack/sheet/mineral/wood, - "south" = /obj/item/organ/internal/regenerative_core, + "south" = /obj/item/organ/internal/monster_core/regenerative_core, ) consumed_components = list( /obj/item/stack/sheet/mineral/wood, - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, ) ritual_success_items = list( /obj/item/ash_staff, @@ -18,13 +18,13 @@ desc = "Summons a necklace that imbues the wearer with the knowledge of our tongue." required_components = list( "north" = /obj/item/stack/sheet/bone, - "south" = /obj/item/organ/internal/regenerative_core, + "south" = /obj/item/organ/internal/monster_core/regenerative_core, "east" = /obj/item/stack/sheet/sinew, "west" = /obj/item/stack/sheet/sinew, ) consumed_components = list( /obj/item/stack/sheet/bone, - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/stack/sheet/sinew, ) ritual_success_items = list( @@ -51,13 +51,13 @@ name = "Summon Cursed Ash Knife" desc = "Summons a knife that places a tracking curse on unsuspecting miners who destroy our marked tendrils." required_components = list( - "north" = /obj/item/organ/internal/regenerative_core, + "north" = /obj/item/organ/internal/monster_core/regenerative_core, "south" = /obj/item/forging/reagent_weapon/dagger, "east" = /obj/item/stack/sheet/bone, "west" = /obj/item/stack/sheet/sinew, ) consumed_components = list( - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/forging/reagent_weapon/dagger, /obj/item/stack/sheet/bone, /obj/item/stack/sheet/sinew, @@ -70,13 +70,13 @@ name = "Summon Tendril Seed" desc = "Summons a seed that, when used in the hand, will cause a tendril to come through at your location." required_components = list( - "north" = /obj/item/organ/internal/regenerative_core, + "north" = /obj/item/organ/internal/monster_core/regenerative_core, "south" = /obj/item/cursed_dagger, "east" = /obj/item/crusher_trophy/goliath_tentacle, "west" = /obj/item/crusher_trophy/watcher_wing, ) consumed_components = list( - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/cursed_dagger, /obj/item/crusher_trophy/goliath_tentacle, /obj/item/crusher_trophy/watcher_wing, @@ -138,13 +138,13 @@ desc = "Those who partake in the ceremony and are ready will age, increasing their value to the kin." required_components = list( "north" = /mob/living/carbon/human, - "south" = /obj/item/organ/internal/regenerative_core, + "south" = /obj/item/organ/internal/monster_core/regenerative_core, "east" = /obj/item/stack/sheet/bone, "west" = /obj/item/stack/sheet/sinew, ) consumed_components = list( /mob/living/carbon/human, - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/stack/sheet/bone, /obj/item/stack/sheet/sinew, ) @@ -158,13 +158,13 @@ name = "Summon Lavaland Creature" desc = "Summons a random, wild monster from another region in space." required_components = list( - "north" = /obj/item/organ/internal/regenerative_core, + "north" = /obj/item/organ/internal/monster_core/regenerative_core, "south" = /mob/living/simple_animal/hostile/asteroid/ice_whelp, "east" = /obj/item/stack/ore/bluespace_crystal, "west" = /obj/item/stack/ore/bluespace_crystal, ) consumed_components = list( - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /mob/living/simple_animal/hostile/asteroid/ice_whelp, /obj/item/stack/ore/bluespace_crystal, ) @@ -184,13 +184,13 @@ name = "Summon Icemoon Creature" desc = "Summons a random, wild monster from another region in space." required_components = list( - "north" = /obj/item/organ/internal/regenerative_core, + "north" = /obj/item/organ/internal/monster_core/regenerative_core, "south" = /obj/item/food/grown/surik, "east" = /obj/item/stack/ore/bluespace_crystal, "west" = /obj/item/stack/ore/bluespace_crystal, ) consumed_components = list( - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/food/grown/surik, /obj/item/stack/ore/bluespace_crystal, ) @@ -318,13 +318,13 @@ name = "Revive Animal" desc = "Revives a simple animal that will then become friendly." required_components = list( - "north" = /obj/item/organ/internal/regenerative_core, - "south" = /obj/item/organ/internal/regenerative_core, + "north" = /obj/item/organ/internal/monster_core/regenerative_core, + "south" = /obj/item/organ/internal/monster_core/regenerative_core, "east" = /obj/item/stack/sheet/bone, "west" = /obj/item/stack/sheet/sinew, ) consumed_components = list( - /obj/item/organ/internal/regenerative_core, + /obj/item/organ/internal/monster_core/regenerative_core, /obj/item/stack/sheet/bone, /obj/item/stack/sheet/sinew, ) diff --git a/modular_skyrat/modules/reagent_forging/code/forge.dm b/modular_skyrat/modules/reagent_forging/code/forge.dm index 9b9f598e8ad..e892967b735 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge.dm @@ -347,7 +347,7 @@ to_chat(user, span_notice("You successfully line [src] with [attacking_item].")) return - if(istype(attacking_item, /obj/item/organ/internal/regenerative_core)) + if(istype(attacking_item, /obj/item/organ/internal/monster_core/regenerative_core)) if(in_use) //only insert one at a time to_chat(user, span_warning("You cannot do multiple things at the same time!")) return @@ -357,7 +357,7 @@ fail_message(user, "[src] is already upgraded.") return - var/obj/item/organ/internal/regenerative_core/used_core = attacking_item + var/obj/item/organ/internal/monster_core/regenerative_core/used_core = attacking_item if(used_core.inert) //no inert cores allowed fail_message(user, "You cannot use an inert [used_core].") return diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm b/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm index 9d678fe7298..ae45234cfa8 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm @@ -3,7 +3,7 @@ GLOBAL_LIST_INIT(tier1_reward, list( /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 1, - /obj/item/organ/internal/regenerative_core/legion = 1, + /obj/item/organ/internal/monster_core/regenerative_core/legion = 1, )) GLOBAL_LIST_INIT(tier2_reward, list( @@ -97,7 +97,7 @@ GLOBAL_LIST_INIT(animal_reward, list( /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 1, - /obj/item/organ/internal/regenerative_core/legion = 1, + /obj/item/organ/internal/monster_core/regenerative_core/legion = 1, )) GLOBAL_LIST_INIT(alien_reward, list( diff --git a/tgstation.dme b/tgstation.dme index 2bbb27bcf9d..743cefbcfe7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3525,10 +3525,13 @@ #include "code\modules\mining\equipment\marker_beacons.dm" #include "code\modules\mining\equipment\mineral_scanner.dm" #include "code\modules\mining\equipment\mining_tools.dm" -#include "code\modules\mining\equipment\regenerative_core.dm" #include "code\modules\mining\equipment\resonator.dm" #include "code\modules\mining\equipment\survival_pod.dm" #include "code\modules\mining\equipment\wormhole_jaunter.dm" +#include "code\modules\mining\equipment\monster_organs\brimdust_sac.dm" +#include "code\modules\mining\equipment\monster_organs\monster_organ.dm" +#include "code\modules\mining\equipment\monster_organs\regenerative_core.dm" +#include "code\modules\mining\equipment\monster_organs\rush_gland.dm" #include "code\modules\mining\laborcamp\laborshuttle.dm" #include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mining\lavaland\ash_flora.dm"