diff --git a/credits.txt b/credits.txt index db52ebce6..aaea0d873 100644 --- a/credits.txt +++ b/credits.txt @@ -22,3 +22,5 @@ Most of the work here is original, but there are some notable exceptions: - MPlus font by M⁺ FONTS PROJECT (http://mplus-fonts.osdn.jp/mplus-bitmap-fonts). Modified to add gradients and drop shadow. - Miniwi font by Josuah Demangeon (http://josuah.net). Modified to add gradients and drop shadow. - Terrain splashes for Doom by MagicWazard. + - Intermission fanart: + * Substance20 (@S20TBL) diff --git a/cvarinfo.txt b/cvarinfo.txt index 22c7b9e23..d418a0bdf 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -34,3 +34,6 @@ user bool swwm_shaders = true; // use pp shaders for some effects user bool swwm_earbuster = false; // limits loudness of wallbuster fire sounds server bool swwm_revive = false; // allows the player to do an "emergency reboot" when dying server int swwm_revivecooldown = 30; // cooldown after using a revive, in seconds (0: no limit) +user int swwm_intertype = 0; // 0 - standard bg + // 1 - fanart + // 2 - 4komas diff --git a/graphics/Fanart/S20TBL.jpg b/graphics/Fanart/S20TBL.jpg new file mode 100644 index 000000000..6f07323b9 Binary files /dev/null and b/graphics/Fanart/S20TBL.jpg differ diff --git a/language.def b/language.def index 3efb6aaed..cb2d661db 100644 --- a/language.def +++ b/language.def @@ -46,6 +46,7 @@ SWWM_MCREDS = "SWWM GZ Credits"; SWWM_CLEAD = "Development Lead:"; SWWM_CASSETS = "Additional Assets:"; SWWM_CMUSIC = "Music Tracks Used:"; +SWWM_CFANART = "Intermission Fanart:"; SWWM_CPATRON = "Patreon Backers:"; SWWM_CTHANK = "Special Thanks:"; SWWM_CDRAGON2 = "(For being a good pet dragon)"; @@ -75,6 +76,10 @@ SWWM_OTHERVOICE = "Co-op Voice"; SWWM_REVIVE = "Emergency Reboot System"; SWWM_REVIVECOOLDOWN = "Reboot Cooldown"; SWWM_UNLIMITED = "Unlimited"; +SWWM_INTERTYPE = "Intermission Art"; +SWWM_INTERDEF = "N/A"; +SWWM_INTERART = "Fanart"; +SWWM_INTER4KOMA = "4Koma"; TOOLTIP_SWWM_VOICETYPE = "Sets the voice pack for the player."; TOOLTIP_SWWM_MUTEVOICE = "Control what gets muted, if you'd rather have a more silent protagonist."; TOOLTIP_SWWM_FLASHSTRENGTH = "Screen flashes usually happen when firing some weapons, you can lower this if these effects are harmful for you."; @@ -103,6 +108,7 @@ TOOLTIP_SWWM_SHADERS = "Use postprocess shaders for things like powerups and the TOOLTIP_SWWM_OTHERVOICE = "Allows you to hear other player's voice lines, provided you're close enough."; TOOLTIP_SWWM_REVIVE = "Allows the player to get back up after dying by pressing Fire. Has a configurable cooldown."; TOOLTIP_SWWM_REVIVECOOLDOWN = "Time in seconds of downtime after using a reboot, where if you die again, you can't get back up. Set to 0 to allow unlimited reboots."; +TOOLTIP_SWWM_INTERTYPE = "Choose what to display in the background during intermissions."; // knowledge base SWWM_COMINGSOON = "(coming soon)"; SWWM_MISSTAB = "Mission"; @@ -2109,6 +2115,11 @@ SWWM_INTERTIP19 = "With the right combination of dashing, boosting and wall jump SWWM_INTERTIP20 = "In multiplayer, any keys you pick up will be immediately shared with other players."; SWWM_INTERTIP21 = "Aim for a high score! The more enemies you kill the better. Don't forget to put that cash to use at the in-game store when you can."; SWWM_INTERTIP22 = "Although chance boxes may sound like a terrible idea, there is a high probability of obtaining very valuable items for a much lower cost."; +// intermission fanart +SWWM_FANART = "Art: "; +SWWM_NFANART = "1"; +SWWM_FANART1 = "S20TBL.jpg;Substance20 (@S20_TBL)"; +// intermission 4komas (TBD) /* SUBTITLES */ // voice name diff --git a/language.es b/language.es index 61e84391f..2bc5f797c 100644 --- a/language.es +++ b/language.es @@ -45,6 +45,7 @@ SWWM_MCREDS = "Créditos de SWWM GZ"; SWWM_CLEAD = "Desarrollo Principal:"; SWWM_CASSETS = "Assets Adicionales:"; SWWM_CMUSIC = "Música Usada:"; +SWWM_CFANART = "Fanart de Intermisión:"; SWWM_CPATRON = "Mecenas de Patreon:"; SWWM_CTHANK = "Agradecimientos Especiales:"; SWWM_CDRAGON2 = "(Por ser un buen dragón mascota)"; @@ -74,6 +75,7 @@ SWWM_OTHERVOICE = "Voz en Cooperativo"; SWWM_REVIVE = "Sistema de Reinicio de Emergencia"; SWWM_REVIVECOOLDOWN = "Tiempo de recarga de Reinicio"; SWWM_UNLIMITED = "Ilimitado"; +SWWM_INTERTYPE = "Arte de Intermisión"; TOOLTIP_SWWM_VOICETYPE = "Selecciona el pack de voz para el jugador."; TOOLTIP_SWWM_MUTEVOICE = "Controla lo que se mutea, si prefieres tener un protagonista más silencioso."; TOOLTIP_SWWM_FLASHSTRENGTH = "Los destellos en pantalla suelen ocurrir al disparar algunas armas, puedes reducirlo si este tipo de effectos te causan malestar."; @@ -102,6 +104,7 @@ TOOLTIP_SWWM_SHADERS = "Usa shaders de postprocesado para cosas como powerups y TOOLTIP_SWWM_OTHERVOICE = "Te permite oír los comentarios de voz de otros jugadores, si estás lo suficientemente cerca."; TOOLTIP_SWWM_REVIVE = "Permite al jugador volver a levantarse tras morir pulsando Fuego. Tiene un cooldown configurable."; TOOLTIP_SWWM_REVIVECOOLDOWN = "Tiempo en segundos tras reiniciar, durante el cual si mueres otra vez, no puedes volver a levantarte. Pon a 0 para permitir reinicios ilimitados."; +TOOLTIP_SWWM_INTERTYPE = "Elige qué mostrar de fondo durante intermisiones."; // knowledge base SWWM_COMINGSOON = "(próximamente)"; SWWM_MISSTAB = "Misión"; @@ -1866,6 +1869,9 @@ SWWM_INTERTIP19 = "Con la combinación adecuada de esprintar, impulsar, y saltar SWWM_INTERTIP20 = "En multijugador, cualquier llave que recojas será compartida inmediatemente con otros jugadores."; SWWM_INTERTIP21 = "¡Aumenta tu puntuación! Cuantos más enemigos elimines, mejor. No te olvides de hacer uso de esos puntos en la tienda in-game cuando puedas."; SWWM_INTERTIP22 = "Aunque las cajas afortunadas no suenen a muy buena idea, hay muchas probabilidades de que te toquen items muy valiosos a un coste mucho más reducido."; +// intermission fanart +SWWM_INTERART = "Arte: "; +// intermission 4komas (TBD) /* SUBTITLES */ // voice name diff --git a/menudef.txt b/menudef.txt index d100eb2b9..73e0cfdd3 100644 --- a/menudef.txt +++ b/menudef.txt @@ -12,6 +12,12 @@ OptionValue "SWWMEnforce" 0, "$SWWM_USERSET" 1, "$SWWM_FORCEENABLE" } +OptionValue "SWWMInterType" +{ + 0, "$SWWM_INTERDEF" + 1, "$SWWM_INTERART" + //2, "$SWWM_INTER4KOMA" +} OptionMenu "SWWMOptionMenu" { Class "SWWMOptionMenu" @@ -39,6 +45,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_SCORENUMS", "swwm_scorenums", "YesNo" Option "$SWWM_SCOREBONUS", "swwm_scorebonus", "YesNo" Option "$SWWM_SHADERS", "swwm_shaders", "YesNo" + Option "$SWWM_INTERTYPE", "swwm_intertype", "SWWMInterType" StaticText " " StaticText "$SWWM_ITITLE", "Gold" Option "$SWWM_ARMORUSE", "swwm_autousearmor", "YesNo" @@ -92,6 +99,10 @@ OptionMenu "SWWMCreditsMenu" StaticText "Nitro", "Gold" StaticText "Gateways Part II", "White" StaticText " " + StaticText "$SWWM_CFANART", "Red" + StaticText " " + StaticText "Substance20 (@S20TBL)", "Gold" + StaticText " " StaticText "$SWWM_CPATRON", "Red" StaticText " " StaticText "Christian Grab", "Gold" diff --git a/zscript/swwm_inter.zsc b/zscript/swwm_inter.zsc index 7ec06942c..8c281d523 100644 --- a/zscript/swwm_inter.zsc +++ b/zscript/swwm_inter.zsc @@ -1,13 +1,33 @@ Mixin Class SWWMStatScreen { - TextureID bgtex; + transient TextureID bgtex, arttex; + transient Font TewiFont, MPlusFont; + int whichart; + transient CVar intertype, lang; + double hs; + Vector2 ss, origin; + // returns MPlus if we're playing in Japanese, otherwise returns the requested font + Font LangFont( Font req ) + { + if ( !lang ) lang = CVar.GetCVar('language',players[consoleplayer]); + if ( lang.GetString() ~== "jp" ) return MPlusFont; + return req; + } override void StartMusic() { S_ChangeMusic("music/DRAGONY.XM"); } private void drawSWWMBg() { + if ( !intertype ) intertype = CVar.GetCVar('swwm_intertype',players[consoleplayer]); + if ( !whichart ) + { + int no = 0; + if ( intertype.GetInt() == 1 ) no = StringTable.Localize("$SWWM_NFANART").ToInt(); + //else if ( intertype.GetInt() == 2 ) no = StringTable.Localize("$SWWM_N4KOMA").ToInt(); + whichart = Random[InterArt](1,no); + } if ( !bgtex ) bgtex = TexMan.CheckForTexture("graphics/InterBG.png",TexMan.Type_MiscPatch); double ar = Screen.GetAspectRatio(); Vector2 tsize = TexMan.GetScaledSize(bgtex); @@ -17,7 +37,29 @@ Mixin Class SWWMStatScreen else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar); else vsize = tsize; Screen.DrawTexture(bgtex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true); - // TODO background pics (fanart, 4komas, etc.) + // background pics (fanart, 4komas) + if ( intertype.GetInt() == 1 ) + { + String artstr = StringTable.Localize(String.Format("$SWWM_FANART%d",whichart)); + int semic = artstr.IndexOf(";"); + if ( !arttex ) arttex = TexMan.CheckForTexture(String.Format("graphics/Fanart/%s",artstr.Left(semic)),TexMan.Type_MiscPatch); + tsize = TexMan.GetScaledSize(arttex); + sar = tsize.x/tsize.y; + if ( sar > ar ) vsize = (tsize.y*ar,tsize.y); + else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar); + else vsize = tsize; + Screen.DrawTexture(arttex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true); + String bstr = String.Format("\cx%s\c- %s",StringTable.Localize("$SWWM_FANART"),artstr.Mid(semic+1)); + Font fnt = LangFont(TewiFont); + int len = fnt.StringWidth(bstr); + int bw = int((len+8)*hs), bh = int((fnt.GetHeight()+4)*hs); + Screen.Dim("Black",.8,Screen.GetWidth()-bw,Screen.GetHeight()-bh,bw,bh); + Screen.DrawText(fnt,Font.CR_GOLD,ss.x-(len+4),ss.y-(fnt.GetHeight()+2),bstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } + /*else if ( intertype.GetInt() == 2 ) + { + // TBD when there's art + }*/ // TODO intermission tips at the bottom } override void drawShowNextLoc( void ) @@ -27,6 +69,11 @@ Mixin Class SWWMStatScreen } override void Drawer( void ) { + if ( !TewiFont ) TewiFont = Font.GetFont('TewiShaded'); + if ( !MPlusFont ) MPlusFont = Font.GetFont('MPlusShaded'); + hs = max(min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/400.)),1.); + ss = (Screen.GetWidth(),Screen.GetHeight())/hs; + origin = (ss.x-640,ss.y-400)/2.; switch ( CurState ) { case StatCount: