Tidy up boydancer state machine.

This commit is contained in:
Mari the Deer 2023-07-29 18:14:49 +02:00
commit 9e201febd1
2 changed files with 51 additions and 75 deletions

View file

@ -15,7 +15,7 @@ Class SWWMBrutalHandler : StaticEventHandler
ui int timer;
ui Font fnt;
ui TextureID boydance[10], boykiss;
ui int boyframe, boystate, boyloop1, boyloop2, boytimer;
ui int boyframe, boystate, boyloop1, boyloop2, boytimer, boyseq[12];
bool detected;
String which, whichshort;
@ -83,118 +83,94 @@ Class SWWMBrutalHandler : StaticEventHandler
{
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
boyframe = 0;
if ( !(boytimer%BOYTICRATE) )
boystate = 1;
boystate = 1;
break;
case 1: // down
boyframe = 1;
if ( !(boytimer%BOYTICRATE) )
if ( boyloop1 >= 2 )
{
if ( boyloop1 >= 2 )
{
boyloop1 = 0;
boystate = 2;
}
else
{
boyloop1++;
boystate = 0;
}
boyloop1 = 0;
boystate = 2;
break;
}
boyloop1++;
boystate = 0;
break;
case 2: // turn A
boyframe = 2;
if ( !(boytimer%BOYTICRATE) )
boystate = 3;
boystate = 3;
break;
case 3: // turn B
boyframe = 3;
if ( !(boytimer%BOYTICRATE) )
boystate = 4;
boystate = 4;
break;
case 4: // down
boyframe = 4;
if ( !(boytimer%BOYTICRATE) )
boystate = 5;
boystate = 5;
break;
case 5: // up
boyframe = 5;
if ( !(boytimer%BOYTICRATE) )
if ( boyloop1 >= 2 )
{
if ( boyloop1 >= 2 )
{
boyloop1 = 0;
boystate = 6;
}
else
{
boyloop1++;
boystate = 4;
}
boyloop1 = 0;
boystate = 6;
break;
}
boyloop1++;
boystate = 4;
break;
case 6: // turn B
boyframe = 3;
if ( !(boytimer%BOYTICRATE) )
boystate = 7;
boystate = 7;
break;
case 7: // turn A
boyframe = 2;
if ( !(boytimer%BOYTICRATE) )
if ( boyloop2 >= 2 )
{
if ( boyloop2 >= 2 )
{
boyloop2 = 0;
boystate = 8;
}
else
{
boyloop2++;
boystate = 0;
}
boyloop2 = 0;
boystate = 8;
break;
}
boyloop2++;
boystate = 0;
break;
case 8: // spin left
boyframe = 6;
if ( !(boytimer%BOYTICRATE) )
boystate = 9;
boystate = 9;
break;
case 9: // spin back
boyframe = 7;
if ( !(boytimer%BOYTICRATE) )
boystate = 10;
boystate = 10;
break;
case 10: // spin right
boyframe = 8;
if ( !(boytimer%BOYTICRATE) )
boystate = 11;
boystate = 11;
break;
case 11: // spin front
boyframe = 9;
if ( !(boytimer%BOYTICRATE) )
if ( boyloop1 >= 2 )
{
if ( boyloop1 >= 2 )
{
boyloop1 = 0;
boystate = 0;
}
else
{
boyloop1++;
boystate = 8;
}
boyloop1 = 0;
boystate = 0;
break;
}
boyloop1++;
boystate = 8;
break;
}
}