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"