Merge remote-tracking branch 'citadel/master' into mobility_flags
This commit is contained in:
@@ -773,8 +773,6 @@
|
||||
px_y = 12
|
||||
stam_heal_tick = 4
|
||||
max_stamina_damage = 50
|
||||
var/blood_state = BLOOD_STATE_NOT_BLOODY
|
||||
var/list/bloody_legs = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
|
||||
/obj/item/bodypart/l_leg/is_disabled()
|
||||
if(HAS_TRAIT(owner, TRAIT_PARALYSIS_L_LEG))
|
||||
@@ -833,8 +831,6 @@
|
||||
px_y = 12
|
||||
max_stamina_damage = 50
|
||||
stam_heal_tick = 4
|
||||
var/blood_state = BLOOD_STATE_NOT_BLOODY
|
||||
var/list/bloody_legs = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
|
||||
/obj/item/bodypart/r_leg/is_disabled()
|
||||
if(HAS_TRAIT(owner, TRAIT_PARALYSIS_R_LEG))
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
var/org_zone = check_zone(O.zone)
|
||||
if(org_zone != BODY_ZONE_CHEST)
|
||||
continue
|
||||
O.Remove(C)
|
||||
O.Remove()
|
||||
O.forceMove(T)
|
||||
organ_spilled = 1
|
||||
. += X
|
||||
@@ -141,11 +141,11 @@
|
||||
|
||||
//when a limb is dropped, the internal organs are removed from the mob and put into the limb
|
||||
/obj/item/organ/proc/transfer_to_limb(obj/item/bodypart/LB, mob/living/carbon/C)
|
||||
Remove(C)
|
||||
Remove()
|
||||
forceMove(LB)
|
||||
|
||||
/obj/item/organ/brain/transfer_to_limb(obj/item/bodypart/head/LB, mob/living/carbon/human/C)
|
||||
Remove(C) //Changeling brain concerns are now handled in Remove
|
||||
Remove() //Changeling brain concerns are now handled in Remove
|
||||
forceMove(LB)
|
||||
LB.brain = src
|
||||
if(brainmob)
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
return L
|
||||
return FALSE
|
||||
|
||||
|
||||
/mob/proc/has_left_hand(check_disabled = TRUE)
|
||||
return TRUE
|
||||
|
||||
@@ -29,7 +28,7 @@
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/alien/larva/has_left_hand()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/proc/has_right_hand(check_disabled = TRUE)
|
||||
@@ -43,9 +42,7 @@
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/alien/larva/has_right_hand()
|
||||
return 1
|
||||
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/proc/has_left_leg()
|
||||
return TRUE
|
||||
@@ -67,7 +64,6 @@
|
||||
else
|
||||
return FALSE
|
||||
|
||||
|
||||
//Limb numbers
|
||||
/mob/proc/get_num_arms(check_disabled = TRUE)
|
||||
return 2
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
name = "repair body"
|
||||
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 65, /obj/item/pen = 55)
|
||||
repeatable = TRUE
|
||||
time = 25
|
||||
time = 15
|
||||
var/brutehealing = 0
|
||||
var/burnhealing = 0
|
||||
var/missinghpbonus = 0 //heals an extra point of damager per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing!
|
||||
@@ -117,15 +117,15 @@
|
||||
/********************BRUTE STEPS********************/
|
||||
/datum/surgery_step/heal/brute/basic
|
||||
name = "tend bruises"
|
||||
brutehealing = 5
|
||||
brutehealing = 10
|
||||
missinghpbonus = 15
|
||||
|
||||
/datum/surgery_step/heal/brute/upgraded
|
||||
brutehealing = 5
|
||||
brutehealing = 10
|
||||
missinghpbonus = 10
|
||||
|
||||
/datum/surgery_step/heal/brute/upgraded/femto
|
||||
brutehealing = 5
|
||||
brutehealing = 10
|
||||
missinghpbonus = 5
|
||||
|
||||
/***************************BURN***************************/
|
||||
@@ -155,15 +155,15 @@
|
||||
/********************BURN STEPS********************/
|
||||
/datum/surgery_step/heal/burn/basic
|
||||
name = "tend burn wounds"
|
||||
burnhealing = 5
|
||||
burnhealing = 10
|
||||
missinghpbonus = 15
|
||||
|
||||
/datum/surgery_step/heal/burn/upgraded
|
||||
burnhealing = 5
|
||||
burnhealing = 10
|
||||
missinghpbonus = 10
|
||||
|
||||
/datum/surgery_step/heal/burn/upgraded/femto
|
||||
burnhealing = 5
|
||||
burnhealing = 10
|
||||
missinghpbonus = 5
|
||||
|
||||
/***************************COMBO***************************/
|
||||
@@ -193,23 +193,23 @@
|
||||
/********************COMBO STEPS********************/
|
||||
/datum/surgery_step/heal/combo
|
||||
name = "tend physical wounds"
|
||||
brutehealing = 3
|
||||
burnhealing = 3
|
||||
brutehealing = 6
|
||||
burnhealing = 6
|
||||
missinghpbonus = 15
|
||||
time = 10
|
||||
time = 6
|
||||
|
||||
/datum/surgery_step/heal/combo/upgraded
|
||||
brutehealing = 3
|
||||
burnhealing = 3
|
||||
brutehealing = 6
|
||||
burnhealing = 6
|
||||
missinghpbonus = 10
|
||||
|
||||
/datum/surgery_step/heal/combo/upgraded/femto
|
||||
brutehealing = 1
|
||||
burnhealing = 1
|
||||
brutehealing = 3
|
||||
burnhealing = 3
|
||||
missinghpbonus = 2.5
|
||||
|
||||
/datum/surgery_step/heal/combo/upgraded/femto/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='warning'>You screwed up!</span>",
|
||||
"<span class='warning'>[user] screws up!</span>",
|
||||
"<span class='notice'>[user] fixes some of [target]'s wounds.</span>", TRUE)
|
||||
target.take_bodypart_damage(5,5)
|
||||
target.take_bodypart_damage(5,5)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/list/organs = M.getorganszone("head") + M.getorganszone("eyes") + M.getorganszone("mouth")
|
||||
for(var/internal_organ in organs)
|
||||
var/obj/item/organ/I = internal_organ
|
||||
I.Remove(M)
|
||||
I.Remove()
|
||||
I.forceMove(T)
|
||||
head.drop_limb()
|
||||
qdel(head)
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
"[user] successfully extracts [I] from [target]'s [parse_zone(target_zone)]!",
|
||||
"[user] successfully extracts something from [target]'s [parse_zone(target_zone)]!")
|
||||
log_combat(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
|
||||
I.Remove(target)
|
||||
I.Remove()
|
||||
I.forceMove(get_turf(target))
|
||||
else
|
||||
display_results(user, target, "<span class='notice'>You can't extract anything from [target]'s [parse_zone(target_zone)]!</span>",
|
||||
|
||||
@@ -27,10 +27,11 @@
|
||||
icon_state = "appendix"
|
||||
name = "appendix"
|
||||
|
||||
/obj/item/organ/appendix/Remove(mob/living/carbon/M, special = 0)
|
||||
for(var/datum/disease/appendicitis/A in M.diseases)
|
||||
A.cure()
|
||||
inflamed = TRUE
|
||||
/obj/item/organ/appendix/Remove(special = FALSE)
|
||||
if(owner)
|
||||
for(var/datum/disease/appendicitis/A in owner.diseases)
|
||||
A.cure()
|
||||
inflamed = TRUE
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
to_chat(user, "<span class='notice'>You modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/cyberimp/arm/Remove(special = FALSE)
|
||||
Retract()
|
||||
..()
|
||||
|
||||
|
||||
@@ -147,10 +147,10 @@
|
||||
ion_trail = new
|
||||
ion_trail.set_up(M)
|
||||
|
||||
/obj/item/organ/cyberimp/chest/thrusters/Remove(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/cyberimp/chest/thrusters/Remove(special = FALSE)
|
||||
if(on)
|
||||
toggle(silent = TRUE)
|
||||
..()
|
||||
toggle(TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/cyberimp/chest/thrusters/ui_action_click()
|
||||
toggle()
|
||||
@@ -170,10 +170,11 @@
|
||||
to_chat(owner, "<span class='notice'>You turn your thrusters set on.</span>")
|
||||
else
|
||||
ion_trail.stop()
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER)
|
||||
if(!silent)
|
||||
to_chat(owner, "<span class='notice'>You turn your thrusters set off.</span>")
|
||||
if(!QDELETED(owner))
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER)
|
||||
if(!silent)
|
||||
to_chat(owner, "<span class='notice'>You turn your thrusters set off.</span>")
|
||||
on = FALSE
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -20,11 +20,11 @@
|
||||
var/datum/atom_hud/H = GLOB.huds[HUD_type]
|
||||
H.add_hud_to(M)
|
||||
|
||||
/obj/item/organ/cyberimp/eyes/hud/Remove(var/mob/living/carbon/M, var/special = 0)
|
||||
if(HUD_type)
|
||||
/obj/item/organ/cyberimp/eyes/hud/Remove(special = FALSE)
|
||||
if(!QDELETED(owner) && HUD_type)
|
||||
var/datum/atom_hud/H = GLOB.huds[HUD_type]
|
||||
H.remove_hud_from(M)
|
||||
..()
|
||||
H.remove_hud_from(owner)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/cyberimp/eyes/hud/medical
|
||||
name = "Medical HUD implant"
|
||||
|
||||
@@ -89,10 +89,10 @@
|
||||
stored_items = list()
|
||||
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_drop/Remove(var/mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/cyberimp/brain/anti_drop/Remove(special = FALSE)
|
||||
if(active)
|
||||
ui_action_click()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun
|
||||
|
||||
@@ -104,13 +104,14 @@
|
||||
H.dna.features["ears"] = "Cat"
|
||||
H.update_body()
|
||||
|
||||
/obj/item/organ/ears/cat/Remove(mob/living/carbon/human/H, special = 0)
|
||||
..()
|
||||
if(istype(H))
|
||||
/obj/item/organ/ears/cat/Remove(special = FALSE)
|
||||
if(!QDELETED(owner) && ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
color = H.hair_color
|
||||
H.dna.features["ears"] = "None"
|
||||
H.dna.species.mutant_bodyparts -= "ears"
|
||||
H.update_body()
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/ears/bronze
|
||||
name = "tin ears"
|
||||
|
||||
@@ -47,17 +47,19 @@
|
||||
M.update_tint()
|
||||
owner.update_sight()
|
||||
|
||||
/obj/item/organ/eyes/Remove(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/eyes/Remove(special = FALSE)
|
||||
clear_eye_trauma()
|
||||
. = ..()
|
||||
if(ishuman(M) && eye_color)
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.eye_color = old_eye_color
|
||||
var/mob/living/carbon/C = .
|
||||
if(C)
|
||||
if(ishuman(C) && eye_color)
|
||||
var/mob/living/carbon/human/H = C
|
||||
H.eye_color = old_eye_color
|
||||
if(!special)
|
||||
H.dna.species.handle_body()
|
||||
if(!special)
|
||||
H.dna.species.handle_body()
|
||||
if(!special)
|
||||
M.update_tint()
|
||||
M.update_sight()
|
||||
C.update_tint()
|
||||
C.update_sight()
|
||||
|
||||
/obj/item/organ/eyes/on_life()
|
||||
..()
|
||||
@@ -185,13 +187,13 @@
|
||||
eye.update_brightness(M)
|
||||
M.become_blind("flashlight_eyes")
|
||||
|
||||
|
||||
/obj/item/organ/eyes/robotic/flashlight/Remove(var/mob/living/carbon/M, special = FALSE)
|
||||
eye.on = FALSE
|
||||
eye.update_brightness(M)
|
||||
eye.forceMove(src)
|
||||
M.cure_blind("flashlight_eyes")
|
||||
..()
|
||||
/obj/item/organ/eyes/robotic/flashlight/Remove(special = FALSE)
|
||||
if(!QDELETED(owner))
|
||||
eye.on = FALSE
|
||||
eye.update_brightness(owner)
|
||||
eye.forceMove(src)
|
||||
owner.cure_blind("flashlight_eyes")
|
||||
return ..()
|
||||
|
||||
// Welding shield implant
|
||||
/obj/item/organ/eyes/robotic/shield
|
||||
@@ -202,7 +204,7 @@
|
||||
/obj/item/organ/eyes/robotic/shield/emp_act(severity)
|
||||
return
|
||||
|
||||
#define RGB2EYECOLORSTRING(definitionvar) ("[copytext(definitionvar,2,3)][copytext(definitionvar,4,5)][copytext(definitionvar,6,7)]")
|
||||
#define RGB2EYECOLORSTRING(definitionvar) ("[copytext_char(definitionvar, 2, 3)][copytext_char(definitionvar, 4, 5)][copytext_char(definitionvar, 6, 7)]")
|
||||
|
||||
/obj/item/organ/eyes/robotic/glow
|
||||
name = "High Luminosity Eyes"
|
||||
@@ -227,7 +229,7 @@
|
||||
terminate_effects()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/eyes/robotic/glow/Remove(mob/living/carbon/M, special = FALSE)
|
||||
/obj/item/organ/eyes/robotic/glow/Remove(special = FALSE)
|
||||
terminate_effects()
|
||||
. = ..()
|
||||
|
||||
@@ -236,7 +238,6 @@
|
||||
deactivate(TRUE)
|
||||
active = FALSE
|
||||
clear_visuals(TRUE)
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/item/organ/eyes/robotic/glow/ui_action_click(owner, action)
|
||||
if(istype(action, /datum/action/item_action/organ_action/toggle))
|
||||
@@ -255,6 +256,8 @@
|
||||
if(!C || QDELETED(src) || QDELETED(user) || QDELETED(owner) || owner != user)
|
||||
return
|
||||
var/range = input(user, "Enter range (0 - [max_light_beam_distance])", "Range Select", 0) as null|num
|
||||
if(!isnum(range))
|
||||
return
|
||||
|
||||
set_distance(CLAMP(range, 0, max_light_beam_distance))
|
||||
assume_rgb(C)
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
else
|
||||
icon_state = "[icon_base]-off"
|
||||
|
||||
/obj/item/organ/heart/Remove(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
/obj/item/organ/heart/Remove(special = FALSE)
|
||||
if(!special)
|
||||
addtimer(CALLBACK(src, .proc/stop_if_unowned), 120)
|
||||
addtimer(CALLBACK(src, .proc/stop_if_unowned), 12 SECONDS)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/heart/proc/stop_if_unowned()
|
||||
if(!owner)
|
||||
@@ -145,9 +145,9 @@ obj/item/organ/heart/slime
|
||||
if(owner)
|
||||
to_chat(owner, "<span class ='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
|
||||
|
||||
/obj/item/organ/heart/cursed/Remove(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
M.remove_client_colour(/datum/client_colour/cursed_heart_blood)
|
||||
/obj/item/organ/heart/cursed/Remove(special = FALSE)
|
||||
owner.remove_client_colour(/datum/client_colour/cursed_heart_blood)
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/organ_action/cursed_heart
|
||||
name = "Pump your blood"
|
||||
@@ -220,21 +220,12 @@ obj/item/organ/heart/cybernetic/upgraded/on_life()
|
||||
addtimer(VARSET_CALLBACK(src, dose_available, TRUE), 5 MINUTES)
|
||||
ramount = 0
|
||||
|
||||
|
||||
|
||||
/obj/item/organ/heart/ipc
|
||||
name = "IPC heart"
|
||||
desc = "An electronic pump that regulates hydraulic functions, they have an auto-restart after EMPs."
|
||||
icon_state = "heart-c"
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
|
||||
/obj/item/organ/heart/ipc/emp_act()
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_SELF)
|
||||
return
|
||||
Stop()
|
||||
addtimer(CALLBACK(src, .proc/Restart), 10)
|
||||
|
||||
/obj/item/organ/heart/freedom
|
||||
name = "heart of freedom"
|
||||
desc = "This heart pumps with the passion to give... something freedom."
|
||||
|
||||
@@ -58,12 +58,12 @@
|
||||
return S
|
||||
|
||||
//Just in case
|
||||
/obj/item/organ/liver/Remove(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(!QDELETED(M))
|
||||
M.remove_movespeed_modifier(LIVER_SWELLING_MOVE_MODIFY)
|
||||
M.ResetBloodVol() //At the moment, this shouldn't allow application twice. You either have this OR a thirsty ferret.
|
||||
sizeMoveMod(1, M)
|
||||
/obj/item/organ/liver/Remove(special = FALSE)
|
||||
if(!QDELETED(owner))
|
||||
owner.remove_movespeed_modifier(LIVER_SWELLING_MOVE_MODIFY)
|
||||
owner.ResetBloodVol() //At the moment, this shouldn't allow application twice. You either have this OR a thirsty ferret.
|
||||
sizeMoveMod(1, owner)
|
||||
return ..()
|
||||
|
||||
//Applies some of the effects to the patient.
|
||||
/obj/item/organ/liver/proc/pharmacokinesis()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
var/obj/item/organ/replaced = M.getorganslot(slot)
|
||||
if(replaced)
|
||||
replaced.Remove(M, special = 1)
|
||||
replaced.Remove(TRUE)
|
||||
if(drop_if_replaced)
|
||||
replaced.forceMove(get_turf(M))
|
||||
else
|
||||
@@ -54,21 +54,20 @@
|
||||
return TRUE
|
||||
|
||||
//Special is for instant replacement like autosurgeons
|
||||
/obj/item/organ/proc/Remove(mob/living/carbon/M, special = FALSE)
|
||||
/obj/item/organ/proc/Remove(special = FALSE)
|
||||
if(owner)
|
||||
owner.internal_organs -= src
|
||||
if(owner.internal_organs_slot[slot] == src)
|
||||
owner.internal_organs_slot.Remove(slot)
|
||||
if((organ_flags & ORGAN_VITAL) && !special && !(owner.status_flags & GODMODE))
|
||||
owner.death()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Remove(owner)
|
||||
. = owner //for possible subtypes specific post-removal code.
|
||||
owner = null
|
||||
if(M)
|
||||
M.internal_organs -= src
|
||||
if(M.internal_organs_slot[slot] == src)
|
||||
M.internal_organs_slot.Remove(slot)
|
||||
if((organ_flags & ORGAN_VITAL) && !special && !(M.status_flags & GODMODE))
|
||||
M.death()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Remove(M)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/proc/on_find(mob/living/finder)
|
||||
return
|
||||
|
||||
@@ -185,7 +184,7 @@
|
||||
if(owner)
|
||||
// The special flag is important, because otherwise mobs can die
|
||||
// while undergoing transformation into different mobs.
|
||||
Remove(owner, TRUE)
|
||||
Remove(TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/attack(mob/living/carbon/M, mob/user)
|
||||
@@ -338,7 +337,7 @@
|
||||
T = new dna.species.mutanttongue()
|
||||
else
|
||||
T = new()
|
||||
oT.Remove(src)
|
||||
oT.Remove()
|
||||
qdel(oT)
|
||||
T.Insert(src)
|
||||
|
||||
|
||||
@@ -80,9 +80,9 @@
|
||||
H.throw_alert("disgust", /obj/screen/alert/disgusted)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgusted)
|
||||
|
||||
/obj/item/organ/stomach/Remove(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/stomach/Remove(special = FALSE)
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
if(H && istype(H))
|
||||
H.clear_alert("disgust")
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust")
|
||||
..()
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
slot = ORGAN_SLOT_TAIL
|
||||
var/tail_type = "None"
|
||||
|
||||
/obj/item/organ/tail/Remove(mob/living/carbon/human/H, special = 0)
|
||||
..()
|
||||
if(H && H.dna && H.dna.species)
|
||||
H.dna.species.stop_wagging_tail(H)
|
||||
/obj/item/organ/tail/Remove(special = FALSE)
|
||||
if(owner?.dna?.species)
|
||||
owner.dna.species.stop_wagging_tail(owner)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/tail/cat
|
||||
name = "cat tail"
|
||||
@@ -26,13 +26,14 @@
|
||||
H.dna.features["tail_human"] = tail_type
|
||||
H.update_body()
|
||||
|
||||
/obj/item/organ/tail/cat/Remove(mob/living/carbon/human/H, special = 0)
|
||||
..()
|
||||
if(istype(H))
|
||||
/obj/item/organ/tail/cat/Remove(special = FALSE)
|
||||
if(!QDELETED(owner) && ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.dna.features["tail_human"] = "None"
|
||||
H.dna.species.mutant_bodyparts -= "tail_human"
|
||||
color = H.hair_color
|
||||
H.update_body()
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/tail/lizard
|
||||
name = "lizard tail"
|
||||
@@ -54,12 +55,13 @@
|
||||
H.dna.species.mutant_bodyparts |= "spines"
|
||||
H.update_body()
|
||||
|
||||
/obj/item/organ/tail/lizard/Remove(mob/living/carbon/human/H, special = 0)
|
||||
..()
|
||||
if(istype(H))
|
||||
/obj/item/organ/tail/lizard/Remove(special = FALSE)
|
||||
if(!QDELETED(owner) && ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.dna.species.mutant_bodyparts -= "tail_lizard"
|
||||
H.dna.species.mutant_bodyparts -= "spines"
|
||||
color = "#" + H.dna.features["mcolor"]
|
||||
tail_type = H.dna.features["tail_lizard"]
|
||||
spines = H.dna.features["spines"]
|
||||
H.update_body()
|
||||
return ..()
|
||||
|
||||
@@ -71,12 +71,13 @@
|
||||
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
M.UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/organ/tongue/Remove(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(say_mod && M.dna && M.dna.species)
|
||||
M.dna.species.say_mod = initial(M.dna.species.say_mod)
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
M.RegisterSignal(M, COMSIG_MOB_SAY, /mob/living/carbon/.proc/handle_tongueless_speech)
|
||||
/obj/item/organ/tongue/Remove(special = FALSE)
|
||||
if(!QDELETED(owner))
|
||||
if(say_mod && owner.dna?.species)
|
||||
owner.dna.species.say_mod = initial(owner.dna.species.say_mod)
|
||||
UnregisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
owner.RegisterSignal(owner, COMSIG_MOB_SAY, /mob/living/carbon/.proc/handle_tongueless_speech)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/tongue/could_speak_in_language(datum/language/dt)
|
||||
return is_type_in_typecache(dt, languages_possible)
|
||||
@@ -189,7 +190,7 @@
|
||||
var/insertpos = rand(1, message_list.len - 1)
|
||||
var/inserttext = message_list[insertpos]
|
||||
|
||||
if(!(copytext(inserttext, length(inserttext) - 2) == "..."))
|
||||
if(!(copytext(inserttext, -3) == "..."))//3 == length("...")
|
||||
message_list[insertpos] = inserttext + "..."
|
||||
|
||||
if(prob(20) && message_list.len > 3)
|
||||
@@ -290,7 +291,7 @@
|
||||
|
||||
/obj/item/organ/tongue/fluffy/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
if(message[1] != "*")
|
||||
message = replacetext(message, "ne", "nye")
|
||||
message = replacetext(message, "nu", "nyu")
|
||||
message = replacetext(message, "na", "nya")
|
||||
|
||||
@@ -189,19 +189,19 @@
|
||||
listeners = list(L) //Devil names are unique.
|
||||
power_multiplier *= 5 //if you're a devil and god himself addressed you, you fucked up
|
||||
//Cut out the name so it doesn't trigger commands
|
||||
message = copytext(message, 0, start)+copytext(message, start + length(devilinfo.truename), length(message) + 1)
|
||||
message = copytext(message, 1, start) + copytext(message, start + length(devilinfo.truename))
|
||||
break
|
||||
else if(dd_hasprefix(message, L.real_name))
|
||||
else if(findtext(message, L.real_name, 1, length(L.real_name) + 1))
|
||||
specific_listeners += L //focus on those with the specified name
|
||||
//Cut out the name so it doesn't trigger commands
|
||||
found_string = L.real_name
|
||||
|
||||
else if(dd_hasprefix(message, L.first_name()))
|
||||
else if(findtext(message, L.first_name(), 1, length(L.first_name()) + 1))
|
||||
specific_listeners += L //focus on those with the specified name
|
||||
//Cut out the name so it doesn't trigger commands
|
||||
found_string = L.first_name()
|
||||
|
||||
else if(L.mind && L.mind.assigned_role && dd_hasprefix(message, L.mind.assigned_role))
|
||||
else if(L.mind && L.mind.assigned_role && findtext(message, L.mind.assigned_role, 1, length(L.mind.assigned_role) + 1))
|
||||
specific_listeners += L //focus on those with the specified job
|
||||
//Cut out the job so it doesn't trigger commands
|
||||
found_string = L.mind.assigned_role
|
||||
@@ -209,7 +209,7 @@
|
||||
if(specific_listeners.len)
|
||||
listeners = specific_listeners
|
||||
power_multiplier *= (1 + (1/specific_listeners.len)) //2x on a single guy, 1.5x on two and so on
|
||||
message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1)
|
||||
message = copytext(message, length(found_string) + 1)
|
||||
|
||||
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
|
||||
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown")
|
||||
@@ -578,7 +578,7 @@
|
||||
cooldown = COOLDOWN_MEME
|
||||
for(var/V in listeners)
|
||||
var/mob/living/carbon/human/H = V
|
||||
|
||||
|
||||
if(H.client && H.client.prefs && H.client.prefs.cit_toggles & HYPNO) // probably a redundant check but for good measure
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
|
||||
@@ -719,19 +719,19 @@
|
||||
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
if(dd_hasprefix(message, L.real_name))
|
||||
if(findtext(message, L.real_name, 1, length(L.real_name) + 1))
|
||||
specific_listeners += L //focus on those with the specified name
|
||||
//Cut out the name so it doesn't trigger commands
|
||||
found_string = L.real_name
|
||||
power_multiplier += 0.5
|
||||
|
||||
else if(dd_hasprefix(message, L.first_name()))
|
||||
else if(findtext(message, L.first_name(), 1, length(L.first_name()) + 1))
|
||||
specific_listeners += L //focus on those with the specified name
|
||||
//Cut out the name so it doesn't trigger commands
|
||||
found_string = L.first_name()
|
||||
power_multiplier += 0.5
|
||||
|
||||
else if(L.mind && L.mind.assigned_role && dd_hasprefix(message, L.mind.assigned_role))
|
||||
else if(L.mind && L.mind.assigned_role && findtext(message, L.mind.assigned_role, 1, length(L.mind.assigned_role) + 1))
|
||||
specific_listeners += L //focus on those with the specified job
|
||||
//Cut out the job so it doesn't trigger commands
|
||||
found_string = L.mind.assigned_role
|
||||
@@ -740,7 +740,7 @@
|
||||
if(specific_listeners.len)
|
||||
listeners = specific_listeners
|
||||
//power_multiplier *= (1 + (1/specific_listeners.len)) //Put this is if it becomes OP, power is judged internally on a thrall, so shouldn't be nessicary.
|
||||
message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1)//I have no idea what this does
|
||||
message = copytext(message, length(found_string) + 1)//I have no idea what this does
|
||||
|
||||
var/obj/item/organ/tongue/T = user.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
if (T.name == "fluffy tongue") //If you sound hillarious, it's hard to take you seriously. This is a way for other players to combat/reduce their effectiveness.
|
||||
|
||||
Reference in New Issue
Block a user