mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
@@ -3,7 +3,7 @@
|
||||
/mob/proc/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -31,7 +31,7 @@
|
||||
/mob/proc/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -54,7 +54,7 @@
|
||||
/mob/proc/melt()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -356,14 +356,6 @@
|
||||
key = "g"
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/shadowling
|
||||
name = "Shadowling Hivemind"
|
||||
desc = "Shadowlings and their thralls are capable of communicating over a psychic hivemind."
|
||||
speech_verb = "says"
|
||||
colour = "shadowling"
|
||||
key = "8"
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
|
||||
if(speaker.mind && speaker.mind.changeling)
|
||||
|
||||
@@ -49,8 +49,6 @@ In all, this is a lot like the monkey code. /N
|
||||
/mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M as mob)
|
||||
if(..()) //to allow surgery to return properly.
|
||||
return 0
|
||||
if(istype(src,/mob/living/carbon/alien/humanoid))
|
||||
return 0 //this is horrible but 100% necessary
|
||||
|
||||
switch(M.a_intent)
|
||||
if("help")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/carbon/alien/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -22,7 +22,7 @@
|
||||
/mob/living/carbon/alien/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -254,7 +254,18 @@
|
||||
help_shake_act(M)
|
||||
|
||||
if ("grab")
|
||||
grabbedby(M)
|
||||
if (M == src || anchored)
|
||||
return
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src)
|
||||
|
||||
M.put_in_active_hand(G)
|
||||
|
||||
G.synch()
|
||||
|
||||
LAssailant = M
|
||||
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("<span class='warning'>[M] has grabbed [src] passively!</span>")
|
||||
|
||||
if ("harm")
|
||||
M.do_attack_animation(src)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
/mob/living/carbon/alien/humanoid/regenerate_icons()
|
||||
..()
|
||||
if (notransform) return
|
||||
if (monkeyizing) return
|
||||
|
||||
update_inv_head(0,0)
|
||||
update_inv_wear_suit(0,0)
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
/obj/item/organ/brain/New()
|
||||
..()
|
||||
spawn(5)
|
||||
for(var/mob/living/carbon/brain/bmob in src) //I'm going to hell for this, but there's no other way to stop these runtimes.
|
||||
bmob.client.screen.len = null //clear the hud
|
||||
if(brainmob && brainmob.client)
|
||||
brainmob.client.screen.len = null //clear the hud
|
||||
|
||||
/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H)
|
||||
name = "\the [H]'s [initial(src.name)]"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/mob/living/carbon/brain/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -169,17 +169,17 @@
|
||||
..()
|
||||
|
||||
/obj/item/device/mmi/posibrain/New()
|
||||
for(var/mob/living/carbon/brain/bmob in src) //Also going to hell for this, but this should fix the runtimes.
|
||||
bmob = new /mob/living/carbon/brain(src)
|
||||
bmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
bmob.real_name = src.brainmob.name
|
||||
bmob.loc = src
|
||||
bmob.container = src
|
||||
bmob.robot_talk_understand = 1
|
||||
bmob.stat = 0
|
||||
bmob.silent = 0
|
||||
bmob.brain_op_stage = 4.0
|
||||
dead_mob_list -= bmob
|
||||
|
||||
src.brainmob = new(src)
|
||||
src.brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
src.brainmob.real_name = src.brainmob.name
|
||||
src.brainmob.loc = src
|
||||
src.brainmob.container = src
|
||||
src.brainmob.robot_talk_understand = 1
|
||||
src.brainmob.stat = 0
|
||||
src.brainmob.silent = 0
|
||||
src.brainmob.brain_op_stage = 4.0
|
||||
dead_mob_list -= src.brainmob
|
||||
|
||||
..()
|
||||
|
||||
|
||||
@@ -27,47 +27,34 @@ mob/living
|
||||
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
|
||||
germ_level++
|
||||
|
||||
#define STOMACH_ATTACK_DELAY 4
|
||||
|
||||
/mob/living/carbon/var/last_stomach_attack //defining this here because no one would look in carbon_defines for it
|
||||
|
||||
/mob/living/carbon/relaymove(var/mob/user, direction)
|
||||
if(user in src.stomach_contents)
|
||||
if(last_stomach_attack + STOMACH_ATTACK_DELAY > world.time) return
|
||||
|
||||
last_stomach_attack = world.time
|
||||
for(var/mob/M in hearers(4, src))
|
||||
if(M.client)
|
||||
M.show_message(text("\red You hear something rumbling inside [src]'s stomach..."), 2)
|
||||
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
if(I && I.force)
|
||||
var/d = rand(round(I.force / 4), I.force)
|
||||
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/organ/external/organ = H.get_organ("chest")
|
||||
if (istype(organ))
|
||||
if(organ.take_damage(d, 0))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
H.updatehealth()
|
||||
|
||||
else
|
||||
src.take_organ_damage(d)
|
||||
|
||||
for(var/mob/M in viewers(user, null))
|
||||
if(prob(40))
|
||||
for(var/mob/M in hearers(4, src))
|
||||
if(M.client)
|
||||
M.show_message(text("\red <B>[user] attacks [src]'s stomach wall with the [I.name]!"), 2)
|
||||
playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
M.show_message(text("\red You hear something rumbling inside [src]'s stomach..."), 2)
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
if(I && I.force)
|
||||
var/d = rand(round(I.force / 4), I.force)
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/organ/external/organ = H.get_organ("chest")
|
||||
if (istype(organ))
|
||||
if(organ.take_damage(d, 0))
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
else
|
||||
src.take_organ_damage(d)
|
||||
for(var/mob/M in viewers(user, null))
|
||||
if(M.client)
|
||||
M.show_message(text("\red <B>[user] attacks [src]'s stomach wall with the [I.name]!"), 2)
|
||||
playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
|
||||
if(prob(src.getBruteLoss() - 50))
|
||||
for(var/atom/movable/A in stomach_contents)
|
||||
A.loc = loc
|
||||
stomach_contents.Remove(A)
|
||||
src.gib()
|
||||
|
||||
#undef STOMACH_ATTACK_DELAY
|
||||
if(prob(src.getBruteLoss() - 50))
|
||||
for(var/atom/movable/A in stomach_contents)
|
||||
A.loc = loc
|
||||
stomach_contents.Remove(A)
|
||||
src.gib()
|
||||
|
||||
/mob/living/carbon/gib()
|
||||
for(var/mob/M in src)
|
||||
@@ -334,25 +321,22 @@ mob/living
|
||||
src << "You must be conscious to do this!"
|
||||
return
|
||||
|
||||
/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine)
|
||||
var/datum/pipe_network/network = starting_machine.return_network(starting_machine)
|
||||
if(!network)
|
||||
return
|
||||
for(var/datum/pipeline/pipeline in network.line_members)
|
||||
for(var/obj/machinery/atmospherics/A in (pipeline.members || pipeline.edges))
|
||||
if(!A.pipe_image)
|
||||
A.pipe_image = image(A, A.loc, layer = 20, dir = A.dir) //the 20 puts it above Byond's darkness (not its opacity view)
|
||||
pipes_shown += A.pipe_image
|
||||
client.images += A.pipe_image
|
||||
/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/unary/starting_machine)
|
||||
for(var/datum/pipeline/pipeline in starting_machine.network.line_members)
|
||||
for(var/atom/A in (pipeline.members || pipeline.edges))
|
||||
var/image/new_image = image(A, A.loc, dir = A.dir)
|
||||
pipes_shown += new_image
|
||||
client.images += new_image
|
||||
|
||||
/mob/living/proc/remove_ventcrawl()
|
||||
if(client)
|
||||
for(var/image/current_image in pipes_shown)
|
||||
client.images -= current_image
|
||||
client.eye = src
|
||||
for(var/image/current_image in pipes_shown)
|
||||
client.images -= current_image
|
||||
|
||||
pipes_shown.len = 0
|
||||
|
||||
if(client)
|
||||
client.eye = src
|
||||
|
||||
/mob/living/carbon/clean_blood()
|
||||
. = ..()
|
||||
if(ishuman(src))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/carbon/human/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -42,7 +42,7 @@
|
||||
/mob/living/carbon/human/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -62,7 +62,7 @@
|
||||
/mob/living/carbon/human/melt()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
if("scream", "fart", "flip", "snap")
|
||||
if("scream", "fart", "flip")
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
|
||||
//Everything else, including typos of the above emotes
|
||||
else
|
||||
@@ -720,29 +720,6 @@
|
||||
m_type = 2
|
||||
|
||||
|
||||
if ("snap")
|
||||
if(prob(95))
|
||||
m_type = 2
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/organ/external/L = H.get_organ("l_hand")
|
||||
var/obj/item/organ/external/R = H.get_organ("r_hand")
|
||||
var/left_hand_good = 0
|
||||
var/right_hand_good = 0
|
||||
if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.status & ORGAN_SPLINTED)) && (!(L.status & ORGAN_BROKEN)))
|
||||
left_hand_good = 1
|
||||
if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.status & ORGAN_SPLINTED)) && (!(R.status & ORGAN_BROKEN)))
|
||||
right_hand_good = 1
|
||||
|
||||
if (!left_hand_good && !right_hand_good)
|
||||
usr << "You need at least one hand in good working order to snap your fingers."
|
||||
return
|
||||
|
||||
message = "<b>[src]</b> snaps \his fingers."
|
||||
playsound(src.loc, 'sound/effects/fingersnap.ogg', 50, 1, -3)
|
||||
else
|
||||
message = "<span class='danger'><b>[src]</b> snaps \his fingers right off!</span>"
|
||||
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
|
||||
|
||||
// Needed for M_TOXIC_FART
|
||||
if("fart")
|
||||
|
||||
@@ -247,7 +247,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,1,2),0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,2),0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,2),0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "head" && processing_dismember.name != "groin")
|
||||
processing_dismember.droplimb(1,1,0,1)
|
||||
limbs_affected -= 1
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
var/update = 0
|
||||
var/weapon_message = "Explosive Blast"
|
||||
for(var/obj/item/organ/external/temp in organs)
|
||||
switch(temp.limb_name)
|
||||
switch(temp.name)
|
||||
if("head")
|
||||
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
|
||||
if("chest")
|
||||
@@ -1400,8 +1400,6 @@
|
||||
regenerate_icons()
|
||||
fixblood()
|
||||
|
||||
UpdateAppearance()
|
||||
|
||||
if(species)
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
stance_damage = 0
|
||||
|
||||
// standing is poor
|
||||
if(stance_damage >= 4)
|
||||
if(stance_damage >= 4 || (stance_damage >= 2 && prob(5)))
|
||||
if(!(lying || resting))
|
||||
if(species && !(species.flags & NO_PAIN))
|
||||
emote("scream")
|
||||
|
||||
@@ -46,7 +46,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
set invisibility = 0
|
||||
//set background = 1
|
||||
|
||||
if (notransform) return
|
||||
if (monkeyizing) return
|
||||
if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE
|
||||
|
||||
..()
|
||||
@@ -760,24 +760,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount
|
||||
else light_amount = 10
|
||||
if(light_amount > species.light_dam) //if there's enough light, start dying
|
||||
if(species.light_effect_amp)
|
||||
adjustFireLoss(5) //This gets doubled by Shadowling's innate fire weakness, so it ends up being 10.
|
||||
else
|
||||
adjustFireLoss(1)
|
||||
adjustBruteLoss(1)
|
||||
src << "<span class='userdanger'>The light burns you!</span>"
|
||||
src << 'sound/weapons/sear.ogg'
|
||||
take_overall_damage(1,1)
|
||||
else //heal in the dark
|
||||
if(species.light_effect_amp)
|
||||
adjustFireLoss(-5)
|
||||
adjustBruteLoss(-5)
|
||||
adjustBrainLoss(-25) //gibbering shadowlings are hilarious but also bad to have
|
||||
adjustCloneLoss(-1)
|
||||
SetWeakened(0)
|
||||
SetStunned(0)
|
||||
else
|
||||
adjustFireLoss(-1)
|
||||
adjustBruteLoss(-1)
|
||||
heal_overall_damage(1,1)
|
||||
|
||||
|
||||
//The fucking FAT mutation is the greatest shit ever. It makes everyone so hot and bothered.
|
||||
|
||||
@@ -471,10 +471,8 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
//For legacy support.
|
||||
/mob/living/carbon/human/regenerate_icons()
|
||||
..()
|
||||
if(notransform) return
|
||||
if(monkeyizing) return
|
||||
update_mutations(0)
|
||||
update_body(0)
|
||||
update_hair(0)
|
||||
update_mutantrace(0)
|
||||
update_inv_w_uniform(0,0)
|
||||
update_inv_wear_id(0)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
set invisibility = 0
|
||||
//set background = 1
|
||||
|
||||
if (src.notransform)
|
||||
if (src.monkeyizing)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/carbon/monkey/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -21,7 +21,7 @@
|
||||
/mob/living/carbon/monkey/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/mob/living/carbon/monkey/Life()
|
||||
set invisibility = 0
|
||||
//set background = 1
|
||||
if (notransform) return
|
||||
if (monkeyizing) return
|
||||
if (update_muts)
|
||||
update_muts=0
|
||||
domutcheck(src,null,MUTCHK_FORCED)
|
||||
|
||||
@@ -41,8 +41,7 @@
|
||||
var/brute_mod = null // Physical damage reduction/malus.
|
||||
var/burn_mod = null // Burn damage reduction/malus.
|
||||
|
||||
var/light_dam //Light level above which species takes damage, and below which it heals.
|
||||
var/light_effect_amp //If 0, takes/heals 1 burn and brute per tick. Otherwise, both healing and damage effects are amplified.
|
||||
var/light_dam
|
||||
|
||||
var/max_hurt_damage = 9 // Max melee damage dealt + 5 if hulk
|
||||
var/list/default_genes = list()
|
||||
|
||||
+234
-304
@@ -1,7 +1,7 @@
|
||||
|
||||
/mob/living/Life()
|
||||
..()
|
||||
if (notransform) return
|
||||
if (monkeyizing) return
|
||||
if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE
|
||||
if(mind)
|
||||
if(mind in ticker.mode.implanted)
|
||||
@@ -460,9 +460,6 @@
|
||||
for(var/mob/living/carbon/slime/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
|
||||
/*//////////////////////
|
||||
START RESIST PROCS
|
||||
*///////////////////////
|
||||
|
||||
/mob/living/verb/resist()
|
||||
set name = "Resist"
|
||||
@@ -476,327 +473,260 @@
|
||||
|
||||
//Getting out of someone's inventory.
|
||||
if(istype(src.loc,/obj/item/weapon/holder))
|
||||
resist_holder()
|
||||
var/obj/item/weapon/holder/H = src.loc //Get our item holder.
|
||||
var/mob/M = H.loc //Get our mob holder (if any).
|
||||
|
||||
if(istype(M))
|
||||
M.unEquip(H)
|
||||
M << "[H] wriggles out of your grip!"
|
||||
src << "You wriggle out of [M]'s grip!"
|
||||
else if(istype(H.loc,/obj/item))
|
||||
src << "You struggle free of [H.loc]."
|
||||
H.loc = get_turf(H)
|
||||
|
||||
if(istype(M))
|
||||
for(var/atom/A in M.contents)
|
||||
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
|
||||
return
|
||||
|
||||
M.status_flags &= ~PASSEMOTES
|
||||
return
|
||||
|
||||
//Resisting control by an alien mind.
|
||||
if(istype(src.loc,/mob/living/simple_animal/borer))
|
||||
resist_borer()
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
var/mob/living/captive_brain/H = src
|
||||
|
||||
H << "\red <B>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</B>"
|
||||
B.host << "\red <B>You feel the captive mind of [src] begin to resist your control.</B>"
|
||||
|
||||
spawn(rand(350,450)+B.host.brainloss)
|
||||
|
||||
if(!B || !B.controlling)
|
||||
return
|
||||
|
||||
B.host.adjustBrainLoss(rand(5,10))
|
||||
H << "\red <B>With an immense exertion of will, you regain control of your body!</B>"
|
||||
B.host << "\red <B>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</b>"
|
||||
|
||||
B.detatch()
|
||||
|
||||
verbs -= /mob/living/carbon/proc/release_control
|
||||
verbs -= /mob/living/carbon/proc/punish_host
|
||||
verbs -= /mob/living/carbon/proc/spawn_larvae
|
||||
|
||||
return
|
||||
|
||||
//resisting grabs (as if it helps anyone...)
|
||||
if ((!(L.stat) && !(L.restrained())))
|
||||
resist_grab(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
|
||||
if ((!( L.stat ) && !( L.restrained() )))
|
||||
var/resisting = 0
|
||||
for(var/obj/O in L.requests)
|
||||
L.requests.Remove(O)
|
||||
del(O)
|
||||
resisting++
|
||||
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
||||
resisting++
|
||||
if (G.state == 1)
|
||||
del(G)
|
||||
else
|
||||
if (G.state == 2)
|
||||
if (prob(25))
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message(text("\red [] has broken free of []'s grip!", L, G.assailant), 1)
|
||||
del(G)
|
||||
else
|
||||
if (G.state == 3)
|
||||
if (prob(5))
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red [] has broken free of []'s headlock!", L, G.assailant), 1)
|
||||
del(G)
|
||||
if(resisting)
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red <B>[] resists!</B>", L), 1)
|
||||
|
||||
//unbuckling yourself
|
||||
if(L.buckled && (L.last_special <= world.time) )
|
||||
resist_buckle(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
if( C.handcuffed )
|
||||
C.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
C.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(L))
|
||||
O.show_message("\red <B>[usr] attempts to unbuckle themself!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(usr, 1200))
|
||||
if(!C.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(C))
|
||||
O.show_message("\red <B>[usr] manages to unbuckle themself!</B>", 1)
|
||||
C << "\blue You successfully unbuckle yourself."
|
||||
C.buckled.manual_unbuckle(C)
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
|
||||
//Breaking out of a locker?
|
||||
else if(src.loc && (istype(src.loc, /obj/structure/closet)))
|
||||
resist_closet()
|
||||
else if( src.loc && (istype(src.loc, /obj/structure/closet)) )
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
|
||||
var/obj/structure/closet/C = L.loc
|
||||
if(C.opened)
|
||||
return //Door's open... wait, why are you in it's contents then?
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist'
|
||||
else
|
||||
if(!C.welded)
|
||||
return //closed but not welded...
|
||||
// else Meh, lets just keep it at 2 minutes for now
|
||||
// breakout_time++ //Harder to get out of welded lockers than locked lockers
|
||||
|
||||
//okay, so the closet is either welded or locked... resist!!!
|
||||
L.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
L.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
|
||||
for(var/mob/O in viewers(usr.loc))
|
||||
O.show_message("\red <B>The [L.loc] begins to shake violently!</B>", 1)
|
||||
|
||||
|
||||
spawn(0)
|
||||
if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
|
||||
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
|
||||
return
|
||||
|
||||
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return
|
||||
else
|
||||
if(!C.welded)
|
||||
return
|
||||
|
||||
//Well then break it!
|
||||
if(istype(usr.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
SC.desc = "It appears to be broken."
|
||||
SC.icon_state = SC.icon_off
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
SC.broken = 1
|
||||
SC.locked = 0
|
||||
SC.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [SC]!</B>", 1)
|
||||
if(istype(SC.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
var/obj/structure/bigDelivery/BD = SC.loc
|
||||
BD.attack_hand(usr)
|
||||
SC.open()
|
||||
else
|
||||
C.welded = 0
|
||||
C.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [C]!</B>", 1)
|
||||
if(istype(C.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
|
||||
var/obj/structure/bigDelivery/BD = C.loc
|
||||
BD.attack_hand(usr)
|
||||
C.open()
|
||||
|
||||
//breaking out of handcuffs
|
||||
else if(iscarbon(L))
|
||||
var/mob/living/carbon/CM = L
|
||||
|
||||
if(CM.on_fire && CM.canmove)
|
||||
resist_stop_drop_roll(CM) //this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
|
||||
|
||||
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))//this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
|
||||
resist_handcuffs(CM)
|
||||
|
||||
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time)) //this passes CM because the proc requires a typecasted mob/living/carbon instead of just 'src'
|
||||
resist_legcuffs(CM)
|
||||
|
||||
/*////////////////////
|
||||
RESIST SUBPROCS
|
||||
*/////////////////////
|
||||
|
||||
/* resist_holder allows small mobs that can be picked up to get out of their holder, so they aren't stuck forever.
|
||||
*/////
|
||||
/mob/living/proc/resist_holder()
|
||||
var/obj/item/weapon/holder/H = src.loc //Get our item holder.
|
||||
var/mob/M = H.loc //Get our mob holder (if any).
|
||||
|
||||
if(istype(M))
|
||||
M.unEquip(H)
|
||||
M << "[H] wriggles out of your grip!"
|
||||
src << "You wriggle out of [M]'s grip!"
|
||||
else if(istype(H.loc,/obj/item))
|
||||
src << "You struggle free of [H.loc]."
|
||||
H.loc = get_turf(H)
|
||||
|
||||
if(istype(M))
|
||||
for(var/atom/A in M.contents)
|
||||
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
|
||||
return
|
||||
|
||||
M.status_flags &= ~PASSEMOTES
|
||||
return
|
||||
|
||||
/* resist_borer allows a mob to regain control of their body after a borer has assumed control.
|
||||
*/////
|
||||
/mob/living/proc/resist_borer()
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
var/mob/living/captive_brain/H = src
|
||||
|
||||
H << "\red <B>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</B>"
|
||||
B.host << "\red <B>You feel the captive mind of [src] begin to resist your control.</B>"
|
||||
|
||||
spawn(rand(350,450)+B.host.brainloss)
|
||||
|
||||
if(!B || !B.controlling)
|
||||
CM.fire_stacks -= 5
|
||||
CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
|
||||
CM.update_canmove()
|
||||
CM.spin(32,2)
|
||||
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
|
||||
"<span class='notice'>You stop, drop, and roll!</span>")
|
||||
sleep(30)
|
||||
if(fire_stacks <= 0)
|
||||
CM.visible_message("<span class='danger'>[CM] has successfully extinguished themselves!</span>", \
|
||||
"<span class='notice'>You extinguish yourself.</span>")
|
||||
ExtinguishMob()
|
||||
return
|
||||
|
||||
B.host.adjustBrainLoss(rand(5,10))
|
||||
H << "\red <B>With an immense exertion of will, you regain control of your body!</B>"
|
||||
B.host << "\red <B>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</b>"
|
||||
|
||||
B.detatch()
|
||||
|
||||
verbs -= /mob/living/carbon/proc/release_control
|
||||
verbs -= /mob/living/carbon/proc/punish_host
|
||||
verbs -= /mob/living/carbon/proc/spawn_larvae
|
||||
|
||||
return
|
||||
|
||||
/* resist_grab allows a mob to resist a grab from another mob when disarming is not an option/neckgrabbed.
|
||||
*/////
|
||||
/mob/living/proc/resist_grab(var/mob/living/L)
|
||||
var/resisting = 0
|
||||
|
||||
for(var/obj/O in L.requests)
|
||||
L.requests.Remove(O)
|
||||
del(O)
|
||||
resisting++
|
||||
|
||||
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
||||
resisting++
|
||||
if (G.state == 1)
|
||||
del(G)
|
||||
|
||||
else
|
||||
if(G.state == 2)
|
||||
if(prob(25))
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message(text("\red [] has broken free of []'s grip!", L, G.assailant), 1)
|
||||
del(G)
|
||||
|
||||
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here.
|
||||
usr << "\red You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] is trying to break the handcuffs!</B>", CM), 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, 50))
|
||||
if(!CM.handcuffed || CM.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] manages to break the handcuffs!</B>", CM), 1)
|
||||
CM << "\red You successfully break your handcuffs."
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.handcuffed)
|
||||
CM.handcuffed = null
|
||||
CM.update_inv_handcuffed()
|
||||
else
|
||||
if(G.state == 3)
|
||||
if(prob(5))
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red [] has broken free of []'s headlock!", L, G.assailant), 1)
|
||||
del(G)
|
||||
var/obj/item/weapon/restraints/handcuffs/HC = CM.handcuffed
|
||||
var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/restraints/handcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to remove \the [HC]!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.handcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to remove the handcuffs!</B>", 1)
|
||||
CM << "\blue You successfully remove \the [CM.handcuffed]."
|
||||
CM.unEquip(CM.handcuffed)
|
||||
|
||||
if(resisting)
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message(text("\red <B>[] resists!</B>", L), 1)
|
||||
|
||||
/* resist_buckle allows a mob that is bucklecuffed to break free of the chair/bed/whatever
|
||||
*/////
|
||||
/mob/living/proc/resist_buckle(var/mob/living/L)
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
|
||||
if(C.handcuffed)
|
||||
C.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
C.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
|
||||
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stay still)</span>"
|
||||
for(var/mob/O in viewers(L))
|
||||
O.show_message("\red <B>[usr] attempts to unbuckle themself!</B>", 1)
|
||||
|
||||
spawn(0)
|
||||
if(do_after(usr, 1200))
|
||||
if(!C.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(C))
|
||||
O.show_message("\red <B>[usr] manages to unbuckle themself!</B>", 1)
|
||||
C << "\blue You successfully unbuckle yourself."
|
||||
C.buckled.manual_unbuckle(C)
|
||||
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
|
||||
/* resist_closet() allows a mob to break out of a welded/locked closet
|
||||
*/////
|
||||
/mob/living/proc/resist_closet()
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
var/mob/living/L = src
|
||||
var/obj/structure/closet/C = L.loc
|
||||
if(C.opened)
|
||||
return //Door's open... wait, why are you in it's contents then?
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist'
|
||||
else
|
||||
if(!C.welded)
|
||||
return //closed but not welded...
|
||||
// else Meh, lets just keep it at 2 minutes for now
|
||||
// breakout_time++ //Harder to get out of welded lockers than locked lockers
|
||||
|
||||
//okay, so the closet is either welded or locked... resist!!!
|
||||
L.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
L.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
|
||||
for(var/mob/O in viewers(usr.loc))
|
||||
O.show_message("\red <B>The [L.loc] begins to shake violently!</B>", 1)
|
||||
|
||||
|
||||
spawn(0)
|
||||
if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
|
||||
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
|
||||
return
|
||||
|
||||
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return
|
||||
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time))
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here.
|
||||
usr << "\red You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] is trying to break the legcuffs!</B>", CM), 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, 50))
|
||||
if(!CM.legcuffed || CM.buckled)
|
||||
return
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message(text("\red <B>[] manages to break the legcuffs!</B>", CM), 1)
|
||||
CM << "\red You successfully break your legcuffs."
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.legcuffed)
|
||||
CM.legcuffed = null
|
||||
CM.update_inv_legcuffed()
|
||||
else
|
||||
if(!C.welded)
|
||||
return
|
||||
|
||||
//Well then break it!
|
||||
if(istype(usr.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
SC.desc = "It appears to be broken."
|
||||
SC.icon_state = SC.icon_off
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
SC.broken = 1
|
||||
SC.locked = 0
|
||||
SC.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [SC]!</B>", 1)
|
||||
if(istype(SC.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
var/obj/structure/bigDelivery/BD = SC.loc
|
||||
BD.attack_hand(usr)
|
||||
SC.open()
|
||||
else
|
||||
C.welded = 0
|
||||
C.update_icon()
|
||||
usr << "\red You successfully break out!"
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("\red <B>\the [usr] successfully broke out of \the [C]!</B>", 1)
|
||||
if(istype(C.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
|
||||
var/obj/structure/bigDelivery/BD = C.loc
|
||||
BD.attack_hand(usr)
|
||||
C.open()
|
||||
|
||||
/* resist_stop_drop_roll allows a mob to stop, drop, and roll in order to put out a fire burning on them.
|
||||
*/////
|
||||
/mob/living/proc/resist_stop_drop_roll(var/mob/living/carbon/CM)
|
||||
CM.fire_stacks -= 5
|
||||
CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
|
||||
CM.update_canmove()
|
||||
CM.spin(32,2)
|
||||
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
|
||||
"<span class='notice'>You stop, drop, and roll!</span>")
|
||||
sleep(30)
|
||||
if(fire_stacks <= 0)
|
||||
CM.visible_message("<span class='danger'>[CM] has successfully extinguished themselves!</span>", \
|
||||
"<span class='notice'>You extinguish yourself.</span>")
|
||||
ExtinguishMob()
|
||||
return
|
||||
|
||||
/* resist_handcuffs allows a mob to break/remove their handcuffs after a delay
|
||||
*/////
|
||||
/mob/living/proc/resist_handcuffs(var/mob/living/carbon/CM)
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
var/obj/item/weapon/restraints/handcuffs/HC = CM.handcuffed
|
||||
|
||||
var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/restraints/handcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
|
||||
var/hulklien = 0 //variable used to define if someone is a hulk or alien
|
||||
|
||||
if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))
|
||||
hulklien = 1
|
||||
breakouttime = 50
|
||||
displaytime = 5
|
||||
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] [hulklien ? "seconds" : "minute[displaytime==1 ? "" : "s"]"] and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to [hulklien ? "break" : "remove"] \the [HC]!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.handcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to [hulklien ? "break" : "remove"] the handcuffs!</B>", 1)
|
||||
|
||||
CM << "\blue You successfully [hulklien ? "break" : "remove"] \the [CM.handcuffed]."
|
||||
|
||||
if(hulklien)
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.handcuffed)
|
||||
CM.handcuffed = null
|
||||
CM.update_inv_handcuffed()
|
||||
return
|
||||
|
||||
CM.unEquip(CM.handcuffed)
|
||||
|
||||
/* resist_legcuffs allows a mob to break/remove their legcuffs after a delay
|
||||
*/////
|
||||
/mob/living/proc/resist_legcuffs(var/mob/living/carbon/CM)
|
||||
var/obj/item/weapon/restraints/legcuffs/HC = CM.legcuffed
|
||||
|
||||
var/breakouttime = 1200 //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
|
||||
var/hulklien = 0 //variable used to define if someone is a hulk or alien
|
||||
|
||||
if(istype(HC)) //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
|
||||
if(isalienadult(CM) || (HULK in usr.mutations))
|
||||
hulklien = 1
|
||||
breakouttime = 50
|
||||
displaytime = 5
|
||||
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] [hulklien ? "seconds" : "minute[displaytime==1 ? "" : "s"]"] and you need to stand still)"
|
||||
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to [hulklien ? "break" : "remove"] \the [HC]!</B>", 1)
|
||||
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.legcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to [hulklien ? "break" : "remove"] the legcuffs!</B>", 1)
|
||||
|
||||
CM << "\blue You successfully [hulklien ? "break" : "remove"] \the [CM.legcuffed]."
|
||||
|
||||
if(!hulklien)
|
||||
CM.unEquip(CM.legcuffed)
|
||||
|
||||
if(hulklien)
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
qdel(CM.legcuffed)
|
||||
|
||||
CM.legcuffed = null
|
||||
CM.update_inv_legcuffed()
|
||||
|
||||
/*//////////////////////
|
||||
END RESIST PROCS
|
||||
*///////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
var/obj/item/weapon/restraints/legcuffs/HC = CM.legcuffed
|
||||
var/breakouttime = 1200 //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
|
||||
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
|
||||
if(istype(HC)) //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
|
||||
breakouttime = HC.breakouttime
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
|
||||
for(var/mob/O in viewers(CM))
|
||||
O.show_message( "\red <B>[usr] attempts to remove \the [HC]!</B>", 1)
|
||||
spawn(0)
|
||||
if(do_after(CM, breakouttime))
|
||||
if(!CM.legcuffed || CM.buckled)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
|
||||
O.show_message("\red <B>[CM] manages to remove the legcuffs!</B>", 1)
|
||||
CM << "\blue You successfully remove \the [CM.legcuffed]."
|
||||
CM.unEquip(CM.legcuffed)
|
||||
CM.legcuffed = null
|
||||
CM.update_inv_legcuffed()
|
||||
|
||||
/mob/living/carbon/proc/spin(spintime, speed)
|
||||
spawn()
|
||||
|
||||
@@ -7,11 +7,6 @@
|
||||
//If they're SSD, remove it so they can wake back up.
|
||||
player_logged = 0
|
||||
|
||||
//login during ventcrawl
|
||||
if(istype(loc, /obj/machinery/atmospherics)) //attach us back into the pipes
|
||||
remove_ventcrawl()
|
||||
add_ventcrawl(loc)
|
||||
|
||||
//Round specific stuff like hud updates
|
||||
if(ticker && ticker.mode)
|
||||
var/ref = "\ref[mind]"
|
||||
@@ -32,7 +27,4 @@
|
||||
if("vampire")
|
||||
if((ref in ticker.mode.thralls) || (mind in ticker.mode.enthralled))
|
||||
ticker.mode.update_vampire_icons_added(mind)
|
||||
if("shadowling")
|
||||
if((mind in ticker.mode.shadowling_thralls) || (mind in ticker.mode.shadows))
|
||||
ticker.mode.update_shadow_icons_added(src.mind)
|
||||
return .
|
||||
|
||||
@@ -6,6 +6,7 @@ var/list/ai_verbs_default = list(
|
||||
/mob/living/silicon/ai/proc/ai_alerts,
|
||||
/mob/living/silicon/ai/proc/announcement,
|
||||
/mob/living/silicon/ai/proc/ai_call_shuttle,
|
||||
/mob/living/silicon/ai/proc/ai_cancel_call,
|
||||
/mob/living/silicon/ai/proc/ai_camera_track,
|
||||
/mob/living/silicon/ai/proc/ai_camera_list,
|
||||
/mob/living/silicon/ai/proc/ai_goto_location,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/silicon/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -22,7 +22,7 @@
|
||||
/mob/living/silicon/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set invisibility = 0
|
||||
set background = 1
|
||||
|
||||
if (src.notransform)
|
||||
if (src.monkeyizing)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/silicon/robot/gib()
|
||||
//robots don't die when gibbed. instead they drop their MMI'd brain
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -23,7 +23,7 @@
|
||||
/mob/living/silicon/robot/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
/obj/item/mounted/frame/apc_frame,
|
||||
/obj/item/mounted/frame/alarm_frame,
|
||||
/obj/item/mounted/frame/firealarm,
|
||||
/obj/item/mounted/frame/newscaster_frame,
|
||||
/obj/item/mounted/frame/intercom,
|
||||
/obj/item/weapon/table_parts,
|
||||
/obj/item/weapon/rack_parts,
|
||||
/obj/item/weapon/camera_assembly,
|
||||
@@ -88,10 +86,7 @@
|
||||
wrapped.loc = user
|
||||
|
||||
//Pass the attack on to the target. This might delete/relocate wrapped.
|
||||
if(!target.attackby(wrapped, user, params) && target && wrapped)
|
||||
// If the attackby didn't resolve or delete the target or wrapped, afterattack
|
||||
// (Certain things, such as mountable frames, rely on afterattack)
|
||||
wrapped.afterattack(target, user, 1, params)
|
||||
target.attackby(wrapped,user, params)
|
||||
|
||||
//If wrapped did neither get deleted nor put into target, put it back into the gripper.
|
||||
if(wrapped && user && (wrapped.loc == user))
|
||||
|
||||
@@ -193,17 +193,16 @@
|
||||
|
||||
var/slot_num
|
||||
if(slot_start == 0)
|
||||
slot_num = 0
|
||||
slot_start = 3
|
||||
slot_num = 1
|
||||
slot_start = 2
|
||||
else
|
||||
slot_num = slot_start
|
||||
slot_num = slot_start + 1
|
||||
|
||||
do
|
||||
slot_num++
|
||||
if(slot_num > 3) slot_num = 1 //Wrap around.
|
||||
while(slot_start != slot_num) //If we wrap around without finding any free slots, just give up.
|
||||
if(module_active(slot_num))
|
||||
select_module(slot_num)
|
||||
return
|
||||
while(slot_start != slot_num) //If we wrap around without finding any free slots, just give up.
|
||||
slot_num++
|
||||
if(slot_num > 3) slot_num = 1 //Wrap around.
|
||||
|
||||
return
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set invisibility = 0
|
||||
//set background = 1
|
||||
|
||||
if (src.notransform)
|
||||
if (src.monkeyizing)
|
||||
return
|
||||
|
||||
src.blinded = null
|
||||
|
||||
@@ -10,7 +10,7 @@ var/list/robot_verbs_default = list(
|
||||
icon_state = "robot"
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
universal_understand = 1
|
||||
universal_speak = 1
|
||||
|
||||
var/sight_mode = 0
|
||||
var/custom_name = ""
|
||||
@@ -819,9 +819,9 @@ var/list/robot_verbs_default = list(
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/emag_act(user as mob)
|
||||
if(!ishuman(user) && !issilicon(user))
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/M = user
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!opened)//Cover is closed
|
||||
if(locked)
|
||||
if(prob(90))
|
||||
@@ -844,8 +844,8 @@ var/list/robot_verbs_default = list(
|
||||
sleep(6)
|
||||
if(prob(50))
|
||||
emagged = 1
|
||||
if(src.hud_used)
|
||||
src.hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open.
|
||||
if(H.hud_used)
|
||||
H.hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open.
|
||||
lawupdate = 0
|
||||
connected_ai = null
|
||||
user << "You emag [src]'s interface."
|
||||
@@ -855,8 +855,8 @@ var/list/robot_verbs_default = list(
|
||||
clear_inherent_laws()
|
||||
laws = new /datum/ai_laws/syndicate_override
|
||||
var/time = time2text(world.realtime,"hh:mm:ss")
|
||||
lawchanges.Add("[time] <B>:</B> [M.name]([M.key]) emagged [name]([key])")
|
||||
set_zeroth_law("Only [M.real_name] and people he designates as being such are Syndicate Agents.")
|
||||
lawchanges.Add("[time] <B>:</B> [H.name]([H.key]) emagged [name]([key])")
|
||||
set_zeroth_law("Only [H.real_name] and people he designates as being such are Syndicate Agents.")
|
||||
src << "\red ALERT: Foreign software detected."
|
||||
sleep(5)
|
||||
src << "\red Initiating diagnostics..."
|
||||
@@ -872,7 +872,7 @@ var/list/robot_verbs_default = list(
|
||||
src << "\red ERRORERRORERROR"
|
||||
src << "<b>Obey these laws:</b>"
|
||||
laws.show_laws(src)
|
||||
src << "\red \b ALERT: [M.real_name] is your new master. Obey your new laws and his commands."
|
||||
src << "\red \b ALERT: [H.real_name] is your new master. Obey your new laws and his commands."
|
||||
if(src.module && istype(src.module, /obj/item/weapon/robot_module/miner))
|
||||
for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
|
||||
del(D)
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
/obj/item/stack/sheet/metal = 50,
|
||||
/obj/item/stack/sheet/glass = 50,
|
||||
/obj/item/stack/sheet/rglass = 50,
|
||||
/obj/item/stack/cable_coil/cyborg = 50,
|
||||
/obj/item/stack/cable_coil = 50,
|
||||
/obj/item/stack/rods = 15,
|
||||
/obj/item/stack/tile/plasteel = 15
|
||||
)
|
||||
@@ -179,7 +179,7 @@
|
||||
G.amount = 50
|
||||
src.modules += G
|
||||
|
||||
var/obj/item/stack/cable_coil/cyborg/W = new /obj/item/stack/cable_coil/cyborg(src)
|
||||
var/obj/item/stack/cable_coil/W = new /obj/item/stack/cable_coil(src)
|
||||
W.amount = 50
|
||||
src.modules += W
|
||||
|
||||
@@ -389,7 +389,7 @@
|
||||
/obj/item/stack/tile/plasteel = 15,
|
||||
/obj/item/stack/sheet/metal = 20,
|
||||
/obj/item/stack/sheet/glass = 20,
|
||||
/obj/item/stack/cable_coil/cyborg = 30
|
||||
/obj/item/stack/cable_coil = 30
|
||||
)
|
||||
|
||||
New()
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/mob/living/simple_animal/ascendant_shadowling
|
||||
name = "Ascendant Shadowling"
|
||||
desc = "A large, floating eldritch horror. It has pulsing markings all about its body and large horns. It seems to be floating without any form of support."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "shadowling_ascended"
|
||||
icon_living = "shadowling_ascended"
|
||||
speak_emote = list("telepathically thunders", "telepathically booms")
|
||||
force_threshold = INFINITY //Can't die by normal means
|
||||
health = 100000
|
||||
maxHealth = 100000
|
||||
speed = 0
|
||||
var/phasing = 0
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
response_help = "stares at"
|
||||
response_disarm = "flails at"
|
||||
response_harm = "flails at"
|
||||
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 35
|
||||
melee_damage_upper = 35
|
||||
attacktext = "claws at"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
environment_smash = 2
|
||||
|
||||
faction = list("faithless")
|
||||
|
||||
/mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 //copypasta from carp code
|
||||
@@ -1023,7 +1023,7 @@ var/list/slot_equipment_priority = list( \
|
||||
if(world.time < client.move_delay) return 0
|
||||
if(stat==2) return 0
|
||||
if(anchored) return 0
|
||||
if(notransform) return 0
|
||||
if(monkeyizing) return 0
|
||||
if(restrained()) return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
var/disabilities = 0 //Carbon
|
||||
var/atom/movable/pulling = null
|
||||
var/next_move = null
|
||||
var/notransform = null //Carbon
|
||||
var/monkeyizing = null //Carbon
|
||||
var/other = 0.0
|
||||
var/hand = null
|
||||
var/eye_blind = null //Carbon
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
#define UPGRADE_COOLDOWN 40
|
||||
#define UPGRADE_KILL_TIMER 100
|
||||
|
||||
//times it takes for a mob to eat
|
||||
#define EAT_TIME_XENO 30
|
||||
#define EAT_TIME_FAT 100
|
||||
|
||||
//time it takes for a mob to be eaten (in deciseconds) (overrides mob eat time)
|
||||
#define EAT_TIME_MOUSE 30
|
||||
|
||||
/obj/item/weapon/grab
|
||||
name = "grab"
|
||||
flags = NOBLUDGEON | ABSTRACT
|
||||
@@ -194,47 +187,22 @@
|
||||
if(!affecting)
|
||||
return
|
||||
|
||||
if(M == affecting) //what the actual fuck is this
|
||||
if(M == affecting)
|
||||
s_click(hud)
|
||||
return
|
||||
|
||||
if(M == assailant && state >= GRAB_AGGRESSIVE) //no eatin unless you have an agressive grab
|
||||
if(checkvalid(user, affecting)) //wut
|
||||
if(M == assailant && state >= GRAB_AGGRESSIVE)
|
||||
if( (ishuman(user) && (FAT in user.mutations) && iscarbon(affecting) ) || ( isalien(user) && iscarbon(affecting) ) || ( istype(user,/mob/living/carbon/human/kidan) && istype(affecting,/mob/living/carbon/monkey/diona) ) || ( ishuman(user) && user.get_species() == "Tajaran" && istype(affecting,/mob/living/simple_animal/mouse) ) )
|
||||
var/mob/living/carbon/attacker = user
|
||||
user.visible_message("<span class='danger'>[user] is attempting to devour \the [affecting]!</span>")
|
||||
|
||||
if(!do_mob(user, affecting) || !do_after(user, checktime(user, affecting))) return
|
||||
|
||||
if(istype(user, /mob/living/carbon/alien/humanoid/hunter) || istype(affecting, /mob/living/simple_animal/mouse)) //mice are easy to eat
|
||||
if(!do_mob(user, affecting)||!do_after(user, 30)) return
|
||||
else
|
||||
if(!do_mob(user, affecting)||!do_after(user, 100)) return
|
||||
user.visible_message("<span class='danger'>[user] devours \the [affecting]!</span>")
|
||||
|
||||
affecting.loc = user //add the mob to the user
|
||||
attacker.stomach_contents.Add(affecting) //list keeping
|
||||
|
||||
affecting.loc = user
|
||||
attacker.stomach_contents.Add(affecting)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/grab/proc/checkvalid(var/mob/attacker, var/mob/prey) //does all the checking for the attack proc to see if a mob can eat another with the grab
|
||||
if(ishuman(attacker) && (FAT in attacker.mutations) && iscarbon(prey) && !isalien(prey)) //Fat people eating carbon mobs but not xenos
|
||||
return 1
|
||||
|
||||
if(isalien(attacker) && iscarbon(prey)) //Xenomorphs eating carbon mobs
|
||||
return 1
|
||||
|
||||
if(ishuman(attacker) && attacker.get_species() == "Kidan" && istype(prey,/mob/living/carbon/monkey/diona)) //Kidan eating nymphs
|
||||
return 1
|
||||
|
||||
if(ishuman(attacker) && attacker.get_species() == "Tajaran" && istype(prey,/mob/living/simple_animal/mouse)) //Tajaran eating mice. Meow!
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/grab/proc/checktime(var/mob/attacker, var/mob/prey) //Returns the time the attacker has to wait before they eat the prey
|
||||
if(isalien(attacker))
|
||||
return EAT_TIME_XENO //xenos get a speed boost
|
||||
|
||||
if(istype(prey,/mob/living/simple_animal/mouse)) //mice get eaten at xeno-eating-speed regardless
|
||||
return EAT_TIME_MOUSE
|
||||
|
||||
return EAT_TIME_FAT //if it doesn't fit into the above, it's probably a fat guy, take EAT_TIME_FAT to do it
|
||||
|
||||
/obj/item/weapon/grab/dropped()
|
||||
del(src)
|
||||
@@ -243,8 +211,3 @@
|
||||
/obj/item/weapon/grab/Destroy()
|
||||
del(hud)
|
||||
..()
|
||||
|
||||
#undef EAT_TIME_XENO
|
||||
#undef EAT_TIME_FAT
|
||||
|
||||
#undef EAT_TIME_MOUSE
|
||||
@@ -190,7 +190,7 @@
|
||||
if(isAI(mob))
|
||||
return AIMove(n,direct,mob)
|
||||
|
||||
if(mob.notransform) return//This is sota the goto stop mobs from moving var
|
||||
if(mob.monkeyizing) return//This is sota the goto stop mobs from moving var
|
||||
|
||||
if(isliving(mob))
|
||||
var/mob/living/L = mob
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/proc/monkeyize()
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
if (W==w_uniform) // will be torn
|
||||
continue
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
stunned = 1
|
||||
icon = null
|
||||
@@ -62,7 +62,7 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/AIize(move=1) // 'move' argument needs defining here too because BYOND is dumb
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/t in organs)
|
||||
del(t)
|
||||
@@ -70,11 +70,11 @@
|
||||
return ..(move)
|
||||
|
||||
/mob/living/carbon/AIize()
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -178,12 +178,12 @@
|
||||
|
||||
//human -> robot
|
||||
/mob/living/carbon/human/proc/Robotize()
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -236,12 +236,12 @@
|
||||
|
||||
//human -> alien
|
||||
/mob/living/carbon/human/proc/Alienize()
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -267,12 +267,12 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num)
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -302,12 +302,12 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/corgize()
|
||||
if (notransform)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
@@ -332,13 +332,13 @@
|
||||
usr << "\red Sorry but this mob type is currently unavailable."
|
||||
return
|
||||
|
||||
if(notransform)
|
||||
if(monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
Reference in New Issue
Block a user