Merge branch 'master' into pol-sa-playerqol

This commit is contained in:
Aronai Sieyes
2018-02-15 21:56:53 -06:00
committed by GitHub
55 changed files with 581 additions and 366 deletions
+2 -26
View File
@@ -59,7 +59,6 @@ var/list/admin_verbs_admin = list(
/client/proc/check_antagonists,
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
/client/proc/ghost_view, //let us see ghosts WHENEVERRRR
// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
/client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
/client/proc/secrets,
@@ -213,7 +212,6 @@ var/list/admin_verbs_debug = list(
/client/proc/jumptomob,
/client/proc/jumptocoord,
/client/proc/dsay,
/client/proc/ghost_view,
/client/proc/toggle_debug_logs,
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
/datum/admins/proc/view_runtimes,
@@ -326,7 +324,6 @@ var/list/admin_verbs_mod = list(
/datum/admins/proc/show_player_info,
/client/proc/player_panel_new,
/client/proc/dsay,
/client/proc/ghost_view,
/datum/admins/proc/show_skills,
/datum/admins/proc/show_player_panel,
/client/proc/check_antagonists,
@@ -351,7 +348,6 @@ var/list/admin_verbs_event_manager = list(
/client/proc/admin_ghost,
/datum/admins/proc/show_player_info,
/client/proc/dsay,
/client/proc/ghost_view,
/client/proc/cmd_admin_subtle_message,
/client/proc/debug_variables,
/client/proc/check_antagonists,
@@ -491,26 +487,6 @@ var/list/admin_verbs_event_manager = list(
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/ghost_view()
set category = "Admin"
set name = "Ghost View"
set desc = "Toggles ability to see ghosts, even while in a mob."
if(!holder) return
if(!mob.plane_holder) return
var/choice = alert(src,"Do you want to see ghosts, or not?","Ghost viewing","Show 'em!","Cancel","Hide 'em!")
if(choice == "Cancel")
return
if(choice == "Show 'em!" && mob.plane_holder)
mob.plane_holder.set_vis(VIS_GHOSTS,TRUE)
usr.see_invisible = SEE_INVISIBLE_CULT
to_chat(src,"<span class='notice'>Ghosts are now visible (while in this mob).</span>")
else if(mob.plane_holder)
mob.plane_holder.set_vis(VIS_GHOSTS,FALSE)
usr.see_invisible = initial(mob.see_invisible)
to_chat(src,"<span class='notice'>Ghosts are now hidden (while in this mob).</span>")
/client/proc/invisimin()
set name = "Invisimin"
set category = "Admin"
@@ -1046,7 +1022,7 @@ var/list/admin_verbs_event_manager = list(
set category = "Fun"
set name = "Man Up"
set desc = "Tells mob to man up and deal with it."
if(alert("Are you sure you want to tell them to man up?","Confirmation","Deal with it","No")=="No") return
T << "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>"
@@ -1059,7 +1035,7 @@ var/list/admin_verbs_event_manager = list(
set category = "Fun"
set name = "Man Up Global"
set desc = "Tells everyone to man up and deal with it."
if(alert("Are you sure you want to tell the whole server up?","Confirmation","Deal with it","No")=="No") return
for (var/mob/T as mob in mob_list)
+3 -2
View File
@@ -9,10 +9,11 @@
desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly."
name = "budget insulated gloves"
icon_state = "yellow"
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize()
permeability_coefficient = 0.05
/obj/item/clothing/gloves/fyellow/New()
/obj/item/clothing/gloves/fyellow/initialize()
. = ..()
//Picks a value between 0 and 1, in 5% increments
var/shock_pick = rand(0,20)
siemens_coefficient = shock_pick * 0.05
+16 -1
View File
@@ -167,4 +167,19 @@
/material/snow/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10)
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15)
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10)
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20)
/material/snowbrick/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+7 -1
View File
@@ -269,10 +269,16 @@
/obj/item/stack/material/snow
name = "snow"
desc = "The temptation to build a snowfort rises."
desc = "The temptation to build a snowman rises."
icon_state = "sheet-snow"
default_type = "snow"
/obj/item/stack/material/snowbrick
name = "snow brick"
desc = "For all of your igloo building needs."
icon_state = "sheet-snowbrick"
default_type = "packed snow"
/obj/item/stack/material/leather
name = "leather"
desc = "The by-product of mob grinding."
+20
View File
@@ -752,6 +752,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 1)
door_icon_base = "wood"
destruction_desc = "crumples"
radiation_resistance = 1
/material/snow
name = MAT_SNOW
@@ -769,6 +770,25 @@ var/list/name_to_material
destruction_desc = "crumples"
sheet_singular_name = "pile"
sheet_plural_name = "pile" //Just a bigger pile
radiation_resistance = 1
/material/snowbrick //only slightly stronger than snow, used to make igloos mostly
name = "packed snow"
flags = MATERIAL_BRITTLE
stack_type = /obj/item/stack/material/snowbrick
icon_base = "stone"
icon_reinf = "reinf_stone"
icon_colour = "#D8FDFF"
integrity = 50
weight = 2
hardness = 2
protectiveness = 0 // 0%
stack_origin_tech = list(TECH_MATERIAL = 1)
melting_point = T0C+1
destruction_desc = "crumbles"
sheet_singular_name = "brick"
sheet_plural_name = "bricks"
radiation_resistance = 1
/material/cloth //todo
name = "cloth"
@@ -204,6 +204,9 @@
if(istype(thing, /obj/item/toy/plushie/spider)) // Plushies are spooky so people can be assholes with them.
fear_amount += 1
if(istype(thing, /obj/structure/snowman/spider)) //Snow spiders are also spooky so people can be assholes with those too.
fear_amount += 1
if(istype(thing, /mob/living/simple_animal/hostile/giant_spider)) // Actual giant spiders are the scariest of them all.
var/mob/living/simple_animal/hostile/giant_spider/S = thing
if(S.stat == DEAD) // Dead giant spiders are less scary than alive ones.
@@ -437,7 +440,7 @@
fear_amount += 1
if(istype(S.species, /datum/species/shapeshifter/promethean))
fear_amount += 4
return fear_amount
/datum/modifier/trait/phobia/trypanophobe
+4
View File
@@ -214,6 +214,10 @@
return FALSE
/mob/living/proc/handle_darksight()
if(!seedarkness) //Cheap 'always darksight' var
dsoverlay.alpha = 255
return
var/darksightedness = min(see_in_dark/world.view,1.0) //A ratio of how good your darksight is, from 'nada' to 'really darn good'
var/current = dsoverlay.alpha/255 //Our current adjustedness
@@ -151,7 +151,7 @@
return 1
/mob/living/silicon/robot/handle_regular_hud_updates()
var/fullbright = FALSE
if (src.stat == 2 || (XRAY in mutations) || (src.sight_mode & BORGXRAY))
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
@@ -163,18 +163,22 @@
src.sight |= SEE_MOBS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
fullbright = TRUE
else if (src.sight_mode & BORGMESON)
src.sight |= SEE_TURFS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
fullbright = TRUE
else if (src.sight_mode & BORGMATERIAL)
src.sight |= SEE_OBJS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
fullbright = TRUE
else if (src.sight_mode & BORGTHERM)
src.sight |= SEE_MOBS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
fullbright = TRUE
else if (!seedarkness)
src.sight &= ~SEE_MOBS
src.sight &= ~SEE_TURFS
@@ -188,7 +192,7 @@
src.see_in_dark = 8 // see_in_dark means you can FAINTLY see in the dark, humans have a range of 3 or so, tajaran have it at 8
src.see_invisible = SEE_INVISIBLE_LIVING // This is normal vision (25), setting it lower for normal vision means you don't "see" things like darkness since darkness
// has a "invisible" value of 15
plane_holder.set_vis(VIS_FULLBRIGHT,fullbright)
..()
if (src.healths)
@@ -25,7 +25,7 @@
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashed"
attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
a_intent = I_HURT
@@ -16,7 +16,7 @@
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "chomped"
attacktext = list("chomped")
attack_sound = 'sound/weapons/bite.ogg'
speak_emote = list("gibbers")
@@ -25,6 +25,7 @@
projectiletype = /obj/item/projectile/beam/drone
projectilesound = 'sound/weapons/laser3.ogg'
destroy_surroundings = 0
hovering = TRUE
//Drones aren't affected by atmos.
min_oxy = 0
@@ -20,7 +20,7 @@
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "gripped"
attacktext = list("gripped")
attack_sound = 'sound/hallucinations/growl1.ogg'
min_oxy = 0
@@ -20,7 +20,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "clawed"
attacktext = list("clawed")
projectilesound = 'sound/weapons/Gunshot.ogg'
projectiletype = /obj/item/projectile/bullet/hivebot
@@ -24,7 +24,7 @@
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_upper = 12
attacktext = "attacked"
attacktext = list("attacked")
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -55,7 +55,7 @@
// Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies.
/mob/living/simple_animal/hostile/mimic/crate
attacktext = "bitten"
attacktext = list("bitten")
stop_automated_movement = 1
wander = 0
@@ -20,7 +20,7 @@
melee_damage_lower = 5
melee_damage_upper = 15
attacktext = "drained the life from"
attacktext = list("drained the life from")
minbodytemp = 0
maxbodytemp = 4000
@@ -24,7 +24,7 @@
melee_damage_upper = 3
environment_smash = 1
attacktext = "bites"
attacktext = list("bites")
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -8,6 +8,7 @@
faction = "carp"
intelligence_level = SA_ANIMAL
hovering = TRUE
maxHealth = 25
health = 25
speed = 4
@@ -20,7 +21,7 @@
harm_intent_damage = 8
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "bitten"
attacktext = list("bitten")
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
@@ -9,7 +9,6 @@
icon_dead = "cat2_dead"
icon_rest = "cat2_rest"
hostile = 1 //To mice, anyway.
investigates = 1
specific_targets = 1 //Only targets with Found()
run_at_them = 0 //DOMESTICATED
@@ -19,7 +19,7 @@
melee_damage_lower = 1
melee_damage_upper = 5
attacktext = "kicked"
attacktext = list("kicked")
speak_chance = 1
speak = list("EHEHEHEHEH","eh?")
@@ -98,7 +98,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = list("kicked")
speak_chance = 1
speak = list("moo?","moo","MOOOOOO")
@@ -168,7 +168,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = list("kicked")
has_langs = list("Bird")
speak_chance = 2
@@ -216,7 +216,7 @@ var/global/chicken_count = 0
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = list("kicked")
has_langs = list("Bird")
speak_chance = 2
@@ -21,7 +21,7 @@
harm_intent_damage = 5
melee_damage_lower = 5 //they're meant to be annoying, not threatening.
melee_damage_upper = 5 //unless there's like a dozen of them, then you're screwed.
attacktext = "pecked"
attacktext = list("pecked")
attack_sound = 'sound/weapons/bite.ogg'
//SPACE geese aren't affected by atmos.
@@ -15,7 +15,7 @@
response_disarm = "shoos"
response_harm = "stomps on"
attacktext = "bitten"
attacktext = list("bitten")
melee_damage_lower = 1
melee_damage_upper = 2
@@ -18,7 +18,7 @@
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 15
attacktext = "pecked"
attacktext = list("pecked")
has_langs = list("Bird")
speak_chance = 0
@@ -21,7 +21,7 @@
melee_damage_lower = 1
melee_damage_upper = 3
attacktext = "shocked"
attacktext = list("shocked")
min_oxy = 0
max_tox = 0
@@ -18,6 +18,6 @@
harm_intent_damage = 5
melee_damage_upper = 15
melee_damage_lower = 10
attacktext = "mauled"
attacktext = list("mauled")
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
@@ -22,7 +22,7 @@
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_upper = 12
attacktext = "bitten"
attacktext = list("bitten")
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -56,7 +56,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
attacktext = "bitten"
attacktext = list("bitten")
animate_movement = SLIDE_STEPS
@@ -16,7 +16,7 @@
a_intent = I_HURT
stop_automated_movement = 1
status_flags = CANPUSH
attacktext = "nipped"
attacktext = list("nipped")
friendly = "prods"
wander = 0
pass_flags = PASSTABLE
@@ -8,6 +8,7 @@
response_disarm = "flailed at"
response_harm = "punched"
intelligence_level = SA_HUMANOID // Player controlled.
hovering = TRUE
icon_dead = "shade_dead"
speed = -1
a_intent = I_HURT
@@ -100,7 +101,7 @@
harm_intent_damage = 0
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "smashed their armoured gauntlet into"
attacktext = list("smashed their armoured gauntlet into")
mob_size = MOB_HUGE
speed = 3
environment_smash = 2
@@ -152,7 +153,7 @@
health = 75
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashed"
attacktext = list("slashed")
speed = -1
environment_smash = 1
see_in_dark = 7
@@ -177,7 +178,7 @@
harm_intent_damage = 5
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "rammed"
attacktext = list("rammed")
speed = 0
environment_smash = 1
attack_sound = 'sound/weapons/rapidslice.ogg'
@@ -206,7 +207,7 @@
harm_intent_damage = 0
melee_damage_lower = 50
melee_damage_upper = 50
attacktext = "brutally crushed"
attacktext = list("brutally crushed")
speed = 5
environment_smash = 2
attack_sound = 'sound/weapons/heavysmash.ogg'
@@ -230,7 +231,7 @@
health = 150
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "violently stabbed"
attacktext = list("violently stabbed")
speed = -1
environment_smash = 1
see_in_dark = 7
@@ -26,7 +26,7 @@
harm_intent_damage = 8
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "attacked"
attacktext = list("attacked")
attack_sound = 'sound/items/bikehorn.ogg'
min_oxy = 5
@@ -28,7 +28,7 @@
harm_intent_damage = 0
melee_damage_lower = 35
melee_damage_upper = 35
attacktext = "slashed"
attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 0
@@ -28,7 +28,7 @@
harm_intent_damage = 5
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "slashed"
attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 5
@@ -30,7 +30,7 @@
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "punched"
attacktext = list("punched")
min_oxy = 5
max_oxy = 0
@@ -31,7 +31,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
environment_smash = 1
attacktext = "punched"
attacktext = list("punched")
min_oxy = 5
max_oxy = 0
@@ -75,7 +75,7 @@
melee_damage_lower = 20
melee_damage_upper = 25
attacktext = "slashed"
attacktext = list("slashed")
status_flags = 0
@@ -167,6 +167,7 @@
icon_state = "viscerator_attack"
icon_living = "viscerator_attack"
intelligence_level = SA_ROBOTIC
hovering = TRUE
faction = "syndicate"
maxHealth = 15
@@ -177,7 +178,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attack_sound = 'sound/weapons/bladeslice.ogg'
attacktext = "cut"
attacktext = list("cut")
min_oxy = 0
max_oxy = 0
@@ -110,8 +110,8 @@
//Mob melee settings
var/melee_damage_lower = 2 // Lower bound of randomized melee damage
var/melee_damage_upper = 6 // Upper bound of randomized melee damage
var/attacktext = "attacked" // "You are [attacktext] by the mob!"
var/friendly = "nuzzles" // What mobs do to people when they aren't really hostile
var/list/attacktext = list("attacked") // "You are [attacktext] by the mob!"
var/list/friendly = list("nuzzles") // "The mob [friendly] the person."
var/attack_sound = null // Sound to play when I attack
var/environment_smash = 0 // How much environment damage do I do when I hit stuff?
var/melee_miss_chance = 15 // percent chance to miss a melee attack.
@@ -131,14 +131,14 @@
//Damage resistances
var/resistance = 0 // Damage reduction for all types
var/list/resistances = list(
HALLOSS = 0,
BRUTE = 1,
BURN = 1,
TOX = 1,
OXY = 0,
CLONE = 0
)
var/list/armor = list( // Values for normal getarmor() checks
"melee" = 0,
"bullet" = 0,
"laser" = 0,
"energy" = 0,
"bomb" = 0,
"bio" = 100,
"rad" = 100)
//Scary debug things
var/debug_ai = 0 // Logging level for this mob (1,2,3)
@@ -523,7 +523,7 @@
stop_automated_movement = 0
//Search for targets while idle
if(hostile)
if(hostile || specific_targets)
FindTarget()
if(STANCE_FOLLOW)
annoyed = 15
@@ -531,7 +531,7 @@
if(follow_until_time && world.time > follow_until_time)
LoseFollow()
return
if(hostile)
if(hostile || specific_targets)
FindTarget()
if(STANCE_ATTACK)
annoyed = 50
@@ -611,7 +611,8 @@
react_to_attack(M)
if(I_HURT)
adjustBruteLoss(harm_intent_damage)
var/armor = run_armor_check(def_zone = null, attack_flag = "melee")
apply_damage(damage = harm_intent_damage, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
M.visible_message("<span class='warning'>[M] [response_harm] \the [src]!</span>")
M.do_attack_animation(src)
ai_log("attack_hand() I was hit by: [M]",2)
@@ -735,18 +736,20 @@
/mob/living/simple_animal/ex_act(severity)
if(!blinded)
flash_eyes()
var/armor = run_armor_check(def_zone = null, attack_flag = "bomb")
var/bombdam = 500
switch (severity)
if (1.0)
adjustBruteLoss(500)
gib()
return
bombdam = 500
if (2.0)
adjustBruteLoss(60)
bombdam = 60
if (3.0)
bombdam = 30
apply_damage(damage = bombdam, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
if(3.0)
adjustBruteLoss(30)
if(bombdam > maxHealth)
gib()
// Check target_mob if worthy of attack (i.e. check if they are dead or empty mecha)
/mob/living/simple_animal/proc/SA_attackable(target_mob)
@@ -1273,6 +1276,7 @@
if(A.attack_generic(src, damage_to_do, pick(attacktext)) && attack_sound)
playsound(src, attack_sound, 75, 1)
return TRUE
//The actual top-level ranged attack proc
@@ -1430,23 +1434,23 @@
for(var/obj/structure/window/obstacle in problem_turf)
if(obstacle.dir == reverse_dir[dir]) // So that windows get smashed in the right order
ai_log("DestroySurroundings() directional window hit",3)
obstacle.attack_generic(src, damage_to_do, attacktext)
obstacle.attack_generic(src, damage_to_do, pick(attacktext))
return
else if(obstacle.is_fulltile())
ai_log("DestroySurroundings() full tile window hit",3)
obstacle.attack_generic(src, damage_to_do, attacktext)
obstacle.attack_generic(src, damage_to_do, pick(attacktext))
return
var/obj/structure/obstacle = locate(/obj/structure, problem_turf)
if(istype(obstacle, /obj/structure/window) || istype(obstacle, /obj/structure/closet) || istype(obstacle, /obj/structure/table) || istype(obstacle, /obj/structure/grille))
ai_log("DestroySurroundings() generic structure hit [obstacle]",3)
obstacle.attack_generic(src, damage_to_do ,attacktext)
obstacle.attack_generic(src, damage_to_do, pick(attacktext))
return
for(var/obj/machinery/door/baddoor in problem_turf) //Required since firelocks take up the same turf
if(baddoor.density)
ai_log("DestroySurroundings() door hit [baddoor]",3)
baddoor.attack_generic(src, damage_to_do ,attacktext)
baddoor.attack_generic(src, damage_to_do, pick(attacktext))
return
//Check for shuttle bumrush
@@ -1494,7 +1498,7 @@
if (shock_damage < 1)
return 0
adjustFireLoss(shock_damage)
apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
playsound(loc, "sparks", 50, 1, -1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -1506,14 +1510,15 @@
if(taser_kill)
var/stunDam = 0
var/agonyDam = 0
var/armor = run_armor_check(def_zone = null, attack_flag = "energy")
if(stun_amount)
stunDam += stun_amount * 0.5
adjustFireLoss(stunDam)
apply_damage(damage = stunDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
if(agony_amount)
agonyDam += agony_amount * 0.5
adjustFireLoss(agonyDam)
apply_damage(damage = agonyDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
/mob/living/simple_animal/emp_act(severity)
if(!isSynthetic())
@@ -1528,6 +1533,13 @@
if(4)
adjustFireLoss(rand(1, 6))
/mob/living/simple_animal/getarmor(def_zone, attack_flag)
var/armorval = armor[attack_flag]
if(!armorval)
return 0
else
return armorval
// Force it to target something
/mob/living/simple_animal/proc/taunt(var/mob/living/new_target, var/forced = FALSE)
if(intelligence_level == SA_HUMANOID && !forced)
+4
View File
@@ -93,3 +93,7 @@
/obj/item/organ/internal/eyes/proc/additional_flash_effects(var/intensity)
return -1
/obj/item/organ/internal/eyes/emp_act(severity)
..() //Returns if the organ isn't robotic
owner.eye_blurry += (4/severity)
+7
View File
@@ -17,6 +17,9 @@
owner.stat = 0
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
/obj/item/organ/internal/cell/emp_act(severity)
..()
owner.nutrition = max(0, owner.nutrition - rand(10/severity, 50/severity))
// Used for an MMI or posibrain being installed into a human.
/obj/item/organ/internal/mmi_holder
@@ -83,6 +86,10 @@
holder_mob.drop_from_inventory(src)
qdel(src)
/obj/item/organ/internal/mmi_holder/emp_act(severity)
..()
owner.adjustToxLoss(rand(6/severity, 12/severity))
/obj/item/organ/internal/mmi_holder/posibrain
name = "positronic brain interface"
brain_type = /obj/item/device/mmi/digital/posibrain
@@ -22,7 +22,7 @@
force = 5
slot_flags = SLOT_BELT|SLOT_HOLSTER
charge_cost = 480
projectile_type = /obj/item/projectile/ion
projectile_type = /obj/item/projectile/ion/pistol
/obj/item/weapon/gun/energy/phasegun
name = "phase pistol"
+15 -4
View File
@@ -9,15 +9,26 @@
light_range = 2
light_power = 0.5
light_color = "#55AAFF"
var/pulse_range = 1
var/sev1_range = 0
var/sev2_range = 1
var/sev3_range = 1
var/sev4_range = 2
/obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0)
empulse(target, pulse_range, pulse_range, pulse_range, pulse_range)
empulse(target, sev1_range, sev2_range, sev3_range, sev4_range)
return 1
/obj/item/projectile/ion/small
pulse_range = 0
sev1_range = -1
sev2_range = 0
sev3_range = 0
sev4_range = 1
/obj/item/projectile/ion/pistol
sev1_range = 0
sev2_range = 0
sev3_range = 0
sev4_range = 0
/obj/item/projectile/bullet/gyro
name ="explosive bolt"
+2 -3
View File
@@ -2210,9 +2210,8 @@
name = "Deuterium"
id = "deuterium"
result = null
required_reagents = list("water" = 10)
catalysts = list("hydrophoron" = 5)
result_amount = 1
required_reagents = list("hydrophoron" = 5, "water" = 10)
result_amount = 15
/datum/chemical_reaction/deuterium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/T = get_turf(holder.my_atom)