diff --git a/credits.txt b/credits.txt index dc95dfe78..df7431460 100644 --- a/credits.txt +++ b/credits.txt @@ -8,6 +8,9 @@ Most of the work here is original, but there are some notable exceptions: * Unreal Tournament * Unreal Tournament 2004 * Deus Ex + * Thief + * System Shock 2 + * Painkiller - This mod uses libeye, by KeksDose. Big thanks. - Title theme, "Traumatic State", by Teque (which a lot of people just know as "the AS-Golgotha music"). - Intermission theme, "Dragony", also by Teque (very comfy music considering the rest of his repertoire). diff --git a/cvarinfo.txt b/cvarinfo.txt index c8b9c515a..005023954 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -12,7 +12,8 @@ user int swwm_mutevoice = 0; // mute demolitionist voice // 2 - item/secret comments // 3 - map start comment // 4 - pain/death and grunts -user int swwm_chatduration = 900; // lifespan of chat messages -user int swwm_msgduration = 240; // lifespan of other messages -user int swwm_pickduration = 120; // lifespan of pickup messages +user int swwm_chatduration = 25; // lifespan of chat messages +user int swwm_msgduration = 5; // lifespan of other messages +user int swwm_pickduration = 3; // lifespan of pickup messages +server bool swwm_sharekeys = true; // share keys in mp user noarchive int swwm_lasttab = 0; // last selected tab in the menu diff --git a/decaldef.txt b/decaldef.txt index 550c289b0..018e4b39b 100644 --- a/decaldef.txt +++ b/decaldef.txt @@ -7,3 +7,13 @@ decal HugeScorch randomflipx randomflipy } + +decal WumboScorch +{ + pic SCORCH1 + shade "00 00 00" + x-scale 1.75 + y-scale 1.75 + randomflipx + randomflipy +} diff --git a/gldefs.misc b/gldefs.misc new file mode 100644 index 000000000..f20444231 --- /dev/null +++ b/gldefs.misc @@ -0,0 +1,10 @@ +HardwareShader Texture "graphics/HUD/HealthBarS.png" +{ + Shader "shaders/glsl/Fuzz_Gray.fp" + Texture "noisetex" "textures/graynoise.png" +} +HardwareShader Texture "graphics/tempbg.png" +{ + Shader "shaders/glsl/Fuzz.fp" + Texture "noisetex" "textures/graynoise.png" +} diff --git a/graphics/HUD/HealthBarS.png b/graphics/HUD/HealthBarS.png new file mode 100644 index 000000000..c78ac1010 Binary files /dev/null and b/graphics/HUD/HealthBarS.png differ diff --git a/graphics/HUD/Icons/I_ArmorNugget.png b/graphics/HUD/Icons/I_ArmorNugget.png new file mode 100644 index 000000000..7062c1e4f Binary files /dev/null and b/graphics/HUD/Icons/I_ArmorNugget.png differ diff --git a/graphics/HUD/Icons/I_Chancebox1.png b/graphics/HUD/Icons/I_Chancebox1.png new file mode 100644 index 000000000..df07583ac Binary files /dev/null and b/graphics/HUD/Icons/I_Chancebox1.png differ diff --git a/graphics/HUD/Icons/I_Chancebox2.png b/graphics/HUD/Icons/I_Chancebox2.png new file mode 100644 index 000000000..086a99825 Binary files /dev/null and b/graphics/HUD/Icons/I_Chancebox2.png differ diff --git a/graphics/HUD/Icons/I_Chancebox3.png b/graphics/HUD/Icons/I_Chancebox3.png new file mode 100644 index 000000000..352b69c60 Binary files /dev/null and b/graphics/HUD/Icons/I_Chancebox3.png differ diff --git a/graphics/HUD/Icons/I_Chancebox4.png b/graphics/HUD/Icons/I_Chancebox4.png new file mode 100644 index 000000000..14807c492 Binary files /dev/null and b/graphics/HUD/Icons/I_Chancebox4.png differ diff --git a/graphics/HUD/Icons/I_ExploAmmo.png b/graphics/HUD/Icons/I_ExploAmmo.png deleted file mode 100644 index 815b85d05..000000000 Binary files a/graphics/HUD/Icons/I_ExploAmmo.png and /dev/null differ diff --git a/graphics/HUD/Icons/I_Fabricator1.png b/graphics/HUD/Icons/I_Fabricator1.png new file mode 100644 index 000000000..6d791bc3b Binary files /dev/null and b/graphics/HUD/Icons/I_Fabricator1.png differ diff --git a/graphics/HUD/Icons/I_Fabricator2.png b/graphics/HUD/Icons/I_Fabricator2.png new file mode 100644 index 000000000..505efb918 Binary files /dev/null and b/graphics/HUD/Icons/I_Fabricator2.png differ diff --git a/graphics/HUD/Icons/I_Fabricator3.png b/graphics/HUD/Icons/I_Fabricator3.png new file mode 100644 index 000000000..860f5f078 Binary files /dev/null and b/graphics/HUD/Icons/I_Fabricator3.png differ diff --git a/graphics/HUD/Icons/I_Fabricator4.png b/graphics/HUD/Icons/I_Fabricator4.png new file mode 100644 index 000000000..2f2f8f52c Binary files /dev/null and b/graphics/HUD/Icons/I_Fabricator4.png differ diff --git a/graphics/HUD/Icons/I_Ghost.png b/graphics/HUD/Icons/I_Ghost.png new file mode 100644 index 000000000..66c7883ec Binary files /dev/null and b/graphics/HUD/Icons/I_Ghost.png differ diff --git a/graphics/HUD/Icons/I_HealthCube.png b/graphics/HUD/Icons/I_HealthCube.png new file mode 100644 index 000000000..eac317184 Binary files /dev/null and b/graphics/HUD/Icons/I_HealthCube.png differ diff --git a/graphics/HUD/Icons/I_HealthNugget.png b/graphics/HUD/Icons/I_HealthNugget.png new file mode 100644 index 000000000..aaea05534 Binary files /dev/null and b/graphics/HUD/Icons/I_HealthNugget.png differ diff --git a/graphics/HUD/Icons/I_HealthTetra.png b/graphics/HUD/Icons/I_HealthTetra.png new file mode 100644 index 000000000..3e21ad0af Binary files /dev/null and b/graphics/HUD/Icons/I_HealthTetra.png differ diff --git a/graphics/HUD/Icons/I_Invinciball.png b/graphics/HUD/Icons/I_Invinciball.png new file mode 100644 index 000000000..d2b5cd99a Binary files /dev/null and b/graphics/HUD/Icons/I_Invinciball.png differ diff --git a/graphics/HUD/Icons/I_Lamp.png b/graphics/HUD/Icons/I_Lamp.png new file mode 100644 index 000000000..05650d258 Binary files /dev/null and b/graphics/HUD/Icons/I_Lamp.png differ diff --git a/graphics/HUD/Icons/I_LampOff.png b/graphics/HUD/Icons/I_LampOff.png new file mode 100644 index 000000000..d2cd588da Binary files /dev/null and b/graphics/HUD/Icons/I_LampOff.png differ diff --git a/graphics/HUD/Icons/I_Ragekit.png b/graphics/HUD/Icons/I_Ragekit.png new file mode 100644 index 000000000..e028a47f3 Binary files /dev/null and b/graphics/HUD/Icons/I_Ragekit.png differ diff --git a/graphics/HUD/Icons/I_Sandwich.png b/graphics/HUD/Icons/I_Sandwich.png new file mode 100644 index 000000000..a5a575dde Binary files /dev/null and b/graphics/HUD/Icons/I_Sandwich.png differ diff --git a/graphics/HUD/Icons/I_WarArmor.png b/graphics/HUD/Icons/I_WarArmor.png new file mode 100644 index 000000000..c3a3756ed Binary files /dev/null and b/graphics/HUD/Icons/I_WarArmor.png differ diff --git a/graphics/tempbg.png b/graphics/tempbg.png new file mode 100644 index 000000000..889c262ab Binary files /dev/null and b/graphics/tempbg.png differ diff --git a/language.txt b/language.txt index 5cde04457..bb449fb0d 100644 --- a/language.txt +++ b/language.txt @@ -14,14 +14,54 @@ SWWM_GESTURE2 = "Thumbs Up"; SWWM_GESTURE3 = "Victory"; SWWM_KBASE = "Demolitionist Menu"; // mod menu -SWWM_MENUTITLE = "SWWM Options"; -SWWM_VOICETYPE = "Demolitionist Voice Type"; +SWWM_MTITLE = "SWWM GZ Options"; +SWWM_PTITLE = "Player Options"; +SWWM_VOICETYPE = "Demolitionist Voice Pack"; SWWM_MUTELEVEL = "Voice Muting Level"; SWWM_MUTENONE = "None"; SWWM_MUTECOMBAT = "Combat Comments"; SWWM_MUTEINTER = "Interaction Comments"; SWWM_MUTELINERS = "Map Start Oneliners"; SWWM_MUTEALL = "Everything"; +SWWM_OTITLE = "Visual Options"; +SWWM_FLASH = "Screen Flash Strength"; +SWWM_HUDMARGIN = "HUD Margin"; +SWWM_MAXMSG = "Max messages"; +SWWM_MAXMSGBIG = "Max messages (extended)"; +SWWM_MAXPICK = "Max pickup messages"; +SWWM_CHATLEN = "Chat message duration"; +SWWM_MSGLEN = "General message duration"; +SWWM_PICKLEN = "Pickup message duration"; +SWWM_CTITLE = "Multiplayer Options"; +SWWM_SKEYS = "Share Keys"; +SWWM_MCREDS = "SWWM GZ Credits"; +SWWM_CLEAD = "Development Lead:"; +SWWM_CASSETS = "Additional Assets:"; +SWWM_CMUSIC = "Music Tracks Used:"; +SWWM_CPATRON = "Patreon Backers:"; +SWWM_CTHANK = "Special Thanks:"; +SWWM_CDRAGON2 = "(For being a good pet dragon)"; +SWWM_CLUCY2 = "(For the Tewi font, which I've used for many many years)"; +SWWM_CKEKS2 = "(For libeye, assistance with exception handling code)"; +SWWM_CSLEDGE2 = "(For lore reasons that encouraged me to take part in the Doom modiverse)"; +SWWM_CINSP1 = "Combine Kegan, HyperUltra64, Marrub, TerminusEst13, Yholl and friends"; +SWWM_CINSP2 = "(For inspiration and also for being really cool people)"; +SWWM_CCOMMUNITY1 = "All my amazing friends from the Doom community"; +SWWM_CCOMMUNITY2 = "(For helping me keep this whole thing rolling, and for all the time we've spent together)"; +SWWM_CCOMMUNITY3 = "(Here's to many more years of Dooming. Stay awesome, everyone!)"; +SWWM_CDEVS1 = "Randi, Graf, Rachael, Mental, dpJudas and the rest of the GZDoom dev team"; +SWWM_CDEVS2 = "(For their work on the source port that brough back my faith in modding. You guys rock!)"; +TOOLTIP_SWWM_VOICETYPE = "Sets the voice pack for the player (clientside)."; +TOOLTIP_SWWM_MUTEPLAYER = "Control what gets muted, if you'd rather have a more silent protagonist."; +TOOLTIP_SWWM_FLASHSTRENGTH = "Screen flashes usually happen when firing some weapons, you can lower this if these effects are harmful for you."; +TOOLTIP_SWWM_HUDMARGIN = "Margin around HUD elements, in (scaled) pixels."; +TOOLTIP_SWWM_MAXSHOWN = "Maximum messages (not lines) shown in the top left part of the HUD."; +TOOLTIP_SWWM_MAXSHOWNBIG = "Like the option above, but when the chat prompt is open."; +TOOLTIP_SWWM_MAXPICKUP = "Maximum pickup messages visible at any time."; +TOOLTIP_SWWM_CHATDURATION = "Duration of chat messages in seconds."; +TOOLTIP_SWWM_MSGDURATION = "Duration of obituaries and other messages in seconds."; +TOOLTIP_SWWM_PICKDURATION = "Duration of pickup messages in seconds."; +TOOLTIP_SWWM_SHAREKEYS = "When this is enabled, picking up a key item will send a copy to all other players."; // knowledge base SWWM_COMINGSOON = "(coming soon)"; SWWM_MISSTAB = "Mission"; @@ -57,8 +97,8 @@ SWWM_TRADEFULL = "They can't hold more of that"; SWWM_TRADEHIST = "History"; SWWM_TRADETO = "Sent to"; SWWM_TRADEFROM = "Received from"; -SWWM_MSGSENT = "You sent %s to %s."; -SWWM_MSGRECV = "%s sent you %s."; +SWWM_MSGSENT = "You sent %dx %s to %s."; +SWWM_MSGRECV = "%s sent you %dx %s."; SWWM_CHATTAB = "Chat Log"; SWWM_MAINCONTROLS = "PgUp/PgDn: Switch Tab | Arrows: Navigate | "; SWWM_INVCONTROLS = "Enter: Use | Backspace: Drop | "; @@ -181,7 +221,7 @@ SWWM_LORETXT_DEMOLITIONIST = "Summary: The Demolitionist is a refinement of the former Red Oni supersoldier program, an AI-controlled combat unit capable of efficiently utilizing any weaponry at its disposition. The first unit (that's you) was deployed in June of 2148 on Union States territory in order to combat the demonic invasion brought upon by the UAC's interventions on Hell.\n" "\n" "Saya's Note: Stop reading about yourself and get back to work."; -SWWM_LORETAG_DISPLAY = "CuteEmotion"; +SWWM_LORETAG_DISPLAY = "CuteEmotion Display"; SWWM_LORETXT_DISPLAY = "Designation: CuteEmotion Display\n" "Manufacturer: Akari Labs\n" @@ -231,7 +271,7 @@ SWWM_LORETXT_HAMMERSPACE = "\n" "Summary: These devices provide the carrier with access to a dedicated off-world storage space, with practically instant deposit and withdraw times.\n" "\n" -"Addendum: Hammerspace containment must not be used for living things.\n" +"Addendum: Use of Hammerspace containment for storing living beings is not allowed and will immediately void your warranty.\n" "\n" "Saya's Note: This sounds like something out of a videogame, it's cool, sure, but did that stinky nerd really have to be a stinky nerd and call it \"Hammerspace\"?"; SWWM_LORETAG_HELL = "Hell"; @@ -254,7 +294,7 @@ SWWM_LORETXT_IBUKI = "Addendum: In a way, the Demolitionist project could be said to be a more economic alternative to the Red Oni program. Robots are easy to manufacture en-masse, after all.\n" "\n" "Saya's Note: Why does everyone keep bringing that up? What's the problem with me liking giga-tiddies? Like, seriously... Come on, don't kinkshame me, geez."; -SWWM_LORETAG_LOCKE = "Hoodth, J.Locke"; +SWWM_LORETAG_LOCKE = "Dr. Locke"; SWWM_LORETXT_LOCKE = "Full Name: Janus Locke Hoodth\n" "Nationality: Qurensniv\n" @@ -282,7 +322,7 @@ SWWM_LORETXT_PARTHORIS = "Summary: One of the other worlds we've discovered during the initial interportal experiments. This is a land stuck in some sort of medieval-ish, fantasy type setting. Although some of our explorers have reported sights of unusually complex technology in a certain location we haven't been able to approach.\n" "\n" "Addendum: You are our ambassador here, so I hope you make a good impression."; -SWWM_LORETAG_PROPULSOR = "JetBurst"; +SWWM_LORETAG_PROPULSOR = "JetBurst Impulsor"; SWWM_LORETXT_PROPULSOR = "Designation: Forx JetBurst Impulsor\n" "Manufacturer: Forx Aeronautics\n" @@ -316,14 +356,14 @@ SWWM_LORETXT_UAC = "Classification: Military Conglomerate, Research Foundation\n" "Location: United States, Mars, Jupiter\n" "\n" -"Summary: Founded in 2015 by Thomas Kelliher, rising from the ashes of the former Union Aerospace Armed Forces (UAAF). The UAC's rise to power began in 2025 with its famous Joint Mars Expeditions. Since the creation of \"Mars City\" and the various posts in Phobos and Deimos, the UAC has been effectively working outside of Earth law, which has caused endless controversy. Moreso after securing their position as the largest military body on Earth in the aftermath of World War 3. In recent years, their experiments in teleportation made the news after a critical failure resulted in an invasion from Hell itself, along with the disappearance of the entire moon of Deimos, and eventually resulted in the demons making their way towards Earth. Governments all across the world have their hands full trying to fend off the attackers, but despite the constant bombardment of his accounts on social media, current CEO Samuel Hayden has refused to give any explanation about this incident. The only information provided is that they \"have a man\" that can resolve this.\n" +"Summary: Founded in 2015 by Thomas Kelliher, as a shell company of the Union Aerospace Armed Forces (UAAF). The UAC's rise to power began in 2025 with its famous Joint Mars Expeditions. Since the creation of \"Mars City\" and the various posts in Phobos and Deimos, the UAC has been effectively working outside of Earth law, which has caused endless controversy. Moreso after securing their position as the largest military body on Earth in the aftermath of World War 3. In recent years, their experiments in teleportation made the news after a critical failure resulted in an invasion from Hell itself, along with the disappearance of the entire moon of Deimos, and eventually resulted in the demons making their way towards Earth. Governments all across the world have their hands full trying to fend off the attackers, but despite the constant bombardment of his accounts on social media, current CEO Samuel Hayden has refused to give any explanation about this incident. The only information provided is that they \"have a man\" that can resolve this.\n" "\n" "Addendum: Many rumors surround this company. There are accusations of ritualistic practices, brainwashing, propaganda... Pretty much anything you could imagine. Don't get involved with them, especially now, after your creator decided to speak ill of the company.\n" "\n" "Saya's Note: Oh they TOTALLY deserve what happened to them, and I hope they get screwed even harder for this blunder. I'm glad I never invested in their shit. Little robot boy can eat my shorts, by the way. He ain't gonna r e s o l v e shit."; -SWWM_LORETAG_VOICEBOX = "LoudBoi Voicebox"; +SWWM_LORETAG_VOICEBOX = "Loudboi Voicebox"; SWWM_LORETXT_VOICEBOX = -"Designation: \"Loudboi\" Voicebox\n" +"Designation: Loudboi Voicebox\n" "Manufacturer: Akari Labs\n" "\n" "Summary: A lightweight voice synthesizer for AI units. Easy to install and program. Comes with a built-in \"robotic\" filter for those who prefer that over an awkwardly \"too human\" sounding voice.\n" @@ -337,7 +377,7 @@ SWWM_LORETXT_SIDHE = "Summary: An elf species native to this world, they have a natural bond with magic and are known to be great fighters. As the story goes they however face persecution by other groups, led mainly by the cult of D'Sparil, one of the Serpent Riders who has made the land his own.\n" "\n" "Saya's Note: How do you exactly pronounce \"Sidhe\" anyway?"; -SWWM_LORETAG_HAMMERSPACEEMBIGGENER = "H. Embiggener"; +SWWM_LORETAG_HAMMERSPACEEMBIGGENER = "Hs. Embiggener"; SWWM_LORETXT_HAMMERSPACEEMBIGGENER = "Designation: Hammerspace Embiggener\n" "Manufacturer: Cyrus Enterprises\n" @@ -403,7 +443,7 @@ SWWM_LORETXT_KEYCHAIN = "Summary: A nice keychain for all your keys. Currently held keys can be checked in the Keychain tab.\n" "\n" "Saya's Note: I put some cute things in there that you might like. There's one of the bomb emoji, another of that silly \"butt bots gonna bot\" sign that you found so funny, and also a little chibi of me, so you can remember me when I'm not around. Oh, and I also put the trans flag in there, you know, as a little memento of that Q&A stream we did. I really didn't expect you to give that kind of answer, but heh, it does make sense when I think about it, you are built to defend human rights after all."; -SWWM_LORETAG_KNOWLEDGEBASE = "Demolitionist Library"; +SWWM_LORETAG_KNOWLEDGEBASE = "Library"; SWWM_LORETXT_KNOWLEDGEBASE = "Designation: Demolitionist Library\n" "Manufacturer: Akari Labs\n" @@ -423,7 +463,7 @@ SWWM_LORETXT_MOTHLAMP = "Addendum: Has a tendency to attract moths, though this can have some utility. The lamp is enchanted to make them hostile to nearby enemies, and when turned off they will immediately attack.\n" "\n" "Saya's Note: You know, I wish this thing attracted a certain kind of moth I really like..."; -SWWM_LORETAG_NUGGET = "Health/Armor Nugget"; +SWWM_LORETAG_NUGGET = "Health/Armor Nuggets"; SWWM_LORETXT_NUGGET = "Designation: Health/Armor Nuggets\n" "Manufacturer: Unknown\n" @@ -485,7 +525,7 @@ SWWM_LORETXT_WARARMOR = "Durability: Can absorb a total of 10,000 units of damage before breaking.\n" "\n" "Addendum: Worn over a blast suit, you're pretty much ready for anything that could be thrown at you."; -SWWM_LORETAG_BIGSHOT = "Gunns, John"; +SWWM_LORETAG_BIGSHOT = "Mr. BIG SHOT"; SWWM_LORETXT_BIGSHOT = "Full Name: John \"Bigshot\" Gunns" "Nationality: American\n" @@ -514,7 +554,7 @@ SWWM_LORETXT_DECADEMECH = "Summary: Ever since humanity was made aware of the gateway in Sedna connecting the two solar systems, many expeditions have been made to learn more of the worlds in X'Animen (name given by the governing bodies within). One major discovery that not even the natives were aware of, was that of a ruined research facility in the wasteland planet of Sunkaeze, belonging to a defunct company named \"Decade Mechanics\". Research material, blueprints and even finished, still functioning products have been found within, giving a general idea of the company's specialties. Various groups have successfully recreated items entirely off their original blueprints, some of which have been commercial successes in the military field.\n" "\n" "Addendum: The facility is said to be haunted. Many lives have been lost exploring the ruins, either due to accidents or unidentified \"hostile creatures\"."; -SWWM_LORETAG_ENGINETECH = "Tach-Engine Tech"; +SWWM_LORETAG_ENGINETECH = "Tach-Engine"; SWWM_LORETXT_ENGINETECH = "Name: Tach-Engine Technology Institute\n" "Classification: Technology Conglomerate\n" @@ -547,13 +587,13 @@ SWWM_LORETXT_SYMNATEK = "Addendum: Symnatek is large enough to fend off the almost-global domination of Mixom, makin Australia one of the few countries where they have any real competition.\n" "\n" "Saya's Note: In this time and age, even fucking tool makers contribute to the military. Huh? What do you mean \"the pot calling the kettle black\"? Oh sure, just because of Ibuki that makes me one of them. Whatever."; -SWWM_LORETAG_UNISSIX = "Unissix, Misa"; +SWWM_LORETAG_UNISSIX = "Unissix, Misa A."; SWWM_LORETXT_UNISSIX = "Full Name: Misa Azadeku Unissix aka \"Unissix Bokurou Azadeku\"\n" "Nationality: Devanikan\n" "Date Of Birth: 1992-02-29\n" "\n" -"Summary: Azadeku is the lead weapon and armor designer of the entire Unissix family. Starting at a very early age, her fascination with weponry has always been quite noticeable. Despite a strong fighting spirit, she lacks the physical prowess required to be a warrior, so she's dedicated herself entirely to her craft.\n" +"Summary: Misa is the lead weapon and armor designer of the entire Unissix family. Starting at a very early age, her fascination with weponry has always been quite noticeable. Despite a strong fighting spirit, she lacks the physical prowess required to be a warrior, so she's dedicated herself entirely to her craft.\n" "\n" "Addendum: Rose to fame on Earth during a visit from Zanaveth II, her wife, who leads Nekuratek, a massive tech giant in the Nukuri homeworld.\n" "\n" @@ -692,7 +732,7 @@ SWWM_LORETXT_YNYKRON = "Reloading: If there's any ongoing charge process, it will be cancelled and no ammunition will be used, but the weapon will have to vent for a while. Otherwise, loads a new crystal.\n" "\n" "Addendum: Only the one original instance of this weapon should exist, but replicas have begun to surface thanks to reverse engineering efforts. Still, use of this weapon is considered illegal without proper authorization. Luckily for you, you are authorized to use it against the invading forces."; -SWWM_LORETAG_LOOTBOX = "Chance Box"; +SWWM_LORETAG_LOOTBOX = "Lucky Chancebox"; SWWM_LORETXT_LOOTBOX = "Designation: Lucky Chance Box\n" "Manufacturer: Nukritas 1xx\n" @@ -783,6 +823,28 @@ T_RAGEKIT = "Ragekit"; T_REFRESHER = "Refresher"; T_SANDWICH = "Grilled Cheese Sandwich"; T_WARARMOR = "War Armor"; +// colored tags for keys +T_REDCARD = "\cgRed Keycard\c-"; +T_BLUECARD = "\chBlue Keycard\c-"; +T_YELLOWCARD = "\ckYellow Keycard\c-"; +T_REDSKULL = "\cgRed Skull Key\c-"; +T_BLUESKULL = "\chBlue Skull Key\c-"; +T_YELLOWSKULL = "\ckYellow Skull Key\c-"; +T_YELLOWKEY = "\ckYellow Key\c-"; +T_GREENKEY = "\cdGreen Key\c-"; +T_BLUEKEY = "\chBlue Key\c-"; +T_REDKEY = "\cgRed Key\c-"; +T_KEYSTEEL = "\cuSteel Key\c-"; +T_KEYCAVE = "\ceCave Key\c-"; +T_KEYAXE = "\ccAxe Key\c-"; +T_KEYFIRE = "\cgFire Key\c-"; +T_KEYEMERALD = "\cdEmerald Key\c-"; +T_KEYDUNGEON = "\ccDungeon Key\c-"; +T_KEYSILVER = "\cjSilver Key\c-"; +T_KEYRUSTED = "\cbRusted Key\c-"; +T_KEYHORN = "\coHorn Key\c-"; +T_KEYSWAMP = "\cpSwamp Key\c-"; +T_KEYCASTLE = "\cxCastle Key\c-"; // obituaries O_PUSHER = "%k opened some air holes into %o."; O_DEEPIMPACT = "%o was impacted deeply by %k."; @@ -846,6 +908,8 @@ SWWM_INTERTIP21 = "Aim for a high score! The more enemies you kill the better. D SWWM_INTERTIP22 = "Although chance boxes may sound like a terrible idea, there is a high chance to obtain very valuable items for a much lower cost."; /* SUBTITLES */ +// voice name +SWWM_VOICENAME_DEFAULT = "Demolitionist"; // new weapon received SWWM_SUBS_DEFAULT_GETWEAPON1 = "Not bad... Not bad at all..."; SWWM_SUBS_DEFAULT_GETWEAPON2 = "Good find..."; @@ -1003,6 +1067,72 @@ SWWM_SUBS_DEFAULT_RAGEKIT3 = "FUCKFUCKFUCCKKKK!!"; SWWM_SUBS_DEFAULT_RAGEKIT4 = "AAAAAAAAAARGH!!!!"; SWWM_SUBS_DEFAULT_RAGEKIT5 = "KILLLLL!!!!"; SWWM_SUBS_DEFAULT_RAGEKIT6 = "RAAAARGH!!! BRING IT!!!"; +// --- comebacks for korax hub lines --- +// "Greetings mortal, are you ready to die?" +SWWM_SUBS_DEFAULT_KORAXGREET1 = "Oh boy. That's it. I'm outta here"; +SWWM_SUBS_DEFAULT_KORAXGREET2 = "Great... That's just great."; +SWWM_SUBS_DEFAULT_KORAXGREET3 = "I don't want whatever you're selling."; +SWWM_SUBS_DEFAULT_KORAXGREET4 = "You're... not really my type."; +SWWM_SUBS_DEFAULT_KORAXGREET5 = "The first word that comes to my mind is 'ugly'."; +SWWM_SUBS_DEFAULT_KORAXGREET6 = "You look like something that was left in the fridge for too long."; +SWWM_SUBS_DEFAULT_KORAXGREET7 = "I can see coming here was a mistake."; +SWWM_SUBS_DEFAULT_KORAXGREET8 = "I'm not comfortable being watched so closely."; +SWWM_SUBS_DEFAULT_KORAXGREET9 = "Nice attitude..."; +SWWM_SUBS_DEFAULT_KORAXGREET10 = "I could ask you the same question."; +SWWM_SUBS_DEFAULT_KORAXGREET11 = "I was about to ask you the same thing."; +SWWM_SUBS_DEFAULT_KORAXGREET12 = "I'm just looking for the mayonnaise. Maybe you could grab it for me. Second shelf, right next to the pudding."; +SWWM_SUBS_DEFAULT_KORAXGREET13 = "I'm here to pick up an order. Two large pepperoni and a calzone. Name is 'Fuck you'."; +// "My servants can smell your blood, human" +SWWM_SUBS_DEFAULT_KORAXBLOOD1 = "Creep."; +SWWM_SUBS_DEFAULT_KORAXBLOOD2 = "That's good to know."; +SWWM_SUBS_DEFAULT_KORAXBLOOD3 = "Whatever you say."; +SWWM_SUBS_DEFAULT_KORAXBLOOD4 = "I don't think so."; +SWWM_SUBS_DEFAULT_KORAXBLOOD5 = "Um... yeah... I don't think so..."; +SWWM_SUBS_DEFAULT_KORAXBLOOD6 = "If you say so."; +SWWM_SUBS_DEFAULT_KORAXBLOOD7 = "I don't care."; +SWWM_SUBS_DEFAULT_KORAXBLOOD8 = "Whatever. Not like I care anyway."; +SWWM_SUBS_DEFAULT_KORAXBLOOD9 = "I don't really give a shit."; +SWWM_SUBS_DEFAULT_KORAXBLOOD10 = "Like I give a shit..."; +SWWM_SUBS_DEFAULT_KORAXBLOOD11 = "I think you're confusing me with someone who gives a shit."; +SWWM_SUBS_DEFAULT_KORAXBLOOD12 = "I'm not so sure about that."; +SWWM_SUBS_DEFAULT_KORAXBLOOD13 = "Just shut up."; +// "You have played this game too long, mortal, I think I shall remove you from the board" +SWWM_SUBS_DEFAULT_KORAXGAME1 = "I really don't care."; +SWWM_SUBS_DEFAULT_KORAXGAME2 = "Go fuck yourself."; +SWWM_SUBS_DEFAULT_KORAXGAME3 = "Oh, go cough up a hairball."; +SWWM_SUBS_DEFAULT_KORAXGAME4 = "Not gonna happen."; +SWWM_SUBS_DEFAULT_KORAXGAME5 = "Your threats don't scare me."; +SWWM_SUBS_DEFAULT_KORAXGAME6 = "Not a chance."; +SWWM_SUBS_DEFAULT_KORAXGAME7 = "I don't take kindly to threats."; +SWWM_SUBS_DEFAULT_KORAXGAME8 = "Anything else I should know?"; +SWWM_SUBS_DEFAULT_KORAXGAME9 = "Shut up..."; +SWWM_SUBS_DEFAULT_KORAXGAME10 = "No one talks to me like that. Screw you."; +SWWM_SUBS_DEFAULT_KORAXGAME11 = "You won't talk when you're dead."; +SWWM_SUBS_DEFAULT_KORAXGAME12 = "I'd like to see you try."; +SWWM_SUBS_DEFAULT_KORAXGAME13 = "Oh, please try."; +SWWM_SUBS_DEFAULT_KORAXGAME14 = "I don't know what you're talking about, and I don't care."; +// "Worship me and I may be yet merciful, then again, maybe not" +SWWM_SUBS_DEFAULT_KORAXWORSHIP1 = "What?"; +SWWM_SUBS_DEFAULT_KORAXWORSHIP2 = "What a scumbag..."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP3 = "Pompous ass..."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP4 = "Someone's a little full of himself."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP5 = "So full of yourself..."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP6 = "I've heard enough of your bullshit."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP7 = "Blah, blah, blah..."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP8 = "What? I can't hear you over this ringing in my ears."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP9 = "You must think I'm an idiot."; +SWWM_SUBS_DEFAULT_KORAXWORSHIP10 = "Do I look like an idiot?"; +SWWM_SUBS_DEFAULT_KORAXWORSHIP11 = "You have an awfully high opinion of yourself."; +// "Are you strong enough to face your own masters?" +SWWM_SUBS_DEFAULT_KORAXMASTERS1 = "Can we move this along? I've got places to be."; +SWWM_SUBS_DEFAULT_KORAXMASTERS2 = "I don't appreciate people telling me what to do."; +SWWM_SUBS_DEFAULT_KORAXMASTERS3 = "Uh... yes, that's right."; +SWWM_SUBS_DEFAULT_KORAXMASTERS4 = "Suppose I've got nothing better to do."; +SWWM_SUBS_DEFAULT_KORAXMASTERS5 = "I'm asking myself the same thing."; +SWWM_SUBS_DEFAULT_KORAXMASTERS6 = "None of your damn business."; +SWWM_SUBS_DEFAULT_KORAXMASTERS7 = "Yes, I am."; +SWWM_SUBS_DEFAULT_KORAXMASTERS8 = "That's none of your business."; +SWWM_SUBS_DEFAULT_KORAXMASTERS9 = "Just shut up already..."; [es] // I probably won't be localizing this to Spanish diff --git a/menudef.txt b/menudef.txt new file mode 100644 index 000000000..16081fe90 --- /dev/null +++ b/menudef.txt @@ -0,0 +1,112 @@ +OptionValue "SWWMVoice" +{ + 0, "$SWWM_MUTENONE" + 1, "$SWWM_MUTECOMBAT" + 2, "$SWWM_MUTEINTER" + 3, "$SWWM_MUTELINERS" + 4, "$SWWM_MUTEALL" +} +OptionMenu "SWWMOptionMenu" +{ + Class "SWWMOptionMenu" + Title "$SWWM_MTITLE" + + StaticText "$SWWM_PTITLE", "Gold" + SWWMVoiceOption "$SWWM_VOICETYPE", "swwm_voicetype" + Option "$SWWM_MUTELEVEL", "swwm_mutevoice", "SWWMVoice" + StaticText " " + StaticText "$SWWM_OTITLE", "Gold" + Slider "$SWWM_FLASH", "swwm_flashstrength", 0.0, 1.0, 0.1, 1 + Slider "$SWWM_HUDMARGIN", "swwm_hudmargin", 0, 40, 1, 0 + Slider "$SWWM_MAXMSG", "swwm_maxshown", 1, 10, 1, 0 + Slider "$SWWM_MAXMSGBIG", "swwm_maxshownbig", 1, 20, 1, 0 + Slider "$SWWM_MAXPICK", "swwm_maxpickup", 1, 10, 1, 0 + Slider "$SWWM_CHATLEN", "swwm_chatduration", 1, 30, 1, 0 + Slider "$SWWM_MSGLEN", "swwm_msgduration", 1, 30, 1, 0 + Slider "$SWWM_PICKLEN", "swwm_pickduration", 1, 30, 1, 0 + StaticText " " + StaticText "$SWWM_CTITLE", "Gold" + Option "$SWWM_SKEYS", "swwm_sharekeys", "YesNo" +} +OptionMenu "SWWMCreditsMenu" +{ + Title "$SWWM_MCREDS" + + StaticText "$SWWM_CLEAD", "Red" + StaticText " " + StaticText "Marisa Kirisame", "Gold" + StaticText " " + StaticText "$SWWM_CASSETS", "Red" + StaticText " " + StaticText "Bethesda Softworks", "Gold" + StaticText "Fallout: New Vegas", "White" + StaticText "Fallout 4", "White" + StaticText " " + StaticText "Epic Games", "Gold" + StaticText "Unreal", "White" + StaticText "Unreal Tournament", "White" + StaticText "Unreal Tournament 2004", "White" + StaticText " " + StaticText "Ion Storm", "Gold" + StaticText "Deus Ex", "White" + StaticText " " + StaticText "Looking Glass Studios", "Gold" + StaticText "Thief", "White" + StaticText "System Shock 2", "White" + StaticText " " + StaticText "People Can Fly", "Gold" + StaticText "Painkiller", "White" + StaticText " " + StaticText "$SWWM_CMUSIC", "Red" + StaticText " " + StaticText "Teque", "Gold" + StaticText "Traumatic State", "White" + StaticText "Dragony", "White" + StaticText " " + StaticText "Nitro", "Gold" + StaticText "Gateways Part II", "White" + StaticText " " + StaticText "$SWWM_CPATRON", "Red" + StaticText " " + StaticText "john", "Gold" + StaticText "Alexa Jones-Gonzales", "Gold" + StaticText "Jonas Höglund", "Gold" + StaticText "Xada Xephron", "Gold" + StaticText "Zard1084", "Gold" + StaticText "Jonathan Nemo", "Gold" + StaticText "NekoMithos", "Gold" + StaticText "Max Zeal", "Gold" + StaticText "m8f", "Gold" + StaticText "3d0xp0xy", "Gold" + StaticText " " + StaticText "$SWWM_CTHANK", "Red" + StaticText " " + StaticText "KynikossDragonn", "Gold" + StaticText "$SWWM_CDRAGON2", "White" + StaticText " " + StaticText "Lucy", "Gold" + StaticText "$SWWM_CLUCY2", "White" + StaticText " " + StaticText "KeksDose", "Gold" + StaticText "$SWWM_CKEKS2", "White" + StaticText " " + StaticText "CptSledge", "Gold" + StaticText "$SWWM_CSLEDGE2", "White" + StaticText " " + StaticText "$SWWM_CINSP1", "Gold" + StaticText "$SWWM_CINSP2", "White" + StaticText " " + StaticText "$SWWM_CCOMMUNITY1", "Gold" + StaticText "$SWWM_CCOMMUNITY2", "White" + StaticText "$SWWM_CCOMMUNITY3", "White" + StaticText " " + StaticText "$SWWM_CDEVS1", "Gold" + StaticText "$SWWM_CDEVS2", "White" + +} +AddOptionMenu "OptionsMenu" +{ + StaticText " " + Submenu "$SWWM_MTITLE", "SWWMOptionMenu" + Submenu "$SWWM_MCREDS", "SWWMCreditsMenu" +} \ No newline at end of file diff --git a/modeldef.ammo b/modeldef.ammo index 951adc482..6c0a0c9e0 100644 --- a/modeldef.ammo +++ b/modeldef.ammo @@ -551,7 +551,7 @@ Model "FabricatorTier1" Model 0 "AmmoFabricator_d.3d" Skin 0 "Fabricator.png" - Scale 0.05 0.05 0.05 + Scale 0.038 0.038 0.038 ZOffset 16 ROTATING @@ -563,7 +563,7 @@ Model "FabricatorTier2" Model 0 "AmmoFabricator_d.3d" Skin 0 "Fabricator_Tier2.png" - Scale 0.05 0.05 0.05 + Scale 0.042 0.042 0.042 ZOffset 16 ROTATING @@ -575,7 +575,7 @@ Model "FabricatorTier3" Model 0 "AmmoFabricator_d.3d" Skin 0 "Fabricator_Tier3.png" - Scale 0.05 0.05 0.05 + Scale 0.048 0.048 0.048 ZOffset 16 ROTATING @@ -587,7 +587,7 @@ Model "FabricatorTier4" Model 0 "AmmoFabricator_d.3d" Skin 0 "Fabricator_Tier4.png" - Scale 0.05 0.05 0.05 + Scale 0.054 0.054 0.054 ZOffset 16 ROTATING diff --git a/modeldef.candygun b/modeldef.candygun index 375b94421..c20a2fe11 100644 --- a/modeldef.candygun +++ b/modeldef.candygun @@ -112,7 +112,7 @@ Model "CandyGun" Path "models/extra" Model 2 "Flat_d.3d" - Scale 0.1 0.1 0.1 + Scale 0.15 0.15 0.15 Offset 16 -60 -12 PitchOffset 90 diff --git a/models/Chancebox.png b/models/Chancebox.png new file mode 100644 index 000000000..a4c59646c Binary files /dev/null and b/models/Chancebox.png differ diff --git a/models/Chancebox_Side_a.3d b/models/Chancebox_Side_a.3d new file mode 100644 index 000000000..e5aacfd97 Binary files /dev/null and b/models/Chancebox_Side_a.3d differ diff --git a/models/Chancebox_Side_d.3d b/models/Chancebox_Side_d.3d new file mode 100644 index 000000000..37f5f1aa4 Binary files /dev/null and b/models/Chancebox_Side_d.3d differ diff --git a/models/Chancebox_Tier2.png b/models/Chancebox_Tier2.png new file mode 100644 index 000000000..f6a87fa5a Binary files /dev/null and b/models/Chancebox_Tier2.png differ diff --git a/models/Chancebox_Tier3.png b/models/Chancebox_Tier3.png new file mode 100644 index 000000000..fadc64d93 Binary files /dev/null and b/models/Chancebox_Tier3.png differ diff --git a/models/Chancebox_Tier4.png b/models/Chancebox_Tier4.png new file mode 100644 index 000000000..6ca4a4f86 Binary files /dev/null and b/models/Chancebox_Tier4.png differ diff --git a/models/Chancebox_Top_a.3d b/models/Chancebox_Top_a.3d new file mode 100644 index 000000000..6f4f91b1a Binary files /dev/null and b/models/Chancebox_Top_a.3d differ diff --git a/models/Chancebox_Top_d.3d b/models/Chancebox_Top_d.3d new file mode 100644 index 000000000..13f9d4367 Binary files /dev/null and b/models/Chancebox_Top_d.3d differ diff --git a/models/Chancebox_a.3d b/models/Chancebox_a.3d new file mode 100644 index 000000000..d3de061dc Binary files /dev/null and b/models/Chancebox_a.3d differ diff --git a/models/Chancebox_bright.png b/models/Chancebox_bright.png new file mode 100644 index 000000000..9ab85cf2a Binary files /dev/null and b/models/Chancebox_bright.png differ diff --git a/models/Chancebox_d.3d b/models/Chancebox_d.3d new file mode 100644 index 000000000..b2b6e784e Binary files /dev/null and b/models/Chancebox_d.3d differ diff --git a/models/Chancebox_mask.png b/models/Chancebox_mask.png new file mode 100644 index 000000000..430daa7ad Binary files /dev/null and b/models/Chancebox_mask.png differ diff --git a/models/Lootbox.blend b/models/Lootbox.blend new file mode 100644 index 000000000..7ce387322 Binary files /dev/null and b/models/Lootbox.blend differ diff --git a/models/extra/BaseBeam_d.3d b/models/extra/BaseBeam_d.3d index 1f86abb65..32e876070 100644 Binary files a/models/extra/BaseBeam_d.3d and b/models/extra/BaseBeam_d.3d differ diff --git a/models/extra/SparksterBeam.png b/models/extra/SparksterBeam.png new file mode 100644 index 000000000..17e52b4de Binary files /dev/null and b/models/extra/SparksterBeam.png differ diff --git a/models/extra/SparksterBeamS.png b/models/extra/SparksterBeamS.png new file mode 100644 index 000000000..87c0eb398 Binary files /dev/null and b/models/extra/SparksterBeamS.png differ diff --git a/palettes/Yellow.pal b/palettes/Yellow.pal new file mode 100644 index 000000000..5670b2a73 Binary files /dev/null and b/palettes/Yellow.pal differ diff --git a/shaders/glsl/Fuzz.fp b/shaders/glsl/Fuzz.fp new file mode 100644 index 000000000..48f3bba0d --- /dev/null +++ b/shaders/glsl/Fuzz.fp @@ -0,0 +1,39 @@ +float rnd( in vec2 sd ) +{ + //return cos(sd.y*3874.8674+sd.x*6783.5325)*2737.8474; + // use noise tex instead of trig-based PRNG, much better and doesn't break on intel + return texelFetch(noisetex,ivec2(mod(sd.x,256.),mod(sd.y,256.)),0).x; +} + +// haha are you telling me I can't declare arrays like in C? +// what the fuck even is this insane syntax? +const vec3 layers[3] = +vec3[]( + vec3(0.91,0.87,1.95), + vec3(0.66,1.84,0.73), + vec3(1.35,0.73,1.21) +); +const float speed[3] = +float[]( + .5526, + .7843, + .3725 +); +const float zoom[3] = +float[]( + 1., + 2., + 3. +); + +vec4 ProcessTexel() +{ + vec2 coord; + vec3 col = vec3(1.); + for ( int i=0; i<3; i++ ) + { + coord = floor(vTexCoord.st*textureSize(tex,0)/zoom[i]); + col *= layers[i]*2.0*abs(fract(rnd(coord)+timer*speed[i])-0.5); + } + return vec4(col,1.); +} diff --git a/shaders/glsl/Fuzz_Gray.fp b/shaders/glsl/Fuzz_Gray.fp new file mode 100644 index 000000000..26ad15ffc --- /dev/null +++ b/shaders/glsl/Fuzz_Gray.fp @@ -0,0 +1,40 @@ +float rnd( in vec2 sd ) +{ + //return cos(sd.y*3874.8674+sd.x*6783.5325)*2737.8474; + // use noise tex instead of trig-based PRNG, much better and doesn't break on intel + return texelFetch(noisetex,ivec2(mod(sd.x,256.),mod(sd.y,256.)),0).x; +} + +// haha are you telling me I can't declare arrays like in C? +// what the fuck even is this insane syntax? +const vec3 layers[3] = +vec3[]( + vec3(1.01,1.07,1.05), + vec3(1.06,1.04,1.03), + vec3(1.05,1.03,1.01) +); +const float speed[3] = +float[]( + .5526, + .7843, + .3725 +); +const float zoom[3] = +float[]( + 1., + 2., + 3. +); + +vec4 ProcessTexel() +{ + vec2 coord; + vec3 col = vec3(1.); + for ( int i=0; i<3; i++ ) + { + coord = floor(vTexCoord.st*textureSize(tex,0)/zoom[i]); + col *= layers[i]*2.0*abs(fract(rnd(coord)+timer*speed[i])-0.5); + } + col += getTexel(vTexCoord.st).rgb; + return vec4(col,1.); +} diff --git a/sndinfo.txt b/sndinfo.txt index 6db93ad7c..2a75179e4 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -175,6 +175,66 @@ voice/default/ragekit3 sounds/voice/default/ragekit3.ogg voice/default/ragekit4 sounds/voice/default/ragekit4.ogg voice/default/ragekit5 sounds/voice/default/ragekit5.ogg voice/default/ragekit6 sounds/voice/default/ragekit6.ogg +voice/default/koraxgreet1 sounds/voice/default/koraxgreet1.ogg +voice/default/koraxgreet2 sounds/voice/default/koraxgreet2.ogg +voice/default/koraxgreet3 sounds/voice/default/koraxgreet3.ogg +voice/default/koraxgreet4 sounds/voice/default/koraxgreet4.ogg +voice/default/koraxgreet5 sounds/voice/default/koraxgreet5.ogg +voice/default/koraxgreet6 sounds/voice/default/koraxgreet6.ogg +voice/default/koraxgreet7 sounds/voice/default/koraxgreet7.ogg +voice/default/koraxgreet8 sounds/voice/default/koraxgreet8.ogg +voice/default/koraxgreet9 sounds/voice/default/koraxgreet9.ogg +voice/default/koraxgreet10 sounds/voice/default/koraxgreet10.ogg +voice/default/koraxgreet11 sounds/voice/default/koraxgreet11.ogg +voice/default/koraxgreet12 sounds/voice/default/koraxgreet12.ogg +voice/default/koraxgreet13 sounds/voice/default/koraxgreet13.ogg +voice/default/koraxblood1 sounds/voice/default/koraxblood1.ogg +voice/default/koraxblood2 sounds/voice/default/koraxblood2.ogg +voice/default/koraxblood3 sounds/voice/default/koraxblood3.ogg +voice/default/koraxblood4 sounds/voice/default/koraxblood4.ogg +voice/default/koraxblood5 sounds/voice/default/koraxblood5.ogg +voice/default/koraxblood6 sounds/voice/default/koraxblood6.ogg +voice/default/koraxblood7 sounds/voice/default/koraxblood7.ogg +voice/default/koraxblood8 sounds/voice/default/koraxblood8.ogg +voice/default/koraxblood9 sounds/voice/default/koraxblood9.ogg +voice/default/koraxblood10 sounds/voice/default/koraxblood10.ogg +voice/default/koraxblood11 sounds/voice/default/koraxblood11.ogg +voice/default/koraxblood12 sounds/voice/default/koraxblood12.ogg +voice/default/koraxblood13 sounds/voice/default/koraxblood13.ogg +voice/default/koraxgame1 sounds/voice/default/koraxgame1.ogg +voice/default/koraxgame2 sounds/voice/default/koraxgame2.ogg +voice/default/koraxgame3 sounds/voice/default/koraxgame3.ogg +voice/default/koraxgame4 sounds/voice/default/koraxgame4.ogg +voice/default/koraxgame5 sounds/voice/default/koraxgame5.ogg +voice/default/koraxgame6 sounds/voice/default/koraxgame6.ogg +voice/default/koraxgame7 sounds/voice/default/koraxgame7.ogg +voice/default/koraxgame8 sounds/voice/default/koraxgame8.ogg +voice/default/koraxgame9 sounds/voice/default/koraxgame9.ogg +voice/default/koraxgame10 sounds/voice/default/koraxgame10.ogg +voice/default/koraxgame11 sounds/voice/default/koraxgame11.ogg +voice/default/koraxgame12 sounds/voice/default/koraxgame12.ogg +voice/default/koraxgame13 sounds/voice/default/koraxgame13.ogg +voice/default/koraxgame14 sounds/voice/default/koraxgame14.ogg +voice/default/koraxworship1 sounds/voice/default/koraxworship1.ogg +voice/default/koraxworship2 sounds/voice/default/koraxworship2.ogg +voice/default/koraxworship3 sounds/voice/default/koraxworship3.ogg +voice/default/koraxworship4 sounds/voice/default/koraxworship4.ogg +voice/default/koraxworship5 sounds/voice/default/koraxworship5.ogg +voice/default/koraxworship6 sounds/voice/default/koraxworship6.ogg +voice/default/koraxworship7 sounds/voice/default/koraxworship7.ogg +voice/default/koraxworship8 sounds/voice/default/koraxworship8.ogg +voice/default/koraxworship9 sounds/voice/default/koraxworship9.ogg +voice/default/koraxworship10 sounds/voice/default/koraxworship10.ogg +voice/default/koraxworship11 sounds/voice/default/koraxworship11.ogg +voice/default/koraxmasters1 sounds/voice/default/koraxmasters1.ogg +voice/default/koraxmasters2 sounds/voice/default/koraxmasters2.ogg +voice/default/koraxmasters3 sounds/voice/default/koraxmasters3.ogg +voice/default/koraxmasters4 sounds/voice/default/koraxmasters4.ogg +voice/default/koraxmasters5 sounds/voice/default/koraxmasters5.ogg +voice/default/koraxmasters6 sounds/voice/default/koraxmasters6.ogg +voice/default/koraxmasters7 sounds/voice/default/koraxmasters7.ogg +voice/default/koraxmasters8 sounds/voice/default/koraxmasters8.ogg +voice/default/koraxmasters9 sounds/voice/default/koraxmasters9.ogg $random voice/default/grunt { voice/default/grunt1 voice/default/grunt2 voice/default/grunt3 voice/default/grunt4 voice/default/grunt5 voice/default/grunt6 } $random voice/default/lopain { voice/default/lopain1 voice/default/lopain2 voice/default/lopain3 voice/default/lopain4 voice/default/lopain5 } @@ -318,13 +378,14 @@ $playersound demolitionist neutral *puzzfail sounds/menu/failuse.ogg misc/secret sounds/menu/findsecret.ogg misc/keytry sounds/menu/failuse.ogg misc/w_pkup sounds/general/wpickup.ogg -misc/p_pkup DSEMPTY -misc/i_pkup DSEMPTY -misc/k_pkup DSEMPTY +misc/p_pkup sounds/general/ppickup.ogg +misc/i_pkup sounds/general/ipickup.ogg +misc/k_pkup sounds/general/kpickup.ogg misc/ammo_pkup sounds/general/apickup.ogg -misc/armor_pkup DSEMPTY -misc/health_pkup DSEMPTY +misc/armor_pkup sounds/general/spickup.ogg +misc/health_pkup sounds/general/hpickup.ogg misc/spawn sounds/CORK.ogg +misc/teleport sounds/general/teleport.ogg misc/chat sounds/menu/chatsnd.ogg misc/chat2 sounds/menu/chatsnd.ogg diff --git a/sounds/general/hpickup.ogg b/sounds/general/hpickup.ogg new file mode 100644 index 000000000..820f3d2a5 Binary files /dev/null and b/sounds/general/hpickup.ogg differ diff --git a/sounds/general/ipickup.ogg b/sounds/general/ipickup.ogg new file mode 100644 index 000000000..9b864461b Binary files /dev/null and b/sounds/general/ipickup.ogg differ diff --git a/sounds/general/kpickup.ogg b/sounds/general/kpickup.ogg new file mode 100644 index 000000000..0e31ee1d4 Binary files /dev/null and b/sounds/general/kpickup.ogg differ diff --git a/sounds/general/ppickup.ogg b/sounds/general/ppickup.ogg new file mode 100644 index 000000000..5b0a35196 Binary files /dev/null and b/sounds/general/ppickup.ogg differ diff --git a/sounds/general/spickup.ogg b/sounds/general/spickup.ogg new file mode 100644 index 000000000..587f9b22e Binary files /dev/null and b/sounds/general/spickup.ogg differ diff --git a/sounds/general/teleport.ogg b/sounds/general/teleport.ogg new file mode 100644 index 000000000..0714dd58c Binary files /dev/null and b/sounds/general/teleport.ogg differ diff --git a/sounds/items/blastsuit.wav b/sounds/items/blastsuit.wav new file mode 100644 index 000000000..9f5a68431 Binary files /dev/null and b/sounds/items/blastsuit.wav differ diff --git a/sounds/items/wararmor.wav b/sounds/items/wararmor.wav new file mode 100644 index 000000000..090d2ff95 Binary files /dev/null and b/sounds/items/wararmor.wav differ diff --git a/sounds/menu/buysnd.ogg b/sounds/menu/buysnd.ogg new file mode 100644 index 000000000..52abcea5d Binary files /dev/null and b/sounds/menu/buysnd.ogg differ diff --git a/sounds/voice/default/koraxblood1.ogg b/sounds/voice/default/koraxblood1.ogg new file mode 100644 index 000000000..727034ad7 Binary files /dev/null and b/sounds/voice/default/koraxblood1.ogg differ diff --git a/sounds/voice/default/koraxblood10.ogg b/sounds/voice/default/koraxblood10.ogg new file mode 100644 index 000000000..57fa26b5c Binary files /dev/null and b/sounds/voice/default/koraxblood10.ogg differ diff --git a/sounds/voice/default/koraxblood11.ogg b/sounds/voice/default/koraxblood11.ogg new file mode 100644 index 000000000..bf3e41dea Binary files /dev/null and b/sounds/voice/default/koraxblood11.ogg differ diff --git a/sounds/voice/default/koraxblood12.ogg b/sounds/voice/default/koraxblood12.ogg new file mode 100644 index 000000000..b6d94bb55 Binary files /dev/null and b/sounds/voice/default/koraxblood12.ogg differ diff --git a/sounds/voice/default/koraxblood13.ogg b/sounds/voice/default/koraxblood13.ogg new file mode 100644 index 000000000..ef68ca5e9 Binary files /dev/null and b/sounds/voice/default/koraxblood13.ogg differ diff --git a/sounds/voice/default/koraxblood2.ogg b/sounds/voice/default/koraxblood2.ogg new file mode 100644 index 000000000..a46ebc99e Binary files /dev/null and b/sounds/voice/default/koraxblood2.ogg differ diff --git a/sounds/voice/default/koraxblood3.ogg b/sounds/voice/default/koraxblood3.ogg new file mode 100644 index 000000000..9c5fbcb25 Binary files /dev/null and b/sounds/voice/default/koraxblood3.ogg differ diff --git a/sounds/voice/default/koraxblood4.ogg b/sounds/voice/default/koraxblood4.ogg new file mode 100644 index 000000000..fd6329be5 Binary files /dev/null and b/sounds/voice/default/koraxblood4.ogg differ diff --git a/sounds/voice/default/koraxblood5.ogg b/sounds/voice/default/koraxblood5.ogg new file mode 100644 index 000000000..936a31ba5 Binary files /dev/null and b/sounds/voice/default/koraxblood5.ogg differ diff --git a/sounds/voice/default/koraxblood6.ogg b/sounds/voice/default/koraxblood6.ogg new file mode 100644 index 000000000..6a0fcb357 Binary files /dev/null and b/sounds/voice/default/koraxblood6.ogg differ diff --git a/sounds/voice/default/koraxblood7.ogg b/sounds/voice/default/koraxblood7.ogg new file mode 100644 index 000000000..c1561b2e3 Binary files /dev/null and b/sounds/voice/default/koraxblood7.ogg differ diff --git a/sounds/voice/default/koraxblood8.ogg b/sounds/voice/default/koraxblood8.ogg new file mode 100644 index 000000000..74858278a Binary files /dev/null and b/sounds/voice/default/koraxblood8.ogg differ diff --git a/sounds/voice/default/koraxblood9.ogg b/sounds/voice/default/koraxblood9.ogg new file mode 100644 index 000000000..740dcb544 Binary files /dev/null and b/sounds/voice/default/koraxblood9.ogg differ diff --git a/sounds/voice/default/koraxgame1.ogg b/sounds/voice/default/koraxgame1.ogg new file mode 100644 index 000000000..a3eb6ca13 Binary files /dev/null and b/sounds/voice/default/koraxgame1.ogg differ diff --git a/sounds/voice/default/koraxgame10.ogg b/sounds/voice/default/koraxgame10.ogg new file mode 100644 index 000000000..fa8a00a90 Binary files /dev/null and b/sounds/voice/default/koraxgame10.ogg differ diff --git a/sounds/voice/default/koraxgame11.ogg b/sounds/voice/default/koraxgame11.ogg new file mode 100644 index 000000000..1fbc855c9 Binary files /dev/null and b/sounds/voice/default/koraxgame11.ogg differ diff --git a/sounds/voice/default/koraxgame12.ogg b/sounds/voice/default/koraxgame12.ogg new file mode 100644 index 000000000..a9f7593d0 Binary files /dev/null and b/sounds/voice/default/koraxgame12.ogg differ diff --git a/sounds/voice/default/koraxgame13.ogg b/sounds/voice/default/koraxgame13.ogg new file mode 100644 index 000000000..08852b392 Binary files /dev/null and b/sounds/voice/default/koraxgame13.ogg differ diff --git a/sounds/voice/default/koraxgame14.ogg b/sounds/voice/default/koraxgame14.ogg new file mode 100644 index 000000000..0b2ec7b9b Binary files /dev/null and b/sounds/voice/default/koraxgame14.ogg differ diff --git a/sounds/voice/default/koraxgame2.ogg b/sounds/voice/default/koraxgame2.ogg new file mode 100644 index 000000000..192d28ca8 Binary files /dev/null and b/sounds/voice/default/koraxgame2.ogg differ diff --git a/sounds/voice/default/koraxgame3.ogg b/sounds/voice/default/koraxgame3.ogg new file mode 100644 index 000000000..bb2d20c5f Binary files /dev/null and b/sounds/voice/default/koraxgame3.ogg differ diff --git a/sounds/voice/default/koraxgame4.ogg b/sounds/voice/default/koraxgame4.ogg new file mode 100644 index 000000000..5003ae032 Binary files /dev/null and b/sounds/voice/default/koraxgame4.ogg differ diff --git a/sounds/voice/default/koraxgame5.ogg b/sounds/voice/default/koraxgame5.ogg new file mode 100644 index 000000000..4e68b5779 Binary files /dev/null and b/sounds/voice/default/koraxgame5.ogg differ diff --git a/sounds/voice/default/koraxgame6.ogg b/sounds/voice/default/koraxgame6.ogg new file mode 100644 index 000000000..cafd9dd04 Binary files /dev/null and b/sounds/voice/default/koraxgame6.ogg differ diff --git a/sounds/voice/default/koraxgame7.ogg b/sounds/voice/default/koraxgame7.ogg new file mode 100644 index 000000000..e886796ad Binary files /dev/null and b/sounds/voice/default/koraxgame7.ogg differ diff --git a/sounds/voice/default/koraxgame8.ogg b/sounds/voice/default/koraxgame8.ogg new file mode 100644 index 000000000..85714c0b8 Binary files /dev/null and b/sounds/voice/default/koraxgame8.ogg differ diff --git a/sounds/voice/default/koraxgame9.ogg b/sounds/voice/default/koraxgame9.ogg new file mode 100644 index 000000000..9d287cb7b Binary files /dev/null and b/sounds/voice/default/koraxgame9.ogg differ diff --git a/sounds/voice/default/koraxgreet1.ogg b/sounds/voice/default/koraxgreet1.ogg new file mode 100644 index 000000000..27d274f9a Binary files /dev/null and b/sounds/voice/default/koraxgreet1.ogg differ diff --git a/sounds/voice/default/koraxgreet10.ogg b/sounds/voice/default/koraxgreet10.ogg new file mode 100644 index 000000000..682a2c3e2 Binary files /dev/null and b/sounds/voice/default/koraxgreet10.ogg differ diff --git a/sounds/voice/default/koraxgreet11.ogg b/sounds/voice/default/koraxgreet11.ogg new file mode 100644 index 000000000..43daeb95a Binary files /dev/null and b/sounds/voice/default/koraxgreet11.ogg differ diff --git a/sounds/voice/default/koraxgreet12.ogg b/sounds/voice/default/koraxgreet12.ogg new file mode 100644 index 000000000..b5ea26685 Binary files /dev/null and b/sounds/voice/default/koraxgreet12.ogg differ diff --git a/sounds/voice/default/koraxgreet13.ogg b/sounds/voice/default/koraxgreet13.ogg new file mode 100644 index 000000000..de7d673e1 Binary files /dev/null and b/sounds/voice/default/koraxgreet13.ogg differ diff --git a/sounds/voice/default/koraxgreet2.ogg b/sounds/voice/default/koraxgreet2.ogg new file mode 100644 index 000000000..b8fb6a03e Binary files /dev/null and b/sounds/voice/default/koraxgreet2.ogg differ diff --git a/sounds/voice/default/koraxgreet3.ogg b/sounds/voice/default/koraxgreet3.ogg new file mode 100644 index 000000000..c56c54f97 Binary files /dev/null and b/sounds/voice/default/koraxgreet3.ogg differ diff --git a/sounds/voice/default/koraxgreet4.ogg b/sounds/voice/default/koraxgreet4.ogg new file mode 100644 index 000000000..2f7d7ab63 Binary files /dev/null and b/sounds/voice/default/koraxgreet4.ogg differ diff --git a/sounds/voice/default/koraxgreet5.ogg b/sounds/voice/default/koraxgreet5.ogg new file mode 100644 index 000000000..516d3ad95 Binary files /dev/null and b/sounds/voice/default/koraxgreet5.ogg differ diff --git a/sounds/voice/default/koraxgreet6.ogg b/sounds/voice/default/koraxgreet6.ogg new file mode 100644 index 000000000..40a768656 Binary files /dev/null and b/sounds/voice/default/koraxgreet6.ogg differ diff --git a/sounds/voice/default/koraxgreet7.ogg b/sounds/voice/default/koraxgreet7.ogg new file mode 100644 index 000000000..618079caa Binary files /dev/null and b/sounds/voice/default/koraxgreet7.ogg differ diff --git a/sounds/voice/default/koraxgreet8.ogg b/sounds/voice/default/koraxgreet8.ogg new file mode 100644 index 000000000..be7255acf Binary files /dev/null and b/sounds/voice/default/koraxgreet8.ogg differ diff --git a/sounds/voice/default/koraxgreet9.ogg b/sounds/voice/default/koraxgreet9.ogg new file mode 100644 index 000000000..80fe204f1 Binary files /dev/null and b/sounds/voice/default/koraxgreet9.ogg differ diff --git a/sounds/voice/default/koraxmasters1.ogg b/sounds/voice/default/koraxmasters1.ogg new file mode 100644 index 000000000..ee1aae882 Binary files /dev/null and b/sounds/voice/default/koraxmasters1.ogg differ diff --git a/sounds/voice/default/koraxmasters2.ogg b/sounds/voice/default/koraxmasters2.ogg new file mode 100644 index 000000000..824e73d2a Binary files /dev/null and b/sounds/voice/default/koraxmasters2.ogg differ diff --git a/sounds/voice/default/koraxmasters3.ogg b/sounds/voice/default/koraxmasters3.ogg new file mode 100644 index 000000000..c0d2b620d Binary files /dev/null and b/sounds/voice/default/koraxmasters3.ogg differ diff --git a/sounds/voice/default/koraxmasters4.ogg b/sounds/voice/default/koraxmasters4.ogg new file mode 100644 index 000000000..b0b645c7f Binary files /dev/null and b/sounds/voice/default/koraxmasters4.ogg differ diff --git a/sounds/voice/default/koraxmasters5.ogg b/sounds/voice/default/koraxmasters5.ogg new file mode 100644 index 000000000..d9664ae72 Binary files /dev/null and b/sounds/voice/default/koraxmasters5.ogg differ diff --git a/sounds/voice/default/koraxmasters6.ogg b/sounds/voice/default/koraxmasters6.ogg new file mode 100644 index 000000000..eaaa5e1b7 Binary files /dev/null and b/sounds/voice/default/koraxmasters6.ogg differ diff --git a/sounds/voice/default/koraxmasters7.ogg b/sounds/voice/default/koraxmasters7.ogg new file mode 100644 index 000000000..b7d0acd17 Binary files /dev/null and b/sounds/voice/default/koraxmasters7.ogg differ diff --git a/sounds/voice/default/koraxmasters8.ogg b/sounds/voice/default/koraxmasters8.ogg new file mode 100644 index 000000000..1be093481 Binary files /dev/null and b/sounds/voice/default/koraxmasters8.ogg differ diff --git a/sounds/voice/default/koraxmasters9.ogg b/sounds/voice/default/koraxmasters9.ogg new file mode 100644 index 000000000..08b435981 Binary files /dev/null and b/sounds/voice/default/koraxmasters9.ogg differ diff --git a/sounds/voice/default/koraxworship1.ogg b/sounds/voice/default/koraxworship1.ogg new file mode 100644 index 000000000..a71cdff1f Binary files /dev/null and b/sounds/voice/default/koraxworship1.ogg differ diff --git a/sounds/voice/default/koraxworship10.ogg b/sounds/voice/default/koraxworship10.ogg new file mode 100644 index 000000000..b7987dd8a Binary files /dev/null and b/sounds/voice/default/koraxworship10.ogg differ diff --git a/sounds/voice/default/koraxworship11.ogg b/sounds/voice/default/koraxworship11.ogg new file mode 100644 index 000000000..f814c982f Binary files /dev/null and b/sounds/voice/default/koraxworship11.ogg differ diff --git a/sounds/voice/default/koraxworship2.ogg b/sounds/voice/default/koraxworship2.ogg new file mode 100644 index 000000000..c1832e994 Binary files /dev/null and b/sounds/voice/default/koraxworship2.ogg differ diff --git a/sounds/voice/default/koraxworship3.ogg b/sounds/voice/default/koraxworship3.ogg new file mode 100644 index 000000000..fb7e60b30 Binary files /dev/null and b/sounds/voice/default/koraxworship3.ogg differ diff --git a/sounds/voice/default/koraxworship4.ogg b/sounds/voice/default/koraxworship4.ogg new file mode 100644 index 000000000..9581bc304 Binary files /dev/null and b/sounds/voice/default/koraxworship4.ogg differ diff --git a/sounds/voice/default/koraxworship5.ogg b/sounds/voice/default/koraxworship5.ogg new file mode 100644 index 000000000..ae0402ad6 Binary files /dev/null and b/sounds/voice/default/koraxworship5.ogg differ diff --git a/sounds/voice/default/koraxworship6.ogg b/sounds/voice/default/koraxworship6.ogg new file mode 100644 index 000000000..8f168aee9 Binary files /dev/null and b/sounds/voice/default/koraxworship6.ogg differ diff --git a/sounds/voice/default/koraxworship7.ogg b/sounds/voice/default/koraxworship7.ogg new file mode 100644 index 000000000..f97374cbd Binary files /dev/null and b/sounds/voice/default/koraxworship7.ogg differ diff --git a/sounds/voice/default/koraxworship8.ogg b/sounds/voice/default/koraxworship8.ogg new file mode 100644 index 000000000..9bce837ad Binary files /dev/null and b/sounds/voice/default/koraxworship8.ogg differ diff --git a/sounds/voice/default/koraxworship9.ogg b/sounds/voice/default/koraxworship9.ogg new file mode 100644 index 000000000..80896e5ef Binary files /dev/null and b/sounds/voice/default/koraxworship9.ogg differ diff --git a/swwmvoicepack.txt b/swwmvoicepack.txt new file mode 100644 index 000000000..777d07e00 --- /dev/null +++ b/swwmvoicepack.txt @@ -0,0 +1,12 @@ +# (lines starting with this character are comments) +# if you want to make custom voice packs for SWWM GZ, you need to provide this +# file in the root of the zip/pk3/whatever, wads are not supported +# list the names of your voice types here and don't forget to define your voice +# lines using a similar format to the base game's: + +# with the exception of pain/death/grunt sounds, all lines you may want to +# register require a subtitle language string so they can be properly detected, +# but you can set them to an empty string if you don't want text to display. +# also don't forget to add a SWWM_VOICENAME_* language string for each voice +# type so they have a "human-readable" name in the options menu +default diff --git a/textures/graynoise.png b/textures/graynoise.png new file mode 100644 index 000000000..415a31d48 Binary files /dev/null and b/textures/graynoise.png differ diff --git a/textures/heattex.png b/textures/heattex.png new file mode 100644 index 000000000..ec563e6e4 Binary files /dev/null and b/textures/heattex.png differ diff --git a/zmapinfo.txt b/zmapinfo.txt index 7351f0d39..6afff226f 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -3,12 +3,12 @@ GameInfo AddEventHandlers = "SWWMCrashHandler", "SWWMBrutalHandler", "SWWMHandler" IntermissionMusic = "music/DRAGONY.XM" PlayerClasses = "Demolitionist" - PrecacheClasses = "Demolitionist","ExplodiumGun" StatusBarClass = "SWWMStatusBar" BackpackType = "HammerspaceEmbiggener" } Map TITLEMAP "SWWM GZ - Title Map" { - Music = "music/TRAUMATI.XM" + Music = "" + EventHandlers = "SWWMTitleStuff" } diff --git a/zscript.txt b/zscript.txt index eaacd9503..f6d1a9ced 100644 --- a/zscript.txt +++ b/zscript.txt @@ -12,6 +12,7 @@ version "4.3" #include "zscript/swwm_inventory.zsc" #include "zscript/swwm_hud.zsc" #include "zscript/swwm_menu.zsc" +#include "zscript/swwm_title.zsc" // items #include "zscript/swwm_health.zsc" #include "zscript/swwm_armor.zsc" diff --git a/zscript/swwm_ammo.zsc b/zscript/swwm_ammo.zsc index 153168b5d..56e8a890b 100644 --- a/zscript/swwm_ammo.zsc +++ b/zscript/swwm_ammo.zsc @@ -29,6 +29,18 @@ Mixin Class SWWMAmmo return (amta < amtb); } + override bool SpecialDropAction( Actor dropper ) + { + if ( Amount != default.Amount ) + { + // needed for positioning to work + Owner = dropper; + CreateTossable(Amount); + return true; + } + return false; + } + override inventory CreateTossable( int amt ) { if ( bUndroppable || bUntossable || !Owner || (Amount <= 0) || (amt == 0) ) @@ -155,6 +167,12 @@ Mixin Class SWWMShellAmmo } return StringTable.Localize(tagstr); } + + override void ModifyDropAmount( int dropamount ) + { + Super.ModifyDropAmount(dropamount); + Amount = max(1,Amount+Random[ShellDrop](-2,1)); + } } Class RedShell : Ammo @@ -228,7 +246,7 @@ Class GreenShell : Ammo Inventory.Amount 1; Inventory.MaxAmount 40; Ammo.BackpackAmount 4; - Ammo.DropAmount 4; + Ammo.DropAmount 3; +FLOATBOB; FloatBobStrength 0.25; } @@ -280,7 +298,7 @@ Class WhiteShell : Ammo Inventory.Amount 1; Inventory.MaxAmount 20; Ammo.BackpackAmount 2; - Ammo.DropAmount 4; + Ammo.DropAmount 2; +FLOATBOB; FloatBobStrength 0.25; } @@ -325,7 +343,7 @@ Class BlueShell : Ammo Inventory.Amount 1; Inventory.MaxAmount 24; Ammo.BackpackAmount 4; - Ammo.DropAmount 4; + Ammo.DropAmount 3; +FLOATBOB; FloatBobStrength 0.25; } @@ -370,7 +388,7 @@ Class BlackShell : Ammo Inventory.Amount 1; Inventory.MaxAmount 12; Ammo.BackpackAmount 2; - Ammo.DropAmount 4; + Ammo.DropAmount 1; +FLOATBOB; FloatBobStrength 0.25; } @@ -408,7 +426,7 @@ Class PurpleShell : Ammo Inventory.Amount 1; Inventory.MaxAmount 20; Ammo.BackpackAmount 4; - Ammo.DropAmount 4; + Ammo.DropAmount 2; +FLOATBOB; FloatBobStrength 0.25; } @@ -475,7 +493,7 @@ Class EvisceratorShell : Ammo Inventory.Amount 1; Inventory.MaxAmount 30; Ammo.BackpackAmount 6; - Ammo.DropAmount 6; + Ammo.DropAmount 3; +FLOATBOB; FloatBobStrength 0.25; } @@ -512,7 +530,7 @@ Class HellblazerMissiles : Ammo Inventory.Amount 1; Inventory.MaxAmount 60; Ammo.BackpackAmount 18; - Ammo.DropAmount 6; + Ammo.DropAmount 3; +FLOATBOB; FloatBobStrength 0.25; } @@ -544,7 +562,7 @@ Class HellblazerCrackshots : Ammo Inventory.Amount 1; Inventory.MaxAmount 24; Ammo.BackpackAmount 6; - Ammo.DropAmount 3; + Ammo.DropAmount 2; +FLOATBOB; FloatBobStrength 0.25; } @@ -576,7 +594,7 @@ Class HellblazerRavagers : Ammo Inventory.Amount 1; Inventory.MaxAmount 9; Ammo.BackpackAmount 3; - Ammo.DropAmount 3; + Ammo.DropAmount 1; +FLOATBOB; FloatBobStrength 0.25; } @@ -608,7 +626,7 @@ Class HellblazerWarheads : Ammo Inventory.Amount 1; Inventory.MaxAmount 4; Ammo.BackpackAmount 0; - Ammo.DropAmount 2; + Ammo.DropAmount 1; +FLOATBOB; FloatBobStrength 0.25; } diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index 6c6c911ba..a2f0ac69c 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -278,7 +278,9 @@ Class SWWMOneLiner : HUDMessageBase int margin = safezone.GetInt(); Vector2 hs = StatusBar.GetHUDScale(); Vector2 ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y); - String locs = "\""..StringTable.Localize(whichline).."\""; + String loc = StringTable.Localize(whichline); + if ( loc.Length() <= 0 ) return; // don't draw empty strings + String locs = "\""..loc.."\""; // split so it can fit BrokenLines l = TewiFont.BreakLines(locs,int(ss.x*.5)); int maxlen = 0; @@ -625,7 +627,57 @@ Class SWWMNothing : Actor } } +Class PoofLight : PaletteLight +{ + Default + { + Tag "Yellow"; + ReactionTime 5; + Args 0,0,0,60; + } +} + Class SWWMItemFog : Actor +{ + Default + { + RenderStyle "Add"; + +NOGRAVITY; + +NOBLOCKMAP; + +DONTSPLASH; + +ROLLSPRITE; + +ROLLCENTER; + } + States + { + Spawn: + BLPF A 2 Bright NoDelay + { + // offset up + SetOrigin(Vec3Offset(0,0,16),false); + roll = FRandom[ExploS](0,360); + scale *= FRandom[ExploS](0.9,1.1); + scale.x *= RandomPick[ExploS](-1,1); + scale.y *= RandomPick[ExploS](-1,1); + int numpt = Random[ExploS](16,32); + for ( int i=0; i 0) ) @@ -1423,8 +1503,19 @@ Class SWWMHandler : EventHandler Class item = e.Name.Mid(10); if ( !item ) return; let def = GetDefaultByType(item); - int amt = ((item is 'Ammo')&&Ammo(def).default.DropAmount)?Ammo(def).DropAmount:def.Amount; - int cap = min(amt,players[e.Args[1]].mo.CountInv(item)); + int amt = def.Amount; + // if it's an ammo, check the largest unit givable + if ( item is 'Ammo' ) + { + for ( int i=0; i)(AllActorClasses[i]); + if ( !a || (a.GetParentClass() != item) || (GetDefaultByType(a).Amount < amt) ) continue; + amt = GetDefaultByType(a).Amount; + } + } + int ramt = players[e.Args[1]].mo.CountInv(item); + if ( amt > ramt ) amt = ramt; if ( players[e.Args[1]].mo.GiveInventory(item,amt) ) { players[e.Args[0]].mo.TakeInventory(item,amt); @@ -1432,8 +1523,8 @@ Class SWWMHandler : EventHandler SWWMTradeHistory.RegisterSend(players[e.Args[0]],players[e.Args[1]],def.GetTag()); SWWMTradeHistory.RegisterReceive(players[e.Args[1]],players[e.Args[0]],def.GetTag()); // add messages - if ( e.Args[0] == consoleplayer ) Console.Printf(StringTable.Localize("$SWWM_MSGSENT"),def.GetTag(),players[e.Args[1]].GetUserName()); - if ( e.Args[1] == consoleplayer ) Console.Printf(StringTable.Localize("$SWWM_MSGRECV"),players[e.Args[0]].GetUserName(),def.GetTag()); + if ( e.Args[0] == consoleplayer ) Console.Printf(StringTable.Localize("$SWWM_MSGSENT"),amt,def.GetTag(),players[e.Args[1]].GetUserName()); + if ( e.Args[1] == consoleplayer ) Console.Printf(StringTable.Localize("$SWWM_MSGRECV"),players[e.Args[0]].GetUserName(),amt,def.GetTag()); } } else if ( e.Name ~== "swwmmarkloreread" ) @@ -1455,10 +1546,45 @@ Class SWWMHandler : EventHandler if ( !item ) return; let i = players[e.Args[0]].mo.FindInventory(item); if ( !i ) return; - let drop = players[e.Args[0]].mo.DropInventory(i,((i is 'Ammo')&&Ammo(i).default.DropAmount)?Ammo(i).default.DropAmount:i.default.Amount); + int amt = i.default.Amount; + // if it's an ammo, check the largest unit givable + if ( i is 'Ammo' ) + { + for ( int i=0; i)(AllActorClasses[i]); + if ( !a || (a.GetParentClass() != item) || (GetDefaultByType(a).Amount < amt) ) continue; + amt = GetDefaultByType(a).Amount; + } + } + if ( amt > i.Amount ) amt = i.Amount; + let drop = players[e.Args[0]].mo.DropInventory(i,amt); // add some random velocity so multiple drops don't get bunched together if ( drop ) drop.vel += (Actor.RotateVector((FRandom[Junk](-1.5,.5),FRandom[Junk](-2.5,2.5)),players[e.Args[0]].mo.angle),FRandom[Junk](2.,5.)); } + else if ( e.Name ~== "swwmkoraxline" ) + { + if ( consoleplayer != e.Args[1] ) return; + if ( CVar.GetCVar('swwm_mutevoice',players[consoleplayer]).GetInt() >= 3 ) return; + switch ( e.Args[0] ) + { + case 0: + AddOneliner("koraxgreet",60); + break; + case 1: + AddOneliner("koraxblood",150); + break; + case 2: + AddOneliner("koraxgame",120); + break; + case 3: + AddOneliner("koraxworship",80); + break; + case 4: + AddOneliner("koraxmasters",90); + break; + } + } } static void DoFlash( Actor camera, Color c, int duration ) diff --git a/zscript/swwm_hud.zsc b/zscript/swwm_hud.zsc index 6e23dbfbc..9b902460c 100644 --- a/zscript/swwm_hud.zsc +++ b/zscript/swwm_hud.zsc @@ -9,7 +9,7 @@ Class MsgLine Class SWWMStatusBar : BaseStatusBar { TextureID StatusTex, WeaponTex, ScoreTex, InventoryTex, ChatTex[6], - HealthTex[4], FuelTex, DashTex; + HealthTex[5], FuelTex, DashTex; HUDFont mTewiFont; // "Full History" contains all messages since session start, nothing is flushed @@ -40,6 +40,22 @@ Class SWWMStatusBar : BaseStatusBar } } + override bool ProcessMidPrint( Font fnt, String msg, bool bold ) + { + // check for Korax lines + if ( msg == StringTable.Localize("$TXT_ACS_MAP02_11_AREYO") ) + EventHandler.SendNetworkEvent("swwmkoraxline",0,consoleplayer); + else if ( msg == StringTable.Localize("$TXT_ACS_MAP13_11_MYSER") ) + EventHandler.SendNetworkEvent("swwmkoraxline",1,consoleplayer); + else if ( msg == StringTable.Localize("$TXT_ACS_MAP22_29_ITHIN") ) + EventHandler.SendNetworkEvent("swwmkoraxline",2,consoleplayer); + else if ( msg == StringTable.Localize("$TXT_ACS_MAP27_10_THENA") ) + EventHandler.SendNetworkEvent("swwmkoraxline",3,consoleplayer); + else if ( msg == StringTable.Localize("$TXT_ACS_MAP35_14_TOFAC") ) + EventHandler.SendNetworkEvent("swwmkoraxline",4,consoleplayer); + return false; + } + override bool ProcessNotify( EPrintLevel printlevel, String outline ) { let m = new("MsgLine"); @@ -91,14 +107,14 @@ Class SWWMStatusBar : BaseStatusBar // prune old messages for ( int i=0; i PRINT_HIGH) && (gametic < (MainQueue[i].tic+chatduration.GetInt())) ) continue; + if ( (MainQueue[i].type <= PRINT_HIGH) && (gametic < (MainQueue[i].tic+35*msgduration.GetInt())) ) continue; + else if ( (MainQueue[i].type > PRINT_HIGH) && (gametic < (MainQueue[i].tic+35*chatduration.GetInt())) ) continue; MainQueue.Delete(i); i--; } @@ -132,6 +148,7 @@ Class SWWMStatusBar : BaseStatusBar HealthTex[1] = TexMan.CheckForTexture("graphics/HUD/HealthBar1.png",TexMan.Type_Any); HealthTex[2] = TexMan.CheckForTexture("graphics/HUD/HealthBar2.png",TexMan.Type_Any); HealthTex[3] = TexMan.CheckForTexture("graphics/HUD/HealthBar3.png",TexMan.Type_Any); + HealthTex[4] = TexMan.CheckForTexture("graphics/HUD/HealthBarS.png",TexMan.Type_Any); ScoreTex = TexMan.CheckForTexture("graphics/HUD/ScoreBox.png",TexMan.Type_Any); WeaponTex = TexMan.CheckForTexture("graphics/HUD/WeaponBox.png",TexMan.Type_Any); ChatTex[0] = TexMan.CheckForTexture("graphics/HUD/ChatBoxTop.png",TexMan.Type_Any); @@ -220,6 +237,12 @@ Class SWWMStatusBar : BaseStatusBar Screen.DrawTexture(DashTex,false,margin+2,ss.y-(margin+21),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,dw,DTA_Alpha,alph); int fw = FuelInter.GetValue(); Screen.DrawTexture(FuelTex,false,margin+2,ss.y-(margin+25),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,fw); + if ( isInvulnerable() ) + { + Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+15),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(mTewiFont.mFont,Font.CR_WHITE,margin+108,ss.y-(margin+16),String.Format("%3d",Random[HudStuff](0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + return; + } int ht = clamp(HealthInter.GetValue(),0,10000); int hw = min(ht,100); Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+15),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,hw); @@ -272,8 +295,8 @@ Class SWWMStatusBar : BaseStatusBar String cstr = MainQueue[i].str; if ( MainQueue[i].rep > 1 ) cstr.AppendFormat(" (x%d)",MainQueue[i].rep); int curtime = MainQueue[i].tic-gametic; - if ( MainQueue[i].type < PRINT_CHAT ) curtime += msgduration.GetInt(); - else curtime += chatduration.GetInt(); + if ( MainQueue[i].type < PRINT_CHAT ) curtime += 35*msgduration.GetInt(); + else curtime += 35*chatduration.GetInt(); double alph = clamp(curtime/20.,0.,1.); BrokenLines l = mTewiFont.mFont.BreakLines(cstr,smol?211:361); for ( int j=0; j 1 ) cstr.AppendFormat(" (x%d)",PickupQueue[i].rep); - int curtime = (PickupQueue[i].tic+pickduration.GetInt())-gametic; + int curtime = (PickupQueue[i].tic+35*pickduration.GetInt())-gametic; double alph = clamp(curtime/20.,0.,1.); BrokenLines l = mTewiFont.mFont.BreakLines(cstr,int(ss.x*.75)); int maxlen = 0; diff --git a/zscript/swwm_inventory.zsc b/zscript/swwm_inventory.zsc index 21035a595..40823f8c0 100644 --- a/zscript/swwm_inventory.zsc +++ b/zscript/swwm_inventory.zsc @@ -321,7 +321,7 @@ Class SWWMWeapon : Weapon abstract double diff = deltaangle(self.angle,AngleTo(d.HitActor)); self.angle += clamp(diff,-5.,5.); dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Melee',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x)); - SWWMHandler.DoKnockback(d.HitActor,d.HitDir,dmg*1000); + SWWMHandler.DoKnockback(d.HitActor,d.HitDir+(0,0,.2),dmg*5000); if ( d.HitActor.player ) d.HitActor.A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.25); if ( !d.HitActor.bNOBLOOD ) { diff --git a/zscript/swwm_menu.zsc b/zscript/swwm_menu.zsc index c11c42d40..778cf47fd 100644 --- a/zscript/swwm_menu.zsc +++ b/zscript/swwm_menu.zsc @@ -13,7 +13,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu TAB_CHAT }; - TextureID MainWindow, TabSeparator, WindowSeparator, WindowSeparatorH; + TextureID MainWindow, TabSeparator, WindowSeparator, WindowSeparatorH, + FancyBg; Font TewiFont; int curtab; // for scrolling @@ -55,6 +56,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu return; } TewiFont = Font.GetFont('TewiShaded'); + FancyBg = TexMan.CheckForTexture("graphics/tempbg.png",TexMan.Type_Any); MainWindow = TexMan.CheckForTexture("graphics/KBase/MainWindow.png",TexMan.Type_Any); TabSeparator = TexMan.CheckForTexture("graphics/KBase/TabSeparator.png",TexMan.Type_Any); WindowSeparator = TexMan.CheckForTexture("graphics/KBase/WindowSeparator.png",TexMan.Type_Any); @@ -194,7 +196,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu invlist.Clear(); for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv ) { - if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') ) continue; + if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') ) continue; String tag = inv.GetTag(); bool greater = false; for ( int i=0; i 1) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = TewiFont.StringWidth(str); if ( len > longest ) longest = len; @@ -480,7 +483,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu str = invlist[i].GetTag(); len = TewiFont.StringWidth(str); if ( len > longest ) longest = len; - Screen.DrawText(TewiFont,(i==sel0)?Font.CR_WHITE:Font.CR_DARKGRAY,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(TewiFont,Font.CR_UNTRANSLATED,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i==sel0)?Color(128,0,0,0):Color(0,0,0,0)); yy += 16; if ( yy >= 369 ) { @@ -506,14 +509,6 @@ Class SWWMKnowledgeBaseMenu : GenericMenu xx = 3; yy = 17; int ofs = max(0,sel0-27); - int maxw = 0; - // first pass, get max width - for ( int i=0; i maxw ) maxw = w; - } for ( int i=ofs; i 379 ) break; @@ -521,7 +516,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu Screen.DrawText(TewiFont,(i==sel0)?Font.CR_FIRE:lorelib.ent[i].read?Font.CR_DARKGRAY:Font.CR_WHITE,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); yy += 13; } - xx += maxw+2; + xx += TewiFont.StringWidth("********************")+2; Screen.DrawTexture(WindowSeparator,false,origin.x+xx,origin.y+14,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); xx += 4; // scrollbar @@ -594,3 +589,179 @@ Class SWWMKnowledgeBaseMenu : GenericMenu } } } + +// voice selector +Class OptionMenuItemSWWMVoiceOption : OptionMenuItemOptionBase +{ + CVar mCVar; + Array types; + + OptionMenuItemSWWMVoiceOption Init( String label, Name command, CVar graycheck = null, int center = 0 ) + { + Super.Init(label,command,'',graycheck,center); + mCVar = CVar.FindCVar(mAction); + int lmp; + for ( lmp = Wads.FindLump("swwmvoicepack.txt"); lmp > 0; lmp = Wads.FindLump("swwmvoicepack.txt",lmp+1) ) + { + Array lst; + lst.Clear(); + String dat = Wads.ReadLump(lmp); + dat.Split(lst,"\n",0); + for ( int i=0; i= 0 ) + { + mValues = newtext; + int s = GetSelection(); + if ( (s >= cnt) || (s < 0) ) s = 0; + SetSelection(s); + return true; + } + } + return false; + } + + override int GetSelection() + { + int Selection = -1; + int cnt = types.Size(); + if ( (cnt > 0) && mCVar ) + { + String cv = mCVar.GetString(); + for( int i=0; i 0) && mCVar ) + mCVar.SetString(types[Selection]); + } + + override int Draw( OptionMenuDescriptor desc, int y, int indent, bool selected ) + { + if ( mCenter ) indent = (screen.GetWidth()/2); + drawLabel(indent,y,selected?OptionMenuSettings.mFontColorSelection:OptionMenuSettings.mFontColor,isGrayed()); + int Selection = GetSelection(); + String loc; + if ( Selection == -1 ) loc = "Unknown"; + else + { + String uptxt = types[Selection]; + uptxt.MakeUpper(); + String str = String.Format("SWWM_VOICENAME_%s",uptxt); + loc = StringTable.Localize(str,false); + if ( str == loc ) loc = types[Selection]; + } + drawValue(indent,y,OptionMenuSettings.mFontColorValue,loc,isGrayed()); + return indent; + } + + override bool MenuEvent( int mkey, bool fromcontroller ) + { + int cnt = types.Size(); + if ( cnt > 0 ) + { + int Selection = GetSelection(); + if ( mkey == Menu.MKEY_Left ) + { + if ( Selection == -1 ) Selection = 0; + else if ( --Selection < 0 ) Selection = cnt-1; + } + else if ( (mkey == Menu.MKEY_Right) || (mkey == Menu.MKEY_Enter) ) + { + if ( ++Selection >= cnt ) Selection = 0; + } + else return OptionMenuItem.MenuEvent(mkey,fromcontroller); + SetSelection(Selection); + Menu.MenuSound("menu/change"); + } + else return OptionMenuItem.MenuEvent(mkey,fromcontroller); + return true; + } +} + +// option menu /w tooltips +Class SWWMOptionMenu : OptionMenu +{ + private String ttip; + + override void Ticker() + { + Super.Ticker(); + // fetch the tooltip for whatever's selected (if any) + if ( mDesc.mSelectedItem == -1 ) return; + String mcvar = mDesc.mItems[mDesc.mSelectedItem].GetAction(); + mcvar.Replace(" ","_"); // need to strip whitespace for command actions + String locstr = String.Format("TOOLTIP_%s",mcvar); + ttip = StringTable.Localize(locstr,false); + if ( ttip == locstr ) ttip = ""; + } + override void Drawer() + { + Super.Drawer(); + if ( ttip == "" ) return; + // re-evaluate y to check where the cursor is + int cy = 0; + int y = mDesc.mPosition; + if ( y <= 0 ) + { + let font = generic_ui||!mDesc.mFont?NewSmallFont:mDesc.mFont; + if ( font && (mDesc.mTitle.Length() > 0) ) + y = -y+font.GetHeight(); + else y = -y; + } + int fontheight = OptionMenuSettings.mLinespacing*CleanYfac_1; + y *= CleanYfac_1; + int lastrow = Screen.GetHeight()-OptionHeight()*CleanYfac_1; + for ( int i=0; ((i < mDesc.mItems.Size()) && (y <= lastrow)); i++ ) + { + // Don't scroll the uppermost items + if ( i == mDesc.mScrollTop ) + { + i += mDesc.mScrollPos; + if ( i >= mDesc.mItems.Size() ) break; // skipped beyond end of menu + } + y += fontheight; + if ( mDesc.mSelectedItem == i ) + { + cy = y; + break; + } + } + let fnt = Font.GetFont('Tewi'); + let lines = fnt.BreakLines(ttip,CleanWidth_1-8); + int height = (8+fnt.GetHeight()*lines.Count())*CleanYFac_1; + // draw at the bottom unless the selected option could is covered by the tooltip + int ypos = Screen.GetHeight()-height; + if ( cy >= ypos ) ypos = 0; + Screen.Dim("Black",.75,0,ypos,Screen.GetWidth(),height); + ypos += 4*CleanYFac_1; + for ( int i=0; i)(gameinfo.backpacktype); - if ( type ) GiveInventory(type,1,true); + let def = GetDefaultByType(type); + if ( type ) GiveInventory(type,def.MaxAmount,true); if ( !giveall ) return; } if ( giveall || (name ~== "ammo") ) @@ -301,7 +302,7 @@ Class Demolitionist : PlayerPawn mystats.stompcount++; } if ( lastvelz < -10 ) A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP); - if ( (lastvelz < -gruntspeed) && (mute.GetInt() < 4) ) + if ( (player == players[consoleplayer]) && (lastvelz < -gruntspeed) && (mute.GetInt() < 4) ) A_StartSound(String.Format("voice/%s/grunt",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP); A_Footstep(0,true,clamp(-lastvelz*0.05,0.01,1.0)); } @@ -667,19 +668,19 @@ Class Demolitionist : PlayerPawn if ( lastdamage > 90 ) { A_StartSound("*pain25",CHAN_VOICE); - if ( mute && myvoice && (mute.GetInt() < 4) ) + if ( (player == players[consoleplayer]) && mute && myvoice && (mute.GetInt() < 4) ) A_StartSound(String.Format("voice/%s/hipain",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP); } else if ( lastdamage > 30 ) { A_StartSound("*pain50",CHAN_VOICE); - if ( mute && myvoice && (mute.GetInt() < 4) ) + if ( (player == players[consoleplayer]) && mute && myvoice && (mute.GetInt() < 4) ) A_StartSound(String.Format("voice/%s/pain",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP); } else if ( lastdamage > 0 ) { A_StartSound("*pain100",CHAN_VOICE); - if ( mute && myvoice && (mute.GetInt() < 4) ) + if ( (player == players[consoleplayer]) && mute && myvoice && (mute.GetInt() < 4) ) A_StartSound(String.Format("voice/%s/lopain",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP); } } @@ -688,7 +689,7 @@ Class Demolitionist : PlayerPawn if ( !myvoice ) myvoice = CVar.GetCVar('swwm_voicetype',player); if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player); A_PlayerScream(); - if ( mute && myvoice && (mute.GetInt() < 4) ) + if ( (player == players[consoleplayer]) && mute && myvoice && (mute.GetInt() < 4) ) A_StartSound(String.Format("voice/%s/death",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP); } override bool OnGiveSecret( bool printmsg, bool playsound ) @@ -722,6 +723,7 @@ Class Demolitionist : PlayerPawn int score = 250; Console.Printf(StringTable.Localize("$SWWM_FINDKEY"),player.GetUserName(),item.GetTag(),score); SWWMCredits.Give(player,score); + if ( !swwm_sharekeys ) return; // share all keys in mp for ( int i=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(((level.maptime+e.FracTic)/Thinker.TICRATE)-2,0.,1.); + alf *= 1.-clamp(((level.maptime+e.FracTic)/Thinker.TICRATE)-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 = "presents"; + alf = clamp(((level.maptime+e.FracTic)/Thinker.TICRATE)-10,0.,1.); + alf *= 1.-clamp(((level.maptime+e.FracTic)/Thinker.TICRATE)-16,0.,1.); + Screen.DrawText(TewiFont,Font.CR_WHITE,(160-TewiFont.StringWidth(str))/2,(100-TewiFont.GetHeight())/2,str,DTA_VirtualWidth,160,DTA_VirtualHeight,100,DTA_Alpha,alf); + str = "a mod by \cxMarisa Kirisame"; + alf = clamp(((level.maptime+e.FracTic)/Thinker.TICRATE)-18,0.,1.); + alf *= 1.-clamp(((level.maptime+e.FracTic)/Thinker.TICRATE)-24,0.,1.); + Screen.DrawText(TewiFont,Font.CR_WHITE,(160-TewiFont.StringWidth(str))/2,(100-TewiFont.GetHeight())/2,str,DTA_VirtualWidth,160,DTA_VirtualHeight,100,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(((level.maptime+e.FracTic)/Thinker.TICRATE)-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); + } +}