From 9e201febd1ca33a1075d9f1e0bb8f4668b09ef2d Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Sat, 29 Jul 2023 18:14:49 +0200 Subject: [PATCH] Tidy up boydancer state machine. --- language.version | 4 +- zscript/compat/swwm_shame.zsc | 122 ++++++++++++++-------------------- 2 files changed, 51 insertions(+), 75 deletions(-) diff --git a/language.version b/language.version index 94e0d9676..88dd65061 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r925 \cu(Sat 29 Jul 18:00:28 CEST 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r925 \cu(2023-07-29 18:00:28)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r926 \cu(Sat 29 Jul 18:14:49 CEST 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r926 \cu(2023-07-29 18:14:49)\c-"; diff --git a/zscript/compat/swwm_shame.zsc b/zscript/compat/swwm_shame.zsc index 588675b8d..11b545b63 100644 --- a/zscript/compat/swwm_shame.zsc +++ b/zscript/compat/swwm_shame.zsc @@ -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; } }