Stuff to make things at least run.
|
@ -0,0 +1 @@
|
|||
Doom
|
|
@ -0,0 +1,4 @@
|
|||
STARTUPCOLORS = "FF 00 00", "A0 00 00"
|
||||
STARTUPTITLE = "RED-EYED RAMPAGE"
|
||||
STARTUPTYPE = "Hexen"
|
||||
STARTUPSONG = "music/saya_intermus.ogg"
|
|
@ -0,0 +1,73 @@
|
|||
HardwareShader Texture "graphics/tempbg.png"
|
||||
{
|
||||
Shader "shaders/glsl/Fuzz.fp"
|
||||
Texture "noisetex" "textures/graynoise.png"
|
||||
Define "SAYACOLORS"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_saya.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_saya_dark.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_saya_eye.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_saya_smoke.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear_wave.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_0.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_1.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_2.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_3.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_4.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_5.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_6.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_7.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/SayaLogo.png"
|
||||
{
|
||||
Shader "shaders/glsl/SayaLogoAnimated.fp"
|
||||
Define "TEX_SZ" = "vec2(1024.,512.)"
|
||||
Define "TEX_AR" = "2."
|
||||
Texture "LogoTex" "graphics/SayaLogo_Layers.png"
|
||||
}
|
||||
HardwareShader Texture "graphics/SayaLogo_Glow.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/M_SAYA.png"
|
||||
{
|
||||
Shader "shaders/glsl/SayaLogoAnimated.fp"
|
||||
Define "TEX_SZ" = "vec2(256.,128.)"
|
||||
Define "TEX_AR" = "2."
|
||||
Define "NO_BILINEAR"
|
||||
Texture "LogoTex" "graphics/M_SAYA_Layers.png"
|
||||
}
|
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 655 KiB |
After Width: | Height: | Size: 228 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,23 @@
|
|||
addkeysection "$SAYA_KEYS" "RED_EYED_RAMPAGE"
|
||||
addmenukey "$SAYA_PRIMARYFIRE" "+attack"
|
||||
addmenukey "$SAYA_SECONDARYFIRE" "+altattack"
|
||||
addmenukey "$SAYA_RELOADFIRE" "+reload"
|
||||
addmenukey "$SAYA_MELEE" "+user1"
|
||||
addmenukey "$SAYA_EXTRAFIRE" "+user4"
|
||||
addmenukey "$SAYA_SPELL1" "use SayaReviledSign"
|
||||
addmenukey "$SAYA_SPELL2" "use SayaRtributionSign"
|
||||
addmenukey "$SAYA_SPELL3" "use SayaRudeSign"
|
||||
addmenukey "$SAYA_SPELL4" "use SayaRadiantSign"
|
||||
addmenukey "$SWWM_MINIMAPIN" "event swwmzoomin"
|
||||
addmenukey "$SWWM_MINIMAPOUT" "event swwmzoomout"
|
||||
defaultbind "mouse1" "+attack"
|
||||
defaultbind "mouse2" "+altattack"
|
||||
defaultbind "r" "+reload"
|
||||
defaultbind "f" "+user1"
|
||||
defaultbind "g" "+user4"
|
||||
defaultbind "h" "use SayaReviledSign"
|
||||
defaultbind "j" "use SayaRetributionSign"
|
||||
defaultbind "k" "use SayaRudeSign"
|
||||
defaultbind "l" "use SayaRadiantSign"
|
||||
defaultbind "kp+" "event swwmzoomin"
|
||||
defaultbind "kp-" "event swwmzoomout"
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SAYA_MODVER="\cgRED-EYED RAMPAGE\c- \cw0.1a \cu(Thu 25 Nov 15:12:23 CET 2021)\c-";
|
||||
SAYA_SHORTVER="\cw0.1a \cu(2021-11-25 15:12:23)\c-";
|
||||
SAYA_MODVER="\cgRED-EYED RAMPAGE\c- \cw0.1a \cu(Sat 27 Nov 01:32:43 CET 2021)\c-";
|
||||
SAYA_SHORTVER="\cw0.1a \cu(2021-11-27 01:32:43)\c-";
|
||||
|
|
|
@ -0,0 +1,162 @@
|
|||
OptionValue "SWWMEnemyDropType"
|
||||
{
|
||||
-1, "$SWWM_DROPS_NONE"
|
||||
0, "$SWWM_DROPS_AMMO"
|
||||
1, "$SWWM_DROPS_WEAPONS"
|
||||
}
|
||||
OptionValue "SWWMForceStats"
|
||||
{
|
||||
0, "$SWWM_STATS_DISABLED"
|
||||
1, "$SWWM_STATS_ALWAYS"
|
||||
2, "$SWWM_STATS_MAPNAME"
|
||||
}
|
||||
OptionValue "SWWMDRLASkill"
|
||||
{
|
||||
0, "$SWWM_DRLASKILL_BABY"
|
||||
1, "$SWWM_DRLASKILL_EASY"
|
||||
2, "$SWWM_DRLASKILL_NORMAL"
|
||||
3, "$SWWM_DRLASKILL_HARD"
|
||||
4, "$SWWM_DRLASKILL_NIGHTMARE"
|
||||
5, "$SWWM_DRLASKILL_TECHNOPHOBIA"
|
||||
6, "$SWWM_DRLASKILL_ARMAGEDDON"
|
||||
7, "$SWWM_DRLASKILL_ADAPTIVE"
|
||||
}
|
||||
OptionValue "SWWMPistolStart"
|
||||
{
|
||||
0, "$TXT_NO"
|
||||
1, "$SWWM_PISTOLSTART_MAP"
|
||||
2, "$SWWM_PISTOLSTART_CLUSTER"
|
||||
}
|
||||
OptionMenu "SayaOptionMenu"
|
||||
{
|
||||
Class "SWWMOptionMenu"
|
||||
Title "$SAYA_MTITLE"
|
||||
|
||||
SafeCommand "$SWWM_CRESET", "event swwmresetcvars"
|
||||
StaticText " "
|
||||
|
||||
StaticText "$SWWM_PTITLE", "Red"
|
||||
SWWMPlayTime "$SWWM_PLAYTIME", "saya_playtime"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_OTITLE", "Red"
|
||||
Option "$SWWM_SHADERS", "saya_shaders", "YesNo"
|
||||
Slider "$SWWM_FLASH", "saya_flashstrength", 0.0, 1.0, 0.1, 1
|
||||
Slider "$SWWM_BUMP", "saya_bumpstrength", 0.0, 1.0, 0.1, 1
|
||||
Option "$SWWM_MM_ENABLE", "saya_mm_enable", "YesNo"
|
||||
Option "$SWWM_FORCESTATS", "saya_forcestats", "SWWMForceStats"
|
||||
Slider "$SWWM_HUDMARGIN", "saya_hudmargin", 0, 40, 1, 0
|
||||
Slider "$SWWM_MAXMSG", "saya_maxshown", 1, 10, 1, 0
|
||||
Slider "$SWWM_MAXMSGBIG", "saya_maxshownbig", 1, 20, 1, 0
|
||||
Slider "$SWWM_MAXPICK", "saya_maxpickup", 1, 10, 1, 0
|
||||
Slider "$SWWM_CHATLEN", "saya_chatduration", 1, 30, 1, 0
|
||||
Slider "$SWWM_MSGLEN", "saya_msgduration", 1, 30, 1, 0
|
||||
Slider "$SWWM_PICKLEN", "saya_pickduration", 1, 30, 1, 0
|
||||
Option "$SWWM_FUZZ", "saya_fuzz", "YesNo"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_ETITLE", "Red"
|
||||
Option "$SWWM_SHADOWS", "saya_shadows", "YesNo"
|
||||
ScaleSlider "$SWWM_SHADOWDIST", "saya_shadowdist", -1, 4000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
Option "$SWWM_BLOOD", "saya_blood", "YesNo"
|
||||
ScaleSlider "$SWWM_MAXBLOOD", "saya_maxblood", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
ScaleSlider "$SWWM_MAXGIBS", "saya_maxgibs", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
ScaleSlider "$SWWM_MAXCASINGS", "saya_maxcasings", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
ScaleSlider "$SWWM_MAXDEBRIS", "saya_maxdebris", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_BTITLE", "Red"
|
||||
Option "$SWWM_PS_FULLRESET", "saya_ps_fullreset", "SWWMPistolStart"
|
||||
Option "$SWWM_PS_RESETAMMO", "saya_ps_resetammo", "SWWMPistolStart"
|
||||
Option "$SWWM_PS_RESETITEMS", "saya_ps_resetitems", "SWWMPistolStart"
|
||||
Option "$SWWM_PS_RESETHEALTH", "saya_ps_resethealth", "SWWMPistolStart"
|
||||
Option "$SWWM_ENEMYDROPS", "saya_enemydrops", "SWWMEnemyDropType"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_ITITLE", "Red"
|
||||
Option "$SWWM_SINGLEFIRST", "saya_singlefirst", "YesNo"
|
||||
Option "$SWWM_WEAPONTOOLTIPS", "saya_weapontooltips", "YesNo"
|
||||
SafeCommand "$SWWM_RESETTOOLTIPS", "event swwmresettooltips"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_MCTITLE", "Red"
|
||||
Option "$SWWM_DRLASKILL", "saya_drlaskill", "SWWMDRLASkill"
|
||||
StaticText " "
|
||||
StaticText " "
|
||||
|
||||
}
|
||||
AddOptionMenu "OptionsMenu"
|
||||
{
|
||||
Submenu "$SAYA_MTITLE", "SayaOptionMenu"
|
||||
Submenu "$SAYA_MCREDS", "SayaCreditsMenu"
|
||||
}
|
||||
AddOptionMenu "OptionsMenuSimple"
|
||||
{
|
||||
Submenu "$SAYA_MTITLE", "SayaOptionMenu"
|
||||
Submenu "$SAYA_MCREDS", "SayaCreditsMenu"
|
||||
}
|
||||
ListMenu "MainMenu"
|
||||
{
|
||||
Class "SWWMMainMenu"
|
||||
Size Clean
|
||||
Font "BigFont", "DarkRed", "Brick"
|
||||
Selector "graphics/SayaIcon.png", -24, 0
|
||||
LineSpacing 36
|
||||
SWWMLogo
|
||||
Position 0, 56
|
||||
SWWMTextItemM "$MNU_NEWGAME", "n", "PlayerclassMenu"
|
||||
SWWMTextItemM "$MNU_OPTIONS", "o", "OptionsMenu"
|
||||
SWWMTextItemM "$MNU_GAMEFILES", "g", "GameFilesMenu"
|
||||
SWWMTextItemM "$MNU_INFO", "i", "ReadThisMenu"
|
||||
SWWMTextItemM "$MNU_QUITGAME", "q", "QuitMenu"
|
||||
}
|
||||
ListMenu "MainMenuTextOnly"
|
||||
{
|
||||
Class "SWWMMainMenu"
|
||||
Size Clean
|
||||
Font "BigFont", "DarkRed", "Brick"
|
||||
Selector "graphics/SayaIcon.png", -24, 0
|
||||
LineSpacing 36
|
||||
SWWMLogo
|
||||
Position 0, 56
|
||||
SWWMTextItemM "$MNU_NEWGAME", "n", "PlayerclassMenu"
|
||||
SWWMTextItemM "$MNU_OPTIONS", "o", "OptionsMenu"
|
||||
SWWMTextItemM "$MNU_GAMEFILES", "g", "GameFilesMenu"
|
||||
SWWMTextItemM "$MNU_INFO", "i", "ReadThisMenu"
|
||||
SWWMTextItemM "$MNU_QUITGAME", "q", "QuitMenu"
|
||||
}
|
||||
ListMenu "GameFilesMenu"
|
||||
{
|
||||
Class "SWWMCleanMenu"
|
||||
Size Clean
|
||||
Font "BigFont", "DarkRed", "Brick"
|
||||
Selector "graphics/SayaIcon.png", -24, 0
|
||||
LineSpacing 36
|
||||
Position 0, 88
|
||||
SWWMTextItemM "$MNU_LOADGAME", "l", "LoadGameMenu"
|
||||
SWWMTextItemM "$MNU_SAVEGAME", "s", "SaveGameMenu"
|
||||
}
|
||||
ListMenu "EpisodeMenu"
|
||||
{
|
||||
Class "SWWMBigMenuHack"
|
||||
Size Clean
|
||||
IfGame(Doom, Heretic, Hexen, Strife)
|
||||
{
|
||||
NetgameMessage "$NEWGAME"
|
||||
}
|
||||
IfGame(Chex)
|
||||
{
|
||||
NetgameMessage "$CNEWGAME"
|
||||
}
|
||||
Font "BigFont", "DarkGray", "Brick"
|
||||
Selector "graphics/SayaIcon.png", -24, 0
|
||||
LineSpacing 0
|
||||
SWWMStaticTextM 0, 0, "$MNU_EPISODE", "Red"
|
||||
Position 0, 0
|
||||
}
|
||||
|
||||
ListMenu "SkillMenu"
|
||||
{
|
||||
Class "SWWMBigMenuHack"
|
||||
Size Clean
|
||||
Font "BigFont", "DarkRed", "Brick"
|
||||
Selector "graphics/SayaIcon.png", -24, 0
|
||||
LineSpacing 0
|
||||
SWWMStaticTextM 0, 0, "$MNU_CHOOSESKILL", "Red"
|
||||
Position 0, 0
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
// This should act as Bilinear filtering when texture filtering is disabled
|
||||
// the algo is pretty much public domain, so no credit given
|
||||
|
||||
vec4 BilinearSample( in vec2 size, in vec2 pxsize, in vec2 pos )
|
||||
{
|
||||
vec2 f = fract(pos*size);
|
||||
pos += (.5-f)*pxsize;
|
||||
vec4 p0q0 = texture(tex,pos);
|
||||
vec4 p1q0 = texture(tex,pos+vec2(pxsize.x,0));
|
||||
vec4 p0q1 = texture(tex,pos+vec2(0,pxsize.y));
|
||||
vec4 p1q1 = texture(tex,pos+vec2(pxsize.x,pxsize.y));
|
||||
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
|
||||
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
|
||||
return mix(pInterp_q0,pInterp_q1,f.y);
|
||||
}
|
||||
|
||||
void SetupMaterial( inout Material mat )
|
||||
{
|
||||
vec2 size = textureSize(tex,0);
|
||||
vec2 pxsize = vec2(1./size.x,1./size.y);
|
||||
vec2 pos = vTexCoord.st;
|
||||
pos.x += .15*sin(pos.y*6.+timer*1.4)*clamp(.9-pos.y,0.,1.);
|
||||
mat.Base = BilinearSample(size,pxsize,pos);
|
||||
mat.Normal = ApplyNormalMap(pos);
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
// ah shit here we go again
|
||||
|
||||
#define overlay(a,b) (a<0.5)?(2.0*a*b):(1.0-(2.0*(1.0-a)*(1.0-b)))
|
||||
const float pi = 3.14159265358979323846;
|
||||
|
||||
vec2 warpcoord( in vec2 uv )
|
||||
{
|
||||
vec2 offset = vec2(0,0);
|
||||
offset.x = sin(pi*2.*(uv.x*2.*TEX_AR+timer*.125))*.02;
|
||||
offset.y += timer*.25;
|
||||
offset.x = cos(pi*2.*(uv.y*2.+timer*.125))*.02;
|
||||
return fract(uv+offset);
|
||||
}
|
||||
|
||||
vec2 warpcoord2( in vec2 uv )
|
||||
{
|
||||
vec2 offset = vec2(0,0);
|
||||
offset.y = sin(pi*2.*(uv.x*4.*TEX_AR+timer*.25))*.01;
|
||||
offset.x = cos(pi*2.*(uv.y*4.+timer*.25))*.01;
|
||||
return fract(uv+offset);
|
||||
}
|
||||
|
||||
#ifdef NO_BILINEAR
|
||||
#define BilinearSampleNoWrap(x,y,z,w) texture(x,y)
|
||||
#define BilinearSample(x,y,z,w) texture(x,y)
|
||||
#else
|
||||
vec4 BilinearSampleNoWrap( in sampler2D tex, in vec2 pos, in vec2 size, in vec2 pxsize )
|
||||
{
|
||||
vec2 f = fract(pos*size);
|
||||
pos += (.5-f)*pxsize;
|
||||
vec4 p0q0 = texture(tex,pos);
|
||||
vec4 p1q0 = texture(tex,pos+vec2(pxsize.x,0));
|
||||
vec4 p0q1 = texture(tex,pos+vec2(0,pxsize.y));
|
||||
vec4 p1q1 = texture(tex,pos+vec2(pxsize.x,pxsize.y));
|
||||
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
|
||||
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
|
||||
return mix(pInterp_q0,pInterp_q1,f.y);
|
||||
}
|
||||
|
||||
vec4 BilinearSample( in sampler2D tex, in vec2 pos, in vec2 size, in vec2 pxsize )
|
||||
{
|
||||
vec2 disp = floor(pos*vec2(4.,2.))/vec2(4.,2.);
|
||||
vec2 f = fract(pos*size);
|
||||
pos += (.5-f)*pxsize;
|
||||
vec4 p0q0 = texture(tex,fract((pos*vec2(4.,2.)))/vec2(4.,2.)+disp);
|
||||
vec4 p1q0 = texture(tex,fract((pos+vec2(pxsize.x,0))*vec2(4.,2.))/vec2(4.,2.)+disp);
|
||||
vec4 p0q1 = texture(tex,fract((pos+vec2(0,pxsize.y))*vec2(4.,2.))/vec2(4.,2.)+disp);
|
||||
vec4 p1q1 = texture(tex,fract((pos+vec2(pxsize.x,pxsize.y))*vec2(4.,2.))/vec2(4.,2.)+disp);
|
||||
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
|
||||
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
|
||||
return mix(pInterp_q0,pInterp_q1,f.y);
|
||||
}
|
||||
#endif
|
||||
|
||||
// based on gimp color to alpha, but simplified
|
||||
vec4 blacktoalpha( in vec4 src )
|
||||
{
|
||||
vec4 dst = src;
|
||||
float dist = 0., alpha = 0.;
|
||||
float d, a;
|
||||
a = clamp(dst.r,0.,1.);
|
||||
if ( a > alpha )
|
||||
{
|
||||
alpha = a;
|
||||
dist = d;
|
||||
}
|
||||
a = clamp(dst.g,0.,1.);
|
||||
if ( a > alpha )
|
||||
{
|
||||
alpha = a;
|
||||
dist = d;
|
||||
}
|
||||
a = clamp(dst.b,0.,1.);
|
||||
if ( a > alpha )
|
||||
{
|
||||
alpha = a;
|
||||
dist = d;
|
||||
}
|
||||
if ( alpha > 0. )
|
||||
{
|
||||
float ainv = 1./alpha;
|
||||
dst.rgb *= ainv;
|
||||
}
|
||||
dst.a *= alpha;
|
||||
return dst;
|
||||
}
|
||||
|
||||
void SetupMaterial( inout Material mat )
|
||||
{
|
||||
// store these to save some time
|
||||
vec2 size = vec2(textureSize(LogoTex,0));
|
||||
vec2 pxsize = 1./size;
|
||||
// y'all ready for this multilayered madness?
|
||||
vec2 uv = vTexCoord.st;
|
||||
// copy
|
||||
vec4 base = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(0.,.25),size,pxsize);
|
||||
// overlay
|
||||
vec4 tmp = BilinearSample(LogoTex,warpcoord2(uv)*vec2(.5,.25)+vec2(0.,.5),size,pxsize);
|
||||
base.r = overlay(base.r,tmp.r);
|
||||
base.g = overlay(base.g,tmp.g);
|
||||
base.b = overlay(base.b,tmp.b);
|
||||
// color to alpha
|
||||
base = blacktoalpha(base);
|
||||
// separate layer
|
||||
tmp = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(0.,.75),size,pxsize);
|
||||
// overlay
|
||||
vec4 tmp2 = BilinearSample(LogoTex,warpcoord(uv)*vec2(.5,.25)+vec2(.5,0.),size,pxsize);
|
||||
tmp.r = overlay(tmp.r,tmp2.r);
|
||||
tmp.g = overlay(tmp.g,tmp2.g);
|
||||
tmp.b = overlay(tmp.b,tmp2.b);
|
||||
// mask
|
||||
tmp.a = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,.25),size,pxsize).x;
|
||||
// darken
|
||||
tmp2.x = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,.5),size,pxsize).x;
|
||||
tmp.rgb *= 1.-tmp2.x;
|
||||
tmp.a = min(tmp.a+tmp2.x,1.);
|
||||
// merge down
|
||||
base.rgb = mix(base.rgb,tmp.rgb,tmp.a);
|
||||
base.a = min(base.a+tmp.a,1.);
|
||||
// add
|
||||
base.rgb += BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,.75),size,pxsize).rgb;
|
||||
// clamp borders
|
||||
vec2 sz = TEX_SZ;
|
||||
vec2 px = uv*sz;
|
||||
if ( (px.x <= 1) || (px.x >= (sz.x-1)) || (px.y <= 1) || (px.y >= (sz.y-1)) )
|
||||
base = vec4(0.);
|
||||
// ding, logo's done
|
||||
mat.Base = base;
|
||||
mat.Normal = ApplyNormalMap(vTexCoord.st);
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
$pitchshiftrange 0
|
||||
|
||||
title/cock sounds/title_cock.ogg
|
||||
title/fire sounds/title_fire.ogg
|
||||
title/thump sounds/title_thump.ogg
|
|
@ -0,0 +1,133 @@
|
|||
GameInfo
|
||||
{
|
||||
AddEventHandlers = "SWWMStaticHandler", "SWWMHandler"
|
||||
PlayerClasses = "SayaPlayer"
|
||||
StatusBarClass = "SayaStatusBar"
|
||||
StatScreen_Single = "SayaStatScreen"
|
||||
BackpackType = "HammerspaceEmbiggener"
|
||||
QuitSound = "misc/teleport"
|
||||
QuitMessages = "$QUITMSG", "$QUITMSG1", "$QUITMSG2", "$QUITMSG3",
|
||||
"$QUITMSG4", "$QUITMSG5", "$QUITMSG6", "$QUITMSG7",
|
||||
"$QUITMSG8", "$QUITMSG9", "$QUITMSG10", "$QUITMSG11"
|
||||
ChatSound = "misc/chat"
|
||||
NoMergePickupMsg = true
|
||||
CursorPic = "graphics/sayacurs.png"
|
||||
DimColor = "Black"
|
||||
DimAmount = 0.5
|
||||
BlurAmount = 0
|
||||
Endoom = "ENDSAYA"
|
||||
PickupColor = "White"
|
||||
MenuFontColor_Title = "Red"
|
||||
MenuFontColor_Label = "DarkRed"
|
||||
MenuFontColor_Value = "Red"
|
||||
MenuFontColor_Action = "DarkRed"
|
||||
MenuFontColor_Header = "Red"
|
||||
MenuFontColor_Highlight = "Brick"
|
||||
MenuFontColor_Selection = "Brick"
|
||||
MenuSliderColor = "Red"
|
||||
MenuSliderBackColor = "Gray"
|
||||
MenuBackButton = "graphics/sayaback.png"
|
||||
MessageBoxClass = "SWWMMessageBox"
|
||||
HelpMenuClass = "SWWMHelpMenu"
|
||||
MenuDelegateClass = "SWWMMenuDelegate"
|
||||
PauseSign = "graphics/sayapause.png"
|
||||
BorderFlat = "graphics/bord_flat.png"
|
||||
Border = 2, 0, "graphics/bord_tr.png", "graphics/bord_t.png", "graphics/bord_tl.png", "graphics/bord_r.png", "graphics/bord_l.png", "graphics/bord_br.png", "graphics/bord_b.png", "graphics/bord_bl.png"
|
||||
ForceTextInMenus = true
|
||||
TelefogHeight = 28
|
||||
// precache all intro sounds
|
||||
PrecacheSounds = "title/cock", "title/fire", "title/thump"
|
||||
// precache all intro textures, to avoid hiccups
|
||||
PrecacheTextures = "graphics/SayaLogo.png",
|
||||
"graphics/SayaLogo_Glow.png",
|
||||
"graphics/SayaLogo_Layers.png",
|
||||
"graphics/title_grad.png",
|
||||
"graphics/title_saya.png",
|
||||
"graphics/title_saya_dark.png",
|
||||
"graphics/title_saya_eye.png",
|
||||
"graphics/title_saya_smoke.png",
|
||||
"graphics/title_smoke_0.png",
|
||||
"graphics/title_smoke_1.png",
|
||||
"graphics/title_smoke_2.png",
|
||||
"graphics/title_smoke_3.png",
|
||||
"graphics/title_smoke_4.png",
|
||||
"graphics/title_smoke_5.png",
|
||||
"graphics/title_smoke_6.png",
|
||||
"graphics/title_smoke_7.png",
|
||||
"graphics/M_SAYA.png",
|
||||
"graphics/M_SAYA_Layers.png"
|
||||
}
|
||||
|
||||
ClearSkills
|
||||
|
||||
Skill chill
|
||||
{
|
||||
AutoUseHealth
|
||||
DamageFactor = 0.5
|
||||
EasyBossBrain
|
||||
SlowMonsters
|
||||
SpawnFilter = baby
|
||||
ACSReturn = 0
|
||||
Name = "$SAYA_SKCHILL"
|
||||
}
|
||||
Skill easy
|
||||
{
|
||||
DamageFactor = 0.75
|
||||
SpawnFilter = easy
|
||||
ACSReturn = 1
|
||||
Name = "$SAYA_SKEASY"
|
||||
}
|
||||
Skill normal
|
||||
{
|
||||
SpawnFilter = normal
|
||||
ACSReturn = 2
|
||||
Name = "$SAYA_SKNORMAL"
|
||||
DefaultSkill
|
||||
}
|
||||
Skill hard
|
||||
{
|
||||
DamageFactor = 1.25
|
||||
SpawnFilter = hard
|
||||
ACSReturn = 3
|
||||
Name = "$SAYA_SKHARD"
|
||||
}
|
||||
Skill hardcore
|
||||
{
|
||||
DisableCheats
|
||||
FastMonsters
|
||||
HealthFactor = 1.5
|
||||
DamageFactor = 1.5
|
||||
Aggressiveness = 0.25
|
||||
SpawnFilter = nightmare
|
||||
SpawnMulti
|
||||
ACSReturn = 4
|
||||
Name = "$SAYA_SKHARDCORE"
|
||||
MustConfirm = "$SAYA_SKHARDCORECONFIRM"
|
||||
}
|
||||
Skill lunatic
|
||||
{
|
||||
DisableCheats
|
||||
HealthFactor = 2.0
|
||||
DamageFactor = 2.0
|
||||
Aggressiveness = 1.0
|
||||
SpawnFilter = nightmare
|
||||
SpawnMulti
|
||||
TotalInfighting
|
||||
InstantReaction
|
||||
NoPain
|
||||
ACSReturn = 4
|
||||
Name = "$SAYA_SKLUNATIC"
|
||||
MustConfirm = "$SAYA_SKLUNATICCONFIRM"
|
||||
}
|
||||
|
||||
Map TITLEMAP "RED-EYED RAMPAGE Title Map"
|
||||
{
|
||||
Music = ""
|
||||
EventHandlers = "SayaTitleStuff"
|
||||
}
|
||||
|
||||
DamageType EndLevel
|
||||
{
|
||||
NoArmor
|
||||
Obituary = "$O_ENDLEVEL"
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
// Red-Eyed Rampage event processing
|
||||
|
||||
extend Class SWWMHandler
|
||||
{
|
||||
transient int WeaponFlash[10];
|
||||
|
||||
private ui void ModConsoleProcess( ConsoleEvent e )
|
||||
{
|
||||
// nothing here yet
|
||||
}
|
||||
|
||||
private void ModNetworkProcess( ConsoleEvent e )
|
||||
{
|
||||
if ( e.Name ~== "sayaweaponreceive" )
|
||||
{
|
||||
if ( (e.Args[0] < 0) || (e.Args[0] > 9) ) return;
|
||||
WeaponFlash[e.Args[0]] = gametic+25;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
// Red-Eyed Rampage replacements
|
||||
|
||||
extend Class SWWMHandler
|
||||
{
|
||||
private bool ModReplacement( ReplaceEvent e )
|
||||
{
|
||||
// nothing here yet
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
// Red-Eyed Rampage shaders
|
||||
|
||||
extend Class SWWMHandler
|
||||
{
|
||||
private ui void RenderShaders( RenderEvent e )
|
||||
{
|
||||
PlayerInfo p = players[consoleplayer];
|
||||
let mo = p.mo;
|
||||
bool pc = (p.camera == mo);
|
||||
if ( !mo || !saya_shaders || !pc )
|
||||
{
|
||||
if ( !saya_shaders ) ClearAllShaders(p,true);
|
||||
return;
|
||||
}
|
||||
let coat = BarrierPower(mo.FindInventory("BarrierPower"));
|
||||
if ( coat )
|
||||
{
|
||||
Shader.SetEnabled(p,"BarrierShader",true);
|
||||
Shader.SetUniform1f(p,"BarrierShader","timer",(gametic+e.FracTic)/GameTicRate);
|
||||
}
|
||||
else Shader.SetEnabled(p,"BarrierShader",false);
|
||||
if ( !(mo is 'SWWMPlayer') )
|
||||
{
|
||||
Shader.SetEnabled(p,"WaterWarp",false);
|
||||
Shader.SetEnabled(p,"LavaWarp",false);
|
||||
Shader.SetEnabled(p,"SlimeWarp",false);
|
||||
return;
|
||||
}
|
||||
let demo = SWWMPlayer(mo);
|
||||
if ( demo.lastunder == SWWMPlayer.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 == SWWMPlayer.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 == SWWMPlayer.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);
|
||||
}
|
||||
|
||||
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,"BarrierShader",false);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
// RED-EYED RAMPAGE HUD
|
||||
|
||||
Class SayaStatusBar : SWWMStatusBar
|
||||
{
|
||||
override void UpdateInterpolators()
|
||||
{
|
||||
}
|
||||
|
||||
override void GetMinimapColors()
|
||||
{
|
||||
mm_backcolor = "10 10 10";
|
||||
mm_cdwallcolor = "50 30 30";
|
||||
mm_efwallcolor = "a0 80 80";
|
||||
mm_fdwallcolor = "70 50 50";
|
||||
mm_interlevelcolor = "ff 00 60";
|
||||
mm_intralevelcolor = "00 60 ff";
|
||||
mm_lockedcolor = "00 90 80";
|
||||
mm_notseencolor = "30 20 20";
|
||||
mm_portalcolor = "40 30 20";
|
||||
mm_secretsectorcolor = "80 00 ff";
|
||||
mm_secretwallcolor = "60 40 80";
|
||||
mm_specialwallcolor = "ff a0 00";
|
||||
mm_tswallcolor = "30 20 40";
|
||||
mm_unexploredsecretcolor = "40 00 80";
|
||||
mm_wallcolor = "e0 c0 c0";
|
||||
mm_yourcolor = "80 00 00";
|
||||
}
|
||||
|
||||
override void DrawWeapons()
|
||||
{
|
||||
}
|
||||
|
||||
override int DrawStatus()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
// mod credits
|
||||
|
||||
Class SayaCreditsMenu : SWWMCreditsMenu
|
||||
{
|
||||
override void ChildInit( Menu parent )
|
||||
{
|
||||
cmusic.Push(new("SWWMCreditsEntry").Init("DeGenerator","Stompah"));
|
||||
cmusic.Push(new("SWWMCreditsEntry").Init("Teque","Triangular Bells"));
|
||||
}
|
||||
override String, int GetCreditsMus()
|
||||
{
|
||||
return "music/saya_titlemus.ogg", 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
// intermission stat screen
|
||||
Class SayaStatScreen : StatusScreen
|
||||
{
|
||||
// TODO replicate what Ibuki's screen does once it's fully implemented
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
// Things for the titlemap
|
||||
|
||||
Struct TitleSmoke
|
||||
{
|
||||
int age, maxage;
|
||||
Vector2 pos, vel;
|
||||
double ang, angvel;
|
||||
double scale;
|
||||
}
|
||||
|
||||
Class SayaTitleStuff : EventHandler
|
||||
{
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
// Stinky nerd gremlin Saya Miyamoto
|
||||
|
||||
Class SayaPlayer : SWWMPlayer
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SAYA";
|
||||
Speed 1;
|
||||
Radius 16;
|
||||
Height 47;
|
||||
Mass 150;
|
||||
PainChance 255;
|
||||
Health 100;
|
||||
Player.DisplayName "$T_SAYA";
|
||||
Player.AttackZOffset 13;
|
||||
Player.ViewHeight 43;
|
||||
Player.AirCapacity 0;
|
||||
Player.GruntSpeed 20;
|
||||
Player.ForwardMove 1., 1.;
|
||||
Player.SideMove 1., 1.;
|
||||
Player.SoundClass "saya";
|
||||
DamageFactor "Drowning", 0.;
|
||||
+DONTMORPH;
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( player && (player.mo == self) )
|
||||
{
|
||||
if ( Health > 1000 ) player.Health = Health -= 8;
|
||||
else if ( Health > 900 ) player.Health = Health -= 4;
|
||||
else if ( Health > 800 ) player.Health = Health -= 2;
|
||||
else if ( Health > 700 ) player.Health = Health -= 1;
|
||||
else if ( !(level.maptime&1) && (Health > 600) ) player.Health = Health -= 1;
|
||||
else if ( !(level.maptime&3) && (Health > 500) ) player.Health = Health -= 1;
|
||||
else if ( !(level.maptime&5) && (Health > 400) ) player.Health = Health -= 1;
|
||||
else if ( !(level.maptime&7) && (Health > 300) ) player.Health = Health -= 1;
|
||||
else if ( !(level.maptime&15) && (Health > 200) ) player.Health = Health -= 1;
|
||||
else if ( !(level.maptime&31) && (Health > 100) ) player.Health = Health -= 1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
// mod-specific utility code
|
||||
extend Class SWWMUtility
|
||||
{
|
||||
// IsZeroDamage() can lead to some false negatives, we have to account for that
|
||||
static play bool ValidProjectile( Actor a )
|
||||
{
|
||||
if ( !a.bMISSILE ) return false;
|
||||
// TODO add mod projectiles here
|
||||
if ( !a.IsZeroDamage() ) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO slot replacers
|
||||
}
|