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

This commit is contained in:
paprka
2014-12-31 17:14:03 -08:00
174 changed files with 2875 additions and 1964 deletions
+1 -1
View File
@@ -670,7 +670,7 @@ var/global/list/g_fancy_list_of_types = null
if ("tournament chef") //Steven Seagal FTW
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chef(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
+5 -5
View File
@@ -18,7 +18,7 @@
if(!armed)
if(ishuman(usr))
var/mob/living/carbon/human/user = usr
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50))
user << "Your hand slips, setting off the trigger."
pulse(0)
update_icon()
@@ -65,11 +65,11 @@
pulse(0)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user as mob)
if(!armed)
user << "<span class='notice'>You arm [src].</span>"
else
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -83,9 +83,9 @@
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user as mob)
if(armed)
if(((user.getBrainLoss() >= 60 || CLUMSY in user.mutations)) && prob(50))
if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
+1 -1
View File
@@ -160,7 +160,7 @@
/obj/effect/landmark/corpse/cook
name = "Cook"
corpseuniform = /obj/item/clothing/under/rank/chef
corpsesuit = /obj/item/clothing/suit/chef/classic
corpsesuit = /obj/item/clothing/suit/apron/chef
corpseshoes = /obj/item/clothing/shoes/sneakers/black
corpsehelmet = /obj/item/clothing/head/chefhat
corpseback = /obj/item/weapon/storage/backpack
@@ -77,18 +77,9 @@
if("Power")
user << "<B>Your wish is granted, but at a terrible cost...</B>"
user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
if (!(LASER in user.mutations))
user.mutations.Add(LASER)
user << "<span class='notice'>You feel pressure building behind your eyes.</span>"
if (!(COLD_RESISTANCE in user.mutations))
user.mutations.Add(COLD_RESISTANCE)
user << "<span class='notice'>Your body feels warm.</span>"
if (!(XRAY in user.mutations))
user.mutations.Add(XRAY)
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
user.see_in_dark = 8
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
user << "<span class='notice'>The walls suddenly disappear.</span>"
user.dna.add_mutation(LASEREYES)
user.dna.add_mutation(COLDRES)
user.dna.add_mutation(XRAY)
user.dna.species = new /datum/species/shadow()
user.regenerate_icons()
if("Wealth")
+2 -2
View File
@@ -126,9 +126,9 @@
if(M.glasses == src)
M.eye_blind = 3
M.eye_blurry = 5
M.disabilities |= NEARSIGHTED
M.disabilities |= NEARSIGHT
spawn(100)
M.disabilities &= ~NEARSIGHTED
M.disabilities &= ~NEARSIGHT
..()
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
+1 -1
View File
@@ -1,5 +1,5 @@
/obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
body_parts_covered = CHEST
cold_protection = CHEST|GROIN
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+9 -6
View File
@@ -46,24 +46,27 @@
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen)
//Chef
/obj/item/clothing/suit/chef
/obj/item/clothing/suit/toggle/chef
name = "chef's apron"
desc = "An apron used by a high class chef."
desc = "An apron-jacket used by a high class chef."
icon_state = "chef"
item_state = "chef"
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|ARMS
allowed = list (/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
allowed = list(/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
action_button_name = "Toggle Jacket Sleeves"
togglename = "sleeves"
//Chef
/obj/item/clothing/suit/chef/classic
name = "A classic chef's apron."
//Cook
/obj/item/clothing/suit/apron/chef
name = "cook's apron"
desc = "A basic, dull, white chef's apron."
icon_state = "apronchef"
item_state = "apronchef"
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
allowed = list(/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
//Detective
/obj/item/clothing/suit/det_suit
+1 -2
View File
@@ -5,9 +5,8 @@
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
var/open = 0
action_button_name = "Toggle Labcoat Buttons"
togglename = "buttons"
+4 -4
View File
@@ -253,24 +253,24 @@
name = "captain's winter coat"
icon_state = "coatcaptain"
armor = list(melee = 50, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
/obj/item/clothing/suit/toggle/wintercoat/security
name = "security winter coat"
icon_state = "coatsecurity"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
/obj/item/clothing/suit/toggle/wintercoat/medical
name = "medical winter coat"
icon_state = "coatmedical"
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
/obj/item/clothing/suit/toggle/wintercoat/science
name = "science winter coat"
icon_state = "coatscience"
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/suit/toggle/wintercoat/engineering
+2 -1
View File
@@ -42,7 +42,8 @@
/obj/item/clothing/under/rank/chef
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
name = "cook's suit"
desc = "A suit which is given only to the most <b>hardcore</b> cooks in space."
icon_state = "chef"
item_color = "chef"
+1 -1
View File
@@ -35,7 +35,7 @@
var/datum/disease/D
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
if(!H.dna || (H.sdisabilities & BLIND)) //A blindness disease would be the worst.
if(!H.dna || (H.disabilities & BLIND)) //A blindness disease would be the worst.
continue
D = new virus_type()
var/datum/disease/dnaspread/DS = D
+4 -5
View File
@@ -2396,13 +2396,12 @@ It is possible to destroy the net by the occupant or someone else.
..()
return
/obj/effect/energy_net/attack_hand(mob/user)
if (HULK in user.mutations)
user.visible_message("<span class='danger'>[user] rips the energy net apart!</span>", \
/obj/effect/energy_net/attack_hulk(mob/living/carbon/human/user)
..(user, 1)
user.visible_message("<span class='danger'>[user] rips the energy net apart!</span>", \
"<span class='notice'>You easily destroy the energy net.</span>")
health-=50
health-=50
healthcheck()
return
/obj/effect/energy_net/attack_paw(mob/user)
return attack_hand()
+45 -101
View File
@@ -20,7 +20,8 @@ mob/living/carbon/
var/hal_crit = 0
mob/living/carbon/proc/handle_hallucinations()
if(handling_hal) return
if(handling_hal)
return
handling_hal = 1
while(hallucination > 20)
sleep(rand(200,500)/(hallucination/25))
@@ -148,7 +149,6 @@ mob/living/carbon/proc/handle_hallucinations()
src << sound('sound/AI/shuttledock.ogg')
if(66 to 70)
//Flashes of danger
//src << "Danger Flash"
if(!halbody)
var/list/possible_points = list()
for(var/turf/simulated/floor/F in view(src,world.view))
@@ -162,8 +162,6 @@ mob/living/carbon/proc/handle_hallucinations()
halbody = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER)
if(4)
halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER)
// if(5)
// halbody = image('xcomalien.dmi',target,"chryssalid",TURF_LAYER)
if(client) client.images += halbody
spawn(rand(50,80)) //Only seen for a brief moment.
@@ -171,55 +169,58 @@ mob/living/carbon/proc/handle_hallucinations()
halbody = null
if(71 to 72)
//Fake death
// src.sleeping_willingly = 1
src.sleeping = 20
hal_crit = 1
hal_screwyhud = 1
spawn(rand(50,100))
// src.sleeping_willingly = 0
src.sleeping = 0
hal_crit = 0
hal_screwyhud = 0
if(73 to 75)
fake_attack()
handling_hal = 0
/mob/living/carbon/proc/fake_attack()
// var/list/possible_clones = new/list()
var/mob/living/carbon/human/clone = null
var/clone_weapon = null
for(var/mob/living/carbon/human/H in living_mob_list)
if(H.stat || H.lying)
continue
// possible_clones += H
clone = H
break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order.
/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts)
// if(!possible_clones.len) return
// clone = pick(possible_clones)
if(!clone)
return
if(!mocktxt)
//var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target))
var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(src.loc)
if(clone.l_hand)
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
clone_weapon = clone.l_hand.name
F.weap = clone.l_hand
else if (clone.r_hand)
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
clone_weapon = clone.r_hand.name
F.weap = clone.r_hand
mocktxt = ""
F.name = clone.name
F.my_target = src
F.weapon_name = clone_weapon
src.hallucinations += F
var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\
"Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\
"OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Captain IQ","Retrieve Arms",\
"Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry")
F.left = image(clone,dir = WEST)
F.right = image(clone,dir = EAST)
F.up = image(clone,dir = NORTH)
F.down = image(clone,dir = SOUTH)
if(mid_txts)
while(mid_txts.len)
var/mid_txt = pick(mid_txts)
mocktxt += mid_txt
mid_txts -= mid_txt
F.updateimage()
while(buttons.len)
var/button = pick(buttons)
var/button_txt = pick(possible_txt)
mocktxt += "<a href='?src=\ref[src];[button]'>[button_txt]</a><br>"
buttons -= button
possible_txt -= button_txt
return start_txt + mocktxt + end_txt + "</TT></BODY></HTML>"
proc/check_panel(mob/M)
if (istype(M, /mob/living/carbon/human) || istype(M, /mob/living/silicon/ai))
if(M.hallucination < 15)
return 1
return 0*/
/obj/effect/fake_attacker
icon = null
@@ -245,8 +246,11 @@ proc/check_panel(mob/M)
var/health = 100
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/user as mob)
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/living/user as mob)
step_away(src,my_target,2)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
my_target.visible_message("<span class='danger'>[my_target] flails around wildly.</span>", \
"<span class='danger'>[my_target] has attacked [src]!</span>")
@@ -303,11 +307,13 @@ proc/check_panel(mob/M)
updateimage()
else
if(prob(15))
src.do_attack_animation(my_target)
if(weapon_name)
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
my_target.staminaloss += 30
if(prob(20)) my_target.eye_blurry += 3
if(prob(20))
my_target.eye_blurry += 3
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
@@ -326,7 +332,7 @@ proc/check_panel(mob/M)
collapse = 1
updateimage()
/proc/fake_blood(var/mob/target)
/obj/effect/fake_attacker/proc/fake_blood(var/mob/target)
var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc)
O.name = "blood"
var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
@@ -350,65 +356,3 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
/obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\
/obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank)
/proc/fake_attack(var/mob/living/target)
// var/list/possible_clones = new/list()
var/mob/living/carbon/human/clone = null
var/clone_weapon = null
for(var/mob/living/carbon/human/H in living_mob_list)
if(H.stat || H.lying) continue
// possible_clones += H
clone = H
break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order.
// if(!possible_clones.len) return
// clone = pick(possible_clones)
if(!clone) return
//var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target))
var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(target.loc)
if(clone.l_hand)
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
clone_weapon = clone.l_hand.name
F.weap = clone.l_hand
else if (clone.r_hand)
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
clone_weapon = clone.r_hand.name
F.weap = clone.r_hand
F.name = clone.name
F.my_target = target
F.weapon_name = clone_weapon
target.hallucinations += F
F.left = image(clone,dir = WEST)
F.right = image(clone,dir = EAST)
F.up = image(clone,dir = NORTH)
F.down = image(clone,dir = SOUTH)
// F.base = new /icon(clone.stand_icon)
// F.currentimage = new /image(clone)
/*
F.left = new /icon(clone.stand_icon,dir=WEST)
for(var/icon/i in clone.overlays)
F.left.Blend(i)
F.up = new /icon(clone.stand_icon,dir=NORTH)
for(var/icon/i in clone.overlays)
F.up.Blend(i)
F.down = new /icon(clone.stand_icon,dir=SOUTH)
for(var/icon/i in clone.overlays)
F.down.Blend(i)
F.right = new /icon(clone.stand_icon,dir=EAST)
for(var/icon/i in clone.overlays)
F.right.Blend(i)
target << F.up
*/
F.updateimage()
+1 -2
View File
@@ -7,7 +7,6 @@
stat = DEAD
density = 0
canmove = 0
blinded = 0
anchored = 1 // don't get pushed around
invisibility = INVISIBILITY_OBSERVER
languages = ALL
@@ -310,4 +309,4 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
dat += "<h4>Crew Manifest</h4>"
dat += data_core.get_manifest()
src << browse(dat, "window=manifest;size=370x420;can_close=1")
src << browse(dat, "window=manifest;size=370x420;can_close=1")
@@ -113,10 +113,6 @@
/mob/living/carbon/alien/proc/handle_mutations_and_radiation()
if(getFireLoss())
if((COLD_RESISTANCE in mutations) || prob(5))
adjustFireLoss(-1)
// Aliens love radiation nom nom nom
if (radiation)
if (radiation > 100)
@@ -50,10 +50,15 @@
//Hunter verbs
/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap()
/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(var/message = 1)
leap_on_click = !leap_on_click
leap_icon.icon_state = "leap_[leap_on_click ? "on":"off"]"
src << "<span class='noticealien'>You will now [leap_on_click ? "leap at":"slash at"] enemies!</span>"
if(message)
src << "<span class='noticealien'>You will now [leap_on_click ? "leap at":"slash at"] enemies!</span>"
else
return
/mob/living/carbon/alien/humanoid/hunter/ClickOn(var/atom/A, var/params)
face_atom(A)
@@ -66,6 +71,10 @@
#define MAX_ALIEN_LEAP_DIST 7
/mob/living/carbon/alien/humanoid/hunter/proc/leap_at(var/atom/A)
if(pounce_cooldown)
src << "<span class='alertalien'>You are too fatigued to pounce right now!</span>"
return
if(leaping) //Leap while you leap, so you can leap while you leap
return
@@ -76,13 +85,14 @@
if(lying)
return
leaping = 1
update_icons()
throw_at(A,MAX_ALIEN_LEAP_DIST,1)
leaping = 0
update_icons()
else //Maybe uses plasma in the future, although that wouldn't make any sense...
leaping = 1
update_icons()
throw_at(A,MAX_ALIEN_LEAP_DIST,1)
leaping = 0
update_icons()
/mob/living/carbon/alien/humanoid/throw_impact(A)
/mob/living/carbon/alien/humanoid/hunter/throw_impact(A)
var/msg = ""
if(A)
@@ -92,6 +102,11 @@
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
toggle_leap(0)
pounce_cooldown = !pounce_cooldown
spawn(pounce_cooldown_time) //3s by default
pounce_cooldown = !pounce_cooldown
else
msg = "<span class ='alertalien'>[src] smashes into [A]!</span>"
weakened = 2
@@ -5,6 +5,8 @@
var/obj/item/l_store = null
var/caste = ""
var/leap_on_click = 0
var/pounce_cooldown = 0
var/pounce_cooldown_time = 30
update_icon = 1
//This is fine right now, if we're adding organ specific damage this needs to be updated
@@ -85,19 +87,22 @@
updatehealth()
return
/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
adjustBruteLoss(14 + rand(1,9))
Paralyse(1)
step_away(src,user,15)
sleep(1)
step_away(src,user,15)
return 1
/mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob)
if(..())
switch(M.a_intent)
if ("harm")
var/damage = rand(1, 9)
if (prob(90))
if (HULK in M.mutations)//HULK SMASH
damage += 14
spawn(0)
Paralyse(1)
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
"<span class='userdanger'>[M] has punched [src]!</span>")
@@ -38,14 +38,10 @@
//Chemicals in the body
handle_chemicals_in_body()
//Disabilities
handle_disabilities()
//Apparently, the person who wrote this code designed it so that
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
handle_environment(environment)
@@ -67,28 +63,6 @@
if(client)
handle_regular_hud_updates()
/mob/living/carbon/alien/humanoid/proc/handle_disabilities()
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 10))
src << "<span class='danger'>You have a seizure!</span>"
Paralyse(10)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
spawn( 0 )
emote("cough")
return
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
spawn( 0 )
emote("twitch")
return
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
/mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost)
var/temperature = current
var/difference = abs(current-loc_temp) //get difference
@@ -110,12 +84,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = 1
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = 1
stat = DEAD
silent = 0
return 1
@@ -131,11 +105,11 @@
if(paralysis)
AdjustParalysis(-1)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -149,16 +123,15 @@
move_delay_add = max(0, move_delay_add - rand(1, 2))
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -189,7 +162,7 @@
/mob/living/carbon/alien/humanoid/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -242,12 +215,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
if ((blinded))
if ((eye_blind))
blind.layer = 18
else
blind.layer = 0
if (disabilities & NEARSIGHTED)
if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
@@ -104,17 +104,21 @@
updatehealth()
return
/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
adjustBruteLoss(5 + rand(1,9))
Paralyse(1)
spawn()
step_away(src,user,15)
sleep(1)
step_away(src,user,15)
return 1
/mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/M as mob)
if(..())
var/damage = rand(1, 9)
if (prob(90))
if (HULK in M.mutations)
damage += 5
spawn(0)
Paralyse(1)
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
add_logs(M, src, "attacked", admin=0)
visible_message("<span class='danger'>[M] has kicked [src]!</span>", \
@@ -38,7 +38,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
handle_environment(enviroment)
@@ -64,12 +63,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(1, eye_blind)
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < -25 || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = max(1, eye_blind)
silent = 0
return 1
@@ -84,11 +83,11 @@
if(paralysis)
AdjustParalysis(-2)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -102,16 +101,15 @@
move_delay_add = max(0, move_delay_add - rand(1, 2))
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -138,7 +136,7 @@
/mob/living/carbon/alien/larva/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -191,12 +189,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
if ((blinded))
if ((eye_blind))
blind.layer = 18
else
blind.layer = 0
if (disabilities & NEARSIGHTED)
if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
+1 -1
View File
@@ -101,7 +101,7 @@
breath.toxins -= toxins_used
breath.oxygen += toxins_used
if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :(
if(breath.temperature > (T0C+66)) // Hot air hurts :(
if(prob(20))
src << "<span class='danger'>You feel a searing heat in your lungs!</span>"
fire_alert = max(fire_alert, 1)
+6 -9
View File
@@ -18,7 +18,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
if(environment) // More error checking
@@ -125,12 +124,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) )
death()
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
return 1
@@ -144,8 +143,7 @@
if(31 to INFINITY)
emp_damage = 30//Let's not overdo it
if(21 to 30)//High level of EMP damage, unable to see, hear, or speak
eye_blind = 1
blinded = 1
eye_blind = max(eye_blind, 1)
ear_deaf = 1
silent = 1
if(!alert)//Sounds an alarm, but only once per 'level'
@@ -156,7 +154,6 @@
emp_damage -= 1
if(20)
alert = 0
blinded = 0
eye_blind = 0
ear_deaf = 0
silent = 0
@@ -209,7 +206,7 @@
/mob/living/carbon/brain/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in src.mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -249,12 +246,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
if ((blinded))
if (eye_blind)
blind.layer = 18
else
blind.layer = 0
if (disabilities & NEARSIGHTED)
if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
+6 -1
View File
@@ -1,3 +1,8 @@
/mob/living/carbon/UnarmedAttack(var/atom/A, var/proximity_flag)
..()
for(var/datum/mutation/human/HM in dna.mutations)
. += HM.on_attack_hand(A, src)
/mob/living/carbon/prepare_huds()
..()
prepare_data_huds()
@@ -27,7 +32,7 @@
src.nutrition -= HUNGER_FACTOR/10
if(src.m_intent == "run")
src.nutrition -= HUNGER_FACTOR/10
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
if((src.disabilities & FAT) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2
/mob/living/carbon/movement_delay()
@@ -52,8 +52,8 @@
return 1
/mob/living/carbon/proc/ChangeToHusk()
if(HUSK in mutations) return
mutations.Add(HUSK)
if(disabilities & HUSK) return
disabilities |= HUSK
status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
return 1
@@ -305,7 +305,7 @@
if(href_list["criminal"])
if(istype(usr, /mob/living/carbon/human))
var/mob/living/carbon/human/H = usr
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
// Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
@@ -331,7 +331,7 @@
if(href_list["status"])
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
if(R)
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
if(setcriminal != "Cancel")
investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
R.fields["criminal"] = setcriminal
@@ -340,7 +340,7 @@
if(href_list["view"])
if(R)
if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
usr << "<b>Name:</b> [R.fields["name"]] <b>Criminal Status:</b> [R.fields["criminal"]]"
usr << "<b>Minor Crimes:</b>"
@@ -365,7 +365,7 @@
var/t1 = copytext(sanitize(input("Please input minor crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
var/t2 = copytext(sanitize(input("Please input minor crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
if(R)
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
data_core.addMinorCrime(R.fields["id"], crime)
@@ -376,7 +376,7 @@
var/t1 = copytext(sanitize(input("Please input major crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
var/t2 = copytext(sanitize(input("Please input major crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
if(R)
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
data_core.addMajorCrime(R.fields["id"], crime)
@@ -386,7 +386,7 @@
if(href_list["view_comment"])
if(R)
if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
usr << "<b>Comments/Log:</b>"
var/counter = 1
@@ -400,7 +400,7 @@
if(R)
var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
if(R)
if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
var/counter = 1
while(R.fields[text("com_[]", counter)])
@@ -1,3 +1,7 @@
/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user)
adjustBruteLoss(5)
Weaken(4)
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M)
if(..()) //to allow surgery to return properly.
return
@@ -44,18 +44,6 @@
else
heal_overall_damage(0, -amount)
/mob/living/carbon/human/Stun(amount)
if(HULK in mutations) return
..()
/mob/living/carbon/human/Weaken(amount)
if(HULK in mutations) return
..()
/mob/living/carbon/human/Paralyse(amount)
if(HULK in mutations) return
..()
mob/living/carbon/human/proc/hat_fall_prob()
var/multiplier = 1
var/obj/item/clothing/head/H = head
+14 -46
View File
@@ -49,15 +49,19 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
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
//TODO: seperate this out
var/datum/gas_mixture/environment = loc.return_air()
handle_regular_hud_updates()
//No need to update all of these procs if the guy is dead.
if(stat != DEAD)
for(var/datum/mutation/human/HM in dna.mutations)
HM.on_life(src)
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
breathe() //Only try to take a breath every 4 ticks, unless suffocating
@@ -97,8 +101,6 @@
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
handle_regular_hud_updates()
if(dna)
dna.species.spec_life(src) // for mutantraces
@@ -125,34 +127,6 @@
/mob/living/carbon/human/proc/handle_disabilities()
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 1))
src << "<span class='danger'>You have a seizure!</span>"
for(var/mob/O in viewers(src, null))
if(O == src)
continue
O.show_message(text("<span class='userdanger'>[src] starts having a seizure!</span>"), 1)
Paralyse(10)
Jitter(1000)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
emote("cough")
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
switch(rand(1, 3))
if(1)
emote("twitch")
if(2 to 3)
say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point.
var/y_offset = pixel_y + rand(-1,1)
animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1)
animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1)
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
if (getBrainLoss() >= 60 && stat != 2)
if (prob(3))
switch(pick(1,2,3))
@@ -335,7 +309,7 @@
/mob/living/carbon/human/proc/get_cold_protection(temperature)
if(COLD_RESISTANCE in mutations)
if(dna.check_mutation(COLDRES))
return 1 //Fully protected from the cold.
if(dna && COLDRES in dna.species.specflags)
@@ -437,13 +411,13 @@
/mob/living/carbon/human/proc/handle_regular_status_updates()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO
if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
return 1
@@ -460,11 +434,7 @@
adjustOxyLoss(1)*/
if(hallucination)
if(hallucination >= 20)
if(prob(3))
fake_attack(src)
if(!handling_hal)
spawn handle_hallucinations() //The not boring kind!
spawn handle_hallucinations()
if(hallucination<=2)
hallucination = 0
@@ -477,13 +447,13 @@
if(paralysis)
AdjustParalysis(-1)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
handle_dreams()
adjustStaminaLoss(-10)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health && !hal_crit )
spawn(0)
@@ -493,19 +463,17 @@
stat = CONSCIOUS
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster
eye_blurry = max(eye_blurry-3, 0)
// blinded = 1 //now handled under /handle_regular_hud_updates()
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(istype(ears, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster, and slowly heals deafness
ear_damage = max(ear_damage-0.15, 0)
+2 -2
View File
@@ -22,7 +22,7 @@
if(dna)
message = dna.species.handle_speech(message,src)
if ((HULK in mutations) && health >= 25 && length(message))
if (dna.check_mutation(HULK))
message = "[uppertext(replacetext(message, ".", "!"))]!!" //because I don't know how to code properly in getting vars from other files -Bro
if(viruses.len)
@@ -103,7 +103,7 @@
if (ears)
ears.talk_into(src, message, message_mode)
return ITALICS | REDUCE_RANGE
if(message_mode in radiochannels)
if(ears)
ears.talk_into(src, message, message_mode)
+11 -29
View File
@@ -68,7 +68,7 @@
///////////
/datum/species/proc/update_base_icon_state(var/mob/living/carbon/human/H)
if(HUSK in H.mutations)
if(H.disabilities & HUSK)
H.remove_overlay(SPECIES_LAYER) // races lose their color
return "husk"
else if(sexes)
@@ -387,10 +387,10 @@
if(H.reagents) H.reagents.metabolize(H)
//The fucking FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
if(FAT in H.mutations)
if(H.disabilities & FAT)
if(H.overeatduration < 100)
H << "<span class='notice'>You feel fit again!</span>"
H.mutations -= FAT
H.disabilities &= ~FAT
H.update_inv_w_uniform(0)
H.update_inv_wear_suit()
else
@@ -467,11 +467,6 @@
H.see_invisible = invis_sight
H.see_in_dark = darksight
if(XRAY in H.mutations)
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
H.see_in_dark = 8
H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
if(H.seer)
H.see_invisible = SEE_INVISIBLE_OBSERVER
@@ -497,16 +492,16 @@
if(H.tinttotal >= TINT_IMPAIR)
if(tinted_weldhelh)
if(H.tinttotal >= TINT_BLIND)
H.blinded = 1 // You get the sudden urge to learn to play keyboard
H.eye_blind = max(H.eye_blind, 1) // You get the sudden urge to learn to play keyboard
H.client.screen += global_hud.darkMask
else
H.client.screen += global_hud.darkMask
if(H.blind)
if(H.blinded) H.blind.layer = 18
if(H.eye_blind) H.blind.layer = 18
else H.blind.layer = 0
if( H.disabilities & NEARSIGHTED && !istype(H.glasses, /obj/item/clothing/glasses/regular) )
if( H.disabilities & NEARSIGHT && !istype(H.glasses, /obj/item/clothing/glasses/regular) )
H.client.screen += global_hud.vimpaired
if(H.eye_blurry) H.client.screen += global_hud.blurry
if(H.druggy) H.client.screen += global_hud.druggy
@@ -612,16 +607,6 @@
return 1
/datum/species/proc/handle_mutations_and_radiation(var/mob/living/carbon/human/H)
if(H.getFireLoss())
if((COLD_RESISTANCE in H.mutations) || (prob(1)))
H.heal_organ_damage(0,1)
if ((HULK in H.mutations) && H.health <= 25)
H.mutations.Remove(HULK)
H.update_mutations() //update our mutation overlays
H << "<span class='danger'>You suddenly feel very weak.</span>"
H.Weaken(3)
H.emote("collapse")
if (H.radiation && !(RADIMMUNE in specflags))
if (H.radiation > 100)
@@ -702,7 +687,7 @@
if(H.back && grav)
mspeed += H.back.slowdown
if(FAT in H.mutations && grav)
if((H.disabilities & FAT) && grav)
mspeed += 1.5
if(H.bodytemperature < 283.222 && grav)
mspeed += (283.222 - H.bodytemperature) / 10 * 1.75
@@ -782,9 +767,6 @@
var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = H.run_armor_check(affecting, "melee")
if(HULK in M.mutations)
damage += 5
if(M.dna)
playsound(H.loc, M.dna.species.attack_sound, 25, 1, -1)
else
@@ -1186,7 +1168,7 @@
return 1
/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in H.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
if( (abs(310.15 - breath.temperature) > 50) && !(mutations_list[COLDRES] in H.dna.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
if(breath.temperature < 260.15)
if(prob(20))
H << "<span class='danger'>You feel your face freezing and an icicle forming in your lungs!</span>"
@@ -1194,7 +1176,7 @@
if(prob(20))
H << "<span class='danger'>You feel your face burning and a searing heat in your lungs!</span>"
if(!(COLDRES in specflags)) // COLD DAMAGE
if(!(mutations_list[COLDRES] in H.dna.mutations)) // COLD DAMAGE
switch(breath.temperature)
if(-INFINITY to 120)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head")
@@ -1263,7 +1245,7 @@
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
H.fire_alert = max(H.fire_alert, 2)
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(COLDRES in specflags))
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(mutations_list[COLDRES] in H.dna.mutations))
H.fire_alert = max(H.fire_alert, 1)
if(!istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
switch(H.bodytemperature)
@@ -1296,7 +1278,7 @@
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
H.pressure_alert = -1
else
if((COLD_RESISTANCE in H.mutations) || (COLDRES in specflags))
if(H.dna.check_mutation(COLDRES) || (COLDRES in specflags))
H.pressure_alert = -1
else
H.adjustBruteLoss( LOW_PRESSURE_DAMAGE )
@@ -94,6 +94,7 @@
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
name = "Podperson"
id = "pod"
specflags = list(MUTCOLORS,EYECOLOR)
/datum/species/plant/pod/spec_life(mob/living/carbon/human/H)
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
@@ -34,7 +34,6 @@ There are several things that need to be remembered:
> There are also these special cases:
update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows
update_damage_overlays() //handles damage overlays for brute/burn damage
update_base_icon_state() //Handles updating var/base_icon_state (WIP) This is used to update the
mob's icon_state easily e.g. "[base_icon_state]_s" is the standing icon_state
@@ -90,7 +89,7 @@ Please contact me on #coderbus IRC. ~Carnie x
if(dna)
base_icon_state = dna.species.update_base_icon_state(src)
else
if(HUSK in mutations)
if(disabilities & HUSK)
base_icon_state = "husk"
else
base_icon_state = "[skin_tone]_[(gender == FEMALE) ? "f" : "m"]"
@@ -146,7 +145,7 @@ Please contact me on #coderbus IRC. ~Carnie x
//Reset our hair
remove_overlay(HAIR_LAYER)
if( (HUSK in mutations) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) )
if( (disabilities & HUSK) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) )
return
if((wear_suit) && (wear_suit.hooded) && (wear_suit.suittoggled == 1))
@@ -155,30 +154,8 @@ Please contact me on #coderbus IRC. ~Carnie x
if(dna)
dna.species.handle_hair(src)
/mob/living/carbon/human/update_mutations()
remove_overlay(MUTATIONS_LAYER)
var/list/standing = list()
var/g = (gender == FEMALE) ? "f" : "m"
for(var/mut in mutations)
switch(mut)
if(HULK)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_[g]_s", "layer"=-MUTATIONS_LAYER)
if(COLD_RESISTANCE)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER)
if(TK)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER)
if(LASER)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes_s", "layer"=-MUTATIONS_LAYER)
if(standing.len)
overlays_standing[MUTATIONS_LAYER] = standing
apply_overlay(MUTATIONS_LAYER)
/mob/living/carbon/human/proc/update_mutcolor()
if(dna && !(HUSK in mutations))
if(dna && !(disabilities & HUSK))
dna.species.update_color(src)
/mob/living/carbon/human/proc/update_body()
@@ -237,7 +214,6 @@ Please contact me on #coderbus IRC. ~Carnie x
if(notransform) return
update_body()
update_hair()
update_mutations()
update_inv_w_uniform()
update_inv_wear_id()
update_inv_gloves()
+1 -1
View File
@@ -11,4 +11,4 @@
else
if (internals)
internals.icon_state = "internal0"
return
return
+13 -51
View File
@@ -46,7 +46,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
if(environment) // More error checking -- TLE
@@ -78,42 +77,8 @@
/mob/living/carbon/monkey/proc/handle_disabilities()
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 10))
src << "<span class='danger'>You have a seizure!</span>"
Paralyse(10)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
spawn( 0 )
emote("cough")
return
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
spawn( 0 )
emote("twitch")
return
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
/mob/living/carbon/monkey/proc/handle_mutations_and_radiation()
if(getFireLoss())
if((COLD_RESISTANCE in mutations) && prob(50))
switch(getFireLoss())
if(1 to 50)
adjustFireLoss(-1)
if(51 to 100)
adjustFireLoss(-5)
if ((HULK in mutations) && health <= 25)
mutations.Remove(HULK)
src << "<span class='danger'>You suddenly feel very weak.</span>"
Weaken(3)
emote("collapse")
if (radiation)
if (radiation > 100)
radiation = 100
@@ -339,11 +304,8 @@
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
pressure_alert = -1
else
if( !(COLD_RESISTANCE in mutations) )
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
pressure_alert = -2
else
pressure_alert = -1
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
pressure_alert = -2
return
@@ -384,12 +346,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = max(eye_blind, 1)
stat = DEAD
silent = 0
return 1
@@ -405,11 +367,11 @@
if(paralysis)
AdjustParalysis(-1)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -419,16 +381,16 @@
stat = CONSCIOUS
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
eye_blind = max(eye_blind, 1)
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -457,7 +419,7 @@
/mob/living/carbon/monkey/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -532,12 +494,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if(blind && stat != DEAD)
if(blinded)
if(eye_blind)
blind.layer = 18
else
blind.layer = 0
if(disabilities & NEARSIGHTED)
if(disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if(eye_blurry)
+6 -7
View File
@@ -33,7 +33,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
src.blinded = null
if(environment)
handle_environment(environment) // Handle temperature/pressure differences between body and environment
@@ -210,7 +209,7 @@
if (src.stat == DEAD)
src.lying = 1
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
else
if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc.
if (src.stunned > 0)
@@ -222,7 +221,7 @@
src.stat = 0
if (src.paralysis > 0)
AdjustParalysis(-1)
src.blinded = 0
src.eye_blind = 0
src.lying = 0
src.stat = 0
@@ -234,7 +233,7 @@
if (src.eye_blind)
src.eye_blind = 0
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
if (src.ear_deaf > 0) src.ear_deaf = 0
if (src.ear_damage < 25)
@@ -242,9 +241,9 @@
src.density = !( src.lying )
if (src.sdisabilities & BLIND)
src.blinded = 1
if (src.sdisabilities & DEAF)
if (src.disabilities & BLIND)
src.eye_blind = max(eye_blind, 1)
if (src.disabilities & DEAF)
src.ear_deaf = 1
if (src.eye_blurry > 0)
+14 -14
View File
@@ -250,6 +250,20 @@
adjustBruteLoss(damage)
updatehealth()
/mob/living/carbon/slime/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
adjustBruteLoss(5)
if(Victim || Target)
Victim = null
Target = null
anchored = 0
if(prob(80) && !client)
Discipline++
spawn(0)
step_away(src,user,15)
sleep(3)
step_away(src,user,15)
/mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob)
if(Victim)
@@ -319,20 +333,6 @@
var/damage = rand(1, 9)
attacked += 10
if (prob(90))
if (HULK in M.mutations)
damage += 5
if(Victim || Target)
Victim = null
Target = null
anchored = 0
if(prob(80) && !client)
Discipline++
spawn(0)
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
add_logs(M, src, "attacked", admin=0)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
+2 -3
View File
@@ -15,7 +15,6 @@
if(BRUTE)
adjustBruteLoss(damage * blocked)
if(BURN)
if(COLD_RESISTANCE in mutations) damage = 0
adjustFireLoss(damage * blocked)
if(TOX)
adjustToxLoss(damage * blocked)
@@ -52,7 +51,7 @@
if(PARALYZE)
Paralyse(effect * blocked)
if(IRRADIATE)
radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm", "Your clothes feel warm"))/100),0)//Rads auto check armor
radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm."))/100),0)//Rads auto check armor
if(STUTTER)
if(status_flags & CANSTUN) // stun is usually associated with stutter
stuttering = max(stuttering,(effect * blocked))
@@ -75,6 +74,6 @@
if(stutter) apply_effect(stutter, STUTTER, blocked)
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
if(stamina) apply_effect(stamina, STAMINA, blocked)
if(stamina) apply_damage(stamina, STAMINA, null, blocked)
if(jitter) apply_effect(jitter, JITTER, blocked)
return 1
+9 -10
View File
@@ -136,7 +136,7 @@
/mob/living/ex_act(severity, target)
..()
if(client && !blinded)
if(client && !eye_blind)
flick("flash", src.flash)
/mob/living/proc/updatehealth()
@@ -157,8 +157,6 @@
/mob/living/proc/burn_skin(burn_amount)
if(istype(src, /mob/living/carbon/human))
//world << "DEBUG: burn_skin(), mutations=[mutations]"
if (COLD_RESISTANCE in src.mutations) //fireproof
return 0
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
var/extradam = 0 //added to when organ is at max dam
@@ -169,8 +167,6 @@
H.updatehealth()
return 1
else if(istype(src, /mob/living/carbon/monkey))
if (COLD_RESISTANCE in src.mutations) //fireproof
return 0
var/mob/living/carbon/monkey/M = src
M.adjustFireLoss(burn_amount)
M.updatehealth()
@@ -380,9 +376,7 @@
radiation = 0
nutrition = NUTRITION_LEVEL_FED + 50
bodytemperature = 310
sdisabilities = 0
disabilities = 0
blinded = 0
eye_blind = 0
eye_blurry = 0
ear_deaf = 0
@@ -530,7 +524,7 @@
/mob/living/proc/cuff_break(obj/item/weapon/restraints/I, mob/living/carbon/C)
if(HULK in usr.mutations)
if(C.dna.check_mutation(HULK))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
C.visible_message("<span class='danger'>[C] manages to break [I]!</span>")
@@ -557,7 +551,7 @@
breakouttime = LC.breakouttime
displaytime = breakouttime / 600
if(isalienadult(C) || HULK in usr.mutations)
if(isalienadult(C) || C.dna.check_mutation(HULK))
C.visible_message("<span class='warning'>[C] is trying to break [I]!</span>")
C << "<span class='notice'>You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)</span>"
spawn(0)
@@ -769,7 +763,8 @@
gib()
return
/mob/living/proc/do_attack_animation(atom/A)
/atom/movable/proc/do_attack_animation(atom/A)
var/pixel_x_diff = 0
var/pixel_y_diff = 0
var/direction = get_dir(src, A)
@@ -796,4 +791,8 @@
pixel_y_diff = -8
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2)
/mob/living/do_attack_animation(atom/A)
..()
floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
+1 -1
View File
@@ -194,7 +194,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
/mob/living/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("me", 1, "[M.friendly] [src]")
M.visible_message("<span class='notice'>\The [M] [M.friendly] [src]!</span>")
return 0
else
if(M.attack_sound)
+1 -1
View File
@@ -210,7 +210,7 @@ var/list/department_radio_keys = list(
if(!message)
return 0
if(sdisabilities & MUTE)
if(disabilities & MUTE)
return 0
if(is_muzzled())
+10 -15
View File
@@ -5,9 +5,6 @@
if (src.notransform)
return
src.blinded = null
//Status updates, death etc.
clamp_values()
handle_regular_status_updates()
@@ -50,7 +47,7 @@
if(src.module_state_3)
src.cell.use(5)
src.cell.use(1)
src.blinded = 0
src.eye_blind = 0
src.stat = 0
else
uneq_all()
@@ -98,22 +95,20 @@
AdjustWeakened(-1)
if (src.paralysis > 0)
AdjustParalysis(-1)
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
else
src.blinded = 0
src.eye_blind = 0
else //Not stunned.
src.stat = 0
else //Dead.
src.blinded = 1
src.stat = 2
src.eye_blind = 1
if (src.stuttering) src.stuttering--
if (src.eye_blind)
src.eye_blind--
src.blinded = 1
if (src.ear_deaf > 0) src.ear_deaf--
if (src.ear_damage < 25)
@@ -122,9 +117,9 @@
src.density = !( src.lying )
if ((src.sdisabilities & BLIND))
src.blinded = 1
if ((src.sdisabilities & DEAF))
if (src.disabilities & BLIND)
src.eye_blind = max(1, eye_blind)
if (src.disabilities & DEAF)
src.ear_deaf = 1
if (src.eye_blurry > 0)
@@ -139,7 +134,7 @@
/mob/living/silicon/robot/proc/handle_regular_hud_updates()
if (src.stat == 2 || XRAY in mutations || src.sight_mode & BORGXRAY)
if (src.stat == 2 || src.sight_mode & BORGXRAY)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
@@ -241,11 +236,11 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((src.blind && src.stat != 2))
if(src.blinded)
if(src.eye_blind)
src.blind.layer = 18
else
src.blind.layer = 0
if (src.disabilities & NEARSIGHTED)
if (src.disabilities & NEARSIGHT)
src.client.screen += global_hud.vimpaired
if (src.eye_blurry)
+13 -11
View File
@@ -2,6 +2,7 @@
gender = NEUTER
voice_name = "synthesized voice"
languages = ROBOT | HUMAN
has_unlimited_silicon_privilege = 1
var/syndicate = 0
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/list/alarms_to_show = list()
@@ -384,6 +385,16 @@
visible_message("<span class='notice'>[L.name] rubs its head against [src].</span>")
return
/mob/living/silicon/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
adjustBruteLoss(rand(10, 15))
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[user] has punched [src]!</span>", \
"<span class='userdanger'>[user] has punched [src]!</span>")
return 1
return 0
/mob/living/silicon/attack_hand(mob/living/carbon/human/M)
switch(M.a_intent)
if ("help")
@@ -394,15 +405,6 @@
else
M.do_attack_animation(src)
playsound(src.loc, 'sound/effects/bang.ogg', 10, 1)
if (HULK in M.mutations)
var/damage = rand(10,15)
adjustBruteLoss(damage)
add_logs(M, src, "attacked", admin=0)
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
"<span class='userdanger'>[M] has punched [src]!</span>")
return 1
else
visible_message("<span class='danger'>[M] punches [src], but doesn't leave a dent.</span>", \
"<span class='userdanger'>[M] punches [src], but doesn't leave a dent!</span>")
visible_message("<span class='danger'>[M] punches [src], but doesn't leave a dent.</span>", \
"<span class='userdanger'>[M] punches [src], but doesn't leave a dent.!</span>")
return 0
@@ -41,64 +41,4 @@
desc = "It's Coffee, the other pet!"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
//LOOK AT THIS - ..()??
/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/wirecutters))
if(prob(50))
user << "\red \b This kills the crab."
health -= 20
Die()
else
GetMad()
get
if(istype(O, /obj/item/stack/medical))
if(stat != DEAD)
var/obj/item/stack/medical/MED = O
if(health < maxHealth)
if(MED.amount >= 1)
health = min(maxHealth, health + MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] applies [MED] on [src]")
else
user << "\blue this crab is dead, medical items won't bring it back to life."
else
if(O.force)
health -= O.force
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with [O] by [user]. ")
else
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with [O]. ")
/mob/living/simple_animal/crab/GetMad()
name = "MEGAMADCRAB"
real_name = "MEGAMADCRAB"
desc = "OH NO YOU DUN IT NOW."
icon = 'icons/mob/mob.dmi'
icon_state = "madcrab"
icon_living = "madcrab"
icon_dead = "madcrab_dead"
speak_emote = list("clicks")
emote_hear = list("clicks with fury", "clicks angrily")
emote_see = list("clacks")
speak_chance = 1
turns_per_move = 15//Gotta go fast
maxHealth = 100//So they don't die as quickly
health = 100
melee_damage_lower = 3
melee_damage_upper = 10//Kill them. Kill them all
if(inventory_head)//Drops inventory so it doesn't have to be dealt with
inventory_head.loc = src.loc
inventory_head = null
if(inventory_mask)
inventory_mask.loc = src.loc
inventory_mask = null*/
response_harm = "stomps"
@@ -30,6 +30,7 @@
voice_name = "synthesized chirp"
languages = DRONE
mob_size = 0
has_unlimited_silicon_privilege = 1
var/picked = FALSE
var/list/drone_overlays[TOTAL_LAYERS]
var/laws = \
@@ -24,6 +24,7 @@
mouse_opacity = 1
speed = 1
ventcrawler = 2
robust_searching = 1
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
@@ -127,7 +127,7 @@
for(var/atom/check in check_list)
for(var/mob/living/M in viewers(world.view + 1, check) - src)
if(M.client && CanAttack(M) && !issilicon(M))
if(!M.blinded && !(sdisabilities & BLIND))
if(!M.eye_blind)
return M
return null
+3 -4
View File
@@ -54,19 +54,19 @@ var/next_mob_id = 0
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
if (type)
if(type & 1 && (sdisabilities & BLIND || blinded || paralysis) )//Vision related
if(type & 1 && (disabilities & BLIND || paralysis) )//Vision related
if (!( alt ))
return
else
msg = alt
type = alt_type
if (type & 2 && (sdisabilities & DEAF || ear_deaf))//Hearing related
if (type & 2 && ear_deaf)//Hearing related
if (!( alt ))
return
else
msg = alt
type = alt_type
if ((type & 1 && sdisabilities & BLIND))
if ((type & 1 && disabilities & BLIND))
return
// Added voice muffling for Issue 41.
if(stat == UNCONSCIOUS || sleeping > 0)
@@ -313,7 +313,6 @@ var/list/slot_equipment_priority = list( \
set name = "Examine"
set category = "IC"
// if( (sdisabilities & BLIND || blinded || stat) && !istype(src,/mob/dead/observer) )
if(is_blind(src))
src << "<span class='notice'>Something is there but you can't see it.</span>"
return
+2 -2
View File
@@ -42,7 +42,6 @@
var/obj/machinery/machine = null
var/other_mobs = null
var/memory = ""
var/sdisabilities = 0 //Carbon
var/disabilities = 0 //Carbon
var/atom/movable/pulling = null
var/next_move = null
@@ -54,7 +53,6 @@
var/ear_damage = null //Carbon
var/stuttering = null //Carbon
var/real_name = null
var/blinded = null
var/bhunger = 0 //Carbon
var/ajourn = 0
var/druggy = 0 //Carbon
@@ -155,6 +153,8 @@
var/digitalcamo = 0 // Can they be tracked by the AI?
var/has_unlimited_silicon_privilege = 0 // Can they interact with station electronics
var/list/radar_blips = list() // list of screen objects, radar blips
var/radar_open = 0 // nonzero is radar is open
+1 -1
View File
@@ -201,7 +201,7 @@
return
if(M == assailant && state >= GRAB_AGGRESSIVE)
if( (ishuman(user) && (FAT in user.mutations) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
if( (ishuman(user) && (user.disabilities & FAT) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
var/mob/living/carbon/attacker = user
user.visible_message("<span class='danger'>[user] is attempting to devour [affecting]!</span>")
if(istype(user, /mob/living/carbon/alien/humanoid/hunter))
+3 -4
View File
@@ -371,10 +371,9 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
hud_used.action_intent.icon_state = "help"
proc/is_blind(A)
if(istype(A, /mob/living/carbon))
var/mob/living/carbon/C = A
if(C.blinded != null)
return 1
if(ismob(A))
var/mob/B = A
return B.eye_blind
return 0
proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this.
+37 -17
View File
@@ -20,17 +20,14 @@
stunned = 1
icon = null
invisibility = 101
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc )
O.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("h2monkey", animation)
sleep(22)
//animation = null
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc )
qdel(animation)
// hash the original name?
if (tr_flags & TR_HASHNAME)
@@ -77,13 +74,22 @@
O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
if (tr_flags & TR_DEFAULTMSG)
O << "<B>You are now a monkey.</B>"
for(var/A in loc.vars)
if(loc.vars[A] == src)
loc.vars[A] = O
updateappearance(O)
. = O
if ( !(tr_flags & TR_KEEPSRC) ) //flag should be used if monkeyize() is called inside another proc of src so that one does not crash
qdel(src)
return
var/mob/deleted = src
src = O
qdel(deleted)
spawn(22)
//animation = null
O.invisibility = 0
qdel(animation)
////////////////////////// Humanize //////////////////////////////
//Could probably be merged with monkeyize but other transformations got their own procs, too
@@ -120,17 +126,13 @@
stunned = 1
icon = null
invisibility = 101
var/atom/movable/overlay/animation = new( loc )
var/mob/living/carbon/human/O = new( loc )
O.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("monkey2h", animation)
sleep(22)
var/mob/living/carbon/human/O = new( loc )
for(var/obj/item/C in O.loc)
O.equip_to_appropriate_slot(C)
qdel(animation)
O.gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE
O.dna = dna
@@ -185,10 +187,28 @@
O.a_intent = "help"
if (tr_flags & TR_DEFAULTMSG)
O << "<B>You are now a human.</B>"
for(var/obj/item/C in O.loc)
O.equip_to_appropriate_slot(C)
updateappearance(O)
. = O
for(var/A in loc.vars)
if(loc.vars[A] == src)
loc.vars[A] = O
if ( !(tr_flags & TR_KEEPSRC) ) //don't delete src yet if it's needed to finish calling proc
qdel(src)
var/mob/deleted = src
src = O
qdel(deleted)
spawn(22)
O.invisibility = 0
for(var/obj/item/C in O.loc)
O.equip_to_appropriate_slot(C)
qdel(animation)
return
/mob/new_player/AIize()
-3
View File
@@ -46,9 +46,6 @@
/mob/proc/update_inv_gloves()
return
/mob/proc/update_mutations()
return
/mob/proc/update_inv_wear_id()
return
+9 -5
View File
@@ -68,9 +68,13 @@
if(usr.stat || !usr.canmove || usr.restrained())
return
if((CLUMSY in usr.mutations) && prob(25))
usr << "<span class='warning'>You cut yourself on the paper! Ahhhh! Ahhhhh!</span>"
usr.damageoverlaytemp = 9001
if(!ishuman(usr))
return
var/mob/living/carbon/human/H = usr
if(H.disabilities & CLUMSY && prob(25))
H << "<span class='warning'>You cut yourself on the paper! Ahhhh! Ahhhhh!</span>"
H.damageoverlaytemp = 9001
return
var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text), 1, MAX_NAME_LEN)
if((loc == usr && usr.stat == 0))
@@ -263,14 +267,14 @@
update_icon()
/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/user)
/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/living/carbon/human/user)
..()
if(is_blind(user))
return
var/clown = 0
if(user && (CLUMSY in user.mutations))
if(user.disabilities & CLUMSY)
clown = 1
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
+6 -20
View File
@@ -489,22 +489,8 @@
make_terminal()
terminal.connect_to_network()
else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2)
if (src.loc:intact)
user << "<span class='warning'>You must remove the floor plating in front of the APC first.</span>"
return
user.visible_message("<span class='warning'>[user.name] dismantles the power terminal from [src].</span>", \
"You begin to cut the cables...")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if(terminal && opened && has_electronics!=2)
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
new /obj/item/stack/cable_coil(loc,10)
user << "<span class='notice'>You cut the cables and dismantle the power terminal.</span>"
qdel(terminal)
terminal.dismantle(user)
else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
user.visible_message("<span class='warning'>[user.name] inserts the power control board into [src].</span>", \
"You start to insert the power control board into the frame...")
@@ -690,7 +676,7 @@
"chargingStatus" = charging,
"totalLoad" = lastused_equip + lastused_light + lastused_environ,
"coverLocked" = coverlocked,
"siliconUser" = istype(user, /mob/living/silicon),
"siliconUser" = user.has_unlimited_silicon_privilege,
"malfStatus" = get_malf_status(user),
"powerChannels" = list(
@@ -778,7 +764,7 @@
if(user.lying)
user << "<span class='warning'>You must stand to use [src]!</span>"
return 0
if (istype(user, /mob/living/silicon))
if(user.has_unlimited_silicon_privilege)
var/mob/living/silicon/ai/AI = user
var/mob/living/silicon/robot/robot = user
if ( \
@@ -844,7 +830,7 @@
update()
else if (href_list["overload"])
if(istype(usr, /mob/living/silicon))
if(usr.has_unlimited_silicon_privilege)
src.overload_lighting()
else if (href_list["malfhack"])
@@ -881,7 +867,7 @@
malfvacate()
else if (href_list["toggleaccess"])
if(istype(usr, /mob/living/silicon))
if(usr.has_unlimited_silicon_privilege)
if(emagged || (stat & (BROKEN|MAINT)))
usr << "The APC does not respond to the command."
else
+17 -10
View File
@@ -622,37 +622,41 @@ obj/structure/cable/proc/avail()
var/path = "/obj/structure/cable" + (item_color == "red" ? "" : "/" + item_color)
return new path (location)
// called when cable_coil is clicked on a turf/simulated/floor
/obj/item/stack/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user)
// called when cable_coil is clicked on a turf
/obj/item/stack/cable_coil/proc/place_turf(turf/T, mob/user)
if(!isturf(user.loc))
return
if(!T.cancable)
user << "You can only lay cables on catwalks and plating!"
return
if(get_amount() < 1) // Out of cable
user << "There is no cable left."
return
if(get_dist(F,user) > 1) // Too far
if(get_dist(T,user) > 1) // Too far
user << "You can't lay cable at a place that far away."
return
if(F.intact) // Ff floor is intact, complain
if(T.intact) // Ff floor is intact, complain
user << "You can't lay cable there unless the floor tiles are removed."
return
else
var/dirn
if(user.loc == F)
if(user.loc == T)
dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing
else
dirn = get_dir(F, user)
dirn = get_dir(T, user)
for(var/obj/structure/cable/LC in F)
for(var/obj/structure/cable/LC in T)
if(LC.d2 == dirn && LC.d1 == 0)
user << "There's already a cable at that position."
return
var/obj/structure/cable/C = get_new_cable (F)
var/obj/structure/cable/C = get_new_cable(T)
//set up the new cable
C.d1 = 0 //it's a O-X node cable
@@ -695,14 +699,17 @@ obj/structure/cable/proc/avail()
if(U == T) //if clicked on the turf we're standing on, try to put a cable in the direction we're facing
turf_place(T,user)
place_turf(T,user)
return
var/dirn = get_dir(C, user)
// one end of the clicked cable is pointing towards us
if(C.d1 == dirn || C.d2 == dirn)
if(U.intact) // can't place a cable if the floor is complete
if(!U.cancable) //checking if it's a plating or catwalk
user << "You can only lay cables on catwalks and plating!"
return
if(U.intact) //can't place a cable if it's a plating with a tile on it
user << "You can't lay cable there unless the floor tiles are removed."
return
else
+1 -1
View File
@@ -321,7 +321,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1)
updateDialog()
if(prob(25)) // To help stop "Your clothes feel warm" spam.
if(prob(25)) // To help stop "Your clothes feel warm." spam.
pulse_radiation()
var/overlay_state = null
+3 -3
View File
@@ -467,7 +467,7 @@
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player
/obj/machinery/light/attack_hand(mob/user)
/obj/machinery/light/attack_hand(mob/living/carbon/human/user)
add_fingerprint(user)
@@ -489,9 +489,9 @@
else
prot = 1
if(prot > 0 || (COLD_RESISTANCE in user.mutations))
if(prot > 0)
user << "You remove the light [fitting]"
else if(TK in user.mutations)
else if(istype(user) && user.dna.check_mutation(TK))
user << "You telekinetically remove the light [fitting]."
else
user << "You try to remove the light [fitting], but you burn your hand on it!"
+1 -1
View File
@@ -128,7 +128,7 @@
if(get_dist(src, user) > 1)
return
coil.turf_place(T, user)
coil.place_turf(T, user)
return
else
..()
+1 -23
View File
@@ -142,29 +142,7 @@
//disassembling the terminal
if(istype(I, /obj/item/weapon/wirecutters) && terminal && panel_open)
var/turf/T = get_turf(terminal)
if (T.intact) //is the floor plating removed ?
user << "<span class='alert'>You must first expose the power terminal!</span>"
return
user << "You begin to dismantle the power terminal..."
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
//give the wires back and delete the terminal
new /obj/item/stack/cable_coil(T,10)
user.visible_message(\
"<span class='alert'>[user.name] cuts the cables and dismantles the power terminal.</span>",\
"You cut the cables and dismantle the power terminal.")
inputting = 0 //stop inputting, since we have don't have a terminal anymore
qdel(terminal)
return
terminal.dismantle(user)
//crowbarring it !
default_deconstruction_crowbar(I)
@@ -180,7 +180,7 @@
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1, get_dist(l, src)) ) ) )
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
var/rads = (power / 10) * sqrt( 1 / min(get_dist(l, src),1) )
var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) )
l.apply_effect(rads, IRRADIATE)
power -= (power/500)**3
+45
View File
@@ -33,3 +33,48 @@
invisibility = 0
icon_state = "term"
/obj/machinery/power/proc/can_terminal_dismantle()
. = 0
/obj/machinery/power/apc/can_terminal_dismantle()
. = 0
if(opened && has_electronics != 2)
. = 1
/obj/machinery/power/smes/can_terminal_dismantle()
. = 0
if(panel_open)
. = 1
/obj/machinery/power/terminal/proc/dismantle(var/mob/living/user)
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
if(T.intact)
user << "<span class='alert'>You must first expose the power terminal!</span>"
return
if(master && master.can_terminal_dismantle())
user.visible_message("<span class='warning'>[user.name] dismantles the power terminal from [master].</span>", \
"You begin to cut the cables...")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if(master && master.can_terminal_dismantle())
if(prob(50) && electrocute_mob(user, powernet, src))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, master)
s.start()
return
new /obj/item/stack/cable_coil(loc, 10)
user << "<span class='notice'>You cut the cables and dismantle the power terminal.</span>"
qdel(src)
/obj/machinery/power/terminal/attackby(obj/item/W, mob/living/user)
if(istype(W, /obj/item/weapon/wirecutters))
dismantle(user)
return
..()
+11 -12
View File
@@ -67,7 +67,7 @@
for(var/obj/O in contents)
O.emp_act(severity)
/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)//TODO: go over this
/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/carbon/human/user as mob|obj, flag, params)//TODO: go over this
if(flag) //It's adjacent, is the user, or is on the user's person
if(istype(target, /mob/) && target != user && !(target in user.contents)) //We make sure that it is a mob, it's not us or part of us.
if(user.a_intent == "harm") //Flogging action
@@ -79,7 +79,7 @@
if(clumsy_check && can_shoot())
if(istype(user, /mob/living))
var/mob/living/M = user
if ((CLUMSY in M.mutations) && prob(40))
if (M.disabilities & CLUMSY && prob(40))
user << "<span class='danger'>You shoot yourself in the foot with \the [src]!</span>"
process_fire(user,user,0,params)
M.drop_item()
@@ -92,18 +92,17 @@
process_fire(target,user,flag,params)
/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/user)
/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/carbon/user)
if (!user.IsAdvancedToolUser())
user << "<span class='notice'>You don't have the dexterity to do this!</span>"
return 0
if(trigger_guard)
if (HULK in user.mutations)
user << "<span class='notice'>Your meaty finger is much too large for the trigger guard!</span>"
return 0
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna && NOGUNS in H.dna.species.specflags)
if(istype(user) && user.dna)
if(user.dna.check_mutation(HULK))
user << "<span class='notice'>Your meaty finger is much too large for the trigger guard!</span>"
return 0
if(NOGUNS in user.dna.species.specflags)
user << "<span class='notice'>Your fingers don't fit in the trigger guard!</span>"
return 0
return 1
@@ -117,7 +116,7 @@
for(var/i = 1 to burst_size)
if(!issilicon(user))
if(!(src in get_both_hands(user))) //for burst firing
if( i>1 && !(src in get_both_hands(user))) //for burst firing
break
if(chambered)
if(!chambered.fire(target, user, params, , suppressed))
@@ -127,9 +126,9 @@
if(!special_check(user))
return
if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
shoot_live_shot(user, 1, target)
shoot_live_shot(user, 1, target, message)
else
shoot_live_shot(user)
shoot_live_shot(user, 0, target, message)
else
shoot_with_empty_chamber(user)
break
@@ -152,7 +152,7 @@
. = 0
for(var/obj/item/ammo_casing/AC in magazine.stored_ammo)
if(AC.BB)
process_fire(user, user)
process_fire(user, user,0)
. = 1
/obj/item/weapon/gun/projectile/shotgun/blow_up(mob/user as mob)
@@ -160,21 +160,16 @@
if(chambered && chambered.BB)
process_fire(user, user,0)
. = 1
for(var/obj/item/ammo_casing/AC in magazine.stored_ammo)
if(AC.BB)
chambered = AC
process_fire(user, user,0)
. = 1
/obj/item/weapon/gun/projectile/proc/sawoff(mob/user as mob)
if(sawn_state == SAWN_OFF)
user << "<span class='notice'>\The [src] is already shorten.</span>"
user << "<span class='notice'>\The [src] is already shortened.</span>"
return
if(sawn_state == SAWN_SAWING)
return
user.visible_message("<span class='notice'>[user] begin to shorten \the [src].</span>", "<span class='notice'>You begin to shorten \the [src].</span>")
user.visible_message("<span class='notice'>[user] begins to shorten \the [src].</span>", "<span class='notice'>You begin to shorten \the [src].</span>")
//if there's any live ammo inside the gun, makes it go off
if(blow_up(user))
@@ -184,6 +179,7 @@
sawn_state = SAWN_SAWING
if(do_after(user, 30))
user.visible_message("<span class='warning'>[user] shortens \the [src]!</span>", "<span class='warning'>You shorten \the [src]!</span>")
name = "sawn-off [src.name]"
desc = sawn_desc
icon_state = initial(icon_state) + "-sawn"
@@ -192,7 +188,6 @@
slot_flags &= ~SLOT_BACK //you can't sling it on your back
slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
sawn_state = SAWN_OFF
user.visible_message("<span class='warning'>[user] shorten \the [src]!</span>", "<span class='warning'>You shorten \the [src]!</span>")
update_icon()
return
else
+1 -1
View File
@@ -39,7 +39,7 @@
/obj/item/projectile/beam/disabler
name = "disabler beam"
icon_state = "omnilaser"
damage = 33
damage = 36
damage_type = STAMINA
hitsound = 'sound/weapons/tap.ogg'
eyeblur = 0
@@ -858,4 +858,3 @@ datum/reagent/plantnutriment/robustharvestnutriment
// Undefine the alias for REAGENTS_EFFECT_MULTIPLER
#undef REM
@@ -60,7 +60,7 @@ datum/reagent/consumable/carrotjuice/on_mob_life(var/mob/living/M as mob)
//nothing
if(21 to INFINITY)
if (prob(data-10))
M.disabilities &= ~NEARSIGHTED
M.disabilities &= ~NEARSIGHT
data++
..()
return
@@ -1,5 +1,3 @@
///////////////////////////////////////////////////////////////////
//Food Reagents
//////////////////////////////////////////////////////////////////
@@ -385,4 +383,3 @@ datum/reagent/consumable/cherryjelly
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
color = "#801E28" // rgb: 128, 30, 40
@@ -92,18 +92,12 @@ datum/reagent/medicine/ryetalyn
reagent_state = SOLID
color = "#C8A5DC" // rgb: 200, 165, 220
datum/reagent/medicine/ryetalyn/on_mob_life(var/mob/living/M as mob)
var/needs_update = M.mutations.len > 0
M.mutations = list()
M.disabilities = 0
M.sdisabilities = 0
datum/reagent/medicine/ryetalyn/on_mob_life(mob/living/carbon/human/M)
M.jitteriness = 0
// Might need to update appearance for hulk etc.
if(needs_update && ishuman(M))
var/mob/living/carbon/human/H = M
H.update_mutations()
if(istype(M) && M.dna)
M.dna.remove_all_mutations()
..()
return
@@ -210,7 +204,6 @@ datum/reagent/medicine/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob
M.hallucination = 0
M.setBrainLoss(0)
M.disabilities = 0
M.sdisabilities = 0
M.eye_blurry = 0
M.eye_blind = 0
M.SetWeakened(0)
@@ -299,9 +292,8 @@ datum/reagent/medicine/imidazoline
datum/reagent/medicine/imidazoline/on_mob_life(var/mob/living/M as mob)
M.eye_blurry = max(M.eye_blurry-5 , 0)
M.eye_blind = max(M.eye_blind-5 , 0)
M.disabilities &= ~NEARSIGHTED
M.disabilities &= ~NEARSIGHT
M.eye_stat = max(M.eye_stat-5, 0)
// M.sdisabilities &= ~1 Replaced by eye surgery
..()
return
+4 -3
View File
@@ -97,9 +97,10 @@
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
..()
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explosion(src.loc,-1,0,2, flame_range = 2)
if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explosion(src.loc,-1,0,2, flame_range = 2)
/obj/structure/reagent_dispensers/fueltank/blob_act()
+9 -4
View File
@@ -63,11 +63,16 @@
// attack by item places it in to disposal
/obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user)
if(stat & BROKEN || !I || !user || (I.flags & NODROP))
if(stat & BROKEN || !I || !user)
return
if(isrobot(user) && !istype(I, /obj/item/weapon/storage/bag/trash))
return
if(isrobot(user))
if(!istype(I, /obj/item/weapon/storage/bag/trash))
return
else
if(I.flags & NODROP)
return
src.add_fingerprint(user)
if(mode<=0) // It's off
if(istype(I, /obj/item/weapon/screwdriver))
@@ -507,7 +512,7 @@
AM.loc = src
if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(FAT in H.mutations) // is a human and fat?
if(H.disabilities & FAT) // is a human and fat?
has_fat_guy = 1 // set flag on holder
if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
var/obj/structure/bigDelivery/T = AM
@@ -215,7 +215,7 @@
id = "retractor"
build_type = AUTOLATHE
materials = list("$metal" = 6000, "$glass" = 3000)
build_path = /obj/item/weapon/
build_path = /obj/item/weapon/retractor
category = list("initial", "Medical")
/datum/design/cautery
+2 -2
View File
@@ -15,8 +15,8 @@
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] successfully fixes [target]'s eyes!</span>")
target.sdisabilities &= ~BLIND
target.disabilities &= ~NEARSIGHTED
target.disabilities &= ~BLIND
target.disabilities &= ~NEARSIGHT
target.eye_blurry = 35 //this will fix itself slowly.
target.eye_stat = 0
return 1
+1 -1
View File
@@ -10,7 +10,7 @@
continue
if(S.target_must_be_dead && M.stat != DEAD)
continue
if(S.target_must_be_fat && !(FAT in M.mutations))
if(S.target_must_be_fat && !(M.disabilities & FAT))
continue
if(istype(M, /mob/living/carbon/human))