diff --git a/FuturePlans.md b/FuturePlans.md index 9386e7dfd..f11e2d551 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -2,15 +2,41 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after * **DLC Weaponset:** - [1] Itamex Reinforced Hammer *(UnSX 5)* + - HAHA DAB *(Gib 200 enemies with the Itamex Hammer)* - [2] Plasma Blaster *(SWWM)* + - Blastin' Plasma *(Kill an enemy at full health with a Plasma Blaster charged shot 50 times)* - [3] Puntzer Beta *(SWWM Iridium)* + - High Noon *(Land 6 killing shots in a single Puntzer Beta reload)* - [4] Puntzer Gamma *(Ultra Suite 2)* + - You Gained Brouzouf *(Unload an entire mag in fuller auto with the Puntzer Gamma without missing a single shot)* - [5] Sheen HMG *(SWWM Platinum Ep2)* + - Dakka *(Fire the Sheen HMG for one minute straight)* - [6] Quadravol *(UnSX)* + - Gravely Roast *(Perform 50 bayonet combos with the Quadravol)* - [7] Blackfire Igniter *(UnSX 5, Ultra Suite 3)* + - Ice Ice Baby *(Impale 40 enemies with the Blackfire Igniter secondary)* - [8] Rail Carbine *("Tesla Beamer" in Ultra Suite 2 & 3)* + - John Romero's Curse *(Fry yourself by discharging an electric weapon in water)* - [9] Ray-Khom *(UnSX)* + - The Most Silent Takedown *(Kill 30 enemies with the Ray-Khom primary without alerting them)* - [0] Grand Lance *(SWWM Iridium)* + - Penetrator *(Strike through 20 enemies in a row with a single Grand Lance secondary)* +* **DLC Weaponset 2:** + - [1] Hand of Divine *(Total Madness)* + - Facepunching Extraordinaire *(Kill 300 enemies with the Hand of Divine)* + - [6] Sparkster x3 *(UnSX 2)* + - A Fine Sparking *(Kill 50 enemies at once with a Sparkster Rifle combo shot)* + - [9] Mortal Rifle *(UnSX 2)* + - Railed Hard *(Shoot through 30 enemies with a single Mortal Rifle overpressure shot)* + - [0] Rafan-Kos *(UnSX 4)* + - Blasting Ropes *(Melt a grand total of 1000 enemies with the Rafan-Kos)* +* **DLC Gameset:** + - Tetris + - Pong + - Snake + - **[Doom]** Demo Land Adventure *(platformer with shooty gameplay)* + - **[Heretic]** Interstellar Demolitionist *(a somewhat simple vertical SHMUP, kinda Touhou styled)* + - **[Hexen]** Demolition Quest *(a JRPG, kinda like early FF / BoF)* * **More collectibles (some of which were initially planned but didn't make it in time):** - [Doom] Moth Plushy *("She loves a good lämp")* - [Doom] AA-12 *("Ibuki's favorite shotgun. It's just a collectible model, so it doesn't actually shoot")* @@ -21,6 +47,13 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - [Heretic] Manarock *("A delicacy for gods, but instantly deadly for mortals")* - [Heretic] Lithium - Volume One *("A work of art, one of the finest graphic novels")* - [Hexen] Psykkonovexx *("Some crazy-ass Anarukon instrument, sounds amazing though")* +* **More items:** + - [Heretic/Hexen] Safety Tether *(Original)* + - Sneaky Retreat *(Use 10 Safety Tethers)* + - Devastation Sigil *(SWWM)* + - Deva Station *(Use 10 Devastation Sigils)* + - Divine Sprite *(SWWM Platinum)* + - Divine Delight *(Use 10 Divine Sprites)* * **More achievements:** - Piece of Candy *(Collect 1000 nuggets)* - Kaboom *(Kill 30 enemies with planted Explodium Mags)* @@ -69,6 +102,7 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - [Hexen] The Last One *(Defeat the last Heresiarch)* - [Hexen] Didn't I Kick Your Ass Before? *(Defeat the Deathkings)* * **Mothgirl summon for Lämp easter egg** + - Layers of White *(Summon the White Lady)* * **Replace all hitscan with *"light projectiles"*** * **Crouch sliding *(+ proper crouch dashing)*** * **Expand third person animations** @@ -77,6 +111,7 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after * **Additional gestures + gesture menu** - Clap - The Bird + - How Very Brutal *(Flip off 20 enemies)* - Thumbs Down - Giggle - Shrug @@ -94,13 +129,6 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Unique bosses - Some extra enemy variants - Coverage for all supported IWADs *(oof)* -* **DLC Gameset:** - - Tetris - - Pong - - Snake - - **[Doom]** Demo Land Adventure *(platformer with shooty gameplay)* - - **[Heretic]** Interstellar Demolitionist *(a somewhat simple vertical SHMUP, kinda Touhou styled)* - - **[Hexen]** Demolition Quest *(a JRPG, kinda like early FF / BoF)* * **Original English Voice Acting:** - Demolitionist - Ibuki @@ -116,23 +144,7 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Manual reloading and weapon maintenance - Alternate mobility options *(no jetpack)* - Non-instant item usage -* **DLC Weaponset 2:** - - [1] Hand of Divine *(Total Madness)* - - [2] Zipnic AP Mag *(UnSX)* - - [3] Little Jack *(UnSX 3)* - - [4] Little John *(UnSX 3)* - - [5] Microgravity Manipulator *(Ultra Suite)* - - [6] Skull Launcher *(Weirdweapons)* - - [7] Sparkster Carbine *(UnSX)* - - [8] Mirkal *(SWWM Platinum Ep1)* - - [9] Mortal Rifle *(UnSX)* - - [0] Rafan-Kos *(UnSX)* -* **DLC Itemset:** - - Satellite *(Total Destruction)* - - [Heretic/Hexen] Safety Tether *(Original)* - - Devastation Sigil *(SWWM)* - - Divine Sprite *(SWWM Platinum)* - - Angel of Death *(Total Destruction, SWWM Platinum Ep2)* * **Official Campaign:** - Retell the events of UnSX 2 *(but with the Demolitionist's participation)* - - Basically give SWWM GZ its own IWAD as a standalone game \ No newline at end of file + - Basically give SWWM GZ its own IWAD as a standalone game + - Some new weapons, some renovations diff --git a/README.md b/README.md index e70fc2c81..2b311bfbb 100644 --- a/README.md +++ b/README.md @@ -276,10 +276,14 @@ Popularly known as the ***"Death Cannon"***. One of the four ultimate weapons co Unlike its previous incarnation in **SWWM Platinum**, this one doesn't have such an obscene pre-fire delay, so it's much easier to land a shot (not to mention also being far more lethal, thanks to the added chain reaction effect). -### Crystal Box +Due to its rarity, you can't buy it from the store, so you gotta find one (and only one) in the field. + +### Crystal Box ~ Replaces Cell Pack, Greater Rune ![](docimg/ynykronammo.png) -Additional ammo charge for the **Ynykron Artifact**. Contains a rod of polarized **Puronokorokinylum** crystal, highly volatile when heated and stimulated with concentrated light. These don't spawn in the world, so you'll have to get more ammo by finding additional weapon pickups or managing to afford one in the store, or trying your luck with a **Chancebox**. +Additional ammo charge for the **Ynykron Artifact**. Contains a rod of polarized **Puronokorokinylum** crystal, highly volatile when heated and stimulated with concentrated light. + +These spawn VERY rarely and, like the weapon that uses them, you can't buy them either. It's also possible to find them in **Chanceboxes**, if you're lucky. ## The Pickups ![](docimg/demolitionist_items.png) @@ -386,7 +390,7 @@ In some special cases you may find "Bulk" versions. These generally only pop up Note: In multiplayer, these can be traded between players, but do note that the receiver will not get any extra ammo from it. -### Universal Ammo Fabricator ~ Replaces Mana / Krater of Might in Hexen +### Universal Ammo Fabricator ~ Replaces Mana / Krater of Might ![](docimg/fabricator.png) Separated into four tiers, they work pretty much like the ammo cubes in **Doom Tournament**, except they try to *"balance"* the total ammo given. The max tier fabricator is the only one capable of producing ammo for superweapons (excluding the **Ynykron Artifact**). @@ -404,14 +408,14 @@ Reveals the entire layout of the map and shows key locations in the HUD. Also al ### Mykradvo Artifact ~ May randomly replace Ghost Artifact, Ragekit or Invinciball ![](docimg/mykradvo.png) -When used, bursts into plasma tendrils that will seek all hostiles within 100m and fry them good. If there are no hostiles around, the artifact will simply not ignite. +When used, bursts into plasma tendrils that will seek all visible hostiles within 100m and fry them good. If there are no hostiles around, the artifact will simply not ignite. -Has a chance to spawn in place of other items, but only one may spawn per map. +Has a chance to spawn in place of other items, but only one may spawn per map. Cannot be bought due to its rarity. ## The Collectibles ![](docimg/chancebox.png) -Every now and then you will find these strange ***"Lucky Chance Boxes"*** in secret areas, which you can open by pressing Use. In Hexen, they will also replace Dark Servants and Chaos Devices (as the game generally doesn't have secret areas). +Every now and then you will find these strange ***"Lucky Chance Boxes"*** in secret areas, which you can open by pressing Use. In Hexen, they will also replace Dark Servants, Banishment Devices and Porkalators (as the game generally doesn't have secret areas). While some will drop very useful goodies, others may provide you instead with a randomly selected item from a pool of various *"collectibles"*. On pickup, these will give you a nice extra score based on their estimated market price. Some of these collectibles will only appear when you play specific IWADs (or those that go chronologically after them, e.g.: Heretic collectibles appearing in Hexen). diff --git a/achievements.lst b/achievements.lst index bb69db6b4..c5a82e919 100644 --- a/achievements.lst +++ b/achievements.lst @@ -30,10 +30,13 @@ clonk,0,no,any conga,10,yes,any #crush,0,no,any #cybully,0,no,doom +#cum,1000,yes,any #dab,200,yes,any #dakka,60,no,any #deadeye,7,yes,any +#deva,10,yes,any dime,0,no,any +#divine,10,yes,any #doodle,20,yes,doom dosh,1000000000,no,any #doomboss1,0,no,doom @@ -48,6 +51,7 @@ dosh,1000000000,no,any #doomboss10,0,no,doom everything,0,no,any ezkill,50,yes,any +#fisto,300,yes,any flight,2000,yes,any friend,40,yes,any fuel,500,yes,any @@ -77,6 +81,7 @@ gravity,10,yes,raven #hexenboss11,0,no,hexen #hnd,6,yes,any #hurry,0,no,any +#ice,40,yes,any jump,150,yes,any #kancho,0,no,hexen #keen,0,no,doom @@ -97,9 +102,11 @@ par,15,yes,nothexen parry,200,yes,any #peace,0,no,any #pene,20,yes,any +#plasma,50,yes,any plush,10,yes,any #puzzle,20,yes,hexen rage,20,yes,any +#rail,30,yes,any reflect,20,yes,any refresh,30,yes,any #roast,50,yes,any @@ -110,7 +117,9 @@ shame,0,no,any shock,30,yes,any slayer,40,yes,any slemg,100,yes,any +#sneaky,10,yes,raven sneeze,20,yes,any +#spark,50,yes,any step,30,yes,any stomp,50,yes,any sunny,15,yes,any diff --git a/cvarinfo.achievements b/cvarinfo.achievements index beaf2a36c..845283c8e 100644 --- a/cvarinfo.achievements +++ b/cvarinfo.achievements @@ -19,13 +19,17 @@ nosave int swwm_achievement_cheat = 0; nosave int swwm_achievement_clonk = 0; nosave int swwm_achievement_conga = 0; nosave int swwm_achievement_crush = 0; +nosave int swwm_achievement_cum = 0; nosave int swwm_achievement_dab = 0; nosave int swwm_achievement_dakka = 0; nosave int swwm_achievement_deadeye = 0; +nosave int swwm_achievement_deva = 0; nosave int swwm_achievement_dime = 0; +nosave int swwm_achievement_divine = 0; nosave int swwm_achievement_dosh = 0; nosave int swwm_achievement_everything = 0; nosave int swwm_achievement_ezkill = 0; +nosave int swwm_achievement_fisto = 0; nosave int swwm_achievement_flight = 0; nosave int swwm_achievement_friend = 0; nosave int swwm_achievement_fuel = 0; @@ -38,6 +42,7 @@ nosave int swwm_achievement_golden = 0; nosave int swwm_achievement_grenade = 0; nosave int swwm_achievement_hnd = 0; nosave int swwm_achievement_hurry = 0; +nosave int swwm_achievement_ice = 0; nosave int swwm_achievement_jump = 0; nosave int swwm_achievement_lead = 0; nosave int swwm_achievement_lightning = 0; @@ -54,8 +59,10 @@ nosave int swwm_achievement_oopsie = 0; nosave int swwm_achievement_parry = 0; nosave int swwm_achievement_peace = 0; nosave int swwm_achievement_pene = 0; +nosave int swwm_achievement_plasma = 0; nosave int swwm_achievement_plush = 0; nosave int swwm_achievement_rage = 0; +nosave int swwm_achievement_rail = 0; nosave int swwm_achievement_reflect = 0; nosave int swwm_achievement_refresh = 0; nosave int swwm_achievement_roast = 0; @@ -67,6 +74,7 @@ nosave int swwm_achievement_shock = 0; nosave int swwm_achievement_slayer = 0; nosave int swwm_achievement_slemg = 0; nosave int swwm_achievement_sneeze = 0; +nosave int swwm_achievement_spark = 0; nosave int swwm_achievement_step = 0; nosave int swwm_achievement_stomp = 0; nosave int swwm_achievement_sunny = 0; @@ -93,11 +101,15 @@ nosave int swwm_progress_bustin = 0; nosave int swwm_progress_butts = 0; nosave int swwm_progress_candy = 0; nosave int swwm_progress_conga = 0; +nosave int swwm_progress_cum = 0; nosave int swwm_progress_dab = 0; nosave int swwm_progress_dakka = 0; nosave int swwm_progress_deadeye = 0; +nosave int swwm_progress_deva = 0; +nosave int swwm_progress_divine = 0; nosave int swwm_progress_dosh = 0; nosave int swwm_progress_ezkill = 0; +nosave int swwm_progress_fisto = 0; nosave int swwm_progress_flight = 0; nosave int swwm_progress_friend = 0; nosave float swwm_progress_fuel = 0; // this one needs to be float @@ -108,6 +120,7 @@ nosave int swwm_progress_gib = 0; nosave int swwm_progress_golden = 0; nosave int swwm_progress_grenade = 0; nosave int swwm_progress_hnd = 0; +nosave int swwm_progress_ice = 0; nosave int swwm_progress_jump = 0; nosave int swwm_progress_lead = 0; nosave int swwm_progress_love = 0; @@ -116,8 +129,10 @@ nosave int swwm_progress_moth = 0; nosave int swwm_progress_onehp = 0; nosave int swwm_progress_parry = 0; nosave int swwm_progress_pene = 0; +nosave int swwm_progress_plasma = 0; nosave int swwm_progress_plush = 0; nosave int swwm_progress_rage = 0; +nosave int swwm_progress_rail = 0; nosave int swwm_progress_reflect = 0; nosave int swwm_progress_refresh = 0; nosave int swwm_progress_roast = 0; @@ -126,6 +141,7 @@ nosave int swwm_progress_shock = 0; nosave int swwm_progress_slayer = 0; nosave int swwm_progress_slemg = 0; nosave int swwm_progress_sneeze = 0; +nosave int swwm_progress_spark = 0; nosave int swwm_progress_step = 0; nosave int swwm_progress_stomp = 0; nosave int swwm_progress_sunny = 0; diff --git a/cvarinfo.base b/cvarinfo.base index 6edda4f3d..1372be601 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -84,7 +84,6 @@ server bool swwm_shadows = true; // enables blob shadows under mod entities, li nosave bool swwm_precisecrosshair = true; // use mod's own, more precise crosshair nosave bool swwm_ldspoil = false; // [LD] always shows "Legendary" prefix on Legendary monsters, otherwise only when they've transformed nosave bool swwm_camhud = false; // keep full hud visible when operating cameras, otherwise only shows messages -nosave bool swwm_rageshader = false; // alternate ragekit shader for people with photosensitivity server bool swwm_uncapalert = false; // all noise alerts have infinite range nosave int swwm_damagetarget = 1; // conditional healthbar hiding (1 - hide until damage is first taken, 2 - hide if at full health) server int swwm_strictuntouchable = 0; // untouchable bonus ends... (1 - even if your armor absorbed all the damage, 2 - if you get hit by anything PERIOD) @@ -115,6 +114,8 @@ nosave int swwm_sewercount = 0; // I'm sorry Civvie server bool swwm_ondemandammo = false; // don't spawn ammo for unavailable weapons user float swwm_bumpstrength = 1.0; // intensity of fov bumping server bool swwm_nomagdrop = true; // does not drop spent magazines (the "environmentally conscious" option) +user bool swwm_autousebarrier = true; // auto-use elemental coating when standing on damaging floors +server int swwm_enforceautousebarrier = 0; // enforced auto-use for coating // minimap settings nosave bool swwm_mm_enable = true; // show a minimap below the score counter diff --git a/filter/game-heretic/cvarinfo.hereticachievements b/filter/game-heretic/cvarinfo.hereticachievements index 66db965bd..ae5922ac9 100644 --- a/filter/game-heretic/cvarinfo.hereticachievements +++ b/filter/game-heretic/cvarinfo.hereticachievements @@ -9,7 +9,9 @@ nosave int swwm_achievement_hereticboss2 = 0; nosave int swwm_achievement_hereticboss3 = 0; nosave int swwm_achievement_hereticboss4 = 0; nosave int swwm_achievement_hereticboss5 = 0; +nosave int swwm_achievement_sneaky = 0; nosave int swwm_achievement_tornado = 0; // cross-session progress cvars nosave int swwm_progress_allsecrets = 0; nosave int swwm_progress_gravity = 0; +nosave int swwm_progress_sneaky = 0; diff --git a/filter/game-hexen/cvarinfo.hexenachievements b/filter/game-hexen/cvarinfo.hexenachievements index f5d2a11f4..c6af258ce 100644 --- a/filter/game-hexen/cvarinfo.hexenachievements +++ b/filter/game-hexen/cvarinfo.hexenachievements @@ -15,6 +15,8 @@ nosave int swwm_achievement_hexenboss10 = 0; nosave int swwm_achievement_hexenboss11 = 0; nosave int swwm_achievement_kancho = 0; nosave int swwm_achievement_puzzle = 0; +nosave int swwm_achievement_sneaky = 0; // cross-session progress cvars nosave int swwm_progress_gravity = 0; nosave int swwm_progress_puzzle = 0; +nosave int swwm_progress_sneaky = 0; diff --git a/gldefs.pp b/gldefs.pp index e2bbaa15c..2f67773de 100644 --- a/gldefs.pp +++ b/gldefs.pp @@ -69,15 +69,6 @@ HardwareShader PostProcess scene Uniform float timer Uniform float xtrastr } -HardwareShader PostProcess scene -{ - Name "RagekitAltShader" - Shader "shaders/pp/RagescreenAlt.fp" 330 - Texture WarpTex "textures/ragewarp.png" - Texture NoiseTex "textures/graynoise.png" - Uniform float timer - Uniform float xtrastr -} HardwareShader PostProcess scene { diff --git a/graphics/HUD/Icons/A_MRAmmo.png b/graphics/HUD/Icons/A_MRAmmo.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_MRAmmo.png differ diff --git a/graphics/HUD/Icons/A_MRGrenade.png b/graphics/HUD/Icons/A_MRGrenade.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_MRGrenade.png differ diff --git a/graphics/HUD/Icons/A_MRRound.png b/graphics/HUD/Icons/A_MRRound.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_MRRound.png differ diff --git a/graphics/HUD/Icons/A_SparkBAmmo.png b/graphics/HUD/Icons/A_SparkBAmmo.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_SparkBAmmo.png differ diff --git a/graphics/HUD/Icons/A_SparkRAmmo.png b/graphics/HUD/Icons/A_SparkRAmmo.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_SparkRAmmo.png differ diff --git a/graphics/HUD/Icons/A_UltimateAmmo.png b/graphics/HUD/Icons/A_UltimateAmmo.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_UltimateAmmo.png differ diff --git a/graphics/HUD/Icons/A_UltimatePod.png b/graphics/HUD/Icons/A_UltimatePod.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/A_UltimatePod.png differ diff --git a/graphics/HUD/Icons/I_Devastation.png b/graphics/HUD/Icons/I_Devastation.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/I_Devastation.png differ diff --git a/graphics/HUD/Icons/I_Divine.png b/graphics/HUD/Icons/I_Divine.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/I_Divine.png differ diff --git a/graphics/HUD/Icons/I_Safety.png b/graphics/HUD/Icons/I_Safety.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/I_Safety.png differ diff --git a/graphics/HUD/Icons/W_FistGun.png b/graphics/HUD/Icons/W_FistGun.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/W_FistGun.png differ diff --git a/graphics/HUD/Icons/W_MortalRifle.png b/graphics/HUD/Icons/W_MortalRifle.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/W_MortalRifle.png differ diff --git a/graphics/HUD/Icons/W_NewSparkster.png b/graphics/HUD/Icons/W_NewSparkster.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/W_NewSparkster.png differ diff --git a/graphics/HUD/Icons/W_RafanKos.png b/graphics/HUD/Icons/W_RafanKos.png new file mode 100644 index 000000000..7b43c4c2f Binary files /dev/null and b/graphics/HUD/Icons/W_RafanKos.png differ diff --git a/language.def_base b/language.def_base index 12a1df490..d8ac0a477 100644 --- a/language.def_base +++ b/language.def_base @@ -38,6 +38,11 @@ T_EMPCARBINE = "Rail Carbine"; I_EMPCARBINE = "EMP Rail Carbine"; T_RAYKHOM = "Ray-Khom"; T_GRANDLANCE = "Grand Lance"; +T_FISTGUN = "Hand of Divine"; +T_NEWSPARKSTER = "Sparkster Rifle"; +I_NEWSPARKSTER = "Series x3 Sparkster Rifle"; +T_MORTALRIFLE = "Mortal Rifle"; +T_RAFANKOS = "Rafan-Kos"; T_REDSHELL = "Shell"; T_REDSHELLS = "Shells"; T_GREENSHELL = "Slug"; @@ -88,6 +93,13 @@ T_RAYAMMO = "Ray-Khom Magazine"; T_RAYBATTERY = "Ray-Khom Battery"; T_GRANDSPEAR = "Grand Lance Spear"; T_GRANDAMMO = "Grand Lance Magazine"; +T_SPARKBAMMO = "Kinylum Cell"; +T_SPARKRAMMO = "Nokron Cell"; +T_MRROUND = "Mortal Round"; +T_MRAMMO = "Mortal Magazine"; +T_MRGRENADE = "Mortal Grenade"; +T_ULTIMATEPOD = "Rafan-Kos Pod"; +T_ULTIMATEAMMO = "Rafan-Kos Magazine"; T_BLASTSUIT = "Blast Suit"; T_EMBIGGENER = "Hammerspace Embiggener"; T_BULKEMBIGGENER = "Bulk Hammerspace Embiggener"; @@ -115,6 +127,9 @@ T_SANDWICH = "Grilled Cheese Sandwich"; T_WARARMOR = "War Armor"; T_BARRIER = "Elemental Coating"; T_MYKRADVO = "Mykradvo Artifact"; +T_SAFETY = "Safety Tether"; +T_DEVASTATION = "Devastation Sigil"; +T_DIVINE = "Divine Sprite"; T_CHANCEBOX = "Lucky Chance Box"; T_FROGGY = "Froggy Chair"; T_PERFECTLYGENERIC = "Generic Cube"; @@ -488,6 +503,12 @@ O_RAYKHOM = "%o received an express delivery of deadly plasma from %k."; O_RAYKHOM2 = "%o witnessed %k's UNLIMITED POWER."; O_GRANDLANCE = "%o was torn asunder by %k's Grand Lance."; O_GRANDLANCE2 = "%k showed %o how efficient nuclear fusion is."; +O_FISTGUN = "%o ate %k's divine knuckle sandwich."; +O_FISTGUN2 = "%k delivered a divine bitchslap upon %o."; +O_NEWSPARKSTER = "%o witnessed the might of %k's plasma artillery."; +O_MORTALRIFLE = "%k killed %o very dead."; +O_MORTALRIFLEALT = "%o caught a very deadly grenade from %k."; +O_RAFANKOS = "%o stood no chance against %k's ultimate weapon."; O_POUND = "%o was very impressed by %k's landing."; O_DASH = "%o was discombobulated by a very fast moving %k."; O_BUTT = "%o received a lethal impact from %k's butt."; @@ -622,6 +643,8 @@ SWWM_RQUOTE = "\""; D_FROGGY1 = "\cjA small price to pay...\c-"; D_FROGGY2 = "\cj... for \cdFroggy Chair\cj.\c-"; D_BARRIER = "The Elemental Coating wore off."; +D_DEVASTATION = "The Sigil's power is no more."; +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-"; @@ -633,7 +656,7 @@ SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" "Over 50k 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, 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, Sanyanya, 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" +"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_UNIT_METER = "m"; @@ -655,6 +678,10 @@ SWWM_GAMMAMODE1 = "Semi-Auto"; SWWM_GAMMAMODE2 = "3-Round Burst"; SWWM_GAMMAMODE3 = "Full Auto"; SWWM_GAMMAMODE4 = "FULLER AUTO"; +SWWM_MRMODE1 = "Precision Shot"; +SWWM_MRMODE2 = "Cluster Shot"; +SWWM_MRMODE3 = "Stream Shot"; +SWWM_MRMODE4 = "Overpressure Shot"; SWWM_DMRANK = "Rank:"; SWWM_DMSPREAD = "Spread:"; SWWM_PLACE1 = "1st"; @@ -712,7 +739,7 @@ SWWM_OVERKILL = "Overkill"; SWWM_MULTIKILL = "Multi Kill"; SWWM_SPREEKILL = "Untouchable"; SWWM_BOSSKILL = "Boss Kill"; -SWWM_EXIT = "To "; // can't be used until we can get the names of remote levels +SWWM_EXIT = "To "; SWWM_NEXIT = "Exit"; SWWM_SEXIT = "Secret Exit"; SWWM_EEXIT = "The End"; @@ -743,7 +770,7 @@ SWWM_NEWMISSION = "Mission briefing has been updated."; SWWM_CHEEVO = "\cxAchievement unlocked: \cf%s\c-"; SWWM_CHEEVOREM = "\cx%s \cxunlocked an achievement: \cf%s\c-"; // intermission tips -SWWM_NINTERTIP = "130"; +SWWM_NINTERTIP = "140"; SWWM_INTERTIP = "Tip #%d:"; SWWM_INTERTIP1 = "The Demolitionist is immune to drowning, poison and even fall damage (excluding instant kill pits)."; SWWM_INTERTIP2 = "The Explodium Gun's altfire has an explosive yield proportional to the bullets left in the mag."; @@ -875,6 +902,16 @@ SWWM_INTERTIP127 = "Saya's posture has baffled countless specialists, who wonder SWWM_INTERTIP128 = "Saya's general way of befriending aliens is to offer them pizza and challenge them to beat Dark Souls. It usually works."; SWWM_INTERTIP129 = "Bunnyhopping can let you reach ludicrous speeds (thought not enough to go to plaid, unfortunately)."; SWWM_INTERTIP130 = "The Ragekit's speed boost may make you violently bump against everything as you run around. This might become troublesome in enclosed spaces."; +SWWM_INTERTIP131 = "In Heretic and Hexen, an item known as the Safety Tether may appear. If by any chance you get stuck in some seemingly inescapable trap, this will be your trump card."; +SWWM_INTERTIP132 = "The Devastation Sigil is rather unstable, but provides a much higher boost of damage than the Ragekit, for ALL damage you may deal, including to yourself. Yeah, quite a dangerous little toy, that one."; +SWWM_INTERTIP133 = "The Divine Sprite can boost your health to absurd levels, but its effects fade quickly after a while. It is the most potent healing item you have in hand, but do keep in mind it has to be activated manually. Unlike most others, it won't come to save your ass by itself."; +SWWM_INTERTIP134 = "The Hand of Divine is yet another weapon that can benefit from the effects of the Ragekit, turning what's already a lethal punch into something truly god-like."; +SWWM_INTERTIP135 = "Holding down the triggers with the Sparkster Rifle will gradually increase firing potency upon release. Fortunately, there is no potential here for the weapon to blow up if you keep them held long enough, only badly designed human weaponry could be so haphazard."; +SWWM_INTERTIP136 = "The Sparkster Rifle can fire both ammo types simultaneously, blending them together into a deadly combo projectile."; +SWWM_INTERTIP137 = "The Mortal Rifle (\"Mister\" for short) was devised as a potential \"standard\" battle rifle for the X'Animen Coalition that \"even the Xekkians would consider powerful\". It seems to have succeeded in that aspect, considering how truly mortal it is, although it is not widely adopted... Yet."; +SWWM_INTERTIP138 = "The Rafan-Kos is truly an Ultimate Weapon, as its name implies."; +SWWM_INTERTIP139 = "It's said that the Hand of Divine bears only a minuscule fraction of its original creator's power. Guy must pack one hell of a wallop, then."; +SWWM_INTERTIP140 = "The Demolitionist's chassis carries a faint lime scent."; // intermission fanart SWWM_FANART = "Art: "; SWWM_NFANART = "12"; @@ -939,16 +976,22 @@ SWWM_ACHIEVEMENT_CRUSH_TAG = "Under Pressure"; SWWM_ACHIEVEMENT_CRUSH_TXT = "Break a crusher"; SWWM_ACHIEVEMENT_CYBULLY_TAG = "Cyberbullying"; SWWM_ACHIEVEMENT_CYBULLY_TXT = "Kill a Cyberdemon with its own rocket"; +SWWM_ACHIEVEMENT_CUM_TAG = "Blasting Ropes"; +SWWM_ACHIEVEMENT_CUM_TXT = "Melt a grand total of %d enemies with the Rafan-Kos"; SWWM_ACHIEVEMENT_DAB_TAG = "HAHA DAB"; SWWM_ACHIEVEMENT_DAB_TXT = "Gib %d enemies with the Itamex Hammer"; SWWM_ACHIEVEMENT_DAKKA_TAG = "Dakka"; SWWM_ACHIEVEMENT_DAKKA_TXT = "Fire the Sheen HMG for one minute straight"; SWWM_ACHIEVEMENT_DEADEYE_TAG = "Deadeye"; SWWM_ACHIEVEMENT_DEADEYE_TXT = "Land %d consecutive Explodium Gun shots without missing"; +SWWM_ACHIEVEMENT_DEVA_TAG = "Deva Station"; +SWWM_ACHIEVEMENT_DEVA_TXT = "Use %d Devastation Sigils"; SWWM_ACHIEVEMENT_DIME_TAG = "Icarus Dimes"; SWWM_ACHIEVEMENT_DIME_TXT = "Blow yourself up with your own explosives"; +SWWM_ACHIEVEMENT_DIVINE_TAG = "Divine Delight"; +SWWM_ACHIEVEMENT_DIVINE_TXT = "Use %d Divine Sprites"; SWWM_ACHIEVEMENT_DOODLE_TAG = "Graffiti Master"; -SWWM_ACHIEVEMENT_DOODLE_TAG = "Doodle mustaches on %d demon faces"; +SWWM_ACHIEVEMENT_DOODLE_TXT = "Doodle mustaches on %d demon faces"; SWWM_ACHIEVEMENT_DOOMBOSS1_TAG = "Dynamic Duo"; SWWM_ACHIEVEMENT_DOOMBOSS1_TXT = "Defeat the Bruiser Brothers"; SWWM_ACHIEVEMENT_DOOMBOSS2_TAG = "Huge Guts"; @@ -975,6 +1018,8 @@ SWWM_ACHIEVEMENT_EVERYTHING_TAG = "The Demolitionist"; SWWM_ACHIEVEMENT_EVERYTHING_TXT = "Unlock all achievements"; SWWM_ACHIEVEMENT_EZKILL_TAG = "Misa's Pride"; SWWM_ACHIEVEMENT_EZKILL_TXT = "Kill %d enemies with a single Ynykron Artifact shot (excluding altfire)"; +SWWM_ACHIEVEMENT_FISTO_TAG = "Facepunching Extraordinaire"; +SWWM_ACHIEVEMENT_FISTO_TXT = "Kill %d enemies with the Hand of Divine"; SWWM_ACHIEVEMENT_FLIGHT_TAG = "Blasting Off Again"; SWWM_ACHIEVEMENT_FLIGHT_TXT = "Send an enemy flying over %d map units away"; SWWM_ACHIEVEMENT_FRIEND_TAG = "Do You Like Caco?"; @@ -1037,6 +1082,8 @@ SWWM_ACHIEVEMENT_HND_TAG = "High Noon"; SWWM_ACHIEVEMENT_HND_TXT = "Land %d killing shots in a single Puntzer Beta reload"; SWWM_ACHIEVEMENT_HURRY_TAG = "In a Hurry"; SWWM_ACHIEVEMENT_HURRY_TXT = "Beat a map with 0% kills, items and secrets"; +SWWM_ACHIEVEMENT_ICE_TAG = "Ice Ice Baby"; +SWWM_ACHIEVEMENT_ICE_TXT = "Impale %d enemies with the Blackfire Igniter secondary"; SWWM_ACHIEVEMENT_JUMP_TAG = "Verticality"; SWWM_ACHIEVEMENT_JUMP_TXT = "Walljump %d times"; SWWM_ACHIEVEMENT_KANCHO_TAG = "Extreme Kancho"; @@ -1077,6 +1124,8 @@ SWWM_ACHIEVEMENT_PEACE_TAG = "Pacifist"; SWWM_ACHIEVEMENT_PEACE_TXT = "Finish a map without killing anything"; SWWM_ACHIEVEMENT_PENE_TAG = "Penetrator"; SWWM_ACHIEVEMENT_PENE_TXT = "Strike through %d enemies in a row with a single Grand Lance secondary"; +SWWM_ACHIEVEMENT_PLASMA_TAG = "Blastin' Plasma"; +SWWM_ACHIEVEMENT_PLASMA_TXT = "Kill an enemy at full health with a Plasma Blaster charged shot %d times"; SWWM_ACHIEVEMENT_PLUSH_TAG = "Lovestruck"; SWWM_ACHIEVEMENT_PLUSH_TXT = "Play with the Saya plush %d times in the same session"; $ifgame(hexen) SWWM_ACHIEVEMENT_PLUSH_TXT = "Play with the Saya or Kirin plushies %d times in the same session"; @@ -1084,6 +1133,8 @@ SWWM_ACHIEVEMENT_PUZZLE_TAG = "Even Kirin is Upset"; SWWM_ACHIEVEMENT_PUZZLE_TXT = "Solve %d \"puzzles\""; SWWM_ACHIEVEMENT_RAGE_TAG = "No Talk me Angy"; SWWM_ACHIEVEMENT_RAGE_TXT = "Use %d Ragekits"; +SWWM_ACHIEVEMENT_RAIL_TAG = "Railed Hard"; +SWWM_ACHIEVEMENT_RAIL_TXT = "Shoot through %d enemies with a single Mortal Rifle overpressure shot"; SWWM_ACHIEVEMENT_REFLECT_TAG = "Return to Sender"; SWWM_ACHIEVEMENT_REFLECT_TXT = "Kill %d enemies with parried projectiles"; SWWM_ACHIEVEMENT_REFRESH_TAG = "Stay Fresh"; @@ -1104,8 +1155,12 @@ SWWM_ACHIEVEMENT_SLAYER_TAG = "I am Become Death"; SWWM_ACHIEVEMENT_SLAYER_TXT = "Kill %d enemies with a single Slayer Warhead"; SWWM_ACHIEVEMENT_SLEMG_TAG = "The Sledge Method"; SWWM_ACHIEVEMENT_SLEMG_TXT = "Activate %d switches by punching them"; +SWWM_ACHIEVEMENT_SNEAKY_TAG = "Sneaky Retreat"; +SWWM_ACHIEVEMENT_SNEAKY_TXT = "Use %d Safety Tethers"; SWWM_ACHIEVEMENT_SNEEZE_TAG = "Humiliator"; SWWM_ACHIEVEMENT_SNEEZE_TXT = "Kill %d enemies with the Deep Impact primary fire"; +SWWM_ACHIEVEMENT_SPARK_TAG = "A Fine Sparking"; +SWWM_ACHIEVEMENT_SPARK_TXT = "Kill %d enemies at once with a Sparkster Rifle combo shot"; SWWM_ACHIEVEMENT_STEP_TAG = "Steppy"; SWWM_ACHIEVEMENT_STEP_TXT = "Stand on a single enemy's head for %d seconds"; SWWM_ACHIEVEMENT_STOMP_TAG = "Italian Plumber Complex"; @@ -1123,7 +1178,7 @@ SWWM_ACHIEVEMENT_THRUWALL_TXT = "Kill %d enemies through walls with the Silver B SWWM_ACHIEVEMENT_TORNADO_TAG = "What the Fuck?"; SWWM_ACHIEVEMENT_TORNADO_TXT = "Punch a tornado???"; SWWM_ACHIEVEMENT_TRASH_TAG = "Taking out the Trash"; -SWWM_ACHIEVEMENT_TRASH_TAG = "Kill all nazis in the Doom 2 secret maps"; +SWWM_ACHIEVEMENT_TRASH_TXT = "Kill all nazis in the Doom 2 secret maps"; SWWM_ACHIEVEMENT_TRAVEL_TAG = "The Longest Journey"; SWWM_ACHIEVEMENT_TRAVEL_TXT = "Walk a total of %d kilometers"; SWWM_ACHIEVEMENT_UNTOUCHABLE_TAG = "Untouchable"; diff --git a/language.def_lore b/language.def_lore index 5e797b48c..cffec7eeb 100644 --- a/language.def_lore +++ b/language.def_lore @@ -230,6 +230,25 @@ SWWM_LORETXT_ANARUKON2 = "\cfHuhu... seriously. Still can't believe that stuff actually happened. I wished and wished to get my own Anarukon cutie, just like Taro nii-san had Ellen and Yu-chan had Ashley, and bam! There it was. And of course I have to thank Ashley-san for the fucking ultimate blessing, too. Like, as soon as I tell her about the Akari Project she jumps and goes all \"I know of a place you can visit\", and yeah... that's how I met the cute boy. I already told you all this, but hell, I need to write it down here too, just as a reminder. Ain't he the cutest? I remember how much you and Meido were blushing when you first met him. That was so adorable, the sweetest thing, even more than those \"milk breads\" they had at our wedding banquet (good shit btw). And now the four of us are married to him, and life is good.\c-\n" "\n" "\cfOh yeah, also meeting that girl, Andreki, that was the biggest embarrassment in my whole fucking life, I swear to fuck. Like, picture this, I'm told to wait up for someone who wants to have a talk with me in private, and... this... fucking... sassy lost child just approaches me, tiny girl, acting all high and mighty, saying stuff like \"I am someone very important\" and \"you should know who I am, Lady Saya\" and I'm like \"sorry kid, I'm waiting for someone here, can't play with you\", and then she fucking EXPLODES at me going all \"HOW DARE YOU\" and \"I AM MUCH OLDER THAN YOU\" and shit, and yeah... I went into full \"thousand apologies\" mode, just slamming onto the floor and everything. Kirin had to run up to us to explain things and get her to calm down because I was just... unable to do anything. Holy fuck, that... At least we got to be friends later, but... at the moment I felt like I had turned myself into the mortal enemy of a whole fucking kingdom.\c-"; +SWWM_LORETAG_ANGERYSIGIL = "Devastation Sigil"; +SWWM_LORETAB_ANGERYSIGIL = "Item"; +SWWM_LOREREL_ANGERYSIGIL = "Gods;Saya"; +SWWM_LORETXT_ANGERYSIGIL = +"\cxDesignation:\c-\n" +"\cf Devastation Sigil\c-\n" +"\cxManufacturer:\c-\n" +"\cf Torouven\c-\n" +"\cxClassification:\c-\n" +"\cf Divine Artifact\c-\n" +"\n" +"The \cfDevastation Sigil\c- is a relic constructed and blessed by the god of hate themself. Those who call upon its blessing are charged with unmatched destructive power, allowing not just their own body but any weaponry they use to achieve absolutely devastating strength.\n" +"\n" +"This blessing only works for a limited time, but nevertheless it's quite popular among warriors, although considered \"unfair\" to employ in some situations. Due to its nature, this artifact has no effect on deities, only mundane beings.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfThis one was Maruku's idea. They're hard to come by, so don't squander them, okay? Also, be careful or you might absolutely obliterate yourself with this.\c-\n" +"\n" +"\cfI think I could totally beat you in a fight if I used this. I mean, not that I'd want to hurt you but... Just hypothetically speaking, you know.\c-"; SWWM_LORETAG_ASHLEY = "Knox, Ashley"; SWWM_LORETAB_ASHLEY = "People"; SWWM_LOREREL_ASHLEY = "Yui;Saya;Sankaideriha;Gods"; @@ -903,6 +922,27 @@ SWWM_LORETXT_DISPLAY = "\cfY'know, that thing just makes you so cute and huggable... It's, I mean... TOO DAMN CUTE!!!\c-\n" "\n" "\cfOh yeah by the way, speaking of hugs, big sorry for that one time, when Ibuki crushed you with one of those bear hugs of her. I seriously thought your chassis could handle it, but holy fuck she's strong enough to bend fucking Almasteel with her bare hands. At least now she knows to hug you like she would any normal person (lucky you, you won't end up with a broken back afterwards).\c-"; +SWWM_LORETAG_DIVINESPRITE = "Divine Sprite"; +SWWM_LORETAB_DIVINESPRITE = "Item"; +SWWM_LOREREL_DIVINESPRITE = "Gods;Saya"; +SWWM_LORETXT_DIVINESPRITE = +"\cxDesignation:\c-\n" +"\cf Divine Sprite\c-\n" +"\cxManufacturer:\c-\n" +"\cf Lifegiver Klokonie\c-\n" +"\cxClassification:\c-\n" +"\cf Divine Artifact\c-\n" +"\n" +"The \cfDivine Sprite\c- is a crystallization of life-giving power produced by the demigod \cfKlokonie\c-, who is said to be able to revive the long dead, and even build them new bodies if lost. They have done this many times, sometimes going as far as to create new life from pure nothingness. Among other things, their teachings have assisted the ancient \cfIzuna\c- race in the creation of \cfChimeras\c-.\n" +"\n" +"This shining gem invigorates even the puniest of mundane creatures when crushed firmly in their hands, both soul and body overflowing with vitality. Its effects, however, are not permanent, as neither body nor soul are capable of truly containing so much life force.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfThis thing reminds me of the \"lifegems\" from... That game (we don't talk about that one). The big difference is that they don't suck and aren't redundant nonsense.\c-\n" +"\n" +"\cfAs you may expect, this is also another thing that my god buddies have recommended. Normally these are only provided to heroes by special request... And you are our hero, Demo-chan, so this is for you.\c-\n" +"\n" +"\cfPS: Don't try to eat it.\c-"; SWWM_LORETAG_DOOMGUY = "Doom Marine"; SWWM_LORETAB_DOOMGUY = "People"; SWWM_LOREREL_DOOMGUY = "UAC;Hell;Saya;AkariLabs;Demolitionist"; @@ -1165,6 +1205,30 @@ SWWM_LORETXT_FABRICATOR = "\cfOh, you've got to be fucking kidding me. Now nerdboy's just straight up giving us bullshit gacha nonsense, with tiers and all.\c-\n" "\n" "\cfI swear, he's doing this shit on purpose to piss me off or something.\c-"; +SWWM_LORETAG_FISTGUN = "Hand of Divine"; +SWWM_LORETAB_FISTGUN = "Item"; +SWWM_LOREREL_FISTGUN = "Unissix;Gods;Zanaveth3;Saya"; +SWWM_LORETXT_FISTGUN = +"\cxDesignation:\c-\n" +"\cf Hand of Divine\c-\n" +"\cxManufacturer:\c-\n" +"\cf Korovithuhcp (original)\c-\n" +"\cf Unissix Crafts (replica)\c-\n" +"\cxDesignation:\c-\n" +"\cf Magic Gauntlet\c-\n" +"\n" +"The \cfHand of Divine\c- was a weapon that the god \cfKorovithuhcp\c- constructed countless millenia ago, and had been passed down among many heroes of legend. Eventually it was lost, and the god had no interest in building a new one. This, obviously, did not stop \cfMisa Unissix\c- from attempting to do exactly just that. Following historical records of its use, she built her own version through a blend of arcane magic and modern technology. She gifted one to her daughter, \cfZanaveth Nekuraku III\c-, and another to the \cfDemolitionist\c-.\n" +"\n" +"\cfPrimary Fire:\c- Charges up a punch, and then releases it. The gauntlet will fling itself forward and then return to you.\n" +"\n" +"\cfSecondary Fire:\c- Charges up a wide arc slap. On release this will very loudly and violently whack all targets in front of you.\n" +"\n" +"\cfTechniques:\c- Due to its nature, the Hand of Divine is susceptible to the effects of a \cfRagekit\c-, increasing its strength and range.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfMan that sure was a special delivery from Zana-chan. And when we showed that it was good, and fun, Misa-Misa got all excited and started mass-producing them. She's just too adorable, I swear.\c-\n" +"\n" +"\cfAnyway, those fiends are gonna get knocked the fuck out with this thing. Can't wait to see it in action on real targets. Especially after... that incident with the punching bag.\c-"; SWWM_LORETAG_FORX = "Forx Aeronautics"; SWWM_LORETAB_FORX = "People"; SWWM_LOREREL_FORX = "Propulsor;Saya;UAC"; @@ -2313,6 +2377,36 @@ SWWM_LORETXT_MILKBREADS = "\cfYou know, learning that the milk comes from THOSE THINGS has absolutely not changed at all my opinion. This stuff is heavenly, it's the most delicious thing ever created, it's so sweet I'd just die for them. I mean, it kinda happened once when I overdosed on them (good god that was embarrassing). Yeah, no wonder I fucking died when I had more sugar than blood in my body. I remember Kirin-kun said he actually heard my heart explode, but I bet he was just being dramatic. There's no way that's what happened.\c-\n" "\n" "\cfOh yeah, and there's a myth going around that if you eat enough of these your boobs will get huge. I totally don't believe that's possible, of course not. What kind of fool would purposefully overdose on them to grow a pair of real big honkers?\c-"; +SWWM_LORETAG_MISTERGUN = "Mortal Rifle"; +SWWM_LORETAB_MISTERGUN = "Item"; +SWWM_LOREREL_MISTERGUN = "NosKora;Saya"; +SWWM_LORETXT_MISTERGUN = +"\cxDesignation:\c-\n" +"\cf Mortal Rifle\c-\n" +"\cf \"Mister\" (common nickname)\c-\n" +"\cxManufacturer:\c-\n" +"\cf Plutoni Incorporated\c-\n" +"\cxDesignation:\c-\n" +"\cf Multi-Purpose Battle Rifle\c-\n" +"\n" +"The \cfMortal Rifle\c- was devised in the early 2100s by students of the \cfUniversity of Nos-Kora\c- who thought there were simply too many different guns by different armies of different species, so... They would make something that'd be truly \"universal\" for everyone.\n" +"\n" +"It is chambered in a peculiar 4.44x44.4mm caliber, sporting a barrel length of 44.4cm, and employs odd square shaped ammunition, the nature of which, along with its firing mechanisms, are an enigma. These compact, high-explosive telescoped rounds pack more power in them than the ammunition of most human-made battle rifles of higher calibers. In addition, it also employs 44.4mm grenades from an under-barrel lobber. These grenades burst into lesser target-seeking bombs on impact, making them ideal for scattered targets.\n" +"\n" +"\cfPrimary Fire:\c- Steady shooting of the primary ammunition.\n" +"\n" +"\cfSecondary Fire:\c- Launches an under-barrel grenade. If empty, loads a new one.\n" +"\n" +"\cfTertiary Fire:\c- Alternates between operation modes for the rifle. Switching between \"precision shot\" (standard semi-auto), \"cluster shot\" (somehow behaving like a shotgun with the same ammunition), \"stream shot\" (behaves like full auto but appears to shoot four bullets per bullet?), and \"overpressure shot\" (somehow appearing to \"charge\" the ammunition before firing it out with higher potency and velocity).\n" +"\n" +"\cfReload:\c- Does what you'd expect.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfAt this point I can't even be bothered to be confused by anything that comes out of there, seriously.\c-\n" +"\n" +"\cfThis thing is an assault rifle, a shotgun, a machine gun and an anti-tank rifle all in one, with the same exact ammo. And it makes no sense, sure, but it works, however it does.\c-\n" +"\n" +"\cfDon't get too comfortable with it, by the way. I bet once it starts to grow on you you won't be able to go back to any other weapon.\c-"; SWWM_LORETAG_MIXOM = "Mixom"; SWWM_LORETAB_MIXOM = "People"; SWWM_LOREREL_MIXOM = "UAC;Symnatek;Saya"; @@ -2336,6 +2430,36 @@ SWWM_LORETXT_MIXOM = "\cfMoney and power, absolute dominance, bullshit capitalism. Disgusting... I hope they all explode.\c-\n" "\n" "\cfYou can't take two steps without coming across something made by them, they are FUCKING EVERYWHERE. Like, for example, all the screws in your body? Mixom branded. The liquid cooling? Also Mixom... I could keep going, but it makes me feel gross saying their name so often.\c-"; +SWWM_LORETAG_MODERNSPARKSTER = "Sparkster Rifle"; +SWWM_LORETAB_MODERNSPARKSTER = "Item"; +SWWM_LOREREL_MODERNSPARKSTER = "EngineTech;Nekuratek;DecadeMech;Saya;WhiteScar"; +SWWM_LORETXT_MODERNSPARKSTER = +"\cxDesignation:\c-\n" +"\cf Class x3 Sparkster Rifle\c-\n" +"\cxManufacturer:\c-\n" +"\cf Tach-Engine Technology Instutute\c-\n" +"\cf Nekuraku Tekkanosei\c-\n" +"\cxClassification:\c-\n" +"\cf Plasma Artillery Launcher\c-\n" +"\n" +"The \cfSparkster\c- began as an attempt by \cfTach-Engine Technologies\c- to replicate the energy weapons of the defunct \cfDecade Mechanics\c-. The first two prototypes were a failure, as it was seen that there was no way to create anything even remotely resembling Biosparks, a semi-sentient form of energy ammunition.\n" +"\n" +"Then, a breakthrough came: Why try to copy something that can't ever be truly understood? Why not keep the same internal principles of the weapon but employ different, easily obtainable ammunition? And thus, the \"modern\" Sparkster lineup was born. Employing high-density \cfNokron\c- and \cfKinylum\c- plasma charges, the x3 series can reach the same destructive potential as heavy artillery, with lesser weight, size, and hassle of operation.\n" +"\n" +"\cfPrimary Fire:\c- Hold to charge a glob of Kinylum plasma, release to let it out into the world. The destructive potential is relatively small, but has a notable lingering burn both across the path it takes, and in a dense cloud where it impacted.\n" +"\n" +"\cfSecondary Fire:\c- Hold to charge a glob of Nokron plasma, release to let it out into the world. While more immediately destructive than the primary ammunition, this one is less stable, and tends to come out as a searing blast, rather than a projectile.\n" +"\n" +"\cfPrimary Reload:\c- Load in a Kinylum cell. Up to 3 can be held in reserve.\n" +"\n" +"\cfSecondary Reload:\c- Load in a Nokron cell. Same reserve capacity.\n" +"\n" +"\cfTechniques:\c- Projectile charge can be held indefinitely, as the weapon will vent regularly to stabilize the weapon's peak ignition potency. This could allow one to simply charge from cover and pop out to release the shot when needed. Additionally, the possibility to press both triggers at once is also documented, which allows for a potent release of Nokorokinylum plasma, comparable to a miniature nuke in destructive potential. It is not recommended to perform a combined attack unless the target is far away enough so as to not endanger the user.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfYooooooooo this is the shit right here. It's kind of a pre-war relic, but it works so well that the x4 and x5 models are apparently just minor revisions of it, from what the old man told me. We can't have the new ones due to some deep White Scar Treaty fuckery, sadly, so this one will do.\c-\n" +"\n" +"\cfThis is seriously so cool, tho. It's basically a plasma rocket launcher and shotgun all in one. Also don't get me started on the design, it's so futuristic and sleek... That's kinda the thing with Nekuratek, really. God it's making me nostalgic for the olden days when I actually got to visit Nahkami and saw their factories and stuff and everything was so bright and clean... Oh man.\c-"; SWWM_LORETAG_MOTHLAMP = "Lämp"; SWWM_LORETAB_MOTHLAMP = "Item"; SWWM_LOREREL_MOTHLAMP = "Sankaideriha;Saya"; @@ -2972,6 +3096,33 @@ SWWM_LORETXT_QUADRAVOL = "\cfAnd of course it's huge af too, even if the grip is supposedly adapted. It honestly weirds me out how you can do that thing of... making your hands bigger, but at least it lets you use stuff like that easily.\c-\n" "\n" "\cfAnyway, motherfucking fireballs, that work underwater??? Gonna need to see the science behind this because that makes no fucking sense and yet... it's there.\c-"; +SWWM_LORETAG_RAFANKOS = "Rafan-Kos"; +SWWM_LORETAB_RAFANKOS = "Item"; +SWWM_LOREREL_RAFANKOS = "Nekuratek;Saya"; +SWWM_LORETXT_RAFANKOS = +"\cxDesignation:\c-\n" +"\cf Rafan-Kos (\"Ultimate Weapon\")\c-\n" +"\cxManufacturer:\c-\n" +"\cf Nekuraku Tekkanosei\c-\n" +"\cxDesignation:\c-\n" +"\cf Particle Beam Cannon\c-\n" +"\n" +"Devised by a reportedly \"insane\" and \"derranged\" engineer at \cfNekuratek\c-'s Advanced Arms Division, this weapon's development was cut short of its initial ambitious plans. Citing that this engineer whose name won't be revealed \"played too many videogames\", he was stopped before he could add a whopping 15 different modes of operation to the weapon, rendering it extremely convoluted, costly and \"completely ridiculous\".\n" +"\n" +"The \cfRafan-Kos\c- project (\"Ultimate Weapon\" in Nukuribaku) would only be partially completed once chief engineer \cfZanaveth Nekuraku I\c- personally stepped in to ask for this \"inanity\" to cease. The end result seemed satisfactory enough despite complaints from its creator, and would be eventually commercialized.\n" +"\n" +"The weapon employs \cfKabbadon\c- as fuel, a common byproduct of \cfNokorokinylum\c- fusion, thus making it fairly easy to produce. However, the density and degree of purity required in the creation of a single fuel pod make its price escalate dramatically.\n" +"\n" +"\cfPrimary Fire:\c- Release a radiant blast of energy that punches its way through anything, sending sparks flying in all directions along its path and burning other nearby targets. The blast burns for a total of five seconds before rapidly dissipating.\n" +"\n" +"\cfSecondary Fire:\c- Releases several scattered blasts in a wide cone, with similar destructive potential, but burning quicker, stronger, and dissipating much rapidly.\n" +"\n" +"\cfReload:\c- Loads in a new magazine, each holding four pods.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cf\"Ultimate Weapon\"? Talk about pretentious... But you know, something about this was making my brains itch, and then it clicked. This is basically like that one spellcard, the Master Spark. Hell, it almost even sounds and looks the same...\c-\n" +"\n" +"\cfThat's fucking cool, actually. I like it, so I put it in the same slot as the other two massive fuckoff guns.\c-"; SWWM_LORETAG_RAGEKIT = "Ragekit"; SWWM_LORETAB_RAGEKIT = "Item"; SWWM_LOREREL_RAGEKIT = "AkariLabs;Demolitionist;Saya;DecadeMech"; @@ -3098,6 +3249,47 @@ SWWM_LORETXT_RYUJI = "\cfUgh, thinking back to those days, it really is no good, damn it. We all knew, that he wasn't immortal like us and we'd lose him one day, but we really weren't ready, especially mom. It was really, really painful...\c-\n" "\n" "\cfI'm not crying, I swear.\c-"; +SWWM_LORETAG_SAFETYTETHER = "Safety Tether"; +SWWM_LORETAB_SAFETYTETHER = "Item"; +SWWM_LOREREL_SAFETYTETHER = "AkariLabs;Cyrus;LuckyCollar;Parthoris;Sidhe;Cronos;Saya;UAC;Unissix"; +SWWM_LORETXT_SAFETYTETHER = +"\cxDesignation:\c-\n" +"\cf Safety Tether\c-\n" +"\cxManufacturer:\c-\n" +"\cf Akari Labs\c-\n" +"\cf Cyrus Enterprises\c-\n" +"\cxClassification:\c-\n" +"\cf Short-distance Emergency Teleporter\c-\n" +"\n" +"What you see here is an extension of the magic employed in your \cfLucky Collar\c-, repurposed and adjusted to allow you to transport yourself on demand back to the entrance of the current area you're in. This is quite useful to have in case you find yourself trapped in some inescapable room, and have no other resources to break out. The world of \cfParthoris\c- is a treacherous one, as the \cfSidhe\c- would inform us, and so these are a must, and may be found in areas where \"trap rooms\" have been reported.\n" +"\n" +"Simply twist both ends in opposing directions, and the device will prime. If the user is already standing close enough to the destination, the warp will be cancelled in order to prevent an accidental misuse, otherwise, the lights will turn blue and the warp will be performed.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfAh, the perfect way to escape from a closed room...\c-\n" +"\n" +"\cfYeah, this is actually based on your collar, works similarly too, except I'm not the one who activates whenever you're in mortal danger, and its effects are more \"dramatic\" (you'll see). It's simple magic stuff, really. Those idiots at the UAC would shit themselves if they knew we've had the magic to do long distance teleports, even across universes, long before their experiments existed.\c-\n" +"\n" +"\cfI hope Misa doesn't mind that I pretty much repurposed one of her grenade designs for this.\c-"; +SWWM_LORETXT_SAFETYTETHER2 = +"\cxDesignation:\c-\n" +"\cf Safety Tether\c-\n" +"\cxManufacturer:\c-\n" +"\cf Akari Labs\c-\n" +"\cf Cyrus Enterprises\c-\n" +"\cxClassification:\c-\n" +"\cf Short-distance Emergency Teleporter\c-\n" +"\n" +"What you see here is an extension of the magic employed in your \cfLucky Collar\c-, repurposed and adjusted to allow you to transport yourself on demand back to the entrance of the current area you're in. This is quite useful to have in case you find yourself trapped in some inescapable room, and have no other resources to break out. The world of \cfParthoris\c- is a treacherous one, as the \cfSidhe\c- would inform us, and so these are a must, and may be found in areas where \"trap rooms\" have been reported. It is assumed that \cfCronos\c- may feature the same sorts of traps, so be careful.\n" +"\n" +"Simply twist both ends in opposing directions, and the device will prime. If the user is already standing close enough to the destination, the warp will be cancelled in order to prevent an accidental misuse, otherwise, the lights will turn blue and the warp will be performed.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfAh, the perfect way to escape from a closed room...\c-\n" +"\n" +"\cfYeah, this is actually based on your collar, works similarly too, except I'm not the one who activates whenever you're in mortal danger, and its effects are more \"dramatic\" (you'll see). It's simple magic stuff, really. Those idiots at the UAC would shit themselves if they knew we've had the magic to do long distance teleports, even across universes, long before their experiments existed.\c-\n" +"\n" +"\cfI hope Misa doesn't mind that I pretty much repurposed one of her grenade designs for this.\c-"; SWWM_LORETAG_SANKAIDERIHA = "Sankaideriha"; SWWM_LORETAB_SANKAIDERIHA = "Lore"; SWWM_LOREREL_SANKAIDERIHA = "Nukuri;Saya;Ashley;Gods;Kirin"; diff --git a/language.def_menu b/language.def_menu index c0eeb1f6a..1c747ff7a 100644 --- a/language.def_menu +++ b/language.def_menu @@ -125,7 +125,6 @@ SWWM_PRECISECROSSHAIR = "Precise Crosshair"; SWWM_MCTITLE = "Mod Compatibility Options"; SWWM_LDSPOIL = "Always Show Legendaries"; SWWM_ETITLE = "Effect Options"; -SWWM_RAGESHADER = "Alternate Ragekit Shader"; SWWM_CAMHUD = "Full HUD In Cameras"; SWWM_UNCAPALERT = "Uncap Alert Range"; SWWM_COLLECTANIMKEY = "Key Animations"; @@ -198,6 +197,8 @@ SWWM_BUMP = "FOV Bump Strength"; SWWM_ENGINE = "Engine"; SWWM_ITEMGLOWS = "Distant Items Glow"; SWWM_NOMAGDROP = "Drop Spent Mags"; +SWWM_BARRIERUSE = "Automatically Use Coating"; +SWWM_SVBARRIERUSE = "Enforce Coating Auto-Use"; SWWM_MMTITLE = "Minimap Settings"; SWWM_MM_ENABLE = "Show Minimap"; SWWM_MM_ROTATE = "Rotate Minimap"; @@ -310,7 +311,6 @@ TOOLTIP_SWWM_COLLECTANIM = "Play special first person animations when picking up TOOLTIP_SWWM_SHADOWS = "Enables round shadows for various entities, combine with sprite shadows for best effect. Requires a map restart."; TOOLTIP_SWWM_PRECISECROSSHAIR = "Projects crosshair onto the spot the weapon will actually hit, rather than staying in the center of the screen."; TOOLTIP_SWWM_LDSPOIL = "[LegenDoom] Always show the \"Legendary\" prefix on healthbar tags, rather than after the monster has transformed. Disable if you'd rather not spoil the surprise."; -TOOLTIP_SWWM_RAGESHADER = "The normal Ragekit shader may be harmful for people with photosensitivity. Enabling this switches to a fainter alternative."; TOOLTIP_SWWM_CAMHUD = "By default, when the player is looking through a camera, most HUD elements excluding messages will be hidden. Set this to keep the full HUD."; TOOLTIP_SWWM_UNCAPALERT = "If enabled, all weapons and projectiles will have infinite noise radius. May fix maps that employ vanilla-style teleport traps."; TOOLTIP_SWWM_COLLECTANIMKEY = "Play special first person animations when picking up keys."; @@ -342,6 +342,8 @@ TOOLTIP_SWWM_BUMPSTRENGTH = "Controls how strong the bumping of the FOV is from TOOLTIP_SWWM_ENGINE = "Don't touch this."; TOOLTIP_SWWM_ITEMGLOWS = "If enabled, items that are far away from the player will display a shimmering glow (requires a map restart to take full effect)."; TOOLTIP_SWWM_NOMAGDROP = "By default, the Demolitionist will be somewhat environmentally conscious and not leave spent magazines lying around. Enable if you prefer the added clutter."; +TOOLTIP_SWWM_AUTOUSEBARRIER = "When enabled, elemental coating will be automatically used as needed if standing on damaging floors."; +TOOLTIP_SWWM_ENFORCEAUTOUSEBARRIER = "Enforce a specific coating auto-use setting for all players, or respects per-player settings."; TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter."; TOOLTIP_SWWM_MM_ROTATE = "Rotates the minimap view."; TOOLTIP_SWWM_MM_GRID = "Shows a 128x128 grid on the minimap."; diff --git a/language.es_base b/language.es_base index 311b20a96..9a163d8c1 100644 --- a/language.es_base +++ b/language.es_base @@ -26,9 +26,13 @@ T_SHEENHMG = "Ametralladora Sheen"; I_SHEENHMG = "Ametralladora Pesada \"Sheen\""; I_QUADRAVOL = "Lanzador de Bolas de Fuego \"Quadravol\""; T_BLACKFIRE = "Encendedor de Fuego Negro"; -T_GRANDLANCE = "Gran Lanza"; T_EMPCARBINE = "Carabina Raíl"; I_EMPCARBINE = "Carabina Raíl EMP"; +T_GRANDLANCE = "Gran Lanza"; +T_FISTGUN = "Mano Divina"; +T_NEWSPARKSTER = "Rifle Sparkster"; +I_NEWSPARKSTER = "Rifle Sparkster Serie x3"; +T_MORTALRIFLE = "Rifle Mortal"; T_REDSHELL = "Cartucho"; T_REDSHELLS = "Cartuchos"; T_GREENSHELL = "Slug"; @@ -79,6 +83,13 @@ T_RAYAMMO = "Cargador de Ray-Khom"; T_RAYBATTERY = "Batería de Ray-Khom"; T_GRANDSPEAR = "Arpón de Gran Lanza"; T_GRANDAMMO = "Cargador de Gran Lanza"; +T_SPARKBAMMO = "Célula de Kinylum"; +T_SPARKRAMMO = "Célula de Nokron"; +T_MRROUND = "Bala Mortal"; +T_MRAMMO = "Cargador Mortal"; +T_MRGRENADE = "Granada Mortal"; +T_ULTIMATEPOD = "Cápsula de Rafan-Kos"; +T_ULTIMATEAMMO = "Cargador de Rafan-Kos"; T_BLASTSUIT = "Chaleco Antiexplosivos"; T_EMBIGGENER = "Ensanchecedor de Hammerspace"; T_BULKEMBIGGENER = "Ensanchecedor de Hammerspace a Granel"; @@ -105,6 +116,9 @@ T_SANDWICH = "Sándwich de Queso a la Plancha"; T_WARARMOR = "Armadura de Guerra"; T_BARRIER = "Revestimiento Elemental"; T_MYKRADVO = "Artefacto Mykradvo"; +T_SAFETY = "Enlace de Seguridad"; +T_DEVASTATION = "Marca de Devastación"; +T_DIVINE = "Sprite Divino"; T_CHANCEBOX = "Caja Afortunada"; T_FROGGY = "Silla Rana"; T_PERFECTLYGENERIC = "Cubo Genérico"; @@ -386,6 +400,12 @@ O_RAYKHOM = "%o recibió un envío exprés de plasma mortal de parte de %k."; O_RAYKHOM2 = "%o presenció el PODER ILIMITADO de %k."; O_GRANDLANCE = "%o fue despedazad@[ao_esp] por la Gran Lanza de %k."; O_GRANDLANCE2 = "%k mostró a %o lo eficiente que es la fusión nuclear."; +O_FISTGUN = "%o se tragó el sándwich de puño divino de %k."; +O_FISTGUN2 = "%k le mandó un guantazo divino a %o."; +O_NEWSPARKSTER = "%o fue testigo del poder de la artillería de plasma de %k."; +O_MORTALRIFLE = "%k mató a %o bien muert@[ao_esp]."; +O_MORTALRIFLEALT = "%o atrapó una granada muy mortal de %k."; +O_RAFANKOS = "%o no pudo hacer nada contra el arma definitiva de %k."; O_POUND = "%o se llevó una gran impresión del aterrizaje de %k."; O_DASH = "%o fue descuajeringad@[ao_esp] a todo gas por %k."; O_BUTT = "%o recibió un impacto letal del trasero de %k."; @@ -517,6 +537,8 @@ D_REFAIL = "El Sistema de Reinicio de Emergencia se ha recargado completamente." D_FROGGY1 = "\cjUn pequeño precio a pagar...\c-"; D_FROGGY2 = "\cj... por una \cdSilla Rana\cj.\c-"; D_BARRIER = "El Revestimiento Elemental se ha desvanecido."; +D_DEVASTATION = "El poder de la Marca se ha ido."; +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-"; @@ -527,7 +549,7 @@ SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" "Modelos 3D diseñados con cariño con texturas pintadas a mano de 256 colores con dithering\n" "Mas de 50 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, 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, Sanyanya, 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" +"¡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_YOURSELF = "Tú"; @@ -543,6 +565,10 @@ SWWM_GAMMAMODE1 = "Semiautomático"; SWWM_GAMMAMODE2 = "Triple Ráfaga"; SWWM_GAMMAMODE3 = "Automático"; SWWM_GAMMAMODE4 = "SUPERAUTOMÁTICO"; +SWWM_MRMODE1 = "Disparo de Precisión"; +SWWM_MRMODE2 = "Disparo en Clúster"; +SWWM_MRMODE3 = "Disparo en Chorro"; +SWWM_MRMODE4 = "Disparo de Presión"; SWWM_DMRANK = "Posición:"; SWWM_DMSPREAD = "Distancia:"; SWWM_PLACE1 = "1º"; @@ -594,7 +620,7 @@ SWWM_OVERKILL = "Sobremuerte"; SWWM_MULTIKILL = "Racha"; SWWM_SPREEKILL = "Intocable"; SWWM_BOSSKILL = "Matajefes"; -SWWM_EXIT = "A "; // can't be used until we can get the names of remote levels +SWWM_EXIT = "A "; SWWM_NEXIT = "Salida"; SWWM_SEXIT = "Salida Secreta"; SWWM_EEXIT = "Fin"; @@ -752,6 +778,16 @@ SWWM_INTERTIP127 = "La postura de Saya ha desconcertado a incontables especialis SWWM_INTERTIP128 = "El método general de Saya para entablar amistad con aliens es ofrecerles pizza y desafiarlos a pasarse Dark Souls. Suele funcionar."; SWWM_INTERTIP129 = "El bunnyhopping te permite alcanzar velocidades ridículas (aunque no lo suficiente para ir a cuadros, desafortunadamente)."; SWWM_INTERTIP130 = "El potenciado de velocidad del Ragekit puede hacerte rebotar violentamente contra todo mientras corres. Esto puede ser problemático en espacios cerrados."; +SWWM_INTERTIP131 = "En Heretic y Hexen, un ítem conocido como el Enlace de Seguridad puede aparecer. Si por cualquier razón te has atascado en algún tipo de trampa de la que no parece que haya salida, este será tu as en la manga."; +SWWM_INTERTIP132 = "La Marca de Devastación es bastante inestable, pero provee de un mayor potenciado de daño que el Ragekit, para TODO el daño que puedas causar, incluso a ti. Sí, un juguetito bastante peligroso, desde luego."; +SWWM_INTERTIP133 = "El Sprite Divino puede potenciar tu salud hasta niveles absurdos, pero sus efectos se desvanecen rápidamente después de un rato. Es el ítem de salud más potente que tienes al alcance, pero ten en cuenta que debe ser activado manualmente. A diferencia de muchos otros, no te va a salvar el trasero por su cuenta."; +SWWM_INTERTIP134 = "La Mano Divina es otra arma que se puede beneficiar de los efectos del Ragekit, convirtiendo lo que ya es un puñetazo letal en algo realmente divino."; +SWWM_INTERTIP135 = "Mantener los gatillos del Rifle Sparkster pulsados incrementará gradualmente la potencia de disparo al soltarlos. Afortunadamente, no existe la posibilidad de que el arma explote si los mantienes demasiado tiempo, solo un arma mal diseñada por humanos podría ser tan disfuncional."; +SWWM_INTERTIP136 = "El Rifle Sparkster puede disparar ambos tipos de munición simultáneamente, mezclando todo en un mortífero proyectil combinado."; +SWWM_INTERTIP137 = "El Rifle Mortal (\"Míster\" para los amigos) fue ideado como un posible rifle de batalla \"estándar\" para la Coalición X'Animen que \"incluso los Xekkian considerarían poderoso\". Parece que en ese aspecto ha sido un éxito, considerando lo verdaderamente mortal que es, aunque no tiene mucha adopción... Por ahora."; +SWWM_INTERTIP138 = "La Rafan-Kos es ciertamente un Arma Definitiva, como su nombre implica."; +SWWM_INTERTIP139 = "Se dice que la Mano Divina trae consigo solo una minúscula fracción del poder de su creador original. El tipo debe de pegar unas hostias de aúpa, entonces."; +SWWM_INTERTIP140 = "El chasis de la Demolicionista tiene un ligero aroma a lima."; // intermission fanart SWWM_FANART = "Arte: "; // achievements @@ -803,11 +839,16 @@ SWWM_ACHIEVEMENT_CRUSH_TAG = "Bajo Presión"; SWWM_ACHIEVEMENT_CRUSH_TXT = "Rompe una trituradora"; SWWM_ACHIEVEMENT_CYBULLY_TAG = "Ciberacoso"; SWWM_ACHIEVEMENT_CYBULLY_TXT = "Mata a un Ciberdemonio con su propio cohete"; +SWWM_ACHIEVEMENT_CUM_TAG = "Soltando Todo el Chorro"; +SWWM_ACHIEVEMENT_CUM_TXT = "Melt a grand total of %d enemies with the Rafan-Kos"; SWWM_ACHIEVEMENT_DAB_TXT = "Revienta %d enemigos con el Mazo Itamex"; SWWM_ACHIEVEMENT_DAKKA_TXT = "Dispara la Ametralladora Sheen durante un minuto entero"; SWWM_ACHIEVEMENT_DEADEYE_TAG = "En el Blanco"; SWWM_ACHIEVEMENT_DEADEYE_TXT = "Realiza %d disparos consecutivos con la Pistola de Explodium sin fallar"; +SWWM_ACHIEVEMENT_DEVA_TXT = "Usa %d Marcas de Devastación"; SWWM_ACHIEVEMENT_DIME_TXT = "Reviéntate con tus propios explosivos"; +SWWM_ACHIEVEMENT_DIVINE_TAG = "Deleite Divino"; +SWWM_ACHIEVEMENT_DIVINE_TXT = "Usa %d Sprites Divinos"; SWWM_ACHIEVEMENT_DOODLE_TAG = "Maestro del Grafiti"; SWWM_ACHIEVEMENT_DOODLE_TAG = "Garabatea mostachos en %d caras de demonio"; SWWM_ACHIEVEMENT_DOOMBOSS1_TAG = "Dúo Dinámico"; @@ -836,6 +877,8 @@ SWWM_ACHIEVEMENT_EVERYTHING_TAG = "La Demolicionista"; SWWM_ACHIEVEMENT_EVERYTHING_TXT = "Desbloquea todos los logros"; SWWM_ACHIEVEMENT_EZKILL_TAG = "El Orgullo de Misa"; SWWM_ACHIEVEMENT_EZKILL_TXT = "Mata %d enemigos con un solo disparo de Artefacto Ynykron (excluyendo modo secundario)"; +SWWM_ACHIEVEMENT_FISTO_TAG = "Rompejetas Excepcional"; +SWWM_ACHIEVEMENT_FISTO_TXT = "Mata %d enemigos con la Mano Divina"; SWWM_ACHIEVEMENT_FLIGHT_TAG = "Despega de Nuevo"; SWWM_ACHIEVEMENT_FLIGHT_TXT = "Lanza a un enemigo en volandas más allá de %d unidades de mapa"; SWWM_ACHIEVEMENT_FRIEND_TAG = "¿Te Gusta Caco?"; @@ -897,6 +940,7 @@ SWWM_ACHIEVEMENT_HND_TAG = "Mediodía"; SWWM_ACHIEVEMENT_HND_TXT = "Realiza %d disparos mortales en una única recarga de Puntzer Beta"; SWWM_ACHIEVEMENT_HURRY_TAG = "Con Prisas"; SWWM_ACHIEVEMENT_HURRY_TXT = "Termina un mapa con un 0% de muertes, ítems y secretos"; +SWWM_ACHIEVEMENT_ICE_TXT = "Empala %d enemigos con el disparo secundario del Encendedor de Fuego Negro"; SWWM_ACHIEVEMENT_JUMP_TAG = "Verticalidad"; SWWM_ACHIEVEMENT_JUMP_TXT = "Salta paredes %d veces"; SWWM_ACHIEVEMENT_KANCHO_TAG = "Kancho Extremo"; @@ -936,6 +980,8 @@ SWWM_ACHIEVEMENT_PEACE_TAG = "Pacifista"; SWWM_ACHIEVEMENT_PEACE_TXT = "Termina un mapa sin matar nada"; SWWM_ACHIEVEMENT_PENE_TAG = "Penetrador"; SWWM_ACHIEVEMENT_PENE_TXT = "Atraviesa %d enemigos en fila con un solo secundario de la Gran Lanza"; +SWWM_ACHIEVEMENT_PLASMA_TAG = "Echando Plasmas"; +SWWM_ACHIEVEMENT_PLASMA_TXT = "Mata un enemigo a 100%% de salud con un disparo cargado del Blaster de Plasma %d veces"; SWWM_ACHIEVEMENT_PLUSH_TAG = "Amorcito"; SWWM_ACHIEVEMENT_PLUSH_TXT = "Juega con el peluche de Saya %d veces en la misma partida"; $ifgame(hexen) SWWM_ACHIEVEMENT_PLUSH_TXT = "Juega con los peluches de Saya o Kirin %d veces en la misma partida"; @@ -943,6 +989,8 @@ SWWM_ACHIEVEMENT_PUZZLE_TAG = "Hasta Kirin está Cabreado"; SWWM_ACHIEVEMENT_PUZZLE_TXT = "Resuelve %d \"puzzles\""; SWWM_ACHIEVEMENT_RAGE_TAG = "No Hablo me Enfado"; SWWM_ACHIEVEMENT_RAGE_TXT = "Usa %d Ragekits"; +SWWM_ACHIEVEMENT_RAIL_TAG = "Metida de Través"; +SWWM_ACHIEVEMENT_RAIL_TXT = "Atraviesa %d enemigos con un solo disparo a presión del Rifle Mortal"; SWWM_ACHIEVEMENT_REFLECT_TAG = "Devuelto a Remitente"; SWWM_ACHIEVEMENT_REFLECT_TXT = "Mata %d enemigos con proyectiles desviados"; SWWM_ACHIEVEMENT_REFRESH_TAG = "Siempre Fresco"; @@ -962,8 +1010,12 @@ SWWM_ACHIEVEMENT_SLAYER_TAG = "Me he Convertido en Muerte"; SWWM_ACHIEVEMENT_SLAYER_TXT = "Mata %d enemigos con una sola Cabeza Nuclear Slayer"; SWWM_ACHIEVEMENT_SLEMG_TAG = "El Método Sledge"; SWWM_ACHIEVEMENT_SLEMG_TXT = "Activa %d interruptores a puñetazos"; +SWWM_ACHIEVEMENT_SNEAKY_TAG = "Retiro Furtivo"; +SWWM_ACHIEVEMENT_SNEAKY_TXT = "Usa %d Enlaces de Seguridad"; SWWM_ACHIEVEMENT_SNEEZE_TAG = "Humillador"; SWWM_ACHIEVEMENT_SNEEZE_TXT = "Mata %d enemigos con el fuego primario del Deep Impact"; +SWWM_ACHIEVEMENT_SPARK_TAG = "El Buen Chispazo"; +SWWM_ACHIEVEMENT_SPARK_TXT = "Mata %d enemigos a la vez con un disparo combinado del Rifle Sparkster"; SWWM_ACHIEVEMENT_STEP_TAG = "Pisadita"; SWWM_ACHIEVEMENT_STEP_TXT = "Mantente de pie en la cabeza de un solo enemigo durante %d segundos"; SWWM_ACHIEVEMENT_STOMP_TAG = "Complejo de Fontanero Italiano"; diff --git a/language.es_lore b/language.es_lore index 05940a464..ad57de57f 100644 --- a/language.es_lore +++ b/language.es_lore @@ -219,6 +219,23 @@ SWWM_LORETXT_ANARUKON2 = "\cfJejeje... en serio. Aun no me puedo creer que todo eso haya pasado. Esperé y esperé a poder tener mi propia monada Anarukon, como Taro nii-san tuvo a Ellen y Yu-chan a Ashley, y ¡bam! Ahí estaba. Y por supuesto tengo que dar gracias a Ashley-san por la mayor puta bendición, sí. Es que, nada más comentarle lo del Proyecto Akari me salta con lo de \"Sé un lugar que puedes visitar\", y eso... así es como conocí a mi amorcito. Ya te lo he contado todo, pero coño, es que tengo que escribirlo aquí también, como recordatorio. ¿No es monísimo? Recuerdo como de supertímidas estabais tú y Maidbot cuando lo conocisteis. Fue tan adorable, la cosa mas dulce, más incluso que los \"panes de leche\" esos que tenían en el banquete de nuestra boda (cosa fina por cierto). Y ahora, las cuatro estamos casadas con él, y a vivir la buena vida.\c-\n" "\n" "\cfOh ya, y conocer a la tía esa, Andreki, joder la vergüenza que pasé, la mayor de toda mi puta vida, puto en serio. Es que, imagina, me dicen que espere por ahí a alguien que quiere tener una charla conmigo en privado, y... este... puto retaco engreído se me acerca, una niña enana, con aires de superimportancia y tal, soltándome cosas tipo \"soy alguien muy importante\" y \"deberías saber quien soy, Lady Saya\" y voy yo con \"lo siento, niña, estoy esperando por alguien, no puedo jugar contigo\", y ahí va y EXPLOTA de repente, soltándome que si \"COMO TE ATREVES\" y \"SOY MUCHO MAYOR QUE TÚ\" y mierdas, y ya... me pongo en modo \"mil perdones\" total, tirándome en el suelo y todo. Kirin tuvo que venir corriendo a dar explicaciones e intentar calmarla porque es que... no podía hacer nada. Joder, es que... Al menos luego pudimos ser amigas, pero... justo en ese momento es que ya veía como me había convertido en el enemigo mortal de todo un puto reino.\c-"; +SWWM_LORETAG_ANGERYSIGIL = "Marca Devastación"; +SWWM_LORETXT_ANGERYSIGIL = +"\cxDesignación:\c-\n" +"\cf Marca de Devastación\c-\n" +"\cxFabricante:\c-\n" +"\cf Torouven\c-\n" +"\cxClasificación:\c-\n" +"\cf Artefacto Divino\c-\n" +"\n" +"La \cfMarca de Devastación\c- es una reliquia construida y bendecida por el mismo dios del odio. Aquellos que llaman a su bendición son cargados de un poder destructivo sin par, permitiendo que no solo su propio cuerpo si no también cualquier arma que usen puede alcanzar una fuerza absolutamente devastadora.\n" +"\n" +"Esta bendición solo funciona durante un tiempo limitado, pero aun así es bastante popular entre guerreros, aunque se considere \"injusto\" su uso en algunas situaciones. Dada su naturaleza, este artefacto no tiene efecto en deidades, solo en seres mundanos.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfEsta fue idea de Maruku. Cuesta bastante pillarlas, así que no las malgastes, ¿vale? Oh y también, anda con cuidado o puede que te auto-descoyuntes a tope con esto.\c-\n" +"\n" +"\cfCreo que podría ganarte en una pelea si usara esto. A ver, tampoco es que quiera hacerte daño pero... Solo lo digo hipotéticamente, ya sabes.\c-"; SWWM_LORETXT_ASHLEY = "\cxNombre Completo:\c-\n" "\cf Ashley Knox\c-\n" @@ -844,6 +861,25 @@ SWWM_LORETXT_DISPLAY = "\cfSabes, esa cosa te hace tan mona y abrazable... Es que, a ver... ¡¡¡ES MONÍSIMA!!!\c-\n" "\n" "\cfOh ya por cierto, hablando de abrazos, perdón mucho por aquella vez, cuando Ibuki te aplastó con uno de esos abrazos de oso suyos. En serio que pensé que tu carcasa podía soportarlo, pero hostia puta si es tan fuerte que puede doblar puto Almacero con las manos. Al menos ahora ya sabe que tiene que abrazarte como a cualquier persona normal (suerte que tienes, que no vas a acabar con la espalda hecha mierda después).\c-"; +SWWM_LORETAG_DIVINESPRITE = "Sprite Divino"; +SWWM_LORETXT_DIVINESPRITE = +"\cxDesignación:\c-\n" +"\cf Sprite Divino\c-\n" +"\cxFabricante:\c-\n" +"\cf Vivificador Klokonie\c-\n" +"\cxClasificación:\c-\n" +"\cf Artefacto Divino\c-\n" +"\n" +"El \cfSprite Divino\c- es una cristalización de poder vivificante producido por el semidiós \cfKlokonie\c-, de quien se dice que puede revivir a los muertos de tiempos pasados, e incluso construir nuevos cuerpos si se han perdido. Ha hecho esto muchas veces, en algunos casos llegando incluso a crear vida de la nada absoluta. Entre otras cosas, sus enseñanzas han ayudado a la ancestral raza \cfIzuna\c- en la creación de las \cfQuimeras\c-.\n" +"\n" +"Esta brillante gema llena de vigor hasta a la más débil de las criaturas mundanas al ser exprimida firmemente en sus manos, tanto alma como cuerpo rebosando de vitalidad. Sus efectos, sin embargo, no son permanentes, ya que ni el cuerpo ni el alma son capaces realmente de contener tanta fuerza vital.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfEsta cosa me recuerda a las \"gemas de vida\" de... Ese juego (nunca hablamos de ese). La mayor diferencia es que no son una mierda inútil redundante.\c-\n" +"\n" +"\cfComo puedes esperar, esto es algo más que mis colegas dioses han recomendado. Normalmente se le dan a los héroes por petición especial... Y tu eres nuestra heroína, Demo-chan, así que esto es para ti.\c-\n" +"\n" +"\cfPS: No intentes comértelo.\c-"; SWWM_LORETAG_DOOMGUY = "Marine de Doom"; SWWM_LORETXT_DOOMGUY = "\cxNombre Completo:\c-\n" @@ -1086,6 +1122,28 @@ SWWM_LORETXT_FABRICATOR = "\cfOh, tienes que estar de puta broma. Ahora el friki este va y nos mete mierda de gacha, con tiers y todo.\c-\n" "\n" "\cfEn serio, juro que el tío hace esto a propósito para joderme o algo.\c-"; +SWWM_LORETAG_FISTGUN = "Mano Divina"; +SWWM_LORETXT_FISTGUN = +"\cxDesignación:\c-\n" +"\cf Mano Divina\c-\n" +"\cxFabricante:\c-\n" +"\cf Korovithuhcp (original)\c-\n" +"\cf Artesanía Unissix (réplica)\c-\n" +"\cxDesignación:\c-\n" +"\cf Guantelete Mágico\c-\n" +"\n" +"La \cfMano Divina\c- fue un arma que el dios \cfKorovithuhcp\c- construyó incontables milenios atrás, y fue pasando entre muchos héroes de leyenda. Finalmente se perdió, y el dios no mostró interés en crear una nueva. Esto, obviamente, no detuvo a \cfMisa Unissix\c- en el intento de hacer exactamente eso. Siguiendo documentos históricos de su uso, construyó su propia versión en base a una mezcla de magia arcana y tecnología moderna. Regaló una a su hija, \cfZanaveth Nekuraku III\c-, y otra a la \cfDemolicionista\c-.\n" +"\n" +"\cfFuego Primario:\c- Carga un puñetazo, y luego lo suelta. El guantelete se lanzará de frente y luego volverá a ti.\n" +"\n" +"\cfFuego Secundario:\c- Carga una bofetada de ancho rango. Al soltarlo abofeteará de forma muy ruidosa y violenta todos los objetivos que tengas delante.\n" +"\n" +"\cfTécnicas:\c- Dada su naturaleza, la Mano Divina es susceptible a los efectos de un \cfRagekit\c-, incrementando su fuerza y rango.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfMenudo envío especial que nos mandó Zana-chan. Y cuando enseñamos que iba bien, y molaba, Misa-Misa se puso a tope y empezó a fabricarlas en masa. Si es que es juro que es demasiado adorable.\c-\n" +"\n" +"\cfEn fin, esos bichos van a recibir una buena somanta con esta cosa. Que ganas tengo de verla en acción con objetivos de verdad. Especialmente después de... Aquel incidente con el saco de boxeo.\c-"; SWWM_LORETAG_FORX = "Aeronáutica Forx"; SWWM_LORETXT_FORX = "\cxNombre:\c-\n" @@ -1835,9 +1893,9 @@ SWWM_LORETXT_KIRIN = "\n" "A pesar de tener el título de \"Emperador\", realmente no tiene ningún poder sobre la gente de Akkou, y en su lugar actúa más como un consejero político y económico. De hecho, el \cfImperio Sykhai\c- en sí tampoco puede ser descrito como un imperio. Muchos lo describirían más bien como algo parecido a una colección de comunas anarquistas que otra cosa, a diferencia del verdadero, tiránico \cfImperio de Novoskhana\c- del que se separaron.\n" "\n" -"Durante casi 80 años como líder de Akkou, Kirin ha permanecido soltero, ya que nadie se atrevía a acercarse a él con el propósito de casarse, debido a que se le veneraba como un icono de \"pureza inmaculada\", en pare debido a que su nombre, Kirin, significa \"inocencia\" en el idioma \cfAnarukon\c-. No fue hasta un encuentro inesperado con \cfSaya Miyamoto\c- en 2171 que esto finalmente cambió. Tras un mes bastante ocupado, durante el cual el joven emperador adicionalmente conoció a las otras parejas de Saya, surgió el amor, eventualmente culminando en un casamiento colectivo (\cg♥\c-) el 8 de Mayo de 2171, con su unión marcando el inicio de una gran alianza entre la humanidad y los Anarukon, adicionalmente ayudando a curar las viejas heridas del \cfIncidente Hellbound\c-, ya que esta alianza se extendió también al \cfReino Kurenai\c-, a través de la amistad compartida con la \cfReina Andreki Anderken\c-.\n" +"Durante casi 80 años como líder de Akkou, Kirin ha permanecido soltero, ya que nadie se atrevía a acercarse a él con el propósito de casarse, debido a que se le veneraba como un icono de \"pureza inmaculada\", en parte debido a que su nombre, Kirin, significa \"inocencia\" en el idioma \cfAnarukon\c-. No fue hasta un encuentro inesperado con \cfSaya Miyamoto\c- en 2171 que esto finalmente cambió. Tras un mes bastante ocupado, durante el cual el joven emperador adicionalmente conoció a las otras parejas de Saya, surgió el amor, eventualmente culminando en un casamiento colectivo (\cg♥\c-) el 8 de Mayo de 2171, con su unión marcando el inicio de una gran alianza entre la humanidad y los Anarukon, adicionalmente ayudando a curar las viejas heridas del \cfIncidente Hellbound\c-, ya que esta alianza se extendió también al \cfReino Kurenai\c-, a través de la amistad compartida con la \cfReina Andreki Anderken\c-.\n" "\n" -"Kirin en persona puede ser descrito como un líder bastante \"pragmático\". Siendo muy cercano a la gente de Akkou, y aficionado a entablar amistades. Es también absolutamente adorable. Cuando no está ocupado con sus deberes como consejero de la gente, Kirin se dedica a muchos de sus hobbies, tales como la pintura (teniendo una gran habilidad como retratista, por ejemplo), o la práctica de la magia junto a su madre. También tiene cierta aflicción a los videojuegos, anime, y otras formas de entretenimiento moderno, y suele ser visto hablando de forma extensa en redes sociales sobre el tema, felizmente introduciendo a la gente de la Tierra a los juegos y series populares de su mundo natal.\n" +"Kirin en persona puede ser descrito como un líder bastante \"pragmático\". Siendo muy cercano a la gente de Akkou, y aficionado a entablar amistades. Es también absolutamente adorable. Cuando no está ocupado con sus deberes como consejero de la gente, Kirin se dedica a muchos de sus hobbies, tales como la pintura (teniendo una gran habilidad como retratista, por ejemplo), o la práctica de la magia junto a su madre. También tiene cierta afición a los videojuegos, anime, y otras formas de entretenimiento moderno, y suele ser visto hablando de forma extensa en redes sociales sobre el tema, felizmente introduciendo a la gente de la Tierra a los juegos y series populares de su mundo natal.\n" "\n" "\cxNotas de Saya:\c-\n" "\cg♥\c- \ca¡¡¡¡¡¡KIRIN-KUN!!!!!! ¡¡¡¡¡¡ERES UNA MONADA!!!!!! ¡¡¡¡TE QUIERO!!!!\c- \cg♥\c-\n" @@ -2144,6 +2202,34 @@ SWWM_LORETXT_MILKBREADS = "\cfSabes, enterarme de que la leche viene de ESAS COSAS no ha cambiado en absoluto mi opinión. Esta cosa es celestial, es lo más delicioso jamás creado, es tan dulce que me moriría por ellos. A ver, casi que pasó eso justo cuando tuve una sobredosis de ellos (madre de dios que vergüenza). Sí, no me extraña que la palmase mucho cuando tenía más azúcar que sangre en el cuerpo. Kirin-kun dijo que incluso oyó explotar mi corazón, pero apuesto a que solo estaba siendo dramático, eso no puede haber pasado.\c-\n" "\n" "\cfOh ya, y resulta que hay un mito por ahí de que si comes suficientes de estos tus tetas se ponen enormes. Pues mira que en serio no creo que sea eso posible, por supuesto que no. ¿Que clase de idiota se metería una sobredosis de estas cosas a propósito para que le crezcan unas domingas gigantes?\c-"; +SWWM_LORETAG_MISTERGUN = "Rifle Mortal"; +SWWM_LORETXT_MISTERGUN = +"\cxDesignación:\c-\n" +"\cf Rifle Mortal\c-\n" +"\cf \"Míster\" (apodo común)\c-\n" +"\cxFabricante:\c-\n" +"\cf Plutoni Incorporated\c-\n" +"\cxDesignación:\c-\n" +"\cf Rifle de Combate Multiusos\c-\n" +"\n" +"El \cfRifle Mortal\c- fue ideado a principios de los años 2100 por estudiantes de la \cfUniversidad de Nos-Kora\c- los cuales pensaban que simplemente había demasiadas armas distintas de ejércitos distintos de especies distintas, así que... Crearían algo que sería realmente \"universal\" para todos.\n" +"\n" +"Fue hecha para un calibre peculiar de 4.44x44.4mm, con una longitud de cañón de 44.4cm, y emplea munición de una extraña forma cuadrada, cuya naturaleza, junto con sus mecanismos de disparo, son un enigma. Estas balas telescópicas explosivas compactas pegan más fuerte que la munición de la mayoría de rifles de combate de mayor calibre hechos por humanos. Adicionalmente, también emplea granadas de 44.4mm desde una lanzadera bajo el cañón. Estas granadas se dispersan entre pequeñas bombas con seguimiento de objetivos al impactar, haciéndolas ideales para objetivos dispersos.\n" +"\n" +"\cfFuego Primario:\c- Disparo continuo de munición primaria.\n" +"\n" +"\cfFuego Secundario:\c- Lanza una granada. Si no hay, carga una nueva.\n" +"\n" +"\cfFuego Terciario:\c- Alterna entre modos de operación del rifle. Cambiando entre \"disparo de precisión\" (modo semiautomático estándar), \"disparo en clúster\" (de algún modo funcionando como una escopeta con la misma munición), \"disparo en chorro\" (funciona como automático pero ¿parece disparar cuatro balas por bala?), y \"disparo de presión\" (de alguna forma \"cargando\" la munición antes de dispararla con mayor potencia y velocidad).\n" +"\n" +"\cfRecarga:\c- Hace lo esperado.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfLlegados a este punto ya me trae sin cuidado que me confunda cualquier cosa que salga de ahí, en serio.\c-\n" +"\n" +"\cfEsta cosa es un rifle de asalto, una escopeta, una ametralladora y un rifle anti-tanque todo en uno, con exactamente la misma munición. Y cierto, no tiene ningún sentido, pero funciona, sea como sea.\c-\n" +"\n" +"\cfNo te pongas muy cómoda con esta, por cierto. Apuesto a que en cuanto le pilles el gusto no vas a ser capaz de volver a usar ninguna otra arma.\c-"; SWWM_LORETXT_MIXOM = "\cxNombre:\c-\n" "\cf Herramientas Mixom\c-\n" @@ -2164,6 +2250,34 @@ SWWM_LORETXT_MIXOM = "\cfDinero y poder, dominio absoluto, mierda de capitalismo. Asco grande... Ojalá exploten todos.\c-\n" "\n" "\cfNo puedes dar dos pasos sin cruzarte con algo que han hecho, están EN PUTAS TODAS PARTES. Como, por ejemplo, ¿todos los tornillos en tu cuerpo? Marca Mixom. ¿La refrigeración líquida? También Mixom... Seguiría, pero es que me da todo el asco decir su nombre tanto.\c-"; +SWWM_LORETAG_MODERNSPARKSTER = "Rifle Sparkster"; +SWWM_LORETXT_MODERNSPARKSTER = +"\cxDesignación:\c-\n" +"\cf Rifle Sparkster de Clase x3\c-\n" +"\cxFabricante:\c-\n" +"\cf Instituto Tecnológico Tach-Engine\c-\n" +"\cf Nekuraku Tekkanosei\c-\n" +"\cxClasificación:\c-\n" +"\cf Lanzador de Artillería de Plasma\c-\n" +"\n" +"El \cfSparkster\c- comenzó como un intento de \cfTecnologías Tach-Engine\c- de replicar las armas de energía de la difunta \cfDecade Mechanics\c-. Los primeros dos prototipos fueron un fracaso, al ver que no había forma de crear nada parecido remotamente a las Biosparks, una forma de munición de energía semi-pensante.\n" +"\n" +"Entonces, un descubrimiento llegó: ¿Por qué intentar copiar algo que jamás podrá ser realmente comprendido? ¿Por que no mantener las mismas bases internas del arma pero empleando munición distinta y más fácil de obtener? Y así, nació el linaje de Sparkster \"moderno\". Empleando cargas de plasma de alta densidad de \cfNokron\c- y \cfKinylum\c-, la serie x3 puede alcanzar el mismo potencial destructor que una artillería pesada, con menos peso, tamaño, y dificultad de operación.\n" +"\n" +"\cfFuego Primario:\c- Mantén para cargar una masa de plasma de Kinylum, suelta para liberarla en el mundo. El potencial destructivo es relativamente pequeño, pero deja un notable rastro ardiente a su paso, y en una densa nube donde impacta.\n" +"\n" +"\cfFuego Secundario:\c- Mantén para cargar una masa de plasma de Nokron, suelta para liberarla en el mundo. Aunque es inmediatamente más destructiva que la munición primaria, esta es menos estable, y tiende a salir como un estallido candente, en lugar de un proyectil.\n" +"\n" +"\cfRecarga Primaria:\c- Carga una célula de Kinylum. Se pueden tener hasta 3 en reserva.\n" +"\n" +"\cfRecarga Secundaria:\c- Carga una célula de Nokron. Misma capacidad de reserva.\n" +"\n" +"\cfTécnicas:\c- La carga de proyectil puede mantenerse de forma indefinida, ya que el arma se ventilará regularmente para estabilizar la potencia pico de ignición del arma. Esto puede permitir que uno simplemente cargue desde cobertura y salga para soltar el disparo cuando sea necesario. Adicionalmente, la posibilidad de pulsar ambos gatillos a la vez también está documentada, lo cual permite una potente descarga de plasma de Nokorokinylum, comparable a una pequeña bomba nuclear en potencial destructor. No se recomienda realizar un ataque combinado a menos que el objetivo esté lo suficientemente lejos para no poner en peligro al usuario.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfOstiaaaaaaaa esto si que es buena mierda. Será una vieja gloria de antes de la guerra, pero funciona tan bien que resulta que los modelos x4 y x5 son solo revisiones menores, por lo que me contó el viejales ese. No podemos pillarnos las nuevas por culpa de no se qué mierdas del Tratado de la Cicatriz Blanca, una pena, pero con esta nos llega.\c-\n" +"\n" +"\cfEs que en serio que mola, de verdad. Es básicamente un lanzacohetes y escopeta de plasma todo en uno. Y luego está la cosa del diseño, es que es tan limpio y futurista... Así son las cosas con Nekuratek, realmente. Dios es que me viene toda la nostalgia de aquellos tiempos de antaño cuando conseguí visitar Nahkami y vi sus fábricas y tal y todo era tan limpio y reluciente... Jo tío.\c-"; SWWM_LORETAG_MOTHLAMP = "Lämpara"; SWWM_LORETXT_MOTHLAMP = "\cxDesignación:\c-\n" @@ -2741,6 +2855,30 @@ SWWM_LORETXT_QUADRAVOL = "\cfY por supuesto es jodidamente enorme, también, aunque la empuñadura está supuestamente adaptada. En serio que se me hace rarísimo como puedes hacer eso de... agrandar las manos, pero al menos te permite usar cosas así fácilmente.\c-\n" "\n" "\cfEn fin, putas bolas de fuego, ¿¿¿que funcionan bajo el agua??? Voy a tener que echarle un ojo a la ciencia detrás de esto porque eso no tiene puto sentido y aun así... está ahí.\c-"; +SWWM_LORETXT_RAFANKOS = +"\cxDesignación:\c-\n" +"\cf Rafan-Kos (\"Arma Definitiva\")\c-\n" +"\cxFabricante:\c-\n" +"\cf Nekuraku Tekkanosei\c-\n" +"\cxDesignación:\c-\n" +"\cf Cañón de Haz de Partículas\c-\n" +"\n" +"Ideada por un supuestamente \"loco\" y \"desquiciado\" ingeniero de la División de Armas Avanzadas de \cfNekuratek\c-, el desarrollo de este arma se vio interrumpido mucho antes de alcanzar sus ambiciosos planes. Citando que este ingeniero cuyo nombre no será revelado \"jugó a demasiados videojuegos\", fue interrumpido antes de que llegara a implementar la friolera de 15 diferentes modos de operación del arma, haciéndola extremadamente complicada, costosa y \"completamente ridícula\".\n" +"\n" +"El proyecto \cfRafan-Kos\c- (\"Arma Definitiva\" en Nukuribaku) solo sería completado en parte una vez el jefe de ingeniería \cfZanaveth Nekuraku I\c- se plantara personalmente para pedir que cesara tal \"inanidad\". El resultado final pareció satisfactorio a pesar de las quejas de su creador, y sería finalmente comercializado.\n" +"\n" +"El arma emplea \cfKabbadon\c- como combustible, un subproducto común de la fusión de \cfNokorokinylum\c-, haciéndolo así fácil de fabricar. Sin embargo, dada la densidad y pureza requeridas en la creación de una sola cápsula de combustible hacen que su precio escale dramáticamente.\n" +"\n" +"\cfFuego Primario:\c- Libera un radiante estallido de energía que se abre paso a través de todo, soltando chispas en todas direcciones a su paso y quemando objetivos cercanos. El estallido arde durante un total de cinco segundos antes de disiparse rápidamente.\n" +"\n" +"\cfFuego Secundario:\c- Libera varios estallidos dispersos en un cono amplio, con un potencial destructivo similar, pero ardiendo más rápido, con mayor intensidad, y disipándose mucho antes.\n" +"\n" +"\cfRecarga:\c- Coloca un nuevo cargador, cada uno almacenando cuatro cápsulas.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cf¿\"Arma Definitiva\"? Menuda cursilada... Pero sabes, algo de todo esto hacía que me picotearan los sesos, y entonces todo encajó. Esta cosa es básicamente como esa carta de hechizo, la Chispa Maestra. Hostia, es que hasta suena y pinta igual...\c-\n" +"\n" +"\cfJoder, si mola y todo, en serio. Me gusta, así que la puse en el mismo sitio que las otras dos armas súper descoyuntantes.\c-"; SWWM_LORETXT_RAGEKIT = "\cxDesignación:\c-\n" "\cf Ragekit\c-\n" @@ -2856,6 +2994,45 @@ SWWM_LORETXT_RYUJI = "\cfUgh, pensar otra vez en aquellos tiempos, no es bueno, para nada. Todos lo sabíamos, que no era inmortal como nosotros y lo perderíamos un día, pero realmente no estábamos preparados, sobre todo mamá. Fue muy, muy doloroso...\c-\n" "\n" "\cfNo estoy llorando, de verdad.\c-"; +SWWM_LORETAG_SAFETYTETHER = "Enlace Seguridad"; +SWWM_LORETXT_SAFETYTETHER = +"\cxDesignación:\c-\n" +"\cf Enlace de Seguridad\c-\n" +"\cxFabricante:\c-\n" +"\cf Akari Labs\c-\n" +"\cf Cyrus Enterprises\c-\n" +"\cxClasificación:\c-\n" +"\cf Teletransporte de Emergencia de Corta Distancia\c-\n" +"\n" +"Lo que ves aquí es una extensión de la magia empleada en tu \cfCollar de la Suerte\c-, reutilizada y ajustada para permitir transportarte a demanda de vuelta a la entrada del área actual en la que te encuentras. Es bastante útil tenerlo en caso de que te encuentres atrapada en una sala sin escapatoria, y no tengas otros recursos para abrirte paso. El mundo de \cfParthoris\c- es muy traicionero, tal como nos informaron los \cfSidhe\c-, por lo que estas son esenciales, y pueden encontrarse en zonas donde se reporta que hay \"habitaciones trampa\".\n" +"\n" +"Simplemente gira ambos extremos en direcciones opuestas, y el dispositivo se encenderá. Si el usuario se encuentra ya cerca del punto de destino, el transporte será cancelado para evitar el uso accidental, de lo contrario, la luz se volverá azul y el transporte será realizado.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfAh, la forma perfecta de escapar una sala cerrada...\c-\n" +"\n" +"\cfPues sí, esto está basado en tu collar, funciona parecido también, excepto que no soy yo quien lo activa cuando estás en peligro de muerte, y sus efectos son más \"dramáticos\" (ya lo verás). Es magia simple, realmente. Esos idiotas de la UAC se cagarían los calzones si supieran que hemos tenido la magia para hacer teletransportes distantes, hasta entre universos, mucho antes de que existieran sus experimentos.\c-\n" +"\n" +"\cfEspero que a Misa no le importe que haya reutilizado uno de sus diseños de granada para esto.\c-"; +SWWM_LORETXT_SAFETYTETHER2 = +"\cxDesignación:\c-\n" +"\cf Enlace de Seguridad\c-\n" +"\cxFabricante:\c-\n" +"\cf Akari Labs\c-\n" +"\cf Cyrus Enterprises\c-\n" +"\cxClasificación:\c-\n" +"\cf Teletransporte de Emergencia de Corta Distancia\c-\n" +"\n" +"Lo que ves aquí es una extensión de la magia empleada en tu \cfCollar de la Suerte\c-, reutilizada y ajustada para permitir transportarte a demanda de vuelta a la entrada del área actual en la que te encuentras. Es bastante útil tenerlo en caso de que te encuentres atrapada en una sala sin escapatoria, y no tengas otros recursos para abrirte paso. El mundo de \cfParthoris\c- es muy traicionero, tal como nos informaron los \cfSidhe\c-, por lo que estas son esenciales, y pueden encontrarse en zonas donde se reporta que hay \"habitaciones trampa\". Cabe asumir que \cfCronos\c- tenga la misma clase de trampas, así que ten cuidado.\n" +"\n" +"Simplemente gira ambos extremos en direcciones opuestas, y el dispositivo se encenderá. Si el usuario se encuentra ya cerca del punto de destino, el transporte será cancelado para evitar el uso accidental, de lo contrario, la luz se volverá azul y el transporte será realizado.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfAh, la forma perfecta de escapar una sala cerrada...\c-\n" +"\n" +"\cfPues sí, esto está basado en tu collar, funciona parecido también, excepto que no soy yo quien lo activa cuando estás en peligro de muerte, y sus efectos son más \"dramáticos\" (ya lo verás). Es magia simple, realmente. Esos idiotas de la UAC se cagarían los calzones si supieran que hemos tenido la magia para hacer teletransportes distantes, hasta entre universos, mucho antes de que existieran sus experimentos.\c-\n" +"\n" +"\cfEspero que a Misa no le importe que haya reutilizado uno de sus diseños de granada para esto.\c-"; SWWM_LORETXT_SANKAIDERIHA = "\cxNombre:\c-\n" "\cf Sankaideriha (\"Capital de Magia\")\c-\n" diff --git a/language.es_menu b/language.es_menu index b4ddbc6b2..0df0d93d8 100644 --- a/language.es_menu +++ b/language.es_menu @@ -125,7 +125,6 @@ SWWM_PRECISECROSSHAIR = "Mira Precisa"; SWWM_MCTITLE = "Opciones de Compatibilidad con Mods"; SWWM_LDSPOIL = "Mostrar Siempre Legendarios"; SWWM_ETITLE = "Opciones de Efectos"; -SWWM_RAGESHADER = "Shader Alternativo de Ragekit"; SWWM_CAMHUD = "HUD Completo en Cámaras"; SWWM_UNCAPALERT = "Rango de Alerta Ilimitado"; SWWM_COLLECTANIMKEY = "Animaciones de Llaves"; @@ -197,6 +196,8 @@ SWWM_BUMP = "Intensidad de Sacudida de FOV"; SWWM_ENGINE = "Motor"; SWWM_ITEMGLOWS = "Los Ítems Lejanos Brillan"; SWWM_NOMAGDROP = "Tirar Cargadores Usados"; +SWWM_BARRIERUSE = "Usar Revestimiento Automáticamente"; +SWWM_SVBARRIERUSE = "Forzar Auto-Uso de Revestimiento"; SWWM_MMTITLE = "Opciones de Minimapa"; SWWM_MM_ENABLE = "Mostrar Minimapa"; SWWM_MM_ROTATE = "Rotar Minimapa"; @@ -309,7 +310,6 @@ TOOLTIP_SWWM_COLLECTANIM = "Muestra animaciones especiales en primera persona al TOOLTIP_SWWM_SHADOWS = "Activa sombras redondas para varias entidades, combina con sombras de sprites para un mejor efecto. Requiere un reinicio de mapa."; TOOLTIP_SWWM_PRECISECROSSHAIR = "Proyecta la mira en el punto que el arma alcanzará, en vez de quedarse en el centro de la pantalla."; TOOLTIP_SWWM_LDSPOIL = "[LegenDoom] Muestra siempre el sufijo de \"Legendario\" en las etiquetas de barra de vida, en lugar de despues de que el enemigo se haya transformado. Desactiva si prefieres no estropear la sorpresa."; -TOOLTIP_SWWM_RAGESHADER = "El shader normal del Ragekit puede ser dañino para personas con fotosensibilidad. Activando esto se cambia a una alternativa más suave."; TOOLTIP_SWWM_CAMHUD = "Por defecto, cuando el jugador está mirando por una cámara, la mayor parte de elementos del HUD excluyendo mensajes son ocultados. Activa esto para mantener el HUD completo."; TOOLTIP_SWWM_UNCAPALERT = "Si se activa, todas las armas y proyectiles tendrán un rango de ruido ilimitado. Puede arreglar mapas que usan trampas de teletransporte estilo vanilla."; TOOLTIP_SWWM_COLLECTANIMKEY = "Muestra animaciones especiales en primera persona al recoger llaves."; @@ -341,6 +341,8 @@ TOOLTIP_SWWM_BUMPSTRENGTH = "Controla lo intensa que es la sacudida del FOV por TOOLTIP_SWWM_ENGINE = "No toques esto."; TOOLTIP_SWWM_ITEMGLOWS = "Al activar, los ítems que se encuentren lejos del jugador mostrarán un ligero destello (requiere un reinicio del mapa para tener efecto completamente)."; TOOLTIP_SWWM_NOMAGDROP = "Por defecto, la Demolicionista será un poco consciente con el medio ambiente y no dejará cargadores usados por ahí. Activa si prefieres la basura adicional."; +TOOLTIP_SWWM_AUTOUSEBARRIER = "Cuando esto está activado, el revestimiento elemental será usado automáticamente si es necesario al estar en suelos dañinos."; +TOOLTIP_SWWM_ENFORCEAUTOUSEBARRIER = "Fuerza una opción específica de auto-uso de revestimiento para todos los jugadores, o respeta la opción de cada uno."; TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación."; TOOLTIP_SWWM_MM_ROTATE = "Gira la vista del minimapa."; TOOLTIP_SWWM_MM_GRID = "Muestra una cuadrícula de 128x128 en el minimapa."; diff --git a/language.version b/language.version index 3664add68..9308ff7dc 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.9 \cu(Sat 28 Aug 18:56:23 CEST 2021)\c-"; -SWWM_SHORTVER="\cw1.0.9 \cu(2021-08-28 18:56:23)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.10 \cu(Tue 7 Sep 11:58:36 CEST 2021)\c-"; +SWWM_SHORTVER="\cw1.0.10 \cu(2021-09-07 11:58:36)\c-"; diff --git a/lore/default/angerysigil.txt b/lore/default/angerysigil.txt new file mode 100644 index 000000000..48b5de51c --- /dev/null +++ b/lore/default/angerysigil.txt @@ -0,0 +1,22 @@ +TAG +Devastation Sigil +TAB +Item +REL +Gods;Saya +TXT +\cxDesignation:\c- +\cf Devastation Sigil\c- +\cxManufacturer:\c- +\cf Torouven\c- +\cxClassification:\c- +\cf Divine Artifact\c- + +The **Devastation Sigil** is a relic constructed and blessed by the god of hate themself. Those who call upon its blessing are charged with unmatched destructive power, allowing not just their own body but any weaponry they use to achieve absolutely devastating strength. + +This blessing only works for a limited time, but nevertheless it's quite popular among warriors, although considered "unfair" to employ in some situations. Due to its nature, this artifact has no effect on deities, only mundane beings. + +\cxSaya's Notes:\c- +\cfThis one was Maruku's idea. They're hard to come by, so don't squander them, okay? Also, be careful or you might absolutely obliterate yourself with this.\c- + +\cfI think I could totally beat you in a fight if I used this. I mean, not that I'd want to hurt you but... Just hypothetically speaking, you know.\c- diff --git a/lore/default/divinesprite.txt b/lore/default/divinesprite.txt new file mode 100644 index 000000000..4e9fdece8 --- /dev/null +++ b/lore/default/divinesprite.txt @@ -0,0 +1,24 @@ +TAG +Divine Sprite +TAB +Item +REL +Gods;Saya +TXT +\cxDesignation:\c- +\cf Divine Sprite\c- +\cxManufacturer:\c- +\cf Lifegiver Klokonie\c- +\cxClassification:\c- +\cf Divine Artifact\c- + +The **Divine Sprite** is a crystallization of life-giving power produced by the demigod **Klokonie**, who is said to be able to revive the long dead, and even build them new bodies if lost. They have done this many times, sometimes going as far as to create new life from pure nothingness. Among other things, their teachings have assisted the ancient **Izuna** race in the creation of **Chimeras**. + +This shining gem invigorates even the puniest of mundane creatures when crushed firmly in their hands, both soul and body overflowing with vitality. Its effects, however, are not permanent, as neither body nor soul are capable of truly containing so much life force. + +\cxSaya's Notes:\c- +\cfThis thing reminds me of the "lifegems" from... That game (we don't talk about that one). The big difference is that they don't suck and aren't redundant nonsense.\c- + +\cfAs you may expect, this is also another thing that my god buddies have recommended. Normally these are only provided to heroes by special request... And you are our hero, Demo-chan, so this is for you.\c- + +\cfPS: Don't try to eat it.\c- diff --git a/lore/default/fistgun.txt b/lore/default/fistgun.txt new file mode 100644 index 000000000..7ef5e5be8 --- /dev/null +++ b/lore/default/fistgun.txt @@ -0,0 +1,27 @@ +TAG +Hand of Divine +TAB +Item +REL +Unissix;Gods;Zanaveth3;Saya +TXT +\cxDesignation:\c- +\cf Hand of Divine\c- +\cxManufacturer:\c- +\cf Korovithuhcp (original)\c- +\cf Unissix Crafts (replica)\c- +\cxDesignation:\c- +\cf Magic Gauntlet\c- + +The **Hand of Divine** was a weapon that the god **Korovithuhcp** constructed countless millenia ago, and had been passed down among many heroes of legend. Eventually it was lost, and the god had no interest in building a new one. This, obviously, did not stop **Misa Unissix** from attempting to do exactly just that. Following historical records of its use, she built her own version through a blend of arcane magic and modern technology. She gifted one to her daughter, **Zanaveth Nekuraku III**, and another to the **Demolitionist**. + +\cfPrimary Fire:\c- Charges up a punch, and then releases it. The gauntlet will fling itself forward and then return to you. + +\cfSecondary Fire:\c- Charges up a wide arc slap. On release this will very loudly and violently whack all targets in front of you. + +\cfTechniques:\c- Due to its nature, the Hand of Divine is susceptible to the effects of a **Ragekit**, increasing its strength and range. + +\cxSaya's Notes:\c- +\cfMan that sure was a special delivery from Zana-chan. And when we showed that it was good, and fun, Misa-Misa got all excited and started mass-producing them. She's just too adorable, I swear.\c- + +\cfAnyway, those fiends are gonna get knocked the fuck out with this thing. Can't wait to see it in action on real targets. Especially after... that incident with the punching bag.\c- diff --git a/lore/default/mistergun.txt b/lore/default/mistergun.txt new file mode 100644 index 000000000..1ab2d7896 --- /dev/null +++ b/lore/default/mistergun.txt @@ -0,0 +1,33 @@ +TAG +Mortal Rifle +TAB +Item +REL +NosKora;Saya +TXT +\cxDesignation:\c- +\cf Mortal Rifle\c- +\cf "Mister" (common nickname)\c- +\cxManufacturer:\c- +\cf Plutoni Incorporated\c- +\cxDesignation:\c- +\cf Multi-Purpose Battle Rifle\c- + +The **Mortal Rifle** was devised in the early 2100s by students of the **University of Nos-Kora** who thought there were simply too many different guns by different armies of different species, so... They would make something that'd be truly "universal" for everyone. + +It is chambered in a peculiar 4.44x44.4mm caliber, sporting a barrel length of 44.4cm, and employs odd square shaped ammunition, the nature of which, along with its firing mechanisms, are an enigma. These compact, high-explosive telescoped rounds pack more power in them than the ammunition of most human-made battle rifles of higher calibers. In addition, it also employs 44.4mm grenades from an under-barrel lobber. These grenades burst into lesser target-seeking bombs on impact, making them ideal for scattered targets. + +\cfPrimary Fire:\c- Steady shooting of the primary ammunition. + +\cfSecondary Fire:\c- Launches an under-barrel grenade. If empty, loads a new one. + +\cfTertiary Fire:\c- Alternates between operation modes for the rifle. Switching between "precision shot" (standard semi-auto), "cluster shot" (somehow behaving like a shotgun with the same ammunition), "stream shot" (behaves like full auto but appears to shoot four bullets per bullet?), and "overpressure shot" (somehow appearing to "charge" the ammunition before firing it out with higher potency and velocity). + +\cfReload:\c- Does what you'd expect. + +\cxSaya's Notes:\c- +\cfAt this point I can't even be bothered to be confused by anything that comes out of there, seriously.\c- + +\cfThis thing is an assault rifle, a shotgun, a machine gun and an anti-tank rifle all in one, with the same exact ammo. And it makes no sense, sure, but it works, however it does.\c- + +\cfDon't get too comfortable with it, by the way. I bet once it starts to grow on you you won't be able to go back to any other weapon.\c- diff --git a/lore/default/modernsparkster.txt b/lore/default/modernsparkster.txt new file mode 100644 index 000000000..94be7572f --- /dev/null +++ b/lore/default/modernsparkster.txt @@ -0,0 +1,33 @@ +TAG +Sparkster Rifle +TAB +Item +REL +EngineTech;Nekuratek;DecadeMech;Saya;WhiteScar +TXT +\cxDesignation:\c- +\cf Class x3 Sparkster Rifle\c- +\cxManufacturer:\c- +\cf Tach-Engine Technology Instutute\c- +\cf Nekuraku Tekkanosei\c- +\cxClassification:\c- +\cf Plasma Artillery Launcher\c- + +The **Sparkster** began as an attempt by **Tach-Engine Technologies** to replicate the energy weapons of the defunct **Decade Mechanics**. The first two prototypes were a failure, as it was seen that there was no way to create anything even remotely resembling Biosparks, a semi-sentient form of energy ammunition. + +Then, a breakthrough came: Why try to copy something that can't ever be truly understood? Why not keep the same internal principles of the weapon but employ different, easily obtainable ammunition? And thus, the "modern" Sparkster lineup was born. Employing high-density **Nokron** and **Kinylum** plasma charges, the x3 series can reach the same destructive potential as heavy artillery, with lesser weight, size, and hassle of operation. + +\cfPrimary Fire:\c- Hold to charge a glob of Kinylum plasma, release to let it out into the world. The destructive potential is relatively small, but has a notable lingering burn both across the path it takes, and in a dense cloud where it impacted. + +\cfSecondary Fire:\c- Hold to charge a glob of Nokron plasma, release to let it out into the world. While more immediately destructive than the primary ammunition, this one is less stable, and tends to come out as a searing blast, rather than a projectile. + +\cfPrimary Reload:\c- Load in a Kinylum cell. Up to 3 can be held in reserve. + +\cfSecondary Reload:\c- Load in a Nokron cell. Same reserve capacity. + +\cfTechniques:\c- Projectile charge can be held indefinitely, as the weapon will vent regularly to stabilize the weapon's peak ignition potency. This could allow one to simply charge from cover and pop out to release the shot when needed. Additionally, the possibility to press both triggers at once is also documented, which allows for a potent release of Nokorokinylum plasma, comparable to a miniature nuke in destructive potential. It is not recommended to perform a combined attack unless the target is far away enough so as to not endanger the user. + +\cxSaya's Notes:\c- +\cfYooooooooo this is the shit right here. It's kind of a pre-war relic, but it works so well that the x4 and x5 models are apparently just minor revisions of it, from what the old man told me. We can't have the new ones due to some deep White Scar Treaty fuckery, sadly, so this one will do.\c- + +\cfThis is seriously so cool, tho. It's basically a plasma rocket launcher and shotgun all in one. Also don't get me started on the design, it's so futuristic and sleek... That's kinda the thing with Nekuratek, really. God it's making me nostalgic for the olden days when I actually got to visit Nahkami and saw their factories and stuff and everything was so bright and clean... Oh man.\c- diff --git a/lore/default/rafankos.txt b/lore/default/rafankos.txt new file mode 100644 index 000000000..87a0b3b02 --- /dev/null +++ b/lore/default/rafankos.txt @@ -0,0 +1,30 @@ +TAG +Rafan-Kos +TAB +Item +REL +Nekuratek;Saya +TXT +\cxDesignation:\c- +\cf Rafan-Kos ("Ultimate Weapon")\c- +\cxManufacturer:\c- +\cf Nekuraku Tekkanosei\c- +\cxDesignation:\c- +\cf Particle Beam Cannon\c- + +Devised by a reportedly "insane" and "derranged" engineer at **Nekuratek**'s Advanced Arms Division, this weapon's development was cut short of its initial ambitious plans. Citing that this engineer whose name won't be revealed "played too many videogames", he was stopped before he could add a whopping 15 different modes of operation to the weapon, rendering it extremely convoluted, costly and "completely ridiculous". + +The **Rafan-Kos** project ("Ultimate Weapon" in Nukuribaku) would only be partially completed once chief engineer **Zanaveth Nekuraku I** personally stepped in to ask for this "inanity" to cease. The end result seemed satisfactory enough despite complaints from its creator, and would be eventually commercialized. + +The weapon employs **Kabbadon** as fuel, a common byproduct of **Nokorokinylum** fusion, thus making it fairly easy to produce. However, the density and degree of purity required in the creation of a single fuel pod make its price escalate dramatically. + +\cfPrimary Fire:\c- Release a radiant blast of energy that punches its way through anything, sending sparks flying in all directions along its path and burning other nearby targets. The blast burns for a total of five seconds before rapidly dissipating. + +\cfSecondary Fire:\c- Releases several scattered blasts in a wide cone, with similar destructive potential, but burning quicker, stronger, and dissipating much rapidly. + +\cfReload:\c- Loads in a new magazine, each holding four pods. + +\cxSaya's Notes:\c- +\cf"Ultimate Weapon"? Talk about pretentious... But you know, something about this was making my brains itch, and then it clicked. This is basically like that one spellcard, the Master Spark. Hell, it almost even sounds and looks the same...\c- + +\cfThat's fucking cool, actually. I like it, so I put it in the same slot as the other two massive fuckoff guns.\c- diff --git a/lore/default/safetytether.txt b/lore/default/safetytether.txt new file mode 100644 index 000000000..16dc21b78 --- /dev/null +++ b/lore/default/safetytether.txt @@ -0,0 +1,44 @@ +TAG +Safety Tether +TAB +Item +REL +AkariLabs;Cyrus;LuckyCollar;Parthoris;Sidhe;Cronos;Saya;UAC;Unissix +TXT +\cxDesignation:\c- +\cf Safety Tether\c- +\cxManufacturer:\c- +\cf Akari Labs\c- +\cf Cyrus Enterprises\c- +\cxClassification:\c- +\cf Short-distance Emergency Teleporter\c- + +What you see here is an extension of the magic employed in your **Lucky Collar**, repurposed and adjusted to allow you to transport yourself on demand back to the entrance of the current area you're in. This is quite useful to have in case you find yourself trapped in some inescapable room, and have no other resources to break out. The world of **Parthoris** is a treacherous one, as the **Sidhe** would inform us, and so these are a must, and may be found in areas where "trap rooms" have been reported. + +Simply twist both ends in opposing directions, and the device will prime. If the user is already standing close enough to the destination, the warp will be cancelled in order to prevent an accidental misuse, otherwise, the lights will turn blue and the warp will be performed. + +\cxSaya's Notes:\c- +\cfAh, the perfect way to escape from a closed room...\c- + +\cfYeah, this is actually based on your collar, works similarly too, except I'm not the one who activates whenever you're in mortal danger, and its effects are more "dramatic" (you'll see). It's simple magic stuff, really. Those idiots at the UAC would shit themselves if they knew we've had the magic to do long distance teleports, even across universes, long before their experiments existed.\c- + +\cfI hope Misa doesn't mind that I pretty much repurposed one of her grenade designs for this.\c- +TXT +\cxDesignation:\c- +\cf Safety Tether\c- +\cxManufacturer:\c- +\cf Akari Labs\c- +\cf Cyrus Enterprises\c- +\cxClassification:\c- +\cf Short-distance Emergency Teleporter\c- + +What you see here is an extension of the magic employed in your **Lucky Collar**, repurposed and adjusted to allow you to transport yourself on demand back to the entrance of the current area you're in. This is quite useful to have in case you find yourself trapped in some inescapable room, and have no other resources to break out. The world of **Parthoris** is a treacherous one, as the **Sidhe** would inform us, and so these are a must, and may be found in areas where "trap rooms" have been reported. It is assumed that **Cronos** may feature the same sorts of traps, so be careful. + +Simply twist both ends in opposing directions, and the device will prime. If the user is already standing close enough to the destination, the warp will be cancelled in order to prevent an accidental misuse, otherwise, the lights will turn blue and the warp will be performed. + +\cxSaya's Notes:\c- +\cfAh, the perfect way to escape from a closed room...\c- + +\cfYeah, this is actually based on your collar, works similarly too, except I'm not the one who activates whenever you're in mortal danger, and its effects are more "dramatic" (you'll see). It's simple magic stuff, really. Those idiots at the UAC would shit themselves if they knew we've had the magic to do long distance teleports, even across universes, long before their experiments existed.\c- + +\cfI hope Misa doesn't mind that I pretty much repurposed one of her grenade designs for this.\c- diff --git a/lore/es/angerysigil.txt b/lore/es/angerysigil.txt new file mode 100644 index 000000000..2012302c1 --- /dev/null +++ b/lore/es/angerysigil.txt @@ -0,0 +1,18 @@ +TAG +Marca Devastación +TXT +\cxDesignación:\c- +\cf Marca de Devastación\c- +\cxFabricante:\c- +\cf Torouven\c- +\cxClasificación:\c- +\cf Artefacto Divino\c- + +La **Marca de Devastación** es una reliquia construida y bendecida por el mismo dios del odio. Aquellos que llaman a su bendición son cargados de un poder destructivo sin par, permitiendo que no solo su propio cuerpo si no también cualquier arma que usen puede alcanzar una fuerza absolutamente devastadora. + +Esta bendición solo funciona durante un tiempo limitado, pero aun así es bastante popular entre guerreros, aunque se considere "injusto" su uso en algunas situaciones. Dada su naturaleza, este artefacto no tiene efecto en deidades, solo en seres mundanos. + +\cxNotas de Saya:\c- +\cfEsta fue idea de Maruku. Cuesta bastante pillarlas, así que no las malgastes, ¿vale? Oh y también, anda con cuidado o puede que te auto-descoyuntes a tope con esto.\c- + +\cfCreo que podría ganarte en una pelea si usara esto. A ver, tampoco es que quiera hacerte daño pero... Solo lo digo hipotéticamente, ya sabes.\c- diff --git a/lore/es/divinesprite.txt b/lore/es/divinesprite.txt new file mode 100644 index 000000000..9bad5f4e1 --- /dev/null +++ b/lore/es/divinesprite.txt @@ -0,0 +1,20 @@ +TAG +Sprite Divino +TXT +\cxDesignación:\c- +\cf Sprite Divino\c- +\cxFabricante:\c- +\cf Vivificador Klokonie\c- +\cxClasificación:\c- +\cf Artefacto Divino\c- + +El **Sprite Divino** es una cristalización de poder vivificante producido por el semidiós **Klokonie**, de quien se dice que puede revivir a los muertos de tiempos pasados, e incluso construir nuevos cuerpos si se han perdido. Ha hecho esto muchas veces, en algunos casos llegando incluso a crear vida de la nada absoluta. Entre otras cosas, sus enseñanzas han ayudado a la ancestral raza **Izuna** en la creación de las **Quimeras**. + +Esta brillante gema llena de vigor hasta a la más débil de las criaturas mundanas al ser exprimida firmemente en sus manos, tanto alma como cuerpo rebosando de vitalidad. Sus efectos, sin embargo, no son permanentes, ya que ni el cuerpo ni el alma son capaces realmente de contener tanta fuerza vital. + +\cxNotas de Saya:\c- +\cfEsta cosa me recuerda a las "gemas de vida" de... Ese juego (nunca hablamos de ese). La mayor diferencia es que no son una mierda inútil redundante.\c- + +\cfComo puedes esperar, esto es algo más que mis colegas dioses han recomendado. Normalmente se le dan a los héroes por petición especial... Y tu eres nuestra heroína, Demo-chan, así que esto es para ti.\c- + +\cfPS: No intentes comértelo.\c- diff --git a/lore/es/fistgun.txt b/lore/es/fistgun.txt new file mode 100644 index 000000000..1a17cbc86 --- /dev/null +++ b/lore/es/fistgun.txt @@ -0,0 +1,23 @@ +TAG +Mano Divina +TXT +\cxDesignación:\c- +\cf Mano Divina\c- +\cxFabricante:\c- +\cf Korovithuhcp (original)\c- +\cf Artesanía Unissix (réplica)\c- +\cxDesignación:\c- +\cf Guantelete Mágico\c- + +La **Mano Divina** fue un arma que el dios **Korovithuhcp** construyó incontables milenios atrás, y fue pasando entre muchos héroes de leyenda. Finalmente se perdió, y el dios no mostró interés en crear una nueva. Esto, obviamente, no detuvo a **Misa Unissix** en el intento de hacer exactamente eso. Siguiendo documentos históricos de su uso, construyó su propia versión en base a una mezcla de magia arcana y tecnología moderna. Regaló una a su hija, **Zanaveth Nekuraku III**, y otra a la **Demolicionista**. + +\cfFuego Primario:\c- Carga un puñetazo, y luego lo suelta. El guantelete se lanzará de frente y luego volverá a ti. + +\cfFuego Secundario:\c- Carga una bofetada de ancho rango. Al soltarlo abofeteará de forma muy ruidosa y violenta todos los objetivos que tengas delante. + +\cfTécnicas:\c- Dada su naturaleza, la Mano Divina es susceptible a los efectos de un **Ragekit**, incrementando su fuerza y rango. + +\cxNotas de Saya:\c- +\cfMenudo envío especial que nos mandó Zana-chan. Y cuando enseñamos que iba bien, y molaba, Misa-Misa se puso a tope y empezó a fabricarlas en masa. Si es que es juro que es demasiado adorable.\c- + +\cfEn fin, esos bichos van a recibir una buena somanta con esta cosa. Que ganas tengo de verla en acción con objetivos de verdad. Especialmente después de... Aquel incidente con el saco de boxeo.\c- diff --git a/lore/es/kirin.txt b/lore/es/kirin.txt index 85e4d2cfd..def3b2ad0 100644 --- a/lore/es/kirin.txt +++ b/lore/es/kirin.txt @@ -14,9 +14,9 @@ Nacido en 2080, hijo de **Syrakha Yanikov** y **Azya Xanai**, **Kirin** se convi A pesar de tener el título de "Emperador", realmente no tiene ningún poder sobre la gente de Akkou, y en su lugar actúa más como un consejero político y económico. De hecho, el **Imperio Sykhai** en sí tampoco puede ser descrito como un imperio. Muchos lo describirían más bien como algo parecido a una colección de comunas anarquistas que otra cosa, a diferencia del verdadero, tiránico **Imperio de Novoskhana** del que se separaron. -Durante casi 80 años como líder de Akkou, Kirin ha permanecido soltero, ya que nadie se atrevía a acercarse a él con el propósito de casarse, debido a que se le veneraba como un icono de "pureza inmaculada", en pare debido a que su nombre, Kirin, significa "inocencia" en el idioma **Anarukon**. No fue hasta un encuentro inesperado con **Saya Miyamoto** en 2171 que esto finalmente cambió. Tras un mes bastante ocupado, durante el cual el joven emperador adicionalmente conoció a las otras parejas de Saya, surgió el amor, eventualmente culminando en un casamiento colectivo (\cg♥\c-) el 8 de Mayo de 2171, con su unión marcando el inicio de una gran alianza entre la humanidad y los Anarukon, adicionalmente ayudando a curar las viejas heridas del **Incidente Hellbound**, ya que esta alianza se extendió también al **Reino Kurenai**, a través de la amistad compartida con la **Reina Andreki Anderken**. +Durante casi 80 años como líder de Akkou, Kirin ha permanecido soltero, ya que nadie se atrevía a acercarse a él con el propósito de casarse, debido a que se le veneraba como un icono de "pureza inmaculada", en parte debido a que su nombre, Kirin, significa "inocencia" en el idioma **Anarukon**. No fue hasta un encuentro inesperado con **Saya Miyamoto** en 2171 que esto finalmente cambió. Tras un mes bastante ocupado, durante el cual el joven emperador adicionalmente conoció a las otras parejas de Saya, surgió el amor, eventualmente culminando en un casamiento colectivo (\cg♥\c-) el 8 de Mayo de 2171, con su unión marcando el inicio de una gran alianza entre la humanidad y los Anarukon, adicionalmente ayudando a curar las viejas heridas del **Incidente Hellbound**, ya que esta alianza se extendió también al **Reino Kurenai**, a través de la amistad compartida con la **Reina Andreki Anderken**. -Kirin en persona puede ser descrito como un líder bastante "pragmático". Siendo muy cercano a la gente de Akkou, y aficionado a entablar amistades. Es también absolutamente adorable. Cuando no está ocupado con sus deberes como consejero de la gente, Kirin se dedica a muchos de sus hobbies, tales como la pintura (teniendo una gran habilidad como retratista, por ejemplo), o la práctica de la magia junto a su madre. También tiene cierta aflicción a los videojuegos, anime, y otras formas de entretenimiento moderno, y suele ser visto hablando de forma extensa en redes sociales sobre el tema, felizmente introduciendo a la gente de la Tierra a los juegos y series populares de su mundo natal. +Kirin en persona puede ser descrito como un líder bastante "pragmático". Siendo muy cercano a la gente de Akkou, y aficionado a entablar amistades. Es también absolutamente adorable. Cuando no está ocupado con sus deberes como consejero de la gente, Kirin se dedica a muchos de sus hobbies, tales como la pintura (teniendo una gran habilidad como retratista, por ejemplo), o la práctica de la magia junto a su madre. También tiene cierta afición a los videojuegos, anime, y otras formas de entretenimiento moderno, y suele ser visto hablando de forma extensa en redes sociales sobre el tema, felizmente introduciendo a la gente de la Tierra a los juegos y series populares de su mundo natal. \cxNotas de Saya:\c- \cg♥\c- \ca¡¡¡¡¡¡KIRIN-KUN!!!!!! ¡¡¡¡¡¡ERES UNA MONADA!!!!!! ¡¡¡¡TE QUIERO!!!!\c- \cg♥\c- diff --git a/lore/es/mistergun.txt b/lore/es/mistergun.txt new file mode 100644 index 000000000..4efcce292 --- /dev/null +++ b/lore/es/mistergun.txt @@ -0,0 +1,29 @@ +TAG +Rifle Mortal +TXT +\cxDesignación:\c- +\cf Rifle Mortal\c- +\cf "Míster" (apodo común)\c- +\cxFabricante:\c- +\cf Plutoni Incorporated\c- +\cxDesignación:\c- +\cf Rifle de Combate Multiusos\c- + +El **Rifle Mortal** fue ideado a principios de los años 2100 por estudiantes de la **Universidad de Nos-Kora** los cuales pensaban que simplemente había demasiadas armas distintas de ejércitos distintos de especies distintas, así que... Crearían algo que sería realmente "universal" para todos. + +Fue hecha para un calibre peculiar de 4.44x44.4mm, con una longitud de cañón de 44.4cm, y emplea munición de una extraña forma cuadrada, cuya naturaleza, junto con sus mecanismos de disparo, son un enigma. Estas balas telescópicas explosivas compactas pegan más fuerte que la munición de la mayoría de rifles de combate de mayor calibre hechos por humanos. Adicionalmente, también emplea granadas de 44.4mm desde una lanzadera bajo el cañón. Estas granadas se dispersan entre pequeñas bombas con seguimiento de objetivos al impactar, haciéndolas ideales para objetivos dispersos. + +\cfFuego Primario:\c- Disparo continuo de munición primaria. + +\cfFuego Secundario:\c- Lanza una granada. Si no hay, carga una nueva. + +\cfFuego Terciario:\c- Alterna entre modos de operación del rifle. Cambiando entre "disparo de precisión" (modo semiautomático estándar), "disparo en clúster" (de algún modo funcionando como una escopeta con la misma munición), "disparo en chorro" (funciona como automático pero ¿parece disparar cuatro balas por bala?), y "disparo de presión" (de alguna forma "cargando" la munición antes de dispararla con mayor potencia y velocidad). + +\cfRecarga:\c- Hace lo esperado. + +\cxNotas de Saya:\c- +\cfLlegados a este punto ya me trae sin cuidado que me confunda cualquier cosa que salga de ahí, en serio.\c- + +\cfEsta cosa es un rifle de asalto, una escopeta, una ametralladora y un rifle anti-tanque todo en uno, con exactamente la misma munición. Y cierto, no tiene ningún sentido, pero funciona, sea como sea.\c- + +\cfNo te pongas muy cómoda con esta, por cierto. Apuesto a que en cuanto le pilles el gusto no vas a ser capaz de volver a usar ninguna otra arma.\c- diff --git a/lore/es/modernsparkster.txt b/lore/es/modernsparkster.txt new file mode 100644 index 000000000..66f541efb --- /dev/null +++ b/lore/es/modernsparkster.txt @@ -0,0 +1,29 @@ +TAG +Rifle Sparkster +TXT +\cxDesignación:\c- +\cf Rifle Sparkster de Clase x3\c- +\cxFabricante:\c- +\cf Instituto Tecnológico Tach-Engine\c- +\cf Nekuraku Tekkanosei\c- +\cxClasificación:\c- +\cf Lanzador de Artillería de Plasma\c- + +El **Sparkster** comenzó como un intento de **Tecnologías Tach-Engine** de replicar las armas de energía de la difunta **Decade Mechanics**. Los primeros dos prototipos fueron un fracaso, al ver que no había forma de crear nada parecido remotamente a las Biosparks, una forma de munición de energía semi-pensante. + +Entonces, un descubrimiento llegó: ¿Por qué intentar copiar algo que jamás podrá ser realmente comprendido? ¿Por que no mantener las mismas bases internas del arma pero empleando munición distinta y más fácil de obtener? Y así, nació el linaje de Sparkster "moderno". Empleando cargas de plasma de alta densidad de **Nokron** y **Kinylum**, la serie x3 puede alcanzar el mismo potencial destructor que una artillería pesada, con menos peso, tamaño, y dificultad de operación. + +\cfFuego Primario:\c- Mantén para cargar una masa de plasma de Kinylum, suelta para liberarla en el mundo. El potencial destructivo es relativamente pequeño, pero deja un notable rastro ardiente a su paso, y en una densa nube donde impacta. + +\cfFuego Secundario:\c- Mantén para cargar una masa de plasma de Nokron, suelta para liberarla en el mundo. Aunque es inmediatamente más destructiva que la munición primaria, esta es menos estable, y tiende a salir como un estallido candente, en lugar de un proyectil. + +\cfRecarga Primaria:\c- Carga una célula de Kinylum. Se pueden tener hasta 3 en reserva. + +\cfRecarga Secundaria:\c- Carga una célula de Nokron. Misma capacidad de reserva. + +\cfTécnicas:\c- La carga de proyectil puede mantenerse de forma indefinida, ya que el arma se ventilará regularmente para estabilizar la potencia pico de ignición del arma. Esto puede permitir que uno simplemente cargue desde cobertura y salga para soltar el disparo cuando sea necesario. Adicionalmente, la posibilidad de pulsar ambos gatillos a la vez también está documentada, lo cual permite una potente descarga de plasma de Nokorokinylum, comparable a una pequeña bomba nuclear en potencial destructor. No se recomienda realizar un ataque combinado a menos que el objetivo esté lo suficientemente lejos para no poner en peligro al usuario. + +\cxNotas de Saya:\c- +\cfOstiaaaaaaaa esto si que es buena mierda. Será una vieja gloria de antes de la guerra, pero funciona tan bien que resulta que los modelos x4 y x5 son solo revisiones menores, por lo que me contó el viejales ese. No podemos pillarnos las nuevas por culpa de no se qué mierdas del Tratado de la Cicatriz Blanca, una pena, pero con esta nos llega.\c- + +\cfEs que en serio que mola, de verdad. Es básicamente un lanzacohetes y escopeta de plasma todo en uno. Y luego está la cosa del diseño, es que es tan limpio y futurista... Así son las cosas con Nekuratek, realmente. Dios es que me viene toda la nostalgia de aquellos tiempos de antaño cuando conseguí visitar Nahkami y vi sus fábricas y tal y todo era tan limpio y reluciente... Jo tío.\c- diff --git a/lore/es/rafankos.txt b/lore/es/rafankos.txt new file mode 100644 index 000000000..b5b231aaa --- /dev/null +++ b/lore/es/rafankos.txt @@ -0,0 +1,24 @@ +TXT +\cxDesignación:\c- +\cf Rafan-Kos ("Arma Definitiva")\c- +\cxFabricante:\c- +\cf Nekuraku Tekkanosei\c- +\cxDesignación:\c- +\cf Cañón de Haz de Partículas\c- + +Ideada por un supuestamente "loco" y "desquiciado" ingeniero de la División de Armas Avanzadas de **Nekuratek**, el desarrollo de este arma se vio interrumpido mucho antes de alcanzar sus ambiciosos planes. Citando que este ingeniero cuyo nombre no será revelado "jugó a demasiados videojuegos", fue interrumpido antes de que llegara a implementar la friolera de 15 diferentes modos de operación del arma, haciéndola extremadamente complicada, costosa y "completamente ridícula". + +El proyecto **Rafan-Kos** ("Arma Definitiva" en Nukuribaku) solo sería completado en parte una vez el jefe de ingeniería **Zanaveth Nekuraku I** se plantara personalmente para pedir que cesara tal "inanidad". El resultado final pareció satisfactorio a pesar de las quejas de su creador, y sería finalmente comercializado. + +El arma emplea **Kabbadon** como combustible, un subproducto común de la fusión de **Nokorokinylum**, haciéndolo así fácil de fabricar. Sin embargo, dada la densidad y pureza requeridas en la creación de una sola cápsula de combustible hacen que su precio escale dramáticamente. + +\cfFuego Primario:\c- Libera un radiante estallido de energía que se abre paso a través de todo, soltando chispas en todas direcciones a su paso y quemando objetivos cercanos. El estallido arde durante un total de cinco segundos antes de disiparse rápidamente. + +\cfFuego Secundario:\c- Libera varios estallidos dispersos en un cono amplio, con un potencial destructivo similar, pero ardiendo más rápido, con mayor intensidad, y disipándose mucho antes. + +\cfRecarga:\c- Coloca un nuevo cargador, cada uno almacenando cuatro cápsulas. + +\cxNotas de Saya:\c- +\cf¿"Arma Definitiva"? Menuda cursilada... Pero sabes, algo de todo esto hacía que me picotearan los sesos, y entonces todo encajó. Esta cosa es básicamente como esa carta de hechizo, la Chispa Maestra. Hostia, es que hasta suena y pinta igual...\c- + +\cfJoder, si mola y todo, en serio. Me gusta, así que la puse en el mismo sitio que las otras dos armas súper descoyuntantes.\c- diff --git a/lore/es/safetytether.txt b/lore/es/safetytether.txt new file mode 100644 index 000000000..f24da66c1 --- /dev/null +++ b/lore/es/safetytether.txt @@ -0,0 +1,40 @@ +TAG +Enlace Seguridad +TXT +\cxDesignación:\c- +\cf Enlace de Seguridad\c- +\cxFabricante:\c- +\cf Akari Labs\c- +\cf Cyrus Enterprises\c- +\cxClasificación:\c- +\cf Teletransporte de Emergencia de Corta Distancia\c- + +Lo que ves aquí es una extensión de la magia empleada en tu **Collar de la Suerte**, reutilizada y ajustada para permitir transportarte a demanda de vuelta a la entrada del área actual en la que te encuentras. Es bastante útil tenerlo en caso de que te encuentres atrapada en una sala sin escapatoria, y no tengas otros recursos para abrirte paso. El mundo de **Parthoris** es muy traicionero, tal como nos informaron los **Sidhe**, por lo que estas son esenciales, y pueden encontrarse en zonas donde se reporta que hay "habitaciones trampa". + +Simplemente gira ambos extremos en direcciones opuestas, y el dispositivo se encenderá. Si el usuario se encuentra ya cerca del punto de destino, el transporte será cancelado para evitar el uso accidental, de lo contrario, la luz se volverá azul y el transporte será realizado. + +\cxNotas de Saya:\c- +\cfAh, la forma perfecta de escapar una sala cerrada...\c- + +\cfPues sí, esto está basado en tu collar, funciona parecido también, excepto que no soy yo quien lo activa cuando estás en peligro de muerte, y sus efectos son más "dramáticos" (ya lo verás). Es magia simple, realmente. Esos idiotas de la UAC se cagarían los calzones si supieran que hemos tenido la magia para hacer teletransportes distantes, hasta entre universos, mucho antes de que existieran sus experimentos.\c- + +\cfEspero que a Misa no le importe que haya reutilizado uno de sus diseños de granada para esto.\c- +TXT +\cxDesignación:\c- +\cf Enlace de Seguridad\c- +\cxFabricante:\c- +\cf Akari Labs\c- +\cf Cyrus Enterprises\c- +\cxClasificación:\c- +\cf Teletransporte de Emergencia de Corta Distancia\c- + +Lo que ves aquí es una extensión de la magia empleada en tu **Collar de la Suerte**, reutilizada y ajustada para permitir transportarte a demanda de vuelta a la entrada del área actual en la que te encuentras. Es bastante útil tenerlo en caso de que te encuentres atrapada en una sala sin escapatoria, y no tengas otros recursos para abrirte paso. El mundo de **Parthoris** es muy traicionero, tal como nos informaron los **Sidhe**, por lo que estas son esenciales, y pueden encontrarse en zonas donde se reporta que hay "habitaciones trampa". Cabe asumir que **Cronos** tenga la misma clase de trampas, así que ten cuidado. + +Simplemente gira ambos extremos en direcciones opuestas, y el dispositivo se encenderá. Si el usuario se encuentra ya cerca del punto de destino, el transporte será cancelado para evitar el uso accidental, de lo contrario, la luz se volverá azul y el transporte será realizado. + +\cxNotas de Saya:\c- +\cfAh, la forma perfecta de escapar una sala cerrada...\c- + +\cfPues sí, esto está basado en tu collar, funciona parecido también, excepto que no soy yo quien lo activa cuando estás en peligro de muerte, y sus efectos son más "dramáticos" (ya lo verás). Es magia simple, realmente. Esos idiotas de la UAC se cagarían los calzones si supieran que hemos tenido la magia para hacer teletransportes distantes, hasta entre universos, mucho antes de que existieran sus experimentos.\c- + +\cfEspero que a Misa no le importe que haya reutilizado uno de sus diseños de granada para esto.\c- diff --git a/menudef.txt b/menudef.txt index 335e3b0f6..658532f0c 100644 --- a/menudef.txt +++ b/menudef.txt @@ -94,7 +94,6 @@ OptionMenu "SWWMOptionMenu" StaticText " " StaticText "$SWWM_OTITLE", "Blue" Option "$SWWM_SHADERS", "swwm_shaders", "YesNo" - Option "$SWWM_RAGESHADER", "swwm_rageshader", "YesNo" Slider "$SWWM_FLASH", "swwm_flashstrength", 0.0, 1.0, 0.1, 1 Slider "$SWWM_BUMP", "swwm_bumpstrength", 0.0, 1.0, 0.1, 1 Option "$SWWM_CAMHUD", "swwm_camhud", "YesNo" @@ -184,6 +183,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_ARMORUSE", "swwm_autousearmor", "YesNo" Option "$SWWM_HEALTHUSE", "swwm_autousehealth", "YesNo" Option "$SWWM_AMMOUSE", "swwm_autouseammo", "YesNo" + Option "$SWWM_BARRIERUSE", "swwm_autousebarrier", "YesNo" Option "$SWWM_SINGLEFIRST", "swwm_singlefirst", "YesNo" Option "$SWWM_EARBUSTER", "swwm_earbuster", "YesNo" Option "$SWWM_BUSTERPAUSE", "swwm_cbtpause", "YesNo" @@ -195,6 +195,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_SVARMORUSE", "swwm_enforceautousearmor", "SWWMEnforce" Option "$SWWM_SVHEALTHUSE", "swwm_enforceautousehealth", "SWWMEnforce" Option "$SWWM_SVAMMOUSE", "swwm_enforceautouseammo", "SWWMEnforce" + Option "$SWWM_SVBARRIERUSE", "swwm_enforceautousebarrier", "SWWMEnforce" Option "$SWWM_OTHERVOICE", "swwm_othervoice", "YesNo" StaticText " " StaticText "$SWWM_MCTITLE", "Blue" diff --git a/modeldef.dlcammo2 b/modeldef.dlcammo2 new file mode 100644 index 000000000..70047162e --- /dev/null +++ b/modeldef.dlcammo2 @@ -0,0 +1,119 @@ +Model "SparksterBAmmo" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SparksterRAmmo" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} + +Model "MisterRound" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MisterAmmo" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.03 0.03 0.03 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MisterGAmmo" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MisterGAmmo2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MisterGAmmo3" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.03 0.03 0.03 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} + +Model "UltimatePod" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.03 0.03 0.03 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "UltimateAmmo" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.04 0.04 0.04 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.fistgun b/modeldef.fistgun new file mode 100644 index 000000000..037f2b553 --- /dev/null +++ b/modeldef.fistgun @@ -0,0 +1,13 @@ +Model "FistGun" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.04 0.04 0.04 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.mortalrifle b/modeldef.mortalrifle new file mode 100644 index 000000000..320c976d4 --- /dev/null +++ b/modeldef.mortalrifle @@ -0,0 +1,13 @@ +Model "EMPCarbine" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.05 0.05 0.05 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.newsparkster b/modeldef.newsparkster new file mode 100644 index 000000000..6baf9ea09 --- /dev/null +++ b/modeldef.newsparkster @@ -0,0 +1,13 @@ +Model "ModernSparkster" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.05 0.05 0.05 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.rafankos b/modeldef.rafankos new file mode 100644 index 000000000..e2e39fff6 --- /dev/null +++ b/modeldef.rafankos @@ -0,0 +1,13 @@ +Model "RafanKos" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.055 0.055 0.055 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/models/extra/dlc/MRBolt.png b/models/extra/dlc/MRBolt.png new file mode 100644 index 000000000..3fbadf285 Binary files /dev/null and b/models/extra/dlc/MRBolt.png differ diff --git a/models/extra/dlc/MRBoltS.png b/models/extra/dlc/MRBoltS.png new file mode 100644 index 000000000..d90a9b295 Binary files /dev/null and b/models/extra/dlc/MRBoltS.png differ diff --git a/models/extra/dlc/MRMuz0.png b/models/extra/dlc/MRMuz0.png new file mode 100644 index 000000000..365c90734 Binary files /dev/null and b/models/extra/dlc/MRMuz0.png differ diff --git a/models/extra/dlc/MRMuz1.png b/models/extra/dlc/MRMuz1.png new file mode 100644 index 000000000..26321d4eb Binary files /dev/null and b/models/extra/dlc/MRMuz1.png differ diff --git a/models/extra/dlc/MRMuz2.png b/models/extra/dlc/MRMuz2.png new file mode 100644 index 000000000..c82d652a0 Binary files /dev/null and b/models/extra/dlc/MRMuz2.png differ diff --git a/models/extra/dlc/MRMuz3.png b/models/extra/dlc/MRMuz3.png new file mode 100644 index 000000000..08e93382f Binary files /dev/null and b/models/extra/dlc/MRMuz3.png differ diff --git a/models/extra/dlc/NewSparkMuzK.png b/models/extra/dlc/NewSparkMuzK.png new file mode 100644 index 000000000..c53667361 Binary files /dev/null and b/models/extra/dlc/NewSparkMuzK.png differ diff --git a/models/extra/dlc/NewSparkMuzN.png b/models/extra/dlc/NewSparkMuzN.png new file mode 100644 index 000000000..0b02a5a9c Binary files /dev/null and b/models/extra/dlc/NewSparkMuzN.png differ diff --git a/models/extra/dlc/NewSparkMuzNK.png b/models/extra/dlc/NewSparkMuzNK.png new file mode 100644 index 000000000..8f9a0ade7 Binary files /dev/null and b/models/extra/dlc/NewSparkMuzNK.png differ diff --git a/models/extra/dlc/UltimaMuz0.png b/models/extra/dlc/UltimaMuz0.png new file mode 100644 index 000000000..4c084b65e Binary files /dev/null and b/models/extra/dlc/UltimaMuz0.png differ diff --git a/models/extra/dlc/UltimaMuz1.png b/models/extra/dlc/UltimaMuz1.png new file mode 100644 index 000000000..3a313302a Binary files /dev/null and b/models/extra/dlc/UltimaMuz1.png differ diff --git a/models/extra/dlc/UltimaMuz2.png b/models/extra/dlc/UltimaMuz2.png new file mode 100644 index 000000000..c6b71e525 Binary files /dev/null and b/models/extra/dlc/UltimaMuz2.png differ diff --git a/models/extra/dlc/UltimaMuz3.png b/models/extra/dlc/UltimaMuz3.png new file mode 100644 index 000000000..4b471ebd6 Binary files /dev/null and b/models/extra/dlc/UltimaMuz3.png differ diff --git a/models/extra/dlc/UltimaTrail.png b/models/extra/dlc/UltimaTrail.png new file mode 100644 index 000000000..e297cc04f Binary files /dev/null and b/models/extra/dlc/UltimaTrail.png differ diff --git a/models/matcap/kinymap.png b/models/matcap/kinymap.png new file mode 100644 index 000000000..a93b427c7 Binary files /dev/null and b/models/matcap/kinymap.png differ diff --git a/models/matcap/nkrknmap.png b/models/matcap/nkrknmap.png new file mode 100644 index 000000000..50eb0aa4c Binary files /dev/null and b/models/matcap/nkrknmap.png differ diff --git a/models/matcap/nokromap.png b/models/matcap/nokromap.png new file mode 100644 index 000000000..18234fea6 Binary files /dev/null and b/models/matcap/nokromap.png differ diff --git a/models/matcap/pearlmap.png b/models/matcap/pearlmap.png new file mode 100644 index 000000000..97840fca4 Binary files /dev/null and b/models/matcap/pearlmap.png differ diff --git a/models/modelnotes.txt b/models/modelnotes.txt index 27f3bdce6..9c1ef1c9c 100644 --- a/models/modelnotes.txt +++ b/models/modelnotes.txt @@ -34,6 +34,11 @@ Key gestures: # Post-release stuff +Extra items: + - Safety Tether + - Devastation Sigil + - DivineSprite + Character models: - White Lady @@ -48,7 +53,7 @@ Extra collectibles: - Lithium Vol.1 - Psykkonovexx -# DLC Weaponset +# DLC Weaponset 1 Weapon models: - Itamex Hammer @@ -81,3 +86,23 @@ Ammo models: - Grand Lance Ammo - Single - Mag + +# DLC Weaponset 2 + +Weapon models: + - Hand of Divine + - Sparkster Rifle + - Mortal Rifle + - Rafan-Kos + +Ammo models: + - Sparkster Ammo + - Mortal Rifle Ammo + - Round + - Mag + - 1 Grenade + - 2 Grenades + - 3 Grenades + - Rafan-Kos Ammo + - Pod + - Mag diff --git a/shaders/pp/Ragescreen.fp b/shaders/pp/Ragescreen.fp index dee9650f4..0caa7be56 100644 --- a/shaders/pp/Ragescreen.fp +++ b/shaders/pp/Ragescreen.fp @@ -1,4 +1,4 @@ -// RAGE +// less eye-searing rage #define TWOPI 6.28318530718 @@ -6,15 +6,15 @@ void main() { vec2 uv = TexCoord; vec3 col = texture(InputTexture,uv).rgb; - col *= vec3(.5)+texture(WarpTex,vec2(fract(uv.x+.1*sin(uv.y*TWOPI)),fract(uv.y-timer*.1))).rgb*xtrastr; - col *= vec3(.5)+texture(WarpTex,2.*vec2(fract(uv.x+.1*cos(uv.y*TWOPI)),fract(uv.y-timer*.1))).rgb*xtrastr; + col *= vec3(.6)+texture(WarpTex,vec2(fract(uv.x+.1*sin(uv.y*TWOPI)),fract(uv.y-timer*.1))).rgb*xtrastr*.8; + col *= vec3(.6)+texture(WarpTex,2.*vec2(fract(uv.x+.1*cos(uv.y*TWOPI)),fract(uv.y-timer*.1))).rgb*xtrastr*.8; for ( float i=0.; i<4.; i+=1. ) { - float str = texture(NoiseTex,vec2(fract(timer*.2),fract(timer*.02))).x*.07; - str *= pow(xtrastr,1.5); + float str = texture(NoiseTex,vec2(fract(timer*.2),fract(timer*.02))).x*.01; + str *= pow(xtrastr,.75); float p = distance(uv,vec2(.5)); vec2 suv = (uv-.5)*(1.-(str*i*p))+.5; - col += texture(InputTexture,suv).rgb+pow(p,2.)*vec3(1.8,.2,0.)*xtrastr; + col += texture(InputTexture,suv).rgb+pow(p,5.)*vec3(.45,.05,0.)*xtrastr; } col /= 5.; col *= vec3(1.2,.9,.7); diff --git a/shaders/pp/RagescreenAlt.fp b/shaders/pp/RagescreenAlt.fp deleted file mode 100644 index 929231c75..000000000 --- a/shaders/pp/RagescreenAlt.fp +++ /dev/null @@ -1,22 +0,0 @@ -// less eye-searing rage - -#define TWOPI 6.28318530718 - -void main() -{ - vec2 uv = TexCoord; - vec3 col = texture(InputTexture,uv).rgb; - col *= vec3(.8)+texture(WarpTex,vec2(fract(uv.x+.1*sin(uv.y*TWOPI)),fract(uv.y-timer*.1))).rgb*xtrastr*.4; - col *= vec3(.8)+texture(WarpTex,2.*vec2(fract(uv.x+.1*cos(uv.y*TWOPI)),fract(uv.y-timer*.1))).rgb*xtrastr*.4; - for ( float i=0.; i<3.; i+=1. ) - { - float str = texture(NoiseTex,vec2(fract(timer*.2),fract(timer*.02))).x*.007; - str *= pow(xtrastr,2.); - float p = distance(uv,vec2(.5)); - vec2 suv = (uv-.5)*(1.-(str*i*p))+.5; - col += texture(InputTexture,suv).rgb+pow(p,5.)*vec3(.45,.05,0.)*xtrastr; - } - col /= 4.; - col *= vec3(1.1,.95,.85); - FragColor = vec4(col,1.0); -} diff --git a/sndinfo.txt b/sndinfo.txt index 13790322c..3182fc725 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -16,6 +16,7 @@ bruh sounds/BRUH.ogg squeak sounds/SQUEAK.ogg recordscratch sounds/RECSCRAP.ogg compat/warn sounds/UTWARN.ogg +hahaha/hahaha sounds/HAHAHA.ogg saya/giggle1 sounds/saya/saya_giggle1.ogg saya/giggle2 sounds/saya/saya_giggle2.ogg diff --git a/sounds/HAHAHA.ogg b/sounds/HAHAHA.ogg new file mode 100644 index 000000000..9f29a2db0 Binary files /dev/null and b/sounds/HAHAHA.ogg differ diff --git a/sprites/dlc/NSFLA0.png b/sprites/dlc/NSFLA0.png new file mode 100644 index 000000000..66158639c Binary files /dev/null and b/sprites/dlc/NSFLA0.png differ diff --git a/sprites/dlc/NSFLB0.png b/sprites/dlc/NSFLB0.png new file mode 100644 index 000000000..1c9927aa5 Binary files /dev/null and b/sprites/dlc/NSFLB0.png differ diff --git a/sprites/dlc/NSFLC0.png b/sprites/dlc/NSFLC0.png new file mode 100644 index 000000000..c489161c0 Binary files /dev/null and b/sprites/dlc/NSFLC0.png differ diff --git a/sprites/dlc/RFXPA0.png b/sprites/dlc/RFXPA0.png new file mode 100644 index 000000000..d3bd56a1a Binary files /dev/null and b/sprites/dlc/RFXPA0.png differ diff --git a/sprites/dlc/RFXPB0.png b/sprites/dlc/RFXPB0.png new file mode 100644 index 000000000..6649b36f9 Binary files /dev/null and b/sprites/dlc/RFXPB0.png differ diff --git a/sprites/dlc/RFXPC0.png b/sprites/dlc/RFXPC0.png new file mode 100644 index 000000000..72cb17b0d Binary files /dev/null and b/sprites/dlc/RFXPC0.png differ diff --git a/sprites/dlc/RFXPD0.png b/sprites/dlc/RFXPD0.png new file mode 100644 index 000000000..1cd8fa0ef Binary files /dev/null and b/sprites/dlc/RFXPD0.png differ diff --git a/sprites/dlc/RFXPE0.png b/sprites/dlc/RFXPE0.png new file mode 100644 index 000000000..43188a0e1 Binary files /dev/null and b/sprites/dlc/RFXPE0.png differ diff --git a/sprites/dlc/RFXPF0.png b/sprites/dlc/RFXPF0.png new file mode 100644 index 000000000..4ba67ce26 Binary files /dev/null and b/sprites/dlc/RFXPF0.png differ diff --git a/sprites/dlc/RFXPG0.png b/sprites/dlc/RFXPG0.png new file mode 100644 index 000000000..7769c78ae Binary files /dev/null and b/sprites/dlc/RFXPG0.png differ diff --git a/sprites/dlc/RFXPH0.png b/sprites/dlc/RFXPH0.png new file mode 100644 index 000000000..fc2d0de92 Binary files /dev/null and b/sprites/dlc/RFXPH0.png differ diff --git a/sprites/dlc/RFXPI0.png b/sprites/dlc/RFXPI0.png new file mode 100644 index 000000000..5b502947c Binary files /dev/null and b/sprites/dlc/RFXPI0.png differ diff --git a/sprites/dlc/RFXPJ0.png b/sprites/dlc/RFXPJ0.png new file mode 100644 index 000000000..2fab93384 Binary files /dev/null and b/sprites/dlc/RFXPJ0.png differ diff --git a/sprites/dlc/RFXPK0.png b/sprites/dlc/RFXPK0.png new file mode 100644 index 000000000..3a1201704 Binary files /dev/null and b/sprites/dlc/RFXPK0.png differ diff --git a/sprites/dlc/RFXPL0.png b/sprites/dlc/RFXPL0.png new file mode 100644 index 000000000..48dc73115 Binary files /dev/null and b/sprites/dlc/RFXPL0.png differ diff --git a/sprites/dlc/RFXPM0.png b/sprites/dlc/RFXPM0.png new file mode 100644 index 000000000..55b1e04b4 Binary files /dev/null and b/sprites/dlc/RFXPM0.png differ diff --git a/sprites/dlc/RFXPN0.png b/sprites/dlc/RFXPN0.png new file mode 100644 index 000000000..f44cf99c4 Binary files /dev/null and b/sprites/dlc/RFXPN0.png differ diff --git a/sprites/dlc/RFXPO0.png b/sprites/dlc/RFXPO0.png new file mode 100644 index 000000000..93ac928ef Binary files /dev/null and b/sprites/dlc/RFXPO0.png differ diff --git a/sprites/dlc/RFXPP0.png b/sprites/dlc/RFXPP0.png new file mode 100644 index 000000000..842426992 Binary files /dev/null and b/sprites/dlc/RFXPP0.png differ diff --git a/sprites/dlc/RFXPQ0.png b/sprites/dlc/RFXPQ0.png new file mode 100644 index 000000000..50fc0ec71 Binary files /dev/null and b/sprites/dlc/RFXPQ0.png differ diff --git a/sprites/dlc/RFXPR0.png b/sprites/dlc/RFXPR0.png new file mode 100644 index 000000000..b12ca35b4 Binary files /dev/null and b/sprites/dlc/RFXPR0.png differ diff --git a/sprites/dlc/RFXPS0.png b/sprites/dlc/RFXPS0.png new file mode 100644 index 000000000..cfb4c7a0a Binary files /dev/null and b/sprites/dlc/RFXPS0.png differ diff --git a/sprites/dlc/RFXPT0.png b/sprites/dlc/RFXPT0.png new file mode 100644 index 000000000..111c4d854 Binary files /dev/null and b/sprites/dlc/RFXPT0.png differ diff --git a/sprites/dlc/RFXPU0.png b/sprites/dlc/RFXPU0.png new file mode 100644 index 000000000..ef20c5a24 Binary files /dev/null and b/sprites/dlc/RFXPU0.png differ diff --git a/sprites/dlc/RFXPV0.png b/sprites/dlc/RFXPV0.png new file mode 100644 index 000000000..caa1c96cb Binary files /dev/null and b/sprites/dlc/RFXPV0.png differ diff --git a/sprites/dlc/RFXPW0.png b/sprites/dlc/RFXPW0.png new file mode 100644 index 000000000..7bb9fc056 Binary files /dev/null and b/sprites/dlc/RFXPW0.png differ diff --git a/sprites/dlc/RFXPX0.png b/sprites/dlc/RFXPX0.png new file mode 100644 index 000000000..61ce0e463 Binary files /dev/null and b/sprites/dlc/RFXPX0.png differ diff --git a/sprites/dlc/RFXPY0.png b/sprites/dlc/RFXPY0.png new file mode 100644 index 000000000..7d5a78b32 Binary files /dev/null and b/sprites/dlc/RFXPY0.png differ diff --git a/sprites/dlc/RFXPZ0.png b/sprites/dlc/RFXPZ0.png new file mode 100644 index 000000000..053e92bdd Binary files /dev/null and b/sprites/dlc/RFXPZ0.png differ diff --git a/sprites/dlc/RFXP[0.png b/sprites/dlc/RFXP[0.png new file mode 100644 index 000000000..3a65b7af5 Binary files /dev/null and b/sprites/dlc/RFXP[0.png differ diff --git a/sprites/dlc/RFXP^0.png b/sprites/dlc/RFXP^0.png new file mode 100644 index 000000000..195f953b1 Binary files /dev/null and b/sprites/dlc/RFXP^0.png differ diff --git a/textcolors.txt b/textcolors.txt index 6b88e6761..a2eb7939e 100644 --- a/textcolors.txt +++ b/textcolors.txt @@ -48,3 +48,47 @@ Console: Flat: #9999FF } + +// VIP item colors +VIPPurple +{ + #230023 #7733FF +Console: + #000000 #7F009F 0 127 + #A000FF #FFFFFF 128 256 +Flat: + #7339E6 +} + +VIPGold +{ + #39264D #CC793D 0 127 + #CC793D #FFD580 128 256 +Console: + #39264D #CC793D 0 127 + #CC793D #FFD580 128 256 +Flat: + #CC793D +} + +VIPBrown +{ + #39264D #80593B 0 127 + #80593B #CCA37A 128 256 +Console: + #39264D #80593B 0 127 + #80593B #CCA37A 128 256 +Flat: + #80593B +} + +VIPTan +{ + #39264D #998B79 0 127 + #998B79 #E6CEB6 128 256 +Console: + #39264D #998B79 0 127 + #998B79 #E6CEB6 128 256 +Flat: + #998B79 +} diff --git a/textures/roughwarp.png b/textures/roughwarp.png new file mode 100644 index 000000000..10944d1e4 Binary files /dev/null and b/textures/roughwarp.png differ diff --git a/tools/mkpk3.sh b/tools/mkpk3.sh index 59e326830..bdabc7ec4 100755 --- a/tools/mkpk3.sh +++ b/tools/mkpk3.sh @@ -1,5 +1,5 @@ #!/bin/sh WORKDIR=$(readlink -f $0 | sed 's/\(swwmgz_m\)\(.*\)/\1/') pushd "$WORKDIR" -7z a -tzip -mx=9 -x@tools/excl.lst -up0q0r2x2y2z1w2 ../swwmgz_m.pk3 . +7z a -tzip -mx=9 -x@tools/excl.lst -up0q0r2x2y2z1w2 ../swwmgz${1}_m.pk3 . popd diff --git a/tools/mkpk7.sh b/tools/mkpk7.sh index fe5889304..013a29a83 100755 --- a/tools/mkpk7.sh +++ b/tools/mkpk7.sh @@ -1,5 +1,5 @@ #!/bin/sh WORKDIR=$(readlink -f $0 | sed 's/\(swwmgz_m\)\(.*\)/\1/') pushd "$WORKDIR" -7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off -x@tools/excl.lst -up0q0r2x2y2z1w2 ../swwmgz_m.pk7 . +7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off -x@tools/excl.lst -up0q0r2x2y2z1w2 ../swwmgz${1}_m.pk7 . popd diff --git a/zscript.txt b/zscript.txt index 621dbdb4c..9e40f31f5 100644 --- a/zscript.txt +++ b/zscript.txt @@ -128,10 +128,20 @@ version "4.6" #include "zscript/dlc1/swwm_thiccbolts_fx.zsc" #include "zscript/dlc1/swwm_hugeassrailgun.zsc" #include "zscript/dlc1/swwm_hugeassrailgun_fx.zsc" -// DLC2 - Game Set -#include "zscript/dlc2/swwm_tetris.zsc" -#include "zscript/dlc2/swwm_pong.zsc" -#include "zscript/dlc2/swwm_snake.zsc" -#include "zscript/dlc2/swwm_demoland.zsc" -#include "zscript/dlc2/swwm_demoshmup.zsc" -#include "zscript/dlc2/swwm_demoquest.zsc" +// DLC2 - Weapon Set 2 +#include "zscript/dlc2/swwm_ammoitems_dlc2.zsc" +#include "zscript/dlc2/swwm_fisto.zsc" +#include "zscript/dlc2/swwm_fisto_fx.zsc" +#include "zscript/dlc2/swwm_blueballs.zsc" +#include "zscript/dlc2/swwm_blueballs_fx.zsc" +#include "zscript/dlc2/swwm_mister.zsc" +#include "zscript/dlc2/swwm_mister_fx.zsc" +#include "zscript/dlc2/swwm_ultimate.zsc" +#include "zscript/dlc2/swwm_ultimate_fx.zsc" +// DLC3 - Game Set +#include "zscript/dlc3/swwm_tetris.zsc" +#include "zscript/dlc3/swwm_pong.zsc" +#include "zscript/dlc3/swwm_snake.zsc" +#include "zscript/dlc3/swwm_demoland.zsc" +#include "zscript/dlc3/swwm_demoshmup.zsc" +#include "zscript/dlc3/swwm_demoquest.zsc" diff --git a/zscript/dlc1/swwm_ammoitems_dlc.zsc b/zscript/dlc1/swwm_ammoitems_dlc.zsc index fc760ac4a..78003ab84 100644 --- a/zscript/dlc1/swwm_ammoitems_dlc.zsc +++ b/zscript/dlc1/swwm_ammoitems_dlc.zsc @@ -455,7 +455,7 @@ Class GrandAmmo : Ammo //$Icon ammo Tag "$T_GRANDAMMO"; Inventory.PickupMessage "$T_GRANDAMMO"; - Stamina 1200000; + Stamina -1200000; Inventory.Icon "graphics/HUD/Icons/A_GrandAmmo.png"; Inventory.Amount 1; Inventory.MaxAmount 1; diff --git a/zscript/dlc1/swwm_hugeassrailgun.zsc b/zscript/dlc1/swwm_hugeassrailgun.zsc index 841ff9136..bb142fec6 100644 --- a/zscript/dlc1/swwm_hugeassrailgun.zsc +++ b/zscript/dlc1/swwm_hugeassrailgun.zsc @@ -29,7 +29,7 @@ Class GrandLance : SWWMWeapon SWWMWeapon.DropAmmoType "GrandAmmo"; GrandLance.ClipCount 5; GrandLance.ClipCount2 500; - Stamina 4200000; + Stamina -4200000; +SWWMWEAPON.NOFIRSTGIVE; +WEAPON.PRIMARY_USES_BOTH; +WEAPON.EXPLOSIVE; diff --git a/zscript/dlc2/swwm_ammoitems_dlc2.zsc b/zscript/dlc2/swwm_ammoitems_dlc2.zsc new file mode 100644 index 000000000..ab7a3933a --- /dev/null +++ b/zscript/dlc2/swwm_ammoitems_dlc2.zsc @@ -0,0 +1,306 @@ +// All DLC weapon ammo pickups + +Class SparksterBAmmo : Ammo +{ + Mixin SWWMAmmo; + Mixin SWWMOverlapPickupSound; + Mixin SWWMUseToPickup; + Mixin SWWMRespawn; + + Default + { + //$Title Sparkster Blue Ammo + //$Group Ammo + //$Sprite graphics/HUD/Icons/A_SparkBAmmo.png + //$Icon ammo + Tag "$T_SPARKBAMMO"; + Inventory.PickupMessage "$T_SPARKBAMMO"; + Stamina 16000; + Inventory.Icon "graphics/HUD/Icons/A_SparkBAmmo.png"; + Inventory.Amount 1; + Inventory.MaxAmount 8; + Ammo.BackpackAmount 1; + Ammo.BackpackMaxAmount 24; + Ammo.DropAmount 1; + +FLOATBOB; + FloatBobStrength 0.25; + Accuracy 70; + } + override void ModifyDropAmount( int dropamount ) + { + Super.ModifyDropAmount(dropamount); + Amount = min(Amount,1); + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} + +Class SparksterRAmmo : Ammo +{ + Mixin SWWMAmmo; + Mixin SWWMOverlapPickupSound; + Mixin SWWMUseToPickup; + Mixin SWWMRespawn; + + Default + { + //$Title Sparkster Red Ammo + //$Group Ammo + //$Sprite graphics/HUD/Icons/A_SparkRAmmo.png + //$Icon ammo + Tag "$T_SPARKRAMMO"; + Inventory.PickupMessage "$T_SPARKRAMMO"; + Stamina 18000; + Inventory.Icon "graphics/HUD/Icons/A_SparkRAmmo.png"; + Inventory.Amount 1; + Inventory.MaxAmount 8; + Ammo.BackpackAmount 1; + Ammo.BackpackMaxAmount 24; + Ammo.DropAmount 1; + +FLOATBOB; + FloatBobStrength 0.25; + Accuracy 75; + } + override void ModifyDropAmount( int dropamount ) + { + Super.ModifyDropAmount(dropamount); + Amount = min(Amount,1); + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} + +Class SparksterAmmoBundleSpawn : SWWMAmmoSpawner +{ + override void SpawnAmmo() + { + int bnd = Random[Bundle](2,3); + for ( int i=0; i 200 ) p.Health = p.mo.Health = 200; } override void PlayerRespawned( PlayerEvent e ) diff --git a/zscript/handler/swwm_handler_replacements.zsc b/zscript/handler/swwm_handler_replacements.zsc index f58c227d8..42d7e96be 100644 --- a/zscript/handler/swwm_handler_replacements.zsc +++ b/zscript/handler/swwm_handler_replacements.zsc @@ -693,29 +693,28 @@ extend Class SWWMHandler else if ( e.Replacee is 'Mana2' ) e.Replacement = 'FabricatorTier2'; else if ( e.Replacee is 'Mana3' ) e.Replacement = 'FabricatorTier3'; else if ( e.Replacee is 'ArtiBoostMana' ) e.Replacement = 'FabricatorTier4'; - else if ( (e.Replacee is 'Backpack') || (e.Replacee is 'BagOfHolding') || (e.Replacee is 'ArtiPork') ) e.Replacement = 'HammerspaceEmbiggener'; - else if ( (e.Replacee is 'FWeaponPiece1') || (e.Replacee is 'FWeaponPiece2') + else if ( (e.Replacee is 'Backpack') || (e.Replacee is 'BagOfHolding') + || (e.Replacee is 'FWeaponPiece1') || (e.Replacee is 'FWeaponPiece2') || (e.Replacee is 'CWeaponPiece1') || (e.Replacee is 'CWeaponPiece3') - || (e.Replacee is 'MWeaponPiece2') || (e.Replacee is 'MWeaponPiece3') ) e.Replacement = 'SWWMNothing'; + || (e.Replacee is 'MWeaponPiece2') || (e.Replacee is 'MWeaponPiece3') ) e.Replacement = 'HammerspaceEmbiggener'; else if ( e.Replacee is 'ArmorBonus' ) e.Replacement = 'ArmorNuggetItem'; else if ( e.Replacee is 'HealthBonus' ) e.Replacement = 'HealthNuggetItem'; else if ( (e.Replacee is 'ArtiTimeBomb') || (e.Replacee is 'ArtiBlastRadius') || (e.Replacee is 'ArtiPoisonBag') || (e.Replacee is 'ArtiHealingRadius') ) e.Replacement = (nugflip=!nugflip)?'HealthNuggetBundleSpawn':'ArmorNuggetBundleSpawn'; - else if ( (e.Replacee is 'HealthBonus') ) e.Replacement = 'HealthNuggetItem'; else if ( (e.Replacee is 'Stimpack') || (e.Replacee is 'CrystalVial') ) e.Replacement = 'TetraHealthItem'; else if ( (e.Replacee is 'Medikit') || (e.Replacee is 'ArtiHealth') ) e.Replacement = 'CubeHealthItem'; else if ( (e.Replacee is 'Soulsphere') || (e.Replacee is 'ArtiSuperHealth') ) e.Replacement = 'RefresherItem'; else if ( (e.Replacee is 'Megasphere') || (e.Replacee is 'ArtiEgg') || (e.Replacee is 'ArtiBoostArmor') ) e.Replacement = 'GrilledCheeseSandwich'; - else if ( (e.Replacee is 'Blursphere') || (e.Replacee is 'ArtiInvisibility') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('Mykradvo',worldonly:true))?'GhostArtifact':'Mykradvo'; + else if ( (e.Replacee is 'Blursphere') || (e.Replacee is 'ArtiInvisibility') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('Mykradvo',worldonly:true)||!SWWMUtility.CheckNeedsItem('Mykradvo',true))?'GhostArtifact':'Mykradvo'; else if ( e.Replacee is 'Radsuit' ) e.Replacement = 'EBarrier'; else if ( (e.Replacee is 'ArtiFly') ) e.Replacement = 'GravitySuppressor'; - else if ( (e.Replacee is 'InvulnerabilitySphere') || (e.Replacee is 'ArtiInvulnerability') || (e.Replacee is 'ArtiInvulnerability2') ) e.Replacement = (deathmatch||Random[Replacements](0,3)||SWWMUtility.ItemExists('Mykradvo',worldonly:true))?'FuckingInvinciball':'Mykradvo'; - else if ( (e.Replacee is 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('Mykradvo',worldonly:true))?'Ragekit':'Mykradvo'; + else if ( (e.Replacee is 'InvulnerabilitySphere') || (e.Replacee is 'ArtiInvulnerability') || (e.Replacee is 'ArtiInvulnerability2') ) e.Replacement = (deathmatch||Random[Replacements](0,3)||SWWMUtility.ItemExists('Mykradvo',worldonly:true)||!SWWMUtility.CheckNeedsItem('Mykradvo',true))?'FuckingInvinciball':'Mykradvo'; + else if ( (e.Replacee is 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('Mykradvo',worldonly:true)||!SWWMUtility.CheckNeedsItem('Mykradvo',true))?'Ragekit':'Mykradvo'; else if ( (e.Replacee is 'AllMap') || (e.Replacee is 'SuperMap') ) e.Replacement = 'Omnisight'; else if ( (e.Replacee is 'Infrared') || (e.Replacee is 'ArtiTorch') ) e.Replacement = 'SWWMLamp'; else if ( (e.Replacee is 'GreenArmor') || (e.Replacee is 'SilverShield') || (e.Replacee is 'PlatinumHelm') || (e.Replacee is 'AmuletOfWarding') ) e.Replacement = 'BlastSuitItem'; else if ( (e.Replacee is 'BlueArmor') || (e.Replacee is 'EnchantedShield') || (e.Replacee is 'MeshArmor') || (e.Replacee is 'FalconShield') ) e.Replacement = 'WarArmorItem'; - else if ( (e.Replacee is 'ArtiDarkServant') || (e.Replacee == 'ArtiTeleportOther') ) e.Replacement = 'ChanceboxSpawner'; - else if ( e.Replacee is 'ArtiTeleport' ) e.Replacement = (gameinfo.GameType&GAME_Hexen)?'ChanceboxSpawner':'SWWMNothing'; + else if ( (e.Replacee is 'ArtiDarkServant') || (e.Replacee == 'ArtiTeleportOther') || (e.Replacee == 'ArtiPork') ) e.Replacement = 'ChanceboxSpawner'; + else if ( e.Replacee is 'ArtiTeleport' ) e.Replacement = 'SWWMNothing'; else { if ( profiling ) checkreplacement_ms += MSTime()-curms; diff --git a/zscript/handler/swwm_handler_shaders.zsc b/zscript/handler/swwm_handler_shaders.zsc index c226d7159..131b7e3d5 100644 --- a/zscript/handler/swwm_handler_shaders.zsc +++ b/zscript/handler/swwm_handler_shaders.zsc @@ -2,18 +2,17 @@ extend Class SWWMHandler { - static clearscope void ClearAllShaders( PlayerInfo p ) + static clearscope void ClearAllShaders( PlayerInfo p, bool noscope = false ) { Shader.SetEnabled(p,"WaterWarp",false); Shader.SetEnabled(p,"LavaWarp",false); Shader.SetEnabled(p,"SlimeWarp",false); Shader.SetEnabled(p,"ZoomBlur",false); - Shader.SetEnabled(p,"SilverScope",false); + if ( !noscope ) Shader.SetEnabled(p,"SilverScope",false); Shader.SetEnabled(p,"BarrierShader",false); Shader.SetEnabled(p,"GhostShader",false); Shader.SetEnabled(p,"InvinciShader",false); Shader.SetEnabled(p,"RagekitShader",false); - Shader.SetEnabled(p,"RagekitAltShader",false); Shader.SetEnabled(p,"Glitch",false); Shader.SetEnabled(p,"Grain",false); } @@ -22,38 +21,26 @@ extend Class SWWMHandler { PlayerInfo p = players[consoleplayer]; let mo = p.mo; - if ( !mo ) return; bool pc = (p.camera == mo); + if ( !mo || !swwm_shaders || !pc ) + { + if ( !swwm_shaders ) ClearAllShaders(p,true); + return; + } let rage = RagekitPower(mo.FindInventory("RagekitPower")); - if ( pc && rage && swwm_shaders ) + if ( rage ) { - if ( swwm_rageshader ) - { - Shader.SetEnabled(p,"RagekitShader",false); - Shader.SetEnabled(p,"RagekitAltShader",true); - Shader.SetUniform1f(p,"RagekitAltShader","timer",(gametic+e.FracTic)/GameTicRate); - double xstrastr = 1.+max(0,rage.lastpulse-(gametic+e.Fractic))/35.; - Shader.SetUniform1f(p,"RagekitAltShader","xtrastr",xstrastr**2.); - } - else - { - Shader.SetEnabled(p,"RagekitAltShader",false); - Shader.SetEnabled(p,"RagekitShader",true); - Shader.SetUniform1f(p,"RagekitShader","timer",(gametic+e.FracTic)/GameTicRate); - double xstrastr = 1.+max(0,rage.lastpulse-(gametic+e.Fractic))/35.; - Shader.SetUniform1f(p,"RagekitShader","xtrastr",xstrastr**2.); - } - } - else - { - Shader.SetEnabled(p,"RagekitShader",false); - Shader.SetEnabled(p,"RagekitAltShader",false); + Shader.SetEnabled(p,"RagekitShader",true); + Shader.SetUniform1f(p,"RagekitShader","timer",(gametic+e.FracTic)/GameTicRate); + double xstrastr = 1.+max(0,rage.lastpulse-(gametic+e.Fractic))/35.; + Shader.SetUniform1f(p,"RagekitShader","xtrastr",xstrastr**2.); } + else Shader.SetEnabled(p,"RagekitShader",false); let ghost = GhostPower(mo.FindInventory("GhostPower")); - if ( pc && ghost && swwm_shaders ) Shader.SetEnabled(p,"GhostShader",true); + if ( ghost ) Shader.SetEnabled(p,"GhostShader",true); else Shader.SetEnabled(p,"GhostShader",false); let sunny = InvinciballPower(mo.FindInventory("InvinciballPower")); - if ( pc && sunny && swwm_shaders ) + if ( sunny ) { Shader.SetEnabled(p,"InvinciShader",true); double str = max(0,sunny.lastpulse-(gametic+e.Fractic))/35.; @@ -61,82 +48,13 @@ extend Class SWWMHandler } else Shader.SetEnabled(p,"InvinciShader",false); let coat = BarrierPower(mo.FindInventory("BarrierPower")); - if ( pc && coat && swwm_shaders ) + if ( coat ) { Shader.SetEnabled(p,"BarrierShader",true); Shader.SetUniform1f(p,"BarrierShader","timer",(gametic+e.FracTic)/GameTicRate); } else Shader.SetEnabled(p,"BarrierShader",false); - if ( pc && (mo is 'Demolitionist') && swwm_shaders ) - { - let demo = Demolitionist(mo); - if ( demo.lastunder == Demolitionist.UNDER_WATER ) - { - Shader.SetEnabled(p,"WaterWarp",true); - Shader.SetUniform1f(p,"WaterWarp","timer",(gametic+e.FracTic)/GameTicRate); - Shader.SetUniform1f(p,"WaterWarp","dfact",coat?.25:1.); - Shader.SetUniform3f(p,"WaterWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); - - } - else Shader.SetEnabled(p,"WaterWarp",false); - if ( demo.lastunder == Demolitionist.UNDER_LAVA ) - { - Shader.SetEnabled(p,"LavaWarp",true); - Shader.SetUniform1f(p,"LavaWarp","timer",(gametic+e.FracTic)/GameTicRate); - Shader.SetUniform1f(p,"LavaWarp","dfact",coat?.25:1.); - Shader.SetUniform3f(p,"LavaWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); - } - else Shader.SetEnabled(p,"LavaWarp",false); - if ( demo.lastunder == Demolitionist.UNDER_SLIME ) - { - Shader.SetEnabled(p,"SlimeWarp",true); - Shader.SetUniform1f(p,"SlimeWarp","timer",(gametic+e.FracTic)/GameTicRate); - Shader.SetUniform1f(p,"SlimeWarp","dfact",coat?.25:1.); - Shader.SetUniform3f(p,"SlimeWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); - } - else Shader.SetEnabled(p,"SlimeWarp",false); - int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80); - int lastdmgtic = (demo.Health>0)?demo.lastdamagetic:(gametic+Random[Flicker](30,20)); - double noiz = min(lastdmg*.09*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.5); - Shader.SetEnabled(p,"Glitch",noiz>0); - Shader.SetEnabled(p,"Grain",noiz>0); - if ( noiz > 0 ) - { - Shader.SetUniform1f(p,"Glitch","Timer",(gametic+e.FracTic)/GameTicRate); - Shader.SetUniform1f(p,"Grain","Timer",(gametic+e.FracTic)/GameTicRate); - Shader.SetUniform1f(p,"Grain","ni",noiz); - noiz = min(lastdmg*.08*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.8); - Shader.SetUniform1f(p,"Glitch","str1",noiz); - noiz = min(lastdmg*.03*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),3.5); - Shader.SetUniform1f(p,"Glitch","str2",noiz); - } - if ( !demo.InStateSequence(demo.CurState,demo.FindState("Dash")) ) - { - Shader.SetEnabled(p,"ZoomBlur",false); - return; - } - Shader.SetEnabled(p,"ZoomBlur",true); - Vector3 vel = demo.vel+demo.dashdir*demo.dashboost; - double baumpu = max(0.,(demo.bumptic-(gametic+e.Fractic))/35.); - vel += demo.dashdir*baumpu; - double spd = vel.length(); - Vector3 worlddir = vel/spd; - Shader.SetUniform1f(p,"ZoomBlur","Fade",clamp((spd-20.)/60.,0.,1.)); - double str = min(spd/40.,15.); - Vector3 x, y, z; - [x, y, z] = swwm_CoordUtil.GetAxes(e.ViewPitch,e.ViewAngle,e.ViewRoll); - Vector3 reldir = (worlddir dot y, worlddir dot z, worlddir dot x); - Vector2 centerspot = (.5+reldir.x*.5,.5+reldir.y*.5); - if ( reldir.z < 0 ) - { - centerspot.x = 1.-centerspot.x; - centerspot.y = 1.-centerspot.y; - str *= -1; - } - Shader.SetUniform1f(p,"ZoomBlur","Str",str); - Shader.SetUniform2f(p,"ZoomBlur","CenterSpot",centerspot); - } - else + if ( !(mo is 'Demolitionist') ) { Shader.SetEnabled(p,"WaterWarp",false); Shader.SetEnabled(p,"LavaWarp",false); @@ -144,6 +62,73 @@ extend Class SWWMHandler Shader.SetEnabled(p,"Glitch",false); Shader.SetEnabled(p,"Grain",false); Shader.SetEnabled(p,"ZoomBlur",false); + return; } + let demo = Demolitionist(mo); + if ( demo.lastunder == Demolitionist.UNDER_WATER ) + { + Shader.SetEnabled(p,"WaterWarp",true); + Shader.SetUniform1f(p,"WaterWarp","timer",(gametic+e.FracTic)/GameTicRate); + Shader.SetUniform1f(p,"WaterWarp","dfact",coat?.25:1.); + Shader.SetUniform3f(p,"WaterWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); + + } + else Shader.SetEnabled(p,"WaterWarp",false); + if ( demo.lastunder == Demolitionist.UNDER_LAVA ) + { + Shader.SetEnabled(p,"LavaWarp",true); + Shader.SetUniform1f(p,"LavaWarp","timer",(gametic+e.FracTic)/GameTicRate); + Shader.SetUniform1f(p,"LavaWarp","dfact",coat?.25:1.); + Shader.SetUniform3f(p,"LavaWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); + } + else Shader.SetEnabled(p,"LavaWarp",false); + if ( demo.lastunder == Demolitionist.UNDER_SLIME ) + { + Shader.SetEnabled(p,"SlimeWarp",true); + Shader.SetUniform1f(p,"SlimeWarp","timer",(gametic+e.FracTic)/GameTicRate); + Shader.SetUniform1f(p,"SlimeWarp","dfact",coat?.25:1.); + Shader.SetUniform3f(p,"SlimeWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); + } + else Shader.SetEnabled(p,"SlimeWarp",false); + int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80); + int lastdmgtic = (demo.Health>0)?demo.lastdamagetic:(gametic+Random[Flicker](30,20)); + double noiz = min(lastdmg*.09*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.5); + Shader.SetEnabled(p,"Glitch",noiz>0); + Shader.SetEnabled(p,"Grain",noiz>0); + if ( noiz > 0 ) + { + Shader.SetUniform1f(p,"Glitch","Timer",(gametic+e.FracTic)/GameTicRate); + Shader.SetUniform1f(p,"Grain","Timer",(gametic+e.FracTic)/GameTicRate); + Shader.SetUniform1f(p,"Grain","ni",noiz); + noiz = min(lastdmg*.08*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.8); + Shader.SetUniform1f(p,"Glitch","str1",noiz); + noiz = min(lastdmg*.03*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),3.5); + Shader.SetUniform1f(p,"Glitch","str2",noiz); + } + if ( !demo.InStateSequence(demo.CurState,demo.FindState("Dash")) ) + { + Shader.SetEnabled(p,"ZoomBlur",false); + return; + } + Shader.SetEnabled(p,"ZoomBlur",true); + Vector3 vel = demo.vel+demo.dashdir*demo.dashboost; + double baumpu = max(0.,(demo.bumptic-(gametic+e.Fractic))/35.); + vel += demo.dashdir*baumpu; + double spd = vel.length(); + Vector3 worlddir = vel/spd; + Shader.SetUniform1f(p,"ZoomBlur","Fade",clamp((spd-20.)/60.,0.,1.)); + double str = min(spd/40.,15.); + Vector3 x, y, z; + [x, y, z] = swwm_CoordUtil.GetAxes(e.ViewPitch,e.ViewAngle,e.ViewRoll); + Vector3 reldir = (worlddir dot y, worlddir dot z, worlddir dot x); + Vector2 centerspot = (.5+reldir.x*.5,.5+reldir.y*.5); + if ( reldir.z < 0 ) + { + centerspot.x = 1.-centerspot.x; + centerspot.y = 1.-centerspot.y; + str *= -1; + } + Shader.SetUniform1f(p,"ZoomBlur","Str",str); + Shader.SetUniform2f(p,"ZoomBlur","CenterSpot",centerspot); } } diff --git a/zscript/handler/swwm_handler_worldtick.zsc b/zscript/handler/swwm_handler_worldtick.zsc index b3c3cb65c..9fadf5771 100644 --- a/zscript/handler/swwm_handler_worldtick.zsc +++ b/zscript/handler/swwm_handler_worldtick.zsc @@ -51,7 +51,7 @@ extend Class SWWMHandler if ( players[i].itemcount > lastitemcount[i] ) { int score = 10*(players[i].itemcount-lastitemcount[i]); - if ( !deathmatch && (level.total_items == level.found_items) && !allitems ) + if ( !deathmatch && !(gameinfo.gametype&GAME_Hexen) && (level.total_items == level.found_items) && !allitems ) { allitems = true; Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),500); @@ -128,6 +128,8 @@ extend Class SWWMHandler { // not in DM if ( deathmatch ) return; + // not in Hexen, due to its fully hub-based nature + if ( gameinfo.gametype&GAME_Hexen ) return; if ( !mapclear && (restartmus > 0) ) { restartmus--; diff --git a/zscript/items/swwm_ammoitems.zsc b/zscript/items/swwm_ammoitems.zsc index 6390efde6..2ddea1d0a 100644 --- a/zscript/items/swwm_ammoitems.zsc +++ b/zscript/items/swwm_ammoitems.zsc @@ -21,14 +21,14 @@ Class RedShell : Ammo Inventory.Icon "graphics/HUD/Icons/A_ShellsNormal.png"; Inventory.Amount 1; Inventory.MaxAmount 30; - Ammo.BackpackAmount 3; + Ammo.BackpackAmount 2; Ammo.BackpackMaxAmount 80; Ammo.DropAmount 2; +FLOATBOB; FloatBobStrength 0.25; Radius 4; Height 20; - Accuracy 30; + Accuracy 50; } States { @@ -88,7 +88,7 @@ Class GreenShell : Ammo FloatBobStrength 0.25; Radius 4; Height 20; - Accuracy 35; + Accuracy 55; } States { @@ -147,7 +147,7 @@ Class WhiteShell : Ammo +FLOATBOB; FloatBobStrength 0.25; Radius 4; - Accuracy 50; + Accuracy 70; } States { @@ -207,7 +207,7 @@ Class BlueShell : Ammo FloatBobStrength 0.25; Radius 4; Height 20; - Accuracy 45; + Accuracy 65; } States { @@ -267,7 +267,7 @@ Class BlackShell : Ammo FloatBobStrength 0.25; Radius 4; Height 20; - Accuracy 60; + Accuracy 75; } States { @@ -327,7 +327,7 @@ Class PurpleShell : Ammo FloatBobStrength 0.25; Radius 4; Height 20; - Accuracy 40; + Accuracy 60; } States { @@ -484,14 +484,14 @@ Class EvisceratorShell : Ammo Inventory.Icon "graphics/HUD/Icons/A_Eviscerator.png"; Inventory.Amount 1; Inventory.MaxAmount 20; - Ammo.BackpackAmount 2; + Ammo.BackpackAmount 1; Ammo.BackpackMaxAmount 60; Ammo.DropAmount 1; +FLOATBOB; FloatBobStrength 0.25; Radius 8; Height 22; - Accuracy 40; + Accuracy 60; } override void ModifyDropAmount( int dropamount ) { @@ -566,7 +566,7 @@ Class HellblazerMissiles : Ammo FloatBobStrength 0.25; Radius 6; Height 22; - Accuracy 60; + Accuracy 70; } override void ModifyDropAmount( int dropamount ) { @@ -635,7 +635,7 @@ Class HellblazerCrackshots : Ammo FloatBobStrength 0.25; Radius 6; Height 22; - Accuracy 70; + Accuracy 75; } override void ModifyDropAmount( int dropamount ) { @@ -760,7 +760,7 @@ Class HellblazerWarheads : Ammo FloatBobStrength 0.25; Radius 6; Height 22; - Accuracy 90; + Accuracy 85; } override void ModifyDropAmount( int dropamount ) { @@ -820,7 +820,7 @@ Class SparkUnit : Ammo FloatBobStrength 0.25; Radius 6; Height 22; - Accuracy 50; + Accuracy 70; } override void ModifyDropAmount( int dropamount ) { @@ -879,7 +879,7 @@ Class SilverBulletAmmo : Ammo FloatBobStrength 0.25; Radius 10; Height 26; - Accuracy 60; + Accuracy 75; } override void ModifyDropAmount( int dropamount ) { @@ -931,7 +931,7 @@ Class SilverBulletAmmo2 : Ammo FloatBobStrength 0.25; Radius 10; Height 26; - Accuracy 70; + Accuracy 80; } override void ModifyDropAmount( int dropamount ) { @@ -1067,7 +1067,7 @@ Class CandyGunAmmo : Ammo FloatBobStrength 0.25; Radius 6; Height 24; - Accuracy 80; + Accuracy 90; } override void ModifyDropAmount( int dropamount ) { @@ -1186,7 +1186,7 @@ Class YnykronAmmo : Ammo //$Icon ammo Tag "$T_YNYKRONAMMO"; Inventory.PickupMessage "$T_YNYKRONAMMO"; - Stamina 3000000; + Stamina -3000000; Inventory.Icon "graphics/HUD/Icons/A_Ynykron.png"; Inventory.Amount 1; Inventory.MaxAmount 1; diff --git a/zscript/items/swwm_ammospawn.zsc b/zscript/items/swwm_ammospawn.zsc index 500ab40c5..557cc4e87 100644 --- a/zscript/items/swwm_ammospawn.zsc +++ b/zscript/items/swwm_ammospawn.zsc @@ -18,22 +18,21 @@ Class SWWMShellAmmoSmall : SWWMAmmoSpawner { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) ) return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BundleSpawn';*/ - switch( Random[Replacements](0,9) ) + switch( Random[Replacements](0,8) ) { case 0: case 1: case 2: - case 3: return 'RedShell'; + case 3: case 4: case 5: - case 6: return 'GreenShell'; + case 6: case 7: - case 8: return 'PurpleShell'; } - // case 9 + // case 8 return 'BlueShell'; } } @@ -44,11 +43,10 @@ Class SWWMShellAmmoBig : SWWMAmmoSpawner static Class PickAmmo( bool notondemand = false ) { // shell types (sorted by rarity) - static const Class redpool[] = {'RedShell','RedShell2','RedShell4'}; - static const Class greenpool[] = {'GreenShell','GreenShell2','GreenShell4'}; - static const Class whitepool[] = {'WhiteShell','WhiteShell2'}; - static const Class purplepool[] = {'PurpleShell','PurpleShell2','PurpleShell4'}; - static const Class bluepool[] = {'BlueShell','BlueShell2','BlueShell4'}; + static const Class redpool[] = {'RedShell','RedShell2'}; + static const Class greenpool[] = {'GreenShell','GreenShell2'}; + static const Class purplepool[] = {'PurpleShell','PurpleShell2'}; + static const Class bluepool[] = {'BlueShell','BlueShell2'}; /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) ) return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BigAmmo';*/ switch( Random[Replacements](0,20) ) @@ -58,28 +56,27 @@ Class SWWMShellAmmoBig : SWWMAmmoSpawner case 2: case 3: case 4: + return redpool[Random[Replacements](0,1)]; case 5: - return redpool[Random[Replacements](0,2)]; case 6: case 7: case 8: case 9: + return greenpool[Random[Replacements](0,1)]; case 10: - return greenpool[Random[Replacements](0,2)]; case 11: case 12: case 13: + return purplepool[Random[Replacements](0,1)]; case 14: - return purplepool[Random[Replacements](0,2)]; case 15: case 16: + return bluepool[Random[Replacements](0,1)]; case 17: - return bluepool[Random[Replacements](0,2)]; case 18: - case 19: - return whitepool[Random[Replacements](0,1)]; + return 'WhiteShell'; } - // case 20 + // case 19-20 return 'BlackShell'; } } @@ -91,7 +88,7 @@ Class SWWMClipAmmoBig : SWWMAmmoSpawner { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) ) return Random[Replacements](0,2)?'SheenSmallAmmo':'SheenBigAmmo';*/ - return Random[Replacements](0,3)?'EvisceratorShell':'EvisceratorBundleSpawn'; + return Random[Replacements](0,5)?'EvisceratorShell':'EvisceratorBundleSpawn'; } } Class SWWMBlastAmmoSmall : SWWMAmmoSpawner @@ -113,7 +110,7 @@ Class SWWMBlastAmmoBig : SWWMAmmoSpawner { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) ) return Random[Replacements](0,2)?'SheenBigAmmo':'SheenSmallAmmo';*/ - return 'EvisceratorBundleSpawn'; + return Random[Replacements](0,2)?'EvisceratorShell':'EvisceratorBundleSpawn'; } } Class SWWMRocketAmmoSmall : SWWMAmmoSpawner @@ -122,6 +119,7 @@ Class SWWMRocketAmmoSmall : SWWMAmmoSpawner static Class PickAmmo( bool notondemand = false ) { + /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('ModernSparkster')) ) return Random[Replacements](0,2)?'SparksterBAmmo':'SparksterRAmmo';*/ /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('Quadravol')) ) return 'QuadravolAmmo';*/ return Random[Replacements](0,2)?'HellblazerMissiles':'HellblazerCrackshots'; } @@ -132,6 +130,8 @@ Class SWWMRocketAmmoBig : SWWMAmmoSpawner static Class PickAmmo( bool notondemand = false ) { + /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('ModernSparkster')) ) + return Random[Replacements](0,2)?'SparksterAmmoBundleSpawn':'SparksterBigAmmoBundleSpawn';*/ /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('Quadravol')) ) return Random[Replacements](0,2)?'QuadravolAmmo':'QuadravolAmmoBundleSpawn';*/ switch ( Random[Replacements](0,11) ) @@ -141,12 +141,12 @@ Class SWWMRocketAmmoBig : SWWMAmmoSpawner case 2: case 3: case 4: - return Random[Replacements](0,2)?'HellblazerMissiles':'HellblazerMissileBundleSpawn'; + return Random[Replacements](0,4)?'HellblazerMissiles':'HellblazerMissileBundleSpawn'; case 5: case 6: case 7: case 8: - return Random[Replacements](0,3)?'HellblazerCrackshots':'HellblazerCrackshotBundleSpawn'; + return Random[Replacements](0,7)?'HellblazerCrackshots':'HellblazerCrackshotBundleSpawn'; case 9: case 10: return 'HellblazerRavagers'; @@ -166,6 +166,7 @@ Class SWWMCellAmmoSmall : SWWMAmmoSpawner { if ( !Random[Replacements](0,3) ) { + /*if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return 'MisterGAmmo';*/ /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('RayKhom')) ) return 'RayBolt';*/ if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return 'CandyGunBullets'; } @@ -182,9 +183,19 @@ Class SWWMCellAmmoBig : SWWMAmmoSpawner static Class PickAmmo( bool notondemand = false ) { + if ( !Random[Replacements](0,3) ) + { + //if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('GrandLance')) && SWWMUtility.CheckNeedsItem('GrandAmmo',true) && !SWWMUtility.ItemExists('GrandAmmo',worldonly:true) && !SWWMUtility.ItemExists('GrandLance',worldonly:true) ) + // return 'GrandAmmo'; + //if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('RafanKos')) && SWWMUtility.CheckNeedsItem('UltimateAmmo',true) && !SWWMUtility.ItemExists('UltimateAmmo',worldonly:true) && !SWWMUtility.ItemExists('RafanKos',worldonly:true) ) + // return 'UltimateAmmo'; + if ( (notondemand || SWWMUtility.ItemExists('Ynykron')) && SWWMUtility.CheckNeedsItem('YnykronAmmo',true) && !SWWMUtility.ItemExists('YnykronAmmo',worldonly:true) && !SWWMUtility.ItemExists('Ynykron',worldonly:true) ) + return 'YnykronAmmo'; + } /*if ( Random[Replacements](0,1) ) { if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return Random[Replacements](0,3)?'EMPCoreBundleSpawn':'EMPCore'; + if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return Random[Replacements](0,2)?'MisterRoundBundleSpawn':'MisterAmmo'; if ( notondemand || SWWMUtility.ItemExists('RayKhom') ) return Random[Replacements](0,2)?'RayBoltBundleSpawn':'RayAmmo'; }*/ if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('SilverBullet')) ) @@ -192,8 +203,8 @@ Class SWWMCellAmmoBig : SWWMAmmoSpawner if ( Random[Replacements](0,3) ) return Random[Replacements](0,2)?'SilverBulletsBundleSpawn':'SilverBullets2BundleSpawn'; return Random[Replacements](0,2)?'SilverBulletAmmo':'SilverBulletAmmo2'; } - if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return Random[Replacements](0,2)?'CandyGunBulletsBundleSpawn':'CandyGunAmmo'; + if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return Random[Replacements](0,3)?'CandyGunBulletsBundleSpawn':'CandyGunAmmo'; /*if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('BlackfireIgniter')) ) return 'DarkCanister';*/ - return Random[Replacements](0,2)?'SparkUnit':'SparkUnitBundleSpawn'; + return Random[Replacements](0,3)?'SparkUnit':'SparkUnitBundleSpawn'; } } diff --git a/zscript/items/swwm_basearmor.zsc b/zscript/items/swwm_basearmor.zsc index e08c0b065..e1d843187 100644 --- a/zscript/items/swwm_basearmor.zsc +++ b/zscript/items/swwm_basearmor.zsc @@ -97,7 +97,7 @@ Class SWWMArmor : Armor abstract if ( (amount <= 0) || DamageTypeDefinition.IgnoreArmor(damageType) || (damage <= 0) ) return; SWWMHandler.DoFlash(Owner,Color(int(clamp(damage*.15,1,16)),255,224,192),3); - Owner.A_StartSound("armor/hit",CHAN_BODY,CHANF_DEFAULT,clamp(damage*.03,0.,1.),2.5); + Owner.A_StartSound("armor/hit",CHAN_DAMAGE,CHANF_OVERLAP,clamp(damage*.03,0.,1.),2.5); saved = HandleDamage(damage,damageType,flags); int healed = max(0,saved-damage); saved = min(saved,damage); @@ -117,7 +117,7 @@ Class SWWMArmor : Armor abstract else shouldautouse = CVar.GetCVar('swwm_autousearmor',Owner.player).GetBool(); if ( (amount <= (MaxAmount-default.Amount)) && (Owner.CountInv(parent) > 0) && shouldautouse ) { - if ( GetDefaultByType(parent).UseSound ) Owner.A_StartSound(GetDefaultByType(parent).UseSound,CHAN_ITEMEXTRA,CHANF_DEFAULT,.6); + if ( GetDefaultByType(parent).UseSound ) Owner.A_StartSound(GetDefaultByType(parent).UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP,.6); int tgive = 0; while ( (amount <= (MaxAmount-default.Amount)) && (Owner.CountInv(parent) > 0) ) { @@ -164,7 +164,7 @@ Class SWWMSpareArmor : Inventory abstract let cur = Owner.FindInventory(giveme); if ( !cur || (!pickup && (cur.Amount < cur.MaxAmount)) || (GetDefaultByType(giveme).Amount+cur.Amount <= cur.MaxAmount) ) { - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); Owner.GiveInventory(giveme,GetDefaultByType(giveme).Amount); SWWMHandler.ArmorFlash(Owner.PlayerNumber()); SWWMScoreObj.Spawn(GetDefaultByType(giveme).Amount,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),ST_Armor); diff --git a/zscript/items/swwm_basehealth.zsc b/zscript/items/swwm_basehealth.zsc index c6756a5d1..c99de2e05 100644 --- a/zscript/items/swwm_basehealth.zsc +++ b/zscript/items/swwm_basehealth.zsc @@ -128,7 +128,7 @@ Class SWWMHealth : Inventory abstract let hnd = SWWMHandler(EventHandler.Find("SWWMHandler")); if ( hnd ) hnd.tookdamage[Owner.PlayerNumber()] = true; } - if ( ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); int tgive = 0; bool morethanonce = false; while ( (Amount > 0) && (newdamage > 0) ) diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index 67b89bbdb..a3be4e8f8 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -723,13 +723,31 @@ Class ChanceboxSpawner : Actor return; } int numbox = 0; - let ti = ThinkerIterator.Create("ChanceboxSpawner"); + ThinkerIterator ti = ThinkerIterator.Create("Chancebox"); while ( ti.Next() ) numbox++; - ti = ThinkerIterator.Create("Chancebox"); - while ( ti.Next() ) numbox++; - if ( numbox > 3 ) + if ( numbox >= 3 ) { - // there's three boxes in the map already (plus ourselves) + // there's three boxes in the map already + Destroy(); + return; + } + BlockLinesIterator bl = BlockLinesIterator.CreateFromPos(pos,32,32,CurSector); + double tbox[4]; + // top, bottom, left, right + tbox[0] = pos.y+32; + tbox[1] = pos.y-32; + tbox[2] = pos.x-32; + tbox[3] = pos.x+32; + while ( bl.Next() ) + { + Line l = bl.CurLine; + if ( !l ) continue; + if ( tbox[2] > l.bbox[3] ) continue; + if ( tbox[3] < l.bbox[2] ) continue; + if ( tbox[0] < l.bbox[1] ) continue; + if ( tbox[1] > l.bbox[0] ) continue; + if ( SWWMUtility.BoxOnLineSide(tbox[0],tbox[1],tbox[2],tbox[3],l) != -1 ) continue; + // there isn't enough space to spawn a box here Destroy(); return; } @@ -929,7 +947,15 @@ Class Chancebox : Actor // no candidates? just burst into treats if ( Random[Chancebox](0,1) ) { - let a = Spawn((!Random[Chancebox](0,2)&&SWWMUtility.ItemExists("Spreadgun"))?"GoldShell":(Random[Chancebox](0,1)&&SWWMUtility.ItemExists("Ynykron"))?"YnykronAmmo":"GrilledCheeseSandwich",pos); + Class vipammodrop = null; + if ( SWWMUtility.ItemExists("Ynykron") && Random[Chancebox](0,1) ) vipammodrop = "YnykronAmmo"; + //if ( SWWMUtility.ItemExists("GrandLance") && Random[Chancebox](0,1) && !vipammodrop ) vipammodrop = "GrandAmmo"; + //if ( SWWMUtility.ItemExists("RafanKos") && Random[Chancebox](0,1) && !vipammodrop ) vipammodrop = "UltimateAmmo"; + if ( SWWMUtility.ItemExists("Spreadgun") && SWWMUtility.CheckNeedsItem("GoldShell",true) && !vipammodrop ) vipammodrop = "GoldShell"; + Class vipitemdrop = null; + if ( SWWMUtility.CheckNeedsItem("Mykradvo",true) && !SWWMUtility.ItemExists("Mykradvo",worldonly:true) && Random[Chancebox](0,1) ) vipitemdrop = "Mykradvo"; + if ( !vipitemdrop ) vipitemdrop = "GrilledCheeseSandwich"; + let a = Spawn((!Random[Chancebox](0,2)&&vipammodrop)?vipammodrop:vipitemdrop,pos); a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); diff --git a/zscript/items/swwm_health.zsc b/zscript/items/swwm_health.zsc index 61053bc95..d8e529f9d 100644 --- a/zscript/items/swwm_health.zsc +++ b/zscript/items/swwm_health.zsc @@ -57,7 +57,7 @@ Class RefresherRegen : Powerup if ( !Owner.GiveBody(int(Strength),500) ) return; SWWMScoreObj.Spawn(int(Strength),Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),ST_Health); SWWMHandler.DoFlash(Owner,Color(32,224,128,255),10); - Owner.A_StartSound("powerup/refresher",CHAN_ITEM,CHANF_LOCAL,.4); + Owner.A_StartSound("powerup/refresher",CHAN_ITEMEXTRA,CHANF_LOCAL|CHANF_OVERLAP,.4); if ( Owner is 'Demolitionist' ) Demolitionist(Owner).lastbump *= 0.99; } diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index 947b55a13..9654828d1 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -86,7 +86,7 @@ Class GrilledCheeseSandwich : Inventory { if ( pickup && !deathmatch ) return false; if ( Owner.Health > 500 ) return false; - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); DoTheThing(); return true; } @@ -115,7 +115,7 @@ Class GrilledCheeseSandwich : Inventory if ( damageType == 'InstantDeath' ) SafeTeleport(); // get out of pits newdamage = 0; - if ( (Owner.player == players[consoleplayer]) || bBigPowerup ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( (Owner.player == players[consoleplayer]) || bBigPowerup ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); DoTheThing(true); Amount--; } @@ -135,7 +135,7 @@ Class GrilledCheeseSandwich : Inventory safepos = lastsafepos[4]; safeangle = lastsafeangle[4]; } - Owner.Teleport(safepos,safeangle,TF_TELEFRAG|TF_FORCED|TF_USESPOTZ|TF_NOFOG); + Owner.Teleport(safepos,safeangle,0); } override void DoEffect() { @@ -241,6 +241,15 @@ Class GrilledCheeseSandwich : Inventory } } +Mixin Class SWWMShadedPowerup +{ + override Color GetBlend() + { + if ( swwm_shaders ) return 0; + return Super.GetBlend(); + } +} + Class GhostSnd : Actor { Default @@ -334,6 +343,8 @@ Class GhostTarget : Actor Class GhostPower : PowerInvisibility { + Mixin SWWMShadedPowerup; + Actor snd; Default @@ -360,7 +371,7 @@ Class GhostPower : PowerInvisibility { Super.EndEffect(); if ( !Owner ) return; - Owner.A_StartSound("powerup/ghostend",CHAN_ITEMEXTRA); + Owner.A_StartSound("powerup/ghostend",CHAN_ITEMEXTRA,CHANF_OVERLAP); SWWMHandler.DoFlash(Owner,Color(96,224,192,255),20); if ( Owner is 'Demolitionist' ) Demolitionist(Owner).lastbump *= 1.02; @@ -484,7 +495,7 @@ Class GhostArtifact : Inventory override bool Use( bool pickup ) { if ( pickup && !deathmatch ) return false; - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); let g = GhostPower(Owner.FindInventory("GhostPower")); if ( g ) { @@ -569,6 +580,8 @@ Class GravSnd : Actor Class GravityPower : Powerup { + Mixin SWWMShadedPowerup; + Actor snd; Default @@ -598,7 +611,7 @@ Class GravityPower : Powerup Owner.bNOGRAVITY = false; if ( Owner.pos.z > Owner.floorz ) Owner.player.centering = true; } - Owner.A_StartSound("powerup/gravityend",CHAN_ITEMEXTRA); + Owner.A_StartSound("powerup/gravityend",CHAN_ITEMEXTRA,CHANF_OVERLAP); if ( Owner is 'Demolitionist' ) Demolitionist(Owner).lastbump *= 1.02; if ( (EffectTics <= 0) && Owner && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_GRAVITYS")); @@ -636,7 +649,7 @@ Class GravitySuppressor : Inventory override bool Use( bool pickup ) { if ( pickup && !deathmatch ) return false; - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); let g = GravityPower(Owner.FindInventory("GravityPower")); if ( g ) { @@ -765,6 +778,8 @@ Class InvinciSnd : Actor Class InvinciballPower : Powerup { + Mixin SWWMShadedPowerup; + Actor l, snd; int lasteffect; transient int lastpulse; @@ -804,7 +819,7 @@ Class InvinciballPower : Powerup { Super.EndEffect(); if ( !Owner ) return; - Owner.A_StartSound("powerup/invinciballend",CHAN_ITEMEXTRA); + Owner.A_StartSound("powerup/invinciballend",CHAN_ITEMEXTRA,CHANF_OVERLAP); SWWMHandler.DoFlash(Owner,Color(96,255,64,0),20); if ( Owner is 'Demolitionist' ) Demolitionist(Owner).lastbump *= 1.05; @@ -846,7 +861,7 @@ Class InvinciballPower : Powerup if ( level.maptime > lasteffect+5 ) { SWWMHandler.DoFlash(Owner,Color(64,255,64,0),15); - Owner.A_StartSound("powerup/invinciballhit",CHAN_POWERUP); + Owner.A_StartSound("powerup/invinciballhit",CHAN_POWERUP,CHANF_OVERLAP); lasteffect = level.maptime; lastpulse = max(lastpulse,gametic+20); if ( Owner is 'Demolitionist' ) @@ -881,7 +896,7 @@ Class FuckingInvinciball : Inventory override bool Use( bool pickup ) { if ( pickup && !deathmatch ) return false; - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); Owner.A_StartSound("misc/sundowner",CHAN_POWERUPEXTRA); let i = InvinciballPower(Owner.FindInventory("InvinciballPower")); if ( i ) @@ -1014,6 +1029,8 @@ Class RageSnd : Actor Class RagekitPower : Powerup { + Mixin SWWMShadedPowerup; + Actor l, snd; int lasteffect; transient int lastpulse, lastrage; @@ -1071,7 +1088,7 @@ Class RagekitPower : Powerup lastrage = SWWMHandler.AddOneliner("ragekit",2,5)+40; Owner.A_QuakeEx(2,2,2,Random[Rage](1,2),0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.5); lastpulse = max(lastpulse,gametic+10); - Demolitionist(Owner).lastbump *= .98; + Demolitionist(Owner).lastbump *= .995; } } @@ -1079,7 +1096,7 @@ Class RagekitPower : Powerup { Super.EndEffect(); if ( !Owner ) return; - Owner.A_StartSound("powerup/ragekitend",CHAN_ITEMEXTRA); + Owner.A_StartSound("powerup/ragekitend",CHAN_ITEMEXTRA,CHANF_OVERLAP); SWWMHandler.DoFlash(Owner,Color(128,255,0,0),30); Owner.A_QuakeEx(4,4,4,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); Owner.A_AlertMonsters(2000); @@ -1120,7 +1137,7 @@ Class RagekitPower : Powerup Owner.A_QuakeEx(8,8,8,Random[Rage](3,8),0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); if ( (Owner.player == players[consoleplayer]) && (gametic > lastrage) && (swwm_mutevoice < 2) ) lastrage = SWWMHandler.AddOneliner("ragekit",2,5)+40; - Owner.A_StartSound("powerup/ragekithit",CHAN_POWERUP); + Owner.A_StartSound("powerup/ragekithit",CHAN_POWERUP,CHANF_OVERLAP); lasteffect = level.maptime; lastpulse = max(lastpulse,gametic+35); Demolitionist(Owner).lastbump *= .9; @@ -1250,7 +1267,7 @@ Class Omnisight : Inventory { if ( Owner.player == players[consoleplayer] ) { - Owner.A_StartSound("powerup/omnisight",CHAN_ITEMEXTRA); + Owner.A_StartSound("powerup/omnisight",CHAN_ITEMEXTRA,CHANF_OVERLAP); // automatically zoom out so the player can know how far this goes CVar.FindCVar('swwm_mm_zoom').SetFloat(2.); } @@ -1268,7 +1285,7 @@ Class Omnisight : Inventory if ( i == consoleplayer ) { Console.Printf(StringTable.Localize("$D_OMNISHARE"),Owner.player.GetUserName()); - players[i].mo.A_StartSound("powerup/omnisight",CHAN_ITEMEXTRA); + players[i].mo.A_StartSound("powerup/omnisight",CHAN_ITEMEXTRA,CHANF_OVERLAP); // automatically zoom out so the player can know how far this goes CVar.FindCVar('swwm_mm_zoom').SetFloat(2.); } @@ -1843,7 +1860,7 @@ Class CompanionLamp : Actor { if ( SWWMLamp(master) && SWWMLamp(master).bActive ) { - A_StartSound("lamp/on",CHAN_ITEMEXTRA); + A_StartSound("lamp/on",CHAN_ITEMEXTRA,CHANF_OVERLAP); return ResolveState("Active"); } return ResolveState(null); @@ -1855,7 +1872,7 @@ Class CompanionLamp : Actor A_Moth(); if ( !SWWMLamp(master) || !SWWMLamp(master).bActive ) { - A_StartSound("lamp/off",CHAN_ITEMEXTRA); + A_StartSound("lamp/off",CHAN_ITEMEXTRA,CHANF_OVERLAP); return ResolveState("Spawn"); } return ResolveState(null); @@ -1970,7 +1987,7 @@ Class SWWMLamp : Inventory bActive = false; bActivated = false; } - clearscope bool isBlinking() + clearscope bool isBlinking() const { return ( (Charge < 10) && (level.maptime&8) ); } @@ -2071,6 +2088,8 @@ Class BarrierSnd : Actor Class BarrierPower : PowerIronFeet { + Mixin SWWMShadedPowerup; + Actor snd, l; Default @@ -2126,7 +2145,7 @@ Class BarrierPower : PowerIronFeet { Super.EndEffect(); if ( !Owner ) return; - Owner.A_StartSound("powerup/barrierend",CHAN_ITEMEXTRA); + Owner.A_StartSound("powerup/barrierend",CHAN_ITEMEXTRA,CHANF_OVERLAP); if ( Owner is 'Demolitionist' ) Demolitionist(Owner).lastbump *= 0.95; if ( (EffectTics <= 0) && Owner && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_BARRIER")); @@ -2151,10 +2170,12 @@ Class EBarrier : Inventory Mixin SWWMRespawn; Mixin SWWMPickupGlow; + int terrainwait; + override bool Use( bool pickup ) { if ( pickup && !deathmatch ) return false; - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); let b = BarrierPower(Owner.FindInventory("BarrierPower")); if ( b ) { @@ -2185,6 +2206,52 @@ Class EBarrier : Inventory tracer.target = self; tracer.FloatBobPhase = FloatBobPhase; } + override void DoEffect() + { + Super.DoEffect(); + // check terrain for auto-use + let b = Powerup(Owner.FindInventory("BarrierPower")); + if ( b && (b.EffectTics > 5) ) + { + terrainwait = 20; + return; + } + bool damageterrain = false; + // check any 3d floors first + for ( int i=0; i= (Owner.pos.z+Owner.Height) ) continue; + damageterrain = true; + break; + } + if ( !damageterrain && (Owner.pos.z <= Owner.floorz) ) + { + if ( (Owner.floorsector.damageamount > 0) && (Owner.floorsector.damageinterval > 0) ) damageterrain = true; + else + { + let t = Owner.GetFloorTerrain(); + if ( t && (t.DamageAmount > 0) && (t.DamageTimeMask > 0) ) + damageterrain = true; + } + } + if ( !damageterrain ) + { + terrainwait = max(0,terrainwait-1); + return; + } + else terrainwait++; + if ( terrainwait <= 20 ) return; + terrainwait = 0; + bool shouldautouse = false; + if ( swwm_enforceautousebarrier == 1 ) shouldautouse = true; + else if ( swwm_enforceautousebarrier == -1 ) shouldautouse = false; + else shouldautouse = CVar.GetCVar('swwm_autousebarrier',Owner.player).GetBool(); + if ( shouldautouse ) Owner.UseInventory(self); + } Default { @@ -2760,7 +2827,7 @@ Class Mykradvo : Inventory override bool Use( bool pickup ) { if ( pickup && !deathmatch ) return false; - if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); Vector3 spawnpos = Owner.Vec3Angle(15,Owner.angle,Owner.Height*.7); if ( !FindTargets(Owner) ) { @@ -2807,7 +2874,7 @@ Class Mykradvo : Inventory s.pitch = pt; s.ReactionTime += Random[ExploS](-2,2); } - A_StartSound("mykradvo/smallarc",CHAN_WEAPON); + A_StartSound("mykradvo/smallarc",CHAN_WEAPON,CHANF_OVERLAP,attenuation:3.); A_SetTics(Random[Mykradvo](10,50)); } @@ -2872,13 +2939,13 @@ Class Mykradvo : Inventory //$Sprite graphics/HUD/Icons/I_Mykradvo.png //$Icon powerup Tag "$T_MYKRADVO"; - Stamina 1200000; + Stamina -1200000; Inventory.Icon "graphics/HUD/Icons/I_Mykradvo.png"; Inventory.PickupSound "misc/p_pkup"; Inventory.UseSound "mykradvo/arc"; Inventory.PickupMessage "$T_MYKRADVO"; - Inventory.MaxAmount 5; - Inventory.InterHubAmount 5; + Inventory.MaxAmount 3; + Inventory.InterHubAmount 3; Inventory.PickupFlash "SWWMPurplePickupFlash"; +INVENTORY.ALWAYSPICKUP; +INVENTORY.AUTOACTIVATE; @@ -2908,7 +2975,7 @@ Class MykradvoX : GhostArtifactX override void PostBeginPlay() { Super.PostBeginPlay(); - A_StartSound("powerup/mykradvoamb",CHAN_VOICE,CHANF_LOOP); + A_StartSound("powerup/mykradvoamb",CHAN_VOICE,CHANF_LOOP,attenuation:2.); } override void Tick() { diff --git a/zscript/kbase/swwm_kbase.zsc b/zscript/kbase/swwm_kbase.zsc index 8532611af..e54ea6bc6 100644 --- a/zscript/kbase/swwm_kbase.zsc +++ b/zscript/kbase/swwm_kbase.zsc @@ -3203,15 +3203,14 @@ Class DemolitionistMenu : GenericMenu else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); int clscol = Font.CR_WHITE; - if ( invlist[i] is 'Weapon' ) clscol = Font.CR_GOLD; - else if ( invlist[i] is 'MagAmmo' ) clscol = Font.CR_TAN; + if ( invlist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD; + else if ( invlist[i] is 'MagAmmo' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPTan'):Font.CR_TAN; else if ( (invlist[i] is 'BackpackItem') || (invlist[i] is 'HammerspaceEmbiggener') ) clscol = Font.CR_DARKBROWN; - else if ( invlist[i] is 'Ammo' ) clscol = Font.CR_BROWN; - else if ( (invlist[i] is 'PowerupGiver') || (invlist[i] is 'AmmoFabricator') || invlist[i].bBIGPOWERUP ) clscol = Font.CR_PURPLE; + else if ( invlist[i] is 'Ammo' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPBrown'):Font.CR_BROWN; + else if ( (invlist[i] is 'PowerupGiver') || (invlist[i] is 'AmmoFabricator') || invlist[i].bBIGPOWERUP ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPPurple'):Font.CR_PURPLE; else if ( (invlist[i] is 'Health') || (invlist[i] is 'HealthPickup') || (invlist[i] is 'SWWMHealth') ) clscol = Font.CR_RED; else if ( (invlist[i] is 'Armor') || (invlist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN; else if ( invlist[i] is 'PuzzleItem' ) clscol = Font.CR_LIGHTBLUE; - else if ( invlist[i] is 'SWWMCollectible' ) clscol = Font.CR_FIRE; Screen.DrawText(fnt,clscol,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel0)?Color(96,0,0,0):Color(0,0,0,0)); yy += 16; if ( yy >= 370 ) @@ -3263,15 +3262,14 @@ Class DemolitionistMenu : GenericMenu else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); int clscol = Font.CR_WHITE; - if ( invlist[i] is 'Weapon' ) clscol = Font.CR_GOLD; - else if ( invlist[i] is 'MagAmmo' ) clscol = Font.CR_TAN; + if ( invlist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD; + else if ( invlist[i] is 'MagAmmo' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPTan'):Font.CR_TAN; else if ( (invlist[i] is 'BackpackItem') || (invlist[i] is 'HammerspaceEmbiggener') ) clscol = Font.CR_DARKBROWN; - else if ( invlist[i] is 'Ammo' ) clscol = Font.CR_BROWN; - else if ( (invlist[i] is 'PowerupGiver') || (invlist[i] is 'AmmoFabricator') || invlist[i].bBIGPOWERUP ) clscol = Font.CR_PURPLE; + else if ( invlist[i] is 'Ammo' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPBrown'):Font.CR_BROWN; + else if ( (invlist[i] is 'PowerupGiver') || (invlist[i] is 'AmmoFabricator') || invlist[i].bBIGPOWERUP ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPPurple'):Font.CR_PURPLE; else if ( (invlist[i] is 'Health') || (invlist[i] is 'HealthPickup') || (invlist[i] is 'SWWMHealth') ) clscol = Font.CR_RED; else if ( (invlist[i] is 'Armor') || (invlist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN; else if ( invlist[i] is 'PuzzleItem' ) clscol = Font.CR_LIGHTBLUE; - else if ( invlist[i] is 'SWWMCollectible' ) clscol = Font.CR_FIRE; Screen.DrawText(fnt,clscol,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel1)?Color(96,0,0,0):Color(0,0,0,0)); yy += 16; if ( yy >= 370 ) @@ -3464,11 +3462,11 @@ Class DemolitionistMenu : GenericMenu else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],def.GetTag()); else str = def.GetTag(); int clscol = Font.CR_WHITE; - if ( storelist[i] is 'Weapon' ) clscol = Font.CR_GOLD; - else if ( storelist[i] is 'MagAmmo' ) clscol = Font.CR_TAN; + if ( storelist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItemClass(storelist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD; + else if ( storelist[i] is 'MagAmmo' ) clscol = SWWMUtility.IsVIPItemClass(storelist[i])?Font.FindFontColor('VIPTan'):Font.CR_TAN; else if ( (storelist[i] is 'BackpackItem') || (storelist[i] is 'HammerspaceEmbiggener') ) clscol = Font.CR_DARKBROWN; - else if ( storelist[i] is 'Ammo' ) clscol = Font.CR_BROWN; - else if ( (storelist[i] is 'PowerupGiver') || (storelist[i] is 'AmmoFabricator') || def.bBIGPOWERUP ) clscol = Font.CR_PURPLE; + else if ( storelist[i] is 'Ammo' ) clscol = SWWMUtility.IsVIPItemClass(storelist[i])?Font.FindFontColor('VIPBrown'):Font.CR_BROWN; + else if ( (storelist[i] is 'PowerupGiver') || (storelist[i] is 'AmmoFabricator') || def.bBIGPOWERUP ) clscol = SWWMUtility.IsVIPItemClass(storelist[i])?Font.FindFontColor('VIPPurple'):Font.CR_PURPLE; else if ( (storelist[i] is 'Health') || (storelist[i] is 'HealthPickup') || (storelist[i] is 'SWWMHealth') ) clscol = Font.CR_RED; else if ( (storelist[i] is 'Armor') || (storelist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN; Screen.DrawText(fnt,clscol,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel0)?Color(96,0,0,0):Color(0,0,0,0)); diff --git a/zscript/menu/swwm_inter.zsc b/zscript/menu/swwm_inter.zsc index e1924c5e1..406b1c936 100644 --- a/zscript/menu/swwm_inter.zsc +++ b/zscript/menu/swwm_inter.zsc @@ -121,10 +121,11 @@ Class SWWMStatScreen : StatusScreen abstract { // skip DLC tips for now if ( (i >= 59) && (i <= 68) ) continue; + if ( (i >= 130) && (i <= 139) ) continue; ents.Push(i); } // account for skipped dlc tips (important, will crash otherwise) - maxtip -= 10; + maxtip -= 20; if ( pdata.lasttip.Size() >= maxtip ) { // exclude last one, start over diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 400e1ab53..6284d770a 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -612,6 +612,8 @@ Class mkFlyingGib : Actor { A_Bleed(); A_StartSound("misc/gibhit",CHAN_BODY,CHANF_OVERLAP); + // oops we got squished + if ( floorz >= ceilingz ) ExplodeMissile(null,null); } Goto Spawn; Death: diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 83566c000..3d40210c0 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -173,7 +173,7 @@ Class Demolitionist : PlayerPawn let type = (class)(AllActorClasses[i]); if ( !type || (type.GetParentClass() != "Ammo") ) continue; - // Only give if it's for a valid weapon, unless using "give everything" + // Only give if it's for a valid weapon bool isvalid = false; for ( int j=0; j)(AllActorClasses[j]); - if ( !type2 ) continue; - let rep = GetReplacement(type2); - if ( (rep != type2) && !(rep is "DehackedPickup") ) continue; - readonly weap = GetDefaultByType(type2); - if ( !player.weapons.LocateWeapon(type2) || weap.bCheatNotWeapon || !weap.CanPickup(self) ) continue; - let ready = weap.FindState("Ready"); - if ( !ready || !ready.ValidateSpriteFrame() ) continue; - if ( (type2 is 'SWWMWeapon') && SWWMWeapon(weap).UsesAmmo(pamo) ) + readonly weap = GetDefaultByType(validweapons[j]); + if ( (validweapons[j] is 'SWWMWeapon') && SWWMWeapon(weap).UsesAmmo(pamo) ) { isvalid = true; break; @@ -230,7 +223,7 @@ Class Demolitionist : PlayerPawn break; } } - if ( !isvalid && (giveall != ALL_YESYES) ) continue; + if ( !isvalid ) continue; let magitem = FindInventory(type); if ( !magitem ) { @@ -341,6 +334,9 @@ Class Demolitionist : PlayerPawn { let type = (class)(AllActorClasses[i]); if ( !type ) continue; + let rep = GetReplacement(type); + // don't give replaced items + if ( rep != type ) continue; // no fabricators before hexen if ( !(gameinfo.gametype&GAME_HEXEN) && (type is 'AmmoFabricator') ) continue; // no barriers outside doom @@ -381,6 +377,7 @@ Class Demolitionist : PlayerPawn SWWMCollectible(item).propagated = true; // no score or anims if ( !item.CallTryPickup(self) ) item.Destroy(); } + if ( !giveall ) return; } if ( giveall ) return; let type = name; @@ -882,6 +879,7 @@ Class Demolitionist : PlayerPawn { if ( !FindInventory("GrilledCheeseSafeguard") && !(healtimer%5) ) A_SetHealth(health-1); + if ( health <= 500 ) healcooldown = 20; } else if ( health > 200 ) { @@ -2515,7 +2513,7 @@ Class Demolitionist : PlayerPawn int score = 100; // last secret (this is called before counting it up, so have to subtract) let hnd = SWWMHandler(EventHandler.Find("SWWMHandler")); - if ( !deathmatch && (level.found_secrets == level.total_secrets-1) && (!hnd || !hnd.allsecrets) ) + if ( !deathmatch && !(gameinfo.gametype&GAME_Hexen) && (level.found_secrets == level.total_secrets-1) && (!hnd || !hnd.allsecrets) ) { if ( hnd ) hnd.allsecrets = true; score = 1000; diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index ea970824a..f348e4470 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -1538,6 +1538,7 @@ Class SWWMUtility if ( StringTable.Localize("$SWWM_SELLEXTRA_FEM") == "SWWM_SELLEXTRA_FEM" ) return false; if ( i is 'DeepImpact' ) return true; + if ( i is 'FistGun' ) return true; if ( i is 'ExplodiumGun' ) return true; if ( i is 'Wallbuster' ) return true; if ( i is 'HeavyMahSheenGun' ) return true; @@ -1547,6 +1548,7 @@ Class SWWMUtility if ( i is 'CandyGun' ) return true; if ( i is 'RayKhom' ) return true; if ( i is 'GrandLance' ) return true; + if ( i is 'RayKhom' ) return true; if ( i is 'HealthNuggetItem' ) return true; if ( i is 'ArmorNuggetItem' ) return true; if ( i is 'WarArmor' ) return true; @@ -1651,9 +1653,9 @@ Class SWWMUtility return true; if ( target is 'SWWMCollectible' ) return true; - if ( (target is 'Ynykron') || (target is 'GrandLance') ) + if ( (target is 'Ynykron') || (target is 'GrandLance') || (target is 'RayKhom') ) return true; - if ( (target is 'GoldShell') || (target is 'YnykronAmmo') || (target is 'GrandAmmo') || (target is 'GrandSpear') ) + if ( (target is 'GoldShell') || (target is 'YnykronAmmo') || (target is 'GrandAmmo') || (target is 'GrandSpear') || (target is 'UltimatePod') || (target is 'UltimateAmmo') ) return true; if ( target is 'Mykradvo' ) return true; @@ -1662,6 +1664,18 @@ Class SWWMUtility return false; } + // used by the store + static bool IsVipItemClass( Class target ) + { + if ( (target is 'Ynykron') || (target is 'GrandLance') || (target is 'RayKhom') ) + return true; + if ( (target is 'GoldShell') || (target is 'YnykronAmmo') || (target is 'GrandAmmo') || (target is 'GrandSpear') || (target is 'UltimatePod') || (target is 'UltimateAmmo') ) + return true; + if ( target is 'Mykradvo' ) + return true; + return false; + } + static bool IsScoreItem( Actor target ) { if ( target is 'Key' ) @@ -1735,12 +1749,20 @@ Class SWWMUtility if ( CheckNeedsItem(b) ) return b; return Random[Replacements](weight,0)?a:b; } + static private Class PickTrio( Class a, Class b, Class c, int weight1 = 1, int weight2 = 1 ) + { + if ( CheckNeedsItem(a) ) return a; + if ( CheckNeedsItem(b) ) return b; + if ( CheckNeedsItem(c) ) return c; + return Random[Replacements](weight1,0)?a:Random[Replacements](weight2,0)?b:c; + } static Class PickSWWMSlot1() { if ( CheckNeedsItem('ExplodiumGun',true) && Random[Replacements](0,1) ) return 'ExplodiumGun'; - /*if ( CheckNeedsItem('PlasmaBlast',true) && Random[Replacements](0,1) ) return 'PlasmaBlast'; - return PickPair('PusherWeapon','ItamexHammer');*/ + //if ( CheckNeedsItem('PlasmaBlast',true) && Random[Replacements](0,1) ) return 'PlasmaBlast'; + //return PickTrio('PusherWeapon','ItamexHammer','FistGun'); + //return PickPair('PusherWeapon','ItamexHammer'); return 'PusherWeapon'; } static Class PickSWWMSlot2() @@ -1765,6 +1787,7 @@ Class SWWMUtility } static Class PickSWWMSlot6() { + //return PickTrip('Hellblazer','Quadravol','ModernSparkster'); //return PickPair('Hellblazer','Quadravol'); return 'Hellblazer'; } @@ -1780,23 +1803,41 @@ Class SWWMUtility } static Class PickSWWMSlot9() { + //return PickTrio('CandyGun','RayKhom','MisterRifle'); //return PickPair('CandyGun','RayKhom'); return 'CandyGun'; } static Class PickSWWMSlot0() { - //return PickPair('Ynykron','GrandLance'); - return 'Ynykron'; + /*if ( !CheckNeedsItem('Ynykron') ) + { + if ( !CheckNeedsItem('GrandLance') ) + { + if ( !CheckNeedsItem('RafanKos') ) + return PickSWWMSlot9(); + return 'RafanKos'; + } + if ( !CheckNeedsItem('RafanKos') ) + return 'GrandLance'; + return PickPair('GrandLance','RafanKos'); + } + return PickTrio('Ynykron','GrandLance','RafanKos');*/ + /*if ( !CheckNeedsItem('Ynykron') ) + { + if ( !CheckNeedsItem('GrandLance') ) + return PickSWWMSlot9(); + return 'GrandLance'; + } + return PickPair('Ynykron','GrandLance');*/ + return !CheckNeedsItem('Ynykron')?'CandyGun':'Ynykron'; } static Class PickDoomSlot6() { - //return PickPair(PickSWWMSlot7(),PickSWWMSlot8(),2); - return PickPair('Sparkster','SilverBullet',2); + return PickPair(PickSWWMSlot7(),PickSWWMSlot8(),2); } static Class PickDoomSlot7() { - //return PickPair(PickSWWMSlot9(),PickSWWMSlot0(),2); - return PickPair('CandyGun','Ynykron',2); + return PickPair(PickSWWMSlot9(),PickSWWMSlot0(),2); } static Class PickHereticSlot3() // also used for Doom 1 { diff --git a/zscript/weapons/swwm_blazeit_fx.zsc b/zscript/weapons/swwm_blazeit_fx.zsc index da33f3c32..da462bbb0 100644 --- a/zscript/weapons/swwm_blazeit_fx.zsc +++ b/zscript/weapons/swwm_blazeit_fx.zsc @@ -334,7 +334,7 @@ Class HellblazerMissile : Actor A_SetRenderStyle(1.0,STYLE_Add); A_SprayDecal("BigRocketBlast",50); A_SetScale(4.5); - SWWMUtility.DoExplosion(self,250,320000,200,90); + SWWMUtility.DoExplosion(self,150,320000,200,90); A_NoGravity(); A_QuakeEx(5,5,5,15,0,1500,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollIntensity:.8); A_StopSound(CHAN_BODY); @@ -431,7 +431,7 @@ Class HellblazerCrackshot : HellblazerMissile A_SetRenderStyle(1.0,STYLE_Add); A_SprayDecal("BigRocketBlast",50); A_SetScale(3.); - SWWMUtility.DoExplosion(self,200,320000,160,60); + SWWMUtility.DoExplosion(self,120,320000,160,60); A_NoGravity(); A_QuakeEx(4,4,4,12,0,1200,"",QF_RELATIVE|QF_SCALEDOWN,falloff:400,rollIntensity:.6); A_StopSound(CHAN_BODY); @@ -502,7 +502,7 @@ Class HellblazerRavager : HellblazerMissile A_SetRenderStyle(1.0,STYLE_Add); A_SprayDecal("HugeRocketBlast",50); A_SetScale(8.); - SWWMUtility.DoExplosion(self,400,320000,300,120); + SWWMUtility.DoExplosion(self,250,320000,300,120); A_NoGravity(); A_QuakeEx(6,6,6,30,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:800,rollIntensity:1.); A_StopSound(CHAN_BODY); @@ -895,7 +895,7 @@ Class HellblazerClusterMini : HellblazerMissile2 A_SetRenderStyle(1.0,STYLE_Add); A_SprayDecal("BigRocketBlast",50); A_SetScale(2.5); - SWWMUtility.DoExplosion(self,50,200000,150,60); + SWWMUtility.DoExplosion(self,30,200000,150,60); A_NoGravity(); A_QuakeEx(4,4,4,12,0,1000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:400,rollIntensity:.6); A_StopSound(CHAN_BODY); diff --git a/zscript/weapons/swwm_cbt.zsc b/zscript/weapons/swwm_cbt.zsc index f57df67b9..cd340f48e 100644 --- a/zscript/weapons/swwm_cbt.zsc +++ b/zscript/weapons/swwm_cbt.zsc @@ -515,7 +515,7 @@ Class Wallbuster : SWWMWeapon // slug if ( !sst ) sst = new("SpreadSlugTracer"); sst.ignoreme = self; - sst.penetration = 200.; + sst.penetration = 150.; a = FRandom[Wallbuster](0,360); s = FRandom[Wallbuster](0,.002); dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); @@ -606,7 +606,7 @@ Class Wallbuster : SWWMWeapon if ( !st ) st = new("SpreadgunTracer"); st.ignoreme = self; // attempt to uniformize expected damage while reducing traces (mainly for performance) - int expecteddmg = 150; + int expecteddmg = 100; int numshot = max(21-howmany,5); int individualdmg = int(ceil(expecteddmg/double(numshot))); for ( int j=0; j 30 ) return; double factor = (30-special1)/30.; double invfct = 1.-factor; - SWWMUtility.DoExplosion(self,20*factor,0.,150*invfct,flags:DE_HOWL); + SWWMUtility.DoExplosion(self,15*factor,0.,150*invfct,flags:DE_HOWL); SWWMUtility.DoExplosion(self,0,-5000*factor,300*invfct); int numpt = int(Random[ExploS](16,32)*factor); for ( int i=0; i 30 ) return; double factor = (30-special1)/30.; double invfct = 1.-factor; - SWWMUtility.DoExplosion(self,15*factor,0.,50*invfct,flags:DE_HOWL); + SWWMUtility.DoExplosion(self,10*factor,0.,50*invfct,flags:DE_HOWL); SWWMUtility.DoExplosion(self,0.,-5000*factor,100*invfct); int numpt = int(Random[ExploS](8,16)*factor); for ( int i=0; i