Revert "Manual update"

This reverts commit 7aa67928b3.
This commit is contained in:
Aurorablade
2015-05-06 20:57:37 -04:00
parent 55c2ad3941
commit 56ea5311a9
106 changed files with 672 additions and 2494 deletions
+3 -3
View File
@@ -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
-8
View File
@@ -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
..()
+35 -51
View File
@@ -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
+1 -24
View File
@@ -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")
+3 -18
View File
@@ -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)
+1 -2
View File
@@ -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
View File
@@ -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()
-8
View File
@@ -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 .
+1
View File
@@ -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,
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+9 -46
View File
@@ -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
+1 -1
View File
@@ -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
+15 -15
View File
@@ -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