Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ports syndicate horses, and fixes space movement bug, adds syndicate body armor, clarification #3646

Merged
merged 14 commits into from
Oct 24, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
30 changes: 30 additions & 0 deletions code/datums/greyscale/json_configs/pony.json
Original file line number Diff line number Diff line change
@@ -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 ]
}
]
}
4 changes: 4 additions & 0 deletions code/game/machinery/syndicatebeacon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,7 @@
/obj/item/sbeacondrop/clownbomb
desc = "A label on it reads: <i>Warning: Activating this device will send a silly explosive to your location</i>."
droptype = /obj/machinery/syndicatebomb/badmin/clown

/obj/item/sbeacondrop/horse
desc = "A label on it reads: <i>Warning: Activating this device will send a live horse to your location.</i>"
droptype = /mob/living/basic/pony/syndicate
15 changes: 15 additions & 0 deletions code/game/objects/items/storage/holsters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
15 changes: 15 additions & 0 deletions code/game/objects/items/storage/uplink_kits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions code/modules/clothing/head/hat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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?"
Expand Down
6 changes: 6 additions & 0 deletions code/modules/clothing/shoes/cowboy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 5 additions & 0 deletions code/modules/clothing/under/costume.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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 <b>god damn plan</b> 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"
Expand Down
68 changes: 67 additions & 1 deletion code/modules/mob/living/basic/farm_animals/pony.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,63 @@
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
buckle_lying = 0
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,
/datum/ai_planning_subtree/flee_target,
/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!")

Expand Down Expand Up @@ -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)
5 changes: 5 additions & 0 deletions code/modules/projectiles/guns/ballistic/revolver.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
10 changes: 10 additions & 0 deletions code/modules/uplink/uplink_items/nukeops.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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. \
Expand Down
4 changes: 4 additions & 0 deletions code/modules/uplink/uplink_items/stealthy_tools.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,17 @@
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! \
Due to budget cuts, the shoes don't provide protection against slipping and skillchips are sold separately."
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"
Expand Down
Binary file modified icons/mob/simple/animal.dmi
Binary file not shown.
14 changes: 14 additions & 0 deletions monkestation/code/modules/clothing/suits/costume.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
Original file line number Diff line number Diff line change
@@ -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
8 changes: 7 additions & 1 deletion monkestation/code/modules/uplink/uplink_items/suits.dm
Original file line number Diff line number Diff line change
@@ -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
Binary file modified monkestation/icons/mob/clothing/suit.dmi
Binary file not shown.
Binary file modified monkestation/icons/obj/clothing/suits.dmi
Binary file not shown.
1 change: 1 addition & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -8018,6 +8018,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"
Expand Down
Loading