diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 93c625b238..8221deeadb 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -74460,9 +74460,6 @@
},
/turf/open/floor/plasteel/dark,
/area/command/bridge)
-"sKV" = (
-/turf/open/space/basic,
-/area/command/heads_quarters/captain)
"sLs" = (
/obj/effect/decal/cleanable/cobweb,
/obj/machinery/field/generator,
@@ -122066,7 +122063,7 @@ oRp
oRp
aaa
aai
-sKV
+aaa
aaa
aaa
aaa
@@ -130637,7 +130634,7 @@ aaf
aaf
aaa
aaa
-sKV
+aaa
aaa
aaa
aaa
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index eacbc74508..cdc6d424dd 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -24647,6 +24647,12 @@
},
/turf/open/space,
/area/solars/starboard)
+"beW" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"beY" = (
/obj/machinery/camera{
c_tag = "Arrivals Central";
@@ -40355,15 +40361,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/components/binary/pump{
+/obj/machinery/atmospherics/components/binary/pump/on{
dir = 8;
- name = "Mix to Ports"
- },
-/turf/open/floor/plasteel,
-/area/engineering/atmos)
-"bNk" = (
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
+ name = "Unfiltered to Mix"
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
@@ -40372,8 +40372,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Unfiltered & Air to Mix"
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
@@ -40809,23 +40810,19 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"bOo" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel,
-/area/engineering/atmos)
"bOp" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Pure to Mix"
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bOq" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Pure to Mix"
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
@@ -41089,13 +41086,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"bPa" = (
-/obj/machinery/portable_atmospherics/canister,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engineering/atmos)
"bPd" = (
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
dir = 8
@@ -41407,7 +41397,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bPW" = (
@@ -41785,14 +41774,16 @@
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bQK" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bQL" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bQM" = (
@@ -41800,9 +41791,8 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 1;
- name = "Unfiltered to Mix"
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 10
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
@@ -42109,8 +42099,7 @@
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bRw" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bRx" = (
@@ -53829,6 +53818,12 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"eEd" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"eEp" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -55198,6 +55193,15 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"hEi" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"hEX" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -56739,6 +56743,12 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/engineering/main)
+"kWG" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"kWQ" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/obj/structure/cable/yellow{
@@ -57443,6 +57453,15 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/maintenance/department/engine)
+"mAR" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"mCe" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -58849,6 +58868,10 @@
},
/turf/open/floor/wood,
/area/service/lawoffice)
+"pEM" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"pFe" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/red{
@@ -59370,6 +59393,13 @@
},
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
+"qQu" = (
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"qRl" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
@@ -60110,6 +60140,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"sGJ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"sIK" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -61031,6 +61068,12 @@
},
/turf/open/floor/engine,
/area/engineering/main)
+"uST" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Mix to Ports"
+ },
+/turf/open/floor/plasteel,
+/area/engineering/atmos)
"uUQ" = (
/obj/machinery/door/airlock/maintenance{
name = "Engineering Maintenance";
@@ -99648,7 +99691,7 @@ bJN
bKS
bMe
bNh
-bOo
+pEM
bOX
bMf
bMf
@@ -100162,9 +100205,9 @@ bHw
bKU
bOr
bPU
+kWG
bRw
-bPa
-bMf
+beW
bMf
bMf
bMf
@@ -100418,13 +100461,13 @@ bIF
bHw
bKV
bOX
-bUv
+eEd
bQL
-bPa
-bMf
-bMf
-bMf
+uST
+pEM
bMf
+qQu
+qQu
bSU
bTT
bUv
@@ -100678,10 +100721,10 @@ bMg
bNj
bOp
bPV
-bPV
-bPV
-bPV
-bPV
+hEi
+sGJ
+bUw
+bUw
bUw
bUw
bUw
@@ -100932,8 +100975,8 @@ bIH
bHw
cqG
bOX
-bNk
bOq
+mAR
bPd
bPW
bPW
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index ded183ba0b..3807b66b06 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -165,6 +165,7 @@
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
#define TRAIT_NO_MIDROUND_ANTAG "no-midround-antag" //can't be turned into an antag by random events
#define TRAIT_PUGILIST "pugilist" //This guy punches people for a living
+#define TRAIT_NOPUGILIST "nopugilist" // for preventing ((((((((((extreme)))))))))) punch stacking
#define TRAIT_KI_VAMPIRE "ki-vampire" //when someone with this trait rolls maximum damage on a punch and stuns the target, they regain some stamina and do clone damage
#define TRAIT_MAULER "mauler" // this guy punches the shit out of people to hurt them, not to drain their stamina
#define TRAIT_PASSTABLE "passtable"
diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index a1b7a74384..d1fff25dae 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -89,6 +89,7 @@
//Generic living
#define ui_living_pull "EAST-1:28,CENTER-2:15"
#define ui_living_health "EAST-1:28,CENTER:15"
+#define ui_living_healthdoll "EAST-1:28,CENTER-1:15"
//Monkeys
#define ui_monkey_head "CENTER-5:13,SOUTH:5"
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 34fd90f4f0..b27abad841 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -637,6 +637,11 @@
name = "health doll"
screen_loc = ui_healthdoll
+/obj/screen/healthdoll/living
+ icon_state = "fullhealth0"
+ screen_loc = ui_living_healthdoll
+ var/filtered = FALSE //so we don't repeatedly create the mask of the mob every update
+
/obj/screen/mood
name = "mood"
icon_state = "mood5"
diff --git a/code/_onclick/hud/simple_animal.dm b/code/_onclick/hud/simple_animal.dm
new file mode 100644
index 0000000000..ef46c0d66e
--- /dev/null
+++ b/code/_onclick/hud/simple_animal.dm
@@ -0,0 +1,15 @@
+/datum/hud/living/simple_animal
+ ui_style = 'icons/mob/screen_gen.dmi'
+/datum/hud/living/simple_animal/New(mob/living/owner)
+ ..()
+ pull_icon = new /obj/screen/pull()
+ pull_icon.icon = ui_style
+ pull_icon.update_icon()
+ pull_icon.screen_loc = ui_living_pull
+ pull_icon.hud = src
+ static_inventory += pull_icon
+
+ //mob health doll! assumes whatever sprite the mob is
+ healthdoll = new /obj/screen/healthdoll/living()
+ healthdoll.hud = src
+ infodisplay += healthdoll
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index 5881c76827..9b9ea3c86e 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -165,6 +165,7 @@
ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, SLEEPING_CARP_TRAIT)
ADD_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT)
ADD_TRAIT(H, TRAIT_TASED_RESISTANCE, SLEEPING_CARP_TRAIT)
+ ADD_TRAIT(H, TRAIT_NOPUGILIST, SLEEPING_CARP_TRAIT) // cqc doesn't get this as it's intended to be able to stack with northstar gloves
H.physiology.brute_mod *= 0.4 //brute is really not gonna cut it
H.physiology.burn_mod *= 0.7 //burn is distinctly more useful against them than brute but they're still resistant
H.physiology.stamina_mod *= 0.4 //You take less stamina damage overall, but you do not reduce the damage from stun batons as much
@@ -181,6 +182,7 @@
REMOVE_TRAIT(H, TRAIT_PIERCEIMMUNE, SLEEPING_CARP_TRAIT)
REMOVE_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT)
REMOVE_TRAIT(H, TRAIT_TASED_RESISTANCE, SLEEPING_CARP_TRAIT)
+ REMOVE_TRAIT(H, TRAIT_NOPUGILIST, SLEEPING_CARP_TRAIT)
H.physiology.brute_mod = initial(H.physiology.brute_mod)
H.physiology.burn_mod = initial(H.physiology.burn_mod)
H.physiology.stamina_mod = initial(H.physiology.stamina_mod)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 4eed168ad6..477f72ee3b 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -688,7 +688,7 @@
else
. += "It looks very robust."
- if(hasSiliconAccessInArea(user) && (!stat & BROKEN))
+ if(hasSiliconAccessInArea(user) && !(stat & BROKEN))
. += "Shift-click [src] to [ density ? "open" : "close"] it."
. += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts."
. += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it."
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 6e66f833c2..f888927411 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -383,7 +383,7 @@
. = ..()
/obj/item/stack/medical/mesh/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
- if(!is_open & user.get_inactive_held_item() == src)
+ if(!is_open && (user.get_inactive_held_item() == src))
to_chat(user, "You need to open [src] first.")
return
. = ..()
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index 9032a80d91..7d13af1e3e 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -73,3 +73,15 @@
name = "wumborian fugu den"
desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?"
mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu)
+
+/obj/structure/spawner/clown
+ name = "Laughing Larry"
+ desc = "A laughing, jovial figure. Something seems stuck in his throat."
+ icon_state = "clownbeacon"
+ icon = 'icons/obj/device.dmi'
+ max_integrity = 200
+ max_mobs = 15
+ spawn_time = 150
+ mob_types = list(/mob/living/simple_animal/hostile/retaliate/clown, /mob/living/simple_animal/hostile/retaliate/clown/fleshclown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, /mob/living/simple_animal/hostile/retaliate/clown/longface, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob)
+ spawn_text = "climbs out of"
+ faction = list("clown")
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index fba79ac2b0..6356424aaf 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -127,7 +127,7 @@
to_chat(user, "Throwing [pushed_mob] onto the table might hurt them!")
return
var/added_passtable = FALSE
- if(!pushed_mob.pass_flags & PASSTABLE)
+ if(!(pushed_mob.pass_flags & PASSTABLE))
added_passtable = TRUE
pushed_mob.pass_flags |= PASSTABLE
pushed_mob.Move(src.loc)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index ba3d8106ef..b92b659183 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -164,14 +164,12 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/remove_blacklisted_quirks()
var/mob/living/L = owner.current
if(istype(L))
- var/list/my_quirks = L.client?.prefs.all_quirks.Copy()
- SSquirks.filter_quirks(my_quirks,blacklisted_quirks)
for(var/q in L.roundstart_quirks)
var/datum/quirk/Q = q
- if(!(SSquirks.quirk_name_by_path(Q.type) in my_quirks))
+ if(Q.type in blacklisted_quirks)
if(initial(Q.antag_removal_text))
to_chat(L, "[initial(Q.antag_removal_text)]")
- L.remove_quirk(Q.type)
+ qdel(Q)
//Returns the team antagonist belongs to if any.
/datum/antagonist/proc/get_team()
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index 5b6a7648c8..b7aeb23e6f 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -680,6 +680,11 @@
glove_type = /obj/item/clothing/gloves/fingerless/pugilist/cling // just punch his head off dude
glove_name_simple = "bone gauntlets"
+/obj/effect/proc_holder/changeling/gloves/gauntlets/sting_action(mob/living/user)
+ if(HAS_TRAIT(user, TRAIT_NOPUGILIST))
+ to_chat(user, "We would gain nothing by forming our fists into brute-force weapons when we are trained in precision martial arts!")
+ return
+
/obj/item/clothing/gloves/fingerless/pugilist/cling // switches between lesser GotNS and Big Punchy Rib Breaky Hands
name = "hewn bone gauntlets"
icon_state = "ling_gauntlets"
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
index 4aeb2e1b73..4d6576ee92 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
@@ -50,7 +50,7 @@
/obj/item/melee/touch_attack/mansus_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- if(!proximity_flag | target == user)
+ if(!proximity_flag || (target == user))
return
playsound(user, 'sound/items/welder.ogg', 75, TRUE)
if(ishuman(target))
diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
index 8184beb3aa..aa927ffcfc 100644
--- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
+++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
@@ -24,7 +24,7 @@
var/check = FALSE
if(ismob(target))
var/mob/living/mobster = target
- if(!mobster.mob_biotypes & MOB_ROBOTIC)
+ if(!(mobster.mob_biotypes & MOB_ROBOTIC))
return FALSE
else
check = TRUE
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index a26d081f08..f616f2c848 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -84,6 +84,9 @@
if(slam_cooldown + slam_cooldown_time > world.time)
to_chat(src, "Your slam ability is still on cooldown!")
return
+ if(!isopenturf(loc))
+ to_chat(src, "You need to be on open flooring to do that!")
+ return
face_atom(A)
var/mob/living/victim = A
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index a558abbfe8..a337439931 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -37,14 +37,19 @@
/obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot)
. = ..()
if(slot == SLOT_GLOVES)
- use_buffs(user, TRUE)
wornonce = TRUE
+ if((HAS_TRAIT(user, TRAIT_NOPUGILIST)))
+ to_chat(user, "What purpose is there to don the weapons of pugilism if you're already well-practiced in martial arts? Mixing arts is blasphemous!")
+ return
+ use_buffs(user, TRUE)
/obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user)
. = ..()
if(wornonce)
- use_buffs(user, FALSE)
wornonce = FALSE
+ if((HAS_TRAIT(user, TRAIT_NOPUGILIST)))
+ return
+ use_buffs(user, FALSE)
/obj/item/clothing/gloves/fingerless/pugilist/proc/use_buffs(mob/user, buff)
if(buff) // tarukaja
@@ -67,6 +72,7 @@
H.dna.species.punchdamagehigh -= enhancement
H.dna.species.punchdamagelow -= enhancement
H.dna.species.punchwoundbonus -= wound_enhancement
+ H.dna?.species?.attack_sound_override = null
if(!silent)
to_chat(user, "With [src] off of your arms, you feel less ready to punch things.")
@@ -223,6 +229,50 @@
parry_cooldown = 0
parry_failed_clickcd_duration = 0
+/obj/item/clothing/gloves/fingerless/pugilist/mauler
+ name = "mauler gauntlets"
+ desc = "Plastitanium gauntlets coated in a thick nano-weave carbon material and implanted with nanite injectors that boost the wielder's strength six-fold."
+ icon_state = "mauler_gauntlets"
+ item_state = "mauler_gauntlets"
+ transfer_prints = FALSE
+ body_parts_covered = ARMS|HANDS
+ cold_protection = ARMS|HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ armor = list("melee" = 30, "bullet" = 30, "laser" = 10, "energy" = 10, "bomb" = 55, "bio" = 15, "rad" = 15, "fire" = 80, "acid" = 50)
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ strip_delay = 80
+ enhancement = 12 // same as the changeling gauntlets but without changeling utility
+ wound_enhancement = 12
+ silent = TRUE
+ inherited_trait = TRAIT_CHUNKYFINGERS // your fingers are fat because the gloves are
+ secondary_trait = TRAIT_MAULER // commit table slam
+
+/obj/item/clothing/gloves/fingerless/pugilist/mauler/equipped(mob/user, slot)
+ . = ..()
+ if(slot == SLOT_GLOVES)
+ wornonce = TRUE
+ if((HAS_TRAIT(user, TRAIT_NOPUGILIST)))
+ return
+ use_mauls(user, TRUE)
+
+/obj/item/clothing/gloves/fingerless/pugilist/mauler/dropped(mob/user)
+ . = ..()
+ if(wornonce)
+ wornonce = FALSE
+ if((HAS_TRAIT(user, TRAIT_NOPUGILIST)))
+ return
+ use_mauls(user, FALSE)
+
+/obj/item/clothing/gloves/fingerless/pugilist/mauler/proc/use_mauls(mob/user, maul)
+ if(maul)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ H.dna?.species?.attack_sound_override = 'sound/weapons/mauler_punch.ogg'
+ if(silent)
+ to_chat(H, "You feel prickles around your wrists as [src] cling to them - strength courses through your veins!")
+
/obj/item/clothing/gloves/botanic_leather
name = "botanist's leather gloves"
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm."
@@ -253,7 +303,6 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
strip_mod = 1.5
-
/obj/item/clothing/gloves/bracer
name = "bone bracers"
desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms."
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index cc14424980..6858de59df 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -535,3 +535,9 @@
to_chat(user, "You insert [I] into [src].")
B.use(10)
icon_state = initial(icon_state)
+
+/obj/item/clothing/shoes/swagshoes
+ name = "swag shoes"
+ desc = "They got me for my foams!"
+ icon_state = "SwagShoes"
+ item_state = "SwagShoes"
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index f8292738ee..60d82292ef 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -355,3 +355,10 @@
name = "Sakura Kimono'"
icon_state = "sakura_kimono"
item_state = "sakura_kimono"
+
+/obj/item/clothing/under/costume/swagoutfit
+ name = "Swag outfit"
+ desc = "Why don't you go secure some bitches?"
+ icon_state = "SwagOutfit"
+ item_state = "SwagOutfit"
+ can_adjust = FALSE
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index 7d4ea66d30..b9480a646c 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -61,7 +61,7 @@
originMachine.visible_message("[originMachine] beeps and seems lifeless.")
kill()
return
- vendingMachines = listclearnulls(vendingMachines)
+ listclearnulls(vendingMachines)
if(!vendingMachines.len) //if every machine is infected
for(var/obj/machinery/vending/upriser in infectedMachines)
if(prob(70) && !QDELETED(upriser))
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
index 8fb735e10a..b8fab56159 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
@@ -162,12 +162,19 @@
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
/datum/sprite_accessory/ears/human/rabbit
- name = "Rabbit"
+ name = "Rabbit (Lop-eared)"
icon_state = "rabbit"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+/datum/sprite_accessory/ears/human/rabbitalt
+ name = "Rabbit (Straight-eared)"
+ icon_state = "rabbitalt"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_ALL
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
/datum/sprite_accessory/ears/human/pede
name = "Scolipede"
icon_state = "pede"
@@ -296,7 +303,7 @@
/datum/sprite_accessory/ears/mam_ears/deer
name = "Deer"
icon_state = "deer"
- color_src = MUTCOLORS3
+ matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/mam_ears/eevee
name = "Eevee"
@@ -359,10 +366,15 @@
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/mam_ears/rabbit
- name = "Rabbit"
+ name = "Rabbit (Lop-eared)"
icon_state = "rabbit"
matrixed_sections = MATRIX_RED_GREEN
+/datum/sprite_accessory/ears/mam_ears/rabbitalt
+ name = "Rabbit (Straight-eared)"
+ icon_state = "rabbitalt"
+ matrixed_sections = MATRIX_ALL
+
/datum/sprite_accessory/ears/mam_ears/pede
name = "Scolipede"
icon_state = "pede"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
index a4bd0afdcb..88dda923a0 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
@@ -17,6 +17,10 @@
name = "Adhara"
icon_state = "hair_adhara"
+/datum/sprite_accessory/hair/africanpigtails
+ name = "African Pig Tails"
+ icon_state = "hair_africanpigtails"
+
/datum/sprite_accessory/hair/afro
name = "Afro"
icon_state = "hair_afro"
@@ -25,10 +29,26 @@
name = "Afro 2"
icon_state = "hair_afro2"
+/datum/sprite_accessory/hair/afro2alt
+ name = "Afro 2 (Alt)"
+ icon_state = "hair_afro2alt"
+
/datum/sprite_accessory/hair/afro_large
name = "Afro (Large)"
icon_state = "hair_bigafro"
+/datum/sprite_accessory/hair/afropuffdouble
+ name = "Afropuff (Double)"
+ icon_state = "hair_afropuffdouble"
+
+/datum/sprite_accessory/hair/afropuffleft
+ name = "Afropuff (Left)"
+ icon_state = "hair_afropuffleft"
+
+/datum/sprite_accessory/hair/afropuffright
+ name = "Afropuff (Right)"
+ icon_state = "hair_afropuffright"
+
/datum/sprite_accessory/hair/antenna
name = "Ahoge"
icon_state = "hair_antenna"
@@ -41,10 +61,18 @@
name = "Anita"
icon_state = "hair_anita"
+/datum/sprite_accessory/hair/astolfo
+ name = "Astolfo"
+ icon_state = "hair_astolfo"
+
/datum/sprite_accessory/hair/balding
name = "Balding Hair"
icon_state = "hair_e"
+/datum/sprite_accessory/hair/baum
+ name = "Baum"
+ icon_state = "hair_baum"
+
/datum/sprite_accessory/hair/bedhead
name = "Bedhead"
icon_state = "hair_bedhead"
@@ -85,6 +113,14 @@
name = "Belle"
icon_state = "hair_belle"
+/datum/sprite_accessory/hair/bluntbangs
+ name = "Bluntbangs"
+ icon_state = "hair_bluntbangs"
+
+/datum/sprite_accessory/hair/bluntbangsalt
+ name = "Bluntbangs (Alt)"
+ icon_state = "hair_bluntbangsalt"
+
/datum/sprite_accessory/hair/bob
name = "Bob Hair"
icon_state = "hair_bob"
@@ -109,6 +145,10 @@
name = "Bobcut (Alt)"
icon_state = "hair_bobcutalt"
+/datum/sprite_accessory/hair/bobcutalt2
+ name = "Bobcut (Alt) 2"
+ icon_state = "hair_bobcutalt2"
+
/datum/sprite_accessory/hair/boddicker
name = "Boddicker"
icon_state = "hair_boddicker"
@@ -205,6 +245,14 @@
name = "CIA"
icon_state = "hair_cia"
+/datum/sprite_accessory/hair/combedback
+ name = "Combed Back"
+ icon_state = "hair_combedback"
+
+/datum/sprite_accessory/hair/combedbob
+ name = "Combed Bob"
+ icon_state = "hair_combedbob"
+
/datum/sprite_accessory/hair/combover
name = "Combover"
icon_state = "hair_combover"
@@ -233,6 +281,14 @@
name = "Cornrow Tail"
icon_state = "hair_cornrowtail"
+/datum/sprite_accessory/hair/cotton
+ name = "Cotton"
+ icon_state = "hair_cotton"
+
+/datum/sprite_accessory/hair/cottonalt
+ name = "Cotton (Alt)"
+ icon_state = "hair_cottonalt"
+
/datum/sprite_accessory/hair/country
name = "Country"
icon_state = "hair_country"
@@ -261,6 +317,10 @@
name = "Devil Lock"
icon_state = "hair_devillock"
+/datum/sprite_accessory/hair/diagonalbangs
+ name = "Diagonal Bangs"
+ icon_state = "hair_diagonalbangs"
+
/datum/sprite_accessory/hair/dreadlocks
name = "Dreadlocks"
icon_state = "hair_dreads"
@@ -337,10 +397,22 @@
name = "Fluffy"
icon_state = "hair_fluffy"
+/datum/sprite_accessory/hair/fortuneteller
+ name = "Fortune Teller"
+ icon_state = "hair_fortuneteller"
+
/datum/sprite_accessory/hair/fringetail
name = "Fringe Tail"
icon_state = "hair_fringetail"
+/datum/sprite_accessory/hair/froofy
+ name = "Froofy"
+ icon_state = "hair_froofy"
+
+/datum/sprite_accessory/hair/geisha
+ name = "Geisha"
+ icon_state = "hair_geisha"
+
/datum/sprite_accessory/hair/gelled
name = "Gelled Back"
icon_state = "hair_gelled"
@@ -349,6 +421,26 @@
name = "Gentle"
icon_state = "hair_gentle"
+/datum/sprite_accessory/hair/glammetal
+ name = "Glam Metal"
+ icon_state = "hair_glammetal"
+
+/datum/sprite_accessory/hair/gloomy
+ name = "Gloomy"
+ icon_state = "hair_gloomy"
+
+/datum/sprite_accessory/hair/gloomylong
+ name = "Gloomy (Long)"
+ icon_state = "hair_gloomylong"
+
+/datum/sprite_accessory/hair/hajime
+ name = "Hajime"
+ icon_state = "hair_hajime"
+
+/datum/sprite_accessory/hair/hajimealt
+ name = "Hajime (Alt)"
+ icon_state = "hair_hajimealt"
+
/datum/sprite_accessory/hair/halfbang
name = "Half-banged Hair"
icon_state = "hair_halfbang"
@@ -365,6 +457,10 @@
name = "Half-shaved Hair"
icon_state = "hair_halfshaved"
+/datum/sprite_accessory/hair/harold
+ name = "Harold"
+ icon_state = "hair_harold"
+
/datum/sprite_accessory/hair/hedgehog
name = "Hedgehog Hair"
icon_state = "hair_hedgehog"
@@ -393,6 +489,10 @@
name = "Hitop"
icon_state = "hair_hitop"
+/datum/sprite_accessory/hair/inari
+ name = "Inari"
+ icon_state = "hair_inari"
+
/datum/sprite_accessory/hair/inkling
name = "Inkling"
icon_state = "hair_inkling"
@@ -421,14 +521,18 @@
name = "Keanu"
icon_state = "hair_keanu"
-/datum/sprite_accessory/hair/kusangi
- name = "Kusanagi"
- icon_state = "hair_kusanagi"
+/datum/sprite_accessory/hair/kisaragi
+ name = "Kisaragi"
+ icon_state = "hair_kisaragi"
/datum/sprite_accessory/hair/kleeia
name = "Kleeia"
icon_state = "hair_kleeia"
+/datum/sprite_accessory/hair/kusangi
+ name = "Kusanagi"
+ icon_state = "hair_kusanagi"
+
/datum/sprite_accessory/hair/long
name = "Long Hair 1"
icon_state = "hair_long"
@@ -449,6 +553,10 @@
name = "Long Over Eye"
icon_state = "hair_longovereye"
+/datum/sprite_accessory/hair/long_over_eyealt
+ name = "Long Over Eye (Alt)"
+ icon_state = "hair_longovereyealt"
+
/datum/sprite_accessory/hair/longbangs
name = "Long Bangs"
icon_state = "hair_lbangs"
@@ -489,10 +597,6 @@
name = "Mohawk"
icon_state = "hair_d"
-/datum/sprite_accessory/hair/newyou
- name = "New You"
- icon_state = "hair_newyou"
-
/datum/sprite_accessory/hair/reversemohawk
name = "Mohawk (Reverse)"
icon_state = "hair_reversemohawk"
@@ -509,6 +613,10 @@
name = "Mulder"
icon_state = "hair_mulder"
+/datum/sprite_accessory/hair/newyou
+ name = "New You"
+ icon_state = "hair_newyou"
+
/datum/sprite_accessory/hair/nia
name = "Nia"
icon_state = "hair_nia"
@@ -579,10 +687,18 @@
name = "Pompadour (Big)"
icon_state = "hair_bigpompadour"
+/datum/sprite_accessory/hair/bigpompadouralt
+ name = "Pompadour (Big) (Alt)"
+ icon_state = "hair_bigpompadouralt"
+
/datum/sprite_accessory/hair/ponytail1
name = "Ponytail"
icon_state = "hair_ponytail"
+/datum/sprite_accessory/hair/ponytail1alt
+ name = "Ponytail (Alt)"
+ icon_state = "hair_ponytailalt"
+
/datum/sprite_accessory/hair/ponytail2
name = "Ponytail 2"
icon_state = "hair_ponytail2"
@@ -591,14 +707,26 @@
name = "Ponytail 3"
icon_state = "hair_ponytail3"
+/datum/sprite_accessory/hair/ponytail3alt
+ name = "Ponytail 3 (Alt)"
+ icon_state = "hair_ponytail3alt"
+
/datum/sprite_accessory/hair/ponytail4
name = "Ponytail 4"
icon_state = "hair_ponytail4"
+/datum/sprite_accessory/hair/ponytail4alt
+ name = "Ponytail 4 (Alt)"
+ icon_state = "hair_ponytail4alt"
+
/datum/sprite_accessory/hair/ponytail5
name = "Ponytail 5"
icon_state = "hair_ponytail5"
+/datum/sprite_accessory/hair/ponytail6
+ name = "Ponytail 6"
+ icon_state = "hair_ponytail6"
+
/datum/sprite_accessory/hair/highponytail
name = "Ponytail (High)"
icon_state = "hair_highponytail"
@@ -623,6 +751,10 @@
name = "Ponytail (Side) 4"
icon_state = "hair_sidetail4"
+/datum/sprite_accessory/hair/sidetail5
+ name = "Ponytail (Side) 5"
+ icon_state = "hair_sidetail5"
+
/datum/sprite_accessory/hair/sharptail
name = "Ponytail (Sharp)"
icon_state = "hair_sharptail"
@@ -639,10 +771,18 @@
name = "Poofy 2"
icon_state = "hair_poofy2"
+/datum/sprite_accessory/hair/quadcurls
+ name = "Quad Curls"
+ icon_state = "hair_quadcurls"
+
/datum/sprite_accessory/hair/quiff
name = "Quiff"
icon_state = "hair_quiff"
+/datum/sprite_accessory/hair/rockstar
+ name = "Rockstar"
+ icon_state = "hair_rockstar"
+
/datum/sprite_accessory/hair/ronin
name = "Ronin"
icon_state = "hair_ronin"
@@ -759,6 +899,10 @@
name = "Slightly Long Hair"
icon_state = "hair_protagonist"
+/datum/sprite_accessory/hair/slightlymessy
+ name = "Slightly Messy Hair"
+ icon_state = "hair_slightlymessy"
+
/datum/sprite_accessory/hair/spiky
name = "Spiky"
icon_state = "hair_spikey"
@@ -771,6 +915,26 @@
name = "Spiky 3"
icon_state = "hair_spiky2"
+/datum/sprite_accessory/hair/slimedroplet
+ name = "Slime Droplet"
+ icon_state = "hair_slimedroplet"
+
+/datum/sprite_accessory/hair/slimedropletalt
+ name = "Slime Droplet (Alt)"
+ icon_state = "hair_slimedropletalt"
+
+/datum/sprite_accessory/hair/slimespikes
+ name = "Slime Spikes"
+ icon_state = "hair_slimespikes"
+
+/datum/sprite_accessory/hair/slimetendrils
+ name = "Slime Tendrils"
+ icon_state = "hair_slimetendrils"
+
+/datum/sprite_accessory/hair/slimetendrilsalt
+ name = "Slime Tendrils (Alt)"
+ icon_state = "hair_slimetendrilsalt"
+
/datum/sprite_accessory/hair/supernova
name = "Supernova"
icon_state = "hair_supernova"
@@ -851,6 +1015,10 @@
name = "Very Long Hair 2"
icon_state = "hair_longest"
+/datum/sprite_accessory/hair/longestalt
+ name = "Very Long Hair 2 (Alt)"
+ icon_state = "hair_longestalt"
+
/datum/sprite_accessory/hair/longest2
name = "Very Long Over Eye"
icon_state = "hair_longest2"
@@ -886,3 +1054,7 @@
/datum/sprite_accessory/hair/ziegler
name = "Ziegler"
icon_state = "hair_ziegler"
+
+/datum/sprite_accessory/hair/zone
+ name = "Zone"
+ icon_state = "hair_zone"
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 1aa3749589..3f456a9b43 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -149,6 +149,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
///
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
+ var/attack_sound_override = null
var/list/mob/living/ignored_by = list() // list of mobs that will ignore this species
//Breathing!
@@ -569,12 +570,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/datum/species/proc/remove_blacklisted_quirks(mob/living/carbon/C)
var/mob/living/L = C.mind?.current
if(istype(L))
- var/list/my_quirks = L.client?.prefs.all_quirks.Copy()
- SSquirks.filter_quirks(my_quirks, blacklisted_quirks)
for(var/q in L.roundstart_quirks)
var/datum/quirk/Q = q
- if(!(SSquirks.quirk_name_by_path(Q.type) in my_quirks))
- L.remove_quirk(Q.type)
+ if(Q.type in blacklisted_quirks)
+ qdel(Q)
removed_quirks += Q.type
// restore any quirks that we removed
@@ -1615,7 +1614,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/armor_block = target.run_armor_check(affecting, "melee")
- playsound(target.loc, user.dna.species.attack_sound, 25, 1, -1)
+ playsound(target.loc, user.dna.species.attack_sound_override || attack_sound, 25, 1, -1)
target.visible_message("[user] [atk_verb]ed [target]!", \
"[user] [atk_verb]ed you!", null, COMBAT_MESSAGE_RANGE, null, \
user, "You [atk_verb]ed [target]!")
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 6aaa2cca87..ae716efc71 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -542,8 +542,48 @@
update_stat()
med_hud_set_health()
med_hud_set_status()
+ update_health_hud()
-//proc used to ressuscitate a mob
+/mob/living/update_health_hud()
+ var/severity = 0
+ var/healthpercent = (health/maxHealth) * 100
+ if(hud_used?.healthdoll) //to really put you in the boots of a simplemob
+ var/obj/screen/healthdoll/living/livingdoll = hud_used.healthdoll
+ switch(healthpercent)
+ if(100 to INFINITY)
+ livingdoll.icon_state = "living0"
+ if(80 to 100)
+ livingdoll.icon_state = "living1"
+ severity = 1
+ if(60 to 80)
+ livingdoll.icon_state = "living2"
+ severity = 2
+ if(40 to 60)
+ livingdoll.icon_state = "living3"
+ severity = 3
+ if(20 to 40)
+ livingdoll.icon_state = "living4"
+ severity = 4
+ if(1 to 20)
+ livingdoll.icon_state = "living5"
+ severity = 5
+ else
+ livingdoll.icon_state = "living6"
+ severity = 6
+ if(!livingdoll.filtered)
+ livingdoll.filtered = TRUE
+ var/icon/mob_mask = icon(icon, icon_state)
+ if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size)
+ var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite"
+ mob_mask = icon('icons/mob/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll
+ UNLINT(livingdoll.filters += filter(type="alpha", icon = mob_mask))
+ livingdoll.filters += filter(type="drop_shadow", size = -1)
+ if(severity > 0)
+ overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
+ else
+ clear_fullscreen("brute")
+
+//Proc used to resuscitate a mob, for full_heal see fully_heal()
/mob/living/proc/revive(full_heal = FALSE, admin_revive = FALSE)
SEND_SIGNAL(src, COMSIG_LIVING_REVIVE, full_heal, admin_revive)
if(full_heal)
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 386f1174e1..f5919f389c 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -94,6 +94,7 @@
var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob.
var/bubble_icon = "default" //what icon the mob uses for speechbubbles
+ var/health_doll_icon //if this exists AND the normal sprite is bigger than 32x32, this is the replacement icon state (because health doll size limitations). the icon will always be screen_gen.dmi
var/last_bumped = 0
var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666)
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index c0a4822b6d..57ddbe6290 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -149,6 +149,7 @@
icon_state = "alienq"
icon_living = "alienq"
icon_dead = "alienq_dead"
+ health_doll_icon = "alienq"
bubble_icon = "alienroyal"
move_to_delay = 4
maxHealth = 400
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 51a646f668..8388d6501a 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -73,6 +73,7 @@
icon_living = "megacarp"
icon_dead = "megacarp_dead"
icon_gib = "megacarp_gib"
+ health_doll_icon = "megacarp"
regen_amount = 6
maxHealth = 30
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
index ec0b7acd07..67cecd3832 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
@@ -9,6 +9,7 @@
icon_state = "crawling"
icon_living = "crawling"
icon_dead = "dead"
+ health_doll_icon = "crawling"
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 80
maxHealth = 220
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 61f1fe0c9d..a60c5504e6 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -28,6 +28,7 @@ Difficulty: Medium
icon_state = "miner"
icon_living = "miner"
icon = 'icons/mob/broadMobs.dmi'
+ health_doll_icon = "miner"
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
light_color = "#E4C7C5"
movement_type = GROUND
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 5305813ebf..b80e6cc72f 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -33,6 +33,7 @@ Difficulty: Hard
icon_state = "bubblegum"
icon_living = "bubblegum"
icon_dead = ""
+ health_doll_icon = "bubblegum"
friendly_verb_continuous = "stares down"
friendly_verb_simple = "stare down"
icon = 'icons/mob/lavaland/96x96megafauna.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 787c15a5b4..5751512b19 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -32,6 +32,7 @@ Difficulty: Very Hard
icon_state = "eva"
icon_living = "eva"
icon_dead = "dragon_dead"
+ health_doll_icon = "eva"
friendly_verb_continuous = "stares down"
friendly_verb_simple = "stare down"
icon = 'icons/mob/lavaland/96x96megafauna.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 6c1e9eef6e..a3d51744b9 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -48,6 +48,7 @@ Difficulty: Medium
icon_state = "dragon"
icon_living = "dragon"
icon_dead = "dragon_dead"
+ health_doll_icon = "dragon"
friendly_verb_continuous = "stares down"
friendly_verb_simple = "stare down"
speak_emote = list("roars")
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index 32300dea18..14b71b3bac 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -44,6 +44,7 @@ Difficulty: Normal
attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
icon_state = "hierophant"
icon_living = "hierophant"
+ health_doll_icon = "hierophant"
friendly_verb_continuous = "stares down"
friendly_verb_simple = "stare down"
icon = 'icons/mob/lavaland/hierophant_new.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 07c1957da2..15bfe2b7f7 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -26,6 +26,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
spacewalk = TRUE
icon_state = "mega_legion"
icon_living = "mega_legion"
+ health_doll_icon = "mega_legion"
desc = "One of many."
icon = 'icons/mob/lavaland/96x96megafauna.dmi'
attack_verb_continuous = "chomps"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
index bda898ef17..f2ece50af2 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
@@ -75,6 +75,7 @@
icon_living = "watcher"
icon_aggro = "watcher"
icon_dead = "watcher_dead"
+ health_doll_icon = "watcher"
pixel_x = -10
throw_message = "bounces harmlessly off of"
melee_damage_lower = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
index ef51dc572f..5ee249c767 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
@@ -25,6 +25,7 @@
icon_aggro = "broodmother"
icon_dead = "egg_sac"
icon_gib = "syndicate_gib"
+ health_doll_icon = "broodmother"
maxHealth = 800
health = 800
melee_damage_lower = 30
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
index 032bc2d60d..4425bce532 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
@@ -24,6 +24,7 @@
icon_aggro = "herald"
icon_dead = "herald_dying"
icon_gib = "syndicate_gib"
+ health_doll_icon = "herald"
maxHealth = 800
health = 800
melee_damage_lower = 20
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
index 6c13bb903e..dca508cfeb 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
@@ -24,6 +24,7 @@
icon_aggro = "legionnaire"
icon_dead = "legionnaire_dead"
icon_gib = "syndicate_gib"
+ health_doll_icon = "legionnaire"
maxHealth = 800
health = 800
melee_damage_lower = 30
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm
index e3a5d5f762..50b15933a9 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm
@@ -24,6 +24,7 @@
icon_aggro = "pandora"
icon_dead = "pandora_dead"
icon_gib = "syndicate_gib"
+ health_doll_icon = "pandora"
maxHealth = 800
health = 800
melee_damage_lower = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 446fe80c7d..7db91b50ad 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -253,6 +253,7 @@
icon_state = "legion"
icon_living = "legion"
icon_dead = "legion"
+ health_doll_icon = "legion"
health = 450
maxHealth = 450
melee_damage_lower = 20
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index 96418686d3..5750d1ecb9 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -6,6 +6,7 @@
icon_living = "clown"
icon_dead = "clown_dead"
icon_gib = "clown_gib"
+ health_doll_icon = "clown" //if >32x32, it will use this generic. for all the huge clown mobs that subtype from this
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
turns_per_move = 5
response_disarm_continuous = "gently pushes aside"
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 46a5a8ec68..0e106caf46 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -6,6 +6,7 @@
icon_living = "pine_1"
icon_dead = "pine_1"
icon_gib = "pine_1"
+ health_doll_icon = "pine_1"
gender = NEUTER
speak_chance = 0
turns_per_move = 5
@@ -72,5 +73,6 @@
icon_living = "festivus_pole"
icon_dead = "festivus_pole"
icon_gib = "festivus_pole"
+ health_doll_icon = "festivus_pole"
loot = list(/obj/item/stack/rods)
speak_emote = list("polls")
diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
index bce1a01c8a..f10b184a45 100644
--- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
@@ -8,6 +8,7 @@
icon_aggro = "Fugu0"
icon_dead = "Fugu_dead"
icon_gib = "syndicate_gib"
+ health_doll_icon = "Fugu0"
mob_biotypes = MOB_ORGANIC|MOB_BEAST
mouse_opacity = MOUSE_OPACITY_ICON
move_to_delay = 5
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 5fa6a0c22d..e46c57f245 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -7,6 +7,7 @@
///How much blud it has for bloodsucking
blood_volume = 550
rad_flags = RAD_NO_CONTAMINATE
+ hud_type = /datum/hud/living/simple_animal
status_flags = CANPUSH
diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm
index b925c67940..49821e55e0 100644
--- a/code/modules/photography/camera/camera.dm
+++ b/code/modules/photography/camera/camera.dm
@@ -158,12 +158,12 @@
return FALSE
size_x = clamp(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT)
size_y = clamp(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT)
- var/list/desc = list("This is a photo of an area of [size_x+1] meters by [size_y+1] meters.")
+ var/list/desc = list("This is a photo of an area of [size_x*2 + 1] meters by [size_y*2 + 1] meters.")
var/ai_user = isAI(user)
var/list/seen
- var/list/viewlist = (user && user.client)? getviewsize(user.client.view) : getviewsize(world.view)
+ var/list/viewlist = user?.client? getviewsize(user.client.view) : getviewsize(world.view)
var/viewr = max(viewlist[1], viewlist[2]) + max(size_x, size_y)
- var/viewc = user.client? user.client.eye : target
+ var/viewc = user?.client? user.client.eye : target
seen = get_hear(viewr, viewc)
var/list/turfs = list()
var/list/mobs = list()
@@ -184,7 +184,7 @@
var/psize_y = (size_y * 2 + 1) * world.icon_size
var/get_icon = camera_get_icon(turfs, target_turf, psize_x, psize_y, clone_area, size_x, size_y, (size_x * 2 + 1), (size_y * 2 + 1))
qdel(clone_area)
- var/icon/temp = icon('icons/effects/96x96.dmi',"")
+ var/icon/temp = icon('icons/effects/camera_image_base.dmi',"")
temp.Blend("#000", ICON_OVERLAY)
temp.Scale(psize_x, psize_y)
temp.Blend(get_icon, ICON_OVERLAY)
diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm
index 5bd9c108d1..a5a1cbeedc 100644
--- a/code/modules/photography/camera/camera_image_capturing.dm
+++ b/code/modules/photography/camera/camera_image_capturing.dm
@@ -47,7 +47,7 @@
atoms += A
CHECK_TICK
- var/icon/res = icon('icons/effects/96x96.dmi', "")
+ var/icon/res = icon('icons/effects/camera_image_base.dmi', "")
res.Scale(psize_x, psize_y)
var/list/sorted = list()
@@ -64,7 +64,6 @@
var/xcomp = FLOOR(psize_x / 2, 1) - 15
var/ycomp = FLOOR(psize_y / 2, 1) - 15
-
for(var/atom/A in sorted)
var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp
var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp
diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm
index d3cf755de2..946dec3f49 100644
--- a/code/modules/research/nanites/nanite_programs.dm
+++ b/code/modules/research/nanites/nanite_programs.dm
@@ -254,14 +254,14 @@
software_error()
/datum/nanite_program/proc/on_shock(shock_damage)
- if(!program_flags & NANITE_SHOCK_IMMUNE)
+ if(!(program_flags & NANITE_SHOCK_IMMUNE))
if(prob(10))
software_error()
else if(prob(33))
self_destruct()
/datum/nanite_program/proc/on_minor_shock()
- if(!program_flags & NANITE_SHOCK_IMMUNE)
+ if(!(program_flags & NANITE_SHOCK_IMMUNE))
if(prob(10))
software_error()
diff --git a/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm
index 9b17162532..cf33c893ad 100644
--- a/code/modules/uplink/uplink_items/uplink_bundles.dm
+++ b/code/modules/uplink/uplink_items/uplink_bundles.dm
@@ -38,7 +38,7 @@
specialised contractor baton, and three randomly selected low cost items. Can include otherwise unobtainable items."
item = /obj/item/storage/box/syndie_kit/contract_kit
cost = 20
- player_minimum = 30
+ player_minimum = 25
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
restricted = TRUE
diff --git a/code/modules/uplink/uplink_items/uplink_dangerous.dm b/code/modules/uplink/uplink_items/uplink_dangerous.dm
index a8ca068ad2..948d17d168 100644
--- a/code/modules/uplink/uplink_items/uplink_dangerous.dm
+++ b/code/modules/uplink/uplink_items/uplink_dangerous.dm
@@ -228,6 +228,15 @@
surplus = 50
include_modes = list(/datum/game_mode/nuclear)
+/datum/uplink_item/dangerous/maulergauntlets
+ name = "Mauler Gauntlets"
+ desc = "Mauler gauntlets are a pair of high-tech plastitanium gauntlets fused with illegal nanite auto-injectors designed \
+ to grant the wearer sextuple the strength of an average human being. Wearing these, you will punch harder, inflict more injuries \
+ with your fists, and be able to slam people through tables with immense force. \
+ Unfortunately, due to the size of the gloves you will be unable to wield firearms with them equipped."
+ item = /obj/item/clothing/gloves/fingerless/pugilist/mauler
+ cost = 8
+
/datum/uplink_item/dangerous/powerfist
name = "Power Fist"
desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index fedaeff98c..da3c740a1b 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -212,6 +212,8 @@
/obj/item/clothing/suit/jacket/leather/overcoat = 4,
/obj/item/clothing/under/pants/mustangjeans = 3,
/obj/item/clothing/neck/necklace/dope = 5,
+ /obj/item/clothing/under/costume/swagoutfit = 5,
+ /obj/item/clothing/shoes/swagshoes = 5,
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 5,
/obj/item/clothing/under/misc/corporateuniform = 5,
/obj/item/clothing/suit/hooded/wintercoat/polychromic = 5,
diff --git a/html/changelog.html b/html/changelog.html
index c41322865b..4eb95b34d7 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -50,6 +50,56 @@
-->
+
29 May 2021
+
Kraseo updated:
+
+ - No more slamming into people while bloodcrawled.
+
+
Linzolle updated:
+
+ - brand intelligence event works again
+
+
keronshb updated:
+
+ - swag outfit available in clothesmate
+ - swag shoes availble in clothesmate resprite: changed swag shoes icon to the one twaticus made.
+ - Adds the clown mob spawner for admins
+
+
zeroisthebiggay updated:
+
+ - puglism damage can no longer stack with scarp
+
+
+
26 May 2021
+
bunny232 updated:
+
+ - Removed two random 'captain's office' tiles from space on meta station
+
+
+
24 May 2021
+
zeroisthebiggay updated:
+
+ - New traitor item: the Mauler Gauntlets! Punch hard, punch good! Eight telecrystals, buy today!
+ - hairs from Airborne Snitch
+
+
+
23 May 2021
+
Putnam3145 updated:
+
+ - Antag and species no longer remove all traits if one has a blacklisted trait
+
+
WanderingFox95 updated:
+
+ - Replaced the antlers showing up when you select deer ears with actual deer ears. Literally why was that even a thing before?
+ - Straight rabbit ears are now a thing.
+
+
keronshb updated:
+
+ - 30 > 25 pop req for contractor kit
+ - adds a special hud for simple mobs.
+ - a lot of >32x32 mobs now have icons for their health dolls
+
+
21 May 2021
Putnam3145 updated:
@@ -530,212 +580,6 @@
-
- 29 March 2021
- BlueWildrose updated:
-
- - Fixed being unable to fix suit sensors if damaged at all unless destroyed completely
-
- YakumoChen updated:
-
- - A less-than-new Syndicate bundle that reminds you of the good old days when we didn't need all those newfangled traitor items the young-uns get. We had 6 items in the uplink and we had Monkey in rotation and by god we made do.
-
- qweq12yt updated:
-
- - Added Earmuffs
- - Added Random Drink
- - Added Clear PDA
- - Added Internals Box
- - Added Meson Goggles
- - Added Smoke Grenade
-
- silicons updated:
-
- - automated hydroponics system design now works properly
-
-
- 28 March 2021
- CuteMoff updated:
-
- - Changed Strength Modifier from the default (1.0) too .7
-
- Hatterhat updated:
-
- - As a heretic, shattering your blade no longer interferes with bluespace.
-
- Putnam3145 updated:
-
- - Threat tracking is now universal, rather than dynamic-only
- - Slaughter demon event now increases weight based on how much blood there is.
-
- R3dtail updated:
-
- - Removed ichor creates
- - Removed ichor crates and adjusted crate rolling appropriately
- - Removed the bonespear from the blackmarket uplink, and made EMP grenades harder to get from the same item.
- - Added a description to the black market uplink
-
- Shadow-Quill updated:
-
- - Added small versions of the walk icon for all hud styles, except Retro.
-
- dzahlus updated:
-
- - Added radial menu to joy mask for alt reskins
- - added pensive, angry and flushed sprites to joy mask
-
- keronshb updated:
-
- - Radioactive microlasers can no longer knock out creatures who are immune to the effects of radiation.
- - The radioactive microlaser now calculates the strength of its delay effect using the intensity setting it had when you initially used it on your victim, not the intensity setting it currently has. This prevents people from "cheating out" its intensity 20 effect with only a 2 second delay and a 1 second cooldown.
- - Radioactive microlasers no longer contain twice as much metal as normal health analyzers do.
-
- necromanceranne updated:
-
- - Replaces the useless bullet and laser shields with new Kinetic and Ablative shields, which do as they advertise.
- - Replaces the shield implants shield with a hardlight shield that can take large amounts of brute damage, but disintegrates when shot with disablers.
- - Fixes Fake Roman Shields being able to be used as normal riot shields.
- - Fixes nonlethal/non-physical damage types destroying shields. (stamina, toxins, oxygen, clone, brain)
- - Fixes tower shields not doing anything, while also giving them intergrity to match their advertised durability.
- - Uses additional flags to determine what kind effects work well and what works poorly against various shields.
-
- timothyteakettle updated:
-
- - ghost cafe residents can now disguise themselves as any mob or object
- - fixes character preview not updating when selecting the loadout tab
-
- zeroisthebiggay updated:
-
-
- 26 March 2021
- BlueWildrose updated:
-
- - Clothing no longer drops when shredded. It just becomes useless.
- - Suit sensors are guaranteed to short out when the clothes become shredded, not damaged now.
- - Uniform limb integrity increased from 30 to 120.
- - Suit sensor damage has been added. The more damaged your suit sensors get, the less features that will be available from these suit sensors. It takes two e-sword hits to ruin your tracking beacon for instance. tweak: Examine text on uniforms is now more clear about needing cable coil to repair your suit sensors.
- - Fixed prisoner uniform sprite paths
-
- CuteMoff updated:
-
- - Diamond's forcemod was changed from 1.1x to 1.2x
-
- Hatterhat updated:
-
- - Lever-action rifles, chambered in .38, are now sitting in the code. They might be buyable from Cargo or the Black Market soon. Watch this space.
- - Sawed-off shotguns now look like shotguns, but short, when inhand, instead of "generic gun".
-
- timothyteakettle updated:
-
- - slimes can be delimbed
- - the loadout now colours pet collars correctly
-
-
- 25 March 2021
- zeroisthebiggay updated:
-
- - strained muscles isn't free
-
-
- 24 March 2021
- BlueWildrose updated:
-
- - The nightmare's light eater can now destroy messes that emit light, like glowing goo or ectoplasmic puddles.
-
- Hatterhat updated:
-
- - The NOGUNS trait now takes precedence over the triggerguard checks.
- - Medicated sutures and advanced regenerative mesh are now easier to make. Reagent-quantity wise, anyway.
-
- ItzGabby updated:
-
- - Fluff Items with polychromic support
- - A new vendor called Bark box
- - A new form of snack with it's own box
- - Two harness, one of them being lewd
- - One new collar, with a ribbon. Classy.
- - More locked forms of collars
- - Purged old balls
- - Removed the funny buffs each colored tennis ball had, down with the powergame!
- - Added polychromic fluff icons, vendor icons, suit icons, snack icons, fancy box icons, and a polychromic version of Izzy's ball.
- - Deleted old balls, Izzy's Ball, except the rainbow one since it's special and as I did not go out of my way to get permission to touch.
- - Walked into vending.dm and glared for a moment at hydroponics' grammar.
-
- LetterN updated:
-
- - fixed laptops pickability
- - fixed closets being unweldable
-
- YakumoChen updated:
-
- - Genetics - Thermal vision is a recipe instead of a natural gene now. Nearsighted+Stimmed. Other minor nerfs, Thermal is 40 instability.
- - Research - X-ray eyes are now an illegal tech.
-
- qweq12yt updated:
-
- - added the black market uplink
- - added blackmarket.dmi
- - increased the black market interface's width, now the delivery options will show properly when the LTSRBT is built
-
- zeroisthebiggay updated:
-
- - biodegrade works on legcuffs
-
-
- 23 March 2021
- LetterN updated:
-
- - NIRM departamental purchases now work. Have fun spending the entire R&D Budget!
-
-
- 21 March 2021
- Arturlang updated:
-
- - Vampire statpanel no longer shows spans unnecesary
-
- GrayRachnid updated:
-
- - fixed the holopad autocall bug
- - properly incorporated the secure holopad that was commented out in the code.
- - the in_character_filter.txt is now usable
- - headmins should edit the in_character_filter.txt
- - someone with box access should delete racism with the in_character_filter.txt
- - buffed particle defender disabler shots from 13->15 stamina (15*6=90)
- - buffed particle defender laser ammo to 4 shots
-
- Hatterhat updated:
-
- - removes pacifism from ghost cafe. have fun beating up your coworkers
-
- LetterN updated:
-
- - Art gallery (meta)
- - Laptop vendor (meta, delta, box)
-
- Putnam3145 updated:
-
- - Buffed supermatter surge massively.
-
- The-Sun-In-Splendour updated:
-
- - You cannot revive yourself (as a changeling) if you've been absorbed anymore
-
- dzahlus updated:
-
- - rebalanced hierophant STAFF to do 15 damage on all attacks
-
- timothyteakettle updated:
-
- - using the puddle ability when stunned wont break it
-
-
- 20 March 2021
- Hatterhat updated:
-
- - Bluespace beaker filling icons for that narrow band between 90 and 80% full now actually exist.
-
GoonStation 13 Development Team
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 135e6db518..475730286e 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -29332,3 +29332,35 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
2021-05-21:
Putnam3145:
- bugfix: Fixed activity being attached to minds instead of mobs on antag attach.
+2021-05-23:
+ Putnam3145:
+ - bugfix: Antag and species no longer remove all traits if one has a blacklisted
+ trait
+ WanderingFox95:
+ - imageadd: Replaced the antlers showing up when you select deer ears with actual
+ deer ears. Literally why was that even a thing before?
+ - imageadd: Straight rabbit ears are now a thing.
+ keronshb:
+ - balance: 30 > 25 pop req for contractor kit
+ - code_imp: adds a special hud for simple mobs.
+ - imageadd: a lot of >32x32 mobs now have icons for their health dolls
+2021-05-24:
+ zeroisthebiggay:
+ - rscadd: 'New traitor item: the Mauler Gauntlets! Punch hard, punch good! Eight
+ telecrystals, buy today!'
+ - rscadd: hairs from Airborne Snitch
+2021-05-26:
+ bunny232:
+ - bugfix: Removed two random 'captain's office' tiles from space on meta station
+2021-05-29:
+ Kraseo:
+ - bugfix: No more slamming into people while bloodcrawled.
+ Linzolle:
+ - bugfix: brand intelligence event works again
+ keronshb:
+ - rscadd: swag outfit available in clothesmate
+ - rscadd: 'swag shoes availble in clothesmate resprite: changed swag shoes icon
+ to the one twaticus made.'
+ - rscadd: Adds the clown mob spawner for admins
+ zeroisthebiggay:
+ - balance: puglism damage can no longer stack with scarp
diff --git a/icons/effects/camera_image_base.dmi b/icons/effects/camera_image_base.dmi
new file mode 100644
index 0000000000..4f5867e07e
Binary files /dev/null and b/icons/effects/camera_image_base.dmi differ
diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi
index 5712f05165..de50a0d9dc 100644
Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ
diff --git a/icons/mob/clothing/feet_digi.dmi b/icons/mob/clothing/feet_digi.dmi
index 5b4d733879..1cc1e801c7 100644
Binary files a/icons/mob/clothing/feet_digi.dmi and b/icons/mob/clothing/feet_digi.dmi differ
diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi
index 406b0fe62a..5155f06134 100644
Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ
diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi
index f2611b3ab7..6c29fdfa75 100644
Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ
diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi
index 98ec436b86..a957b60a9b 100644
Binary files a/icons/mob/clothing/uniform_digi.dmi and b/icons/mob/clothing/uniform_digi.dmi differ
diff --git a/icons/mob/hair.dmi b/icons/mob/hair.dmi
index 7322b2cfaf..55c79b9740 100644
Binary files a/icons/mob/hair.dmi and b/icons/mob/hair.dmi differ
diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi
index 95aaf330ce..4377a0d7c6 100644
Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index 629b989520..25cde38df9 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index d277ebf970..cb2391b5ba 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 6171e032dd..22464b3def 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index 0c59c3e711..39ed9d6ec8 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -550,7 +550,7 @@
ckeywhitelist = list("sneka")
/datum/gear/donator/smaiden
- name = "Shrine Maiden"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/smaiden
+ name = "shrine maiden outfit"
+ slot = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/smaiden
ckeywhitelist = list("ultimarifox")
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index 89734106cf..b7d04e0780 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -602,8 +602,8 @@
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "mmask"
-/obj/item/clothing/suit/smaiden
- name = "shrine maiden"
+/obj/item/clothing/under/smaiden
+ name = "shrine maiden outfit"
desc = "Seems questionably tight for religious purposes."
icon_state = "smaiden"
item_state = "smaiden"
diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi
index a8209f25c5..e615b7f7ee 100644
Binary files a/modular_citadel/icons/mob/mam_ears.dmi and b/modular_citadel/icons/mob/mam_ears.dmi differ
diff --git a/sound/weapons/mauler_punch.ogg b/sound/weapons/mauler_punch.ogg
new file mode 100644
index 0000000000..3e610ea238
Binary files /dev/null and b/sound/weapons/mauler_punch.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 8b996f3801..73037c20ee 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -272,6 +272,7 @@
#include "code\_onclick\hud\revenanthud.dm"
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\screen_objects.dm"
+#include "code\_onclick\hud\simple_animal.dm"
#include "code\_onclick\hud\swarmer.dm"
#include "code\_onclick\hud\screen_objects\clickdelay.dm"
#include "code\_onclick\hud\screen_objects\sprint.dm"