From f3537f38e6be30b8f553d6ce67cb405aac2785b1 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 07:09:50 -0700
Subject: [PATCH 01/24] shield bashing
---
code/__DEFINES/flags/shields.dm | 18 ++++
code/_globalvars/bitfields.dm | 10 +++
code/game/objects/items/shields.dm | 127 +++++++++++++++++++++++++--
icons/effects/96x96_attack_sweep.dmi | Bin 0 -> 3701 bytes
tgstation.dme | 1 +
5 files changed, 149 insertions(+), 7 deletions(-)
create mode 100644 code/__DEFINES/flags/shields.dm
create mode 100644 icons/effects/96x96_attack_sweep.dmi
diff --git a/code/__DEFINES/flags/shields.dm b/code/__DEFINES/flags/shields.dm
new file mode 100644
index 0000000000..301f19a35c
--- /dev/null
+++ b/code/__DEFINES/flags/shields.dm
@@ -0,0 +1,18 @@
+/// Transparent, let beams pass
+#define SHIELD_TRANSPARENT (1<<0)
+/// Can shield bash
+#define SHIELD_CAN_BASH (1<<1)
+/// Shield bash knockdown on wall hit
+#define SHIELD_BASH_WALL_KNOCKDOWN (1<<2)
+/// Shield bash always knockdown
+#define SHIELD_BASH_ALWAYS_KNOCKDOWN (1<<3)
+/// Shield bash disarm on wall hit
+#define SHIELD_BASH_WALL_DISARM (1<<4)
+/// Shield bash always disarm
+#define SHIELD_BASH_ALWAYS_DISARM (1<<5)
+/// You can shieldbash target someone on the ground for ground slam
+#define SHIELD_BASH_GROUND_SLAM (1<<6)
+/// Shield bashing someone on the ground will disarm
+#define SHIELD_BASH_GROUND_SLAM_DISARM (1<<7)
+
+#define SHIELD_FLAGS_DEFAULT (SHIELD_CAN_BASH | SHIELD_BASH_WALL_KNOCKDOWN | SHIELD_BASH_WALL_DISARM | SHIELD_BASH_GROUND_SLAM | SHIELD_BASH_GROUND_SLAM_DISARM)
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 5367322d8e..78d6df83e5 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -249,5 +249,15 @@ GLOBAL_LIST_INIT(bitfields, list(
"COMBAT_FLAG_SOFT_STAMCRIT" = COMBAT_FLAG_SOFT_STAMCRIT,
"COMBAT_FLAG_INTENTIONALLY_RESTING" = COMBAT_FLAG_INTENTIONALLY_RESTING,
"COMBAT_FLAG_RESISTING_REST" = COMBAT_FLAG_RESISTING_REST
+ ),
+ "shield_flags" = list(
+ "SHIELD_TRANSPARENT" = SHIELD_TRANSPARENT,
+ "SHIELD_CAN_BASH" = SHIELD_CAN_BASH,
+ "SHIELD_BASH_WALL_KNOCKDOWN" = SHIELD_BASH_WALL_KNOCKDOWN,
+ "SHIELD_BASH_ALWAYS_KNOCKDOWN" = SHIELD_BASH_ALWAYS_KNOCKDOWN,
+ "SHIELD_BASH_WALL_DISARM" = SHIELD_BASH_WALL_DISARM,
+ "SHIELD_BASH_ALWAYS_DISARM" = SHIELD_BASH_ALWAYS_DISARM,
+ "SHIELD_BASH_GROUND_SLAM" = SHIELD_BASH_GROUND_SLAM,
+ "SHIELD_BASH_GROUND_SLAM_DISARM" = SHIELD_BASH_GROUND_SLAM_DISARM
)
))
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 37dfc417d5..8f3a6fd479 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -3,11 +3,124 @@
icon = 'icons/obj/items_and_weapons.dmi'
block_chance = 50
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
- var/transparent = FALSE // makes beam projectiles pass through the shield
+ /// Shield flags
+ var/shield_flags = SHIELD_FLAGS_DEFAULT
+ /// Last shieldbash world.time
+ var/last_shieldbash = 0
+ /// Shieldbashing cooldown
+ var/shieldbash_cooldown = 5 SECONDS
+ /// Shieldbashing stamina cost
+ var/shieldbash_stamcost = 7.5
+ /// Shieldbashing knockback
+ var/shieldbash_knockback = 2
+ /// Shield bashing brute damage
+ var/shieldbash_brutedamage = 5
+ /// Shield bashing stamina damage
+ var/shieldbash_stamdmg = 15
+ /// Shield bashing daze duration
+ var/shieldbash_daze_duration = 3.5 SECONDS
+
+/obj/item/shield/examine(mob/user)
+ . = ..()
+ if(shield_flags & SHIELD_CAN_BASH)
+ . += "Right click on combat mode attack with [src] to shield bash!"
+ if(shield_flags & SHIELD_BASH_GROUND_SLAM)
+ . += "Directly rightclicking on a downed target with [src] will slam them instead of bashing."
/obj/item/shield/proc/on_shield_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance)
return TRUE
+/obj/item/shield/alt_pre_attack(atom/A, mob/living/user, params)
+ user_shieldbash(user, A)
+ return TRUE
+
+/obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir)
+ var/px = 0
+ var/py = 0
+ switch(dir)
+ if(NORTH)
+ py = 12
+ if(SOUTH)
+ py = -12
+ if(EAST)
+ px = 12
+ if(WEST)
+ px = -12
+ var/oldpx = user.pixel_x
+ var/oldpy = user.pixel_y
+ animate(user, pixel_x = px, pixel_y = py, time = 1, easing = SINE_EASING | EASE_OUT)
+ animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 1.5)
+ user.visible_message("[user] charges forwards with [src]!")
+ animate(new /obj/effect/temp_visual/dir_setting/shieldbash(user.loc, dir), alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3)
+
+/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target)
+ if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess..
+ // unified stun absorption system when lol
+ target.visible_message("[user] slams [target] with [src], but [target] doesn't falter!", "[user] slams you with [src], but it barely fazes you!")
+ return FALSE
+ var/target_downed = !CHECK_MOBILITY(target, MOBILITY_STAND)
+ var/away_dir = get_dir(user, target)
+ var/wallhit = !(away_dir & (away_dir - 1)) && isclosedturf(get_step_away(target, user)) //no diagonals
+ var/disarming = (target_downed && (shield_flags & SHIELD_BASH_GROUND_SLAM_DISARM)) || (shield_flags & SHIELD_BASH_ALWAYS_DISARM) || (wallhit && (shield_flags & SHIELD_BASH_WALL_DISARM))
+ var/knockdown = !target_downed && ((shield_flags & SHIELD_BASH_ALWAYS_KNOCKDOWN) || (wallhit && (shield_flags & SHIELD_BASH_WALL_KNOCKDOWN)))
+ target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"][shieldbash_daze_duration? ", dazing them":""][knockdown? " and knocking them down":""]!",
+ "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"][shieldbash_daze_duration? ", dazing you":""][knockdown? " and knocking you down":""]!")
+ if(knockdown)
+ target.KnockToFloor(disarming)
+ else if(disarming)
+ target.drop_all_held_items()
+ target.apply_damage(shieldbash_stamdmg, STAMINA, BODY_ZONE_CHEST)
+ target.apply_damage(shieldbash_brutedamage, BRUTE, BODY_ZONE_CHEST)
+ target.Daze(shieldbash_daze_duration)
+ if(!target_downed && shieldbash_knockback)
+ var/turf/targetturf = get_turf(target)
+ var/turf/userturf = get_turf(user)
+ var/dx = CLAMP(targetturf.x - userturf.x, -1, 1)
+ var/dy = CLAMP(targetturf.y - userturf.y, -1, 1)
+ dx *= shieldbash_knockback
+ dy *= shieldbash_knockback
+ var/turf/knockback_target = locate(CLAMP(userturf.x + dx, 1, world.maxx), CLAMP(userturf.y + dy, 1, world.maxy), z)
+ if(knockback_target)
+ for(var/i in 1 to shieldbash_knockback)
+ step(target, get_dir(target, knockback_target))
+ return TRUE
+
+/obj/item/shield/proc/user_shieldbash(mob/living/user, atom/target)
+ if(!(shield_flags & SHIELD_CAN_BASH))
+ to_chat(user, "[src] can't be used to shield bash!")
+ return FALSE
+ if(world.time < last_shieldbash + shieldbash_cooldown)
+ to_chat(user, "You can't bash with [src] again so soon!")
+ return FALSE
+ if(isliving(target)) //GROUND SLAAAM
+ if(!(shield_flags & SHIELD_BASH_GROUND_SLAM))
+ to_chat(user, "You can't ground slam with [src]!")
+ return FALSE
+ bash_target(user, target)
+ last_shieldbash = world.time
+ user.adjustStaminaLossBuffered(shieldbash_stamcost)
+ return 1
+ // Directional sweep!
+ last_shieldbash = world.time
+ user.adjustStaminaLossBuffered(shieldbash_stamcost)
+ // Since we are in combat mode, we can probably safely use the user's dir instead of getting their mouse pointing cardinal dir.
+ do_shieldbash_effect(user, user.dir)
+ var/list/checking = list(get_step(user, user.dir), get_step(user, turn(user.dir, 45)), get_step(user, turn(user.dir, -45)))
+ var/list/victims = list()
+ for(var/i in checking)
+ var/turf/T = i
+ for(var/mob/living/L in T)
+ victims += L
+ if(length(victims))
+ for(var/i in victims)
+ bash_target(user, target)
+ return length(victims)
+
+/obj/effect/temp_visual/dir_setting/shield_bash
+ icon = 'icon/effects/96x96_attack_sweep.dmi'
+ icon_state = "shieldbash"
+ duration = 3
+
/obj/item/shield/riot
name = "riot shield"
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
@@ -23,13 +136,13 @@
custom_materials = list(/datum/material/glass=7500, /datum/material/iron=1000)
attack_verb = list("shoved", "bashed")
var/cooldown = 0 //shield bash cooldown. based on world.time
- transparent = TRUE
+ shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_TRANSPARENT
max_integrity = 75
/obj/item/shield/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
if(ismovableatom(object))
var/atom/movable/AM = object
- if(transparent && (AM.pass_flags & PASSGLASS))
+ if(CHECK_BITFIELD(shield_flags, SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS))
return BLOCK_NONE
if(attack_type & ATTACK_TYPE_THROWN)
final_block_chance += 30
@@ -88,7 +201,7 @@
item_state = "roman_shield"
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
- transparent = FALSE
+ shield_flags = SHIELD_FLAGS_DEFAULT
max_integrity = 65
/obj/item/shield/riot/roman/fake
@@ -111,7 +224,7 @@
custom_materials = null
resistance_flags = FLAMMABLE
block_chance = 30
- transparent = FALSE
+ shield_flags = SHIELD_FLAGS_DEFAULT
max_integrity = 55
/obj/item/shield/riot/buckler/shatter(mob/living/carbon/human/owner)
@@ -238,7 +351,7 @@
throwforce = 15 //Massive pice of metal
w_class = WEIGHT_CLASS_HUGE
item_flags = SLOWS_WHILE_IN_HAND
- transparent = FALSE
+ shield_flags = SHIELD_FLAGS_DEFAULT
/obj/item/shield/riot/implant
name = "riot tower shield"
@@ -248,7 +361,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
block_chance = 30 //May be big but hard to move around to block.
slowdown = 1
- transparent = FALSE
+ shield_flags = SHIELD_FLAGS_DEFAULT
item_flags = SLOWS_WHILE_IN_HAND
/obj/item/shield/riot/implant/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
diff --git a/icons/effects/96x96_attack_sweep.dmi b/icons/effects/96x96_attack_sweep.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..25547822f1b8f2fe3298f1df20a36c3e26902aca
GIT binary patch
literal 3701
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
I)6rl42NWaOVE_OC
literal 0
HcmV?d00001
diff --git a/tgstation.dme b/tgstation.dme
index 2f9323c5d2..c45807a533 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -121,6 +121,7 @@
#include "code\__DEFINES\dcs\flags.dm"
#include "code\__DEFINES\dcs\helpers.dm"
#include "code\__DEFINES\dcs\signals.dm"
+#include "code\__DEFINES\flags\shields.dm"
#include "code\__HELPERS\_cit_helpers.dm"
#include "code\__HELPERS\_lists.dm"
#include "code\__HELPERS\_logging.dm"
From b39eb60c4aadfbb1367ff3e6074d515718c79d8e Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 07:30:23 -0700
Subject: [PATCH 02/24] shield bashing
---
code/game/objects/items/shields.dm | 16 +++++++++++-----
code/modules/mob/living/carbon/carbon.dm | 2 --
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 8f3a6fd479..1838d53b35 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -48,10 +48,11 @@
px = -12
var/oldpx = user.pixel_x
var/oldpy = user.pixel_y
- animate(user, pixel_x = px, pixel_y = py, time = 1, easing = SINE_EASING | EASE_OUT)
- animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 1.5)
+ animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW)
+ animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3)
user.visible_message("[user] charges forwards with [src]!")
- animate(new /obj/effect/temp_visual/dir_setting/shieldbash(user.loc, dir), alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3)
+ var/obj/effect/temp_visual/dir_setting/shield_bash = new(user.loc, dir)
+ animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3)
/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target)
if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess..
@@ -97,6 +98,8 @@
to_chat(user, "You can't ground slam with [src]!")
return FALSE
bash_target(user, target)
+ user.do_attack_animation(target, used_item = src)
+ playsound(src, "swing_hit", 75, 1)
last_shieldbash = world.time
user.adjustStaminaLossBuffered(shieldbash_stamcost)
return 1
@@ -109,15 +112,18 @@
var/list/victims = list()
for(var/i in checking)
var/turf/T = i
- for(var/mob/living/L in T)
+ for(var/mob/living/L in T.contents)
victims += L
if(length(victims))
for(var/i in victims)
bash_target(user, target)
+ playsound(src, "swing_hit", 75, 1)
+ else
+ playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
return length(victims)
/obj/effect/temp_visual/dir_setting/shield_bash
- icon = 'icon/effects/96x96_attack_sweep.dmi'
+ icon = 'icons/effects/96x96_attack_sweep.dmi'
icon_state = "shieldbash"
duration = 3
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index fc85fc25c4..cf3e8883ca 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -206,8 +206,6 @@
newtonian_move(get_dir(target, src))
thrown_thing.safe_throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src, null, null, null, move_force, random_turn)
-
-
/mob/living/carbon/restrained(ignore_grab)
. = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE))
From eacc783f09695bb93d70c92b0b7d08d941d1813b Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 08:23:25 -0700
Subject: [PATCH 03/24] k
---
code/game/objects/items/shields.dm | 60 ++++++++++++-------
.../mob/living/carbon/human/species.dm | 14 ++---
2 files changed, 44 insertions(+), 30 deletions(-)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 1838d53b35..be011c8a34 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -17,8 +17,8 @@
var/shieldbash_brutedamage = 5
/// Shield bashing stamina damage
var/shieldbash_stamdmg = 15
- /// Shield bashing daze duration
- var/shieldbash_daze_duration = 3.5 SECONDS
+ /// Shield bashing stagger duration
+ var/shieldbash_stagger_duration = 3.5 SECONDS
/obj/item/shield/examine(mob/user)
. = ..()
@@ -34,6 +34,10 @@
user_shieldbash(user, A)
return TRUE
+/obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ user_shieldbash(user, target)
+ return TRUE
+
/obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir)
var/px = 0
var/py = 0
@@ -51,39 +55,48 @@
animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW)
animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3)
user.visible_message("[user] charges forwards with [src]!")
- var/obj/effect/temp_visual/dir_setting/shield_bash = new(user.loc, dir)
+ var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir)
animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3)
-/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target)
+/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir)
if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess..
// unified stun absorption system when lol
target.visible_message("[user] slams [target] with [src], but [target] doesn't falter!", "[user] slams you with [src], but it barely fazes you!")
return FALSE
var/target_downed = !CHECK_MOBILITY(target, MOBILITY_STAND)
- var/away_dir = get_dir(user, target)
- var/wallhit = !(away_dir & (away_dir - 1)) && isclosedturf(get_step_away(target, user)) //no diagonals
+ var/wallhit = FALSE
+ var/turf/target_current_turf = get_turf(target)
+ target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"]!",
+ "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"]!")
+ for(var/i in 1 to shieldbash_knockback)
+ var/turf/new_turf = get_step(target, bashdir)
+ var/mob/living/carbon/human/H = locate() in new_turf
+ if(H)
+ H.visible_message("[target] is sent crashing into [H]!",
+ "[target] is sent crashing into you!")
+ H.KnockToFloor()
+ wallhit = TRUE
+ break
+ else
+ step(target, bashdir)
+ if(get_turf(target) == target_current_turf)
+ wallhit = TRUE
+ break
+ else
+ target_current_turf = get_turf(target)
var/disarming = (target_downed && (shield_flags & SHIELD_BASH_GROUND_SLAM_DISARM)) || (shield_flags & SHIELD_BASH_ALWAYS_DISARM) || (wallhit && (shield_flags & SHIELD_BASH_WALL_DISARM))
var/knockdown = !target_downed && ((shield_flags & SHIELD_BASH_ALWAYS_KNOCKDOWN) || (wallhit && (shield_flags & SHIELD_BASH_WALL_KNOCKDOWN)))
- target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"][shieldbash_daze_duration? ", dazing them":""][knockdown? " and knocking them down":""]!",
- "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"][shieldbash_daze_duration? ", dazing you":""][knockdown? " and knocking you down":""]!")
+ if(shieldbash_stagger_duration || knockdown)
+ target.visible_message("[target] is knocked [knockdown? "to the floor" : "off balanace"]!",
+ "You are knocked [knockdown? "to the floor" : "off balanace"]!")
if(knockdown)
target.KnockToFloor(disarming)
else if(disarming)
target.drop_all_held_items()
+
target.apply_damage(shieldbash_stamdmg, STAMINA, BODY_ZONE_CHEST)
target.apply_damage(shieldbash_brutedamage, BRUTE, BODY_ZONE_CHEST)
- target.Daze(shieldbash_daze_duration)
- if(!target_downed && shieldbash_knockback)
- var/turf/targetturf = get_turf(target)
- var/turf/userturf = get_turf(user)
- var/dx = CLAMP(targetturf.x - userturf.x, -1, 1)
- var/dy = CLAMP(targetturf.y - userturf.y, -1, 1)
- dx *= shieldbash_knockback
- dy *= shieldbash_knockback
- var/turf/knockback_target = locate(CLAMP(userturf.x + dx, 1, world.maxx), CLAMP(userturf.y + dy, 1, world.maxy), z)
- if(knockback_target)
- for(var/i in 1 to shieldbash_knockback)
- step(target, get_dir(target, knockback_target))
+ target.Stagger(shieldbash_stagger_duration)
return TRUE
/obj/item/shield/proc/user_shieldbash(mob/living/user, atom/target)
@@ -107,7 +120,8 @@
last_shieldbash = world.time
user.adjustStaminaLossBuffered(shieldbash_stamcost)
// Since we are in combat mode, we can probably safely use the user's dir instead of getting their mouse pointing cardinal dir.
- do_shieldbash_effect(user, user.dir)
+ var/bashdir = user.dir
+ do_shieldbash_effect(user, bashdir)
var/list/checking = list(get_step(user, user.dir), get_step(user, turn(user.dir, 45)), get_step(user, turn(user.dir, -45)))
var/list/victims = list()
for(var/i in checking)
@@ -116,7 +130,7 @@
victims += L
if(length(victims))
for(var/i in victims)
- bash_target(user, target)
+ bash_target(user, i, bashdir)
playsound(src, "swing_hit", 75, 1)
else
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
@@ -124,7 +138,7 @@
/obj/effect/temp_visual/dir_setting/shield_bash
icon = 'icons/effects/96x96_attack_sweep.dmi'
- icon_state = "shieldbash"
+ icon_state = "shield_bash"
duration = 3
/obj/item/shield/riot
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index d541ff1066..c0e3dbd03f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1456,12 +1456,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(target.check_martial_melee_block())
target.visible_message("[target] blocks [user]'s attack!")
return FALSE
-
+
if(HAS_TRAIT(user, TRAIT_PUGILIST))//CITADEL CHANGE - makes punching cause staminaloss but funny martial artist types get a discount
user.adjustStaminaLossBuffered(1.5)
else
user.adjustStaminaLossBuffered(3.5)
-
+
if(attacker_style && attacker_style.harm_act(user,target))
return TRUE
else
@@ -1526,7 +1526,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(user.limb_destroyer)
target.dismembering_strike(user, affecting.body_zone)
-
+
if(atk_verb == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage + 0.5x stamina damage
target.apply_damage(damage*1.5, BRUTE, affecting, armor_block)
target.apply_damage(damage*0.5, STAMINA, affecting, armor_block)
@@ -1538,21 +1538,21 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold)
if((punchedstam > 50) && prob(punchedstam*0.5)) //If our punch victim has been hit above the threshold, and they have more than 50 stamina damage, roll for stun, probability of 1% per 2 stamina damage
-
+
target.visible_message("[user] knocks [target] down!", \
"You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user)
to_chat(user, "You knock [target] down!")
-
+
var/knockdown_duration = 40 + (punchedstam + (punchedbrute*0.5))*0.8 - armor_block
target.DefaultCombatKnockdown(knockdown_duration)
target.forcesay(GLOB.hit_appends)
log_combat(user, target, "got a stun punch with their previous punch")
-
+
if(HAS_TRAIT(user, TRAIT_KI_VAMPIRE) && !HAS_TRAIT(target, TRAIT_NOBREATH) && (punchedbrute < 100)) //If we're a ki vampire we also sap them of lifeforce, but only if they're not too beat up. Also living organics only.
user.adjustBruteLoss(-5)
user.adjustFireLoss(-5)
user.adjustStaminaLoss(-20)
-
+
target.adjustCloneLoss(10)
target.adjustBruteLoss(10)
From ab1d7c29ad67835fd018548af980dc81dab9b5dc Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 08:28:02 -0700
Subject: [PATCH 04/24] Update shields.dm
---
code/game/objects/items/shields.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index be011c8a34..edb0a1b5c9 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -134,6 +134,7 @@
playsound(src, "swing_hit", 75, 1)
else
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
+ step(user, bashdir) //lunge
return length(victims)
/obj/effect/temp_visual/dir_setting/shield_bash
From bcf77458dd5639ba27f07dd4acb0a174aa562dbb Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 08:37:02 -0700
Subject: [PATCH 05/24] nicer way to bash people
---
code/game/objects/items/shields.dm | 39 ++++++++++++++++++------------
1 file changed, 23 insertions(+), 16 deletions(-)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index be011c8a34..9725237bf8 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -19,6 +19,8 @@
var/shieldbash_stamdmg = 15
/// Shield bashing stagger duration
var/shieldbash_stagger_duration = 3.5 SECONDS
+ /// Shield bashing push distance
+ var/shieldbash_push_distance = 1
/obj/item/shield/examine(mob/user)
. = ..()
@@ -31,11 +33,11 @@
return TRUE
/obj/item/shield/alt_pre_attack(atom/A, mob/living/user, params)
- user_shieldbash(user, A)
+ user_shieldbash(user, A, user.a_intent != INTENT_HARM)
return TRUE
/obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters)
- user_shieldbash(user, target)
+ user_shieldbash(user, target, user.a_intent != INTENT_HARM)
return TRUE
/obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir)
@@ -54,11 +56,11 @@
var/oldpy = user.pixel_y
animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW)
animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3)
- user.visible_message("[user] charges forwards with [src]!")
+ user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!")
var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir)
animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3)
-/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir)
+/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir, harmful)
if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess..
// unified stun absorption system when lol
target.visible_message("[user] slams [target] with [src], but [target] doesn't falter!", "[user] slams you with [src], but it barely fazes you!")
@@ -66,12 +68,16 @@
var/target_downed = !CHECK_MOBILITY(target, MOBILITY_STAND)
var/wallhit = FALSE
var/turf/target_current_turf = get_turf(target)
- target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"]!",
- "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"]!")
- for(var/i in 1 to shieldbash_knockback)
+ if(harmful)
+ target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"]!",
+ "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"]!")
+ else
+ target.visible_message("[user] shoves [target] with [src]!",
+ "[user] shoves you with [src]!")
+ for(var/i in 1 to harmful? shieldbash_knockback : shieldbash_push_distance)
var/turf/new_turf = get_step(target, bashdir)
var/mob/living/carbon/human/H = locate() in new_turf
- if(H)
+ if(H && harmful)
H.visible_message("[target] is sent crashing into [H]!",
"[target] is sent crashing into you!")
H.KnockToFloor()
@@ -94,12 +100,13 @@
else if(disarming)
target.drop_all_held_items()
- target.apply_damage(shieldbash_stamdmg, STAMINA, BODY_ZONE_CHEST)
- target.apply_damage(shieldbash_brutedamage, BRUTE, BODY_ZONE_CHEST)
+ if(harmful)
+ target.apply_damage(shieldbash_stamdmg, STAMINA, BODY_ZONE_CHEST)
+ target.apply_damage(shieldbash_brutedamage, BRUTE, BODY_ZONE_CHEST)
target.Stagger(shieldbash_stagger_duration)
return TRUE
-/obj/item/shield/proc/user_shieldbash(mob/living/user, atom/target)
+/obj/item/shield/proc/user_shieldbash(mob/living/user, atom/target, harmful)
if(!(shield_flags & SHIELD_CAN_BASH))
to_chat(user, "[src] can't be used to shield bash!")
return FALSE
@@ -110,9 +117,9 @@
if(!(shield_flags & SHIELD_BASH_GROUND_SLAM))
to_chat(user, "You can't ground slam with [src]!")
return FALSE
- bash_target(user, target)
+ bash_target(user, target, NONE, harmful)
user.do_attack_animation(target, used_item = src)
- playsound(src, "swing_hit", 75, 1)
+ playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1)
last_shieldbash = world.time
user.adjustStaminaLossBuffered(shieldbash_stamcost)
return 1
@@ -121,7 +128,7 @@
user.adjustStaminaLossBuffered(shieldbash_stamcost)
// Since we are in combat mode, we can probably safely use the user's dir instead of getting their mouse pointing cardinal dir.
var/bashdir = user.dir
- do_shieldbash_effect(user, bashdir)
+ do_shieldbash_effect(user, bashdir, harmful)
var/list/checking = list(get_step(user, user.dir), get_step(user, turn(user.dir, 45)), get_step(user, turn(user.dir, -45)))
var/list/victims = list()
for(var/i in checking)
@@ -130,8 +137,8 @@
victims += L
if(length(victims))
for(var/i in victims)
- bash_target(user, i, bashdir)
- playsound(src, "swing_hit", 75, 1)
+ bash_target(user, i, bashdir, harmful)
+ playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1)
else
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
return length(victims)
From 6f5c1bac08b17973b1c758f28668a814c7550666 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 08:37:53 -0700
Subject: [PATCH 06/24] harmful
---
code/game/objects/items/shields.dm | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index c8365783e3..dc11e55754 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -40,7 +40,7 @@
user_shieldbash(user, target, user.a_intent != INTENT_HARM)
return TRUE
-/obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir)
+/obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir, harmful)
var/px = 0
var/py = 0
switch(dir)
@@ -141,7 +141,6 @@
playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1)
else
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
- step(user, bashdir) //lunge
return length(victims)
/obj/effect/temp_visual/dir_setting/shield_bash
From 0ea1e557db7bdf6250e6fd31f8569a38e3414676 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 19:31:19 -0700
Subject: [PATCH 07/24] ok
---
.../mob/living/simple_animal/hostile/megafauna/bubblegum.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 0d4b7d1b1f..5e75088f53 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -103,7 +103,7 @@ Difficulty: Hard
if(.)
SSshuttle.shuttle_purchase_requirements_met |= "bubblegum"
-/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A)
+/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
if(charging)
return
..()
From b69c0944c9f1a4f44f79f1e8e3651b366416ce65 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Tue, 14 Apr 2020 21:54:23 -0700
Subject: [PATCH 08/24] Update human.dm
---
.../code/modules/mob/living/carbon/human/human.dm | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human.dm b/modular_citadel/code/modules/mob/living/carbon/human/human.dm
index 390cac3646..474c9d2823 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/human.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/human.dm
@@ -2,16 +2,15 @@
return
/mob/living/carbon/human/resist_embedded()
- if(handcuffed || legcuffed || (wear_suit && wear_suit.breakouttime))
+ if(handcuffed || (wear_suit && wear_suit.breakouttime))
return
- if(CHECK_MOBILITY(src, MOBILITY_MOVE) && !on_fire)
+ if(CHECK_MOBILITY(src, MOBILITY_USE))
for(var/obj/item/bodypart/L in bodyparts)
if(istype(L) && L.embedded_objects.len)
for(var/obj/item/I in L.embedded_objects)
if(istype(I) && I.w_class >= WEIGHT_CLASS_NORMAL) //minimum weight class to insta-ripout via resist
- remove_embedded_unsafe(L, I, src, 1.5) //forcefully call the remove embedded unsafe proc but with extra pain multiplier. if you want to remove it less painfully, examine and remove it carefully.
+ remove_embedded_unsafe(L, I, src, 1) //forcefully call the remove embedded unsafe proc but with extra pain multiplier. if you want to remove it less painfully, examine and remove it carefully.
return TRUE //Hands are occupied
- return
/mob/living/carbon/human/proc/remove_embedded_unsafe(obj/item/bodypart/L, obj/item/I, mob/user, painmul = 1)
if(!I || !L || I.loc != src || !(I in L.embedded_objects))
From fc24574b5225edb1d789f531a3e7f10f4dbdbed9 Mon Sep 17 00:00:00 2001
From: kappa-sama <44128284+kappa-sama@users.noreply.github.com>
Date: Wed, 15 Apr 2020 15:37:57 -0400
Subject: [PATCH 09/24] minor nerfies
---
code/modules/reagents/chemistry/reagents/drug_reagents.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index e7229b5abf..354b991fba 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -353,7 +353,7 @@
/datum/reagent/drug/aranesp
name = "Aranesp"
- description = "Amps you up and gets you going, fixes all stamina damage you might have but can cause toxin and oxygen damage."
+ description = "Amps you up and gets you going, fixes stamina damage you might have but can cause toxin and oxygen damage."
reagent_state = LIQUID
color = "#78FFF0"
pH = 9.2
@@ -362,7 +362,7 @@
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
to_chat(M, "[high_message]")
- M.adjustStaminaLoss(-18, 0)
+ M.adjustStaminaLoss(-10, 0)
M.adjustToxLoss(0.5, 0)
if(prob(50))
M.losebreath++
From a41b5d7fac02ed557240bee8e4840622cc586805 Mon Sep 17 00:00:00 2001
From: kappa-sama <44128284+kappa-sama@users.noreply.github.com>
Date: Wed, 15 Apr 2020 15:41:30 -0400
Subject: [PATCH 10/24] better description
---
code/modules/reagents/chemistry/reagents/drug_reagents.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 354b991fba..c96feec4e2 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -353,7 +353,7 @@
/datum/reagent/drug/aranesp
name = "Aranesp"
- description = "Amps you up and gets you going, fixes stamina damage you might have but can cause toxin and oxygen damage."
+ description = "Amps you up and gets you going, fixing stamina damage but possibly causing toxin and oxygen damage."
reagent_state = LIQUID
color = "#78FFF0"
pH = 9.2
From 368d80194051542bfbcc7e7c9f5c67ea910735b8 Mon Sep 17 00:00:00 2001
From: Putnam
Date: Thu, 16 Apr 2020 08:17:48 -0700
Subject: [PATCH 11/24] Makes objectives clean theirselves up properly.
---
code/game/gamemodes/objective.dm | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 4497f9faef..ed0786eb07 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -19,6 +19,16 @@ GLOBAL_LIST_EMPTY(objectives)
if(text)
explanation_text = text
+/datum/objective/Destroy(force, ...)
+ GLOB.objectives -= src
+ if(owner)
+ for(var/datum/antagonist/A in owner.antag_datums)
+ if(locate(src) in A.objectives)
+ A.objectives -= src
+ if(team)
+ team.objectives -= src
+ . = ..()
+
/datum/objective/proc/get_owners() // Combine owner and team into a single list.
. = (team && team.members) ? team.members.Copy() : list()
if(owner)
From 87dd2681cae9ecfa6e33a1240096b1cb5bf0acf9 Mon Sep 17 00:00:00 2001
From: Putnam
Date: Thu, 16 Apr 2020 08:30:55 -0700
Subject: [PATCH 12/24] The locate isn't necessary
---
code/game/gamemodes/objective.dm | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index ed0786eb07..3b95b1281f 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -23,8 +23,7 @@ GLOBAL_LIST_EMPTY(objectives)
GLOB.objectives -= src
if(owner)
for(var/datum/antagonist/A in owner.antag_datums)
- if(locate(src) in A.objectives)
- A.objectives -= src
+ A.objectives -= src
if(team)
team.objectives -= src
. = ..()
From 874e57a51644f2358d0f89d34ec475af886fc9c6 Mon Sep 17 00:00:00 2001
From: Putnam
Date: Thu, 16 Apr 2020 16:14:22 -0700
Subject: [PATCH 13/24] Makes dynamic voting not the default
---
config/game_options.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/game_options.txt b/config/game_options.txt
index c3930fd325..7764c6a5f0 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -587,7 +587,7 @@ MONKEYCAP 64
#DISABLE_STAMBUFFER
#Replaces standard extended/secret dichotomy with extended and calm/chaotic votes for dynamic.
-DYNAMIC_VOTING
+#DYNAMIC_VOTING
## Choose which Engine to start the round with. Weight is after the comma. Setting the weight to 0 removes the engine from rotation.
BOX_RANDOM_ENGINE Box SM,3
From 21f7a6032d1d08bf92b8816a04b78c65d6a4895e Mon Sep 17 00:00:00 2001
From: kappa-sama <44128284+kappa-sama@users.noreply.github.com>
Date: Fri, 17 Apr 2020 00:50:42 -0400
Subject: [PATCH 14/24] this
---
code/modules/mob/mob.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d03443cf61..fd786c8631 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -146,7 +146,7 @@
//CITADEL EDIT, required for vore code to remove (T != loc && T != src)) as a check
if(M.see_invisible
Date: Thu, 16 Apr 2020 22:55:01 -0700
Subject: [PATCH 15/24] Update storage.dm
---
code/_onclick/hud/screen_objects/storage.dm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/code/_onclick/hud/screen_objects/storage.dm b/code/_onclick/hud/screen_objects/storage.dm
index db287565f2..bdcca70d9b 100644
--- a/code/_onclick/hud/screen_objects/storage.dm
+++ b/code/_onclick/hud/screen_objects/storage.dm
@@ -67,6 +67,9 @@
/obj/screen/storage/volumetric_box/Click(location, control, params)
return our_item.Click(location, control, params)
+/obj/screen/storage/volumetric_box/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params)
+ return our_item.MouseDrop(over, src_location, over_location, src_control, over_control, params)
+
/obj/screen/storage/volumetric_box/center
icon_state = "stored_continue"
var/obj/screen/storage/stored_left/left
From 121b9f0d9212ad319a4fb12127a63ee0effc8400 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Thu, 16 Apr 2020 22:57:27 -0700
Subject: [PATCH 16/24] Update ui.dm
---
code/datums/components/storage/ui.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/datums/components/storage/ui.dm b/code/datums/components/storage/ui.dm
index c1c049dfd3..dd8607a51c 100644
--- a/code/datums/components/storage/ui.dm
+++ b/code/datums/components/storage/ui.dm
@@ -175,7 +175,7 @@
. += ui_left
// Then, closer, which is also our right element.
ui_close = get_ui_close()
- ui_close.screen_loc = "[screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y + row - 1]:[screen_pixel_y]"
+ ui_close.screen_loc = "[screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_close
/**
From 0fb1286042b45ab2edc920204980e9975c8c578f Mon Sep 17 00:00:00 2001
From: Ghom <42542238+Ghommie@users.noreply.github.com>
Date: Fri, 17 Apr 2020 08:47:05 +0200
Subject: [PATCH 17/24] Update guardian.dm
---
code/modules/mob/living/simple_animal/guardian/guardian.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index af342118a2..d2794a3a78 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -152,7 +152,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
to_chat(src, "Not a valid name, please try again.")
guardianrename()
return
- visible_message("Your new name [new_name] anchors itself in your mind.")
+ to_chat(src, "Your new name [new_name] anchors itself in your mind.")
fully_replace_character_name(null, new_name)
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
From 1608bd2548d39789f20c46e6f01d91891c877017 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Fri, 17 Apr 2020 11:57:18 -0700
Subject: [PATCH 18/24] Update shields.dm
---
code/__DEFINES/flags/shields.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/__DEFINES/flags/shields.dm b/code/__DEFINES/flags/shields.dm
index 301f19a35c..f6de4226e8 100644
--- a/code/__DEFINES/flags/shields.dm
+++ b/code/__DEFINES/flags/shields.dm
@@ -15,4 +15,4 @@
/// Shield bashing someone on the ground will disarm
#define SHIELD_BASH_GROUND_SLAM_DISARM (1<<7)
-#define SHIELD_FLAGS_DEFAULT (SHIELD_CAN_BASH | SHIELD_BASH_WALL_KNOCKDOWN | SHIELD_BASH_WALL_DISARM | SHIELD_BASH_GROUND_SLAM | SHIELD_BASH_GROUND_SLAM_DISARM)
+#define SHIELD_FLAGS_DEFAULT (SHIELD_CAN_BASH | SHIELD_BASH_WALL_KNOCKDOWN | SHIELD_BASH_WALL_DISARM | SHIELD_BASH_GROUND_SLAM)
From 9d139bf58426d4388cfc412b2d7dfcb8dee4a9cd Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Fri, 17 Apr 2020 15:45:44 -0500
Subject: [PATCH 19/24] Automatic changelog generation for PR #11820 [ci skip]
---
html/changelogs/AutoChangeLog-pr-11820.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-11820.yml
diff --git a/html/changelogs/AutoChangeLog-pr-11820.yml b/html/changelogs/AutoChangeLog-pr-11820.yml
new file mode 100644
index 0000000000..2aa24287bb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11820.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "Shield bashing has been added"
From e19f9c5c3e8c83e82e2feb5bf03b39c149a16815 Mon Sep 17 00:00:00 2001
From: kappa-sama <44128284+kappa-sama@users.noreply.github.com>
Date: Fri, 17 Apr 2020 19:19:00 -0400
Subject: [PATCH 20/24] revert
---
modular_citadel/code/modules/mob/cit_emotes.dm | 2 --
1 file changed, 2 deletions(-)
diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm
index 2fea5f56e0..2be83733e5 100644
--- a/modular_citadel/code/modules/mob/cit_emotes.dm
+++ b/modular_citadel/code/modules/mob/cit_emotes.dm
@@ -54,8 +54,6 @@
sound = 'modular_citadel/sound/voice/scream_skeleton.ogg'
if (is_species(user, /datum/species/fly) || is_species(user, /datum/species/insect))
sound = 'modular_citadel/sound/voice/scream_moth.ogg'
- if (is_species(user, /datum/species/xeno))
- sound = 'sound/voice/hiss6.ogg'
if(isalien(user))
sound = 'sound/voice/hiss6.ogg'
LAZYINITLIST(user.alternate_screams)
From 77af88da8cbb3618fe9a37d12b986c09b1146f27 Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Fri, 17 Apr 2020 18:20:06 -0500
Subject: [PATCH 21/24] Automatic changelog generation for PR #11882 [ci skip]
---
html/changelogs/AutoChangeLog-pr-11882.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-11882.yml
diff --git a/html/changelogs/AutoChangeLog-pr-11882.yml b/html/changelogs/AutoChangeLog-pr-11882.yml
new file mode 100644
index 0000000000..b29829e507
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11882.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "Objectives now clean theirselves up instead of leaving null entries in lists everywhere."
From 662f98cab712f2f5e25834a9f8b684cb007420bc Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Fri, 17 Apr 2020 18:36:53 -0500
Subject: [PATCH 22/24] Automatic changelog generation for PR #11900 [ci skip]
---
html/changelogs/AutoChangeLog-pr-11900.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-11900.yml
diff --git a/html/changelogs/AutoChangeLog-pr-11900.yml b/html/changelogs/AutoChangeLog-pr-11900.yml
new file mode 100644
index 0000000000..b4fddc3eb2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11900.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - rscdel: "removed roundstart hyper earrape screams from xenohybrids"
From 0e55de55a7d2aa44e07e8c095d158b5ad344a10b Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Fri, 17 Apr 2020 19:07:31 -0500
Subject: [PATCH 23/24] Automatic changelog generation for PR #11871 [ci skip]
---
html/changelogs/AutoChangeLog-pr-11871.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-11871.yml
diff --git a/html/changelogs/AutoChangeLog-pr-11871.yml b/html/changelogs/AutoChangeLog-pr-11871.yml
new file mode 100644
index 0000000000..bcbeb3e4a0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11871.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - balance: "aranesp heals 10 instead of 18 stamina per tick"
From d361a8d6aed14a9dc10f2a7fda545185aa543d1e Mon Sep 17 00:00:00 2001
From: Putnam
Date: Fri, 17 Apr 2020 22:33:11 -0700
Subject: [PATCH 24/24] Makes tactical destroy() work properly.
---
code/datums/components/tactical.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm
index ba028e2fd5..b73c58604a 100644
--- a/code/datums/components/tactical.dm
+++ b/code/datums/components/tactical.dm
@@ -18,7 +18,7 @@
UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
unmodify()
-/datum/component/fantasy/Destroy()
+/datum/component/tactical/Destroy()
unmodify()
return ..()