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:
parent
63a97973b1
commit
a8f6417781
280 changed files with 1332 additions and 1357 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ extend Class SWWMHandler
|
|||
{
|
||||
if ( e.Thing.IsFriend(e.DamageSource) )
|
||||
lastcombat = AddOneliner("friendhit",1,10);
|
||||
else if ( (!lastcombat || (gametic > lastcombat+90)) && !Random[DemoLines](0,(e.DamageSource.bBOSS||e.DamageSource.FindInventory("BossMarker"))?1:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls
|
||||
else if ( (!lastcombat || (gametic > lastcombat+90)) && !Random[DemoLines](0,(e.DamageSource.bBOSS||e.DamageSource.FindInventory("BossMarker"))?1:4) )
|
||||
lastcombat = AddOneliner("gethit",1,15);
|
||||
}
|
||||
highesttic = gametic;
|
||||
|
|
@ -175,7 +175,7 @@ extend Class SWWMHandler
|
|||
lastcombat = AddOneliner("friendkill",1,5);
|
||||
if ( Demolitionist(e.DamageSource) ) Demolitionist(e.DamageSource).facesad = true;
|
||||
}
|
||||
else if ( (!lastcombat || (gametic > lastcombat+50)) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls
|
||||
else if ( !lastcombat || (gametic > lastcombat+50) )
|
||||
{
|
||||
int lc = 0;
|
||||
Inventory buff = inflictor?inflictor.FindInventory('ParriedBuff'):null;
|
||||
|
|
|
|||
|
|
@ -294,72 +294,72 @@ extend Class SWWMHandler
|
|||
e.Thing.bSHOOTABLE = false; // no hurt
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .2;
|
||||
HeadpatTracker(hp).heightfix = .2;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "CommanderKeen" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .4;
|
||||
HeadpatTracker(hp).hdoomangfix = 5;
|
||||
HeadpatTracker(hp).heightfix = .4;
|
||||
HeadpatTracker(hp).angfix = 5;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "BBChair" )
|
||||
{
|
||||
e.Thing.bUSESPECIAL = false;
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .2;
|
||||
HeadpatTracker(hp).hdoomangfix = 15;
|
||||
HeadpatTracker(hp).heightfix = .2;
|
||||
HeadpatTracker(hp).angfix = 15;
|
||||
HeadpatTracker(hp).patstate = e.Thing.MeleeState;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "EvilEye" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .1;
|
||||
HeadpatTracker(hp).heightfix = .1;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "HeadCandles" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomangfix = 20;
|
||||
HeadpatTracker(hp).angfix = 20;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "HeartColumn" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = -.3;
|
||||
HeadpatTracker(hp).heightfix = -.3;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "Meat2" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .6;
|
||||
HeadpatTracker(hp).hdoomangfix = -15;
|
||||
HeadpatTracker(hp).heightfix = .6;
|
||||
HeadpatTracker(hp).angfix = -15;
|
||||
HeadpatTracker(hp).dvacationarghack = true;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "Meat3" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .6;
|
||||
HeadpatTracker(hp).hdoomangfix = 20;
|
||||
HeadpatTracker(hp).heightfix = .6;
|
||||
HeadpatTracker(hp).angfix = 20;
|
||||
HeadpatTracker(hp).dvacationarghack = true;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "LegsBabe" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = -1.5;
|
||||
HeadpatTracker(hp).hdoomangfix = 20;
|
||||
HeadpatTracker(hp).heightfix = -1.5;
|
||||
HeadpatTracker(hp).angfix = 20;
|
||||
HeadpatTracker(hp).dvacationarghack = true;
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "Meat4" )
|
||||
{
|
||||
let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos);
|
||||
hp.target = e.Thing;
|
||||
HeadpatTracker(hp).hdoomheightfix = .6;
|
||||
HeadpatTracker(hp).hdoomangfix = 15;
|
||||
HeadpatTracker(hp).heightfix = .6;
|
||||
HeadpatTracker(hp).angfix = 15;
|
||||
HeadpatTracker(hp).dvacationarghack = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,8 +111,6 @@ extend Class SWWMHandler
|
|||
if ( a.target != players[consoleplayer].mo ) continue;
|
||||
// ignore friends
|
||||
if ( a.IsFriend(players[consoleplayer].mo) ) continue;
|
||||
// [HDoom] ignore cute girls
|
||||
if ( SWWMHDoomHandler.IsCuteGirl(a.target) ) continue;
|
||||
// ignore if player can't see it
|
||||
if ( !SWWMUtility.InPlayerFOV(players[consoleplayer],a) ) continue;
|
||||
// is it already in?
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@ Class SWWMStaticHandler : StaticEventHandler
|
|||
// crash handler
|
||||
ui bool wasinmap;
|
||||
ui int timer, msgpick;
|
||||
// broccoli doccoli
|
||||
bool isbd;
|
||||
String bdname;
|
||||
// versioning
|
||||
bool tainted;
|
||||
String taintver;
|
||||
|
|
@ -525,8 +528,7 @@ Class SWWMStaticHandler : StaticEventHandler
|
|||
}
|
||||
else if ( timer == 140 )
|
||||
{
|
||||
let hnd = SWWMBrutalHandler(StaticEventHandler.Find("SWWMBrutalHandler"));
|
||||
if ( hnd && hnd.detected ) Console.Printf("\cfYou shouldn't have tried running this with "..hnd.which..".\c-");
|
||||
if ( isbd ) Console.Printf("\cfYou shouldn't have tried running this with "..bdname..".\c-");
|
||||
else Console.Printf("\cfYou should probably screenshot this error and show it to Marisa.\c-");
|
||||
Console.Printf("\cfLoaded Version:\n \cj%s\c-",StringTable.Localize("$SWWM_SHORTVER"));
|
||||
if ( tainted ) Console.Printf("\cfSavegame Version:\n \cj%s\c-",taintver);
|
||||
|
|
|
|||
|
|
@ -318,13 +318,6 @@ Class SWWMDialogues abstract
|
|||
msg2.delay = 30;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
msg = msg2;
|
||||
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
|
||||
msg2.seqname = "SAYABLOODD";
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 20;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
break;
|
||||
case SWWMDLG_HYPO:
|
||||
msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
|
|
@ -343,22 +336,21 @@ Class SWWMDialogues abstract
|
|||
msg2.seqname = "KIRINWORSHIPB";
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 40;
|
||||
msg2.enddelay = 10;
|
||||
msg2.enddelay = 50;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
msg = msg2;
|
||||
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
|
||||
msg2.seqname = "KIRINWORSHIPC";
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 10;
|
||||
msg2.enddelay = 20;
|
||||
msg2.delay = 20;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
msg = msg2;
|
||||
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg2.seqname = "KIRINWORSHIPD";
|
||||
msg2.seqcnt = 2;
|
||||
msg2.delay = 10;
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 40;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
msg = msg2;
|
||||
|
|
@ -366,14 +358,21 @@ Class SWWMDialogues abstract
|
|||
msg2.seqname = "KIRINWORSHIPE";
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 20;
|
||||
msg2.enddelay = 10;
|
||||
msg2.enddelay = 30;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
msg = msg2;
|
||||
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg2.seqname = "KIRINWORSHIPF";
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 10;
|
||||
msg2.delay = 20;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
msg = msg2;
|
||||
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
|
||||
msg2.seqname = "KIRINWORSHIPG";
|
||||
msg2.seqcnt = 1;
|
||||
msg2.delay = 40;
|
||||
msg.nextmsg = msg2;
|
||||
msg.nextdirect = true;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -174,8 +174,6 @@ Class FrispyCorn : SWWMCollectible
|
|||
}
|
||||
Class SayaBean : SWWMCollectible
|
||||
{
|
||||
bool callout; // already called the player a perv for loading h-doom
|
||||
|
||||
Default
|
||||
{
|
||||
Tag "$T_SAYABEAN";
|
||||
|
|
@ -238,14 +236,14 @@ Class DemoPlush : SWWMCollectible
|
|||
}
|
||||
}
|
||||
// Hexen
|
||||
Class KirinCummies : SWWMCollectible
|
||||
Class KirinSippy : SWWMCollectible
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_PEACH";
|
||||
Inventory.PickupMessage "$T_PEACH";
|
||||
SWWMCollectible.Availability AVAIL_Hexen;
|
||||
SWWMCollectible.GestureWeapon "KirinCummiesGesture";
|
||||
SWWMCollectible.GestureWeapon "KirinSippyGesture";
|
||||
SWWMCollectible.GetLine "peachget";
|
||||
Stamina 300;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,17 +91,6 @@ Class SayaBeanGesture : SWWMItemGesture
|
|||
}
|
||||
action void A_Squish2()
|
||||
{
|
||||
let realbean = SayaBean(FindInventory("SayaBean"));
|
||||
if ( realbean && !realbean.callout && !Random[Gesture](0,3) )
|
||||
{
|
||||
foreach ( cls:AllActorClasses )
|
||||
{
|
||||
if ( cls.GetClassName() != "HDoomPlayer" ) continue;
|
||||
A_StartSound("saya/pervert",CHAN_ITEMEXTRA,CHANF_OVERLAP);
|
||||
realbean.callout = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
A_StartSound("saya/giggle",CHAN_ITEMEXTRA,CHANF_OVERLAP);
|
||||
}
|
||||
action void A_UsePlush()
|
||||
|
|
@ -214,7 +203,7 @@ Class DemoPlushGesture : SWWMItemGesture
|
|||
Stop;
|
||||
}
|
||||
}
|
||||
Class KirinCummiesGesture : SWWMItemGesture
|
||||
Class KirinSippyGesture : SWWMItemGesture
|
||||
{
|
||||
States
|
||||
{
|
||||
|
|
|
|||
|
|
@ -195,7 +195,6 @@ Class SWWMCreditsMenu : GenericMenu
|
|||
cthanks.Push(new("SWWMCreditsEntry").Init("KeksDose","$SWWM_CKEKS2"));
|
||||
cthanks.Push(new("SWWMCreditsEntry").Init("ZZYZX & Nash","$SWWM_CZN2"));
|
||||
cthanks.Push(new("SWWMCreditsEntry").Init("Val Pal","$SWWM_CVAL2"));
|
||||
cthanks.Push(new("SWWMCreditsEntry").Init("Kaffy Kathy","$SWWM_CKATHY2"));
|
||||
cthanks.Push(new("SWWMCreditsEntry").Init("BouncyTEM","$SWWM_CBOUNCY2"));
|
||||
cthanks.Push(new("SWWMCreditsEntry").Init("\ctCptSledge\c- & \cdBunray\c-","$SWWM_CSLEDGE2"));
|
||||
cthanks.Push(new("SWWMCreditsEntry").Init("a1337spy","$SWWM_CSPY2"));
|
||||
|
|
|
|||
|
|
@ -162,12 +162,6 @@ Class LoveHeart : Actor
|
|||
}
|
||||
else if ( target is 'SWWMHangingKeen' )
|
||||
damage = max(target.Health,damage); // rescued by love :3
|
||||
else if ( SWWMHDoomHandler.IsCuteGirl(target) )
|
||||
{
|
||||
// no cute demon girl can resist demo's charm
|
||||
damage = max(target.Health,damage);
|
||||
bNOEXTREMEDEATH = true;
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
|
|
@ -512,8 +506,8 @@ Class HeadpatTracker : Actor
|
|||
int oldtargettics; // previous tics left in target's pre-pat state
|
||||
bool patting; // currently in pat
|
||||
Actor patter; // who's patting
|
||||
double hdoomheightfix; // certain hdoom monsters kneel down, so their heads are lower than expected
|
||||
double hdoomangfix; // fix for imp in a chair
|
||||
double heightfix; // these two are fixes for certain monsters where their head
|
||||
double angfix; // isn't positioned where one would expect
|
||||
bool lethalpat; // ending headpat immediately drops enemy health to 0
|
||||
bool dvacationarghack; // hackfix for some girls in doom vacation, disallows headpats if args[0] is 1
|
||||
|
||||
|
|
@ -541,10 +535,10 @@ Class HeadpatTracker : Actor
|
|||
double delta = deltaangle(target.angle,target.AngleTo(patter));
|
||||
if ( abs(delta) < 1. ) target.angle = target.AngleTo(patter);
|
||||
else target.angle += .3*delta;
|
||||
delta = deltaangle(patter.angle,patter.AngleTo(target)+hdoomangfix);
|
||||
if ( abs(delta) < 1. ) patter.A_SetAngle(patter.AngleTo(target)+hdoomangfix,SPF_INTERPOLATE);
|
||||
delta = deltaangle(patter.angle,patter.AngleTo(target)+angfix);
|
||||
if ( abs(delta) < 1. ) patter.A_SetAngle(patter.AngleTo(target)+angfix,SPF_INTERPOLATE);
|
||||
else patter.A_SetAngle(patter.angle+.3*delta,SPF_INTERPOLATE);
|
||||
double hfact = 1.2-hdoomheightfix;
|
||||
double hfact = 1.2-heightfix;
|
||||
delta = deltaangle(patter.pitch,SWWMUtility.PitchTo(patter,target,hfact));
|
||||
if ( abs(delta) < 1. ) patter.A_SetPitch(SWWMUtility.PitchTo(patter,target,hfact),SPF_INTERPOLATE);
|
||||
else patter.A_SetPitch(patter.pitch+.3*delta,SPF_INTERPOLATE);
|
||||
|
|
@ -579,8 +573,6 @@ Class HeadpatTracker : Actor
|
|||
target.bDORMANT = true;
|
||||
if ( SWWMUtility.IdentifyingDog(target) ) SWWMUtility.MarkAchievement("mbf",user.player);
|
||||
else if ( SWWMUtility.IdentifyingCaco(target) ) SWWMHandler.AddOneliner("petcaco",2,20);
|
||||
else if ( SWWMHDoomHandler.IsCuteGirl(target) || SWWMHDoomHandler.IsStaticSexyTime(target) ) SWWMHandler.AddOneliner("pethdoom",2,40);
|
||||
else if ( SWWMHDoomHandler.IsSexyTime(target) ) SWWMHandler.AddOneliner("pethdoomfinish",2,80);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -401,7 +401,6 @@ extend Class SWWMWeapon
|
|||
if ( raging ) flg |= DMG_FOILINVUL;
|
||||
int quakin = raging?8:2;
|
||||
double diff = 0.;
|
||||
bool hdoomgal = false;
|
||||
foreach ( hit:mt.hits )
|
||||
{
|
||||
if ( !hit.a ) continue;
|
||||
|
|
@ -411,7 +410,6 @@ extend Class SWWMWeapon
|
|||
if ( !hit.a.bDORMANT ) hit.a.DaggerAlert(self);
|
||||
if ( !hit.a.bNOBLOOD && !hit.a.bDORMANT && (raging || !hit.a.bINVULNERABLE) ) blooded = true;
|
||||
else bloodless = true;
|
||||
if ( SWWMHDoomHandler.IsCuteGirl(hit.a) ) hdoomgal = true;
|
||||
let p = SWWMPuff.Setup(hit.pos,hit.dir,invoker,self,hit.a);
|
||||
int newdmg = hit.a.DamageMobj(p,self,dmg,'Melee',flg);
|
||||
// things can instantly cease to exist after taking damage (wow)
|
||||
|
|
@ -440,20 +438,11 @@ extend Class SWWMWeapon
|
|||
}
|
||||
self.angle += clamp(diff/mt.hits.Size(),-5.,5.); // averaged reorient
|
||||
A_QuakeEx(quakin/2,quakin/2,quakin/2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:0.06*quakin);
|
||||
if ( flags&MELEE_HammerHit )
|
||||
if ( (flags&MELEE_HammerHit) && swwm_bonkhammer )
|
||||
{
|
||||
if ( hdoomgal )
|
||||
{
|
||||
flags |= MELEE_ForceSound;
|
||||
flags &= ~MELEE_FleshSound;
|
||||
hitsound = "misc/clonk6";
|
||||
}
|
||||
else if ( swwm_bonkhammer )
|
||||
{
|
||||
flags |= MELEE_ForceSound;
|
||||
flags &= ~MELEE_FleshSound;
|
||||
hitsound = "misc/clonk"..Random[Hammer](1,11);
|
||||
}
|
||||
flags |= MELEE_ForceSound;
|
||||
flags &= ~MELEE_FleshSound;
|
||||
hitsound = "misc/clonk"..Random[Hammer](1,11);
|
||||
}
|
||||
if ( raging && !(flags&MELEE_ForceSound) )
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue