diff --git a/README.md b/README.md index a85181966..0cf8f3e20 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ -## Some Weird Weapons Mod ~ GZDoom Edition ![](docimg/logo.png) -**SWWM GZ** brings to **GZDoom** a "best of" collection of custom weapons I've made for **Unreal Tournament**, plus many new things that didn't make the cut there. It is also effectively a reboot of the entire **SWWM** series, which unfortunately ended with the cancelled **SWWM Z**, this mod's direct predecessor. +**Codename: Demolitionist** is an all-original gameplay mod for **GZDoom** with a basis on rapid, fluid movement mechanics as well as very satisfying, punchy, strong weaponry. In it, you play as the titular **Demolitionist**, a robot with quite a personality, who's destined to save the day, as explosively as necessary. + +The mod's arsenal could be seen as a *"best of"* collection of custom weapons I've made for **Unreal Tournament**, plus many new things that didn't make the cut there. It is also effectively a reboot of the entire **Some Weird Weapons Mod *(SWWM)*** series, which unfortunately ended with the cancelled **SWWM Z**, this mod's direct predecessor *(hence this project originally starting its days under the name of **SWWM GZ**)*. It contains weapons and items remastered and revived from old projects such as the previous **SWWM** entries, along with the **Zanaveth Ultra Suite** side project, and also notably, the main **UnSX** series that never truly saw the light of day, as all work done on it so far has been lost forever. There may also be some original things here and there just to spice things up. @@ -556,6 +557,6 @@ These components are toggleable. That's all the info I can provide on this here Readme file, at least for now. Stay tuned for much more that will come in the future, as this mod is in constant development. -Anyway, hope you have lots of fun playing **SWWM GZ**. Godspeed, and happy fragging! +Anyway, hope you have lots of fun playing **Codename: Demolitionist**. Godspeed, and happy fragging! — *Marisa* diff --git a/animdefs.misc b/animdefs.misc new file mode 100644 index 000000000..b06d2f36b --- /dev/null +++ b/animdefs.misc @@ -0,0 +1 @@ +cameratexture LOGOFADE 64 64 diff --git a/cvarinfo.base b/cvarinfo.base index c02a6890e..53eb64705 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -122,6 +122,9 @@ nosave noarchive bool swwm_tooltipnote = false; // set if the note on how to dis nosave bool swwm_nointertips = false; // hides intermission tips, in case you don't want to see them server bool swwm_demoslayer = false; // if you're below 100hp, enemies drop healing orbs when you kill them nosave bool swwm_beepboop = false; // prompts the Demolitionist to go "beep", "boop" and "bop" when pressing any switch (may get annoying) +nosave bool swwm_oldlogo = false; // restores the old SWWM GZ logo and intro +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 // minimap settings nosave bool swwm_mm_enable = true; // show a minimap below the score counter diff --git a/decaldef.txt b/decaldef.txt index fe578c84a..5db06c8cb 100644 --- a/decaldef.txt +++ b/decaldef.txt @@ -570,5 +570,7 @@ decal HeartyGlow decal DemoSpray { pic DemoIcon + x-scale 0.25 + y-scale 0.25 solid } diff --git a/docimg/logo.png b/docimg/logo.png index f41076870..1502470e2 100644 Binary files a/docimg/logo.png and b/docimg/logo.png differ diff --git a/gldefs.misc b/gldefs.misc index 26b7a81bd..7b8802564 100644 --- a/gldefs.misc +++ b/gldefs.misc @@ -60,6 +60,68 @@ HardwareShader Texture "graphics/M_SWWM.png" Texture "Layer6" "graphics/M_SWWM_Layer6.png" Define "NO_BILINEAR" } +HardwareShader Texture "graphics/NewLogo.png" +{ + Shader "shaders/glsl/NewLogoAnimated.fp" + // what no 2d arrays does to a mf + Texture "Layer1" "graphics/NewLogo_Layer1.png" + Texture "Layer2" "graphics/NewLogo_Layer2.png" + Texture "Layer3" "graphics/NewLogo_Layer3.png" + Texture "gradtex" "graphics/NewLogo_Grad.png" + Texture "fadetex" "LOGOFADE" +} +HardwareShader Texture "graphics/M_DEMOLITIONIST.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/DemoIcon.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_DEEPIMPACT.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_EXPLOGUN.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_SPREADGUN.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_WALLBUSTER.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_EVISCERATOR.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_HELLBLAZER.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_BIOSPARK.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_SILVERBULLET.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_CANDYGUN.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_YNYKRON.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} +HardwareShader Texture "graphics/M_DEMOCHAN_PUSHER.png" +{ + Shader "shaders/glsl/Bilinear.fp" +} HardwareShader Texture "graphics/UnSXLogo.png" { Shader "shaders/glsl/Bilinear.fp" diff --git a/graphics/DemoIcon.png b/graphics/DemoIcon.png index 94297bc57..e04035f95 100644 Binary files a/graphics/DemoIcon.png and b/graphics/DemoIcon.png differ diff --git a/graphics/M_DEMOCHAN_BIOSPARK.png b/graphics/M_DEMOCHAN_BIOSPARK.png new file mode 100644 index 000000000..72f302d3b Binary files /dev/null and b/graphics/M_DEMOCHAN_BIOSPARK.png differ diff --git a/graphics/M_DEMOCHAN_CANDYGUN.png b/graphics/M_DEMOCHAN_CANDYGUN.png new file mode 100644 index 000000000..e9dd073e1 Binary files /dev/null and b/graphics/M_DEMOCHAN_CANDYGUN.png differ diff --git a/graphics/M_DEMOCHAN_DEEPIMPACT.png b/graphics/M_DEMOCHAN_DEEPIMPACT.png new file mode 100644 index 000000000..cc2fd807c Binary files /dev/null and b/graphics/M_DEMOCHAN_DEEPIMPACT.png differ diff --git a/graphics/M_DEMOCHAN_EVISCERATOR.png b/graphics/M_DEMOCHAN_EVISCERATOR.png new file mode 100644 index 000000000..f4f096bb2 Binary files /dev/null and b/graphics/M_DEMOCHAN_EVISCERATOR.png differ diff --git a/graphics/M_DEMOCHAN_EXPLOGUN.png b/graphics/M_DEMOCHAN_EXPLOGUN.png new file mode 100644 index 000000000..30a314cee Binary files /dev/null and b/graphics/M_DEMOCHAN_EXPLOGUN.png differ diff --git a/graphics/M_DEMOCHAN_HELLBLAZER.png b/graphics/M_DEMOCHAN_HELLBLAZER.png new file mode 100644 index 000000000..a60eaa4c0 Binary files /dev/null and b/graphics/M_DEMOCHAN_HELLBLAZER.png differ diff --git a/graphics/M_DEMOCHAN_PUSHER.png b/graphics/M_DEMOCHAN_PUSHER.png new file mode 100644 index 000000000..ad54eb9c1 Binary files /dev/null and b/graphics/M_DEMOCHAN_PUSHER.png differ diff --git a/graphics/M_DEMOCHAN_SILVERBULLET.png b/graphics/M_DEMOCHAN_SILVERBULLET.png new file mode 100644 index 000000000..641719b65 Binary files /dev/null and b/graphics/M_DEMOCHAN_SILVERBULLET.png differ diff --git a/graphics/M_DEMOCHAN_SPREADGUN.png b/graphics/M_DEMOCHAN_SPREADGUN.png new file mode 100644 index 000000000..5a2ff7d8a Binary files /dev/null and b/graphics/M_DEMOCHAN_SPREADGUN.png differ diff --git a/graphics/M_DEMOCHAN_WALLBUSTER.png b/graphics/M_DEMOCHAN_WALLBUSTER.png new file mode 100644 index 000000000..1039174fa Binary files /dev/null and b/graphics/M_DEMOCHAN_WALLBUSTER.png differ diff --git a/graphics/M_DEMOCHAN_YNYKRON.png b/graphics/M_DEMOCHAN_YNYKRON.png new file mode 100644 index 000000000..9226625ee Binary files /dev/null and b/graphics/M_DEMOCHAN_YNYKRON.png differ diff --git a/graphics/M_DEMOLITIONIST.png b/graphics/M_DEMOLITIONIST.png new file mode 100644 index 000000000..b9f3a1723 Binary files /dev/null and b/graphics/M_DEMOLITIONIST.png differ diff --git a/graphics/M_GRAD.png b/graphics/M_GRAD.png new file mode 100644 index 000000000..1793e8453 Binary files /dev/null and b/graphics/M_GRAD.png differ diff --git a/graphics/NewLogo.png b/graphics/NewLogo.png new file mode 100644 index 000000000..26e519b0d Binary files /dev/null and b/graphics/NewLogo.png differ diff --git a/graphics/NewLogo_Grad.png b/graphics/NewLogo_Grad.png new file mode 100644 index 000000000..ab24d4aae Binary files /dev/null and b/graphics/NewLogo_Grad.png differ diff --git a/graphics/NewLogo_Layer1.png b/graphics/NewLogo_Layer1.png new file mode 100644 index 000000000..8e54d66db Binary files /dev/null and b/graphics/NewLogo_Layer1.png differ diff --git a/graphics/NewLogo_Layer2.png b/graphics/NewLogo_Layer2.png new file mode 100644 index 000000000..e40010ac2 Binary files /dev/null and b/graphics/NewLogo_Layer2.png differ diff --git a/graphics/NewLogo_Layer3.png b/graphics/NewLogo_Layer3.png new file mode 100644 index 000000000..f6a3bf37a Binary files /dev/null and b/graphics/NewLogo_Layer3.png differ diff --git a/graphics/NewLogo_Letter0.png b/graphics/NewLogo_Letter0.png new file mode 100644 index 000000000..1ebffda96 Binary files /dev/null and b/graphics/NewLogo_Letter0.png differ diff --git a/graphics/NewLogo_Letter1.png b/graphics/NewLogo_Letter1.png new file mode 100644 index 000000000..05cb28140 Binary files /dev/null and b/graphics/NewLogo_Letter1.png differ diff --git a/graphics/NewLogo_Letter10.png b/graphics/NewLogo_Letter10.png new file mode 100644 index 000000000..a6b3fb34b Binary files /dev/null and b/graphics/NewLogo_Letter10.png differ diff --git a/graphics/NewLogo_Letter11.png b/graphics/NewLogo_Letter11.png new file mode 100644 index 000000000..2367c1676 Binary files /dev/null and b/graphics/NewLogo_Letter11.png differ diff --git a/graphics/NewLogo_Letter12.png b/graphics/NewLogo_Letter12.png new file mode 100644 index 000000000..b82e01b0e Binary files /dev/null and b/graphics/NewLogo_Letter12.png differ diff --git a/graphics/NewLogo_Letter2.png b/graphics/NewLogo_Letter2.png new file mode 100644 index 000000000..d34de4b4b Binary files /dev/null and b/graphics/NewLogo_Letter2.png differ diff --git a/graphics/NewLogo_Letter3.png b/graphics/NewLogo_Letter3.png new file mode 100644 index 000000000..c7d6842cc Binary files /dev/null and b/graphics/NewLogo_Letter3.png differ diff --git a/graphics/NewLogo_Letter4.png b/graphics/NewLogo_Letter4.png new file mode 100644 index 000000000..89eab4ef8 Binary files /dev/null and b/graphics/NewLogo_Letter4.png differ diff --git a/graphics/NewLogo_Letter5.png b/graphics/NewLogo_Letter5.png new file mode 100644 index 000000000..dfab5f003 Binary files /dev/null and b/graphics/NewLogo_Letter5.png differ diff --git a/graphics/NewLogo_Letter6.png b/graphics/NewLogo_Letter6.png new file mode 100644 index 000000000..4d411999e Binary files /dev/null and b/graphics/NewLogo_Letter6.png differ diff --git a/graphics/NewLogo_Letter7.png b/graphics/NewLogo_Letter7.png new file mode 100644 index 000000000..e3a2d69a9 Binary files /dev/null and b/graphics/NewLogo_Letter7.png differ diff --git a/graphics/NewLogo_Letter8.png b/graphics/NewLogo_Letter8.png new file mode 100644 index 000000000..65af7caea Binary files /dev/null and b/graphics/NewLogo_Letter8.png differ diff --git a/graphics/NewLogo_Letter9.png b/graphics/NewLogo_Letter9.png new file mode 100644 index 000000000..86dcd2692 Binary files /dev/null and b/graphics/NewLogo_Letter9.png differ diff --git a/language.def_base b/language.def_base index 5d9a57f61..fee4fd106 100644 --- a/language.def_base +++ b/language.def_base @@ -221,7 +221,7 @@ TXT_DEFAULTPICKUPMSG = "Unidentified Item"; QUITMSG = "You really want to go?\nWhat a shame..."; QUITMSG1 = "Wow, don't just go and leave!\nThere's still a lot of stuff to do!"; QUITMSG2 = "Oh, you're going now?\nWell, see you around, then."; -QUITMSG3 = "Thanks for playing \cySWWM GZ\c-.\nI hope to see you again soon."; +QUITMSG3 = "Thank you for playing.\nI hope to see you again soon."; QUITMSG4 = ""; QUITMSG5 = "Ah, fun time is over, I guess..."; QUITMSG6 = "My love for you is like a truck.\n\cg!!BERSERKER!!\c-"; @@ -686,17 +686,41 @@ D_TETHERFAIL = "The Safety Tether link was obstructed."; D_MASHIRO = "\cjShe knows where you are...\c-"; SWWM_YNYKRONREADY = "Ynykron Artifact ready for firing."; SWWM_SWAPWEAPON = "\cjPress \cfUse\cj to swap \cf%s\cj for \cf%s\cj.\c-"; +SWWM_TITLEPRESENTSA = "UnSX Team"; +SWWM_TITLEPRESENTSB = "presents"; SWWM_TITLEPRESENTS = "presents"; +SWWM_TITLEMODBYA = "a mod by"; +SWWM_TITLEMODBYB = "Marisa Kirisame"; SWWM_TITLEMODBY = "a mod by \cxMarisa Kirisame"; -SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" -"A wondrous GZDoom gameplay mod by Marisa Kirisame of UnSX Team\n" -"Lovingly designed 3D models with hand-painted 256-color dithered textures\n" -"Almost 60k lines of ZScript, and still counting (god help me)\n" -"The deepest lore this side of the Doom Modiverse\n" -"And much much more!\n" -"Greetz to Mub, Ribbed, Slemg, Bunr, Kegbine, Term-kun, Hype64, Bartendy, Skelly, Mr. BIG SHOT WildWeasel, Endy, Mima-sama, Sinkie, BillowPlaster, Disgusting Dog Water, Dangle Logo, Lämp Paipu, Leek Spah, Boingy, MarTREE, Dusty Demon Bread, Roasted Rock, Ed the Netcode Boy, Thirst Cactus, JimJam, Cappy Jay, A Nom, Missy Fits, Minor Cookie, Squid Kid, YukiCute, MafSulk, FineRaff25, NetroRutcase, ShudTheFugUpRyan, Kobl, Cacous Seriodemon, Zomb, Man of Chins, Bun Pun, Zikeous Shadestructor, Blimyot, Baja Blast Tittums, DrySpy.py, Typo Gem, Wantopus, Morf, Daedalus, Popato, SpengRob, Sgt. Shellpost, Loud M, Snk, Donut, C.Kid, Emit Birb, You Go To Sleep, Rach, Le No Chicken, Murasa, Smart Cactus Dude, Phantomboobs, Sanae Kochiya, Gardeboy, Cat, HK417, Smol Koa, Joe Mama, Jahn, Guta, Glue, Atan, Schweet Prints, Angury Teeth Practitioner, Sell Her, MiSiFu, Portuguese Sausage, Scoob Stub, Actually Jabba, Very Honest Cat, Chiaki's Tit Mole, Homie, Snacks, Tubz, Toof, Teef, Frisp, Trashkat, Succ 'n Spicy, Melissa Follower When, Shokku, Scummyboi, Kat Gravity Rush, John Romero, John Carmack, Tim Allen, Tim Sweeney and last but not least my beloved pet dragon\n" -"I tried to squeeze as many names as possible in there, that I could remember, at least, so if you're not in there and want in, feel free to ask\n" -"There's nothing else to see here, the scroll will now wrap around, see you again, have a nice day"; +SWWM_TITLEINTROA = "On that day, humankind saw itself in dire danger, facing an impending doom."; +SWWM_TITLEINTROB = "But one machine stood up, who fought back, who could end this whole invasion."; +SWWM_TITLEINTROC = "The demons would learn to fear that machine, who they know only by one name..."; +SWWM_NTITLESCROLL = "9"; +SWWM_TITLESCROLL1 = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons"; +SWWM_TITLESCROLL1_NEW = "Codename: Demolitionist ~ Cute Robutt Whomst Love To Explode Demons"; +SWWM_TITLESCROLL2 = "A wondrous GZDoom gameplay mod by Marisa Kirisame of UnSX Team"; +SWWM_TITLESCROLL3 = "Lovingly designed 3D models with hand-painted 256-color dithered textures"; +SWWM_TITLESCROLL4 = "Over 60k lines of ZScript, and still counting (god help me)"; +SWWM_TITLESCROLL5 = "The deepest lore this side of the Doom Modiverse"; +SWWM_TITLESCROLL6 = "And much much more!"; +SWWM_TITLESCROLL7 = "Greetz to Mub, Ribbed, Slemg, Bunr, Kegbine, Term-kun, Hype64, Bartendy, Skelly, Mr. BIG SHOT WildWeasel, Endy, Mima-sama, Sinkie, BillowPlaster, Disgusting Dog Water, Dangle Logo, Lämp Paipu, Leek Spah, Boingy, MarTREE, Dusty Demon Bread, Roasted Rock, Ed the Netcode Boy, Thirst Cactus, JimJam, Cappy Jay, A Nom, Missy Fits, Minor Cookie, Squid Kid, YukiCute, MafSulk, FineRaff25, NetroRutcase, ShudTheFugUpRyan, Kobl, Cacous Seriodemon, Zomb, Man of Chins, Bun Pun, Zikeous Shadestructor, Blimyot, Baja Blast Tittums, DrySpy.py, Typo Gem, Wantopus, Morf, Daedalus, Popato, SpengRob, Sgt. Shellpost, Loud M, Snk, Donut, C.Kid, Emit Birb, You Go To Sleep, Rach, Le No Chicken, Murasa, Smart Cactus Dude, Phantomboobs, Sanae Kochiya, Gardeboy, Cat, HK417, Smol Koa, Joe Mama, Jahn, Guta, Glue, Atan, Schweet Prints, Angury Teeth Practitioner, Sell Her, MiSiFu, Portuguese Sausage, Scoob Stub, Actually Jabba, Very Honest Cat, Chiaki's Tit Mole, Homie, Snacks, Tubz, Toof, Teef, Frisp, Trashkat, Succ 'n Spicy, Melissa Follower When, Shokku, Scummyboi, Kat Gravity Rush, John Romero, John Carmack, Tim Allen, Tim Sweeney and last but not least my beloved pet dragon"; +SWWM_TITLESCROLL8 = "I tried to squeeze as many names as possible in there, that I could remember, at least, so if you're not in there and want in, feel free to ask"; +SWWM_TITLESCROLL9 = "There's nothing else to see here, the scroll will now wrap around, see you again, have a nice day"; +SWWM_NTITLESUB = "14"; +SWWM_TITLESUB1 = "The World Is In Danger And We Have Just Sent\nThis Double-Cheeked Sassy Robot To Save It!?"; +SWWM_TITLESUB2 = "&Knuckles"; +SWWM_TITLESUB3 = "The mod previously known as SWWM GZ"; +SWWM_TITLESUB4 = "I'm so sorry, Icarus, but you\ncan no longer call this Swim Jizz"; +SWWM_TITLESUB5 = "Do you like guns? We got guns!\nBig guns! Small guns! All the guns!"; +SWWM_TITLESUB6 = "Featuring revolutionary Shiny Metal Cheeks™ technology!"; +SWWM_TITLESUB7 = "This ain't your ordinary gameplay mod, no sir"; +SWWM_TITLESUB8 = "The misadventures of a very sassy robot\nand all their fun explosive toys"; +SWWM_TITLESUB9 = "Featuring Dante from the Devil May Cry series\n(not really, that's a joke)"; +SWWM_TITLESUB10 = ""; +SWWM_TITLESUB11 = "Slaughterwads too hard? No problem!\nJust play them with this mod!"; +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_UNIT_METER = "m"; SWWM_UNIT_KILOMETER = "km"; SWWM_UNIT_KPH = "km/h"; diff --git a/language.def_menu b/language.def_menu index c124c758b..5326e9253 100644 --- a/language.def_menu +++ b/language.def_menu @@ -1,6 +1,6 @@ [default] // keybinds -SWWM_KEYS = "SWWM GZ Bindings"; +SWWM_KEYS = "DEMOLITIONIST Bindings"; SWWM_PRIMARYFIRE = "Primary Fire"; SWWM_SECONDARYFIRE = "Secondary Fire"; SWWM_RELOADFIRE = "Reload"; @@ -29,7 +29,7 @@ SWWM_SKHARDCORECONFIRM = "\cgYou think the mod's too easy?\nPrepare yourself.\c- SWWM_SKLUNATIC = "\crI WANT DIE\c-"; SWWM_SKLUNATICCONFIRM = "\crYou will die, you will suffer.\nThat, I can guarantee.\c-\n\n\cfAll changes from Masochist\n+\n2x speedup for all enemy actions\nEnemy projectiles will multiply\nAdditional enemies may spawn\nEnemies react instantly\nEnemies don't flinch\nInfighting is disabled\c-\n\n(Press Y to die instantly)"; // mod menu -SWWM_MTITLE = "SWWM GZ Options"; +SWWM_MTITLE = "DEMOLITIONIST Options"; SWWM_PTITLE = "Player Options"; SWWM_VOICETYPE = "Demolitionist Voice Pack"; SWWM_MUTELEVEL = "Voice Muting Level"; @@ -216,6 +216,7 @@ SWWM_DEMOSLAYER = "Demoslayer Mode"; SWWM_BEEPBOOP = "Switch Emoting"; SWWM_VOICEAMP = "Voice Amplification"; SWWM_CLEARFX = "Clear All Effects"; +SWWM_OLDLOGO = "Old Branding"; SWWM_MMTITLE = "Minimap Settings"; SWWM_MM_ENABLE = "Show Minimap"; SWWM_MM_ROTATE = "Rotate Minimap"; @@ -379,6 +380,7 @@ TOOLTIP_SWWM_DEMOSLAYER = "Killed enemies may drop health and armor orbs."; 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."; +TOOLTIP_SWWM_OLDLOGO = "For those who miss the days of SWWM GZ, you can restore the old title screen and main menu with this."; TOOLTIP_SWWMMINIMAPMENU = "Configure the minimap."; TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements."; TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter."; @@ -415,8 +417,21 @@ TOOLTIP_SWWM_MM_THINGCOLOR_CITEM = "Color for items that count towards map tally TOOLTIP_SWWM_MM_THINGCOLOR_VIPITEM = "Color for very important items."; TOOLTIP_SWWM_MM_THINGCOLOR_SHOOTABLE = "Color for things that can be damaged."; TOOLTIP_SWWM_MM_THINGCOLOR_MISSILE = "Color for projectiles."; +// main menu poses (do not localize) +SWWM_NMENUPOSE = "11"; +SWWM_MENUPOSE1 = "graphics/M_DEMOCHAN_DEEPIMPACT.png"; +SWWM_MENUPOSE2 = "graphics/M_DEMOCHAN_EXPLOGUN.png"; +SWWM_MENUPOSE3 = "graphics/M_DEMOCHAN_SPREADGUN.png"; +SWWM_MENUPOSE4 = "graphics/M_DEMOCHAN_WALLBUSTER.png"; +SWWM_MENUPOSE5 = "graphics/M_DEMOCHAN_EVISCERATOR.png"; +SWWM_MENUPOSE6 = "graphics/M_DEMOCHAN_HELLBLAZER.png"; +SWWM_MENUPOSE7 = "graphics/M_DEMOCHAN_BIOSPARK.png"; +SWWM_MENUPOSE8 = "graphics/M_DEMOCHAN_SILVERBULLET.png"; +SWWM_MENUPOSE9 = "graphics/M_DEMOCHAN_CANDYGUN.png"; +SWWM_MENUPOSE10 = "graphics/M_DEMOCHAN_YNYKRON.png"; +SWWM_MENUPOSE11 = "graphics/M_DEMOCHAN_PUSHER.png"; // credits -SWWM_MCREDS = "SWWM GZ Credits"; +SWWM_MCREDS = "DEMOLITIONIST Credits"; SWWM_CSTITLE = "UnSX Side Story: Demolitionist"; SWWM_CSTITLE2 = "Cute Robutt Whomst Love To Explode Demons"; SWWM_CLEAD = "Development Lead:"; diff --git a/language.es_base b/language.es_base index cd9872ce9..c01de9f25 100644 --- a/language.es_base +++ b/language.es_base @@ -203,7 +203,7 @@ TXT_DEFAULTPICKUPMSG = "Ítem No Identificado"; QUITMSG = "¿En serio quieres irte?\nPues que pena..."; QUITMSG1 = "Wow, pero no te vayas aun,\n¡quedan muchas cosas que hacer!"; QUITMSG2 = "¿Oh, te marchas ya? Pues nada,\nnos vemos luego, supongo."; -QUITMSG3 = "Gracias por jugar a \cySWWM GZ\c-.\nEspero volverte a ver pronto."; +QUITMSG3 = "Gracias por jugar.\nEspero volverte a ver pronto."; QUITMSG5 = "Ah, se acabó la fiesta, supongo..."; QUITMSG6 = "Mi amor por ti es como un camión.\n\cg!!BERSERKER!!\c-"; QUITMSG7 = "No te vayas ahora, o \cfSaya\c- hablará\nmal de ti en Twitter punto com."; @@ -580,16 +580,34 @@ D_TETHERFAIL = "El vínculo del Enlace de Seguridad fue obstruído."; D_MASHIRO = "\cjSabe donde estás...\c-"; SWWM_YNYKRONREADY = "Artefacto Ynykron listo para disparar."; SWWM_SWAPWEAPON = "\cjPulsa \cfUsar\cj para cambiar \cf%s\cj por \cf%s\cj.\c-"; +SWWM_TITLEPRESENTSB = "presenta"; SWWM_TITLEPRESENTS = "presenta"; +SWWM_TITLEMODBYA = "un mod de"; SWWM_TITLEMODBY = "un mod de \cxMarisa Kirisame"; -SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" -"Un maravilleante mod de gameplay para GZDoom por Marisa Kirisame de UnSX Team\n" -"Modelos 3D diseñados con cariño con texturas pintadas a mano de 256 colores con dithering\n" -"Casi 60 mil líneas de ZScript, y aun contando (dios me ayude)\n" -"El lore más profundo a este lado del Modiverso de Doom\n" -"¡Y mucho mucho más!\nSaludos a Mub, Ribbed, Slemg, Bunr, Kegbine, Term-kun, Hype64, Bartendy, Skelly, Mr. BIG SHOT WildWeasel, Endy, Mima-sama, Sinkie, BillowPlaster, Disgusting Dog Water, Dangle Logo, Lämp Paipu, Leek Spah, Boingy, MarTREE, Dusty Demon Bread, Roasted Rock, Ed the Netcode Boy, Thirst Cactus, JimJam, Cappy Jay, A Nom, Missy Fits, Minor Cookie, Squid Kid, YukiCute, MafSulk, FineRaff25, NetroRutcase, ShudTheFugUpRyan, Kobl, Cacous Seriodemon, Zomb, Man of Chins, Bun Pun, Zikeous Shadestructor, Blimyot, Baja Blast Tittums, DrySpy.py, Typo Gem, Wantopus, Morf, Daedalus, Popato, SpengRob, Sgt. Shellpost, Loud M, Snk, Donut, C.Kid, Emit Birb, You Go To Sleep, Rach, Le No Chicken, Murasa, Smart Cactus Dude, Phantomboobs, Sanae Kochiya, Gardeboy, Cat, HK417, Smol Koa, Joe Mama, Jahn, Guta, Glue, Atan, Schweet Prints, Angury Teeth Practitioner, Sell Her, MiSiFu, Portuguese Sausage, Scoob Stub, Actually Jabba, Very Honest Cat, Chiaki's Tit Mole, Homie, Snacks, Tubz, Toof, Teef, Frisp, Trashkat, Succ 'n Spicy, Melissa Follower When, Shokku, Scummyboi, Kat Gravity Rush, John Romero, John Carmack, Tim Allen, Tim Sweeney y por último pero no menos importante mi querido dragón mascota\n" -"He intentado estrujar todos los nombres que he podido ahí, que haya podido recordar, por lo menos, así que si no estás ahí y quieres entrar, solo pídelo\n" -"Ya no queda nada más que ver aquí, el scroll ahora hará bucle, see you again, have a nice day"; +SWWM_TITLEINTROA = "Ese día, la humanidad se vió en peligro, enfrentándose a su propia perdición."; +SWWM_TITLEINTROB = "Pero una máquina se alzó, decidida a luchar, y poner fin a toda esta invasión."; +SWWM_TITLEINTROC = "Los demonios aprenderían a temer la máquina, la cual conocen por un solo nombre..."; +SWWM_TITLESCROLL2 = "Un maravilleante mod de gameplay para GZDoom por Marisa Kirisame de UnSX Team"; +SWWM_TITLESCROLL3 = "Modelos 3D diseñados con cariño con texturas pintadas a mano de 256 colores con dithering"; +SWWM_TITLESCROLL4 = "Más de 60 mil líneas de ZScript, y aun contando (dios me ayude)"; +SWWM_TITLESCROLL5 = "El lore más profundo a este lado del Modiverso de Doom"; +SWWM_TITLESCROLL6 = "¡Y mucho mucho más!"; +SWWM_TITLESCROLL7 = "Saludos a Mub, Ribbed, Slemg, Bunr, Kegbine, Term-kun, Hype64, Bartendy, Skelly, Mr. BIG SHOT WildWeasel, Endy, Mima-sama, Sinkie, BillowPlaster, Disgusting Dog Water, Dangle Logo, Lämp Paipu, Leek Spah, Boingy, MarTREE, Dusty Demon Bread, Roasted Rock, Ed the Netcode Boy, Thirst Cactus, JimJam, Cappy Jay, A Nom, Missy Fits, Minor Cookie, Squid Kid, YukiCute, MafSulk, FineRaff25, NetroRutcase, ShudTheFugUpRyan, Kobl, Cacous Seriodemon, Zomb, Man of Chins, Bun Pun, Zikeous Shadestructor, Blimyot, Baja Blast Tittums, DrySpy.py, Typo Gem, Wantopus, Morf, Daedalus, Popato, SpengRob, Sgt. Shellpost, Loud M, Snk, Donut, C.Kid, Emit Birb, You Go To Sleep, Rach, Le No Chicken, Murasa, Smart Cactus Dude, Phantomboobs, Sanae Kochiya, Gardeboy, Cat, HK417, Smol Koa, Joe Mama, Jahn, Guta, Glue, Atan, Schweet Prints, Angury Teeth Practitioner, Sell Her, MiSiFu, Portuguese Sausage, Scoob Stub, Actually Jabba, Very Honest Cat, Chiaki's Tit Mole, Homie, Snacks, Tubz, Toof, Teef, Frisp, Trashkat, Succ 'n Spicy, Melissa Follower When, Shokku, Scummyboi, Kat Gravity Rush, John Romero, John Carmack, Tim Allen, Tim Sweeney y por último pero no menos importante mi querido dragón mascota"; +SWWM_TITLESCROLL8 = "He intentado estrujar todos los nombres que he podido ahí, que haya podido recordar, por lo menos, así que si no estás ahí y quieres entrar, solo pídelo"; +SWWM_TITLESCROLL9 = "Ya no queda nada más que ver aquí, el scroll ahora hará bucle, see you again, have a nice day"; +SWWM_TITLESUB1 = "El Mundo Está En Peligro Y Acabamos De Mandar\nEste Robot Culogordo Guasón Para Salvarlo!?"; +SWWM_TITLESUB3 = "El mod anteriormente conocido como SWWM GZ"; +SWWM_TITLESUB4 = "Lo siento mucho, Icarus, pero ya\nno puedes llamarlo Swim Jizz"; +SWWM_TITLESUB5 = "¿Te gustan las armas? ¡Tenemos armas!\n¡Armas grandes! ¡Armas pequeñas! ¡Todas las armas!"; +SWWM_TITLESUB6 = "¡Con tecnología revolucionaria de Brillantes Nalgas Metálicas!"; +SWWM_TITLESUB7 = "Este no es el típico mod de gameplay, no señor"; +SWWM_TITLESUB8 = "Las desaventuras de un robot graciosillo\ny todos sus juguetes explosivos"; +SWWM_TITLESUB9 = "Presentando a Dante de la serie Devil May Cry\n(bueno no, es broma)"; +SWWM_TITLESUB10 = ""; +SWWM_TITLESUB11 = "¿Slaughterwads demasiado difíciles? ¡No hay problema!\n¡Solo tienes que jugarlos con este mod!"; +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_YOURSELF = "Tú"; SWWM_DOKIDOKI = "El Poder del Amor™"; SWWM_GRAVKILL = "Gravedad"; diff --git a/language.es_menu b/language.es_menu index 3d680ca3e..5fc7df775 100644 --- a/language.es_menu +++ b/language.es_menu @@ -1,6 +1,6 @@ [es] // keybinds -SWWM_KEYS = "Controles de SWWM GZ"; +SWWM_KEYS = "Controles de DEMOLITIONIST"; SWWM_PRIMARYFIRE = "Fuego Primario"; SWWM_SECONDARYFIRE = "Fuego Secundario"; SWWM_RELOADFIRE = "Recargar"; @@ -29,7 +29,7 @@ SWWM_SKHARDCORECONFIRM = "\cg¿Crees que el mod es muy fácil?\nPues prepárate. SWWM_SKLUNATIC = "\crINTENTA MUERTE\c-"; SWWM_SKLUNATICCONFIRM = "\crVas a morir, vas a sufrir.\nEso te lo puedo garantizar.\c-\n\n\cfTodos los cambios de Masoca\n+\nDoble velocidad de enemigos\nProyectiles enemigos duplicados\nPueden aparecer enemigos extra\nReflejos instantáneos de enemigo\nLos enemigos no se estremecen\nLos enemigos no pelean entre si\c-\n\n(Pulsa Y para morir al instante)"; // mod menu -SWWM_MTITLE = "Opciones de SWWM GZ"; +SWWM_MTITLE = "Opciones de DEMOLITIONIST"; SWWM_PTITLE = "Opciones de Jugador"; SWWM_VOICETYPE = "Pack de Voz de Demolicionista"; SWWM_MUTELEVEL = "Nivel de Muteo de Voz"; @@ -415,7 +415,7 @@ TOOLTIP_SWWM_MM_THINGCOLOR_VIPITEM = "Color para ítems muy importantes."; TOOLTIP_SWWM_MM_THINGCOLOR_SHOOTABLE = "Color para cosas que pueden ser dañadas."; TOOLTIP_SWWM_MM_THINGCOLOR_MISSILE = "Color para proyectiles."; // credits -SWWM_MCREDS = "Créditos de SWWM GZ"; +SWWM_MCREDS = "Créditos de DEMOLITIONIST"; SWWM_CLEAD = "Desarrollo Principal:"; SWWM_CDEV2 = "Autoproclamada Maga de ZScript"; SWWM_CASSETS = "Assets Adicionales:"; diff --git a/language.version b/language.version index ebe159d39..136b3008c 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.2pre r106 \cu(Tue 11 Jan 02:18:38 CET 2022)\c-"; -SWWM_SHORTVER="\cw1.2pre r106 \cu(2022-01-11 02:18:38)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.2pre r107 \cu(Thu 13 Jan 00:27:14 CET 2022)\c-"; +SWWM_SHORTVER="\cw1.2pre r107 \cu(2022-01-13 00:27:14)\c-"; diff --git a/menudef.txt b/menudef.txt index 5c796c7e4..9b600f164 100644 --- a/menudef.txt +++ b/menudef.txt @@ -165,6 +165,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_INTERMUSIC", "swwm_intermusic", "YesNo" } Option "$SWWM_FUZZ", "swwm_fuzz", "YesNo" + Option "$SWWM_OLDLOGO", "swwm_oldlogo", "YesNo" IfGame(Doom, Heretic) { Option "$SWWM_SILENCEMAP", "swwm_silencemap", "YesNo" diff --git a/music/TRAUMATI.XM b/music/TRAUMATI.XM index 0b2beb975..50e610398 100644 Binary files a/music/TRAUMATI.XM and b/music/TRAUMATI.XM differ diff --git a/shaders/glsl/NewLogoAnimated.fp b/shaders/glsl/NewLogoAnimated.fp new file mode 100644 index 000000000..2b8a90999 --- /dev/null +++ b/shaders/glsl/NewLogoAnimated.fp @@ -0,0 +1,98 @@ +// animated DEMOLITIONIST logo + +#define overlay(a,b) (a<0.5)?(2.0*a*b):(1.0-(2.0*(1.0-a)*(1.0-b))) +#define hardlight(a,b) (2*a<1.0)?clamp(2.0*a*b,0.0,1.0):clamp(1.0-2.0*(1.0-b)*(1.0-a),0.0,1.0) +const float pi = 3.14159265358979323846; + +vec2 warpcoord( in vec2 uv ) +{ + vec2 offset; + offset.y = sin(pi*2.*(uv.x*8.+timer*.25))*.005; + offset.x = cos(pi*2.*(uv.y*4.+timer*.25))*.005; + return uv+offset; +} + +// based on gimp color to alpha, but simplified +vec4 blacktoalpha( in vec4 src ) +{ + vec4 dst = src; + float alpha = 0.; + float a; + a = clamp(dst.r,0.,1.); + if ( a > alpha ) alpha = a; + a = clamp(dst.g,0.,1.); + if ( a > alpha ) alpha = a; + a = clamp(dst.b,0.,1.); + if ( a > alpha ) alpha = a; + if ( alpha > 0. ) + { + float ainv = 1./alpha; + dst.rgb *= ainv; + } + dst.a *= alpha; + return dst; +} +#ifdef NO_BILINEAR +#define BilinearSample(x,y,z,w) texture(x,y) +#else +vec4 BilinearSample( in sampler2D tex, in vec2 pos, in vec2 size, in vec2 pxsize ) +{ + vec2 f = fract(pos*size); + pos += (.5-f)*pxsize; + vec4 p0q0 = texture(tex,pos); + vec4 p1q0 = texture(tex,pos+vec2(pxsize.x,0)); + vec4 p0q1 = texture(tex,pos+vec2(0,pxsize.y)); + vec4 p1q1 = texture(tex,pos+vec2(pxsize.x,pxsize.y)); + vec4 pInterp_q0 = mix(p0q0,p1q0,f.x); + vec4 pInterp_q1 = mix(p0q1,p1q1,f.x); + return mix(pInterp_q0,pInterp_q1,f.y); +} +#endif + +vec3 GradientMap( in vec3 color ) +{ + double gray = dot(color,vec3(.333333)); + vec2 size = vec2(512.,8.); + vec2 pxsize = 1./size; + return BilinearSample(gradtex,vec2(gray/2.+.25,0),size,pxsize).rgb; +} + +void SetupMaterial( inout Material mat ) +{ + // store these to save some time + vec2 size = vec2(textureSize(Layer1,0)); + vec2 pxsize = 1./size; + // y'all ready for this multilayered madness? + vec2 uv = vTexCoord.st; + // base blank layer + vec4 base = vec4(1.); + // first layer, warp then multiply red + base.rgb *= BilinearSample(Layer1,warpcoord(uv),size,pxsize).x; + // first layer, multiply green + base.rgb *= BilinearSample(Layer1,uv,size,pxsize).y; + // first layer, add blue + base.rgb += BilinearSample(Layer1,uv,size,pxsize).zzz; + // multiply by red fade + base.rgb *= texture(fadetex,vec2(.5)).x; + // gradient map result + base.rgb = GradientMap(base.rgb); + // color to alpha + base = blacktoalpha(base); + // second layer, alpha blend + vec4 tmp = BilinearSample(Layer2,uv,size,pxsize); + vec4 tmp2; + tmp2.a = tmp.a+base.a*(1-tmp.a); + tmp2.rgb = (tmp.rgb*tmp.a+base.rgb*base.a*(1-tmp.a))/tmp2.a; + base = tmp2; + // third layer, hard light with two multiplied masks + tmp.xy = BilinearSample(Layer3,uv,size,pxsize).xy; + tmp.y *= BilinearSample(Layer3,clamp(uv+vec2(1.-texture(fadetex,vec2(.5)).y*2.,0.),vec2(0.),vec2(1.)),size,pxsize).z; + tmp2.r = hardlight(base.r,tmp.x); + tmp2.g = hardlight(base.g,tmp.x); + tmp2.b = hardlight(base.b,tmp.x); + base.rgb = mix(base.rgb,tmp2.rgb,tmp.y); + // clamp + base = clamp(base,vec4(0.),vec4(1.)); + // ding, logo's done + mat.Base = base; +} diff --git a/sndinfo.txt b/sndinfo.txt index de0fe5523..bfd78010d 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -23,6 +23,8 @@ title/explo3 sounds/OUCHEX3.ogg title/explo4 sounds/OUCHEX4.ogg $random title/explo { title/explo1 title/explo2 title/explo3 title/explo4 } $limit title/explo 64 +title/thump sounds/TitleThump.ogg +$limit title/thump 16 saya/giggle1 sounds/saya/saya_giggle1.ogg saya/giggle2 sounds/saya/saya_giggle2.ogg diff --git a/sounds/TitleThump.ogg b/sounds/TitleThump.ogg new file mode 100644 index 000000000..b722111a0 Binary files /dev/null and b/sounds/TitleThump.ogg differ diff --git a/sprites/LGFDA0.png b/sprites/LGFDA0.png new file mode 100644 index 000000000..35e7fb389 Binary files /dev/null and b/sprites/LGFDA0.png differ diff --git a/zmapinfo.txt b/zmapinfo.txt index d23b945e1..999254e51 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -100,14 +100,33 @@ GameInfo "KirinMangaGesture", "KirinPlushGesture", "PsykkonovexxGesture" - // really damn big textures + // preload intro textures PrecacheTextures = "graphics/SWWMGZLogo.png", "graphics/SWWMGZLogo_Layer1.png", "graphics/SWWMGZLogo_Layer2.png", "graphics/SWWMGZLogo_Layer3.png", "graphics/SWWMGZLogo_Layer4.png", "graphics/SWWMGZLogo_Layer5.png", - "graphics/SWWMGZLogo_Layer6.png" + "graphics/SWWMGZLogo_Layer6.png", + "graphics/NewLogo.png", + "graphics/NewLogo_Grad.png", + "graphics/NewLogo_Layer1.png", + "graphics/NewLogo_Layer2.png", + "graphics/NewLogo_Layer3.png", + "graphics/NewLogo_Letter0.png", + "graphics/NewLogo_Letter1.png", + "graphics/NewLogo_Letter2.png", + "graphics/NewLogo_Letter3.png", + "graphics/NewLogo_Letter4.png", + "graphics/NewLogo_Letter5.png", + "graphics/NewLogo_Letter6.png", + "graphics/NewLogo_Letter7.png", + "graphics/NewLogo_Letter8.png", + "graphics/NewLogo_Letter9.png", + "graphics/NewLogo_Letter10.png", + "graphics/NewLogo_Letter11.png", + "graphics/NewLogo_Letter12.png", + "graphics/NewLogo_Letter13.png" } ClearSkills diff --git a/zscript/menu/swwm_credits.zsc b/zscript/menu/swwm_credits.zsc index b3e9a7627..0b273d689 100644 --- a/zscript/menu/swwm_credits.zsc +++ b/zscript/menu/swwm_credits.zsc @@ -115,7 +115,8 @@ Class SWWMCreditsMenu : GenericMenu String oldlang; Vector2 ss; double hs; - int logow, logoh; + Vector2 logosz; + double logow, logoh; String oldmus; int oldorder; @@ -139,8 +140,13 @@ Class SWWMCreditsMenu : GenericMenu Super.Init(parent); bgtex = TexMan.CheckForTexture("graphics/tempbg.png",TexMan.Type_Any); UpdateSize(); - logo = TexMan.CheckForTexture("graphics/M_SWWM.png",TexMan.Type_Any); - [logow, logoh] = TexMan.GetSize(logo); + logo = TexMan.CheckForTexture(swwm_oldlogo?"graphics/M_SWWM.png":"graphics/M_DEMOLITIONIST.png",TexMan.Type_Any); + logosz = TexMan.GetScaledSize(logo); + if ( !swwm_oldlogo ) + { + logosz *= (2./3.); + logosz.y += 36.; + } stitle = StringTable.Localize("$SWWM_CSTITLE"); stitle2 = StringTable.Localize("$SWWM_CSTITLE2"); sdev = StringTable.Localize("$SWWM_CLEAD"); @@ -175,8 +181,7 @@ Class SWWMCreditsMenu : GenericMenu clocal.Push(new("SWWMCreditsEntry").Init("Marisa Kirisame","$SWWM_LOCES")); cpatrons.Push(new("SWWMCreditsEntry").Init("Snacks")); cpatrons.Push(new("SWWMCreditsEntry").Init("john")); - cpatrons.Push(new("SWWMCreditsEntry").Init("Jonas Höglund")); - cpatrons.Push(new("SWWMCreditsEntry").Init("Alexa Jones-Gonzales")); + cpatrons.Push(new("SWWMCreditsEntry").Init("FireFly")); cpatrons.Push(new("SWWMCreditsEntry").Init("Corey Hectus")); cpatrons.Push(new("SWWMCreditsEntry").Init("Dac")); cpatrons.Push(new("SWWMCreditsEntry").Init("Pietro Gagliardi")); @@ -185,7 +190,6 @@ Class SWWMCreditsMenu : GenericMenu cpatrons.Push(new("SWWMCreditsEntry").Init("John")); cpatrons.Push(new("SWWMCreditsEntry").Init("VoanHead")); cpatrons.Push(new("SWWMCreditsEntry").Init("NekoMithos")); - cpatrons.Push(new("SWWMCreditsEntry").Init("Ceyne Taikato")); cpatrons.Push(new("SWWMCreditsEntry").Init("bouncytem")); cpatrons.Push(new("SWWMCreditsEntry").Init("Brett Saltzer")); cpatrons.Push(new("SWWMCreditsEntry").Init("Clint Walker")); @@ -210,9 +214,9 @@ Class SWWMCreditsMenu : GenericMenu cthanks.Push(new("SWWMCreditsEntry").Init("$SWWM_CDEVS1","$SWWM_CDEVS2")); cthanks.Push(new("SWWMCreditsEntry").Init("$SWWM_CYOU1","$SWWM_CYOU2")); speed = 16.; - spos = ss.y-logoh; + spos = ss.y-logosz.y; // calc total height - theight = logoh; + theight = int(logosz.y); theight += 8*(SECTION_PAD+bigfont.GetHeight()); for ( int i=0; i ss.y) ) return logoh; - Screen.DrawTexture(logo,true,x-logow/2,y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawText(smallfont,Font.CR_SAPPHIRE,x-smallfont.StringWidth(stitle)/2,y+(logoh-28),stitle,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( (y+logosz.y < 0) || (y > ss.y) ) return logosz.y; + if ( swwm_oldlogo ) Screen.DrawTexture(logo,true,x-logosz.x/2,y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + else Screen.DrawTexture(logo,true,x-logosz.x/2,y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ScaleX,(2./3.),DTA_ScaleY,(2./3.)); + Screen.DrawText(smallfont,Font.CR_SAPPHIRE,x-smallfont.StringWidth(stitle)/2,y+(logosz.y-28),stitle,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); // underline int w = max(smallfont.StringWidth(stitle),smallfont.StringWidth(stitle2)); int cw = int(ceil((w+8)/6.))*6; double xx = x-cw/2; for ( int i=0; i done; + Array candidates; + let c = CVar.FindCVar('swwm_menuposehistory'); + String str = c.GetString(); + if ( str != "" ) str.Split(done,";"); + else + { + c.SetString("2"); + return TexMan.CheckForTexture(StringTable.Localize("$SWWM_MENUPOSE2"),TexMan.Type_Any); + } + int npose = StringTable.Localize("$SWWM_NMENUPOSE").ToInt(); + for ( int i=1; i<=npose; i++ ) + { + String sn = String.Format("%d",i); + if ( done.Find(sn) < done.Size() ) continue; + candidates.Push(i); + } + if ( candidates.Size() == 0 ) + { + c.SetString("2"); + return TexMan.CheckForTexture(StringTable.Localize("$SWWM_MENUPOSE2"),TexMan.Type_Any); + } + int which = candidates[Random[UIStuff](0,candidates.Size()-1)]; + c.SetString(str..";"..which); + return TexMan.CheckForTexture(StringTable.Localize("$SWWM_MENUPOSE"..which),TexMan.Type_Any); + } + override void Init( Menu parent, ListMenuDescriptor desc ) { Super.Init(parent,desc); - demotex = TexMan.CheckForTexture("graphics/M_DEMOCHAN.png",TexMan.Type_Any); + demotex = GetDemoTex(); demopos = 120; prevms = MSTime(); } override void OnReturn() { + demotex = GetDemoTex(); demopos = 120; prevms = MSTime(); } + private int GetMenuYOffset() + { + int mofs = CleanHeight_1/2-160; + return mofs; + } + override void Drawer() { double frametime = (MSTime()-prevms)/1000.; double theta = clamp(2.*frametime,0.,1.); // naive, but whatever if ( prevms ) demopos = demopos*(1.-theta)-40*theta; double alph = clamp(1.-(demopos/100),0.,1.); - Screen.DrawTexture(demotex,false,(demopos-160)*CleanXFac_1+(Screen.GetWidth()*.5),(Screen.GetHeight()-400*CleanYFac_1)/2 + sin(gametic*GameTicRate*.1)*CleanYFac_1*8*(alph**2),DTA_CleanNoMove_1,true,DTA_Alpha,alph,DTA_ColorOverlay,Color(64+int(191*(1.-(alph**2))),0,0,0)); + if ( !swwm_oldlogo ) + { + if ( !gradtex ) gradtex = TexMan.CheckForTexture("graphics/M_GRAD.png",TexMan.Type_Any); + double scl = Screen.GetHeight()/960.; + Screen.DrawTexture(gradtex,false,0,Screen.GetHeight(),DTA_DestWidth,Screen.GetWidth(),DTA_DestHeight,256*CleanYFac_1,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_TopOffset,256,DTA_Alpha,.35); + Screen.DrawTexture(gradtex,false,Screen.GetWidth()/2,Screen.GetHeight(),DTA_Rotate,90,DTA_DestHeight,Screen.GetHeight(),DTA_DestWidthF,600*scl*alph,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_TopOffset,256,DTA_Alpha,alph*.5); + Screen.DrawTexture(gradtex,false,Screen.GetWidth()/2,0,DTA_Rotate,270,DTA_DestHeight,Screen.GetHeight(),DTA_DestWidthF,600*scl*alph,DTA_LegacyRenderStyle,STYLE_Shaded,DTA_FillColor,Color(0,0,0),DTA_TopOffset,256,DTA_Alpha,alph*.5); + Screen.DrawTexture(gradtex,false,Screen.GetWidth()/2,Screen.GetHeight(),DTA_Rotate,90,DTA_DestHeight,Screen.GetHeight(),DTA_DestWidthF,500*scl*alph,DTA_LegacyRenderStyle,STYLE_AddShaded,DTA_FillColor,Color(40,80,120),DTA_TopOffset,256,DTA_Alpha,alph); + Screen.DrawTexture(gradtex,false,Screen.GetWidth()/2,0,DTA_Rotate,270,DTA_DestHeight,Screen.GetHeight(),DTA_DestWidthF,500*scl*alph,DTA_LegacyRenderStyle,STYLE_AddShaded,DTA_FillColor,Color(40,80,120),DTA_TopOffset,256,DTA_Alpha,alph); + Screen.DrawTexture(demotex,false,Screen.GetWidth()/2,0,DTA_ScaleX,scl,DTA_ScaleY,scl,DTA_Alpha,alph,DTA_ColorOverlay,Color(int(255*(1.-(alph**2))),0,0,0)); + } + else Screen.DrawTexture(demotex,false,(demopos-160)*CleanXFac_1+(Screen.GetWidth()*.5),(Screen.GetHeight()-400*CleanYFac_1)/2 + sin(gametic*GameTicRate*.1)*CleanYFac_1*8*(alph**2),DTA_CleanNoMove_1,true,DTA_Alpha,alph,DTA_ColorOverlay,Color(64+int(191*(1.-(alph**2))),0,0,0)); + if ( !swwm_oldlogo ) for ( int i=0; i scrolls; ui int sline; ui double sbase; - ui String lastlang; + ui String lastlang, lastlang2; + ui bool lastlogo; ui TitleExplosion smk[64]; ui TextureID smk_frame[19]; int titletimer; ui int rss; ui int stopinit_t; + bool bFadeIn; private ui int GetUIRandom() { @@ -84,13 +89,17 @@ Class SWWMTitleStuff : EventHandler override void WorldLoaded( WorldEvent e ) { + let f = LogoFader(Actor.Spawn("LogoFader")); + f.hnd = self; + TexMan.SetCameraToTexture(f,"LOGOFADE",90); titletimer = -300; let shnd = SWWMStaticHandler(StaticEventHandler.Find("SWWMStaticHandler")); if ( !shnd ) return; if ( shnd.titlefirst ) { - titletimer = GameTicRate*26; // skip to logo - S_ChangeMusic("music/TRAUMATI.XM",2); // skip to order 2 + titletimer = GameTicRate*22; // skip to logo + S_ChangeMusic("music/TRAUMATI.XM",1); // skip to order 1 + bFadeIn = true; } shnd.titlefirst = true; } @@ -98,6 +107,12 @@ Class SWWMTitleStuff : EventHandler override void UiTick() { if ( (titletimer > -80) && (titletimer < -20) ) TickExplosions(); + if ( !swwm_oldlogo ) + { + // title lettering + if ( ((double(titletimer)/GameTicRate) >= 23.) && ((double(titletimer)/GameTicRate) <= 25.4) && !(titletimer%5) ) + S_StartSound("title/thump",CHAN_WEAPON,CHANF_UI|CHANF_OVERLAP,1.,ATTN_NONE); + } if ( gamestate != GS_LEVEL ) return; // you're not supposed to be here Menu.SetMenu('EndGameMenu'); @@ -122,8 +137,8 @@ Class SWWMTitleStuff : EventHandler override void RenderUnderlay( RenderEvent e ) { - if ( !tex[0] ) tex[0] = TexMan.CheckForTexture("graphics/UnSXLogo.png",TexMan.Type_Any); - if ( !tex[1] ) tex[1] = TexMan.CheckForTexture("graphics/SWWMGZLogo.png",TexMan.Type_Any); + if ( !camtex ) camtex = TexMan.CheckForTexture("LOGOFADE",TexMan.Type_Any); + Screen.DrawTexture(camtex,false,0,0); if ( !tex[2] ) tex[2] = TexMan.CheckForTexture("graphics/tempbg.png",TexMan.Type_Any); if ( !tex[3] ) tex[3] = TexMan.CheckForTexture((gameinfo.gametype&GAME_Raven)?"TITLE":"TITLEPIC",TexMan.Type_MiscPatch); Vector2 tsize, vsize; @@ -155,42 +170,25 @@ Class SWWMTitleStuff : EventHandler else Screen.Dim("Black",1.,0,0,Screen.GetWidth(),Screen.GetHeight()); double hs = max(min(floor(Screen.GetWidth()/320.),floor(Screen.GetHeight()/200.)),1.); Vector2 ss = (Screen.GetWidth(),Screen.GetHeight())/hs; - double ar = Screen.GetAspectRatio(); - tsize = TexMan.GetScaledSize(tex[0]); - double sar = tsize.x/tsize.y; - if ( sar > ar ) vsize = (tsize.x,tsize.x/ar); - else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y); - else vsize = tsize; - double alf = clamp(((titletimer+e.FracTic)/GameTicRate)-2,0.,1.); - alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-8,0.,1.); - Screen.DrawTexture(tex[0],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alf); - String str = StringTable.Localize("$SWWM_TITLEPRESENTS"); - alf = clamp(((titletimer+e.FracTic)/GameTicRate)-10,0.,1.); - alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-16,0.,1.); - Screen.DrawText(smallfont,Font.CR_WHITE,(ss.x-smallfont.StringWidth(str))/2,(ss.y-smallfont.GetHeight())/2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alf); - str = StringTable.Localize("$SWWM_TITLEMODBY"); - alf = clamp(((titletimer+e.FracTic)/GameTicRate)-18,0.,1.); - alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-24,0.,1.); - Screen.DrawText(smallfont,Font.CR_WHITE,(ss.x-smallfont.StringWidth(str))/2,(ss.y-smallfont.GetHeight())/2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alf); - tsize = TexMan.GetScaledSize(tex[1]); - sar = tsize.x/tsize.y; - if ( sar > ar ) vsize = (tsize.x,tsize.x/ar); - else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y); - else vsize = tsize; - alf = clamp(((titletimer+e.FracTic)/GameTicRate)-26,0.,2.)*.5; - Screen.DrawTexture(tex[1],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alf); + if ( swwm_oldlogo ) Render_OldTitle(e,ss); + else Render_NewTitle(e); if ( (titletimer/GameTicRate) < 30 ) return; // scrolls - if ( (scrolls.Size() <= 0 ) || (lastlang != language) ) + if ( (scrolls.Size() <= 0 ) || (lastlang != language) || ((sline == 0) && (lastlogo != swwm_oldlogo)) ) { scrolls.Clear(); - String sstr = StringTable.Localize("$SWWM_TITLESCROLL"); - sstr.Split(scrolls,"\n"); + int nstr = StringTable.Localize("$SWWM_NTITLESCROLL").ToInt(); + for ( int i=1; i<=nstr; i++ ) + { + if ( (i == 1) && !swwm_oldlogo ) scrolls.Push(StringTable.Localize("$SWWM_TITLESCROLL1_NEW")); + else scrolls.Push(StringTable.Localize("$SWWM_TITLESCROLL"..i)); + } sbase = (titletimer+e.FracTic)/GameTicRate; if ( sline >= scrolls.Size() ) sline = 0; } lastlang = language; - // estimate scrool length + lastlogo = swwm_oldlogo; + // estimate scroll length double llen = smallfont.StringWidth(scrolls[sline]); double soffset = 40*((titletimer+e.FracTic)/GameTicRate-sbase); if ( soffset > llen+ss.x ) @@ -202,6 +200,7 @@ Class SWWMTitleStuff : EventHandler } double xx = ss.x-soffset; int tlen = scrolls[sline].CodePointCount(); + double alf; for ( int i=0, pos=0; i ar ) vsize = (tsize.x,tsize.x/ar); + else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y); + else vsize = tsize; + double alf = clamp(((titletimer+e.FracTic)/GameTicRate)-2,0.,1.); + alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-8,0.,1.); + Screen.DrawTexture(tex[0],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alf); + String str = StringTable.Localize("$SWWM_TITLEPRESENTS"); + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-10,0.,1.); + alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-16,0.,1.); + Screen.DrawText(smallfont,Font.CR_WHITE,(ss.x-smallfont.StringWidth(str))/2,(ss.y-smallfont.GetHeight())/2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alf); + if ( bFadeIn ) Screen.Dim("Black",1.-clamp(((titletimer+e.FracTic)/GameTicRate)-22,0.,1.),0,0,Screen.GetWidth(),Screen.GetHeight()); + else + { + str = StringTable.Localize("$SWWM_TITLEMODBY"); + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-18,0.,1.); + alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-24,0.,1.); + Screen.DrawText(smallfont,Font.CR_WHITE,(ss.x-smallfont.StringWidth(str))/2,(ss.y-smallfont.GetHeight())/2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alf); + } + tsize = TexMan.GetScaledSize(tex[1]); + sar = tsize.x/tsize.y; + if ( sar > ar ) vsize = (tsize.x,tsize.x/ar); + else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y); + else vsize = tsize; + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-26,0.,2.)*.5; + Screen.DrawTexture(tex[1],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alf); + } + + private ui void Render_NewTitle( RenderEvent e ) + { + if ( !tex[4] ) tex[4] = TexMan.CheckForTexture("graphics/NewLogo.png",TexMan.Type_Any); + for ( int i=0; i<13; i++ ) + { + if ( !letters[i] ) letters[i] = TexMan.CheckForTexture("graphics/NewLogo_Letter"..i..".png",TexMan.Type_Any); + } + double alf = clamp(((titletimer+e.FracTic)/GameTicRate)-1,0.,1.); + alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-4,0.,1.); + String str = StringTable.Localize("$SWWM_TITLEPRESENTSA"); + Screen.DrawText(smallfont,Font.CR_FIRE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2)-(smallfont.GetHeight()*CleanYFac),str,DTA_CleanNoMove,true,DTA_Alpha,alf); + str = StringTable.Localize("$SWWM_TITLEPRESENTSB"); + Screen.DrawText(smallfont,Font.CR_WHITE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2),str,DTA_CleanNoMove,true,DTA_Alpha,alf); + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-5,0.,1.); + alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-8,0.,1.); + str = StringTable.Localize("$SWWM_TITLEMODBYA"); + Screen.DrawText(smallfont,Font.CR_WHITE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2)-(smallfont.GetHeight()*CleanYFac),str,DTA_CleanNoMove,true,DTA_Alpha,alf); + str = StringTable.Localize("$SWWM_TITLEMODBYB"); + Screen.DrawText(smallfont,Font.CR_FIRE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2),str,DTA_CleanNoMove,true,DTA_Alpha,alf); + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-10,0.,1.); + alf *= 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-21,0.,1.); + str = StringTable.Localize("$SWWM_TITLEINTROA"); + Screen.DrawText(smallfont,Font.CR_WHITE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2)-(smallfont.GetHeight()*CleanYFac*3)/2,str,DTA_CleanNoMove,true,DTA_Alpha,alf); + str = StringTable.Localize("$SWWM_TITLEINTROB"); + Screen.DrawText(smallfont,Font.CR_WHITE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2)-(smallfont.GetHeight()*CleanYFac)/2,str,DTA_CleanNoMove,true,DTA_Alpha,alf); + str = StringTable.Localize("$SWWM_TITLEINTROC"); + Screen.DrawText(smallfont,Font.CR_WHITE,(Screen.GetWidth()-smallfont.StringWidth(str)*CleanXFac)/2,(Screen.GetHeight()/2)+(smallfont.GetHeight()*CleanYFac)/2,str,DTA_CleanNoMove,true,DTA_Alpha,alf); + double ar = Screen.GetAspectRatio(); + Vector2 tsize = TexMan.GetScaledSize(tex[4]); + double sar = tsize.x/tsize.y; + Vector2 vsize; + if ( sar > ar ) vsize = (tsize.x,tsize.x/ar); + else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y); + else vsize = tsize; + if ( (titletimer+e.FracTic)/GameTicRate < 22 ) return; + if ( bFadeIn ) Screen.Dim("Black",1.-clamp(((titletimer+e.FracTic)/GameTicRate)-22,0.,1.),0,0,Screen.GetWidth(),Screen.GetHeight()); + if ( (titletimer+e.FracTic)/GameTicRate < 27 ) + { + static const int lofs[] = + { + 153, 311, 489, 690, 844, 946, 1065, 1186, 1319, 1493, 1626, 1754, 1910 + }; + // draw letters one by one + double alph = 1.-clamp(((titletimer+e.FracTic)/GameTicRate)-26.5,0.,1.); + for ( int i=0; i<13; i++ ) + { + if ( ((titletimer+e.FracTic)/GameTicRate) < (23.+i*.2) ) continue; + double alf = 1.-clamp((((titletimer+e.FracTic)/GameTicRate)-(23+i*.2))*5.,0.,1.); + double zoom = 1.+.2*alf; + Screen.DrawTexture(letters[i],false,(vsize.x-tsize.x)/2+lofs[i],(vsize.y-tsize.y)/2+513,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_ScaleX,zoom,DTA_ScaleY,zoom,DTA_ColorOverlay,Color(int(128*(alf**2)),255,255,255),DTA_Alpha,alph); + } + } + if ( (titletimer+e.FracTic)/GameTicRate > 25 ) + { + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-25.5,0.,1.); + Screen.DrawTexture(tex[4],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alf); + } + double scl = Screen.GetHeight()/vsize.y; + double tscl1 = max(1./3.,(floor((Screen.GetHeight()*3.)/vsize.y)+4.)/3.); + str = "CODENAME"; + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-22,0.,1.); + Screen.DrawText(BigFont,Font.CR_SAPPHIRE,(Screen.GetWidth()-tscl1*BigFont.StringWidth(str))/2,(Screen.GetHeight()-(scl*400+BigFont.GetHeight()*tscl1))/2,str,DTA_ScaleX,tscl1,DTA_ScaleY,tscl1,DTA_Alpha,alf); + double tscl2 = max(1./3.,(floor((Screen.GetHeight()*3.)/vsize.y)+1.)/3.); + if ( !stitle || (lastlang2 != language) ) + { + Array done; + Array candidates; + let c = CVar.FindCVar('swwm_titlesubhistory'); + String cstr = c.GetString(); + int which = 1; + if ( cstr != "" ) + { + cstr.Split(done,";"); + int nsub = StringTable.Localize("$SWWM_NTITLESUB").ToInt(); + for ( int i=1; i<=nsub; i++ ) + { + String sn = String.Format("%d",i); + if ( done.Find(sn) < done.Size() ) continue; + candidates.Push(i); + } + if ( candidates.Size() == 0 ) c.SetString("1"); + else + { + which = candidates[Random[UIStuff](0,candidates.Size()-1)]; + c.SetString(cstr..";"..which); + } + } + else c.SetString("1"); + if ( stitle ) stitle.Destroy(); + stitle = BigFont.BreakLines(StringTable.Localize("$SWWM_TITLESUB"..which),int.max); + } + lastlang2 = language; + alf = clamp(((titletimer+e.FracTic)/GameTicRate)-27,0.,1.); + double xx; + double yy = (Screen.GetHeight()+(scl*360+(1.-alf)*80*tscl2))/2; + for ( int i=0; i= 23.) && (((titletimer+e.FracTic)/GameTicRate) < 25.6) ) + { + double alf = 1.-SWWMUtility.fract(((titletimer+e.FracTic)/GameTicRate)*5.); + Screen.Dim("White",.05*alf,0,0,Screen.GetWidth(),Screen.GetHeight()); + } + } +} + +const LOGOFADERBASE = 60000.; + +Class LogoFader : Actor +{ + Actor base; + SWWMTitleStuff hnd; + + Default + { + +NOGRAVITY; + +NOBLOCKMAP; + +NOINTERACTION; + +DONTSPLASH; + Radius .1; + Height 0; + } + + override void PostBeginPlay() + { + SetOrigin((LOGOFADERBASE+32,LOGOFADERBASE,0),false); + SetZ(floorz); + roll = 180; + angle = 180; + double halfstretch = (1.+level.pixelstretch)/2.; + if ( !base ) base = Spawn("LogoFaderSurface",(LOGOFADERBASE,LOGOFADERBASE-32.,floorz+32.*halfstretch)); + } + override void Tick() + { + double alf1 = clamp(((double(hnd.titletimer)/GameTicRate)-26.5)*.5,0.,1.); + double alf2 = (hnd.titletimer>28*GameTicRate)?clamp((double((hnd.titletimer-GameTicRate*3)%(GameTicRate*5))/GameTicRate),0.,1.):0.; + base.SetShade(Color(int(255*alf1),int(255*alf2),0)); + } +} + +Class LogoFaderSurface : Actor +{ + Default + { + Radius .1; + Height 0.; + RenderRadius 256; + +NOBLOCKMAP; + +NOGRAVITY; + +NOINTERACTION; + +DONTSPLASH; + +WALLSPRITE; + RenderStyle "Stencil"; + } + override void Tick(){} + States + { + Spawn: + LGFD A -1 Bright; + Stop; + } }