diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index b84d97b5a30..2a807aecd47 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -492,6 +492,7 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) // Play time / EXP #define PLAYTIME_HARDCORE_RANDOM 120 +#define PLAYTIME_VETERAN 300000 //Playtime is tracked in minutes. 300,000 minutes = 5,000 hours // The alpha we give to stuff under tiles, if they want it #define ALPHA_UNDERTILE 128 diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm index b593a2b418e..43b1213e17e 100644 --- a/code/datums/skills/_skill.dm +++ b/code/datums/skills/_skill.dm @@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(skill_types, subtypesof(/datum/skill)) if (!ispath(skill_cape_path)) to_chat(mind.current, "My legendary [name] skill is quite impressive, though it seems the Professional [title] Association doesn't have any status symbols to commemorate my abilities with. I should let Centcom know of this travesty, maybe they can do something about it.") return - if (LAZYFIND(mind.skills_rewarded, src.type)) + if (LAZYFIND(mind.skills_rewarded, src.type)) to_chat(mind.current, "It seems the Professional [title] Association won't send me another status symbol.") return var/obj/structure/closet/supplypod/bluespacepod/pod = new() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0fc17b34d27..2ab0efe3dd0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -111,6 +111,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) ///What scaling method should we use? Distort means nearest neighbor var/scaling_method = SCALING_METHOD_DISTORT var/uplink_spawn_loc = UPLINK_PDA + ///The playtime_reward_cloak variable can be set to TRUE from the prefs menu only once the user has gained over 5K playtime hours. If true, it allows the user to get a cool looking roundstart cloak. + var/playtime_reward_cloak = FALSE var/list/exp = list() var/list/menuoptions @@ -285,7 +287,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
Uplink Spawn Location:
[uplink_spawn_loc]
" - + if (user.client.get_exp_living(TRUE) >= PLAYTIME_VETERAN) + dat += "
Don The Ultimate Gamer Cloak?:
[(playtime_reward_cloak) ? "Enabled" : "Disabled"]
" var/use_skintones = pref_species.use_skintones if(use_skintones) @@ -1481,6 +1484,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_loc) uplink_spawn_loc = new_loc + if("playtime_reward_cloak") + if (user.client.get_exp_living(TRUE) >= PLAYTIME_VETERAN) + playtime_reward_cloak = !playtime_reward_cloak + if("ai_core_icon") var/ai_core_icon = input(user, "Choose your preferred AI core display screen:", "AI Core Display Screen Selection") as null|anything in GLOB.ai_core_display_screens if(ai_core_icon) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 0bb5d919a00..ce704e610f3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -353,6 +353,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["backpack"] >> backpack S["jumpsuit_style"] >> jumpsuit_style S["uplink_loc"] >> uplink_spawn_loc + S["playtime_reward_cloak"] >> playtime_reward_cloak S["phobia"] >> phobia S["randomise"] >> randomise S["feature_mcolor"] >> features["mcolor"] @@ -440,6 +441,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car backpack = sanitize_inlist(backpack, GLOB.backpacklist, initial(backpack)) jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) + playtime_reward_cloak = sanitize_integer(playtime_reward_cloak) features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) features["ethcolor"] = copytext_char(features["ethcolor"], 1, 7) features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) @@ -491,6 +493,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["backpack"] , backpack) WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style) WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) + WRITE_FILE(S["playtime_reward_cloak"] , playtime_reward_cloak) WRITE_FILE(S["randomise"] , randomise) WRITE_FILE(S["species"] , pref_species.id) WRITE_FILE(S["phobia"], phobia) diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 2e08f965b42..c55a7206013 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -98,17 +98,24 @@ . = ..() . += "You notice a powerful aura about this cloak, suggesting that only the truly experienced may wield it." -/obj/item/clothing/neck/cloak/skill_reward/equipped(mob/user, slot) - if (user.mind?.get_skill_level(associated_skill_path) < SKILL_LEVEL_LEGENDARY) - to_chat(user, "You feel completely and utterly unworthy to even touch \the [src].") +/obj/item/clothing/neck/cloak/skill_reward/proc/check_wearable(mob/user) + return user.mind?.get_skill_level(associated_skill_path) < SKILL_LEVEL_LEGENDARY + +/obj/item/clothing/neck/cloak/skill_reward/proc/unworthy_unequip(mob/user) + to_chat(user, "You feel completely and utterly unworthy to even touch \the [src].") + var/hand_index = user.get_held_index_of_item(src) + if (hand_index) user.dropItemToGround(src, TRUE) - return FALSE + return FALSE + +/obj/item/clothing/neck/cloak/skill_reward/equipped(mob/user, slot) + if (check_wearable(user)) + unworthy_unequip(user) return ..() /obj/item/clothing/neck/cloak/skill_reward/attack_hand(mob/user) - if (user.mind?.get_skill_level(associated_skill_path) < SKILL_LEVEL_LEGENDARY) - to_chat(user, "You feel completely and utterly unworthy to even touch \the [src]!") - return FALSE + if (check_wearable(user)) + unworthy_unequip(user) return ..() /obj/item/clothing/neck/cloak/skill_reward/gaming @@ -119,7 +126,7 @@ /obj/item/clothing/neck/cloak/skill_reward/cleaning name = "legendary cleaner's cloak" - desc = "Worn by the most skilled of custodians, this legendary cloak is only attainable by achieving janitorial enlightenment. This status symbol represents a being not only extensively trained in grime combat, but one who is willing to use an entire aresenal of cleaning supplies to its full extent to wipe grime's miserable ass off the face of the station." + desc = "Worn by the most skilled custodians, this legendary cloak is only attainable by achieving janitorial enlightenment. This status symbol represents a being not only extensively trained in grime combat, but one who is willing to use an entire aresenal of cleaning supplies to its full extent to wipe grime's miserable ass off the face of the station." icon_state = "cleanercloak" associated_skill_path = /datum/skill/cleaning @@ -134,3 +141,11 @@ desc = "Worn by the most skilled miners, this legendary cloak is only attainable by achieving true mineral enlightenment. This status symbol represents a being who has forgotten more about rocks than most miners will ever know, a being who has moved mountains and filled valleys." icon_state = "minercloak" associated_skill_path = /datum/skill/mining + +/obj/item/clothing/neck/cloak/skill_reward/playing + name = "legendary veteran's cloak" + desc = "Worn by the wisest of veteran employees, this legendary cloak is only attainable by maintaining a living employment agreement with Nanotrasen for over five thousand hours. This status symbol represents a being is better than you in nearly every quantifiable way, simple as that." + icon_state = "playercloak" + +/obj/item/clothing/neck/cloak/skill_reward/playing/check_wearable(mob/user) + return user.client?.get_exp_living(TRUE) >= PLAYTIME_VETERAN diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index d2a4d6cc3fb..8765ffec88e 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -241,6 +241,9 @@ PDA.ownjob = J.title PDA.update_label() + if(H.client?.prefs.playtime_reward_cloak) + neck = /obj/item/clothing/neck/cloak/skill_reward/playing + /datum/outfit/job/get_chameleon_disguise_info() var/list/types = ..() types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index 54cb1dc6ef8..57a57709d60 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/obj/clothing/cloaks.dmi b/icons/obj/clothing/cloaks.dmi index 55caff7e375..bba470bc74a 100644 Binary files a/icons/obj/clothing/cloaks.dmi and b/icons/obj/clothing/cloaks.dmi differ