diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm
index bbcb44f91754..250eba9a0d51 100644
--- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm
+++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm
@@ -35,6 +35,11 @@
icon_file = 'icons/mob/simple/garden_gnome.dmi'
json_config = 'code/datums/greyscale/json_configs/garden_gnome.json'
+/datum/greyscale_config/pony
+ name = "Pony"
+ icon_file = 'icons/mob/simple/animal.dmi'
+ json_config = 'code/datums/greyscale/json_configs/pony.json'
+
/datum/greyscale_config/gutlunch
name = "Gutlunch"
icon_file = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
diff --git a/code/datums/greyscale/json_configs/pony.json b/code/datums/greyscale/json_configs/pony.json
new file mode 100644
index 000000000000..a08437c7cb66
--- /dev/null
+++ b/code/datums/greyscale/json_configs/pony.json
@@ -0,0 +1,30 @@
+{
+ "pony": [
+ {
+ "type": "icon_state",
+ "icon_state": "pony",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pony_hair",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ],
+ "pony_dead": [
+ {
+ "type": "icon_state",
+ "icon_state": "pony_dead",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pony_hair_dead",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+}
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 54b071b2fb68..1cf3733fb5a1 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -146,3 +146,7 @@
/obj/item/sbeacondrop/clownbomb
desc = "A label on it reads: Warning: Activating this device will send a silly explosive to your location."
droptype = /obj/machinery/syndicatebomb/badmin/clown
+
+/obj/item/sbeacondrop/horse
+ desc = "A label on it reads: Warning: Activating this device will send a live horse to your location."
+ droptype = /mob/living/basic/pony/syndicate
diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm
index 3c8fdb54e80c..2b903ade5b56 100644
--- a/code/game/objects/items/storage/holsters.dm
+++ b/code/game/objects/items/storage/holsters.dm
@@ -229,3 +229,18 @@
/obj/item/ammo_casing, // For shotgun shells, rockets, launcher grenades, and a few other things.
/obj/item/grenade, // All regular grenades, the big grenade launcher fires these.
))
+
+
+/obj/item/storage/belt/holster/nukie/cowboy
+ desc = "A deep shoulder holster capable of holding almost any form of small firearm and its ammo. This one's specialized for handguns."
+
+/obj/item/storage/belt/holster/nukie/cowboy/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 3
+ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
+
+/obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/gun/ballistic/revolver/syndicate/cowboy = 1,
+ /obj/item/ammo_box/a357 = 2,
+ ), src)
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 3e98ae8a2429..869b4c659fd6 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -762,6 +762,21 @@
for(var/i in 1 to poster_count)
new /obj/item/poster/traitor(src)
+/obj/item/storage/box/syndie_kit/cowboy
+ name = "western outlaw pack"
+ desc = "Contains everything you'll need to be the rootin' tootin' cowboy you always wanted. Either play the Lone Ranger or go in with your posse of outlaws."
+
+/obj/item/storage/box/syndie_kit/cowboy/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/clothing/shoes/cowboy/black/syndicate= 1,
+ /obj/item/clothing/head/cowboy/black/syndicate = 1,
+ /obj/item/storage/belt/holster/nukie/cowboy/full = 1,
+ /obj/item/clothing/under/costume/dutch/syndicate = 1,
+ /obj/item/lighter/skull = 1,
+ /obj/item/sbeacondrop/horse = 1,
+ /obj/item/food/grown/apple = 1,
+ ), src)
+
#undef KIT_RECON
#undef KIT_BLOODY_SPAI
#undef KIT_STEALTHY
diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm
index 408723b2d888..d2363e3bd163 100644
--- a/code/modules/clothing/head/hat.dm
+++ b/code/modules/clothing/head/hat.dm
@@ -135,6 +135,10 @@
worn_icon_state = "cowboy_hat_black"
inhand_icon_state = "cowboy_hat_black"
+/// More likely to intercept bullets, since you're likely to not be wearing your modsuit with this on
+/obj/item/clothing/head/cowboy/black/syndicate
+ deflect_chance = 25
+
/obj/item/clothing/head/cowboy/white
name = "ten-gallon hat"
desc = "There are two kinds of people in the world: those with guns and those that dig. You dig?"
diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm
index 65c23d7a5d09..7df624631774 100644
--- a/code/modules/clothing/shoes/cowboy.dm
+++ b/code/modules/clothing/shoes/cowboy.dm
@@ -97,3 +97,9 @@
name = "\improper Hugs-The-Feet lizard skin boots"
desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants."
icon_state = "lizardboots_blue"
+
+/// Shoes for the nuke-ops cowboy fit
+/obj/item/clothing/shoes/cowboy/black/syndicate
+ name = "black spurred cowboy boots"
+ desc = "And they sing, oh, ain't you glad you're single? And that song ain't so very far from wrong."
+ armor_type = /datum/armor/shoes_combat
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index 5e54cd640a11..9c4dabb6926b 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -342,6 +342,11 @@
inhand_icon_state = null
can_adjust = FALSE
+// For the nuke-ops cowboy fit.
+/obj/item/clothing/under/costume/dutch/syndicate
+ desc = "You can feel a god damn plan coming on, and the armor lining in this suit'll do wonders in makin' it work."
+ armor_type = /datum/armor/clothing_under/syndicate
+
/obj/item/clothing/under/costume/osi
name = "O.S.I. jumpsuit"
icon_state = "osi_jumpsuit"
diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm
index 4c200de45c1d..ca5306c2a48d 100644
--- a/code/modules/mob/living/basic/farm_animals/pony.dm
+++ b/code/modules/mob/living/basic/farm_animals/pony.dm
@@ -24,15 +24,24 @@
gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
ai_controller = /datum/ai_controller/basic_controller/pony
+ /// Do we register a unique rider?
+ var/unique_tamer = FALSE
+ /// The person we've been tamed by
+ var/datum/weakref/my_owner
+
+ greyscale_config = /datum/greyscale_config/pony
+ /// Greyscale color config; 1st color is body, 2nd is mane
+ var/list/ponycolors = list("#cc8c5d", "#cc8c5d")
/mob/living/basic/pony/Initialize(mapload)
. = ..()
+ apply_colour()
AddElement(/datum/element/pet_bonus, "whickers.")
AddElement(/datum/element/ai_retaliate)
AddElement(/datum/element/ai_flee_while_injured)
AddElement(/datum/element/waddling)
- AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 25, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)))
+ AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 25, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)), unique = unique_tamer)
/mob/living/basic/pony/proc/tamed(mob/living/tamer)
can_buckle = TRUE
@@ -40,6 +49,7 @@
playsound(src, 'sound/creatures/pony/snort.ogg', 50)
AddElement(/datum/element/ridable, /datum/component/riding/creature/pony)
visible_message(span_notice("[src] snorts happily."))
+ new /obj/effect/temp_visual/heart(loc)
ai_controller.replace_planning_subtrees(list(
/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
@@ -47,6 +57,30 @@
/datum/ai_planning_subtree/random_speech/pony/tamed
))
+ if(unique_tamer)
+ my_owner = WEAKREF(tamer)
+ RegisterSignal(src, COMSIG_MOVABLE_PREBUCKLE, PROC_REF(on_prebuckle))
+
+/mob/living/basic/pony/Destroy()
+ UnregisterSignal(src, COMSIG_MOVABLE_PREBUCKLE)
+ my_owner = null
+ return ..()
+
+/// Only let us get ridden if the buckler is our owner, if we have a unique owner.
+/mob/living/basic/pony/proc/on_prebuckle(mob/source, mob/living/buckler, force, buckle_mob_flags)
+ SIGNAL_HANDLER
+ var/mob/living/tamer = my_owner?.resolve()
+ if(!unique_tamer || (isnull(tamer) && unique_tamer))
+ return
+ if(buckler != tamer)
+ whinny_angrily()
+ return COMPONENT_BLOCK_BUCKLE
+
+/mob/living/basic/pony/proc/apply_colour()
+ if(!greyscale_config)
+ return
+ set_greyscale(colors = ponycolors)
+
/mob/living/basic/pony/proc/whinny_angrily()
manual_emote("whinnies ANGRILY!")
@@ -86,3 +120,35 @@
/datum/ai_planning_subtree/basic_melee_attack_subtree,
/datum/ai_planning_subtree/random_speech/pony
)
+
+// A stronger horse is required for our strongest cowboys.
+/mob/living/basic/pony/syndicate
+ health = 300
+ maxHealth = 300
+ desc = "A special breed of horse engineered by the syndicate to be capable of surviving in the deep reaches of space. A modern outlaw's best friend."
+ faction = list(ROLE_SYNDICATE)
+ ponycolors = list("#5d566f", COLOR_RED)
+ pressure_resistance = 200
+ habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
+ bodytemp_cold_damage_limit = -1
+ bodytemp_heat_damage_limit = 1500
+ unique_tamer = TRUE
+
+/mob/living/basic/pony/syndicate/Initialize(mapload)
+ . = ..()
+ // Help discern your horse from your allies
+ var/mane_colors = list(
+ COLOR_RED=6,
+ COLOR_BLUE=6,
+ COLOR_PINK=3,
+ COLOR_GREEN=3,
+ COLOR_BLACK=3,
+ COLOR_YELLOW=2,
+ COLOR_ORANGE=1,
+ COLOR_WHITE=1,
+ COLOR_DARK_BROWN=1,
+ )
+ ponycolors = list("#5d566f", pick_weight(mane_colors))
+ name = pick("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
+ // Only one person can tame these fellas, and they only need one apple
+ AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 100, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)), unique = unique_tamer)
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 7afb1ab9c49a..d7777ff0b13a 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -136,6 +136,11 @@
desc = "A modernized 7 round revolver manufactured by Waffle Co. Uses .357 ammo."
icon_state = "revolversyndie"
+/obj/item/gun/ballistic/revolver/syndicate/cowboy
+ desc = "A classic revolver, refurbished for modern use. Uses .357 ammo."
+ //There's already a cowboy sprite in there!
+ icon_state = "lucky"
+
/obj/item/gun/ballistic/revolver/mateba
name = "\improper Unica 6 auto-revolver"
desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo."
diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm
index 777ebca1b0b4..86492961450a 100644
--- a/code/modules/uplink/uplink_items/nukeops.dm
+++ b/code/modules/uplink/uplink_items/nukeops.dm
@@ -42,6 +42,16 @@
cost = 10
purchasable_from = UPLINK_NUKE_OPS
+/datum/uplink_item/bundles_tc/cowboy
+ name = "Syndicate Outlaw Kit"
+ desc = "There've been high tales of an outlaw 'round these parts. A fella so ruthless and efficient no ranger could ever capture 'em. \
+ Now you can be just like 'em! \
+ This kit contains armor-lined cowboy equipment, a custom revolver and holster, and a horse with a complimentary apple to tame. \
+ A lighter is also included, though you must supply your own smokes."
+ item = /obj/item/storage/box/syndie_kit/cowboy
+ cost = 18
+ purchasable_from = UPLINK_NUKE_OPS
+
/datum/uplink_item/dangerous/rawketlawnchair
name = "84mm Rocket Propelled Grenade Launcher"
desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \
diff --git a/code/modules/uplink/uplink_items/stealthy_tools.dm b/code/modules/uplink/uplink_items/stealthy_tools.dm
index 6cc5a12bd979..c7ff577d542e 100644
--- a/code/modules/uplink/uplink_items/stealthy_tools.dm
+++ b/code/modules/uplink/uplink_items/stealthy_tools.dm
@@ -24,6 +24,8 @@
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
cost = 1
+//MONKESTATION REMOVAL START moved to monkestation/code/modules/uplink/uplink_items/stealthy_tools.dm
+/*
/datum/uplink_item/stealthy_tools/chameleon
name = "Chameleon Kit"
desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \
@@ -31,6 +33,8 @@
item = /obj/item/storage/box/syndie_kit/chameleon
cost = 2
purchasable_from = ~UPLINK_NUKE_OPS //clown ops are allowed to buy this kit, since it's basically a costume
+*/
+//MONKESTATION REMOVAL END
/datum/uplink_item/stealthy_tools/syndigaloshes
name = "No-Slip Chameleon Shoes"
diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi
index 3de6e06a2484..1bc0150fb8a6 100644
Binary files a/icons/mob/simple/animal.dmi and b/icons/mob/simple/animal.dmi differ
diff --git a/monkestation/code/modules/clothing/suits/costume.dm b/monkestation/code/modules/clothing/suits/costume.dm
index 42d207e144fd..6506c6c9f18d 100644
--- a/monkestation/code/modules/clothing/suits/costume.dm
+++ b/monkestation/code/modules/clothing/suits/costume.dm
@@ -166,6 +166,20 @@
. = ..()
AddComponent(/datum/component/armor_plate)
+/obj/item/clothing/suit/chameleon/syndie_armor
+ name = "syndicate body armor"
+ desc = "A set of red and black body armor. Lightweight but great protection."
+ icon = 'monkestation/icons/obj/clothing/suits.dmi'
+ worn_icon = 'monkestation/icons/mob/clothing/suit.dmi'
+ icon_state = "armor_syndie"
+ armor_type = /datum/armor/mod_theme_infiltrator
+ body_parts_covered = CHEST|GROIN
+
+/obj/item/clothing/suit/chameleon/syndie_armor/Initialize(mapload)
+ . = ..()
+
+ create_storage(storage_type = /datum/storage/pockets)
+
/obj/item/clothing/suit/infinity_jacket
name = "infinity jersey"
desc = "A jersey labelled '88', somehow leaving a threatening aura around it."
diff --git a/monkestation/code/modules/uplink/uplink_items/stealthy_tools.dm b/monkestation/code/modules/uplink/uplink_items/stealthy_tools.dm
new file mode 100644
index 000000000000..70b20258e604
--- /dev/null
+++ b/monkestation/code/modules/uplink/uplink_items/stealthy_tools.dm
@@ -0,0 +1,8 @@
+/datum/uplink_item/stealthy_tools/chameleon
+ name = "Chameleon Kit"
+ desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \
+ Due to budget cuts, the shoes don't provide protection against slipping and skillchips are sold separately. \
+ The chameleon technology can be locked and unlocked using a multitool, hiding it from others."
+ item = /obj/item/storage/box/syndie_kit/chameleon
+ cost = 2
+ purchasable_from = ~UPLINK_NUKE_OPS //clown ops are allowed to buy this kit, since it's basically a costume
diff --git a/monkestation/code/modules/uplink/uplink_items/suits.dm b/monkestation/code/modules/uplink/uplink_items/suits.dm
index 32331ac90496..999c82c6e0b0 100644
--- a/monkestation/code/modules/uplink/uplink_items/suits.dm
+++ b/monkestation/code/modules/uplink/uplink_items/suits.dm
@@ -1 +1,7 @@
-// Never again.
+/datum/uplink_item/suits/syndie_armor
+ name = "Syndicate Body armor"
+ desc = "A highly compact set of body armor with two inner slots for small items.\
+ It comes with chameleon features."
+ item = /obj/item/clothing/suit/chameleon/syndie_armor
+ cost = 4
+ purchasable_from = ALL
diff --git a/monkestation/icons/mob/clothing/suit.dmi b/monkestation/icons/mob/clothing/suit.dmi
index 2cde5c4b4c8e..87eecacac872 100644
Binary files a/monkestation/icons/mob/clothing/suit.dmi and b/monkestation/icons/mob/clothing/suit.dmi differ
diff --git a/monkestation/icons/obj/clothing/suits.dmi b/monkestation/icons/obj/clothing/suits.dmi
index 38449150fcb3..1df346b4f296 100644
Binary files a/monkestation/icons/obj/clothing/suits.dmi and b/monkestation/icons/obj/clothing/suits.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 76c205d0bc6f..453bd5b43e14 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -8041,6 +8041,7 @@
#include "monkestation\code\modules\uplink\uplink_items\misc.dm"
#include "monkestation\code\modules\uplink\uplink_items\nukeops.dm"
#include "monkestation\code\modules\uplink\uplink_items\species.dm"
+#include "monkestation\code\modules\uplink\uplink_items\stealthy_tools.dm"
#include "monkestation\code\modules\uplink\uplink_items\suits.dm"
#include "monkestation\code\modules\uplink\uplink_items\weapons.dm"
#include "monkestation\code\modules\vehicles\monkey_ball.dm"