From aac32f81adcf2bffd85b6d4d7de7bc832e3c9640 Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Mon, 1 Sep 2014 15:41:58 -0600 Subject: [PATCH] Rewrote ScreenCredits to move StepMania credits to Scripts/04 CreditsHelpers.lua and provide an API for adding sections so that themers don't have toe duplicate stepmania credits to theme the screen. --- .../BGAnimations/ScreenCredits overlay.lua | 167 ++--------- .../Graphics/CreditsLogo kyzentun.png | Bin 0 -> 18775 bytes .../_fallback/Scripts/04 CreditsHelpers.lua | 280 ++++++++++++++++++ 3 files changed, 310 insertions(+), 137 deletions(-) create mode 100755 Themes/_fallback/Graphics/CreditsLogo kyzentun.png create mode 100644 Themes/_fallback/Scripts/04 CreditsHelpers.lua diff --git a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua index 8609c97488..845316d96c 100644 --- a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua +++ b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua @@ -1,156 +1,49 @@ -local function Fooled() - local phrases = { - "hornswaggled", - "bamboozled", - "hoodwinked", - "swindled", - "duped", - "hoaxed", - "fleeced", - "shafted", - "caboodled", - "beguiled", - "finagled", - "two-timed", - "suckered", - "flimflammed" - } - return phrases[math.random(#phrases)] -end +-- To add a section to the credits, use the following: +-- local theme_credits= { +-- name= "Theme Credits", -- the name of your section +-- "Me", -- The people you want to list in your section. +-- "Myself", +-- "My other self", +-- {logo= "pro_dude", name= "Pro self"}, -- Someone who has a logo image. +-- -- This logo image would be "Graphics/CreditsLogo pro_dude.png". +-- } +-- StepManiaCredits.AddSection(theme_credits) +-- +-- If you want to add your section after an existing section, use the following: +-- StepManiaCredits.AddSection(theme_credits, 7) +-- +-- Or position can be the name of a section to insert after: +-- StepManiaCredits.AddSection(theme_credits, "Special Thanks") +-- +-- Or if you want to add your section before a section: +-- StepManiaCredits.AddSection(theme_credits, "Special Thanks", true) -local ssc = { - "AJ Kelly as freem", - "Jonathan Payne (Midiman)", - "Colby Klein (shakesoda)", -} - -local sm_ssc = { - "Jason Felds (wolfman2000)", -- Timing Segments, Split Timing, optimization - "Thai Pangsakulyanont (theDtTvB)", -- BMS, Split Timing, optimization - "Alberto Ramos (Daisuke Master)", - "Jack Walstrom (FSX)", -} - -local stepmania = { - "Chris Danford", - "Glenn Maynard", - "Steve Checkoway", - -- and various other contributors -} - -local oitg = { - "infamouspat", - "Mark Cannon (vyhd)", -} - -local contrib = { - "Aldo Fregoso (Aldo_MX)", -- delays and much more. StepMania AMX creator - "A.C/@waiei", -- custom scoring fixes + Hybrid scoring - "cerbo", -- lua bindings and other fun stuff - "cesarmades", -- pump/cmd* noteskins - "Chris Eldridge (kurisu)", -- dance-threepanel stepstype support - "Christophe Goulet-LeBlanc (Kommisar)", -- songs - "corec", -- various fixes - "cybik", -- Android port - "galopin", -- piu PlayStation2 usb mat support - "gholms", -- automake 1.11 support - "juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods - "Kaox", -- pump/default noteskin - "Kyzentun", - "Mad Matt", - "NitroX72", -- pump/frame noteskin - "Petriform", -- default theme music - "桜為小鳩/Sakurana-Kobato (@sakuraponila)", -- custom scoring fixes - "Samuel Kim (1a2a3a2a1a)", -- various beat mode fixes - "hanubeki (@803832)", -- beginner helper fix, among various other things - "v1toko", -- x-mode from StepNXA - "Alfred Sorenson", -- new lua bindings -} - -local translators = { - "John Reactor (Polish)", - "DHalens (Spanish)", - "@Niler_jp (Japanese)", - "Deamon007 (Dutch)" -} - -local thanks = { - "A Pseudonymous Coder", -- support - "Bill Shillito (DM Ashura)", -- Music (not yet though) - "cpubasic13", -- testing (a lot) - "Dreamwoods", - "Jason Bolt (LightningXCE)", - "Jousway", -- Noteskins - "Luizsan", -- creator of Delta theme - "Matt1360", -- Automake magic + oitg bro - "Renard", - "Ryan McKanna (Plaguefox)", - "Sta Kousin", --help with Japanese bug reports -} - -local shoutout = { - "The Lua team", -- lua project lead or some shit. super nerdy but oh hell. - "Mojang AB", -- minecraft forever -freem - "Wolfire Games", -- piles of inspiration - "NAKET Coder", - "Ciera Boyd", -- you bet your ass I'm putting my girlfriend in the credits - --Image(), -- we should have some logos probably to look super pro - "#KBO", - "Celestia Radio", -- LOVE AND TOLERANCE - "You showed us... your ultimate dance", -} - -local copyright = { - "StepMania is released under the terms of the MIT license.", - "If you paid for the program you've been " .. Fooled() .. ".", - "All content is the sole property of their respectful owners." -} - -local sections = { - { "the spinal shark collective (project lead)", ssc }, - { "sm-ssc Team", sm_ssc }, - { "StepMania Team", stepmania }, - { "OpenITG Team", oitg }, - { "Translators", translators }, - { "Other Contributors", contrib }, - { "Special Thanks", thanks }, - { "Shoutouts", shoutout }, - { "Copyright", copyright }, -} - --- To add people or sections modify the above. +-- StepManiaCredits is defined in _fallback/Scripts/04 CreditsHelpers.lua. local lineOn = cmd(zoom,0.875;strokecolor,color("#444444");shadowcolor,color("#444444");shadowlength,3) local sectionOn = cmd(diffuse,color("#88DDFF");strokecolor,color("#446688");shadowcolor,color("#446688");shadowlength,3) local item_padding_start = 4; +local line_height= 30 +-- Tell the credits table the line height so it can use it for logo sizing. +StepManiaCredits.SetLineHeight(line_height) local creditScroller = Def.ActorScroller { SecondsPerItem = 0.5; NumItemsToDraw = 40; TransformFunction = function( self, offset, itemIndex, numItems) - self:y(30*offset) + self:y(line_height*offset) end; OnCommand = cmd(scrollwithpadding,item_padding_start,15); } -local function AddLine( text, command ) - local text = Def.ActorFrame{ - LoadFont("Common normal")..{ - Text = text or ""; - OnCommand = command or lineOn; - } - } - table.insert( creditScroller, text ) -end - -- Add sections with padding. -for section in ivalues(sections) do - AddLine( section[1], sectionOn ) - for name in ivalues(section[2]) do - AddLine( name ) +for section in ivalues(StepManiaCredits.Get()) do + StepManiaCredits.AddLineToScroller(creditScroller, section.name, sectionOn) + for name in ivalues(section) do + StepManiaCredits.AddLineToScroller(creditScroller, name) end - AddLine() - AddLine() + StepManiaCredits.AddLineToScroller(creditScroller) + StepManiaCredits.AddLineToScroller(creditScroller) end creditScroller.BeginCommand=function(self) diff --git a/Themes/_fallback/Graphics/CreditsLogo kyzentun.png b/Themes/_fallback/Graphics/CreditsLogo kyzentun.png new file mode 100755 index 0000000000000000000000000000000000000000..d9431bc99df22e1d2d098e6972fb34c9dd414324 GIT binary patch literal 18775 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