mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 05:00:55 +01:00
Fixes fly infusion deleting the last infused organ upon activation (#92267)
## About The Pull Request Closes #92234 ## Changelog 🆑 fix: Fixed fly infusion deleting the last infused organ upon activation /🆑
This commit is contained in:
@@ -14,6 +14,8 @@
|
||||
#define COMSIG_ORGAN_SURGICALLY_REMOVED "organ_surgically_removed"
|
||||
/// Called when an organ gets surgically removed (mob/living/user, mob/living/carbon/new_owner, target_zone, obj/item/tool)
|
||||
#define COMSIG_ORGAN_SURGICALLY_INSERTED "organ_surgically_inserted"
|
||||
/// Called when an organ finishes inserting into a bodypart (obj/item/bodypart/limb, movement_flags)
|
||||
#define COMSIG_ORGAN_BODYPART_INSERTED "organ_bodypart_inserted"
|
||||
|
||||
///Called when movement intent is toggled.
|
||||
#define COMSIG_MOVE_INTENT_TOGGLED "move_intent_toggled"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/datum/status_effect/organ_set_bonus/set_bonus = receiver.has_status_effect(bonus_type)
|
||||
if(!set_bonus)
|
||||
set_bonus = receiver.apply_status_effect(bonus_type)
|
||||
set_bonus.set_organs(set_bonus.organs + 1)
|
||||
set_bonus.set_organs(set_bonus.organs + 1, target)
|
||||
|
||||
/datum/element/organ_set_bonus/proc/on_removed(obj/item/organ/target, mob/living/carbon/loser)
|
||||
SIGNAL_HANDLER
|
||||
@@ -38,7 +38,7 @@
|
||||
//get status effect or remove it
|
||||
var/datum/status_effect/organ_set_bonus/set_bonus = loser.has_status_effect(bonus_type)
|
||||
if(set_bonus)
|
||||
set_bonus.set_organs(set_bonus.organs - 1)
|
||||
set_bonus.set_organs(set_bonus.organs - 1, target)
|
||||
|
||||
/datum/status_effect/organ_set_bonus
|
||||
id = "organ_set_bonus"
|
||||
@@ -66,17 +66,17 @@
|
||||
/// Color priority for limb overlay
|
||||
var/color_overlay_priority
|
||||
|
||||
/datum/status_effect/organ_set_bonus/proc/set_organs(new_value)
|
||||
/datum/status_effect/organ_set_bonus/proc/set_organs(new_value, obj/item/organ/organ)
|
||||
organs = new_value
|
||||
if(!organs) //initial value but won't kick in without calling the setter
|
||||
qdel(src)
|
||||
if(organs >= organs_needed)
|
||||
if(!bonus_active)
|
||||
INVOKE_ASYNC(src, PROC_REF(enable_bonus))
|
||||
INVOKE_ASYNC(src, PROC_REF(enable_bonus), organ)
|
||||
else if(bonus_active)
|
||||
INVOKE_ASYNC(src, PROC_REF(disable_bonus))
|
||||
INVOKE_ASYNC(src, PROC_REF(disable_bonus), organ)
|
||||
|
||||
/datum/status_effect/organ_set_bonus/proc/enable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/proc/enable_bonus(obj/item/organ/inserted_organ)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
if(required_biotype)
|
||||
if(!(owner.mob_biotypes & required_biotype))
|
||||
@@ -113,7 +113,7 @@
|
||||
carbon_owner.update_body()
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/organ_set_bonus/proc/disable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/proc/disable_bonus(obj/item/organ/removed_organ)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
bonus_active = FALSE
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
/datum/status_effect/organ_set_bonus/proc/texture_limb(atom/source, obj/item/bodypart/limb)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
// Not updating because enable/disable_bonus() call it down the line, and calls coming from comsigs update the owner's body themselves
|
||||
// Not updating because enable/disable_bonus(obj/item/organ/removed_organ) call it down the line, and calls coming from comsigs update the owner's body themselves
|
||||
limb.add_bodypart_overlay(new limb_overlay(), update = FALSE)
|
||||
if(color_overlay_priority)
|
||||
limb.add_color_override(COLOR_WHITE, color_overlay_priority)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
/// Are we at all five organs?
|
||||
var/color_active = FALSE
|
||||
|
||||
/datum/status_effect/organ_set_bonus/fish/enable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/fish/enable_bonus(obj/item/organ/inserted_organ)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
@@ -55,7 +55,7 @@
|
||||
owner.mind?.adjust_experience(/datum/skill/fishing, SKILL_EXP_JOURNEYMAN, silent = TRUE)
|
||||
owner.grant_language(/datum/language/carptongue, ALL, type)
|
||||
|
||||
/datum/status_effect/organ_set_bonus/fish/disable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/fish/disable_bonus(obj/item/organ/removed_organ)
|
||||
. = ..()
|
||||
UnregisterSignal(owner, list(
|
||||
COMSIG_CARBON_GAIN_ORGAN,
|
||||
@@ -80,7 +80,7 @@
|
||||
owner.mind?.adjust_experience(/datum/skill/fishing, -SKILL_EXP_JOURNEYMAN, silent = TRUE)
|
||||
owner.remove_language(/datum/language/carptongue, ALL, type)
|
||||
|
||||
/datum/status_effect/organ_set_bonus/fish/set_organs(new_value)
|
||||
/datum/status_effect/organ_set_bonus/fish/set_organs(new_value, obj/item/organ/organ)
|
||||
. = ..()
|
||||
if (!iscarbon(owner))
|
||||
return
|
||||
|
||||
@@ -8,14 +8,27 @@
|
||||
bonus_activate_text = null
|
||||
bonus_deactivate_text = null
|
||||
|
||||
/datum/status_effect/organ_set_bonus/fly/enable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/fly/enable_bonus(obj/item/organ/inserted_organ)
|
||||
. = ..()
|
||||
if(!. || !ishuman(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/new_fly = owner
|
||||
if(isflyperson(new_fly))
|
||||
return
|
||||
//okay you NEED to be a fly
|
||||
// This is ugly as sin, but we're called before the organ finishes inserting into the bodypart
|
||||
// so if we swap species directly the bodypart will be replaced and we'll be gone
|
||||
// so we need to delay species change until we're fully inserted
|
||||
RegisterSignal(inserted_organ, COMSIG_ORGAN_BODYPART_INSERTED, PROC_REF(flyify))
|
||||
|
||||
/datum/status_effect/organ_set_bonus/fly/proc/flyify(obj/item/organ/source, obj/item/bodypart/limb, movement_flags)
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/human/new_fly = owner
|
||||
// just in case?
|
||||
if(isflyperson(new_fly))
|
||||
return
|
||||
// needs to be done before the species is set
|
||||
UnregisterSignal(source, COMSIG_ORGAN_BODYPART_INSERTED)
|
||||
// okay you NEED to be a fly
|
||||
to_chat(new_fly, span_danger("Too much fly DNA! Your skin begins to discolor into a horrible black as you become more fly than person!"))
|
||||
new_fly.set_species(/datum/species/fly)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/// Armor type attached to the owner's physiology
|
||||
var/datum/armor/given_armor = /datum/armor/roach_internal_armor
|
||||
|
||||
/datum/status_effect/organ_set_bonus/roach/enable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/roach/enable_bonus(obj/item/organ/inserted_organ)
|
||||
. = ..()
|
||||
if(!ishuman(owner))
|
||||
return
|
||||
@@ -28,7 +28,7 @@
|
||||
var/mob/living/carbon/human/human_owner = owner
|
||||
human_owner.physiology.armor = human_owner.physiology.armor.add_other_armor(given_armor)
|
||||
|
||||
/datum/status_effect/organ_set_bonus/roach/disable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/roach/disable_bonus(obj/item/organ/removed_organ)
|
||||
. = ..()
|
||||
if(!ishuman(owner) || QDELETED(owner))
|
||||
return
|
||||
|
||||
@@ -578,13 +578,13 @@
|
||||
bonus_deactivate_text = span_notice("You can no longer force open airlocks with your bare hands.")
|
||||
required_biotype = NONE
|
||||
|
||||
/datum/status_effect/organ_set_bonus/strongarm/enable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/strongarm/enable_bonus(obj/item/organ/inserted_organ)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
owner.AddElement(/datum/element/door_pryer, pry_time = 6 SECONDS, interaction_key = DOAFTER_SOURCE_STRONGARM_INTERACTION)
|
||||
|
||||
/datum/status_effect/organ_set_bonus/strongarm/disable_bonus()
|
||||
/datum/status_effect/organ_set_bonus/strongarm/disable_bonus(obj/item/organ/removed_organ)
|
||||
. = ..()
|
||||
owner.RemoveElement(/datum/element/door_pryer, pry_time = 6 SECONDS, interaction_key = DOAFTER_SOURCE_STRONGARM_INTERACTION)
|
||||
|
||||
|
||||
@@ -144,6 +144,8 @@
|
||||
if(bodypart_overlay)
|
||||
limb.add_bodypart_overlay(bodypart_overlay)
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_ORGAN_BODYPART_INSERTED, limb, movement_flags)
|
||||
|
||||
/*
|
||||
* Remove the organ from the select mob.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user