swwmgz_m/zscript/compat/swwm_shame.zsc
2025-02-06 11:51:14 +01:00

231 lines
9.7 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// SHAMEFUL DISPLAY
// Hello yes how do I explain this?
//
// Some people try to autoload this stuff without realizing that not all big
// gameplay mods can be combined just like that, they will break in funky ways™
//
// For those who are not aware, there are "monsters only" versions of these
// types of mods, and you can load them fine, they should just work™
//
// Still, if you insist on doing "the funny thing", this event handler is there
// so you know what I think of your attempt at being funny
//
// So, yeah, thanks for giving me an excuse to make this silly script
//
// PS: I actually like Project Brutality, no joke
// Brutal Doom is still poopy junk tho, every single fork of it is better
// (except Black Edition, that one is just embarrassing)
Class SWWMBrutalHandler : StaticEventHandler
{
ui int timer;
ui Font fnt;
ui TextureID boydance[10], boykiss;
ui int boyframe, boystate, boyloop1, boyloop2, boytimer, boyseq[12];
bool detected;
const BOYTICRATE = 5;
override void OnRegister()
{
// check for brutal doom
foreach ( cls:AllActorClasses )
{
if ( (cls.GetClassName() == 'Doomer') || (cls.GetClassName() == 'BDoomer') || (cls.GetClassName() == 'BEDoomer') )
{
detected = true;
}
if ( !detected ) continue;
let shnd = SWWMStaticHandler(StaticEventHandler.Find("SWWMStaticHandler"));
shnd.isbd = true;
Console.PrintfEx(PRINT_HIGH|PRINT_NONOTIFY,
"\cx┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\c-\n"
"\cx┃ \cfIf you have BD on your autoload you really shouldn't.\cx ┃\c-\n"
"\cx┃ \cfIf you manually loaded it with this mod, why would you?\cx ┃\c-\n"
"\cx┃ \cfThey're not compatible and never will be.\cx ┃\c-\n"
"\cx┃ \cfThis mod will now shit the bed once you go in-game,\cx ┃\c-\n"
"\cx┃ \cfand trust me, it's better this way.\cx ┃\c-\n"
"\cx┃ \cf<See you again, have a nice day>\cx ┃\c-\n"
"\cx┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\c-");
S_StartSound("compat/warn",CHAN_YABLEWIT,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
break;
}
}
override void WorldLoaded( WorldEvent e )
{
// get rid of ourselves if not needed
if ( !detected && !bDestroyed )
Destroy();
}
override void UiTick()
{
if ( !detected || (gamestate != GS_LEVEL) )
{
timer = 0;
return;
}
if ( timer == 70 )
{
boykiss = TexMan.CheckForTexture("graphics/BDScreen/BOYKISSR.png");
fnt = Font.GetFont("TewiFontOutline");
S_StartSound("misc/spawn",CHAN_YABLEWIT,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1.,ATTN_NONE);
S_StartSound("misc/spawn",CHAN_YABLEWIT,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1.,ATTN_NONE);
S_ChangeMusic("",force:true);
Console.PrintfEx(PRINT_HIGH|PRINT_NONOTIFY,
"\cj⢀⡾⠳⣄⣠⡴⠛⣆\n"
"\cj⢠⡟⠈⠳⣄⣠⠞⠉⠸⣆\c-\n"
"\cj⢠⡟⠈⢳⣄⢠⡤⣤⣤⣀⡀⣠⠞⠁⢻⡀\c-\n"
"\cj⠙⢷⡀⢸⡇⠉⠙⠳⢦⣄⣠⠞⠁⠘⣇\c-\n"
"\cj⢰⡇⠙⣦⡀⠻⣄⠈⠻⣦⣀⡾⠋⣿\c-\n"
"\cj⢸⡇⢀⣨⡷⠞⠛⠛⠈⠻⣦⣿\c-\n"
"\cj⢸⡇⢴⣯⣥⣤⣤⣤⣤⠴⣿\c-\n"
"\cj⠸⡇⢰⡇\c-\n"
"\cj⢿⡀⢀⡾\c-\n"
"\cj⠈⢧⢤⣤⡤⠤⢤⣤⣤⣤⣤⡄⣶⣶⣿⣿⣟⠛⠛⢿⡛⢀⡾⠁\c-\n"
"\cj⠈⢷⡀⢸⣿⣿⣿⣿⡇⣿⣿⣿⣿⣿⠘⡇⣠⣟⣁⣀\c-\n"
"\cj⢻⡟⠓⠶⠶⠿⢸⡇⠘⣿⣿⣿⣿⠇⣿⣿⣿⣿⡏⠈⠉⠉⣩⡟\c-\n"
"\cj⠻⣄⡀⠘⣧⢻⣿⣿⡟⢀⣀⡀⠈⠿⠿⠟⠁⣀⡴⠋\c-\n"
"\cj⢨⡏⠠⠶⣿⣤⠶⠰⢿⣷⠞⠻⣦\c-\n"
"\cj⢠⡟⠰⣤⣤⡴⠟⠶⠶⠶⠛⠈⠁⠈⢷⡀\c-\n"
"\cj⠿⢤⡤⠴⠶⠶⣤⣀⣀⣠⡴⠞⠛⠓⠒⠛⠛⠋⠁\c-\n"
"\cj⠉⠻⣶⠶⣤⣤⣤⡄⠛⣿⠉⠁\c-\n"
"\cj⠙⢦⣄⠘⣧\c-\n"
"\cj⣴⠟⠁⠸⣇\c-\n"
"\cj⠼⠷⢶⡶⢹⡄\c-\n"
"\cj⡾⠁⠈⣧\c-\n"
"\cj⣸⠇⢹⡆\c-\n"
"\cj⠈⣇\c-\n"
"\cj⢸⡇\c-\n"
"\cj\c-\n"
"\cj⢸⡇\c-\n"
"\cjYou like playing \cgBrutal Doom\cj, don't you?\c-");
}
else if ( timer == 140 )
{
for ( int i=0; i<10; i++ )
boydance[i] = TexMan.CheckForTexture(String.Format("graphics/BDScreen/BOYKISS%d.png",i));
// map frames to states
boyseq[0] = 0;
boyseq[1] = 1;
boyseq[2] = 2;
boyseq[3] = 3;
boyseq[4] = 4;
boyseq[5] = 5;
boyseq[6] = 3;
boyseq[7] = 2;
boyseq[8] = 6;
boyseq[9] = 7;
boyseq[10] = 8;
boyseq[11] = 9;
S_ChangeMusic("music/thepenis.it",force:true);
}
else if ( timer == 2100 ) ThrowAbortException("This manual abort is for your own safety");
timer++;
if ( timer >= 105 )
{
boyframe = boyseq[boystate];
boytimer++;
if ( boytimer%BOYTICRATE ) return;
// funni state machine
switch ( boystate )
{
case 0: // up
boystate = 1;
break;
case 1: // down
if ( boyloop1 >= 2 )
{
boyloop1 = 0;
boystate = 2;
break;
}
boyloop1++;
boystate = 0;
break;
case 2: // turn A
boystate = 3;
break;
case 3: // turn B
boystate = 4;
break;
case 4: // down
boystate = 5;
break;
case 5: // up
if ( boyloop1 >= 2 )
{
boyloop1 = 0;
boystate = 6;
break;
}
boyloop1++;
boystate = 4;
break;
case 6: // turn B
boystate = 7;
break;
case 7: // turn A
if ( boyloop2 >= 2 )
{
boyloop2 = 0;
boystate = 8;
break;
}
boyloop2++;
boystate = 0;
break;
case 8: // spin left
boystate = 9;
break;
case 9: // spin back
boystate = 10;
break;
case 10: // spin right
boystate = 11;
break;
case 11: // spin front
if ( boyloop1 >= 2 )
{
boyloop1 = 0;
boystate = 0;
break;
}
boyloop1++;
boystate = 8;
break;
}
}
}
override void WorldTick()
{
if ( !detected ) return;
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] ) players[i].cheats |= CF_TOTALLYFROZEN;
}
override void RenderOverlay( RenderEvent e )
{
if ( !detected ) return;
Screen.Dim("White",clamp((timer+e.fractic)/70.,0.,1.),0,0,Screen.GetWidth(),Screen.GetHeight());
if ( timer < 70 ) return;
String str = "You like playing \cgBrutal Doom\c-, don't you?";
int boxh = fnt?((fnt.GetHeight()+16)*CleanYFac):0;
double scl = (Screen.GetHeight()-boxh)/2048.;
if ( boykiss.IsValid() ) Screen.DrawTexture(boykiss,false,Screen.GetWidth()/2,(Screen.GetHeight()-boxh)/2,DTA_CenterOffset,true,DTA_ScaleX,scl,DTA_ScaleY,scl);
if ( fnt )
{
Screen.Dim("Black",.8,0,Screen.GetHeight()-boxh,Screen.GetWidth(),boxh);
Screen.DrawText(fnt,Font.CR_WHITE,(Screen.GetWidth()-fnt.StringWidth(str)*CleanXFac)/2,Screen.GetHeight()-(boxh-8*CleanYFac),str,DTA_CleanNoMove,true);
}
if ( timer < 140 ) return;
if ( boydance[boyframe].IsValid() )
{
Screen.DrawTexture(boydance[boyframe],false,112*CleanXFac_1,192*CleanYFac_1,DTA_CleanNoMove_1,true);
Screen.DrawTexture(boydance[boyframe],false,Screen.GetWidth()-112*CleanXFac_1,192*CleanYFac_1,DTA_CleanNoMove_1,true);
Screen.DrawTexture(boydance[boyframe],false,112*CleanXFac_1,Screen.GetHeight()-(boxh+32*CleanYFac_1),DTA_CleanNoMove_1,true);
Screen.DrawTexture(boydance[boyframe],false,Screen.GetWidth()-112*CleanXFac_1,Screen.GetHeight()-(boxh+32*CleanYFac_1),DTA_CleanNoMove_1,true);
}
}
}