An important rewrite that was a long time coming.

First, a message: There is a time and a place for everything, and understanding
what is and is not appropriate is a fundamental aspect of how one should behave
in society. I must take steps in correcting my behavior, how I act both through
my interactions with others and through my own creations as well. While this is
only one step in a very, very long road, it is hopefully a step in the right
direction.

Various aspects of the story and lore, dialogues, character interactions, etc.
have been sanitized to be less explicit. I cannot in good conscience have
something like this in a project I'm creating, especially one with such a broad
audience as the one it has garnered.

A couple other things have been removed, such as direct references to
problematic media, and I've decided to forego the H-Doom compatibility that was
added "as a joke".

These changes will also be later applied to the side mods as well.

Should I have still missed anything, I please ask that people notify me and I
will address it as soon as I possibly can.

Furthermore, if any of the people still credited in this mod wish to have their
name and anything they contributed removed from it, I will do so.
This commit is contained in:
Mari the Deer 2023-03-17 11:52:36 +01:00
commit a8f6417781
280 changed files with 1332 additions and 1357 deletions

View file

@ -1,20 +1,26 @@
// HORNY
// Surprisingly, I've put in actual effort into this compatibility thing (even
// if it's just sort of partial).
// Demo-chan has no pp in this body that they can stick into the girls, so all
// they get is the headpats. There's some sort of crazy magic going on here,
// that makes the demon gals fall to their knees instantly. Saya thinks it
// might be a side effect of teaching them the "blow kiss" spell (which has the
// same effect).
// Obviously, all the standard weapons work, and these gals appear to be of the
// masochistic kind. This is generally not very effective compared to the pats
// and smooches, but it's there, if you're willing to hurt them (I wouldn't).
// enjoy getting bonked, you pervy perv
Class SWWMHDoomHandler : StaticEventHandler
{
int callout_len;
ui int timer;
ui TextureID scr;
ui TextureID bonker, bonk, bonked;
bool detected;
ui int rss;
ui Font mBigFont;
private ui int GetUIRandom()
{
return (rss = (rss<<1)*35447+(rss/87));
}
private ui double RandomShiver()
{
int sd = GetUIRandom();
return ((abs(sd)%11)-5)*.1;
}
override void OnRegister()
{
@ -26,14 +32,15 @@ Class SWWMHDoomHandler : StaticEventHandler
}
if ( !detected )
return;
SetRandomSeed[hdscreen](Random[hdscreen]()+consoleplayer+MSTime());
callout_len = int(ceil((S_GetLength("hdoom/horny")*GameTicRate)/16)*16);
SetRandomSeed[hdscreen](Random[hdscreen]()+consoleplayer+int(MSTimeF()));
Console.Printf(
"\cx┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\c-\n"
"\cx┃ \cfOh my, someone appears to be \cgH \ckO \cdR \cvN \chY \ct♥ \cx┃\c-\n"
"\cx┃ \cfWell, all you'll be getting here is the power of headpats. \cx┃\c-\n"
"\cx┃ \cfIf you want Demo-chan to actually fuck some hot demon girls, \cx┃\c-\n"
"\cx┃ \cfjust go commission a porn artist or something, idk. \cx┃\c-\n"
"\cx┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\c-");
"\cx┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\c-\n"
"\cx┃ \cfOh my, someone appears to be \cgH \ckO \cdR \cvN \chY \ct♥ \cx┃\c-\n"
"\cx┃ \cfWell, too bad, this mod isn't compatible with H-Doom \cx┃\c-\n"
"\cx┃ ┃\c-\n"
"\cx┃ \cfget bonked \cx┃\c-\n"
"\cx┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\c-");
S_StartSound("compat/warn",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
@ -44,37 +51,13 @@ Class SWWMHDoomHandler : StaticEventHandler
Destroy();
}
static bool IsCuteGirl( Actor a )
{
Class p = a.GetClass();
while ( p.GetParentClass() && (p.GetParentClass() != 'Actor') )
{
p = p.GetParentClass();
if ( p.GetClassName() == 'HDoomMonster' )
return true;
}
return false;
}
static bool IsSexyTime( Actor a )
{
Class p = a.GetClass();
while ( p.GetParentClass() && (p.GetParentClass() != 'Actor') )
{
p = p.GetParentClass();
if ( p.GetClassName() == 'SexActor' )
return true;
}
return false;
}
static bool IsStaticSexyTime( Actor a )
{
Class p = a.GetClass();
while ( p.GetParentClass() && (p.GetParentClass() != 'Actor') )
{
p = p.GetParentClass();
if ( p.GetClassName() == 'StaticSexActor' )
if ( (p.GetClassName() == 'SexActor') || (p.GetClassName() == 'StaticSexActor') )
return true;
}
return false;
@ -82,101 +65,56 @@ Class SWWMHDoomHandler : StaticEventHandler
override void WorldThingSpawned( WorldEvent e )
{
// demo can't sex the ladies (not with this body)
// spawn a headpat tracker, we can at least do this much for them
if ( IsSexyTime(e.Thing) )
{
e.Thing.bUSESPECIAL = false;
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
hp.target = e.Thing;
// sweet dreams, demon
HeadpatTracker(hp).patstate = e.Thing.FindState("TooLate");
HeadpatTracker(hp).deathstate = e.Thing.FindState("Finish");
// height fixes
String cname = e.Thing.GetClassName();
if ( cname.Left(12) ~== "Cacodemoness" )
HeadpatTracker(hp).hdoomheightfix = .2;
else if ( cname.Left(12) ~== "ImpEncounter" )
HeadpatTracker(hp).hdoomheightfix = .35;
else if ( cname.Left(8) ~== "Mancubus" )
HeadpatTracker(hp).hdoomheightfix = .1;
else if ( cname.Left(9) ~== "HLostSoul" )
HeadpatTracker(hp).hdoomheightfix = .5;
else if ( cname.Left(10) ~== "ArchViless" )
HeadpatTracker(hp).hdoomheightfix = -.1;
}
else if ( IsStaticSexyTime(e.Thing) )
{
e.Thing.bUSESPECIAL = false;
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
hp.target = e.Thing;
if ( e.Thing.GetClassName() == 'ImpInAChair' )
{
HeadpatTracker(hp).hdoomheightfix = .2;
HeadpatTracker(hp).hdoomangfix = 15;
}
}
else if ( IsCuteGirl(e.Thing) )
{
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
hp.target = e.Thing;
// sweet dreams, demon
HeadpatTracker(hp).lethalpat = true;
String cname = e.Thing.GetClassName();
// height fixes
if ( cname.Left(12) ~== "ImpEncounter" )
HeadpatTracker(hp).hdoomheightfix = .1;
else if ( cname.Left(8) ~== "Mancubus" )
HeadpatTracker(hp).hdoomheightfix = -.1;
else if ( cname.Left(9) ~== "HLostSoul" )
HeadpatTracker(hp).hdoomheightfix = .5;
else if ( cname.Left(10) ~== "ArchViless" )
HeadpatTracker(hp).hdoomheightfix = -.3;
}
}
override void WorldThingRevived( WorldEvent e )
{
// reattach pats
WorldThingSpawned(e);
// no interaction available
if ( IsSexyTime(e.Thing) ) e.Thing.bUSESPECIAL = false;
}
override void UiTick()
{
if ( !detected ) return;
if ( gamestate == GS_LEVEL )
if ( !detected || (gamestate != GS_LEVEL) )
{
if ( timer == 50 )
{
S_StartSound("bestsound",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound("bestsound",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
else if ( timer == 70 )
{
int ngiggl = Random[hdscreen](1,14);
S_StartSound(String.Format("saya/giggle%d",ngiggl),CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound(String.Format("saya/giggle%d",ngiggl),CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
timer++;
timer = 0;
return;
}
else timer = 0;
if ( timer == 16 )
{
S_StartSound("hdoom/horny",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound("hdoom/horny",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
if ( timer == callout_len+24 )
{
S_StartSound("misc/spawn",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound("misc/spawn",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
bonker = TexMan.CheckForTexture("graphics/HDoom_Bonker.png");
bonk = TexMan.CheckForTexture("graphics/HDoom_Bonk.png");
bonked = TexMan.CheckForTexture("graphics/HDoom_Bonked.png");
}
else if ( (timer >= callout_len+32) && !(timer%16) )
{
double ptch = FRandom[hdscreen](.95,1.05);
S_StartSound("hdoom/bonk",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE,ptch);
S_StartSound("hdoom/bonk",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE,ptch);
}
timer++;
}
override void RenderOverlay( RenderEvent e )
{
if ( !detected || (timer < 50) || (timer > 150) ) return;
if ( !scr ) scr = TexMan.CheckForTexture("graphics/hdscreen.png");
double ar = Screen.GetAspectRatio();
Vector2 tsize = TexMan.GetScaledSize(scr);
Vector2 vsize = (Screen.GetWidth(),Screen.GetHeight());
if ( (tsize.x > vsize.x) || (tsize.y > vsize.y) )
{
double sar = tsize.x/tsize.y;
if ( sar > ar ) vsize = (tsize.x,tsize.x/ar);
else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y);
else vsize = tsize;
}
double alph = clamp(2.5-(timer+e.FracTic)/50.,0.,.25)*4.;
Screen.DrawTexture(scr,false,(vsize.x-tsize.x)/2.,(vsize.y-tsize.y)/2.,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,alph);
if ( !detected || (timer < callout_len+24) ) return;
if ( !mBigFont ) mBigFont = Font.GetFont('TewiFontOutline');
double scl = max(min(floor(Screen.GetWidth()/120.),floor(Screen.GetHeight()/100)),1.);
double iscl = scl/4.;
double ox = Screen.GetWidth()/2;
double oy = Screen.GetHeight()/2-4*scl;
String str = "HORNY";
double alf = clamp(16-((timer%16)+e.FracTic)*2,0,16)/16.;
rss = MSTime()/10;
Vector2 ofs = (RandomShiver(),RandomShiver())*3.*scl*alf;
Screen.DrawText(mBigFont,Font.CR_SAPPHIRE,ox-(mBigFont.StringWidth(str)*scl*2)/2+ofs.x,oy+8*scl+ofs.y,str,DTA_ScaleX,scl*2,DTA_ScaleY,scl*2);
Screen.DrawText(mBigFont,Font.FindFontColor('MiniFlash'),ox-(mBigFont.StringWidth(str)*scl*2)/2+ofs.x,oy+8*scl+ofs.y,str,DTA_ScaleX,scl*2,DTA_ScaleY,scl*2,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alf);
double phase = cos(((timer+e.FracTic)-32)*22.5)*.5+.5;
Screen.DrawTexture(bonker,false,ox+18*scl,oy,DTA_ScaleX,iscl,DTA_ScaleY,iscl,DTA_Rotate,-15+phase*5);
Screen.DrawTexture(bonked,false,ox-22*scl,oy,DTA_ScaleX,iscl,DTA_ScaleY,iscl*(1.-max(phase-.8,0.)),DTA_Rotate,5-phase*5);
Screen.DrawTexture(bonk,false,ox+10*scl,oy+2*scl,DTA_ScaleX,iscl,DTA_ScaleY,iscl,DTA_Rotate,-45+phase*45);
}
}

View file

@ -13,14 +13,13 @@
Class SWWMBrutalHandler : StaticEventHandler
{
ui int timer;
ui TextureID scr;
ui TextureID scr[85];
bool detected;
String which, whichshort;
override void OnRegister()
{
if ( swwm_iseriouslywanttoplaythiswithbd )
return;
// check for brutal doom
foreach ( cls:AllActorClasses )
{
if ( cls.GetClassName() == "BDoomer" )
@ -35,21 +34,22 @@ Class SWWMBrutalHandler : StaticEventHandler
which = "Project Brutality";
whichshort = "PB";
}
if ( detected ) break;
if ( !detected ) continue;
let shnd = SWWMStaticHandler(StaticEventHandler.Find("SWWMStaticHandler"));
shnd.isbd = true;
shnd.bdname = which;
Console.Printf(
"\cx┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\c-\n"
"\cx┃ \cfIf you have "..whichshort.." 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_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
break;
}
if ( !detected )
return;
SetRandomSeed[bdscreen](Random[bdscreen]()+consoleplayer+MSTime());
Console.Printf(
"\cx┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\c-\n"
"\cx┃ \cfIf you have "..whichshort.." 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_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
override void WorldLoaded( WorldEvent e )
@ -61,18 +61,26 @@ Class SWWMBrutalHandler : StaticEventHandler
override void UiTick()
{
if ( !detected ) return;
if ( gamestate == GS_LEVEL )
if ( !detected || (gamestate != GS_LEVEL) )
{
if ( timer == 1 )
{
S_StartSound("brutal/ezmodo",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound("brutal/ezmodo",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
else if ( timer == 350 ) ThrowAbortException("This manual abort is for your own safety");
timer++;
timer = 0;
return;
}
else timer = 0;
if ( timer == 35 )
{
S_StartSound("misc/spawn",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound("misc/spawn",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
else if ( timer == 140 )
{
for ( int i=0; i<85; i++ )
scr[i] = TexMan.CheckForTexture(String.Format("graphics/BDScreen/BDSCR%03d.jpg",i+1));
S_ChangeMusic("",force:true);
S_StartSound("brutal/bdscreen",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
S_StartSound("brutal/bdscreen",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE);
}
else if ( timer == 484 ) ThrowAbortException("This manual abort is for your own safety");
timer++;
}
override void WorldTick()
@ -84,19 +92,16 @@ Class SWWMBrutalHandler : StaticEventHandler
override void RenderOverlay( RenderEvent e )
{
if ( !detected ) return;
if ( !scr ) scr = TexMan.CheckForTexture("graphics/bdscreen.png");
Screen.Dim("Red",(timer/350.)-.2,0,0,Screen.GetWidth(),Screen.GetHeight());
double ar = Screen.GetAspectRatio();
Vector2 tsize = TexMan.GetScaledSize(scr);
Vector2 vsize = (Screen.GetWidth(),Screen.GetHeight());
if ( (tsize.x > vsize.x) || (tsize.y > vsize.y) )
if ( timer < 35 ) return;
Screen.Dim("Black",clamp(((timer+e.fractic)-35.)/70.,0.,1.),0,0,Screen.GetWidth(),Screen.GetHeight());
if ( timer < 140 )
{
double sar = tsize.x/tsize.y;
if ( sar > ar ) vsize = (tsize.x,tsize.x/ar);
else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y);
else vsize = tsize;
String str = "Can I run this with \cg"..which.."\c-?";
Screen.DrawText(bigfont,Font.CR_WHITE,(Screen.GetWidth()-bigfont.StringWidth(str)*CleanXFac_1)/2,(Screen.GetHeight()-bigfont.GetHeight()*CleanYFac_1)/2,str,DTA_CleanNoMove_1,true);
return;
}
Screen.DrawTexture(scr,false,(vsize.x-tsize.x)/2.+FRandom[bdscreen](-1,1)*max(timer-40,0)**3*.000003,(vsize.y-tsize.y)/2.+FRandom[bdscreen](-1,1)*max(timer-40,0)**3*.000003,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,min(1.,timer/50.));
Screen.Dim("Red",(timer/70.)-3.5,0,0,Screen.GetWidth(),Screen.GetHeight());
int frameno = clamp((timer-140)/4,0,84);
double scl = max(floor(Screen.GetWidth()/320.),1.);
Screen.DrawTexture(scr[frameno],false,(Screen.GetWidth()-320*scl)/2,(Screen.GetHeight()-132*scl)/2,DTA_ScaleX,scl,DTA_ScaleY,scl);
}
}