Merge branch 'master' of https://github.com/tgstation/-tg-station into LifeProcsDuplicateFix

Conflicts:
	code/modules/mob/living/carbon/human/life.dm
This commit is contained in:
phil235
2015-02-25 19:01:59 +01:00
446 changed files with 4553 additions and 1995 deletions
+4
View File
@@ -31,6 +31,8 @@
if(client) client.screen |= W
if(pulling == W) stop_pulling()
update_inv_l_hand(0)
W.pixel_x = initial(W.pixel_x)
W.pixel_y = initial(W.pixel_y)
return 1
return 0
@@ -48,6 +50,8 @@
if(client) client.screen |= W
if(pulling == W) stop_pulling()
update_inv_r_hand(0)
W.pixel_x = initial(W.pixel_x)
W.pixel_y = initial(W.pixel_y)
return 1
return 0
@@ -93,7 +93,6 @@
update_icons()
/mob/living/carbon/alien/humanoid/hunter/throw_impact(A)
var/msg = ""
if(!leaping)
return ..()
@@ -101,7 +100,7 @@
if(A)
if(istype(A, /mob/living))
var/mob/living/L = A
msg = "<span class ='alertalien'>[src] pounces on [A]!</span>"
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
@@ -111,13 +110,13 @@
spawn(pounce_cooldown_time) //3s by default
pounce_cooldown = !pounce_cooldown
else
msg = "<span class ='alertalien'>[src] smashes into [A]!</span>"
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='alertalien'>[src] smashes into [A]!</span>")
weakened = 2
if(leaping)
leaping = 0
update_canmove()
visible_message(msg)
/mob/living/carbon/alien/humanoid/float(on)
@@ -54,7 +54,7 @@ var/const/MAX_ACTIVE_TIME = 400
if (sterile)
user << "<span class='userdanger'>It looks like the proboscis has been removed.</span>"
/obj/item/clothing/mask/facehugger/attackby(var/obj/item/O,var/mob/m)
/obj/item/clothing/mask/facehugger/attackby(var/obj/item/O,var/mob/m, params)
if(O.force)
Die()
return
+1 -1
View File
@@ -18,7 +18,7 @@
var/obj/mecha = null //This does not appear to be used outside of reference in mecha.dm.
var/obj/item/organ/brain/brain = null //The actual brain
/obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob)
/obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O,/obj/item/organ/brain)) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/newbrain = O
if(brain)
+17 -65
View File
@@ -133,74 +133,26 @@
else
mode() // Activate held item
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
if(health >= 0)
if(src == M && istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
visible_message( \
"<span class='notice'>[src] examines \himself.", \
"<span class='notice'>You check yourself for injuries.</span>")
for(var/obj/item/organ/limb/org in H.organs)
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(hallucination)
if(prob(30))
brutedamage += rand(30,40)
if(prob(30))
burndamage += rand(30,40)
if(brutedamage > 0)
status = "bruised"
if(brutedamage > 20)
status = "bleeding"
if(brutedamage > 40)
status = "mangled"
if(brutedamage > 0 && burndamage > 0)
status += " and "
if(burndamage > 40)
status += "peeling away"
else if(burndamage > 10)
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(status == "")
status = "OK"
src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]."
if(H.blood_max)
src << "<span class='danger'>You are bleeding!</span>"
if(staminaloss)
if(staminaloss > 30)
src << "<span class='info'>You're completely exhausted.</span>"
else
src << "<span class='info'>You feel fatigued.</span>"
if(dna && dna.species.id && dna.species.id == "skeleton" && !H.w_uniform && !H.wear_suit)
H.play_xylophone()
if(lying)
sleeping = max(0, sleeping - 5)
if(sleeping == 0)
resting = 0
M.visible_message("<span class='notice'>[M] shakes [src] trying to get \him up!</span>", \
"<span class='notice'>You shake [src] trying to get \him up!</span>")
else
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.wear_suit)
H.wear_suit.add_fingerprint(M)
else if(H.w_uniform)
H.w_uniform.add_fingerprint(M)
M.visible_message("<span class='notice'>[M] hugs [src] to make \him feel better!</span>", \
"<span class='notice'>You hug [src] to make \him feel better!</span>")
if(lying)
sleeping = max(0, sleeping - 5)
if(sleeping == 0)
resting = 0
M.visible_message("<span class='notice'>[M] shakes [src] trying to get \him up!</span>", \
"<span class='notice'>You shake [src] trying to get \him up!</span>")
else
M.visible_message("<span class='notice'>[M] hugs [src] to make \him feel better!</span>", \
"<span class='notice'>You hug [src] to make \him feel better!</span>")
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
/mob/living/carbon/proc/eyecheck()
@@ -364,7 +316,7 @@
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[slot_back]'> [back ? back : "Nothing"]</A>"
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank/internals))
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
dat += "<BR><A href='?src=\ref[src];internal=1'>[internal ? "Disable Internals" : "Set Internals"]</A>"
if(handcuffed)
@@ -386,7 +338,7 @@
if(href_list["internal"])
var/slot = text2num(href_list["internal"])
var/obj/item/ITEM = get_item_by_slot(slot)
if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
visible_message("<span class='danger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].</span>", \
"<span class='userdanger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].</span>")
if(do_mob(usr, src, POCKET_STRIP_DELAY))
@@ -394,7 +346,7 @@
internal = null
if(internals)
internals.icon_state = "internal0"
else if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
else if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
internal = ITEM
if(internals)
internals.icon_state = "internal1"
@@ -12,7 +12,7 @@
..()
/mob/living/carbon/attackby(obj/item/I, mob/user)
/mob/living/carbon/attackby(obj/item/I, mob/user, params)
if(lying || isslime(src))
if(surgeries.len)
if(user.a_intent == "help")
@@ -12,11 +12,11 @@
//inventory slots
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
var/obj/item/weapon/tank/internals/internal = null
var/obj/item/weapon/tank/internal = null
var/datum/dna/dna = null//Carbon
var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
var/co2overloadtime = null
var/temperature_resistance = T0C+75
var/temperature_resistance = T0C+75
@@ -109,6 +109,10 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
for(var/obj/item/organ/limb/org in organs)
var/brutedamage = org.brute_dam
//We want an accurate reading of .len
listclearnulls(org.embedded_objects)
blood_max += 0.5*org.embedded_objects.len
if(brutedamage > 30)
blood_max += 0.5
if(brutedamage > 50)
@@ -216,6 +216,12 @@
else
msg += "<B>[t_He] [t_has] severe cellular damage.</B>\n"
for(var/obj/item/organ/limb/L in organs)
for(var/obj/item/I in L.embedded_objects)
msg += "<B>[t_He] [t_has] \a \icon[I] [I] embedded in [t_his] [L.getDisplayName()]!</B>\n"
if(fire_stacks > 0)
msg += "[t_He] [t_is] covered in something flammable.\n"
if(fire_stacks < 0)
+83 -3
View File
@@ -154,7 +154,7 @@
<tr><td>&nbsp;</td></tr>"}
dat += "<tr><td><B>Back:</B></td><td><A href='?src=\ref[src];item=[slot_back]'>[(back && !(back.flags&ABSTRACT)) ? back : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(back, /obj/item/weapon/tank/internals))
if(has_breathable_mask && istype(back, /obj/item/weapon/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr><tr><td>&nbsp;</td></tr>"
@@ -181,7 +181,7 @@
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=\ref[src];item=[slot_wear_suit]'>[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
if(wear_suit)
dat += "<tr><td>&nbsp;&#8627;<B>Suit Storage:</B></td><td><A href='?src=\ref[src];item=[slot_s_store]'>[(s_store && !(s_store.flags&ABSTRACT)) ? s_store : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank/internals))
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_s_store]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
else
@@ -208,7 +208,7 @@
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Belt:</B></font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Belt:</B></td><td><A href='?src=\ref[src];item=[slot_belt]'>[(belt && !(belt.flags&ABSTRACT)) ? belt : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank/internals))
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
dat += "<tr><td>&nbsp;&#8627;<B>Pockets:</B></td><td><A href='?src=\ref[src];pockets=left'>[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
@@ -245,6 +245,23 @@
/mob/living/carbon/human/Topic(href, href_list)
if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
if(href_list["embedded_object"])
var/obj/item/I = locate(href_list["embedded_object"])
var/obj/item/organ/limb/L = locate(href_list["embedded_limb"])
if(!I || !L || I.loc != src) //no item, no limb, or item is not in limb (the person atleast) anymore
return
var/time_taken = 30*I.w_class
usr.visible_message("<span class='notice'>[usr] attempts to remove [I] from their [L.getDisplayName()]!</span>","<span class='notice'>You attempt to remove [I] from your [L.getDisplayName()], it will take [time_taken/10] seconds.</span>")
if(do_after(usr, time_taken, needhand = 1))
L.embedded_objects -= I
L.take_damage(8*I.w_class)//It hurts to rip it out, get surgery you dingus.
I.loc = get_turf(src)
usr.put_in_hands(I)
usr.emote("scream")
usr.visible_message("<span class='danger'>[usr] successfully rips [I] out of their [L.getDisplayName()]!</span>","<span class='userdanger'>You successfully remove [I] from your [L.getDisplayName()]!</span>")
return
if(href_list["item"])
var/slot = text2num(href_list["item"])
if(slot in check_obscured_slots())
@@ -631,3 +648,66 @@
if(mob_negates_gravity())
return
..()
/mob/living/carbon/human/help_shake_act(mob/living/carbon/human/M)
if(!istype(M))
return
var/mob/living/carbon/human/H = src
if(health >= 0)
if(src == M)
visible_message( \
"<span class='notice'>[src] examines \himself.", \
"<span class='notice'>You check yourself for injuries.</span>")
for(var/obj/item/organ/limb/org in H.organs)
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(hallucination)
if(prob(30))
brutedamage += rand(30,40)
if(prob(30))
burndamage += rand(30,40)
if(brutedamage > 0)
status = "bruised"
if(brutedamage > 20)
status = "bleeding"
if(brutedamage > 40)
status = "mangled"
if(brutedamage > 0 && burndamage > 0)
status += " and "
if(burndamage > 40)
status += "peeling away"
else if(burndamage > 10)
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(status == "")
status = "OK"
src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]."
for(var/obj/item/I in org.embedded_objects)
src << "\t <a href='byond://?src=\ref[H];embedded_object=\ref[I];embedded_limb=\ref[org]'>\red There is \a [I] embedded in your [org.getDisplayName()]!</a>"
if(H.blood_max)
src << "<span class='danger'>You are bleeding!</span>"
if(staminaloss)
if(staminaloss > 30)
src << "<span class='info'>You're completely exhausted.</span>"
else
src << "<span class='info'>You feel fatigued.</span>"
if(dna && dna.species.id && dna.species.id == "skeleton" && !H.w_uniform && !H.wear_suit)
H.play_xylophone()
else
if(H.wear_suit)
H.wear_suit.add_fingerprint(M)
else if(H.w_uniform)
H.w_uniform.add_fingerprint(M)
..()
+17 -1
View File
@@ -38,8 +38,10 @@
fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
tinttotal = tintcheck() //here as both hud updates and status updates call it
..()
if(..())
//Stuff jammed in your limbs hurts
handle_embedded_objects()
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
@@ -342,3 +344,17 @@
if(head.flags & BLOCK_GAS_SMOKE_EFFECT)
. = 1
return .
/mob/living/carbon/human/proc/handle_embedded_objects()
for(var/obj/item/organ/limb/L in organs)
for(var/obj/item/I in L.embedded_objects)
if(prob(I.embedded_pain_chance))
L.take_damage(I.w_class*2)
src << "<span class='userdanger'>\the [I] embedded in your [L.getDisplayName()] hurts!</span>"
if(prob(I.embedded_fall_chance))
L.take_damage(I.w_class*5)
L.embedded_objects -= I
I.loc = get_turf(src)
visible_message("<span class='danger'>\the [I] falls out of [name]'s [L.getDisplayName()]!</span>","<span class='userdanger'>\the [I] falls out of your [L.getDisplayName()]!</span>")
#undef HUMAN_MAX_OXYLOSS
@@ -629,8 +629,6 @@
/datum/species/proc/movement_delay(var/mob/living/carbon/human/H)
var/mspeed = 0
if(H.status_flags & GOTTAGOFAST)
mspeed -= 1
var/hasjetpack = 0
if(istype(H.back, /obj/item/weapon/tank/jetpack))
@@ -664,6 +662,16 @@
mspeed += speedmod
if(H.status_flags & IGNORESLOWDOWN)
mspeed = 0
if(H.status_flags & GOTTAGOFAST)
mspeed -= 1
if(H.status_flags & GOTTAGOREALLYFAST)
mspeed -= 2
return mspeed
//////////////////
@@ -393,7 +393,7 @@
updatehealth()
return
/mob/living/carbon/slime/attackby(obj/item/W, mob/living/user)
/mob/living/carbon/slime/attackby(obj/item/W, mob/living/user, params)
if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Let's you feed slimes plasma.
if (user in Friends)
++Friends[user]
@@ -271,3 +271,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
else
M.do_attack_animation(src)
return 1
/mob/living/incapacitated()
if(stat || paralysis || stunned || weakened || restrained())
return 1
@@ -392,7 +392,7 @@
return !cleared
/mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob)
/mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/restraints/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do
return
@@ -95,6 +95,7 @@
modules += new /obj/item/weapon/scalpel(src)
modules += new /obj/item/weapon/circular_saw(src)
modules += new /obj/item/weapon/extinguisher/mini(src)
modules += new /obj/item/roller/robo(src)
emag = new /obj/item/weapon/reagent_containers/spray(src)
emag.reagents.add_reagent("facid", 250)
@@ -234,27 +235,17 @@
/obj/item/weapon/robot_module/miner/New()
..()
var/mob/living/silicon/robot/R = loc
modules += new /obj/item/borg/sight/meson(src)
emag = new /obj/item/borg/stun(src)
modules += new /obj/item/weapon/storage/bag/ore(src)
if(R.emagged)
modules += new /obj/item/weapon/pickaxe/drill/diamonddrill(src)
else
modules += new /obj/item/weapon/pickaxe/jackhammer/borgdrill(src)
modules += new /obj/item/weapon/pickaxe/drill/cyborg(src)
modules += new /obj/item/weapon/shovel(src)
modules += new /obj/item/device/flashlight/lantern(src)
modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
modules += new /obj/item/device/t_scanner/adv_mining_scanner(src)
modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src)
fix_modules()
/obj/item/weapon/robot_module/miner/on_emag()
..()
for(var/obj/item/weapon/pickaxe/jackhammer/borgdrill/D in modules)
qdel(D)
modules += new /obj/item/weapon/pickaxe/drill/diamonddrill(src)
rebuild()
/obj/item/weapon/robot_module/syndicate
name = "syndicate robot module"
@@ -8,7 +8,7 @@
emote_see = list("flutters")
response_help = "shoos"
response_disarm = "brushes aside"
response_harm = "aquashes"
response_harm = "squashes"
speak_chance = 0
maxHealth = 2
health = 2
@@ -61,7 +61,7 @@
onclose(user, "mob[real_name]")
return
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob)
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(inventory_head && inventory_back)
//helmet and armor = 100% protection
if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) )
@@ -147,7 +147,7 @@
qdel(access_card) //Otherwise it ends up on the floor!
..()
/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user)
/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver) && stat != DEAD)
if(health < health_repair_max)
user << "<span class='notice'>You start to tighten loose screws on [src].</span>"
@@ -71,7 +71,7 @@
SV.eat(src)
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob)
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
var/obj/item/weapon/reagent_containers/glass/G = O
@@ -111,7 +111,7 @@
udder.my_atom = src
..()
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob)
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
var/obj/item/weapon/reagent_containers/glass/G = O
@@ -227,7 +227,7 @@ var/global/chicken_count = 0
..()
chicken_count -= 1
/mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob)
/mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/wheat)) //feedin' dem chickens
if(!stat && eggsleft < 8)
user.visible_message("<span class='notice'>[user] feeds [O] to [name]! It clucks happily.</span>","<span class='notice'>You feed [O] to [name]! It clucks happily.</span>")
@@ -30,7 +30,7 @@
dir = i
sleep(1)
/mob/living/simple_animal/pug/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
/mob/living/simple_animal/pug/attackby(var/obj/item/O as obj, var/mob/user as mob, params) //Marker -Agouri
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O]</span>")
@@ -397,6 +397,7 @@
name = "Goliath tentacle"
icon = 'icons/mob/animal.dmi'
icon_state = "Goliath_tentacle"
var/latched = 0
/obj/effect/goliath_tentacle/New()
var/turftype = get_turf(src)
@@ -423,15 +424,15 @@
/obj/effect/goliath_tentacle/proc/Trip()
for(var/mob/living/M in src.loc)
M.Weaken(5)
visible_message("<span class='warning'>The [src.name] knocks [M.name] down!</span>")
qdel(src)
/obj/effect/goliath_tentacle/Crossed(AM as mob|obj)
if(isliving(AM))
Trip()
return
..()
M.Stun(5)
M.adjustBruteLoss(rand(10,15))
latched = 1
visible_message("<span class='danger'>The [src.name] grabs hold of [M.name]!</span>")
if(!latched)
qdel(src)
else
spawn(50)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/goliath/Die()
var/obj/item/asteroid/goliath_hide/G = new /obj/item/asteroid/goliath_hide(src.loc)
@@ -124,7 +124,7 @@
src.visible_message("<span class='notice'>The [src.name] was bruised!</span>")
bruised = 1
/mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I as obj, mob/user as mob)
/mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom))
if(stat == DEAD && !recovery_cooldown)
Recover()
@@ -57,7 +57,7 @@
attacktext = "slashes"
status_flags = 0
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob)
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(O.force)
if(prob(80))
var/damage = O.force
@@ -303,7 +303,7 @@
icon_state = "parrot_fly"
//Mobs with objects
/mob/living/simple_animal/parrot/attackby(var/obj/item/O as obj, var/mob/living/user as mob)
/mob/living/simple_animal/parrot/attackby(var/obj/item/O as obj, var/mob/living/user as mob, params)
if(!stat && !client && !istype(O, /obj/item/stack/medical) && !istype(O,/obj/item/weapon/reagent_containers/food/snacks/cracker))
if(O.force)
if(parrot_state == PARROT_PERCH)
@@ -38,7 +38,7 @@
return
/mob/living/simple_animal/shade/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
/mob/living/simple_animal/shade/attackby(var/obj/item/O as obj, var/mob/user as mob, params) //Marker -Agouri
if(istype(O, /obj/item/device/soulstone))
var/obj/item/device/soulstone/SS = O
SS.transfer_soul("SHADE", src, user)
@@ -327,7 +327,7 @@
updatehealth()
/mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/living/user as mob) //Marker -Agouri
/mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/living/user as mob, params) //Marker -Agouri
if(O.flags & NOBLUDGEON)
return
+3
View File
@@ -229,6 +229,9 @@ var/next_mob_id = 0
/mob/proc/restrained()
return
/mob/proc/incapacitated()
return
//This proc is called whenever someone clicks an inventory ui slot.
/mob/proc/attack_ui(slot)
var/obj/item/W = get_active_hand()
+1 -1
View File
@@ -138,7 +138,7 @@
if(mob.restrained()) //Why being pulled while cuffed prevents you from moving
for(var/mob/M in range(mob, 1))
if(M.pulling == mob)
if(!M.restrained() && M.stat == 0 && M.canmove && mob.Adjacent(M))
if(!M.incapacitated() && mob.Adjacent(M))
src << "<span class='notice'>You're restrained! You can't move!</span>"
return 0
else
+3
View File
@@ -6,6 +6,9 @@
if(admin_notice)
src << "<span class='notice'><b>Admin Notice:</b>\n \t [admin_notice]</span>"
if(config.soft_popcap && living_player_count() >= config.soft_popcap)
src << "<span class='notice'><b>Server Notice:</b>\n \t [config.soft_popcap_message]</span>"
if(!mind)
mind = new /datum/mind(key)
mind.active = 1
@@ -126,6 +126,10 @@
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
usr << "<span class='danger'>The round is either not ready, or has already finished...</span>"
return
var/relevent_cap = max(config.hard_popcap, config.extreme_popcap)
if(relevent_cap && living_player_count() >= relevent_cap && !(ckey(key) in admin_datums))
usr << "<span class='danger'>[config.hard_popcap_message]</span>"
return
LateChoices()
if(href_list["manifest"])