Overhaul stat screen, remove fanart.
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 297 KiB |
Before Width: | Height: | Size: 925 KiB |
Before Width: | Height: | Size: 940 KiB |
Before Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 957 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 366 KiB |
Before Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 713 KiB After Width: | Height: | Size: 713 KiB |
Before Width: | Height: | Size: 899 KiB After Width: | Height: | Size: 899 KiB |
Before Width: | Height: | Size: 960 KiB After Width: | Height: | Size: 960 KiB |
Before Width: | Height: | Size: 878 KiB After Width: | Height: | Size: 878 KiB |
Before Width: | Height: | Size: 923 KiB After Width: | Height: | Size: 923 KiB |
Before Width: | Height: | Size: 987 KiB After Width: | Height: | Size: 987 KiB |
Before Width: | Height: | Size: 379 KiB After Width: | Height: | Size: 379 KiB |
Before Width: | Height: | Size: 904 KiB After Width: | Height: | Size: 904 KiB |
Before Width: | Height: | Size: 980 KiB After Width: | Height: | Size: 980 KiB |
Before Width: | Height: | Size: 877 KiB After Width: | Height: | Size: 877 KiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 370 KiB |
Before Width: | Height: | Size: 707 KiB After Width: | Height: | Size: 707 KiB |
Before Width: | Height: | Size: 900 KiB After Width: | Height: | Size: 900 KiB |
Before Width: | Height: | Size: 1001 KiB After Width: | Height: | Size: 1001 KiB |
Before Width: | Height: | Size: 913 KiB After Width: | Height: | Size: 913 KiB |
|
@ -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";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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-";
|
||||
|
|
13
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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -100,8 +100,8 @@ Class SWWMCreditsMenu : GenericMenu
|
|||
TextureID bgtex;
|
||||
TextureID logo;
|
||||
String stitle, stitle2;
|
||||
String sdev, sassets, smusic, svoice, sfanart, slocal, spatrons, sthanks;
|
||||
Array<SWWMCreditsEntry> cdev, cassets, cmusic, cvoice, cfanart, clocal, cpatrons, cthanks;
|
||||
String sdev, sassets, smusic, svoice, slocal, spatrons, sthanks;
|
||||
Array<SWWMCreditsEntry> 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);
|
||||
|
|
|
@ -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<Int> 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<tipl.Count(); i++ )
|
||||
if ( tipl.StringWidth(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; i<tipl.Count(); i++ )
|
||||
{
|
||||
Screen.DrawText(mSmallFont,Font.CR_WHITE,xx,yy,tipl.StringAt(i),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
yy += mSmallFont.GetHeight();
|
||||
xx = 12;
|
||||
Screen.DrawText(TewiFontOutline,(i==0)?tipcolor0:tipcolor1,xx,yy,tipl.StringAt(i),DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1,DTA_Alpha,alf);
|
||||
if ( tipflash && (gametic < tipflash) )
|
||||
Screen.DrawText(TewiFontOutline,tipflashcolor,xx,yy,tipl.StringAt(i),DTA_ScaleX,CleanXFac_1,DTA_ScaleY,CleanYFac_1,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alf*alph);
|
||||
yy += TewiFontOutline.GetHeight()*CleanYFac_1;
|
||||
if ( i == 0 ) xx += 16*CleanXFac_1;
|
||||
}
|
||||
}
|
||||
override int DrawLF()
|
||||
|
||||
override void Drawer( void )
|
||||
{
|
||||
int len[2];
|
||||
len[0] = mSmallFont.StringWidth(lnametexts[0]);
|
||||
len[1] = mSmallFont.StringWidth(authortexts[0]);
|
||||
int dimlen = max(int((len[0]+8)*hs2),int((len[1]+8)*hs));
|
||||
bool auth = (authortexts[0].Length()>0);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<MAXPLAYERS; i++ )
|
||||
{
|
||||
playerready[i] = false;
|
||||
cnt_kills[i] = cnt_items[i] = cnt_secret[i] = cnt_frags[i] = 0;
|
||||
if ( !playeringame[i] ) continue;
|
||||
dofrags += fragSum(i);
|
||||
}
|
||||
dofrags = !!dofrags;
|
||||
}
|
||||
|
||||
override void updateStats()
|
||||
{
|
||||
int fsum;
|
||||
bool stillticking;
|
||||
bool autoskip = autoSkip();
|
||||
if ( (acceleratestage || autoskip) && (ng_state != 10) )
|
||||
{
|
||||
acceleratestage = 0;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_kills[i] = Plrs[i].skills;
|
||||
cnt_items[i] = Plrs[i].sitems;
|
||||
cnt_secret[i] = Plrs[i].ssecret;
|
||||
if ( dofrags ) cnt_frags[i] = fragSum(i);
|
||||
}
|
||||
PlaySound("menu/buyinv");
|
||||
ng_state = 10;
|
||||
}
|
||||
if ( ng_state == 2 )
|
||||
{
|
||||
if ( !(bcnt&2) ) PlaySound("menu/demoscroll");
|
||||
stillticking = false;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_kills[i] += max((Plrs[i].skills-cnt_kills[i])/10,2);
|
||||
if ( cnt_kills[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<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_items[i] += max((Plrs[i].sitems-cnt_items[i])/10,2);
|
||||
if ( cnt_items[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<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_secret[i] += max((Plrs[i].ssecret-cnt_secret[i])/10,2);
|
||||
if ( cnt_secret[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<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
fsum = fragSum(i);
|
||||
cnt_frags[i] += max((fsum-cnt_frags[i])/10,1);
|
||||
if ( cnt_frags[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<MAXPLAYERS; i++ )
|
||||
{
|
||||
// If the player is in the game and not ready, stop checking
|
||||
if ( playeringame[i] && !players[i].Bot && !playerready[i] )
|
||||
break;
|
||||
}
|
||||
// All players are ready; proceed.
|
||||
if ( ((i == MAXPLAYERS) && acceleratestage) || autoskip )
|
||||
{
|
||||
PlaySound("misc/w_pkup");
|
||||
initShowNextLoc();
|
||||
}
|
||||
}
|
||||
else if ( ng_state&1 )
|
||||
{
|
||||
if ( !--cnt_pause )
|
||||
{
|
||||
ng_state++;
|
||||
cnt_pause = GameTicRate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override void drawStats( void )
|
||||
{
|
||||
drawLF();
|
||||
int checkmark = 0x2714; // "✔"
|
||||
String namestr = StringTable.Localize("$SCORE_NAME");
|
||||
String itemsstr = StringTable.Localize((gameinfo.gametype&GAME_Raven)?"$SCORE_BONUS":"$SCORE_ITEMS");
|
||||
String secretstr = StringTable.Localize("$SCORE_SECRET");
|
||||
String killsstr = StringTable.Localize("$SCORE_KILLS");
|
||||
String missedstr = StringTable.Localize("$SCORE_MISSED");
|
||||
String totalstr = StringTable.Localize("$SCORE_TOTAL");
|
||||
int namelen = max(max(mSmallFont.StringWidth(namestr),mSmallFont.StringWidth("XXXXXXXXXX")),max(mSmallFont.StringWidth(missedstr),mSmallFont.StringWidth(totalstr)));
|
||||
int nplayers = 0;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
namelen = max(namelen,mSmallFont.StringWidth(players[i].GetUserName()));
|
||||
nplayers++;
|
||||
}
|
||||
int misseditems = wbs.maxitems;
|
||||
int missedsecret = wbs.maxsecret;
|
||||
int missedkills = wbs.maxkills;
|
||||
String itemstotal = String.Format("%d",misseditems);
|
||||
String secrettotal = String.Format("%d",missedsecret);
|
||||
String killstotal = String.Format("%d",missedkills);
|
||||
int itemslen = max(mSmallFont.StringWidth("100%"),max(mSmallFont.StringWidth(itemstotal),mSmallFont.StringWidth(itemsstr)));
|
||||
int secretlen = max(mSmallFont.StringWidth("100%"),max(mSmallFont.StringWidth(secrettotal),mSmallFont.StringWidth(secretstr)));
|
||||
int killslen = max(mSmallFont.StringWidth("100%"),max(mSmallFont.StringWidth(killstotal),mSmallFont.StringWidth(killsstr)));
|
||||
int pad = 2;
|
||||
int spc = 12;
|
||||
int hspc = 6;
|
||||
int lspc = 2;
|
||||
int rwidth = mSmallFont.GetCharWidth(checkmark)+4;
|
||||
int linew = pad+rwidth+namelen+spc+itemslen+spc+secretlen+spc+killslen+pad;
|
||||
int boxwidth = pad+linew+pad;
|
||||
int lineh = mSmallFont.GetHeight();
|
||||
int boxheight = pad+lineh+hspc+(lineh+lspc)*nplayers+hspc+lineh+lspc+lineh+pad;
|
||||
Screen.Dim("Black",.8,int((ss.x-boxwidth)*hs)/2,int((ss.y-boxheight)*hs)/2,int(boxwidth*hs),int(boxheight*hs));
|
||||
// header
|
||||
int xx = int((ss.x-boxwidth)/2+pad+pad+rwidth);
|
||||
int yy = int((ss.y-boxheight)/2+pad);
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,namestr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx += namelen+spc;
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,itemsstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx += itemslen+spc;
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,secretstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx += secretlen+spc;
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,killsstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
yy += lineh+hspc;
|
||||
String str;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
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 >= 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);
|
||||
}
|
||||
}
|
|
@ -1,181 +0,0 @@
|
|||
// Deathmatch stats
|
||||
Class SWWMStatScreen_DM : SWWMStatScreen
|
||||
{
|
||||
override void initStats()
|
||||
{
|
||||
CurState = StatCount;
|
||||
acceleratestage = 0;
|
||||
for( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
playerready[i] = false;
|
||||
cnt_frags[i] = cnt_deaths[i] = player_deaths[i] = 0;
|
||||
}
|
||||
total_frags = 0;
|
||||
total_deaths = 0;
|
||||
ng_state = 1;
|
||||
cnt_pause = GameTicRate;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
for ( int j=0; j<MAXPLAYERS; j++ )
|
||||
{
|
||||
if ( !playeringame[j] ) continue;
|
||||
player_deaths[i] += Plrs[j].frags[i];
|
||||
}
|
||||
total_deaths += player_deaths[i];
|
||||
total_frags += Plrs[i].fragcount;
|
||||
}
|
||||
}
|
||||
|
||||
override void updateStats()
|
||||
{
|
||||
bool stillticking;
|
||||
bool doautoskip = autoSkip();
|
||||
if ( (acceleratestage || doautoskip) && (ng_state != 6) )
|
||||
{
|
||||
acceleratestage = 0;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_frags[i] = Plrs[i].fragcount;
|
||||
cnt_deaths[i] = player_deaths[i];
|
||||
}
|
||||
PlaySound("menu/buyinv");
|
||||
ng_state = 6;
|
||||
}
|
||||
if ( ng_state == 2 )
|
||||
{
|
||||
if ( !(bcnt&2) ) PlaySound("menu/demoscroll");
|
||||
stillticking = false;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_frags[i] += max((Plrs[i].fragcount-cnt_frags[i])/10,2);
|
||||
if ( cnt_frags[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<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
cnt_deaths[i] += max((player_deaths[i]-cnt_deaths[i])/10,2);
|
||||
if ( cnt_deaths[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<MAXPLAYERS; i++ )
|
||||
{
|
||||
// If the player is in the game and not ready, stop checking
|
||||
if ( playeringame[i] && !players[i].Bot && !playerready[i] )
|
||||
break;
|
||||
}
|
||||
// All players are ready; proceed.
|
||||
if ( ((i == MAXPLAYERS) && acceleratestage) || doautoskip )
|
||||
{
|
||||
PlaySound("misc/w_pkup");
|
||||
initShowNextLoc();
|
||||
}
|
||||
}
|
||||
else if ( ng_state&1 )
|
||||
{
|
||||
if ( !--cnt_pause )
|
||||
{
|
||||
ng_state++;
|
||||
cnt_pause = GameTicRate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override void drawStats( void )
|
||||
{
|
||||
drawLF();
|
||||
int checkmark = 0x2714; // "✔"
|
||||
String namestr = StringTable.Localize("$SCORE_NAME");
|
||||
String deathsstr = StringTable.Localize("$SCORE_DEATHS");
|
||||
String fragsstr = StringTable.Localize("$SCORE_FRAGS");
|
||||
String totalstr = StringTable.Localize("$SCORE_TOTAL");
|
||||
int namelen = max(max(mSmallFont.StringWidth(namestr),mSmallFont.StringWidth("XXXXXXXXXX")),mSmallFont.StringWidth(totalstr));
|
||||
int nplayers = 0;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
namelen = max(namelen,mSmallFont.StringWidth(players[i].GetUserName()));
|
||||
nplayers++;
|
||||
}
|
||||
String deathstotal = String.Format("%d",total_deaths);
|
||||
String fragstotal = String.Format("%d",total_frags);
|
||||
int deathslen = max(mSmallFont.StringWidth(deathstotal),mSmallFont.StringWidth(deathsstr));
|
||||
int fragslen = max(mSmallFont.StringWidth(fragstotal),mSmallFont.StringWidth(fragsstr));
|
||||
int pad = 2;
|
||||
int spc = 12;
|
||||
int hspc = 6;
|
||||
int lspc = 2;
|
||||
int rwidth = mSmallFont.GetCharWidth(checkmark)+4;
|
||||
int linew = pad+rwidth+namelen+spc+deathslen+spc+fragslen+pad;
|
||||
int boxwidth = pad+linew+pad;
|
||||
int lineh = mSmallFont.GetHeight();
|
||||
int boxheight = pad+lineh+hspc+(lineh+lspc)*nplayers+hspc+lineh+pad;
|
||||
Screen.Dim("Black",.8,int((ss.x-boxwidth)*hs)/2,int((ss.y-boxheight)*hs)/2,int(boxwidth*hs),int(boxheight*hs));
|
||||
// header
|
||||
int xx = int((ss.x-boxwidth)/2+pad+pad+rwidth);
|
||||
int yy = int((ss.y-boxheight)/2+pad);
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,namestr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx += namelen+spc;
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,deathsstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx += deathslen+spc;
|
||||
Screen.DrawText(mSmallFont,Font.CR_GREEN,xx,yy,fragsstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
yy += lineh+hspc;
|
||||
String str;
|
||||
Array<Int> 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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|