From 0af42c28301561464ce274af96e0b9831a2f2ed7 Mon Sep 17 00:00:00 2001 From: I_VAPE_VOX_CLOACA_EVERY_DAY_OF_MY_LIFE Date: Sun, 27 Jan 2019 02:41:58 -0300 Subject: [PATCH] Adds themes, better definition of rerun, 85% tested --- code/modules/admin/admin.dm | 8 ++-- code/modules/admin/topic.dm | 19 +++++---- code/modules/client/preferences.dm | 2 +- code/modules/credits/credits.dm | 58 +++++++++++++++++---------- code/modules/credits/credits.html | 21 +++++++++- code/modules/credits/episode_name.dm | 11 +++-- icons/credits/4_themed_clown.png | Bin 0 -> 22187 bytes icons/credits/4_themed_cooks.png | Bin 0 -> 28659 bytes 8 files changed, 77 insertions(+), 42 deletions(-) create mode 100644 icons/credits/4_themed_clown.png create mode 100644 icons/credits/4_themed_cooks.png diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index df7e8f8d69f..cfea73501a5 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1508,15 +1508,15 @@ proc/formatPlayerPanel(var/mob/U,var/text="PP") var/dat = "
Credits Panel

" dat += "
Star Of The Show:
" - dat += "Chosen Star: [isnull(end_credits.star) ? "(Will Select Automatically)" : end_credits.star] (Set Plaintext) (Set Mob From List) " - if(!isnull(end_credits.star) && !end_credits.drafted) + dat += "Chosen Star: [end_credits.star == "" && end_credits.customized_star == "" ? "(Will Select Automatically)" : end_credits.star || end_credits.customized_star] (Set Plaintext) (Set Mob From List) " + if(end_credits.customized_star != "" && !end_credits.drafted) dat += "(Reset) " if(!end_credits.drafted) dat += "
The round isn't over, so the featured star hasn't been picked yet.
You can manually set one now, or whichever human has talked the most this round will automatically be selected as the featured star when the round ends.
" dat += "
" dat += "
Episode Name:
" - dat += "Chosen Name: [end_credits.episode_name == "" ? "(Will Generate Automatically)" : end_credits.episode_name] (Set) " - if(end_credits.episode_name != "" && !end_credits.drafted) + dat += "Chosen Name: [end_credits.episode_name == "" && end_credits.customized_name == "" ? "(Will Generate Automatically)" : end_credits.episode_name || end_credits.customized_name] (Set) " + if(end_credits.customized_name != "" && !end_credits.drafted) dat += "(Reset) " else if(end_credits.drafted) dat += "(Reroll!) " diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c5950b1f7da..13218c75cc9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -4836,37 +4836,36 @@ switch(href_list["credits"]) if("resetstar") if(!end_credits.drafted) //Just in case the button somehow gets clicked when it shouldn't - end_credits.star = null + end_credits.customized_star = "" log_admin("[key_name(usr)] reset the current round's featured star. A new one will automatically generate later.") message_admins("[key_name_admin(usr)] reset the current round's featured star. A new one will automatically generate later.") if("setstartext") - var/newstar = thebigstar(input(usr,"Write the new star. In the final credits, it will be displayed as: 'Starring\[linebreak\]\[whatever you type here\]'. Mind your capitalization! You may also use HTML. Do not include the characters '%' anywhere unless you know what you're doing, please.","in my dream, i am the star. its me",null) as text|null) + var/newstar = thebigstar(input(usr,"Write the new star. In the final credits, it will be displayed as: 'Starring\[linebreak\]\[whatever you type here\]'. Mind your capitalization! You may also use HTML. Do not include the characters '%' anywhere unless you know what you're doing, please.","in my dream, i am the star. its me", end_credits.star) as text|null) if(newstar) - end_credits.star = newstar + end_credits.customized_star = newstar log_admin("[key_name(usr)] forced the current round's featured star to be '[newstar]'") message_admins("[key_name_admin(usr)] forced the current round's featured star to be '[newstar]'") if("setstarmob") var/newstar = thebigstar(input(usr, "Who should be the featured star of this episode? WARNING: Only tested with humans.", "New star from moblist...") as null|anything in sortmobs()) if(newstar) - end_credits.star = newstar + end_credits.customized_star = newstar log_admin("[key_name(usr)] forced the current round's featured star to be '[newstar]'") message_admins("[key_name_admin(usr)] forced the current round's featured star to be '[newstar]'") if("resetname") if(!end_credits.drafted) //Just in case the button somehow gets clicked when it shouldn't - end_credits.episode_name = "" - end_credits.is_rerun = initial(end_credits.is_rerun) + end_credits.customized_name = "" log_admin("[key_name(usr)] reset the current round's episode name. A new one will automatically generate later.") message_admins("[key_name_admin(usr)] reset the current round's episode name. A new one will automatically generate later.") if("rerollname") - end_credits.pick_name() + end_credits.customized_name = "" + end_credits.finalize_name() log_admin("[key_name(usr)] re-rolled the current round's episode name. New name: '[end_credits.episode_name]'") message_admins("[key_name_admin(usr)] re-rolled the current round's episode name. New name: '[end_credits.episode_name]'") if("setname") - var/newname = input(usr,"Write the name of this latest rerun...","New Episode Name") as text|null + var/newname = input(usr,"Write the super original name of this masterpiece...","New Episode Name") as text|null if(newname) - end_credits.episode_name = uppertext(newname) - end_credits.is_rerun = FALSE + end_credits.customized_name = uppertext(newname) log_admin("[key_name(usr)] forced the current round's episode name to '[newname]'") message_admins("[key_name_admin(usr)] forced the current round's episode name to '[newname]'") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2c5ec440d60..4514c09aa8a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -384,7 +384,7 @@ var/const/MAX_SAVE_SLOTS = 8 [special_popup ? "Yes" : "No"]
Attack Animations: [attack_animation ? (attack_animation == ITEM_ANIMATION? "Item Anim." : "Person Anim.") : "No"]
- Show Credits (?): + Show Credits (?): [credits]
Server Shutdown Jingle (?): [jingle]
diff --git a/code/modules/credits/credits.dm b/code/modules/credits/credits.dm index f99f4a95bf4..22f62cc691e 100644 --- a/code/modules/credits/credits.dm +++ b/code/modules/credits/credits.dm @@ -9,21 +9,24 @@ var/global/datum/credits/end_credits = new var/file = 'code/modules/credits/credits.html' var/director = "Pomf Chicken Productions" - var/theme = "NT" var/list/producers = list() - var/mob/living/carbon/human/most_talked //Human that talked the most this round. Will become the star if admins don't set one. - var/star //Is text returned by thebigstar(), not a mob. + var/star = "" var/list/disclaimers = list() var/list/datum/episode_name/episode_names = list() - var/episode_name = "" - var/is_rerun = TRUE //A 'rerun' is defined as a round where no admin set a custom episode name and the rolled episode name wasn't of the /rare subtype. + var/episode_name = "" var/producers_string = "" var/episode_string = "" var/cast_string = "" var/disclaimers_string = "" var/star_string = "" + //If any of the following four are modified, the episode is considered "not a rerun". + var/customized_name = "" + var/customized_star = "" + var/rare_episode_name = FALSE + var/theme = "NT" + var/drafted = FALSE var/finalized = FALSE var/js_args = list() @@ -48,6 +51,12 @@ var/global/datum/credits/end_credits = new "http://ss13.moe/media/source/roundend/jinglenew/tfvictory.mp3" ) +/datum/credits/proc/is_rerun() + if(customized_name != "" || customized_star != "" || rare_episode_name == TRUE || theme != initial(theme)) + return FALSE + else + return TRUE + /* * draft(): * Stage 1 of credit assembly. Called as soon as the rock cooks. Picks the episode names, staff, etc. @@ -76,8 +85,7 @@ var/global/datum/credits/end_credits = new if(!drafted) //In case the world is rebooted without the round ending normally. draft() - if(episode_name == "") //admin might've already set one - pick_name() + finalize_name() finalize_episodestring() finalize_starstring() finalize_disclaimerstring() //finalize it after the admins have had time to edit them @@ -86,7 +94,7 @@ var/global/datum/credits/end_credits = new var/splashytext = producers_string + star_string finalized = TRUE - js_args = list(scrollytext, splashytext, scroll_speed, splash_time) //arguments for the makeCredits function back in the javascript + js_args = list(scrollytext, splashytext, theme, scroll_speed, splash_time) //arguments for the makeCredits function back in the javascript /* * send2clients(): @@ -140,7 +148,7 @@ var/global/datum/credits/end_credits = new if(CREDITS_ALWAYS) C.credits_audio() if(CREDITS_NO_RERUNS) //The time has come to decide. Shall we play credits audio, or preload the jingle audio instead? - if(!is_rerun) + if(!is_rerun()) C.credits_audio() else C.jingle_audio(preload_only = TRUE) @@ -164,7 +172,10 @@ var/global/datum/credits/end_credits = new -/datum/credits/proc/pick_name() +/datum/credits/proc/finalize_name() + if(customized_name) + episode_name = customized_name + return var/list/drafted_names = list() var/list/is_rare_assoc_list = list() for(var/datum/episode_name/N in episode_names) @@ -172,13 +183,13 @@ var/global/datum/credits/end_credits = new is_rare_assoc_list["[N.thename]"] = N.rare episode_name = pickweight(drafted_names) if(is_rare_assoc_list[episode_name] == TRUE) - is_rerun = FALSE + rare_episode_name = TRUE -/datum/credits/proc/finalize_episodestring(var/thename) +/datum/credits/proc/finalize_episodestring() var/season = rand(1,22) var/episodenum = rand(1,17) //Maybe we could do this cumulatively so that the round after 670 becomes 671 etc and the season is just the last 2 numbers of the current IRL year? - episode_string = "

SEASON [season] EPISODE [episodenum]
[episode_name]


" - log_game("So ends [is_rerun ? "another rerun of " : ""]SEASON [season] EPISODE [episodenum] - [episode_name]") + episode_string = "

SEASON [season] EPISODE [episodenum]
[episode_name]


" + log_game("So ends [is_rerun() ? "another rerun of " : ""]SEASON [season] EPISODE [episodenum] - [episode_name]") /datum/credits/proc/finalize_disclaimerstring() disclaimers_string = "
" @@ -211,13 +222,19 @@ var/global/datum/credits/end_credits = new producers_string += "[producer]%" //% being an arbitrary "new splash card" char we use to split this string back in the javascript /datum/credits/proc/draft_star() - if(star) - star = thebigstar(star) - else if(most_talked) - star = thebigstar(most_talked) //We want this ran now, in case the star gibs before the credits roll etc + if(customized_star) + star = customized_star + return + var/mob/living/carbon/human/most_talked + for(var/mob/living/carbon/human/H in mob_list) + if(!H.key || H.iscorpse) + continue + if(!most_talked || H.talkcount > most_talked.talkcount) + most_talked = H + star = thebigstar(most_talked) /datum/credits/proc/finalize_starstring() - if(star_string) + if(star == "") return star_string = "

Starring
[star]


%" //% being an arbitrary "new splash card" char we use to split this string back in the javascript @@ -227,9 +244,6 @@ var/global/datum/credits/end_credits = new for(var/mob/living/carbon/human/H in mob_list) if(!H.key || H.iscorpse) continue - if(!most_talked || H.talkcount > most_talked.talkcount) - most_talked = H - cast_string += "[gender_credits(H)]" for(var/mob/living/silicon/S in mob_list) diff --git a/code/modules/credits/credits.html b/code/modules/credits/credits.html index c3a877c6dbf..3c4364c011f 100644 --- a/code/modules/credits/credits.html +++ b/code/modules/credits/credits.html @@ -118,12 +118,13 @@ } } - function setupCredits(scrollyString, splashyString, newScrollSpeed, newSplashTime){ + function setupCredits(scrollyString, splashyString, theme, newScrollSpeed, newSplashTime){ if(newSplashTime !== undefined) {splashTime = parseInt(newSplashTime)} if(newScrollSpeed !== undefined) {scrollSpeed = parseInt(newScrollSpeed)} setScrollingText(scrollyString); setSplashyText(splashyString); + applyTheme(theme); initialized = 1; } @@ -164,6 +165,24 @@ }, speed); } + function applyTheme(theme){ + if(!theme) + return + switch(theme){ + case "clown": + var crayons = ['red', 'orange', 'yellow', 'green', 'cyan', 'purple']; + var divs = document.getElementsByTagName('*'); + for(var i=0; i"; runByond('byond://winset?id=mapwindow.credits;is-visible=true'); diff --git a/code/modules/credits/episode_name.dm b/code/modules/credits/episode_name.dm index b9e2b8863ed..1981e32487c 100644 --- a/code/modules/credits/episode_name.dm +++ b/code/modules/credits/episode_name.dm @@ -43,7 +43,7 @@ /datum/episode_name/proc/make_div(var/admindatum) //This is just for the admin panel. - . = "[weight]% (Set) - " + . = "[rare ? "" + "[weight]" + "%" : "[weight]" + "%"] (Set) - " . += "[thename] - (Edit) " . += "(Remove) " . += "(?)" @@ -84,7 +84,7 @@ if(ticker.explosion_in_progress || ticker.station_was_nuked) episode_names += new /datum/episode_name/rare("[pick("THE CREW GETS NUKED", "THE CREW IS THE BOMB", "THE CREW BLASTS OFF AGAIN!", "THE 'BOOM' HEARD 'ROUND THE WORLD", 25;"THE BIG BANG THEORY")]", "The station was nuked!", 350) if((locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules) || (locate(/datum/dynamic_ruleset/midround/from_ghosts/faction_based/nuclear) in mode.executed_rules)) - theme = "Syndie" //This really should use the nukeop's check_win(), but it wasn't coded like that. + theme = "syndie" //This really should use the nukeop's check_win(), but the newcops gamemode wasn't coded like that. else if((locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules) || (locate(/datum/dynamic_ruleset/midround/from_ghosts/faction_based/nuclear) in mode.executed_rules)) episode_names += new /datum/episode_name/rare("[pick("THE CREW SOLVES THE NUCLEAR CRISIS", "BLAST, FOILED AGAIN", "FISSION MAILED", 50;"I OPENED THE WINDOW, AND IN FLEW COPS")]", "The crew defeated the nuclear operatives.", 350) @@ -219,12 +219,14 @@ if(clowncount > 3) episode_names += new /datum/episode_name/rare("CLOWNS GALORE", "There were [clowncount] clowns on the shuttle.", min(1500, clowncount*200)) + theme = "clown" if(mimecount > 3) episode_names += new /datum/episode_name/rare("THE SILENT SHUFFLE", "There were [mimecount] mimes on the shuttle.", min(1500, mimecount*200)) if(chaplaincount > 2) episode_names += new /datum/episode_name/rare("COUNT YOUR BLESSINGS", "There were [chaplaincount] chaplains on the shuttle. Like, the real deal, not just clothes.", min(1500, chaplaincount*450)) if(chefcount > 2) - episode_names += new /datum/episode_name/rare("Too Many Cooks", "There were [chefcount] chefs on the shuttle.", min(1500, chefcount*450)) //intentionally not capitalized + episode_names += new /datum/episode_name/rare("Too Many Cooks", "There were [chefcount] chefs on the shuttle.", min(1500, chefcount*450)) //intentionally not capitalized, as the theme will customize it + theme = "cooks" if(assistantcount / human_escapees.len > 0.6 && human_escapees.len > 3) episode_names += new /datum/episode_name/rare("[pick("GREY GOO", "RISE OF THE GREYTIDE")]", "Most of the survivors were Assistants, or at least dressed like one.", min(1500, assistantcount*200)) if(skeletoncount / human_escapees.len > 0.6 && human_escapees.len > 3) @@ -244,7 +246,7 @@ var/mob/living/carbon/human/H = human_escapees[1] if(istraitor(H) || isdoubleagent(H) || isnukeop(H)) - theme = "Syndie" + theme = "syndie" if(!H.isUnconscious() && H.mind && H.mind.assigned_role == "Chef") var/chance = 250 @@ -264,6 +266,7 @@ if(H.is_wearing_any(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/under/jester))) chance += 250 episode_names += new /datum/episode_name/rare("[pick("COME HELL OR HIGH HONKER", "THE LAST LAUGH")]", "The Clown was the only survivor in the shuttle.", chance) + theme = "clown" else if(!H.isUnconscious() && H.mind && H.mind.assigned_role == "Internal Affairs Agent") var/chance = 250 if(H.is_holding_item(/obj/item/weapon/storage/briefcase)) diff --git a/icons/credits/4_themed_clown.png b/icons/credits/4_themed_clown.png new file mode 100644 index 0000000000000000000000000000000000000000..910e41d8f1fa9555b414d968c9935cdc4273b7c3 GIT binary patch literal 22187 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