Merge remote-tracking branch 'citadel/master' into combat_rework_experimental

This commit is contained in:
silicons
2020-10-06 17:11:21 -07:00
434 changed files with 171285 additions and 86020 deletions
+1 -1
View File
@@ -101,7 +101,7 @@
. = ..()
if(. & EMP_PROTECT_SELF)
return
var/wipe_chance = 60 / severity
var/wipe_chance = severity/1.5
if(prob(wipe_chance))
visible_message("<span class='warning'>[src] fizzles and disappears!</span>")
qdel(src) //rip cash
+1 -1
View File
@@ -140,7 +140,7 @@
/obj/item/defibrillator/emp_act(severity)
. = ..()
if(cell && !(. & EMP_PROTECT_CONTENTS))
deductcharge(1000 / severity)
deductcharge(severity*10)
if (. & EMP_PROTECT_SELF)
return
if(safety)
+1 -1
View File
@@ -1206,7 +1206,7 @@ GLOBAL_LIST_EMPTY(PDAs)
A.emp_act(severity)
if (!(. & EMP_PROTECT_SELF))
emped += 1
spawn(200 * severity)
spawn(2 * severity)
emped -= 1
/proc/get_viewable_pdas()
@@ -225,7 +225,7 @@
if(C && istype(C) && C.bug == src)
if(!same_z_level(C))
return
C.emp_act(EMP_HEAVY)
C.emp_act(80)
C.bug = null
bugged_cameras -= C.c_tag
interact()
@@ -428,7 +428,7 @@
else
A.visible_message("<span class='danger'>[user] blinks \the [src] at \the [A].")
to_chat(user, "\The [src] now has [emp_cur_charges] charge\s.")
A.emp_act(EMP_HEAVY)
A.emp_act(80)
else
to_chat(user, "<span class='warning'>\The [src] needs time to recharge!</span>")
return
@@ -128,7 +128,7 @@
else if(istype(target, /obj/machinery/camera))
var/obj/machinery/camera/C = target
if(prob(effectchance * diode.rating))
C.emp_act(EMP_HEAVY)
C.emp_act(80)
outmsg = "<span class='notice'>You hit the lens of [C] with [src], temporarily disabling the camera!</span>"
log_combat(user, C, "EMPed", src)
else
+1 -1
View File
@@ -258,4 +258,4 @@
if (!(. & EMP_PROTECT_SELF))
turn_off()
if(!iscyborg(loc))
deductcharge(1000 / severity, TRUE, FALSE)
deductcharge(severity*10, TRUE, FALSE)
+1 -1
View File
@@ -351,7 +351,7 @@
/obj/item/book/granter/spell/charge/recoil(mob/user)
..()
to_chat(user,"<span class='warning'>[src] suddenly feels very warm!</span>")
empulse(src, 1, 1)
empulse_using_range(src, 1)
/obj/item/book/granter/spell/summonitem
spell = /obj/effect/proc_holder/spell/targeted/summonitem
@@ -7,5 +7,5 @@
/obj/item/grenade/empgrenade/prime(mob/living/lanced_by)
. = ..()
update_mob()
empulse(src, 4, 10)
empulse_using_range(src, 14)
qdel(src)
@@ -7,7 +7,8 @@
activated = 1
var/toggled = FALSE
icon_state = "hijack"
var/eye_color
var/left_eye_color
var/right_eye_color
var/stealthmode = FALSE
var/stealthcooldown = 0
var/hijacking = FALSE
@@ -25,8 +26,10 @@
return
var/on = toggled && !stealthmode
var/mob/living/carbon/human/H = imp_in
H.eye_color = on ? "ff0" : eye_color
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
H.left_eye_color = on ? "ff0" : left_eye_color
H.right_eye_color = on ? "ff0" : right_eye_color
H.dna.update_ui_block(DNA_LEFT_EYE_COLOR_BLOCK)
H.dna.update_ui_block(DNA_RIGHT_EYE_COLOR_BLOCK)
H.update_body()
/obj/item/implant/hijack/implant(mob/living/target, mob/user, silent = FALSE)
@@ -34,7 +37,8 @@
ADD_TRAIT(target, TRAIT_HIJACKER, "implant")
if (ishuman(target))
var/mob/living/carbon/human/H = target
eye_color = H.eye_color
left_eye_color = H.left_eye_color
right_eye_color = H.right_eye_color
return TRUE
/obj/item/implant/hijack/removed(mob/living/source, silent = FALSE, special = 0)
@@ -49,7 +53,8 @@
apc.update_icon()
if (ishuman(source))
var/mob/living/carbon/human/H = source
H.eye_color = eye_color
H.left_eye_color = left_eye_color
H.right_eye_color = left_eye_color
return TRUE
/obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object)
@@ -65,7 +65,7 @@
/obj/item/implant/emp/activate()
. = ..()
uses--
empulse(imp_in, 3, 5)
empulse_using_range(imp_in, 7)
if(!uses)
qdel(src)
+26 -2
View File
@@ -165,6 +165,30 @@
throwforce = 15
bayonet = TRUE
/obj/item/kitchen/knife/combat/survival/knuckledagger
name = "survival dagger"
icon_state = "glaive-dagger"
desc = "An enhanced hunting grade survival dagger, with a bright light and a handguard that makes it better for efficient butchery."
actions_types = list(/datum/action/item_action/toggle_light)
var/light_on = FALSE
var/brightness_on = 7
/obj/item/kitchen/knife/combat/survival/knuckledagger/Initialize()
. = ..()
AddComponent(/datum/component/butchering, 50, 120, 5) // it's good for butchering stuff
/obj/item/kitchen/knife/combat/survival/knuckledagger/ui_action_click(mob/user, actiontype)
light_on = !light_on
playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
update_brightness(user)
update_icon()
/obj/item/kitchen/knife/combat/survival/knuckledagger/proc/update_brightness(mob/user = null)
if(light_on)
set_light(brightness_on)
else
set_light(0)
/obj/item/kitchen/knife/combat/bone
name = "bone dagger"
item_state = "bone_dagger"
@@ -222,10 +246,10 @@
/* Trays moved to /obj/item/storage/bag */
/obj/item/kitchen/knife/scimitar
name = "Scimitar knife"
name = "scimitar knife"
desc = "A knife used to cleanly butcher. Its razor-sharp edge has been honed for butchering, but has been poorly maintained over the years."
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/kitchen/knife/scimiar/Initialize()
/obj/item/kitchen/knife/scimitar/Initialize()
. = ..()
AddComponent(/datum/component/butchering, 90 - force, 100, force - 60) //bonus chance increases depending on force
+11 -6
View File
@@ -150,6 +150,7 @@
if(squeak_override)
var/datum/component/squeak/S = GetComponent(/datum/component/squeak)
S?.override_squeak_sounds = squeak_override
snowflake_id = id
/obj/item/toy/plush/handle_atom_del(atom/A)
if(A == grenade)
@@ -827,12 +828,16 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
if(!victim)
return
visible_message("<span class='warning'>[src] gruesomely mutilliates [victim], leaving nothing more than dust!</span>")
name = victim.name
desc = victim.desc + " Wait, did it just move..?"
icon_state = victim.icon_state
item_state = victim.item_state
squeak_override = victim.squeak_override
attack_verb = victim.attack_verb
if(victim.snowflake_id) //Snowflake code for snowflake plushies.
set_snowflake_from_config(victim.snowflake_id)
desc += " Wait, did it just move..?"
else
name = victim.name
desc = victim.desc + " Wait, did it just move..?"
icon_state = victim.icon_state
item_state = victim.item_state
squeak_override = victim.squeak_override
attack_verb = victim.attack_verb
new /obj/effect/decal/cleanable/ash(get_turf(victim))
qdel(victim)
@@ -27,6 +27,13 @@
return FALSE
return TRUE
/*
This proc gets called by upgrades after installing them. Use this for things that for example need to be moved into a specific borg item,
as performing this in action() will cause the upgrade to end up in the borg instead of its intended location due to forceMove() being called afterwards..
*/
/obj/item/borg/upgrade/proc/afterInstall(mob/living/silicon/robot/R, user = usr)
return
/obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/R, user = usr)
if (!(src in R.upgrades))
return FALSE
+1
View File
@@ -2,6 +2,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \
new/datum/stack_recipe("railing", /obj/structure/railing, 3, time = 18, window_checks = TRUE), \
))
/obj/item/stack/rods
@@ -179,6 +179,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
GLOBAL_LIST_INIT(plasteel_recipes, list ( \
new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = TRUE), \
new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), \
new/datum/stack_recipe("micro powered fan assembly", /obj/machinery/fan_assembly, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
new /datum/stack_recipe_list("crates", list( \
new /datum/stack_recipe("gray crate", /obj/structure/closet/crate, 5, time = 50, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("internals crate", /obj/structure/closet/crate/internals, 5, time = 50, one_per_turf = 1, on_floor = 1), \
@@ -232,9 +233,13 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
null, \
new/datum/stack_recipe("wooden floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
new/datum/stack_recipe("large wooden floor tile", /obj/item/stack/tile/wood/wood_large, 1, 4, 20), \
new/datum/stack_recipe("tiled wooden floor tile", /obj/item/stack/tile/wood/wood_tiled, 1, 4, 20), \
new/datum/stack_recipe("diagonal wooden floor tile", /obj/item/stack/tile/wood/wood_diagonal, 1, 4, 20), \
null, \
new/datum/stack_recipe_list("pews", list(
new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_floor = TRUE),\
new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, one_per_turf = TRUE, on_floor = TRUE),\
@@ -154,13 +154,31 @@
//Wood
/obj/item/stack/tile/wood
name = "wood floor tile"
name = "wooden plank floor tile"
singular_name = "wood floor tile"
desc = "An easy to fit wood floor tile."
icon_state = "tile-wood"
turf_type = /turf/open/floor/wood
resistance_flags = FLAMMABLE
/obj/item/stack/tile/wood/wood_large
name = "large wooden plank floor tile"
singular_name = "large wooden plank floor tile"
icon_state = "tile-wood_large"
turf_type = /turf/open/floor/wood/wood_large
/obj/item/stack/tile/wood/wood_tiled
name = "tiled wooden plank floor tile"
singular_name = "tiled wooden plank floor tile"
icon_state = "tile-wood_tile"
turf_type = /turf/open/floor/wood/wood_tiled
/obj/item/stack/tile/wood/wood_diagonal
name = "diagonal wooden plank floor tile"
singular_name = "diagonal wooden plank floor tile"
icon_state = "tile-wood_diagonal"
turf_type = /turf/open/floor/wood/wood_diagonal
//Cloth Floors
/obj/item/stack/tile/padded
@@ -193,6 +211,12 @@
turf_type = /turf/open/floor/carpet/black
tableVariant = /obj/structure/table/wood/fancy/black
/obj/item/stack/tile/carpet/arcade
name = "arcade carpet"
icon_state = "tile-carpet-arcade"
turf_type = /turf/open/floor/carpet/arcade
tableVariant = null
/obj/item/stack/tile/carpet/blackred
name = "red carpet"
icon_state = "tile-carpet-blackred"
@@ -279,6 +303,15 @@
/obj/item/stack/tile/carpet/black/fifty
amount = 50
/obj/item/stack/tile/carpet/arcade/ten
amount = 10
/obj/item/stack/tile/carpet/arcade/twenty
amount = 20
/obj/item/stack/tile/carpet/arcade/fifty
amount = 50
/obj/item/stack/tile/carpet/blackred/ten
amount = 10
+1 -1
View File
@@ -234,7 +234,7 @@
if (!(. & EMP_PROTECT_SELF))
switch_status(FALSE)
if(!iscyborg(loc))
deductcharge(1000 / severity, TRUE, FALSE)
deductcharge(severity*10, TRUE, FALSE)
/obj/item/melee/baton/stunsword
name = "stunsword"
@@ -182,3 +182,20 @@
/obj/item/tank/internals/emergency_oxygen/double/empty/populate_gas()
return
/*
* Methyl Bromide
*/
/obj/item/tank/internals/methyl_bromide
name = "mantid gas reactor"
desc = "A mantid gas processing plant that continuously synthesises 'breathable' atmosphere."
icon_state = "methyl_bromide"
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
force = 6
distribute_pressure = 14
volume = 10
/obj/item/tank/internals/methyl_bromide/populate_gas()
air_contents.set_moles(/datum/gas/methyl_bromide, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
+6 -1
View File
@@ -110,13 +110,18 @@
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM)
//only heal to 25 if limb is damaged to or past 25 brute, otherwise heal normally
var/difference = affecting.brute_dam - 25
var/heal_amount = 15
if(difference >= 0)
heal_amount = difference
if(src.use_tool(H, user, 0, volume=50, amount=1))
if(user == H)
user.visible_message("<span class='notice'>[user] starts to fix some of the dents on [H]'s [affecting.name].</span>",
"<span class='notice'>You start fixing some of the dents on [H]'s [affecting.name].</span>")
if(!do_mob(user, H, 50))
return
item_heal_robotic(H, user, 15, 0)
item_heal_robotic(H, user, heal_amount, 0)
else
return ..()