diff --git a/credits.txt b/credits.txt index c9c250c8d..cffaa0830 100644 --- a/credits.txt +++ b/credits.txt @@ -32,10 +32,5 @@ Most of the work here is original, but there are some notable exceptions: - Takao Gothic font by Jun Kobayashi et al (https://launchpad.net/takao-fonts). Modified to add gradients and drop shadow. - Nashgore footprint texture by Valerie Lavender. - Slope alignment utility code by ZZYZX & Nash. - - Intermission fanart: - * Substance20 (@S20TBL) - * Sgt. Shivers (@Sgt_Shivers_) - * Moa Dixøn / Endie (@MoaDixon) - * Monsoon-Soft (@MonsoonSoft) - SiFi270 (Less mean-spirited Keen replacement) - Widescreen version of Hexen finale screens by Nash. diff --git a/cvarinfo.base b/cvarinfo.base index 115217fe7..95d87fe45 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -19,7 +19,6 @@ nosave bool swwm_pois = true; // show points of interest highlighted by omnisi nosave bool swwm_shaders = true; // use pp shaders for some effects server bool swwm_revive = true; // allows the player to do an "emergency reboot" when dying server int swwm_revivecooldown = 60; // cooldown after using a revive, in seconds (0: no limit) -nosave int swwm_interart = 1; // show art on intermissions (2: only fanart, 3: only official renders) server int swwm_blood = 1; // custom blood/gibbing (2: forcibly use our blood) server int swwm_maxblood = 200; // max blood effects at any time server int swwm_maxgibs = 100; // max gibs at any time @@ -36,7 +35,6 @@ server bool swwm_omnibust = false; // add wallbusting effect to all weapons server bool swwm_superfuel = false; // enable unlimited fuel server bool swwm_partytime = false; // killed enemies burst into confetti nosave bool swwm_bigtags = false; // use a bigger font for targeter tags -nosave bool swwm_intermusic = false; // use original intermission music server int swwm_enemydrops = 0; // allow enemies to drop ammo and weapons (-1 - no ammo or weapons, 0 - ammo only, 1 - both) user bool swwm_collectanim = true; // player special gestures for collectables (first person only) nosave int swwm_precisecrosshair = 1; // use mod's own, more precise crosshair (2 - force even when crosshair is not on) @@ -63,7 +61,6 @@ nosave bool swwm_nomapmsg = false; // disables special map dialogue messages nosave bool swwm_weapontooltips = true; // shows a tooltip on weapon operation when first selected nosave string swwm_tooltipshown = ""; // which weapons have already had their tooltips displayed nosave noarchive bool swwm_tooltipnote = false; // set if the note on how to disable tooltips was already displayed -nosave bool swwm_nointertips = false; // hides intermission tips, in case you don't want to see them nosave bool swwm_beepboop = false; // prompts the Demolitionist to go "beep", "boop" and "bop" when pressing any switch (may get annoying) nosave string swwm_menuposehistory = ""; // stores currently seen poses for the main menu, for shuffling nosave string swwm_titlesubhistory = ""; // stores currently seen subtitles for the title screen, for shuffling diff --git a/gldefs/misc.txt b/gldefs/misc.txt index aebb0cd3a..430bdaaa9 100644 --- a/gldefs/misc.txt +++ b/gldefs/misc.txt @@ -303,107 +303,71 @@ Material Sprite "MBRNB0" { Shader "shaders/glsl/Whew.fp" } -Material Texture "graphics/InterBG.png" +Material Texture "graphics/Renders/Marisa.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Endie.jpg" +Material Texture "graphics/Renders/Marisa2.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa.jpg" +Material Texture "graphics/Renders/Marisa3.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa2.jpg" +Material Texture "graphics/Renders/Marisa4.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa3.jpg" +Material Texture "graphics/Renders/Marisa5.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa4.jpg" +Material Texture "graphics/Renders/Marisa6.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa5.jpg" +Material Texture "graphics/Renders/Marisa7.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa6.jpg" +Material Texture "graphics/Renders/Marisa8.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa7.jpg" +Material Texture "graphics/Renders/Marisa9.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa8.jpg" +Material Texture "graphics/Renders/Marisa10.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa9.jpg" +Material Texture "graphics/Renders/Marisa11.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa10.jpg" +Material Texture "graphics/Renders/Marisa12.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa11.jpg" +Material Texture "graphics/Renders/Marisa13.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa12.jpg" +Material Texture "graphics/Renders/Marisa14.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa13.jpg" +Material Texture "graphics/Renders/Marisa15.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa14.jpg" +Material Texture "graphics/Renders/Marisa16.jpg" { Shader "shaders/glsl/Bilinear.fp" } -Material Texture "graphics/Fanart/Marisa15.jpg" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Marisa16.jpg" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Marisa17.jpg" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Monsoon.jpg" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Monsoon2.jpg" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Monsoon3.png" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Monsoon4.png" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/S20TBL.jpg" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Shivers.png" -{ - Shader "shaders/glsl/Bilinear.fp" -} -Material Texture "graphics/Fanart/Shivers2.png" +Material Texture "graphics/Renders/Marisa17.jpg" { Shader "shaders/glsl/Bilinear.fp" } diff --git a/graphics/Fanart/Endie.jpg b/graphics/Fanart/Endie.jpg deleted file mode 100644 index 8266ed5a1..000000000 Binary files a/graphics/Fanart/Endie.jpg and /dev/null differ diff --git a/graphics/Fanart/Monsoon.jpg b/graphics/Fanart/Monsoon.jpg deleted file mode 100644 index 1e8f06a5a..000000000 Binary files a/graphics/Fanart/Monsoon.jpg and /dev/null differ diff --git a/graphics/Fanart/Monsoon2.jpg b/graphics/Fanart/Monsoon2.jpg deleted file mode 100644 index b680479e4..000000000 Binary files a/graphics/Fanart/Monsoon2.jpg and /dev/null differ diff --git a/graphics/Fanart/Monsoon3.png b/graphics/Fanart/Monsoon3.png deleted file mode 100644 index 0a44acb94..000000000 Binary files a/graphics/Fanart/Monsoon3.png and /dev/null differ diff --git a/graphics/Fanart/Monsoon4.png b/graphics/Fanart/Monsoon4.png deleted file mode 100644 index 7dd55219f..000000000 Binary files a/graphics/Fanart/Monsoon4.png and /dev/null differ diff --git a/graphics/Fanart/S20TBL.jpg b/graphics/Fanart/S20TBL.jpg deleted file mode 100644 index 6f07323b9..000000000 Binary files a/graphics/Fanart/S20TBL.jpg and /dev/null differ diff --git a/graphics/Fanart/Shivers.png b/graphics/Fanart/Shivers.png deleted file mode 100644 index a4ef87a65..000000000 Binary files a/graphics/Fanart/Shivers.png and /dev/null differ diff --git a/graphics/Fanart/Shivers2.png b/graphics/Fanart/Shivers2.png deleted file mode 100644 index 56e3c74cf..000000000 Binary files a/graphics/Fanart/Shivers2.png and /dev/null differ diff --git a/graphics/InterBG.png b/graphics/InterBG.png deleted file mode 100644 index ed83ce5c8..000000000 Binary files a/graphics/InterBG.png and /dev/null differ diff --git a/graphics/Fanart/Marisa.jpg b/graphics/Renders/Marisa.jpg similarity index 100% rename from graphics/Fanart/Marisa.jpg rename to graphics/Renders/Marisa.jpg diff --git a/graphics/Fanart/Marisa10.jpg b/graphics/Renders/Marisa10.jpg similarity index 100% rename from graphics/Fanart/Marisa10.jpg rename to graphics/Renders/Marisa10.jpg diff --git a/graphics/Fanart/Marisa11.jpg b/graphics/Renders/Marisa11.jpg similarity index 100% rename from graphics/Fanart/Marisa11.jpg rename to graphics/Renders/Marisa11.jpg diff --git a/graphics/Fanart/Marisa12.jpg b/graphics/Renders/Marisa12.jpg similarity index 100% rename from graphics/Fanart/Marisa12.jpg rename to graphics/Renders/Marisa12.jpg diff --git a/graphics/Fanart/Marisa13.jpg b/graphics/Renders/Marisa13.jpg similarity index 100% rename from graphics/Fanart/Marisa13.jpg rename to graphics/Renders/Marisa13.jpg diff --git a/graphics/Fanart/Marisa14.jpg b/graphics/Renders/Marisa14.jpg similarity index 100% rename from graphics/Fanart/Marisa14.jpg rename to graphics/Renders/Marisa14.jpg diff --git a/graphics/Fanart/Marisa15.jpg b/graphics/Renders/Marisa15.jpg similarity index 100% rename from graphics/Fanart/Marisa15.jpg rename to graphics/Renders/Marisa15.jpg diff --git a/graphics/Fanart/Marisa16.jpg b/graphics/Renders/Marisa16.jpg similarity index 100% rename from graphics/Fanart/Marisa16.jpg rename to graphics/Renders/Marisa16.jpg diff --git a/graphics/Fanart/Marisa17.jpg b/graphics/Renders/Marisa17.jpg similarity index 100% rename from graphics/Fanart/Marisa17.jpg rename to graphics/Renders/Marisa17.jpg diff --git a/graphics/Fanart/Marisa2.jpg b/graphics/Renders/Marisa2.jpg similarity index 100% rename from graphics/Fanart/Marisa2.jpg rename to graphics/Renders/Marisa2.jpg diff --git a/graphics/Fanart/Marisa3.jpg b/graphics/Renders/Marisa3.jpg similarity index 100% rename from graphics/Fanart/Marisa3.jpg rename to graphics/Renders/Marisa3.jpg diff --git a/graphics/Fanart/Marisa4.jpg b/graphics/Renders/Marisa4.jpg similarity index 100% rename from graphics/Fanart/Marisa4.jpg rename to graphics/Renders/Marisa4.jpg diff --git a/graphics/Fanart/Marisa5.jpg b/graphics/Renders/Marisa5.jpg similarity index 100% rename from graphics/Fanart/Marisa5.jpg rename to graphics/Renders/Marisa5.jpg diff --git a/graphics/Fanart/Marisa6.jpg b/graphics/Renders/Marisa6.jpg similarity index 100% rename from graphics/Fanart/Marisa6.jpg rename to graphics/Renders/Marisa6.jpg diff --git a/graphics/Fanart/Marisa7.jpg b/graphics/Renders/Marisa7.jpg similarity index 100% rename from graphics/Fanart/Marisa7.jpg rename to graphics/Renders/Marisa7.jpg diff --git a/graphics/Fanart/Marisa8.jpg b/graphics/Renders/Marisa8.jpg similarity index 100% rename from graphics/Fanart/Marisa8.jpg rename to graphics/Renders/Marisa8.jpg diff --git a/graphics/Fanart/Marisa9.jpg b/graphics/Renders/Marisa9.jpg similarity index 100% rename from graphics/Fanart/Marisa9.jpg rename to graphics/Renders/Marisa9.jpg diff --git a/language.def_base b/language.def_base index 18a3be84d..183b98679 100644 --- a/language.def_base +++ b/language.def_base @@ -655,6 +655,14 @@ SWWM_TITLESUB11 = "Slaughterwads too hard? No problem!\nJust play them with this SWWM_TITLESUB12 = " Did you know this subtitle is misaligned?"; SWWM_TITLESUB13 = "I like big explosions and I cannot lie"; SWWM_TITLESUB14 = "If you wrapped a cat in a tortilla,\nwould you call that a purrito?"; +SWWM_INTERDONE = "COMPLETED"; +SWWM_INTERNEXT = "NEXT STOP"; +SWWM_INTERKILLS = "MONSTERS DEFEATED:"; +SWWM_INTERITEMS = "ITEMS COLLECTED:"; +SWWM_INTERSECRETS = "SECRETS UNCOVERED:"; +SWWM_INTERTIME = "YOUR TIME:"; +SWWM_INTERPAR = "PAR TIME:"; +SWWM_INTERTOTAL = "TOTAL TIME:"; SWWM_UNIT_METER = "m"; SWWM_UNIT_KILOMETER = "km"; SWWM_UNIT_KPH = "kph"; @@ -1100,34 +1108,25 @@ SWWM_INTERTIP207 = "The Sheen HMG's three speed options allow for optimal balanc SWWM_INTERTIP208 = "\"Faster and farther than a plague only hatred can extend.\"\n — Nukurines Mei Mess"; SWWM_INTERTIP209 = "This mod requires hardware rendering. If you've come this far without realizing that, you have a problem."; SWWM_INTERTIP210 = "\"Ian Kelliher is like the Elon Musk of his generation, and I automatically hate him for that.\"\n — Saya Miyamoto"; -// intermission fanart -SWWM_FANART = "Art: "; -SWWM_NFANART = "25"; -SWWM_FANART1 = "S20TBL.jpg;Substance20 (@S20_TBL)"; -SWWM_FANART2 = "Shivers.png;Sgt. Shivers (@Sgt_Shivers_)"; -SWWM_FANART3 = "Shivers2.png;Sgt. Shivers (@Sgt_Shivers_)"; -SWWM_FANART4 = "Endie.jpg;Moa Dixøn / Endie (@MoaDixon)"; -SWWM_FANART5 = "Marisa.jpg"; -SWWM_FANART6 = "Marisa2.jpg"; -SWWM_FANART7 = "Marisa3.jpg"; -SWWM_FANART8 = "Marisa4.jpg"; -SWWM_FANART9 = "Marisa5.jpg"; -SWWM_FANART10 = "Marisa6.jpg"; -SWWM_FANART11 = "Marisa7.jpg"; -SWWM_FANART12 = "Marisa8.jpg"; -SWWM_FANART13 = "Marisa9.jpg"; -SWWM_FANART14 = "Marisa10.jpg"; -SWWM_FANART15 = "Marisa11.jpg"; -SWWM_FANART16 = "Marisa12.jpg"; -SWWM_FANART17 = "Marisa13.jpg"; -SWWM_FANART18 = "Marisa14.jpg"; -SWWM_FANART19 = "Monsoon.jpg;Monsoon-Soft (@MonsoonSoft)"; -SWWM_FANART20 = "Monsoon2.jpg;Monsoon-Soft (@MonsoonSoft)"; -SWWM_FANART21 = "Monsoon3.png;Monsoon-Soft (@MonsoonSoft)"; -SWWM_FANART22 = "Monsoon4.png;Monsoon-Soft (@MonsoonSoft)"; -SWWM_FANART23 = "Marisa15.jpg"; -SWWM_FANART24 = "Marisa16.jpg"; -SWWM_FANART25 = "Marisa17.jpg"; +// intermission renders +SWWM_NRENDER = "17"; +SWWM_RENDER1 = "Marisa.jpg"; +SWWM_RENDER2 = "Marisa2.jpg"; +SWWM_RENDER3 = "Marisa3.jpg"; +SWWM_RENDER4 = "Marisa4.jpg"; +SWWM_RENDER5 = "Marisa5.jpg"; +SWWM_RENDER6 = "Marisa6.jpg"; +SWWM_RENDER7 = "Marisa7.jpg"; +SWWM_RENDER8 = "Marisa8.jpg"; +SWWM_RENDER9 = "Marisa9.jpg"; +SWWM_RENDER10 = "Marisa10.jpg"; +SWWM_RENDER11 = "Marisa11.jpg"; +SWWM_RENDER12 = "Marisa12.jpg"; +SWWM_RENDER13 = "Marisa13.jpg"; +SWWM_RENDER14 = "Marisa14.jpg"; +SWWM_RENDER15 = "Marisa15.jpg"; +SWWM_RENDER16 = "Marisa16.jpg"; +SWWM_RENDER17 = "Marisa17.jpg"; // achievements SWWM_ACHIEVEMENT_ALLCOLL_TAG = "The Full Set"; SWWM_ACHIEVEMENT_ALLCOLL_TXT = "Obtain all collectibles in a single save"; diff --git a/language.def_menu b/language.def_menu index 7def3193b..57d50e427 100644 --- a/language.def_menu +++ b/language.def_menu @@ -55,9 +55,6 @@ SWWM_REVIVECOOLDOWN = "Reboot Cooldown"; SWWM_UNLIMITED = "Unlimited"; SWWM_ONERETRY = "One Retry"; SWWM_NONE = "None"; -SWWM_INTERART = "Intermission Art"; -SWWM_NORENDER = "Yes (Fanart Only)"; -SWWM_NOFANART = "Yes (Renders Only)"; SWWM_BTITLE = "Balance Options"; SWWM_BLOOD = "Enable Custom Blood"; SWWM_FUZZ = "Enable Animated Menu BG"; @@ -71,7 +68,6 @@ SWWM_OMNIBUST = "Omni-Busting"; SWWM_SUPERFUEL = "Unlimited Fuel"; SWWM_PARTYTIME = "Super Fun Party Time"; SWWM_BIGTAGS = "Use Large Font for Names"; -SWWM_INTERMUSIC = "Use Original Intermission Music"; SWWM_MAXBLOOD = "Blood Limit"; SWWM_MAXGIBS = "Gib Limit"; SWWM_MAXCASINGS = "Casing Limit"; @@ -148,7 +144,6 @@ SWWM_WEAPONTOOLTIPS = "Weapon Tooltips"; SWWM_RESETTOOLTIPS = "Reset Weapon Tooltips"; SWWM_CRESET = "Reset to Defaults"; SWWM_ARESET = "Wipe Achievements"; -SWWM_NOINTERTIPS = "Hide Intermission Tips"; SWWM_BEEPBOOP = "Switch Emoting"; SWWM_VOICEAMP = "Voice Amplification"; SWWM_CLEARFX = "Clear All Effects"; @@ -216,7 +211,6 @@ TOOLTIP_SWWM_POIS = "Show points of interest (such as key items and exits) when TOOLTIP_SWWM_SHADERS = "Use postprocess shaders for things like powerups and the Silver Bullet scope. You can disable this if you'd prefer something lighter on the eyes."; 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. Alternatively, you can also set it to only allow one reboot per map (enforced on expert difficulties)."; -TOOLTIP_SWWM_INTERART = "If enabled, displays randomly selected fanart and official renders during intermissions. There are extra options to only show each category."; TOOLTIP_SWWM_BLOOD = "Enable custom blood and gore effects, adapted from Soundless Mound. Other loaded mods' gore will take priority unless set to \"Always\". BLUDTYPE patches from Nashgore are supported."; TOOLTIP_SWWM_FUZZ = "Toggling this off is recommended if you're recording/streaming as this effect can harm video quality."; TOOLTIP_SWWM_CBTALL = "Allows the Wallbuster and other weapons capable of map geometry destruction to break pretty much anything, not just doors and platforms. Note that this can break some maps, which is why this option is here."; @@ -228,7 +222,6 @@ TOOLTIP_SWWM_OMNIBUST = "Allows any weapon to potentially bust walls. This is ob TOOLTIP_SWWM_SUPERFUEL = "Your fuel never runs out."; TOOLTIP_SWWM_PARTYTIME = "When something dies, it shoots out a cloud of confetti."; TOOLTIP_SWWM_BIGTAGS = "By default name labels on healthbars are shown with a small, compact font. Enabling this will use a bigger one."; -TOOLTIP_SWWM_INTERMUSIC = "If enabled, intermission screens will use the original music from the current IWAD or map pack."; TOOLTIP_SWWM_MAXBLOOD = "Caps the maximum amount of blood effects. Surpassing this limit will cause the excess to fade out."; TOOLTIP_SWWM_MAXGIBS = "Caps the maximum amount of gibs. Surpassing this limit will cause the excess to fade out."; TOOLTIP_SWWM_MAXCASINGS = "Caps the maximum amount of casings and spent magazines. Surpassing this limit will cause the excess to fade out."; @@ -261,7 +254,6 @@ TOOLTIP_SWWM_WEAPONTOOLTIPS = "Shows a summary of controls when a weapon is sele TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resets weapon tooltips so you can see them all over again."; TOOLTIP_EVENT_SWWMRESETCVARS = "Resets all the mod's settings to their original values."; TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Erases all your archievement progress."; -TOOLTIP_SWWM_NOINTERTIPS = "Hides intermission tips, in case you don't want to see them."; TOOLTIP_SWWM_BEEPBOOP = "The Demolitionist will make cute noises whenever pressing any usable line. This might get annoying, so it's optional."; TOOLTIP_SWWM_VOICEAMP = "At their default volume, the Demolitionist's voice lines might be drowned out by in-game audio. This sets an additional amplification level so they're louder than other sounds."; TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Fades out any active blood, gore, debris and casings."; @@ -338,7 +330,6 @@ SWWM_CASSETS = "Additional Assets:"; SWWM_ASSKEEN = "Less Mean-Spirited Keen Replacement"; SWWM_CMUSIC = "Music Tracks Used:"; SWWM_CVOICE = "Voices:"; -SWWM_CFANART = "Intermission Fanart:"; SWWM_CPATRON = "Patreon Backers:"; SWWM_CTHANK = "Special Thanks:"; SWWM_CMAB2 = "For your work in Lithium, one of the mods that have inspired me the most. I'm really really happy to have met you."; diff --git a/language.es_base b/language.es_base index 732152c7e..449bad929 100644 --- a/language.es_base +++ b/language.es_base @@ -545,6 +545,14 @@ SWWM_TITLESUB11 = "¿Slaughterwads demasiado difíciles? ¡No hay problema!\n¡S SWWM_TITLESUB12 = " ¿Sabías que este subtítulo está desencuadrado?"; SWWM_TITLESUB13 = "Me gustan las grandes explosiones y no puedo mentir"; SWWM_TITLESUB14 = "Si las gafas son buenas para la vista,\n¿por que no llevan lentes?"; +SWWM_INTERDONE = "COMPLETADO"; +SWWM_INTERNEXT = "PRÓXIMA PARADA"; +SWWM_INTERKILLS = "MONSTRUOS DERROTADOS:"; +SWWM_INTERITEMS = "ÍTEMS RECOLECTADOS:"; +SWWM_INTERSECRETS = "SECRETOS DESCUBIERTOS:"; +SWWM_INTERTIME = "TU TIEMPO:"; +SWWM_INTERPAR = "TIEMPO PAR:"; +SWWM_INTERTOTAL = "TIEMPO TOTAL:"; SWWM_YOURSELF = "Tú"; SWWM_DOKIDOKI = "El Poder del Amor™"; SWWM_GRAVKILL = "Gravedad"; @@ -978,8 +986,6 @@ SWWM_INTERTIP207 = "Las tres opciones de velocidad de la Ametralladora Sheen per SWWM_INTERTIP208 = "\"Más veloz y lejano que una plaga solo el odio puede extenderse.\"\n — Nukurines Mei Mess"; SWWM_INTERTIP209 = "Este mod requiere renderizado por hardware. Si has llegado hasta este punto sin darte cuenta de eso, tienes un problema."; SWWM_INTERTIP210 = "\"Ian Kelliher es como el Elon Musk de su generación, y lo odio automáticamente por eso.\"\n — Saya Miyamoto"; -// intermission fanart -SWWM_FANART = "Arte: "; // achievements SWWM_ACHIEVEMENT_ALLCOLL_TAG = "El Set Completo"; SWWM_ACHIEVEMENT_ALLCOLL_TXT = "Obtén todos los coleccionables en una sola partida"; diff --git a/language.es_menu b/language.es_menu index c033616be..7052fce32 100644 --- a/language.es_menu +++ b/language.es_menu @@ -54,9 +54,6 @@ SWWM_REVIVECOOLDOWN = "Tiempo de recarga de Reinicio"; SWWM_UNLIMITED = "Ilimitado"; SWWM_ONERETRY = "Un Reintento"; SWWM_NONE = "Ninguno"; -SWWM_INTERART = "Arte de Intermisión"; -SWWM_NORENDER = "Sí (Sólo Fanart)"; -SWWM_NOFANART = "Sí (Sólo Renders)"; SWWM_BTITLE = "Opciones de Balance"; SWWM_BLOOD = "Habilitar Sangre Personalizada"; SWWM_FUZZ = "Habilitar Fondo Animado de Menú"; @@ -70,7 +67,6 @@ SWWM_OMNIBUST = "Omni-Reventamiento"; SWWM_SUPERFUEL = "Combustible Ilimitado"; SWWM_PARTYTIME = "Modo Fiesta Tope"; SWWM_BIGTAGS = "Usar Fuente Grande para Nombres"; -SWWM_INTERMUSIC = "Usar Música de Intermisión Original"; SWWM_MAXBLOOD = "Límite de Sangre"; SWWM_MAXGIBS = "Límite de Vísceras"; SWWM_MAXCASINGS = "Límite de Casquillos"; @@ -146,7 +142,6 @@ SWWM_WEAPONTOOLTIPS = "Ayuda de Armas"; SWWM_RESETTOOLTIPS = "Resetear Ayuda de Armas"; SWWM_CRESET = "Restaurar Predeterminado"; SWWM_ARESET = "Borrar Logros"; -SWWM_NOINTERTIPS = "Ocultar Consejos de Intermisión"; SWWM_BEEPBOOP = "Ruiditos de Activación"; SWWM_VOICEAMP = "Amplificación de Voz"; SWWM_CLEARFX = "Limpiar todos los Efectos"; @@ -213,7 +208,6 @@ TOOLTIP_SWWM_POIS = "Muestra puntos de interés (tales como llaves y salidas) cu TOOLTIP_SWWM_SHADERS = "Usa shaders de postprocesado para cosas como potenciadores y la mira del Silver Bullet. Puedes desactivar esto si prefieres algo más ligero para la vista."; 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. Alternativamente, puedes elegir que solo se permita un reinicio por mapa (forzado en dificultades expertas)."; -TOOLTIP_SWWM_INTERART = "Si está activado, muestra fanart y renders oficiales aleatorios durante intermisiones. Hay opciones extra para mostrar sólo una categoría."; TOOLTIP_SWWM_BLOOD = "Activa efectos de sangre y vísceras personalizados, adaptados de Soundless Mound. La sangre de otros mods tiene prioridad a menos que se elija \"Siempre\". Se soportan parches BLUDTYPE para Nashgore."; TOOLTIP_SWWM_FUZZ = "Desactivar esto es recomendado si estás grabando o haciendo streaming, ya que este effecto puede dañar la calidad del vídeo."; TOOLTIP_SWWM_CBTALL = "Permite a la Wallbuster y otras armas capaces de reventar geometría del mapa destruír casi cualquier cosa, no solo puertas y plataformas. Ten en cuenta que esto puede romper algunos mapas, razón de que haya esta opción."; @@ -225,7 +219,6 @@ TOOLTIP_SWWM_OMNIBUST = "Permite que cualquier arma puede potencialmente reventa TOOLTIP_SWWM_SUPERFUEL = "Tu combustible no se agota nunca."; TOOLTIP_SWWM_PARTYTIME = "Cuando algo muere, expulsa una nube de confetti."; TOOLTIP_SWWM_BIGTAGS = "Por defecto los nombres de las barras de vida usan una fuente pequeña. Activando esta opción, se cambiará por una mayor."; -TOOLTIP_SWWM_INTERMUSIC = "Al activar, las pantallas de intermisión usan la música original del IWAD o pack de mapas usado."; TOOLTIP_SWWM_MAXBLOOD = "Limita la cantidad máxima de efectos de sangre. Sobrepasar este límite causará que el exceso se desvanezca."; TOOLTIP_SWWM_MAXGIBS = "Limita la cantidad máxima de vísceras. Sobrepasar este límite causará que el exceso se desvanezca."; TOOLTIP_SWWM_MAXCASINGS = "Limita la cantidad máxima de casquillos y cargadores usados. Sobrepasar este límite causará que el exceso se desvanezca."; @@ -258,7 +251,6 @@ TOOLTIP_SWWM_WEAPONTOOLTIPS = "Muestra un resumen de controles cuando se selecci TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resetea la ayuda de armas para que puedas volver a verla de nuevo."; TOOLTIP_EVENT_SWWMRESETCVARS = "Resetea todas las opciones del mod a sus valores originales."; TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Borra todo tu progreso de logros."; -TOOLTIP_SWWM_NOINTERTIPS = "Oculta los consejos de intermisión, por si no quieres verlos."; TOOLTIP_SWWM_BEEPBOOP = "La Demolicionista hará ruiditos adorables cuando pulse cualquier línea utilizable. Esto puede que resulte cansino, así que es opcional."; TOOLTIP_SWWM_VOICEAMP = "A su volumen normal, las voces de la Demolicionista pueden ser ahogadas por el audio del juego. Con esto se le dá un nivel de amplificación extra para que sean más estridentes que otros sonidos."; TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Desvanece cualquier sangre, vísceras, escombros y casquillos activos."; @@ -296,7 +288,6 @@ SWWM_CASSETS = "Assets Adicionales:"; SWWM_ASSKEEN = "Reemplazo Menos Vil de Keen"; SWWM_CMUSIC = "Música Usada:"; SWWM_CVOICE = "Voces:"; -SWWM_CFANART = "Fanart de Intermisión:"; SWWM_CPATRON = "Mecenas de Patreon:"; SWWM_CTHANK = "Agradecimientos Especiales:"; SWWM_CMAB2 = "Por tu trabajo en Lithium, uno de los mods que más me han inspirado. Me alegro muchísimo de haberte conocido."; diff --git a/language.version b/language.version index e021a7d2d..3019fcbd4 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r951 \cu(Tue 5 Sep 23:33:46 CEST 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r951 \cu(2023-09-05 23:33:46)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r952 \cu(Sat 9 Sep 14:47:30 CEST 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r952 \cu(2023-09-09 14:47:30)\c-"; diff --git a/menudef.txt b/menudef.txt index 9fd4fbb91..28cf43c0f 100644 --- a/menudef.txt +++ b/menudef.txt @@ -67,13 +67,6 @@ OptionValue "SWWMPistolStart" 1, "$SWWM_PISTOLSTART_MAP" 2, "$SWWM_PISTOLSTART_CLUSTER" } -OptionValue "SWWMInterArt" -{ - 0, "$TXT_NO" - 1, "$TXT_YES" - 2, "$SWWM_NORENDER" - 3, "$SWWM_NOFANART" -} OptionValue "SWWMTagColor" { 0, "$SWWM_COL_0" @@ -163,12 +156,6 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_POIS", "swwm_pois", "YesNo" } Option "$SWWM_NOMAPMSG", "swwm_nomapmsg", "NoYes" - IfGame(Doom, Heretic) - { - Option "$SWWM_INTERART", "swwm_interart", "SWWMInterArt" - Option "$SWWM_NOINTERTIPS", "swwm_nointertips", "YesNo" - Option "$SWWM_INTERMUSIC", "swwm_intermusic", "YesNo" - } Option "$SWWM_NOINTROEX", "swwm_nointroex", "YesNo" Option "$SWWM_FILTERACHIEVEMENTS", "swwm_filterachievements", "SWWMFilterAchievements" Option "$SWWM_SHOWMAPTITLE", "swwm_showmaptitle", "YesNo" diff --git a/sndinfo.base b/sndinfo.base index 89682ce15..4225b9680 100644 --- a/sndinfo.base +++ b/sndinfo.base @@ -86,6 +86,10 @@ $limit misc/flame 32 misc/magitem = "sounds/general/magitem.ogg" $limit misc/magitem 16 misc/newarea = "sounds/general/AreaName.ogg" +$alias misc/interstart title/explo +$alias misc/intercnt menu/demoscroll +$alias misc/intercntdone menu/buyinv +$alias misc/interdone misc/w_pkup misc/underwater = "sounds/general/uWater1a.ogg" misc/underslime = "sounds/general/uGoop1.ogg" diff --git a/zmapinfo.txt b/zmapinfo.txt index 03a1865fd..ca596747c 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -4,9 +4,7 @@ GameInfo PlayerClasses = "Demolitionist" StatusBarClass = "SWWMStatusBar" BackpackType = "HammerspaceEmbiggener" - StatScreen_Single = "SWWMStatScreen_SP" - StatScreen_Coop = "SWWMStatScreen_Coop" - StatScreen_DM = "SWWMStatScreen_DM" + StatScreen_Single = "SWWMStatScreen" QuitSound = "misc/teleport" QuitMessages = "$QUITMSG", "$QUITMSG1", "$QUITMSG2", "$QUITMSG3", "$QUITMSG4", "$QUITMSG5", "$QUITMSG6", "$QUITMSG7", diff --git a/zscript.txt b/zscript.txt index 73a86163a..cb657d291 100644 --- a/zscript.txt +++ b/zscript.txt @@ -66,9 +66,6 @@ version "4.11" #include "zscript/menu/swwm_menus.zsc" #include "zscript/menu/swwm_title.zsc" #include "zscript/menu/swwm_inter.zsc" -#include "zscript/menu/swwm_inter_sp.zsc" -#include "zscript/menu/swwm_inter_coop.zsc" -#include "zscript/menu/swwm_inter_dm.zsc" #include "zscript/menu/swwm_help.zsc" #include "zscript/menu/swwm_credits.zsc" #include "zscript/menu/swwm_achievementmenu.zsc" diff --git a/zscript/menu/swwm_credits.zsc b/zscript/menu/swwm_credits.zsc index 430675184..72e5edff1 100644 --- a/zscript/menu/swwm_credits.zsc +++ b/zscript/menu/swwm_credits.zsc @@ -100,8 +100,8 @@ Class SWWMCreditsMenu : GenericMenu TextureID bgtex; TextureID logo; String stitle, stitle2; - String sdev, sassets, smusic, svoice, sfanart, slocal, spatrons, sthanks; - Array cdev, cassets, cmusic, cvoice, cfanart, clocal, cpatrons, cthanks; + String sdev, sassets, smusic, svoice, slocal, spatrons, sthanks; + Array cdev, cassets, cmusic, cvoice, clocal, cpatrons, cthanks; String oldlang; Vector2 ss; double hs; @@ -144,7 +144,6 @@ Class SWWMCreditsMenu : GenericMenu sassets = StringTable.Localize("$SWWM_CASSETS"); smusic = StringTable.Localize("$SWWM_CMUSIC"); svoice = StringTable.Localize("$SWWM_CVOICE"); - sfanart = StringTable.Localize("$SWWM_CFANART"); slocal = StringTable.Localize("$SWWM_CLOCAL"); spatrons = StringTable.Localize("$SWWM_CPATRON"); sthanks = StringTable.Localize("$SWWM_CTHANK"); @@ -161,10 +160,6 @@ Class SWWMCreditsMenu : GenericMenu cmusic.Push(new("SWWMCreditsEntry").Init("Teque","Traumatic State\nDragony\nHidden Tune #242\nHypercardish 1.1")); cmusic.Push(new("SWWMCreditsEntry").Init("BouncyTEM","Solitary Apprehension")); cvoice.Push(new("SWWMCreditsEntry").Init("Vyolette","$T_DEMOLITIONIST")); - cfanart.Push(new("SWWMCreditsEntry").Init("Substance20 (@S20TBL)")); - cfanart.Push(new("SWWMCreditsEntry").Init("Sgt. Shivers (@Sgt_Shivers_)")); - cfanart.Push(new("SWWMCreditsEntry").Init("Moa Dixøn / Endie (@MoaDixon)")); - cfanart.Push(new("SWWMCreditsEntry").Init("Monsoon-Soft (@MonsoonSoft)")); clocal.Push(new("SWWMCreditsEntry").Init("Marisa the Magician","$SWWM_LOCES")); cpatrons.Push(new("SWWMCreditsEntry").Init("Snacks")); cpatrons.Push(new("SWWMCreditsEntry").Init("john")); @@ -215,11 +210,6 @@ Class SWWMCreditsMenu : GenericMenu theight += ENTRY_PAD; theight += c.height; } - foreach ( c:cfanart ) - { - theight += ENTRY_PAD; - theight += c.height; - } foreach ( c:clocal ) { theight += ENTRY_PAD; @@ -312,14 +302,6 @@ Class SWWMCreditsMenu : GenericMenu yy += ENTRY_PAD; yy += c.Draw(ss,xx,yy); } - // fanart - yy += SECTION_PAD; - yy += DrawSection(xx,yy,sfanart); - foreach ( c:cfanart ) - { - yy += ENTRY_PAD; - yy += c.Draw(ss,xx,yy); - } // localization yy += SECTION_PAD; yy += DrawSection(xx,yy,slocal); diff --git a/zscript/menu/swwm_inter.zsc b/zscript/menu/swwm_inter.zsc index 0c90af3e1..f7f7c9d83 100644 --- a/zscript/menu/swwm_inter.zsc +++ b/zscript/menu/swwm_inter.zsc @@ -1,20 +1,41 @@ // Custom intermission screens -Class SWWMStatScreen : StatusScreen abstract +Class SWWMStatScreen : StatusScreen { - transient TextureID bgtex, arttex; + TextureID gradtex, arttex, bgtex; + int glarestr, sndcnt; int whichart, whichtip; + int tipalphastate; + double tipalpha; + String tipstr; + transient BrokenLines tipl; + Font TewiFont, TewiFontOutline, MiniwiFont; + double FracTic; // for smooth animations + bool bNoDrawNextLoc; + int tipflash; // for switching + + // customizable colors + int lnamecolor, lauthcolor; // name / author text + int lsubcolor; // finished / entering text + int statbasecolor, statcolor0, // stat label / color for numbers + statcolor1, statcolor2; // color for 100% / color for SUCKS + int tipcolor0, tipcolor1; // tip header / tip text + Color glarecolor; // for the eye glare when advancing + int flashcolor, tipflashcolor; + double hs, hs2; Vector2 ss, ss2, origin, origin2; Font mSmallFont; - String tipstr; - transient BrokenLines tipl; double bgfade; bool bFade; + SWWMStaticHandler shnd; + override void Start( wbstartstruct wbstartstruct ) { Super.Start(wbstartstruct); - mSmallFont = Font.GetFont('TewiFont'); + TewiFont = Font.GetFont('TewiFont'); + TewiFontOutline = Font.GetFont('TewiFontOutline'); + MiniwiFont = Font.GetFont('MiniwiFont'); // support for old author text style int iof; for ( int i=0; i<=1; i++ ) @@ -37,27 +58,182 @@ Class SWWMStatScreen : StatusScreen abstract // level name may contain trailing whitespace due to DEHACKED nonsense, so strip it lnametexts[i].StripRight(); } + tipalpha = -1.; + // defaults + lnamecolor = Font.CR_WHITE; + lauthcolor = Font.CR_DARKGRAY; + lsubcolor = Font.CR_SAPPHIRE; + statbasecolor = Font.CR_SAPPHIRE; + statcolor0 = Font.CR_WHITE; + statcolor1 = Font.CR_GOLD; + statcolor2 = Font.CR_RED; + tipcolor0 = Font.CR_SAPPHIRE; + tipcolor1 = Font.CR_WHITE; + flashcolor = Font.FindFontColor('MiniFlash'); + tipflashcolor = Font.FindFontColor('MiniWhiteFlash'); + glarecolor = 0xFF4080FF; } override void StartMusic() { - if ( swwm_intermusic ) Level.SetInterMusic(wbs.next); - else S_ChangeMusic("music/DRAGONY.XM"); + S_ChangeMusic("music/DRAGONY.XM"); } + + private String StatCnt( int a, int b ) + { + if ( b <= 0 ) return "N/A"; + return String.Format("%s \cu/\c- %s \cu(\c-%3d%%\cu)",SWWMUtility.ThousandsNum(max(a,0)),SWWMUtility.ThousandsNum(b),GetPct(a,b)); + } + + private String TimeStr( int secs ) + { + secs = max(secs,0); + int h = secs/3600; + int m = (secs/60)%60; + int s = secs%60; + if ( h ) return String.Format("%02d\cu:\c-%02d\cu:\c-%02d",h,m,s); + return String.Format("%02d\cu:\c-%02d",m,s); + } + + private int GetPct( int a, int b ) + { + if ( a < 0 ) return 0; + if ( b <= 0 ) return 100; // for "missed" percentage + return (a*100)/b; + } + + override int DrawLF() + { + if ( sp_state < 1 ) return 0; + double GameSecs = (bcnt+FracTic)/double(GameTicRate); + int th = (TewiFont.GetHeight()*(8+(!!wbs.partime)+(wbs.totaltime!=Plrs[me].stime))+32)*CleanYFac_1; // height of the stats box + margin + int bh = ((authortexts[0]!="")?(MiniwiFont.GetHeight()+TewiFont.GetHeight()*2+TewiFontOutline.GetHeight()*2):(TewiFont.GetHeight()*2+TewiFontOutline.GetHeight()*2))*CleanYFac_1; // height of the "level finished" box + double xx = Screen.GetWidth()/2; + double yy = (Screen.GetHeight()-th)/2; + if ( (Screen.GetHeight()/CleanYFac_1) < 480 ) + { + // upshift to fit tips + int fct = int(clamp(480-(Screen.GetHeight()/CleanYFac_1),0,80)*.75); + yy -= fct; + } + yy -= bh; + if ( !gradtex ) gradtex = TexMan.CheckForTexture("graphics/M_GRAD.png"); + Screen.DrawTexture(gradtex,false,xx,yy+bh/2,DTA_DestWidth,150*CleanXFac_1,DTA_DestHeight,bh+4*CleanYFac_1,DTA_Rotate,90,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8,DTA_TopOffset,256,DTA_LeftOffset,128); + Screen.DrawTexture(gradtex,false,xx,yy+bh/2,DTA_DestWidth,150*CleanXFac_1,DTA_DestHeight,bh+4*CleanYFac_1,DTA_Rotate,270,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8,DTA_TopOffset,256,DTA_LeftOffset,128); + Screen.DrawText(TewiFont,lnamecolor,xx-TewiFont.StringWidth(lnametexts[0])*CleanXFac_1,yy,lnametexts[0],DTA_ScaleX,CleanXFac_1*2,DTA_ScaleY,CleanYFac_1*2); + yy += TewiFont.GetHeight()*2*CleanYFac_1; + if ( authortexts[0] != "" ) + { + Screen.DrawText(MiniwiFont,lauthcolor,xx-MiniwiFont.StringWidth(authortexts[0])*CleanXFac_1/2,yy,authortexts[0],DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + yy += MiniwiFont.GetHeight()*CleanYFac_1; + } + String str = StringTable.Localize("$SWWM_INTERDONE"); + Screen.DrawText(TewiFontOutline,lsubcolor,xx-TewiFontOutline.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1*2,DTA_ScaleY,CleanYFac_1*2); + if ( (glarestr > 0) && (sp_state < 2) ) + { + double alf = clamp((glarestr-FracTic)/20.,0.,1.)**2; + Screen.DrawText(TewiFontOutline,flashcolor,xx-TewiFontOutline.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1*2,DTA_ScaleY,CleanYFac_1*2,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alf); + } + return 0; + } + override void DrawEL() + { + int th = (TewiFont.GetHeight()*(8+(!!wbs.partime)+(wbs.totaltime!=Plrs[me].stime))+32)*CleanYFac_1; // height of the stats box + margin + int bh = ((authortexts[1]!="")?(MiniwiFont.GetHeight()+TewiFont.GetHeight()*2+TewiFontOutline.GetHeight()*2):(TewiFont.GetHeight()*2+TewiFontOutline.GetHeight()*2))*CleanYFac_1; // height of the "level finished" box + double xx = Screen.GetWidth()/2; + double yy = (Screen.GetHeight()+th)/2; + if ( (Screen.GetHeight()/CleanYFac_1) < 480 ) + { + // upshift to fit tips + int fct = int(clamp(480-(Screen.GetHeight()/CleanYFac_1),0,80)*.75); + yy -= fct; + } + if ( !gradtex ) gradtex = TexMan.CheckForTexture("graphics/M_GRAD.png"); + Screen.DrawTexture(gradtex,false,xx,yy+bh/2,DTA_DestWidth,150*CleanXFac_1,DTA_DestHeight,bh+4*CleanYFac_1,DTA_Rotate,90,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8,DTA_TopOffset,256,DTA_LeftOffset,128); + Screen.DrawTexture(gradtex,false,xx,yy+bh/2,DTA_DestWidth,150*CleanXFac_1,DTA_DestHeight,bh+4*CleanYFac_1,DTA_Rotate,270,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8,DTA_TopOffset,256,DTA_LeftOffset,128); + String str = StringTable.Localize("$SWWM_INTERNEXT"); + Screen.DrawText(TewiFontOutline,lsubcolor,xx-TewiFontOutline.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1*2,DTA_ScaleY,CleanYFac_1*2); + if ( (glarestr > 0) && (sp_state >= 10) ) + { + double alf = clamp((glarestr-FracTic)/20.,0.,1.)**2; + Screen.DrawText(TewiFontOutline,flashcolor,xx-TewiFontOutline.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1*2,DTA_ScaleY,CleanYFac_1*2,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alf); + } + yy += TewiFontOutline.GetHeight()*2*CleanYFac_1; + Screen.DrawText(TewiFont,lnamecolor,xx-TewiFont.StringWidth(lnametexts[1])*CleanXFac_1,yy,lnametexts[1],DTA_ScaleX,CleanXFac_1*2,DTA_ScaleY,CleanXFac_1*2); + yy += TewiFont.GetHeight()*2*CleanYFac_1; + if ( authortexts[0] == "" ) return; + Screen.DrawText(MiniwiFont,lauthcolor,xx-MiniwiFont.StringWidth(authortexts[1])*CleanXFac_1/2,yy,authortexts[1],DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + } + override void drawStats( void ) + { + if ( sp_state < 2 ) return; + int ne = (sp_state>=8)?(8+(!!wbs.partime)+(wbs.totaltime!=Plrs[me].stime)):(sp_state>=6)?6:(sp_state>=4)?4:2; + int th = (TewiFont.GetHeight()*ne)*CleanYFac_1; // height of the stats box + double xx = Screen.GetWidth()/2; + double yy = (Screen.GetHeight()-th)/2; + if ( (Screen.GetHeight()/CleanYFac_1) < 480 ) + { + // upshift to fit tips + int fct = int(clamp(480-(Screen.GetHeight()/CleanYFac_1),0,80)*.75); + yy -= fct; + } + if ( !gradtex ) gradtex = TexMan.CheckForTexture("graphics/M_GRAD.png"); + Screen.DrawTexture(gradtex,false,xx,yy+th/2,DTA_DestWidth,150*CleanXFac_1,DTA_DestHeight,th+4*CleanYFac_1,DTA_Rotate,90,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8,DTA_TopOffset,256,DTA_LeftOffset,128); + Screen.DrawTexture(gradtex,false,xx,yy+th/2,DTA_DestWidth,150*CleanXFac_1,DTA_DestHeight,th+4*CleanYFac_1,DTA_Rotate,270,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8,DTA_TopOffset,256,DTA_LeftOffset,128); + String str = StringTable.Localize("$SWWM_INTERKILLS"); + Screen.DrawText(TewiFont,statbasecolor,xx-80*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StatCnt(cnt_kills[0],wbs.maxkills); + Screen.DrawText(TewiFont,((wbs.maxkills>0)&&(cnt_kills[0]>=wbs.maxkills))?statcolor1:statcolor0,xx+80*CleanXFac_1-TewiFont.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + if ( sp_state < 4 ) return; + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StringTable.Localize("$SWWM_INTERITEMS"); + Screen.DrawText(TewiFont,statbasecolor,xx-80*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StatCnt(cnt_items[0],wbs.maxitems); + Screen.DrawText(TewiFont,((wbs.maxitems>0)&&(cnt_items[0]>=wbs.maxitems))?statcolor1:statcolor0,xx+80*CleanXFac_1-TewiFont.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + if ( sp_state < 6 ) return; + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StringTable.Localize("$SWWM_INTERSECRETS"); + Screen.DrawText(TewiFont,statbasecolor,xx-80*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StatCnt(cnt_secret[0],wbs.maxsecret); + Screen.DrawText(TewiFont,((wbs.maxsecret>0)&&(cnt_secret[0]>=wbs.maxsecret))?statcolor1:statcolor0,xx+80*CleanXFac_1-TewiFont.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + if ( sp_state < 8 ) return; + yy += TewiFont.GetHeight()*CleanYFac_1; + str = "┈┈┄┄╌╌────╌╌┄┄┈┈"; + Screen.DrawText(TewiFont,statbasecolor,xx-TewiFont.StringWidth(str)*CleanXFac_1/2,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StringTable.Localize("$SWWM_INTERTIME"); + Screen.DrawText(TewiFont,statbasecolor,xx-80*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + str = TimeStr(max(cnt_time,0)); + Screen.DrawText(TewiFont,(wbs.partime&&(cnt_time<=(wbs.partime/GameTicRate)))?statcolor1:((wbs.sucktime>0)&&(cnt_time>(wbs.sucktime*3600)))?statcolor2:statcolor0,xx+80*CleanXFac_1-TewiFont.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + if ( wbs.partime ) + { + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StringTable.Localize("$SWWM_INTERPAR"); + Screen.DrawText(TewiFont,statbasecolor,xx-80*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + str = TimeStr(max(cnt_par,0)); + Screen.DrawText(TewiFont,statcolor0,xx+80*CleanXFac_1-TewiFont.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + } + if ( wbs.totaltime == Plrs[me].stime ) return; + yy += TewiFont.GetHeight()*CleanYFac_1; + str = StringTable.Localize("$SWWM_INTERTOTAL"); + Screen.DrawText(TewiFont,statbasecolor,xx-80*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + str = TimeStr(max(cnt_total_time,0)); + Screen.DrawText(TewiFont,statcolor0,xx+80*CleanXFac_1-TewiFont.StringWidth(str)*CleanXFac_1,yy,str,DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1); + } + private void drawSWWMBg() { - let shnd = SWWMStaticHandler(StaticEventHandler.Find("SWWMStaticHandler")); - if ( !whichart && swwm_interart ) + if ( !shnd ) shnd = SWWMStaticHandler(StaticEventHandler.Find("SWWMStaticHandler")); + if ( !whichart ) { - int no = StringTable.Localize("$SWWM_NFANART").ToInt(); + int no = StringTable.Localize("$SWWM_NRENDER").ToInt(); Array ents; ents.Clear(); int rno = 0; for ( int i=1; i<=no; i++ ) { - if ( (swwm_interart == 2) && (StringTable.Localize("$SWWM_FANART"..i).Left(6) == "Marisa") ) - continue; - else if ( (swwm_interart == 3) && (StringTable.Localize("$SWWM_FANART"..i).Left(6) != "Marisa") ) - continue; ents.Push(i); rno++; } @@ -83,38 +259,24 @@ Class SWWMStatScreen : StatusScreen abstract } double ar = Screen.GetAspectRatio(), sar; Vector2 tsize, vsize; - if ( whichart ) Screen.Clear(0,0,Screen.GetWidth(),Screen.GetHeight(),"Black"); - else - { - if ( !bgtex ) bgtex = TexMan.CheckForTexture("graphics/InterBG.png"); - tsize = TexMan.GetScaledSize(bgtex); - 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(bgtex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true); - } + Screen.Clear(0,0,Screen.GetWidth(),Screen.GetHeight(),"Black"); // background pics if ( whichart ) { - String artstr = StringTable.Localize(String.Format("$SWWM_FANART%d",whichart)); - int semic = artstr.IndexOf(";"); - if ( !arttex ) arttex = TexMan.CheckForTexture(String.Format("graphics/Fanart/%s",(semic==-1)?artstr:artstr.Left(semic))); + String artstr = StringTable.Localize(String.Format("$SWWM_RENDER%d",whichart)); + if ( !arttex ) arttex = TexMan.CheckForTexture("graphics/Renders/"..artstr); 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); - if ( semic != -1 ) - { - String bstr = String.Format("\cx%s\c- %s",StringTable.Localize("$SWWM_FANART"),artstr.Mid(semic+1)); - int len = mSmallFont.StringWidth(bstr); - int bw = int((len+8)*hs), bh = int((mSmallFont.GetHeight()+4)*hs); - Screen.Dim("Black",.8,Screen.GetWidth()-bw,Screen.GetHeight()-bh,bw,bh); - Screen.DrawText(mSmallFont,Font.CR_GOLD,ss.x-(len+4),ss.y-(mSmallFont.GetHeight()+2),bstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } } + Screen.Dim("Black",.25,0,0,Screen.GetWidth(),Screen.GetHeight()); + } + private void drawSWWMFg() + { + if ( !shnd ) shnd = SWWMStaticHandler(StaticEventHandler.Find("SWWMStaticHandler")); // intermission tips at the bottom if ( !whichtip ) { @@ -139,136 +301,101 @@ Class SWWMStatScreen : StatusScreen abstract } } whichtip = ents[Random[InterArt](0,ents.Size()-1)]; - tipstr = "\cd"..String.Format(StringTable.Localize("$SWWM_INTERTIP"),whichtip).."\c-\n"..StringTable.Localize(String.Format("$SWWM_INTERTIP%d",whichtip)); + tipstr = String.Format(StringTable.Localize("$SWWM_INTERTIP"),whichtip).."\n"..StringTable.Localize(String.Format("$SWWM_INTERTIP%d",whichtip)); if ( tipl ) tipl.Destroy(); shnd.lasttip.Push(whichtip); } - if ( swwm_nointertips ) return; + if ( tipalpha <= 0. ) return; + double alf = clamp(tipalpha+(tipalphastate*fractic)/GameTicRate,0.,1.); + if ( !tipl ) tipl = TewiFontOutline.BreakLines(tipstr,400); int lw = 0; - if ( !tipl ) tipl = mSmallFont.BreakLines(tipstr,400); for ( int i=0; i lw ) lw = tipl.StringWidth(i); - int bw = int((lw+12)*hs), bh = int((mSmallFont.GetHeight()*tipl.Count()+8)*hs); - double xx = 8, yy = (ss.y-8)-(mSmallFont.GetHeight()*tipl.Count()); - Screen.Dim("Black",.8,int((xx-4)*hs),int((yy-4)*hs),bw,bh); + double xx = (Screen.GetWidth()-lw*CleanXFac_1)/2; + double yy = Screen.GetHeight()-60*CleanYFac_1; + if ( (Screen.GetHeight()/CleanYFac_1) < 480 ) + { + // downshift to fit tips + int fct = clamp(480-(Screen.GetHeight()/CleanYFac_1),0,80)/3; + yy += fct; + } + yy -= (tipl.Count()-1)*TewiFontOutline.GetHeight(); + if ( !gradtex ) gradtex = TexMan.CheckForTexture("graphics/M_GRAD.png"); + Screen.DrawTexture(gradtex,false,Screen.GetWidth()/2,yy+TewiFontOutline.GetHeight()*tipl.Count()*CleanYFac_1/2.,DTA_DestWidth,350*CleanXFac_1,DTA_DestHeight,(TewiFontOutline.GetHeight()*tipl.Count()+8)*CleanYFac_1,DTA_Rotate,90,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8*alf,DTA_TopOffset,256,DTA_LeftOffset,128); + Screen.DrawTexture(gradtex,false,Screen.GetWidth()/2,yy+TewiFontOutline.GetHeight()*tipl.Count()*CleanYFac_1/2.,DTA_DestWidth,350*CleanXFac_1,DTA_DestHeight,(TewiFontOutline.GetHeight()*tipl.Count()+8)*CleanYFac_1,DTA_Rotate,270,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_Alpha,.8*alf,DTA_TopOffset,256,DTA_LeftOffset,128); + double alph; + if ( tipflash && (gametic < tipflash) ) alph = max((tipflash-(gametic+fractic))/25.,0.)**1.5; + xx -= 8*CleanXFac_1; for ( int i=0; i0); - Screen.Dim("Black",.8,int((Screen.GetWidth()-dimlen)/2.),int(4*hs2),dimlen,int((mSmallFont.GetHeight()+(auth?2:4))*hs2)); - Screen.DrawText(mSmallFont,Font.CR_GREEN,int((ss2.x-len[0])/2.),6,lnametexts[0],DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - double foy = mSmallFont.GetHeight()+(auth?6:8); - if ( auth ) - { - double oy = foy*(hs2/hs); - Screen.Dim("Black",.8,int((Screen.GetWidth()-dimlen)/2.),int(oy*hs),dimlen,int((mSmallFont.GetHeight()+2)*hs)); - Screen.DrawText(mSmallFont,Font.CR_WHITE,int((ss.x-len[1])/2.),oy,authortexts[0],DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - foy += (mSmallFont.GetHeight()+2)*(hs/hs2); - } - foy += 4.; - String str = StringTable.Localize("$WI_FINISHED"); - len[0] = mSmallFont.StringWidth(str); - Screen.Dim("Black",.8,int((ss2.x-len[0]-8)/2*hs2),int(foy*hs2),int((len[0]+8)*hs2),int((mSmallFont.GetHeight()+4)*hs2)); - Screen.DrawText(mSmallFont,Font.CR_FIRE,int((ss2.x-len[0])/2.),foy+2,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - // return not used - return 0; - } - override void DrawEL() - { - String str = StringTable.Localize("$WI_ENTERING"); - // remove trailing colon (usually appearing on Heretic) - if ( str.RightIndexOf(":") == (str.length()-1) ) str.Truncate(str.length()-1); - int len[2]; - len[0] = mSmallFont.StringWidth(str); - Screen.Dim("Black",.8,int((ss2.x-len[0]-8)/2*hs2),int(4*hs2),int((len[0]+8)*hs2),int((mSmallFont.GetHeight()+4)*hs2)); - Screen.DrawText(mSmallFont,Font.CR_FIRE,int((ss2.x-len[0])/2.),6,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - double foy = mSmallFont.GetHeight()+12; - len[0] = mSmallFont.StringWidth(lnametexts[1]); - len[1] = mSmallFont.StringWidth(authortexts[1]); - int dimlen = max(int((len[0]+8)*hs2),int((len[1]+8)*hs)); - bool auth = (authortexts[1].Length()>0); - Screen.Dim("Black",.8,int((Screen.GetWidth()-dimlen)/2.),int(foy*hs2),dimlen,int((mSmallFont.GetHeight()+(auth?2:4))*hs2)); - Screen.DrawText(mSmallFont,Font.CR_GREEN,int((ss2.x-len[0])/2.),foy+2,lnametexts[1],DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - if ( auth ) - { - double oy = (foy+mSmallFont.GetHeight()+2)*(hs2/hs); - Screen.Dim("Black",.8,int((Screen.GetWidth()-dimlen)/2.),int(oy*hs),dimlen,int((mSmallFont.GetHeight()+2)*hs)); - Screen.DrawText(mSmallFont,Font.CR_WHITE,int((ss.x-len[1])/2.),oy,authortexts[1],DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - } - override void drawShowNextLoc( void ) - { - drawSWWMBg(); - drawEL(); - } - override void Drawer() - { - // nothing here - } - override void Draw( double smoothratio ) - { - hs = max(min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/400.)),1.); - hs2 = max(min(floor(Screen.GetWidth()/320.),floor(Screen.GetHeight()/200.)),1.); - ss = (Screen.GetWidth(),Screen.GetHeight())/hs; - ss2 = (Screen.GetWidth(),Screen.GetHeight())/hs2; - origin = (ss.x-640,ss.y-400)/2.; - origin2 = (ss2.x-320,ss2.y-200)/2.; switch ( CurState ) { case StatCount: drawSWWMBg(); + drawLF(); drawStats(); + drawSWWMFg(); break; case ShowNextLoc: + case NoState: case LeavingIntermission: - drawShowNextLoc(); - break; - break; - default: - drawNoState(); + drawSWWMBg(); + drawLF(); + drawStats(); + if ( !bNoDrawNextLoc ) drawEL(); + drawSWWMFg(); break; } - if ( bgfade <= 0. ) return; + if ( (bgfade <= 0.) || !arttex ) return; double alph = bgfade; - if ( bFade ) alph = min(1.,bgfade+(3.*smoothratio)/GameTicRate); - else alph = max(0.,bgfade-(4.*smoothratio)/GameTicRate); + if ( bFade ) alph = min(1.,bgfade+(3.*FracTic)/GameTicRate); + else alph = max(0.,bgfade-(4.*FracTic)/GameTicRate); // redraw BG on top, hiding the rest of the ui - TextureID tx; - if ( whichart ) tx = arttex; - else tx = bgtex; double ar = Screen.GetAspectRatio(); - Vector2 tsize = TexMan.GetScaledSize(tx); + Vector2 tsize = TexMan.GetScaledSize(arttex); double sar = tsize.x/tsize.y; Vector2 vsize; if ( sar > ar ) vsize = (tsize.y*ar,tsize.y); else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar); else vsize = tsize; - Screen.DrawTexture(tx,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alph); + 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,DTA_Alpha,alph); } + override void Draw( double smoothratio ) + { + FracTic = smoothratio; + Drawer(); + if ( glarestr > 0 ) + Screen.Dim(glarecolor,(clamp((glarestr-fractic)/20.,0.,1.)**2)*.3,0,0,Screen.GetWidth(),Screen.GetHeight()); + } + override void Ticker( void ) { bcnt++; if ( bcnt == 1 ) StartMusic(); + glarestr = max(glarestr-1,0); + tipalpha = min(tipalpha+tipalphastate/double(GameTicRate),2.); switch (CurState) { case StatCount: + tipalphastate = 1; updateStats(); break; case ShowNextLoc: updateShowNextLoc(); break; case NoState: + tipalphastate = -2; updateNoState(); break; case LeavingIntermission: @@ -278,29 +405,7 @@ Class SWWMStatScreen : StatusScreen abstract // check fade if ( bFade ) bgfade = min(1.,bgfade+3./GameTicRate); else bgfade = max(0.,bgfade-4./GameTicRate); - // force toggle - if ( !swwm_interart && (whichart != 0) ) - { - whichart = 0; - arttex.SetNull(); - } } - protected String TimeStr( int secs ) - { - secs = max(secs,0); - int h = secs/3600; - int m = (secs/60)%60; - int s = secs%60; - if ( h ) return String.Format("%02d\cu:\c-%02d\cu:\c-%02d",h,m,s); - return String.Format("%02d\cu:\c-%02d",m,s); - } - protected int GetPct( int a, int b, bool inv = false ) - { - if ( a < 0 ) return 0; - if ( b <= 0 ) return inv?0:100; // for "missed" percentage - return (a*100)/b; - } - override bool OnEvent( InputEvent evt ) { if ( evt.type == InputEvent.Type_KeyDown ) @@ -318,13 +423,14 @@ Class SWWMStatScreen : StatusScreen abstract } if ( cmd ~== "+reload" ) { - if ( !swwm_nointertips ) PlaySound("menu/demoscroll"); + PlaySound("misc/chat"); whichtip = 0; + tipflash = gametic+25; return true; } if ( cmd ~== "+zoom" ) { - if ( swwm_interart ) PlaySound("menu/demoscroll"); + PlaySound("misc/chat"); whichart = 0; arttex.SetNull(); return true; @@ -339,4 +445,155 @@ Class SWWMStatScreen : StatusScreen abstract } return false; } + override void updateNoState() + { + // make sure tip alpha is zero, so this transition is less jarring + if ( tipalpha > 0. ) return; + Super.updateNoState(); + } + override void initShowNextLoc() + { + if ( wbs.next == "" ) + { + // the base statscreen skips directly here, which looks + // very jarring with this one, so just skip to NoState + bNoDrawNextLoc = true; + initNoState(); + return; + } + CurState = ShowNextLoc; + acceleratestage = 0; + cnt = SHOWNEXTLOCDELAY*GameTicRate; + noautostartmap = false; + } + override void initStats() + { + CurState = StatCount; + acceleratestage = 0; + sp_state = 0; + cnt_kills[0] = cnt_items[0] = cnt_secret[0] = -1; + cnt_time = cnt_par = -1; + cnt_pause = GameTicRate*2; + cnt_total_time = -1; + } + override void updateStats() + { + if ( sp_state == 0 ) + { + if ( bcnt > GameTicRate ) + { + S_StartSound("misc/interstart",CHAN_WEAPON,CHANF_OVERLAP|CHANF_UI,1.,0.); + acceleratestage = 0; + glarestr = 20; + sp_state++; + } + return; + } + if ( acceleratestage && (sp_state != 10) ) + { + acceleratestage = 0; + sp_state = 10; + S_StartSound("misc/intercntdone",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + glarestr = 10; + cnt_kills[0] = Plrs[me].skills; + cnt_items[0] = Plrs[me].sitems; + cnt_secret[0] = Plrs[me].ssecret; + cnt_time = Thinker.Tics2Seconds(Plrs[me].stime); + cnt_par = wbs.partime/GameTicRate; + cnt_total_time = Thinker.Tics2Seconds(wbs.totaltime); + } + if ( sp_state == 2 ) + { + cnt_kills[0] += max((Plrs[me].skills-cnt_kills[0])/GameTicRate,1); + if ( !((sndcnt++)%2) ) + { + S_StartSound("misc/intercnt",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + glarestr = 5; + } + if ( cnt_kills[0] >= Plrs[me].skills ) + { + S_StartSound("misc/intercntdone",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + cnt_kills[0] = Plrs[me].skills; + glarestr = 10; + sp_state++; + } + } + else if ( sp_state == 4 ) + { + cnt_items[0] += max((Plrs[me].sitems-cnt_items[0])/GameTicRate,1); + if ( !((sndcnt++)%2) ) + { + S_StartSound("misc/intercnt",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + glarestr = 5; + } + if ( cnt_items[0] >= Plrs[me].sitems ) + { + S_StartSound("misc/intercntdone",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + cnt_items[0] = Plrs[me].sitems; + glarestr = 10; + sp_state++; + } + } + else if ( sp_state == 6 ) + { + cnt_secret[0] += max((Plrs[me].ssecret-cnt_secret[0])/GameTicRate,1); + if ( !((sndcnt++)%2) ) + { + S_StartSound("misc/intercnt",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + glarestr = 5; + } + if ( cnt_secret[0] >= Plrs[me].ssecret ) + { + S_StartSound("misc/intercntdone",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + cnt_secret[0] = Plrs[me].ssecret; + glarestr = 10; + sp_state++; + } + } + else if ( sp_state == 8 ) + { + int sec = Thinker.Tics2Seconds(Plrs[me].stime); + int tsec = Thinker.Tics2Seconds(wbs.totaltime); + int psec = wbs.partime/GameTicRate; + if ( !((sndcnt++)%2) ) + { + S_StartSound("misc/intercnt",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + glarestr = 5; + } + cnt_time += max((sec-cnt_time)/GameTicRate,1); + cnt_par += max((psec-cnt_par)/GameTicRate,1); + cnt_total_time += max((tsec-cnt_total_time)/GameTicRate,1); + if ( cnt_time >= sec ) cnt_time = sec; + if ( cnt_total_time >= tsec ) cnt_total_time = tsec; + if ( cnt_par >= psec ) + { + cnt_par = psec; + if ( cnt_time >= sec ) + { + S_StartSound("misc/intercntdone",CHAN_VOICE,CHANF_OVERLAP|CHANF_UI,1.,0.); + cnt_total_time = tsec; + glarestr = 10; + sp_state++; + } + } + } + else if ( sp_state == 10 ) + { + if ( acceleratestage ) + { + S_StartSound("misc/interdone",CHAN_WEAPON,CHANF_OVERLAP|CHANF_UI,1.,0.); + glarestr = 20; + initShowNextLoc(); + } + } + else if ( sp_state&1 ) + { + if ( !--cnt_pause ) + { + sp_state++; + cnt_pause = GameTicRate; + sndcnt = 0; + } + } + } } diff --git a/zscript/menu/swwm_inter_coop.zsc b/zscript/menu/swwm_inter_coop.zsc deleted file mode 100644 index 49f1deb32..000000000 --- a/zscript/menu/swwm_inter_coop.zsc +++ /dev/null @@ -1,249 +0,0 @@ -// Cooperative stats -Class SWWMStatScreen_Coop : SWWMStatScreen -{ - override void initStats() - { - CurState = StatCount; - acceleratestage = 0; - ng_state = 1; - cnt_pause = GameTicRate; - for ( int i=0; i Plrs[i].skills ) cnt_kills[i] = Plrs[i].skills; - else stillticking = true; - } - if ( !stillticking ) - { - PlaySound("menu/buyinv"); - ng_state++; - } - } - else if ( ng_state == 4 ) - { - if ( !(bcnt&2) ) PlaySound("menu/demoscroll"); - stillticking = false; - for ( int i=0; i Plrs[i].sitems ) cnt_items[i] = Plrs[i].sitems; - else stillticking = true; - } - if ( !stillticking ) - { - PlaySound("menu/buyinv"); - ng_state++; - } - } - else if ( ng_state == 6 ) - { - if ( !(bcnt&2) ) PlaySound("menu/demoscroll"); - stillticking = false; - for ( int i=0; i Plrs[i].ssecret ) cnt_secret[i] = Plrs[i].ssecret; - else stillticking = true; - } - if ( !stillticking ) - { - PlaySound("menu/buyinv"); - ng_state += 1+2*!dofrags; - } - } - else if ( ng_state == 8 ) - { - if ( !(bcnt&2) ) PlaySound("menu/demoscroll"); - stillticking = false; - for ( int i=0; i= fsum ) cnt_frags[i] = fsum; - else stillticking = true; - } - if ( !stillticking ) - { - PlaySound("menu/buyinv"); - ng_state++; - } - } - else if ( ng_state == 10 ) - { - int i; - for ( i=0; i= 4 ) - { - str = String.Format("%3d\cu%%\c-",GetPct(cnt_items[i],wbs.maxitems)); - Screen.DrawText(mSmallFont,(!wbs.maxitems||(cnt_items[i]>=wbs.maxitems))?Font.CR_GOLD:Font.CR_WHITE,xx+itemslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - misseditems -= cnt_items[i]; - } - xx += itemslen+spc; - if ( ng_state >= 6 ) - { - str = String.Format("%3d\cu%%\c-",GetPct(cnt_secret[i],wbs.maxsecret)); - Screen.DrawText(mSmallFont,(!wbs.maxsecret||(cnt_secret[i]>=wbs.maxsecret))?Font.CR_GOLD:Font.CR_WHITE,xx+secretlen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - missedsecret -= cnt_secret[i]; - } - xx += secretlen+spc; - str = String.Format("%3d\cu%%\c-",GetPct(cnt_kills[i],wbs.maxkills)); - Screen.DrawText(mSmallFont,(!wbs.maxkills||(cnt_kills[i]>=wbs.maxkills))?Font.CR_GOLD:Font.CR_WHITE,xx+killslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - missedkills -= cnt_kills[i]; - yy += lineh+lspc; - } - xx = int((ss.x-boxwidth)/2+pad+pad+rwidth); - yy += hspc; - Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,missedstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - xx += namelen+spc; - if ( ng_state >= 4 ) - { - str = String.Format("%3d\cu%%\c-",GetPct(misseditems,wbs.maxitems,true)); - Screen.DrawText(mSmallFont,(wbs.maxitems&&(misseditems>0))?Font.CR_WHITE:Font.CR_GOLD,xx+itemslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - xx += itemslen+spc; - if ( ng_state >= 6 ) - { - str = String.Format("%3d\cu%%\c-",GetPct(missedsecret,wbs.maxsecret,true)); - Screen.DrawText(mSmallFont,(wbs.maxsecret&&(missedsecret>0))?Font.CR_WHITE:Font.CR_GOLD,xx+secretlen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - xx += secretlen+spc; - str = String.Format("%3d\cu%%\c-",GetPct(missedkills,wbs.maxkills,true)); - Screen.DrawText(mSmallFont,(wbs.maxkills&&(missedkills>0))?Font.CR_WHITE:Font.CR_GOLD,xx+killslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - yy += lineh+lspc; - xx = int((ss.x-boxwidth)/2+pad+pad+rwidth); - Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,totalstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - xx += namelen+spc; - if ( ng_state >= 4 ) - { - str = String.Format("%d",wbs.maxitems); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+itemslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - xx += itemslen+spc; - if ( ng_state >= 6 ) - { - str = String.Format("%d",wbs.maxsecret); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+secretlen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - xx += secretlen+spc; - str = String.Format("%d",wbs.maxkills); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+killslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } -} diff --git a/zscript/menu/swwm_inter_dm.zsc b/zscript/menu/swwm_inter_dm.zsc deleted file mode 100644 index 29aff8c14..000000000 --- a/zscript/menu/swwm_inter_dm.zsc +++ /dev/null @@ -1,181 +0,0 @@ -// Deathmatch stats -Class SWWMStatScreen_DM : SWWMStatScreen -{ - override void initStats() - { - CurState = StatCount; - acceleratestage = 0; - for( int i=0; i Plrs[i].fragcount ) cnt_frags[i] = Plrs[i].fragcount; - else stillticking = true; - } - if ( !stillticking ) - { - PlaySound("menu/buyinv"); - ng_state++; - } - } - else if ( ng_state == 4 ) - { - if ( !(bcnt&2) ) PlaySound("menu/demoscroll"); - stillticking = false; - for ( int i=0; i player_deaths[i] ) cnt_deaths[i] = player_deaths[i]; - else stillticking = true; - } - if ( !stillticking ) - { - PlaySound("menu/buyinv"); - ng_state++; - } - } - else if ( ng_state == 6 ) - { - int i; - for ( i=0; i sorted; - GetSortedPlayers(sorted,teamplay); - foreach ( i:sorted ) - { - if ( !playeringame[i] ) continue; - xx = int((ss.x-boxwidth)/2+pad); - Screen.Dim(players[i].GetDisplayColor(),.4,int(xx*hs),int(yy*hs),int(linew*hs),int(lineh*hs)); - xx += pad; - if ( playerready[i] || players[i].Bot ) Screen.DrawChar(mSmallFont,Font.CR_GREEN,xx,yy,checkmark,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - xx += rwidth; - Screen.DrawText(mSmallFont,GetRowColor(players[i],i==me),xx,yy,players[i].GetUserName(),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - xx += namelen+spc; - if ( ng_state >= 2 ) - { - str = String.Format("%d",cnt_deaths[i]); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+deathslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - xx += deathslen+spc; - str = String.Format("%d",cnt_frags[i]); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+fragslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - yy += lineh+lspc; - } - xx = int((ss.x-boxwidth)/2+pad+pad+rwidth); - yy += hspc; - Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,totalstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - xx += namelen+spc; - if ( ng_state >= 4 ) - { - str = String.Format("%d",total_deaths); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+deathslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - xx += deathslen+spc; - str = String.Format("%d",total_frags); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx+fragslen-mSmallFont.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } -} diff --git a/zscript/menu/swwm_inter_sp.zsc b/zscript/menu/swwm_inter_sp.zsc deleted file mode 100644 index c1f25433d..000000000 --- a/zscript/menu/swwm_inter_sp.zsc +++ /dev/null @@ -1,287 +0,0 @@ -// Single-player stats -Class SWWMStatScreen_SP : SWWMStatScreen -{ - int intermissioncounter; - - override void initStats() - { - intermissioncounter = gameinfo.intermissioncounter; - CurState = StatCount; - acceleratestage = 0; - sp_state = 1; - cnt_kills[0] = cnt_items[0] = cnt_secret[0] = -1; - cnt_time = cnt_par = -1; - cnt_pause = GameTicRate; - cnt_total_time = -1; - } - - override void updateStats() - { - if ( acceleratestage && (sp_state != 10) ) - { - acceleratestage = 0; - sp_state = 10; - PlaySound("menu/buyinv"); - cnt_kills[0] = Plrs[me].skills; - cnt_items[0] = Plrs[me].sitems; - cnt_secret[0] = Plrs[me].ssecret; - cnt_time = Thinker.Tics2Seconds(Plrs[me].stime); - cnt_par = wbs.partime/GameTicRate; - cnt_total_time = Thinker.Tics2Seconds(wbs.totaltime); - } - if ( sp_state == 2 ) - { - if ( intermissioncounter ) - { - cnt_kills[0] += max((Plrs[me].skills-cnt_kills[0])/10,2); - if ( !(bcnt%2) ) PlaySound("menu/demoscroll"); - } - if ( !intermissioncounter || (cnt_kills[0] >= Plrs[me].skills) ) - { - cnt_kills[0] = Plrs[me].skills; - PlaySound("menu/buyinv"); - sp_state++; - } - } - else if ( sp_state == 4 ) - { - if ( intermissioncounter ) - { - cnt_items[0] += max((Plrs[me].sitems-cnt_items[0])/10,2); - if ( !(bcnt%2) ) PlaySound("menu/demoscroll"); - } - if ( !intermissioncounter || (cnt_items[0] >= Plrs[me].sitems) ) - { - cnt_items[0] = Plrs[me].sitems; - PlaySound("menu/buyinv"); - sp_state++; - } - } - else if ( sp_state == 6 ) - { - if ( intermissioncounter ) - { - cnt_secret[0] += max((Plrs[me].ssecret-cnt_secret[0])/10,2); - if ( !(bcnt%2) ) PlaySound("menu/demoscroll"); - } - if ( !intermissioncounter || (cnt_secret[0] >= Plrs[me].ssecret) ) - { - cnt_secret[0] = Plrs[me].ssecret; - PlaySound("menu/buyinv"); - sp_state++; - } - } - else if ( sp_state == 8 ) - { - int sec = Thinker.Tics2Seconds(Plrs[me].stime); - int tsec = Thinker.Tics2Seconds(wbs.totaltime); - int psec = wbs.partime/GameTicRate; - if ( intermissioncounter ) - { - if ( !(bcnt%2) ) PlaySound("menu/demoscroll"); - cnt_time += max((sec-cnt_time)/10,3); - cnt_par += max((psec-cnt_par)/10,3); - cnt_total_time += max((tsec-cnt_total_time)/10,3); - } - if ( !intermissioncounter || (cnt_time >= sec) ) - cnt_time = sec; - if ( !intermissioncounter || (cnt_total_time >= tsec) ) - cnt_total_time = tsec; - if ( !intermissioncounter || (cnt_par >= psec) ) - { - cnt_par = psec; - if ( cnt_time >= sec ) - { - cnt_total_time = tsec; - PlaySound("menu/buyinv"); - sp_state++; - } - } - } - else if ( sp_state == 10 ) - { - if ( acceleratestage ) - { - PlaySound("misc/w_pkup"); - initShowNextLoc(); - } - } - else if ( sp_state&1 ) - { - if ( !--cnt_pause ) - { - sp_state++; - cnt_pause = GameTicRate; - } - } - } - - override void drawStats( void ) - { - drawLF(); - // estimate max width of the whole stat counter - int maxlen, maxlenl = 0, maxlenr = 0; - // left strings - String str = StringTable.Localize("$TXT_IMKILLS")..":"; - int len = mSmallFont.StringWidth(str); - maxlenl = len; - str = StringTable.Localize("$TXT_IMITEMS")..":"; - len = mSmallFont.StringWidth(str); - if ( len > maxlenl ) maxlenl = len; - str = StringTable.Localize("$TXT_IMSECRETS")..":"; - len = mSmallFont.StringWidth(str); - if ( len > maxlenl ) maxlenl = len; - str = StringTable.Localize("$TXT_IMTIME")..":"; - len = mSmallFont.StringWidth(str); - if ( len > maxlenl ) maxlenl = len; - if ( wbs.partime ) - { - str = StringTable.Localize("$TXT_IMPAR")..":"; - len = mSmallFont.StringWidth(str); - if ( len > maxlenl ) maxlenl = len; - } - if ( wi_showtotaltime && (Plrs[me].stime != wbs.totaltime) ) - { - str = StringTable.Localize("$SCORE_TOTAL")..":"; // hey, as long as it works - len = mSmallFont.StringWidth(str); - if ( len > maxlenl ) maxlenl = len; - } - // right strings - if ( wi_percents ) - { - str = (!wbs.maxkills)?"N/A":String.Format("%d%%",GetPct(Plrs[me].skills,wbs.maxkills)); - len = mSmallFont.StringWidth(str); - maxlenr = len; - str = (!wbs.maxitems)?"N/A":String.Format("%d%%",GetPct(Plrs[me].sitems,wbs.maxitems)); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - str = (!wbs.maxsecret)?"N/A":String.Format("%d%%",GetPct(Plrs[me].ssecret,wbs.maxsecret)); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - } - else - { - str = (!wbs.maxkills)?"N/A":String.Format("%d / %d",Plrs[me].skills,wbs.maxkills); - len = mSmallFont.StringWidth(str); - maxlenr = len; - str = (!wbs.maxitems)?"N/A":String.Format("%d / %d",Plrs[me].sitems,wbs.maxitems); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - str = (!wbs.maxsecret)?"N/A":String.Format("%d / %d",Plrs[me].ssecret,wbs.maxsecret); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - } - str = TimeStr(Thinker.Tics2Seconds(Plrs[me].stime)); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - if ( wbs.partime ) - { - str = TimeStr(wbs.partime/GameTicRate); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - } - if ( wi_showtotaltime && (Plrs[me].stime != wbs.totaltime) ) - { - str = TimeStr(Thinker.Tics2Seconds(wbs.totaltime)); - len = mSmallFont.StringWidth(str); - if ( len > maxlenr ) maxlenr = len; - } - int step = mSmallFont.GetHeight()+1; - int nl = clamp(sp_state/2,0,4); - if ( (nl == 4) ) - { - if ( wi_showtotaltime && (Plrs[me].stime != wbs.totaltime) ) nl++; - if ( wbs.partime ) nl++; - } - nl *= step; - maxlen = maxlenl+max(100,maxlenr); - // draw the whole damn thing - if ( sp_state >= 2 ) Screen.Dim("Black",.8,int((ss2.x-maxlen-8)*.5*hs2),int((ss2.y-nl-8)*.5*hs2),int((maxlen+8)*hs2),int((nl+8)*hs2)); - int xx = int((ss2.x-maxlen)/2), yy = int((ss2.y-nl)/2); - if ( sp_state >= 2 ) Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,StringTable.Localize("$TXT_IMKILLS")..":",DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - yy += step; - if ( sp_state >= 4 ) Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,StringTable.Localize("$TXT_IMITEMS")..":",DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - yy += step; - if ( sp_state >= 6 ) Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,StringTable.Localize("$TXT_IMSECRETS")..":",DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - yy += step; - if ( sp_state >= 8 ) Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,StringTable.Localize("$TXT_IMTIME")..":",DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - yy += step; - if ( wbs.partime ) - { - if ( sp_state >= 8 ) Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,StringTable.Localize("$TXT_IMPAR")..":",DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - yy += step; - } - if ( wi_showtotaltime && (Plrs[me].stime != wbs.totaltime) && (sp_state >= 8) ) - Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,StringTable.Localize("$SCORE_TOTAL")..":",DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - xx = int((ss2.x+maxlen)/2); - yy = int((ss2.y-nl)/2); - if ( wi_percents ) - { - if ( cnt_kills[0] >= 0 ) - { - str = (!wbs.maxkills)?"\cuN/A\c-":String.Format("%d\cu%%\c-",GetPct(cnt_kills[0],wbs.maxkills)); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(cnt_kills[0]>=wbs.maxkills)?Font.CR_GOLD:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - if ( cnt_items[0] >= 0 ) - { - str = (!wbs.maxitems)?"\cuN/A\c-":String.Format("%d\cu%%\c-",GetPct(cnt_items[0],wbs.maxitems)); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(cnt_items[0]>=wbs.maxitems)?Font.CR_GOLD:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - if ( cnt_secret[0] >= 0 ) - { - str = (!wbs.maxsecret)?"\cuN/A\c-":String.Format("%d\cu%%\c-",GetPct(cnt_secret[0],wbs.maxsecret)); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(cnt_secret[0]>=wbs.maxsecret)?Font.CR_GOLD:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - } - else - { - if ( cnt_kills[0] >= 0 ) - { - str = (!wbs.maxkills)?"\cuN/A\c-":String.Format("%d \cu/\c- \cj%d\c-",max(cnt_kills[0],0),wbs.maxkills); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(cnt_kills[0]>=wbs.maxkills)?Font.CR_GOLD:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - if ( cnt_items[0] >= 0 ) - { - str = (!wbs.maxitems)?"\cuN/A\c-":String.Format("%d \cu/\c- \cj%d\c-",max(cnt_items[0],0),wbs.maxitems); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(cnt_items[0]>=wbs.maxitems)?Font.CR_GOLD:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - if ( cnt_secret[0] >= 0 ) - { - str = (!wbs.maxsecret)?"\cuN/A\c-":String.Format("%d \cu/\c- \cj%d\c-",max(cnt_secret[0],0),wbs.maxsecret); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(cnt_secret[0]>=wbs.maxsecret)?Font.CR_GOLD:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - } - if ( cnt_time >= 0 ) - { - str = TimeStr(cnt_time); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,(wbs.partime&&(cnt_time<=(wbs.partime/GameTicRate)))?Font.CR_GOLD:((wbs.sucktime>0)&&(cnt_time>(wbs.sucktime*3600)))?Font.CR_RED:Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - yy += step; - if ( wbs.partime && (cnt_par >= 0) ) - { - str = TimeStr(cnt_par); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - yy += step; - } - if ( wi_showtotaltime && (Plrs[me].stime != wbs.totaltime) && (cnt_total_time >= 0) ) - { - str = TimeStr(cnt_total_time); - len = mSmallFont.StringWidth(str); - Screen.DrawText(mSmallFont,Font.CR_WHITE,xx-len,yy,str,DTA_VirtualWidthF,ss2.x,DTA_VirtualHeightF,ss2.y,DTA_KeepRatio,true); - } - } -}