[MIRROR] Geared Assistants Station Trait [MDB IGNORE] (#25928)

* Geared Assistants Station Trait

* merge conflicts fixes

* hmmm

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
This commit is contained in:
SkyratBot
2024-01-07 19:59:15 +00:00
committed by GitHub
co-authored by Time-Green Pinta Gandalf
parent bd44b242a6
commit 348fbc951a
11 changed files with 356 additions and 105 deletions
+1
View File
@@ -889,6 +889,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_BLOB_ALLY "blob_ally"
///Traits given by station traits
#define STATION_TRAIT_ASSISTANT_GIMMICKS "station_trait_assistant_gimmicks"
#define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments"
#define STATION_TRAIT_BIGGER_PODS "station_trait_bigger_pods"
#define STATION_TRAIT_BIRTHDAY "station_trait_birthday"
+1
View File
@@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
),
// AKA SSstation
/datum/controller/subsystem/processing/station = list(
"STATION_TRAIT_ASSISTANT_GIMMICKS" = STATION_TRAIT_ASSISTANT_GIMMICKS,
"STATION_TRAIT_BANANIUM_SHIPMENTS" = STATION_TRAIT_BANANIUM_SHIPMENTS,
"STATION_TRAIT_BIGGER_PODS" = STATION_TRAIT_BIGGER_PODS,
"STATION_TRAIT_BIRTHDAY" = STATION_TRAIT_BIRTHDAY,
@@ -140,6 +140,7 @@
show_in_report = TRUE
cost = STATION_TRAIT_COST_MINIMAL
report_message = "Due to a shortage in standard issue jumpsuits, we have provided your assistants with one of our backup supplies."
blacklist = list(/datum/station_trait/assistant_gimmicks)
/datum/station_trait/colored_assistants/New()
. = ..()
@@ -351,5 +351,15 @@
trim_state = "trim_stationengineer"
department_color = COLOR_ASSISTANT_GRAY
/// Spawns assistants with some gear, either gimmicky or functional. Maybe, one day, it will inspire an assistant to do something productive or fun
/datum/station_trait/assistant_gimmicks
name = "Geared Assistants Pilot"
report_message = "The Nanotrassen Assistant Affairs division is performing a pilot to see if different assistant equipments help improve productivity!"
trait_type = STATION_TRAIT_POSITIVE
weight = 3
trait_to_give = STATION_TRAIT_ASSISTANT_GIMMICKS
show_in_report = TRUE
blacklist = list(/datum/station_trait/colored_assistants)
#undef PARTY_COOLDOWN_LENGTH_MIN
#undef PARTY_COOLDOWN_LENGTH_MAX
+10
View File
@@ -155,6 +155,16 @@
. = ..()
atom_storage.set_holdable(list(/obj/item/food/egg))
/*
* Fertile Egg Box
*/
/obj/item/storage/fancy/egg_box/fertile
name = "fertile egg box"
desc = "Only one thing here is fertile, and it's not the eggs."
spawn_type = /obj/item/food/egg/fertile
spawn_count = 6
/*
* Candle Box
*/
+12 -1
View File
@@ -56,6 +56,12 @@
var/discount_pct_off = 0.05
var/obj/machinery/computer/cargo/inserted_console
/obj/item/coupon/Initialize(mapload)
. = ..()
if(discounted_pack)
update_name()
/// Choose what our prize is :D
/obj/item/coupon/proc/generate(discount, datum/supply_pack/discounted_pack)
src.discounted_pack = discounted_pack || pick(GLOB.discountable_packs[pick_weight(GLOB.pack_discount_odds)])
@@ -65,11 +71,12 @@
if(discount_pct_off != COUPON_OMEN)
if(!discount) // the discount arg should be a number already, while the keys in the chances list cannot be numbers
discount_pct_off = text2num(discount_pct_off)
name = "coupon - [round(discount_pct_off * 100)]% off [initial(src.discounted_pack.name)]"
update_name()
return
name = "coupon - fuck you"
desc = "The small text reads, 'You will be slaughtered'... That doesn't sound right, does it?"
if(!ismob(loc))
return FALSE
@@ -83,6 +90,10 @@
to_chat(cursed, span_warning("What a horrible night... To have a curse!"))
addtimer(CALLBACK(src, PROC_REF(curse_heart), cursed), 5 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE)
/obj/item/coupon/update_name()
name = "coupon - [round(discount_pct_off * 100)]% off [initial(discounted_pack.name)]"
return ..()
/// Play stupid games, win stupid prizes
/obj/item/coupon/proc/curse_heart(mob/living/cursed)
if(!iscarbon(cursed))
+7 -3
View File
@@ -178,6 +178,10 @@
for(var/i in roundstart_experience)
spawned_human.mind.adjust_experience(i, roundstart_experience[i], TRUE)
/// Return the outfit to use
/datum/job/proc/get_outfit()
return outfit
/// Announce that this job as joined the round to all crew members.
/// Note the joining mob has no client at this point.
/datum/job/proc/announce_job(mob/living/joining_mob, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_job(mob/living/joining_mob)
@@ -220,10 +224,10 @@
/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //SKYRAT EDIT CHANGE
dna.species.pre_equip_species_outfit(equipping, src, visual_only)
equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) //SKYRAT EDIT CHANGE
equip_outfit_and_loadout(equipping.get_outfit(), used_pref, visual_only, equipping) //SKYRAT EDIT CHANGE
/// tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
/datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels)
// Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
/datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES
if(H && GLOB.announcement_systems.len)
//timer because these should come after the captain announcement
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, job_title, channels), 1)) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1))
@@ -0,0 +1,101 @@
GLOBAL_DATUM(colored_assistant, /datum/colored_assistant)
/*
Assistant
*/
/datum/job/assistant
title = JOB_ASSISTANT
description = "Get your space legs, assist people, ask the HoP to give you a job."
faction = FACTION_STATION
total_positions = 5
spawn_positions = 5
supervisors = "absolutely everyone"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/assistant
plasmaman_outfit = /datum/outfit/plasmaman
paycheck = PAYCHECK_LOWER // Get a job. Job reassignment changes your paycheck now. Get over it.
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_ASSISTANT
liver_traits = list(TRAIT_MAINTENANCE_METABOLISM)
department_for_prefs = /datum/job_department/assistant
family_heirlooms = list(/obj/item/storage/toolbox/mechanical/old/heirloom, /obj/item/clothing/gloves/cut/heirloom)
mail_goodies = list(
/obj/effect/spawner/random/food_or_drink/donkpockets = 10,
/obj/item/clothing/mask/gas = 10,
/obj/item/clothing/gloves/color/fyellow = 7,
/obj/item/choice_beacon/music = 5,
/obj/item/toy/sprayoncan = 3,
/obj/item/crowbar/large = 1
)
job_flags = STATION_JOB_FLAGS
rpg_title = "Lout"
config_tag = "ASSISTANT"
/datum/job/assistant/get_outfit()
if(!HAS_TRAIT(SSstation, STATION_TRAIT_ASSISTANT_GIMMICKS))
return ..()
var/static/list/gimmicks = list()
if(!length(gimmicks))
for(var/datum/outfit/job/assistant/gimmick/gimmick_outfit as anything in subtypesof(/datum/outfit/job/assistant/gimmick))
gimmicks[gimmick_outfit] = gimmick_outfit::outfit_weight
return pick_weight(gimmicks)
/datum/outfit/job/assistant
name = JOB_ASSISTANT
jobtype = /datum/job/assistant
id_trim = /datum/id_trim/job/assistant
belt = /obj/item/modular_computer/pda/assistant
/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target)
..()
for(var/holidayname in GLOB.holidays)
var/datum/holiday/holiday_today = GLOB.holidays[holidayname]
var/obj/item/special_hat = holiday_today.holiday_hat
if(prob(HOLIDAY_HAT_CHANCE) && !isnull(special_hat) && isnull(head))
head = special_hat
give_jumpsuit(target)
/datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target)
var/static/jumpsuit_number = 0
jumpsuit_number += 1
if (isnull(GLOB.colored_assistant))
var/configured_type = get_configured_colored_assistant_type()
GLOB.colored_assistant = new configured_type
var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1
// SKYRAT EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item)
if(modified_outfit_slots & ITEM_SLOT_ICLOTHING)
return
// SKYRAT EDIT END
//We don't cache these, because they can delete on init
//Too fragile, better to just eat the cost
if (target.jumpsuit_style == PREF_SUIT)
uniform = GLOB.colored_assistant.jumpsuits[index]
else
uniform = GLOB.colored_assistant.jumpskirts[index]
/datum/outfit/job/assistant/consistent
name = "Assistant - Consistent"
/datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target)
uniform = /obj/item/clothing/under/color/grey
/datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visualsOnly)
..()
// This outfit is used by the assets SS, which is ran before the atoms SS
if (SSatoms.initialized == INITIALIZATION_INSSATOMS)
H.w_uniform?.update_greyscale()
H.update_worn_undersuit()
@@ -1,103 +1,3 @@
GLOBAL_DATUM(colored_assistant, /datum/colored_assistant)
/*
Assistant
*/
/datum/job/assistant
title = JOB_ASSISTANT
description = "Get your space legs, assist people, ask the HoP to give you a job."
faction = FACTION_STATION
total_positions = 5
spawn_positions = 5
supervisors = "absolutely everyone"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/assistant
plasmaman_outfit = /datum/outfit/plasmaman
paycheck = PAYCHECK_LOWER // Get a job. Job reassignment changes your paycheck now. Get over it.
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_ASSISTANT
liver_traits = list(TRAIT_MAINTENANCE_METABOLISM)
department_for_prefs = /datum/job_department/assistant
family_heirlooms = list(/obj/item/storage/toolbox/mechanical/old/heirloom, /obj/item/clothing/gloves/cut/heirloom)
mail_goodies = list(
/obj/effect/spawner/random/food_or_drink/donkpockets = 10,
/obj/item/clothing/mask/gas = 10,
/obj/item/clothing/gloves/color/fyellow = 7,
/obj/item/choice_beacon/music = 5,
/obj/item/toy/sprayoncan = 3,
/obj/item/crowbar/large = 1
)
job_flags = STATION_JOB_FLAGS
rpg_title = "Lout"
config_tag = "ASSISTANT"
allow_bureaucratic_error = FALSE // SKYRAT EDIT ADDITION
/datum/outfit/job/assistant
name = JOB_ASSISTANT
jobtype = /datum/job/assistant
id_trim = /datum/id_trim/job/assistant
uniform = /obj/item/clothing/under/color/random // SKYRAT EDIT ADD
belt = /obj/item/modular_computer/pda/assistant
/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target)
..()
give_hat()
give_jumpsuit(target)
/datum/outfit/job/assistant/proc/give_hat()
for(var/holidayname in GLOB.holidays)
var/datum/holiday/holiday_today = GLOB.holidays[holidayname]
var/obj/item/special_hat = holiday_today.holiday_hat
if(prob(HOLIDAY_HAT_CHANCE) && !isnull(special_hat) && isnull(head))
head = special_hat
/datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target)
var/static/jumpsuit_number = 0
jumpsuit_number += 1
if (isnull(GLOB.colored_assistant))
var/configured_type = get_configured_colored_assistant_type()
GLOB.colored_assistant = new configured_type
var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1
// SKYRAT EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item)
if(modified_outfit_slots & ITEM_SLOT_ICLOTHING)
return
// SKYRAT EDIT END
//We don't cache these, because they can delete on init
//Too fragile, better to just eat the cost
if (target.jumpsuit_style == PREF_SUIT)
uniform = GLOB.colored_assistant.jumpsuits[index]
else
uniform = GLOB.colored_assistant.jumpskirts[index]
/datum/outfit/job/assistant/consistent
name = "Assistant - Consistent"
/datum/outfit/job/assistant/consistent/give_hat()
return
/datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target)
uniform = /obj/item/clothing/under/color/grey
/datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visualsOnly)
..()
// This outfit is used by the assets SS, which is ran before the atoms SS
if (SSatoms.initialized == INITIALIZATION_INSSATOMS)
H.w_uniform?.update_greyscale()
H.update_worn_undersuit()
/proc/get_configured_colored_assistant_type()
return CONFIG_GET(flag/grey_assistants) ? /datum/colored_assistant/grey : /datum/colored_assistant/random
@@ -0,0 +1,210 @@
// This file contains the louadouts for the assistant gimmicks station trait! When active, gives assistants random stupid gear
/// Parent type of gimmick loadouts for assistants for the functional assistant station traits
/datum/outfit/job/assistant/gimmick
name = "Gimmick Assistant"
/// The weight of the outfit to be picked
var/outfit_weight = 0
/datum/outfit/job/assistant/gimmick/give_jumpsuit(mob/living/carbon/human/target)
return //dont do colorized and stuff, it messes with our uniforms
/datum/outfit/job/assistant/gimmick/bee
name = "Gimmick Assistant - Bee"
suit = /obj/item/clothing/suit/hooded/bee_costume
uniform = /obj/item/clothing/under/color/yellow
l_pocket = /obj/item/coupon/bee
outfit_weight = 2
/obj/item/coupon/bee
desc = "BEEEES???? AT AN AFFORDAbLE PORICE?!!!" //wordcoders seething
discounted_pack = /datum/supply_pack/organic/hydroponics/beekeeping_fullkit
discount_pct_off = 0.7
/datum/outfit/job/assistant/gimmick/chicken
name = "Gimmick Assistant - Chicken"
suit = /obj/item/clothing/suit/costume/chickensuit
head = /obj/item/clothing/head/costume/chicken
l_hand = /obj/item/storage/fancy/egg_box/fertile
outfit_weight = 2
/datum/outfit/job/assistant/gimmick/cyborg
name = "Gimmick Assistant - Cardborg"
suit = /obj/item/clothing/suit/costume/cardborg
head = /obj/item/clothing/head/costume/cardborg
uniform = /obj/item/clothing/under/color/black
r_hand = /obj/item/weldingtool/largetank
l_hand = /obj/item/stack/cable_coil/five
uniform = /obj/item/clothing/under/color/black
outfit_weight = 2
/datum/outfit/job/assistant/gimmick/cyborg/post_equip(mob/living/carbon/human/equipped, visualsOnly)
. = ..()
var/obj/item/organ/internal/tongue/robot/robotongue = new ()
robotongue.Insert(equipped, movement_flags = DELETE_IF_REPLACED)
/datum/outfit/job/assistant/gimmick/skater
name = "Gimmick Assistant - Skater"
head = /obj/item/clothing/head/helmet/redtaghelm
suit = /obj/item/clothing/suit/redtag
l_hand = /obj/item/melee/skateboard
uniform = /obj/item/clothing/under/color/orange
outfit_weight = 6
/datum/outfit/job/assistant/gimmick/rollerskater
name = "Gimmick Assistant - Rollerskater"
head = /obj/item/clothing/head/helmet/bluetaghelm
suit = /obj/item/clothing/suit/bluetag
shoes = /obj/item/clothing/shoes/wheelys/rollerskates
uniform = /obj/item/clothing/under/color/darkblue
outfit_weight = 6
/datum/outfit/job/assistant/gimmick/fisher
name = "Gimmick Assistant - Fisher"
suit = /obj/item/clothing/suit/jacket/puffer/vest
uniform = /obj/item/clothing/under/color/blue
r_hand = /obj/item/storage/toolbox/fishing
outfit_weight = 3
/datum/outfit/job/assistant/gimmick/patient
name = "Gimmick Assistant - Patient"
suit = /obj/item/clothing/suit/apron/surgical
l_pocket = /obj/item/storage/pill_bottle/multiver
r_pocket = /obj/item/storage/pill_bottle/mutadone
uniform = /obj/item/clothing/under/color/white
outfit_weight = 3
/datum/outfit/job/assistant/gimmick/mopper
name = "Gimmick Assistant - Mopper"
suit = /obj/item/clothing/suit/caution
uniform = /obj/item/clothing/under/color/lightpurple
l_hand = /obj/item/mop
outfit_weight = 5
/datum/outfit/job/assistant/gimmick/mopper/post_equip(mob/living/carbon/human/equipped, visualsOnly)
. = ..()
for(var/turf/turf in range(1, equipped))
if(turf.is_blocked_turf())
continue
var/obj/structure/mop_bucket/bucket = new /obj/structure/mop_bucket(turf)
equipped.start_pulling(bucket)
/datum/outfit/job/assistant/gimmick/broomer
name = "Gimmick Assistant - Broomer"
suit = /obj/item/clothing/suit/caution
uniform = /obj/item/clothing/under/color/lightpurple
l_hand = /obj/item/pushbroom
r_hand = /obj/item/storage/bag/trash
outfit_weight = 5
/datum/outfit/job/assistant/gimmick/hall_monitor
name = "Gimmick Assistant - Hall Monitor"
head = /obj/item/clothing/head/collectable/police
mask = /obj/item/clothing/mask/whistle
uniform = /obj/item/clothing/under/color/red
//neck = /obj/item/camera SKYRAT EDIT REMOVAL
outfit_weight = 2
/datum/outfit/job/assistant/gimmick/monkey
name = "Gimmick Assistant - Monkey"
suit = /obj/item/clothing/suit/costume/monkeysuit
mask = /obj/item/clothing/mask/gas/monkeymask
l_pocket = /obj/item/food/monkeycube
r_pocket = /obj/item/food/monkeycube
outfit_weight = 1
/datum/outfit/job/assistant/gimmick/flesh
name = "Gimmick Assistant - Fleshy"
suit = /obj/item/clothing/suit/hooded/bloated_human
r_hand = /obj/item/toy/foamblade
outfit_weight = 1
/datum/outfit/job/assistant/gimmick/lightbringer
name = "Gimmick Assistant - Lightbringer"
uniform = /obj/item/clothing/under/color/yellow
head = /obj/item/clothing/head/costume/cueball
gloves = /obj/item/clothing/gloves/color/black
l_pocket = /obj/item/flashlight/lantern
r_pocket = /obj/item/lightreplacer
outfit_weight = 3
/datum/outfit/job/assistant/gimmick/handyman
name = "Gimmick Assistant - Handyman"
suit = /obj/item/clothing/suit/hazardvest
belt = /obj/item/storage/belt/utility/full
head = /obj/item/clothing/head/utility/hardhat
uniform = /obj/item/clothing/under/color/yellow
outfit_weight = 6
/datum/outfit/job/assistant/gimmick/magician
name = "Gimmick Assistant - Magician"
head = /obj/item/clothing/head/hats/tophat
uniform = /obj/item/clothing/under/color/lightpurple
l_hand = /obj/item/gun/magic/wand/nothing
outfit_weight = 2
/datum/outfit/job/assistant/gimmick/firefighter
name = "Gimmick Assistant - Firefighter"
head = /obj/item/clothing/head/utility/hardhat/red
suit = /obj/item/clothing/suit/hazardvest
uniform = /obj/item/clothing/under/color/red
l_pocket = /obj/item/stack/medical/ointment
r_pocket = /obj/item/extinguisher/mini
outfit_weight = 3
/datum/outfit/job/assistant/gimmick/gardener
name = "Gimmick Assistant - Gardener"
uniform = /obj/item/clothing/under/color/green
skillchips = list(/obj/item/skillchip/bonsai)
l_pocket = /obj/item/knife/plastic
l_hand = /obj/item/kirbyplants/random
outfit_weight = 3
/datum/outfit/job/assistant/gimmick/artist
name = "Gimmick Assistant - Artist"
uniform = /obj/item/clothing/under/color/rainbow
backpack_contents = list(/obj/item/storage/crayons)
outfit_weight = 3
+3 -1
View File
@@ -4226,7 +4226,6 @@
#include "code\modules\jobs\departments\departments.dm"
#include "code\modules\jobs\job_types\_job.dm"
#include "code\modules\jobs\job_types\ai.dm"
#include "code\modules\jobs\job_types\assistant.dm"
#include "code\modules\jobs\job_types\atmospheric_technician.dm"
#include "code\modules\jobs\job_types\bartender.dm"
#include "code\modules\jobs\job_types\botanist.dm"
@@ -4279,6 +4278,9 @@
#include "code\modules\jobs\job_types\antagonists\space_wizard.dm"
#include "code\modules\jobs\job_types\antagonists\wizard_apprentice.dm"
#include "code\modules\jobs\job_types\antagonists\xenomorph.dm"
#include "code\modules\jobs\job_types\assistant\assistant.dm"
#include "code\modules\jobs\job_types\assistant\colorful_assistants.dm"
#include "code\modules\jobs\job_types\assistant\gimmick_assistants.dm"
#include "code\modules\jobs\job_types\chaplain\chaplain.dm"
#include "code\modules\jobs\job_types\chaplain\chaplain_costumes.dm"
#include "code\modules\jobs\job_types\chaplain\chaplain_divine_archer.dm"