mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-21 12:08:55 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into janitorbuffholyfuckvalvepleasenerf
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
else
|
||||
if (internals)
|
||||
internals.icon_state = "internal0"
|
||||
return
|
||||
return
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>", \
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -46,9 +46,6 @@
|
||||
/mob/proc/update_inv_gloves()
|
||||
return
|
||||
|
||||
/mob/proc/update_mutations()
|
||||
return
|
||||
|
||||
/mob/proc/update_inv_wear_id()
|
||||
return
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
if(get_dist(src, user) > 1)
|
||||
return
|
||||
|
||||
coil.turf_place(T, user)
|
||||
coil.place_turf(T, user)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user