mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-22 11:38:12 +01:00
Merge branch 'master' into pol-sa-playerqol
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]")
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user