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);
}
}

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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?

View file

@ -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);

View file

@ -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;

View file

@ -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;
}

View file

@ -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
{

View file

@ -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"));

View file

@ -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;

View file

@ -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) )
{