0.9.8b release:
- Crouched gesture animations. - Proper crouch-jumping (now always enabled). - New fanart by Endie. - Swimming animations (also used by flight). - Hexen-style startup screen. - More model cleanup. - Prevent Wallbuster reload menu from opening on intermissions. - Intermissions now only handle fire and use for advance, to prevent some lil' accidents. - Holding altfire on intermissions hides ui elements, so the bg is fully visible. - Begin writing lore for collectibles (these will come in a couple updates). - Fix fuzz shader being affected by texture upscaling. - Enemies with >=1000 starting hp also can drop golden shells. - Explodium Gun no longer shows with a "1x" prefix on menus when single. - Player animation transition tweaks.
This commit is contained in:
parent
5e60973d1b
commit
65db7e8367
73 changed files with 561 additions and 76 deletions
1
NETNOTCH.dat
Normal file
1
NETNOTCH.dat
Normal file
|
|
@ -0,0 +1 @@
|
|||
<EFBFBD><EFBFBD>鈿鈿鈿鈿鈿鈿鈿鈿鈿鈿鈿鈿<EFBFBD><EFBFBD>w
|
||||
1
NOTCH.dat
Normal file
1
NOTCH.dat
Normal file
|
|
@ -0,0 +1 @@
|
|||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>镲镲镲镲铑铑铑铑揶揶揶揶眄眄眄眄葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺眄眄眄眄揶揶揶揶眄眄眄眄铑铑铑铑铑铑铑铑镲镲镲镲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>镲镲镲镲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BIN
STARTUP.dat
Normal file
BIN
STARTUP.dat
Normal file
Binary file not shown.
2
TODO.md
2
TODO.md
|
|
@ -1,7 +1,5 @@
|
|||
**Not so fundamental things during first beta:**
|
||||
|
||||
- Extra Demolitionist animations (swimming, additional gestures)
|
||||
- Quick grenade function (Explodium Mag)
|
||||
- Fun options
|
||||
- Omnibusting (all weapons can bust walls)
|
||||
- Infinite fuel
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Most of the work here is original, but there are some notable exceptions:
|
|||
- This mod uses libeye, by KeksDose. Big thanks.
|
||||
- Title theme, "Traumatic State", by Teque (which a lot of people just know as "the AS-Golgotha music").
|
||||
- Intermission theme, "Dragony", also by Teque (very comfy music considering the rest of his repertoire).
|
||||
- Startup theme, "Hidden Tune #242", also by Teque too (super comfy music, ideal for this use, especially when the load times may be long).
|
||||
- The anti-BD feature uses art and music by IOSYS, art was edited into the Doom palette.
|
||||
- The crash handler uses a sound bit from Umineko and a short clip of the Curb Your Enthusiasm theme.
|
||||
- Tewi font by lucy (https://github.com/lucy/tewi-font). Modified to add gradients and drop shadow.
|
||||
|
|
@ -33,4 +34,5 @@ Most of the work here is original, but there are some notable exceptions:
|
|||
* Captain J (@Jho7835)
|
||||
* Redead-ITA
|
||||
* Sgt. Shivers (@Sgt_Shivers_)
|
||||
* Moa Dixøn / Endie (@MoaDixon)
|
||||
- A certain hidden easter egg / meme uses crappified/bassboosted edits of Old Days and the CBT Wikipedia article.
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ user bool swwm_fuzz = true; // allows toggling the fuzz shader on the demoliti
|
|||
user bool swwm_cbtpause = true; // wallbuster menu pauses the game
|
||||
user noarchive int swwm_cbtmeme = 0; // easter egg, hidden cvar
|
||||
user noarchive bool swwm_cbttime = false; // debug: times how long a reload takes
|
||||
server bool swwm_crouchjump = false; // allows crouch-jumping (which looks weird af but some maps may need it)
|
||||
user noarchive int swwm_cbtlast = 0; // last selected ammo for the wallbuster
|
||||
server bool swwm_cbtall = true; // wallbuster breaks any wall, not just movable ones
|
||||
server bool swwm_doomfall = false; // monsters take fall damage outside of hexen
|
||||
|
|
|
|||
6
gameinfo.txt
Normal file
6
gameinfo.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
STARTUPCOLORS = "FF FF FF", "80 40 FF"
|
||||
STARTUPTITLE = "Some Weird Weapons Mod: GZDoom Edition"
|
||||
STARTUPTYPE = "Hexen"
|
||||
STARTUPSONG = "music/H2I4D2E.XM"
|
||||
LOADLIGHTS = 1
|
||||
LOADBRIGHTMAPS = 1
|
||||
|
|
@ -5,7 +5,7 @@ HardwareShader Texture "graphics/HUD/HealthBarS.png"
|
|||
}
|
||||
HardwareShader Texture "graphics/HUD/EnemyBarS.png"
|
||||
{
|
||||
Shader "shaders/glsl/Fuzz_Gray.fp"
|
||||
Shader "shaders/glsl/Fuzz_GraySmall.fp"
|
||||
Texture "noisetex" "textures/graynoise.png"
|
||||
}
|
||||
HardwareShader Texture "graphics/tempbg.png"
|
||||
|
|
|
|||
BIN
graphics/Fanart/Endie.jpg
Normal file
BIN
graphics/Fanart/Endie.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 297 KiB |
|
|
@ -82,8 +82,34 @@ T_RAGEKIT = "Ragekit";
|
|||
T_REFRESHER = "Refresher";
|
||||
T_SANDWICH = "Grilled Cheese Sandwich";
|
||||
T_WARARMOR = "War Armor";
|
||||
T_FROGGY = "Froggy Chair";
|
||||
T_BARRIER = "Elemental Coating";
|
||||
T_FROGGY = "Froggy Chair";
|
||||
T_SEXROBOT1 = "Saya Miyamoto - My Maid Is A Sex Robot Vol. 1";
|
||||
T_SEXROBOT2 = "Saya Miyamoto - My Maid Is A Sex Robot Vol. 2";
|
||||
T_SEXROBOT3 = "Saya Miyamoto - My Maid Is A Sex Robot Vol. 3";
|
||||
T_MOTHPLUSH = "Mashiro Plushie";
|
||||
T_BLACKRATS = "The Black Rat's Coven - Walpurgisnacht";
|
||||
T_AKARIPROJECT = "Saya Miyamoto - The Akari Project";
|
||||
T_CATCATCHER = "Cat Catcher Promotional Poster";
|
||||
T_LOVESIGNALS = "Meidobot - Love Signals";
|
||||
T_NUTATCO = "Nutatco™ Chocolate Bar";
|
||||
T_HEGE = "Hege Cactus";
|
||||
T_RAIDEMIN = "Raidemin Action Figure";
|
||||
T_FRISPYCORN = "Frispy™ Tasty Corn Snack";
|
||||
T_HOAGIE = "Hoagie";
|
||||
T_LITHIUM = "Lithium - Volume One";
|
||||
T_PISS = "PISS Whiskey";
|
||||
T_DEMOPLUSH = "Demolitionist Plushie";
|
||||
T_FIREMACE = "Firemace";
|
||||
T_DOOMFIG = "Doomguy Action Figure";
|
||||
T_TOMEPOWER = "Tyketto's Tome of Power";
|
||||
T_YEFLASK = "Quartz Flask";
|
||||
T_SAYABEAN = "Haunted Saya Bean Plush";
|
||||
T_PUZZLEBOOK = "Lord Vilkreath - Fundamentals of Puzzle Design";
|
||||
T_PEACH = "Toot Froot™ Peach Juice";
|
||||
T_MILKBREAD = "Akkouxhei Milk Bread";
|
||||
T_OBELISK = "Obelisk of the Golden Vale";
|
||||
T_KIRINMANGA = "Saya Miyamoto - I Married A Cherry Boy Emperor But It Turns Out He's Really Cute In Lingerie?!";
|
||||
// colored tags for keys
|
||||
T_REDCARD = "\cgRed Keycard\c-";
|
||||
T_BLUECARD = "\chBlue Keycard\c-";
|
||||
|
|
@ -898,9 +924,10 @@ SWWM_INTERTIP39 = "If you experience slowdowns when many sound effects are playi
|
|||
SWWM_INTERTIP40 = "Item Sense can help you detect items that would be otherwise hard to see among the chaos of an after-battle corpse pile. With an Omnisight, you can even see where items are through walls!";
|
||||
// intermission fanart
|
||||
SWWM_FANART = "Art: ";
|
||||
SWWM_NFANART = "4";
|
||||
SWWM_NFANART = "5";
|
||||
SWWM_FANART1 = "S20TBL.jpg;Substance20 (@S20_TBL)";
|
||||
SWWM_FANART2 = "CaptainJ.png;Captain J (@Jho7835)";
|
||||
SWWM_FANART3 = "RedeadITA.png;Redead-ITA";
|
||||
SWWM_FANART4 = "Shivers.png;Sgt. Shivers (@Sgt_Shivers_)";
|
||||
SWWM_FANART5 = "Endie.jpg;Moa Dixøn / Endie (@MoaDixon)";
|
||||
// intermission 4komas (TBD)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,6 @@ SWWM_GZSCALE = "Use GZDoom Setting";
|
|||
SWWM_BLOOD = "Enable Custom Blood";
|
||||
SWWM_FUZZ = "Enable Animated Menu BG";
|
||||
SWWM_BUSTERPAUSE = "Pause on Wallbuster Reload";
|
||||
SWWM_CROUCHJUMP = "Allow Crouch-Jump";
|
||||
SWWM_CBTALL = "Unlimited Wallbuster Destruction";
|
||||
SWWM_DOOMFALL = "Force Monster Fall Damage";
|
||||
SWWM_CAPMCRANGE = "Cap Ynykron Chain Reaction";
|
||||
|
|
@ -177,7 +176,6 @@ TOOLTIP_SWWM_DETSCALE = "Scaling factor for sensed items. Set to 0 to use GZDoom
|
|||
TOOLTIP_SWWM_BLOOD = "Enable custom blood and gore effects, adapted from Soundless Mound. I'd honestly recommend Nashgore instead, it's better.";
|
||||
TOOLTIP_SWWM_FUZZ = "Toggling this off is recommended if you're recording/streaming as this effect can harm video quality.";
|
||||
TOOLTIP_SWWM_CBTPAUSE = "The game will pause while the Wallbuster reload menu is open (only in singleplayer).";
|
||||
TOOLTIP_SWWM_CROUCHJUMP = "Allow the player to crouch-jump (which may be needed on some maps). Note that there are no animations for this and it'll look weird.";
|
||||
TOOLTIP_SWWM_CBTALL = "Allows the Wallbuster to break pretty much anything, not just doors and platforms. Note that this can break some maps, which is why this option is here.";
|
||||
TOOLTIP_SWWM_DOOMFALL = "Makes monsters take fall damage outside of Hexen. Requires map reload if previously disabled.";
|
||||
TOOLTIP_SWWM_CAPMCRANGE = "By default the Ynykron's chain reactions will propagate until no more targets can be reached. This option limits this spread, making it at least somewhat more \"balanced\".";
|
||||
|
|
|
|||
|
|
@ -76,8 +76,34 @@ I_OMNISIGHT = "Unidad de Mapeado Omnivisión";
|
|||
T_REFRESHER = "Refrescador";
|
||||
T_SANDWICH = "Sandwich de Queso a la Plancha";
|
||||
T_WARARMOR = "Armadura de Guerra";
|
||||
T_FROGGY = "Silla Rana";
|
||||
T_BARRIER = "Revestimiento Elemental";
|
||||
T_FROGGY = "Silla Rana";
|
||||
T_SEXROBOT1 = "Saya Miyamoto - Mi Maid Es Un Robot Del Sexo Vol. 1";
|
||||
T_SEXROBOT2 = "Saya Miyamoto - Mi Maid Es Un Robot Del Sexo Vol. 2";
|
||||
T_SEXROBOT3 = "Saya Miyamoto - Mi Maid Es Un Robot Del Sexo Vol. 3";
|
||||
T_MOTHPLUSH = "Peluche de Mashiro";
|
||||
T_BLACKRATS = "El Aquelarre de la Rata Negra - Noche de Walpurgis";
|
||||
T_AKARIPROJECT = "Saya Miyamoto - El Proyecto Akari";
|
||||
T_CATCATCHER = "Poster Promocional de Cat Catcher";
|
||||
T_LOVESIGNALS = "Meidobot - Señales de Amor";
|
||||
T_NUTATCO = "Barrita de Chocolate Nutatco™";
|
||||
T_HEGE = "Cactus Hege";
|
||||
T_RAIDEMIN = "Figura de Acción de Raidemin";
|
||||
T_FRISPYCORN = "Snack de Maíz Delicioso Frispy™";
|
||||
T_HOAGIE = "Emparedado";
|
||||
T_LITHIUM = "Lithium - Volumen Uno";
|
||||
T_PISS = "Whiskey PISS";
|
||||
T_DEMOPLUSH = "Peluche de Demolicionista";
|
||||
T_FIREMACE = "Maza de Fuego";
|
||||
T_DOOMFIG = "Figura de Acción de Doomguy";
|
||||
T_TOMEPOWER = "Tomo del Poder de Tyketto";
|
||||
T_YEFLASK = "Frasco de Cuarzo";
|
||||
T_SAYABEAN = "Peluche Bean Maldito de Saya";
|
||||
T_PUZZLEBOOK = "Lord Vilkreath - Fundamentos del Diseño de Puzzles";
|
||||
T_PEACH = "Zumo de Melocotón Toot Froot™";
|
||||
T_MILKBREAD = "Pan de Leche Akkouxhei";
|
||||
T_OBELISK = "Obelisco del Valle Dorado";
|
||||
T_KIRINMANGA = "Saya Miyamoto - Me Casé Con Un Emperador Virgen Pero Resulta Que Es Monísimo Con Lencería?!";
|
||||
// colored tags for keys
|
||||
T_REDCARD = "\cgTarjeta Llave Roja\c-";
|
||||
T_BLUECARD = "\chTarjeta Llave Azul\c-";
|
||||
|
|
|
|||
|
|
@ -102,7 +102,6 @@ SWWM_GZSCALE = "Usar Opción de GZDoom";
|
|||
SWWM_BLOOD = "Habilitar Sangre Personalizada";
|
||||
SWWM_FUZZ = "Habilitar Fondo Animado de Menú";
|
||||
SWWM_BUSTERPAUSE = "Pausar en Regarga de Wallbuster";
|
||||
SWWM_CROUCHJUMP = "Permitir Salto Agachado";
|
||||
SWWM_CBTALL = "Destrucción Ilimitada de Wallbuster";
|
||||
SWWM_DOOMFALL = "Forzar Daño por Caída en Monstruos";
|
||||
SWWM_CAPMCRANGE = "Limitar Reacción en Cadena de Ynykron";
|
||||
|
|
@ -174,7 +173,6 @@ TOOLTIP_SWWM_DETSCALE = "Factor de escalado para los items detectados. Pon a 0 p
|
|||
TOOLTIP_SWWM_BLOOD = "Activa efectos de sangre y vísceras personalizados, adaptados de Soundless Mound. Sinceramente, recomendaría usar Nashgore, es mejor.";
|
||||
TOOLTIP_SWWM_FUZZ = "Desactivar ésto es recomendado si estás grabando o haciendo streaming, ya que este effecto puede dañar la calidad del vídeo.";
|
||||
TOOLTIP_SWWM_CBTPAUSE = "El juego será pausado mientras el menú de recarga de Wallbuster está abierto (sólo en modo de un jugador).";
|
||||
TOOLTIP_SWWM_CROUCHJUMP = "Permite al jugador agacharse saltando (lo cual puede ser necesario en algunos mapas). Ten en cuenta que no hay animaciones para esto, así que se verá raro.";
|
||||
TOOLTIP_SWWM_CBTALL = "Permite a la Wallbuster romper casi cualquier cosa, no solo puertas y plataformas. Ten en cuenta que esto puede romper algunos mapas, razón de que haya esta opción.";
|
||||
TOOLTIP_SWWM_DOOMFALL = "Hace que los monstruos reciban daño por caída fuera de Hexen. Requiere reinicio de mapa si fue desactivado anteriormente.";
|
||||
TOOLTIP_SWWM_CAPMCRANGE = "Por defecto las reacciones en cadena del Ynykron se propagarán hasta que no se puedan alcanzar más objetivos. Esta opción limita su extensión, haciéndolo al menos un poco más \"balanceado\".";
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.7b r557 \cu(Mon 21 Sep 21:39:06 CEST 2020)";
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.8b r557 \cu(Thu 24 Sep 14:05:04 CEST 2020)";
|
||||
|
|
|
|||
22
lore/default/akariproject.txt
Normal file
22
lore/default/akariproject.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
TAG
|
||||
Akari Project
|
||||
TAB
|
||||
Item
|
||||
REL
|
||||
Saya;LunaEvent;Nukuri;UAC;Hell
|
||||
TXT
|
||||
\cxTitle:\c-
|
||||
\cf The Akari Project\c-
|
||||
\cxAuthor:\c-
|
||||
\cf Saya Miyamoto\c-
|
||||
\cxGenre:\c-
|
||||
\cf Science Fiction\c-
|
||||
|
||||
\cfSynopsis:\c- In the year 2040, human science has evolved to levels never before seen. Mankind has explored not just their nearest planets, but those of neighboring suns too, and yet, there is more they wish, to go farther, to step beyond even the confines of their galaxy, and have every corner of the universe at the reach of their fingertips. It is then, that the greatest minds from all around the world are reunited, with one purpose, one mission: The Akari Project.
|
||||
|
||||
**The Akari Project** is **Saya Miyamoto**'s first foray into sci-fi novel writing, all the way back in 2021, when humanity had only just made its first alien contact through the **Luna Event**. It was advertised as a possible look into the future that the **Nukuri** alliance would provide, though nowadays it's seen more as an unfortunately "too optimistic" vision of said future. Nevertheless, its main premise still stands to become a reality, with Saya herself promising to spearhead a real Akari Project someday, for humanity to create its own gates into the farthest corners of the universe and beyond.
|
||||
|
||||
\cxSaya's Notes:\c-
|
||||
\cfYeah... I was really dumb back then, thinking everything would turn out so well and all, but instead look at where we are, with humankind's first interdimensional travel experiments opening a goddamn portal to Hell of all places (fuck the UAC). And let's not get started on all those "advances" in science I fantasized about. Most of those are way far for us, even though all the others have them (or even better stuff). We're just lagging behind because of all the stupid shit people keep doing and all the work those capitalist trashlords do to set everything back (fuck 'em).\c-
|
||||
|
||||
\cfBut yeah, I totally want to make this real now, since I've got the know-how to do all this, mainly thanks to Zana-sama and her contacts. Well, I know the basics, at least, so I'll have to figure out the rest myself.\c-
|
||||
0
lore/default/brcdebutlp.txt
Normal file
0
lore/default/brcdebutlp.txt
Normal file
0
lore/default/catcatcherposter.txt
Normal file
0
lore/default/catcatcherposter.txt
Normal file
0
lore/default/demoplush.txt
Normal file
0
lore/default/demoplush.txt
Normal file
0
lore/default/doomguyfig.txt
Normal file
0
lore/default/doomguyfig.txt
Normal file
0
lore/default/eyeobelisk.txt
Normal file
0
lore/default/eyeobelisk.txt
Normal file
0
lore/default/firemace.txt
Normal file
0
lore/default/firemace.txt
Normal file
0
lore/default/frispycorn.txt
Normal file
0
lore/default/frispycorn.txt
Normal file
0
lore/default/hegecactus.txt
Normal file
0
lore/default/hegecactus.txt
Normal file
0
lore/default/hoagie.txt
Normal file
0
lore/default/hoagie.txt
Normal file
0
lore/default/kirincummies.txt
Normal file
0
lore/default/kirincummies.txt
Normal file
0
lore/default/kirinmanga.txt
Normal file
0
lore/default/kirinmanga.txt
Normal file
0
lore/default/lithiumvol1.txt
Normal file
0
lore/default/lithiumvol1.txt
Normal file
0
lore/default/lovesignalscd.txt
Normal file
0
lore/default/lovesignalscd.txt
Normal file
0
lore/default/meetthesniper.txt
Normal file
0
lore/default/meetthesniper.txt
Normal file
0
lore/default/milkbreads.txt
Normal file
0
lore/default/milkbreads.txt
Normal file
0
lore/default/mmiasrvol1.txt
Normal file
0
lore/default/mmiasrvol1.txt
Normal file
0
lore/default/mmiasrvol2.txt
Normal file
0
lore/default/mmiasrvol2.txt
Normal file
0
lore/default/mmiasrvol3.txt
Normal file
0
lore/default/mmiasrvol3.txt
Normal file
0
lore/default/mothplushy.txt
Normal file
0
lore/default/mothplushy.txt
Normal file
0
lore/default/nutatcobar.txt
Normal file
0
lore/default/nutatcobar.txt
Normal file
0
lore/default/puzzledesignbook.txt
Normal file
0
lore/default/puzzledesignbook.txt
Normal file
0
lore/default/quartzflask.txt
Normal file
0
lore/default/quartzflask.txt
Normal file
0
lore/default/raideminfig.txt
Normal file
0
lore/default/raideminfig.txt
Normal file
0
lore/default/sayabean.txt
Normal file
0
lore/default/sayabean.txt
Normal file
0
lore/default/tomeofpower.txt
Normal file
0
lore/default/tomeofpower.txt
Normal file
|
|
@ -35,7 +35,6 @@ OptionMenu "SWWMOptionMenu"
|
|||
Option "$SWWM_6DOF", "swwm_fly6dof", "YesNo"
|
||||
Option "$SWWM_REVIVE", "swwm_revive", "YesNo"
|
||||
ScaleSlider "$SWWM_REVIVECOOLDOWN", "swwm_revivecooldown", 0, 300, 30, "$SWWM_UNLIMITED"
|
||||
Option "$SWWM_CROUCHJUMP", "swwm_crouchjump", "YesNo"
|
||||
Option "$SWWM_MENUPAUSE", "swwm_menupause", "YesNo"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_OTITLE", "Gold"
|
||||
|
|
@ -152,6 +151,7 @@ OptionMenu "SWWMCreditsMenu"
|
|||
StaticText "Teque", "Gold"
|
||||
StaticText "Traumatic State", "White"
|
||||
StaticText "Dragony", "White"
|
||||
StaticText "Hidden Tune #242", "White"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_CFANART", "Red"
|
||||
StaticText " "
|
||||
|
|
@ -159,6 +159,7 @@ OptionMenu "SWWMCreditsMenu"
|
|||
StaticText "Captain J (@Jho7835)", "Gold"
|
||||
StaticText "Redead-ITA", "Gold"
|
||||
StaticText "Sgt. Shivers (@Sgt_Shivers_)", "Gold"
|
||||
StaticText "Moa Dixøn / Endie (@MoaDixon)", "Gold"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_CLOCAL", "Red"
|
||||
StaticText " "
|
||||
|
|
|
|||
|
|
@ -415,12 +415,113 @@ Model "Demolitionist"
|
|||
SurfaceSkin 0 1 "DemoFace_Default.png"
|
||||
FrameIndex XZWD V 0 360
|
||||
FrameIndex XZWD W 0 361
|
||||
// TODO Crouched Wave
|
||||
// TODO Crouched Thumbs Up
|
||||
// TODO Crouched Victory
|
||||
// TODO Crouched Blow Kiss
|
||||
// TODO Swim
|
||||
// TODO Float
|
||||
// Float
|
||||
FrameIndex XZWD W 0 363
|
||||
FrameIndex XZWD X 0 364
|
||||
FrameIndex XZWD Y 0 365
|
||||
FrameIndex XZWD Z 0 366
|
||||
FrameIndex XZWE A 0 367
|
||||
FrameIndex XZWE B 0 368
|
||||
FrameIndex XZWE C 0 369
|
||||
FrameIndex XZWE D 0 370
|
||||
FrameIndex XZWE E 0 371
|
||||
FrameIndex XZWE F 0 372
|
||||
FrameIndex XZWE G 0 373
|
||||
FrameIndex XZWE H 0 374
|
||||
// Swim Start
|
||||
FrameIndex XZWE I 0 376
|
||||
FrameIndex XZWE J 0 377
|
||||
FrameIndex XZWE K 0 378
|
||||
// Swim
|
||||
FrameIndex XZWE L 0 379
|
||||
FrameIndex XZWE M 0 380
|
||||
FrameIndex XZWE N 0 381
|
||||
FrameIndex XZWE O 0 382
|
||||
FrameIndex XZWE P 0 383
|
||||
FrameIndex XZWE Q 0 384
|
||||
FrameIndex XZWE R 0 385
|
||||
FrameIndex XZWE S 0 386
|
||||
FrameIndex XZWE T 0 387
|
||||
FrameIndex XZWE U 0 388
|
||||
FrameIndex XZWE V 0 389
|
||||
FrameIndex XZWE W 0 390
|
||||
// Swim End
|
||||
FrameIndex XZWE X 0 392
|
||||
FrameIndex XZWE Y 0 393
|
||||
// Crouched Wave
|
||||
FrameIndex XZWE Z 0 397
|
||||
FrameIndex XZWF A 0 398
|
||||
FrameIndex XZWF B 0 399
|
||||
FrameIndex XZWF C 0 400
|
||||
FrameIndex XZWF D 0 401
|
||||
FrameIndex XZWF E 0 402
|
||||
FrameIndex XZWF F 0 403
|
||||
FrameIndex XZWF G 0 404
|
||||
FrameIndex XZWF H 0 405
|
||||
FrameIndex XZWF I 0 406
|
||||
FrameIndex XZWF J 0 407
|
||||
FrameIndex XZWF K 0 408
|
||||
FrameIndex XZWF L 0 409
|
||||
FrameIndex XZWF M 0 410
|
||||
FrameIndex XZWF N 0 411
|
||||
// Crouched Thumbs Up
|
||||
FrameIndex XZWF O 0 413
|
||||
FrameIndex XZWF P 0 414
|
||||
FrameIndex XZWF Q 0 415
|
||||
FrameIndex XZWF R 0 416
|
||||
FrameIndex XZWF S 0 417
|
||||
FrameIndex XZWF T 0 418
|
||||
FrameIndex XZWF U 0 419
|
||||
FrameIndex XZWF V 0 420
|
||||
FrameIndex XZWF W 0 421
|
||||
FrameIndex XZWF X 0 422
|
||||
FrameIndex XZWF Y 0 423
|
||||
FrameIndex XZWF Z 0 424
|
||||
FrameIndex XZWG A 0 425
|
||||
FrameIndex XZWG B 0 426
|
||||
FrameIndex XZWG C 0 427
|
||||
FrameIndex XZWG D 0 428
|
||||
FrameIndex XZWG E 0 429
|
||||
// Crouched Victory
|
||||
FrameIndex XZWG F 0 431
|
||||
FrameIndex XZWG G 0 432
|
||||
FrameIndex XZWG H 0 433
|
||||
FrameIndex XZWG I 0 434
|
||||
FrameIndex XZWG J 0 435
|
||||
FrameIndex XZWG K 0 436
|
||||
FrameIndex XZWG L 0 437
|
||||
FrameIndex XZWG M 0 438
|
||||
FrameIndex XZWG N 0 439
|
||||
FrameIndex XZWG O 0 440
|
||||
FrameIndex XZWG P 0 441
|
||||
FrameIndex XZWG Q 0 442
|
||||
FrameIndex XZWG R 0 443
|
||||
FrameIndex XZWG S 0 444
|
||||
FrameIndex XZWG T 0 445
|
||||
FrameIndex XZWG U 0 446
|
||||
FrameIndex XZWG V 0 447
|
||||
FrameIndex XZWG W 0 448
|
||||
FrameIndex XZWG X 0 449
|
||||
// Crouched Blow Kiss
|
||||
FrameIndex XZWG Y 0 451
|
||||
FrameIndex XZWG Z 0 452
|
||||
FrameIndex XZWH A 0 453
|
||||
FrameIndex XZWH B 0 454
|
||||
FrameIndex XZWH C 0 455
|
||||
FrameIndex XZWH D 0 456
|
||||
FrameIndex XZWH E 0 457
|
||||
FrameIndex XZWH F 0 458
|
||||
FrameIndex XZWH G 0 459
|
||||
FrameIndex XZWH H 0 460
|
||||
FrameIndex XZWH I 0 461
|
||||
FrameIndex XZWH J 0 462
|
||||
FrameIndex XZWH K 0 463
|
||||
FrameIndex XZWH L 0 464
|
||||
FrameIndex XZWH M 0 465
|
||||
FrameIndex XZWH N 0 466
|
||||
FrameIndex XZWH O 0 467
|
||||
FrameIndex XZWH P 0 468
|
||||
FrameIndex XZWH Q 0 469
|
||||
}
|
||||
|
||||
// Voodoo Doll
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,10 +0,0 @@
|
|||
Demolitionist:
|
||||
|
||||
- titlemap animations
|
||||
- powering up
|
||||
- stretch
|
||||
- crack knuckles
|
||||
- additional animations
|
||||
- more gestures
|
||||
- blow kiss
|
||||
- dedicated swim animation set
|
||||
BIN
music/H2I4D2E.XM
Normal file
BIN
music/H2I4D2E.XM
Normal file
Binary file not shown.
BIN
palettes/SWWMGZStartup.pal
Normal file
BIN
palettes/SWWMGZStartup.pal
Normal file
Binary file not shown.
|
|
@ -32,7 +32,7 @@ vec4 ProcessTexel()
|
|||
vec3 col = vec3(1.);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
coord = floor(vTexCoord.st*textureSize(tex,0)/zoom[i]);
|
||||
coord = floor(vTexCoord.st*vec2(640.,400.)/zoom[i]);
|
||||
col *= layers[i]*2.0*abs(fract(rnd(coord)+timer*speed[i])-0.5);
|
||||
}
|
||||
return vec4(col,1.);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ vec4 ProcessTexel()
|
|||
vec3 col = vec3(1.);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
coord = floor(vTexCoord.st*textureSize(tex,0)/zoom[i]);
|
||||
coord = floor(vTexCoord.st*vec2(100.,12.)/zoom[i]);
|
||||
col *= layers[i]*2.0*abs(fract(rnd(coord)+timer*speed[i])-0.5);
|
||||
}
|
||||
col += getTexel(vTexCoord.st).rgb;
|
||||
|
|
|
|||
40
shaders/glsl/Fuzz_GraySmall.fp
Normal file
40
shaders/glsl/Fuzz_GraySmall.fp
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
float rnd( in vec2 sd )
|
||||
{
|
||||
//return cos(sd.y*3874.8674+sd.x*6783.5325)*2737.8474;
|
||||
// use noise tex instead of trig-based PRNG, much better and doesn't break on intel
|
||||
return texelFetch(noisetex,ivec2(mod(sd.x,256.),mod(sd.y,256.)),0).x;
|
||||
}
|
||||
|
||||
// haha are you telling me I can't declare arrays like in C?
|
||||
// what the fuck even is this insane syntax?
|
||||
const vec3 layers[3] =
|
||||
vec3[](
|
||||
vec3(1.01,1.07,1.05),
|
||||
vec3(1.06,1.04,1.03),
|
||||
vec3(1.05,1.03,1.01)
|
||||
);
|
||||
const float speed[3] =
|
||||
float[](
|
||||
.5526,
|
||||
.7843,
|
||||
.3725
|
||||
);
|
||||
const float zoom[3] =
|
||||
float[](
|
||||
1.,
|
||||
2.,
|
||||
3.
|
||||
);
|
||||
|
||||
vec4 ProcessTexel()
|
||||
{
|
||||
vec2 coord;
|
||||
vec3 col = vec3(1.);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
coord = floor(vTexCoord.st*vec2(50.,3.)/zoom[i]);
|
||||
col *= layers[i]*2.0*abs(fract(rnd(coord)+timer*speed[i])-0.5);
|
||||
}
|
||||
col += getTexel(vTexCoord.st).rgb;
|
||||
return vec4(col,1.);
|
||||
}
|
||||
|
|
@ -971,3 +971,4 @@ menu/buyinv sounds/menu/buysnd.ogg
|
|||
|
||||
$alias misc/invchange menu/demosel
|
||||
UseArtifact DSEMPTY
|
||||
StartupTick DSEMPTY
|
||||
|
|
|
|||
94
tools/mkstartup.c
Normal file
94
tools/mkstartup.c
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
mkstartup.c : Makes a Hexen startup screen from provided images.
|
||||
Requires all the files to be in the same folder it's executed in.
|
||||
(C)2020 Marisa Kirisame, UnSX Team.
|
||||
Released under the MIT license:
|
||||
|
||||
Copyright (c) 2020 Marisa Kirisame
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
int main( void )
|
||||
{
|
||||
// we expect everything to be exported straight from gimp in raw image
|
||||
// data format, indexed, no alpha, all graphics must share the same
|
||||
// 16-color palette and have the exact dimensions shown here:
|
||||
// STARTUP.data : 640x480, I8 (307200 bytes)
|
||||
// STARTUP.data.pal : 16 colors, RGB8 (48 bytes)
|
||||
// NOTCH.data : 16x23, I8 (368 bytes)
|
||||
// NETNOTCH.data : 4x16, I8 (64 bytes)
|
||||
uint8_t pal[48] = {0};
|
||||
uint8_t startup[4][38400] = {{0}};
|
||||
uint8_t notch[184] = {{0}};
|
||||
uint8_t netnotch[32] = {{0}};
|
||||
uint8_t blk[8] = {0};
|
||||
FILE *fout = fopen("STARTUP.dat","wb");
|
||||
FILE *fin = fopen("STARTUP.data.pal","rb");
|
||||
fread(&pal,1,48,fin);
|
||||
// reduce 8BPC palette to 6BPC
|
||||
for ( int i=0; i<48; i++ )
|
||||
pal[i] = (pal[i]>>2)&0x3f;
|
||||
fwrite(&pal,1,48,fout);
|
||||
fclose(fin);
|
||||
fin = fopen("STARTUP.data","rb");
|
||||
// compose 4-bit planar startup image
|
||||
for ( int i=0; i<38400; i++ )
|
||||
{
|
||||
fread(&blk,1,8,fin);
|
||||
for ( int j=0; j<8; j++ )
|
||||
{
|
||||
startup[0][i] |= !!(blk[j]&1)<<(7-j);
|
||||
startup[1][i] |= !!(blk[j]&2)<<(7-j);
|
||||
startup[2][i] |= !!(blk[j]&4)<<(7-j);
|
||||
startup[3][i] |= !!(blk[j]&8)<<(7-j);
|
||||
}
|
||||
}
|
||||
fclose(fin);
|
||||
fwrite(&startup,1,153600,fout);
|
||||
fclose(fout);
|
||||
fin = fopen("NOTCH.data","rb");
|
||||
fout = fopen("NOTCH.dat","wb");
|
||||
// compose 4-bit linear notch image
|
||||
for ( int i=0; i<184; i++ )
|
||||
{
|
||||
fread(&blk,1,2,fin);
|
||||
notch[i] |= (blk[0]<<4)&0xF0;
|
||||
notch[i] |= blk[1]&0x0F;
|
||||
}
|
||||
fclose(fin);
|
||||
fwrite(¬ch,1,184,fout);
|
||||
fclose(fout);
|
||||
fin = fopen("NETNOTCH.data","rb");
|
||||
fout = fopen("NETNOTCH.dat","wb");
|
||||
// compose 4-bit linear netnotch image
|
||||
for ( int i=0; i<32; i++ )
|
||||
{
|
||||
fread(&blk,1,2,fin);
|
||||
netnotch[i] |= (blk[0]<<4)&0xF0;
|
||||
netnotch[i] |= blk[1]&0x0F;
|
||||
}
|
||||
fclose(fin);
|
||||
fwrite(&netnotch,1,32,fout);
|
||||
fclose(fout);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ Class WallbusterReloadMenu : GenericMenu
|
|||
if ( !pauseme ) pauseme = CVar.GetCVar('swwm_cbtpause',players[consoleplayer]);
|
||||
if ( pauseme.GetBool() ) menuactive = Menu.On;
|
||||
else menuactive = Menu.OnNoPause;
|
||||
if ( (players[consoleplayer].Health > 0) && (players[consoleplayer].ReadyWeapon is 'Wallbuster') ) return;
|
||||
if ( (players[consoleplayer].Health > 0) && (players[consoleplayer].ReadyWeapon is 'Wallbuster') && (gamestate == GS_LEVEL) ) return;
|
||||
MenuEvent(MKEY_BACK,false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ Class FroggyChair : SWWMCollectable
|
|||
}
|
||||
|
||||
// The other collectables, which will be implemented eventually
|
||||
/*
|
||||
Class MMiaSRVol1 : SWWMCollectable
|
||||
{
|
||||
Default
|
||||
|
|
@ -328,7 +327,6 @@ Class KirinManga : SWWMCollectable
|
|||
Stamina 1600;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// yay!
|
||||
Class FancyConfetti : Actor
|
||||
|
|
|
|||
|
|
@ -835,7 +835,7 @@ Class SWWMHandler : EventHandler
|
|||
|
||||
override void WorldThingDied( WorldEvent e )
|
||||
{
|
||||
if ( e.Thing.default.bBOSS && !Random[GoldDrop](0,2) )
|
||||
if ( ((e.Thing.default.bBOSS) || (e.Thing.default.Health >= 1000)) && !Random[GoldDrop](0,2) )
|
||||
{
|
||||
let g = Actor.Spawn("GoldShell",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
|
||||
double ang = FRandom[SpareShells](0,360);
|
||||
|
|
@ -1202,6 +1202,8 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
}
|
||||
}
|
||||
if ( (kcode > 2) || (lcode > 2) )
|
||||
return true; // eat keypresses from this point
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ Class SWWMStatScreen : StatusScreen abstract
|
|||
transient CVar intertype, lang, origmus;
|
||||
double hs, hs2;
|
||||
Vector2 ss, ss2, origin, origin2;
|
||||
double bgfade;
|
||||
|
||||
// returns MPlus if we're playing in Japanese, otherwise returns the requested font
|
||||
Font LangFont( Font req )
|
||||
|
|
@ -247,6 +248,75 @@ Class SWWMStatScreen : StatusScreen abstract
|
|||
drawNoState();
|
||||
break;
|
||||
}
|
||||
if ( bgfade <= 0. ) return;
|
||||
// redraw bgs on top, hiding the rest of the ui
|
||||
if ( intertype.GetInt() == 1 )
|
||||
{
|
||||
double ar = Screen.GetAspectRatio();
|
||||
Vector2 tsize = TexMan.GetScaledSize(arttex);
|
||||
double sar = tsize.x/tsize.y;
|
||||
Vector2 vsize;
|
||||
if ( sar > ar ) vsize = (tsize.y*ar,tsize.y);
|
||||
else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar);
|
||||
else vsize = tsize;
|
||||
Screen.DrawTexture(arttex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,bgfade);
|
||||
}
|
||||
/*else if ( intertype.GetInt() == 2 )
|
||||
{
|
||||
// TBD when there's art
|
||||
}*/
|
||||
else
|
||||
{
|
||||
double ar = Screen.GetAspectRatio();
|
||||
Vector2 tsize = TexMan.GetScaledSize(bgtex);
|
||||
double sar = tsize.x/tsize.y;
|
||||
Vector2 vsize;
|
||||
if ( sar > ar ) vsize = (tsize.y*ar,tsize.y);
|
||||
else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar);
|
||||
else vsize = tsize;
|
||||
Screen.DrawTexture(bgtex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,bgfade);
|
||||
}
|
||||
}
|
||||
protected void checkForAccelerateNew( void )
|
||||
{
|
||||
// check for button presses to skip delays (but only recognize fire/use buttons)
|
||||
for ( int i=0; i < MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
{
|
||||
PlayerInfo p = players[i];
|
||||
if ( (p.cmd.buttons^p.oldbuttons) && ((p.cmd.buttons&p.oldbuttons) == p.oldbuttons) && !p.Bot && (p.cmd.buttons&(BT_ATTACK|BT_USE)) )
|
||||
{
|
||||
acceleratestage = 1;
|
||||
playerready[i] = true;
|
||||
}
|
||||
p.oldbuttons = p.buttons;
|
||||
}
|
||||
}
|
||||
}
|
||||
override void Ticker( void )
|
||||
{
|
||||
bcnt++;
|
||||
if ( bcnt == 1 ) StartMusic();
|
||||
checkForAccelerateNew();
|
||||
switch (CurState)
|
||||
{
|
||||
case StatCount:
|
||||
updateStats();
|
||||
break;
|
||||
case ShowNextLoc:
|
||||
updateShowNextLoc();
|
||||
break;
|
||||
case NoState:
|
||||
updateNoState();
|
||||
break;
|
||||
case LeavingIntermission:
|
||||
// sorry nothing
|
||||
break;
|
||||
}
|
||||
// check fade
|
||||
if ( players[consoleplayer].cmd.buttons&BT_ALTATTACK ) bgfade = min(1.,bgfade+3./Thinker.TICRATE);
|
||||
else bgfade = max(0.,bgfade-4./Thinker.TICRATE);
|
||||
}
|
||||
protected String TimeStr( int secs )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -809,7 +809,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -854,7 +854,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -883,7 +883,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -928,7 +928,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -1338,7 +1338,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -2384,7 +2384,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -2396,7 +2396,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -1398,7 +1398,8 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")) )
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
}
|
||||
else
|
||||
|
|
@ -1407,8 +1408,7 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")) )
|
||||
|| InStateSequence(CurState,FindState("Float")) )
|
||||
{
|
||||
SetStateLabel("Spawn");
|
||||
A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
|
|
@ -1416,26 +1416,17 @@ Class Demolitionist : PlayerPawn
|
|||
else if ( InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop")) )
|
||||
SetStateLabel("SeeFastEnd");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
}
|
||||
}
|
||||
else if ( !bNoGravity && (waterlevel < 1) )
|
||||
{
|
||||
// Falling
|
||||
if ( (InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")))
|
||||
&& (abs(pos.z-floorz) > maxstepheight) )
|
||||
SetStateLabel("Fall");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Floating
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
if ( player.crouchdir == -1 )
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|
|
@ -1443,8 +1434,70 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")) )
|
||||
SetStateLabel("Fall");
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( (InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Float")))
|
||||
&& (abs(pos.z-floorz) > maxstepheight) )
|
||||
SetStateLabel("Fall");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Swimming
|
||||
if ( player.crouchdir == -1 )
|
||||
{
|
||||
// Crouching
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop")) )
|
||||
SetStateLabel("Float");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
}
|
||||
}
|
||||
}
|
||||
override void PlayRunning()
|
||||
|
|
@ -1467,7 +1520,12 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd")) )
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch")) )
|
||||
SetStateLabel("CrouchMove");
|
||||
|
|
@ -1477,6 +1535,9 @@ Class Demolitionist : PlayerPawn
|
|||
if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
else if ( FastCheck()
|
||||
&& (InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|
|
@ -1497,8 +1558,11 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
else
|
||||
{
|
||||
// Floating
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
// Swimming
|
||||
if ( player.crouchdir == -1 )
|
||||
{
|
||||
// Crouching
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|
|
@ -1506,8 +1570,31 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop")) )
|
||||
SetStateLabel("Float");
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch")) )
|
||||
SetStateLabel("CrouchMove");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Float")) )
|
||||
SetStateLabel("Swim");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
}
|
||||
}
|
||||
}
|
||||
override void PlayAttacking()
|
||||
|
|
@ -1716,9 +1803,6 @@ Class Demolitionist : PlayerPawn
|
|||
{
|
||||
if ( player.cmd.buttons&BT_JUMP ) return false;
|
||||
if ( InStateSequence(CurState,FindState("Dash")) ) return false; // no crouch during dash
|
||||
if ( swwm_crouchjump ) return true; // allowed
|
||||
if ( (waterlevel > 2) || bNOGRAVITY ) return false; // no crouch while swimming/floating
|
||||
if ( !player.onground ) return false; // no crouch while in air
|
||||
return true;
|
||||
}
|
||||
// Imagine having to duplicate two functions only to change a couple values in both
|
||||
|
|
@ -1946,18 +2030,6 @@ Class Demolitionist : PlayerPawn
|
|||
// landing
|
||||
XZW4 CIJKLMN 2;
|
||||
Goto Spawn+1;
|
||||
Float:
|
||||
// start
|
||||
#### # 2;
|
||||
XZW4 O 3;
|
||||
Goto FloatLoop;
|
||||
FloatLoop:
|
||||
XZW4 PQRS 6;
|
||||
Loop;
|
||||
FloatEnd:
|
||||
#### # 2;
|
||||
XZW4 TUVWX 3;
|
||||
Goto Spawn+1;
|
||||
Dash:
|
||||
#### # 2;
|
||||
XZW4 O 2 A_Dash();
|
||||
|
|
@ -2031,6 +2103,25 @@ Class Demolitionist : PlayerPawn
|
|||
XZW7 T 0 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
XZW7 TUV 2;
|
||||
Loop;
|
||||
CrouchWave:
|
||||
#### # 3;
|
||||
XZWE Z 3;
|
||||
XZWF ABCDEFGHIJKLMN 3;
|
||||
Goto Crouch+1;
|
||||
CrouchApprove:
|
||||
#### # 3;
|
||||
XZWF OPQRSTUVWXYZ 3;
|
||||
XZWG ABCDE 3;
|
||||
Goto Crouch+1;
|
||||
CrouchVictory:
|
||||
#### # 3;
|
||||
XZWG FGHIJKLMNOPQRSTUVWX 3;
|
||||
Goto Crouch+1;
|
||||
CrouchBlowKiss:
|
||||
#### # 3;
|
||||
XZWG YZ 3;
|
||||
XZWH ABCDEFGHIJKLMNOPQ 3;
|
||||
Goto Crouch+1;
|
||||
CrouchMissile:
|
||||
XZW7 M 2;
|
||||
XZW7 WXYZ 2;
|
||||
|
|
@ -2075,6 +2166,26 @@ Class Demolitionist : PlayerPawn
|
|||
#### # 2 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.45);
|
||||
XZW8 MNOPQRS 2;
|
||||
Goto Spawn+1;
|
||||
Float:
|
||||
#### # 3;
|
||||
XZWD WXYZ 3;
|
||||
XZWE ABCDEFGH 3;
|
||||
Goto Float+1;
|
||||
Swim:
|
||||
#### # 2;
|
||||
XZWE IJK 2;
|
||||
Goto SwimLoop;
|
||||
SwimLoop:
|
||||
XZWE LMN 2;
|
||||
XZWE O 0 A_StartSound("demolitionist/runstart",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
XZWE OPQRST 2;
|
||||
XZWE U 0 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
XZWE UVW 2;
|
||||
Loop;
|
||||
SwimEnd:
|
||||
#### # 2;
|
||||
XZWE LXY 2;
|
||||
Goto Float+1;
|
||||
VoodooSpawn:
|
||||
XZWZ A -1;
|
||||
Loop;
|
||||
|
|
@ -2731,10 +2842,9 @@ Class SWWMGesture : SWWMWeapon
|
|||
action void A_CallPlayerGesture( statelabel st, statelabel cst )
|
||||
{
|
||||
if ( invoker.Owner.Health <= 0 ) return;
|
||||
// crouched gestures not yet added
|
||||
/*if ( (player.crouchdir == -1) && invoker.Owner.FindState(cst) )
|
||||
if ( (player.crouchdir == -1) && invoker.Owner.FindState(cst) )
|
||||
invoker.Owner.SetStateLabel(cst);
|
||||
else */if ( invoker.Owner.FindState(st) )
|
||||
else if ( invoker.Owner.FindState(st) )
|
||||
invoker.Owner.SetStateLabel(st);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue