diff --git a/language.version b/language.version index fbf71feb6..b94edf843 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r458 \cu(Thu 29 Apr 23:25:24 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r458 \cu(2021-04-29 23:25:24)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r459 \cu(Thu 29 Apr 23:26:34 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r459 \cu(2021-04-29 23:26:34)\c-"; diff --git a/modeldef.funstuff b/modeldef.funstuff index 957a8e029..7954aef73 100644 --- a/modeldef.funstuff +++ b/modeldef.funstuff @@ -9,6 +9,262 @@ Model "FroggyChair" FrameIndex XZW1 A 0 0 } +Model "SWWMFlag" +{ + Path "models" + + Model 0 "SWWMFlag_d.3d" + Skin 0 "SWWMFlag.png" + Scale 0.5 0.5 0.5 + + // Default + FrameIndex XZW1 A 0 0 + FrameIndex XZW1 B 0 1 + FrameIndex XZW1 C 0 2 + FrameIndex XZW1 D 0 3 + FrameIndex XZW1 E 0 4 + FrameIndex XZW1 F 0 5 + FrameIndex XZW1 G 0 6 + FrameIndex XZW1 H 0 7 + FrameIndex XZW1 I 0 8 + FrameIndex XZW1 J 0 9 + FrameIndex XZW1 K 0 10 + FrameIndex XZW1 L 0 11 + FrameIndex XZW1 M 0 12 + FrameIndex XZW1 N 0 13 + FrameIndex XZW1 O 0 14 + FrameIndex XZW1 P 0 15 + FrameIndex XZW1 Q 0 16 + FrameIndex XZW1 R 0 17 + FrameIndex XZW1 S 0 18 + FrameIndex XZW1 T 0 19 + FrameIndex XZW1 U 0 20 + FrameIndex XZW1 V 0 21 + FrameIndex XZW1 W 0 22 + FrameIndex XZW1 X 0 23 + FrameIndex XZW1 Y 0 24 + FrameIndex XZW1 Z 0 25 + FrameIndex XZW2 A 0 26 + FrameIndex XZW2 B 0 27 + FrameIndex XZW2 C 0 28 + FrameIndex XZW2 D 0 29 + FrameIndex XZW2 E 0 30 + FrameIndex XZW2 F 0 31 + FrameIndex XZW2 G 0 32 + FrameIndex XZW2 H 0 33 + FrameIndex XZW2 I 0 34 + FrameIndex XZW2 J 0 35 + FrameIndex XZW2 K 0 36 + FrameIndex XZW2 L 0 37 + FrameIndex XZW2 M 0 38 + FrameIndex XZW2 N 0 39 + FrameIndex XZW2 O 0 40 + FrameIndex XZW2 P 0 41 + FrameIndex XZW2 Q 0 42 + FrameIndex XZW2 R 0 43 + FrameIndex XZW2 S 0 44 + FrameIndex XZW2 T 0 45 + FrameIndex XZW2 U 0 46 + FrameIndex XZW2 V 0 47 + FrameIndex XZW2 W 0 48 + FrameIndex XZW2 X 0 49 + FrameIndex XZW2 Y 0 50 + FrameIndex XZW2 Z 0 51 + FrameIndex XZW3 A 0 52 + FrameIndex XZW3 B 0 53 + FrameIndex XZW3 C 0 54 + FrameIndex XZW3 D 0 55 + FrameIndex XZW3 E 0 56 + FrameIndex XZW3 F 0 57 + FrameIndex XZW3 G 0 58 + FrameIndex XZW3 H 0 59 + // Pride + Skin 0 "SWWMFlag_Pride.png" + FrameIndex XZW3 I 0 0 + FrameIndex XZW3 J 0 1 + FrameIndex XZW3 K 0 2 + FrameIndex XZW3 L 0 3 + FrameIndex XZW3 M 0 4 + FrameIndex XZW3 N 0 5 + FrameIndex XZW3 O 0 6 + FrameIndex XZW3 P 0 7 + FrameIndex XZW3 Q 0 8 + FrameIndex XZW3 R 0 9 + FrameIndex XZW3 S 0 10 + FrameIndex XZW3 T 0 11 + FrameIndex XZW3 U 0 12 + FrameIndex XZW3 V 0 13 + FrameIndex XZW3 W 0 14 + FrameIndex XZW3 X 0 15 + FrameIndex XZW3 Y 0 16 + FrameIndex XZW3 Z 0 17 + FrameIndex XZW4 A 0 18 + FrameIndex XZW4 B 0 19 + FrameIndex XZW4 C 0 20 + FrameIndex XZW4 D 0 21 + FrameIndex XZW4 E 0 22 + FrameIndex XZW4 F 0 23 + FrameIndex XZW4 G 0 24 + FrameIndex XZW4 H 0 25 + FrameIndex XZW4 I 0 26 + FrameIndex XZW4 J 0 27 + FrameIndex XZW4 K 0 28 + FrameIndex XZW4 L 0 29 + FrameIndex XZW4 M 0 30 + FrameIndex XZW4 N 0 31 + FrameIndex XZW4 O 0 32 + FrameIndex XZW4 P 0 33 + FrameIndex XZW4 Q 0 34 + FrameIndex XZW4 R 0 35 + FrameIndex XZW4 S 0 36 + FrameIndex XZW4 T 0 37 + FrameIndex XZW4 U 0 38 + FrameIndex XZW4 V 0 39 + FrameIndex XZW4 W 0 40 + FrameIndex XZW4 X 0 41 + FrameIndex XZW4 Y 0 42 + FrameIndex XZW4 Z 0 43 + FrameIndex XZW5 A 0 44 + FrameIndex XZW5 B 0 45 + FrameIndex XZW5 C 0 46 + FrameIndex XZW5 D 0 47 + FrameIndex XZW5 E 0 48 + FrameIndex XZW5 F 0 49 + FrameIndex XZW5 G 0 50 + FrameIndex XZW5 H 0 51 + FrameIndex XZW5 I 0 52 + FrameIndex XZW5 J 0 53 + FrameIndex XZW5 K 0 54 + FrameIndex XZW5 L 0 55 + FrameIndex XZW5 M 0 56 + FrameIndex XZW5 N 0 57 + FrameIndex XZW5 O 0 58 + FrameIndex XZW5 P 0 59 + // Trans + Skin 0 "SWWMFlag_Trans.png" + FrameIndex XZW5 Q 0 0 + FrameIndex XZW5 R 0 1 + FrameIndex XZW5 S 0 2 + FrameIndex XZW5 T 0 3 + FrameIndex XZW5 U 0 4 + FrameIndex XZW5 V 0 5 + FrameIndex XZW5 W 0 6 + FrameIndex XZW5 X 0 7 + FrameIndex XZW5 Y 0 8 + FrameIndex XZW5 Z 0 9 + FrameIndex XZW6 A 0 10 + FrameIndex XZW6 B 0 11 + FrameIndex XZW6 C 0 12 + FrameIndex XZW6 D 0 13 + FrameIndex XZW6 E 0 14 + FrameIndex XZW6 F 0 15 + FrameIndex XZW6 G 0 16 + FrameIndex XZW6 H 0 17 + FrameIndex XZW6 I 0 18 + FrameIndex XZW6 J 0 19 + FrameIndex XZW6 K 0 20 + FrameIndex XZW6 L 0 21 + FrameIndex XZW6 M 0 22 + FrameIndex XZW6 N 0 23 + FrameIndex XZW6 O 0 24 + FrameIndex XZW6 P 0 25 + FrameIndex XZW6 Q 0 26 + FrameIndex XZW6 R 0 27 + FrameIndex XZW6 S 0 28 + FrameIndex XZW6 T 0 29 + FrameIndex XZW6 U 0 30 + FrameIndex XZW6 V 0 31 + FrameIndex XZW6 W 0 32 + FrameIndex XZW6 X 0 33 + FrameIndex XZW6 Y 0 34 + FrameIndex XZW6 Z 0 35 + FrameIndex XZW7 A 0 36 + FrameIndex XZW7 B 0 37 + FrameIndex XZW7 C 0 38 + FrameIndex XZW7 D 0 39 + FrameIndex XZW7 E 0 40 + FrameIndex XZW7 F 0 41 + FrameIndex XZW7 G 0 42 + FrameIndex XZW7 H 0 43 + FrameIndex XZW7 I 0 44 + FrameIndex XZW7 J 0 45 + FrameIndex XZW7 K 0 46 + FrameIndex XZW7 L 0 47 + FrameIndex XZW7 M 0 48 + FrameIndex XZW7 N 0 49 + FrameIndex XZW7 O 0 50 + FrameIndex XZW7 P 0 51 + FrameIndex XZW7 Q 0 52 + FrameIndex XZW7 R 0 53 + FrameIndex XZW7 S 0 54 + FrameIndex XZW7 T 0 55 + FrameIndex XZW7 U 0 56 + FrameIndex XZW7 V 0 57 + FrameIndex XZW7 W 0 58 + FrameIndex XZW7 X 0 59 + // Enby + Skin 0 "SWWMFlag_Enby.png" + FrameIndex XZW7 Y 0 0 + FrameIndex XZW7 Z 0 1 + FrameIndex XZW8 A 0 2 + FrameIndex XZW8 B 0 3 + FrameIndex XZW8 C 0 4 + FrameIndex XZW8 D 0 5 + FrameIndex XZW8 E 0 6 + FrameIndex XZW8 F 0 7 + FrameIndex XZW8 G 0 8 + FrameIndex XZW8 H 0 9 + FrameIndex XZW8 I 0 10 + FrameIndex XZW8 J 0 11 + FrameIndex XZW8 K 0 12 + FrameIndex XZW8 L 0 13 + FrameIndex XZW8 M 0 14 + FrameIndex XZW8 N 0 15 + FrameIndex XZW8 O 0 16 + FrameIndex XZW8 P 0 17 + FrameIndex XZW8 Q 0 18 + FrameIndex XZW8 R 0 19 + FrameIndex XZW8 S 0 20 + FrameIndex XZW8 T 0 21 + FrameIndex XZW8 U 0 22 + FrameIndex XZW8 V 0 23 + FrameIndex XZW8 W 0 24 + FrameIndex XZW8 X 0 25 + FrameIndex XZW8 Y 0 26 + FrameIndex XZW8 Z 0 27 + FrameIndex XZW9 A 0 28 + FrameIndex XZW9 B 0 29 + FrameIndex XZW9 C 0 30 + FrameIndex XZW9 D 0 31 + FrameIndex XZW9 E 0 32 + FrameIndex XZW9 F 0 33 + FrameIndex XZW9 G 0 34 + FrameIndex XZW9 H 0 35 + FrameIndex XZW9 I 0 36 + FrameIndex XZW9 J 0 37 + FrameIndex XZW9 K 0 38 + FrameIndex XZW9 L 0 39 + FrameIndex XZW9 M 0 40 + FrameIndex XZW9 N 0 41 + FrameIndex XZW9 O 0 42 + FrameIndex XZW9 P 0 43 + FrameIndex XZW9 Q 0 44 + FrameIndex XZW9 R 0 45 + FrameIndex XZW9 S 0 46 + FrameIndex XZW9 T 0 47 + FrameIndex XZW9 U 0 48 + FrameIndex XZW9 V 0 49 + FrameIndex XZW9 W 0 50 + FrameIndex XZW9 X 0 51 + FrameIndex XZW9 Y 0 52 + FrameIndex XZW9 Z 0 53 + FrameIndex XZWA A 0 54 + FrameIndex XZWA B 0 55 + FrameIndex XZWA C 0 56 + FrameIndex XZWA D 0 57 + FrameIndex XZWA E 0 58 + FrameIndex XZWA F 0 59 +} Model "Chancebox" { Path "models" diff --git a/models/SWWMFlag.blend b/models/SWWMFlag.blend new file mode 100644 index 000000000..f525b900b Binary files /dev/null and b/models/SWWMFlag.blend differ diff --git a/models/SWWMFlag.mdd b/models/SWWMFlag.mdd new file mode 100644 index 000000000..6b850aefd Binary files /dev/null and b/models/SWWMFlag.mdd differ diff --git a/models/SWWMFlag.png b/models/SWWMFlag.png new file mode 100644 index 000000000..4b020bc0b Binary files /dev/null and b/models/SWWMFlag.png differ diff --git a/models/SWWMFlag.xcf b/models/SWWMFlag.xcf new file mode 100644 index 000000000..795fad452 Binary files /dev/null and b/models/SWWMFlag.xcf differ diff --git a/models/SWWMFlag_Enby.png b/models/SWWMFlag_Enby.png new file mode 100644 index 000000000..d63224106 Binary files /dev/null and b/models/SWWMFlag_Enby.png differ diff --git a/models/SWWMFlag_Pride.png b/models/SWWMFlag_Pride.png new file mode 100644 index 000000000..0c190b292 Binary files /dev/null and b/models/SWWMFlag_Pride.png differ diff --git a/models/SWWMFlag_Trans.png b/models/SWWMFlag_Trans.png new file mode 100644 index 000000000..75fbef98b Binary files /dev/null and b/models/SWWMFlag_Trans.png differ diff --git a/models/SWWMFlag_a.3d b/models/SWWMFlag_a.3d new file mode 100644 index 000000000..b551ad070 Binary files /dev/null and b/models/SWWMFlag_a.3d differ diff --git a/models/SWWMFlag_d.3d b/models/SWWMFlag_d.3d new file mode 100644 index 000000000..388abdd39 Binary files /dev/null and b/models/SWWMFlag_d.3d differ diff --git a/sndinfo.txt b/sndinfo.txt index b3f76bb35..9f64dd13f 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -916,6 +916,7 @@ misc/achievement sounds/CTF6.ogg misc/wow sounds/WOW.ogg misc/achievement2 sounds/YAY.ogg misc/orbexplode sounds/ORBEXPLODE.ogg +misc/omgfart sounds/omgfart.ogg misc/voice sounds/dlgvoice.ogg misc/gibber1 sounds/general/Gib1.ogg misc/gibber2 sounds/general/Gib2.ogg diff --git a/sounds/omgfart.ogg b/sounds/omgfart.ogg new file mode 100644 index 000000000..749585f9f Binary files /dev/null and b/sounds/omgfart.ogg differ diff --git a/zscript/handler/swwm_handler_cheats.zsc b/zscript/handler/swwm_handler_cheats.zsc index b8972e31f..6d2a28ffe 100644 --- a/zscript/handler/swwm_handler_cheats.zsc +++ b/zscript/handler/swwm_handler_cheats.zsc @@ -177,9 +177,19 @@ extend Class SWWMHandler { if ( consoleplayer == e.Args[0] ) { - Console.Printf("\cyThere are no flags here.\c-"); - S_StartSound("misc/nocheat",CHAN_ITEM,CHANF_UI); + Console.Printf("\cyLet your flag stand proud, Demolitionist.\c-"); + S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); } + let mo = players[e.Args[0]].mo; + Actor f = Actor(ThinkerIterator.Create("SWWMFlag").Next()); + if ( !f ) f = mo.Spawn("SWWMFlag"); + Vector2 spos = mo.Vec2Offset(cos(mo.angle)*40.,sin(mo.angle)*40.); + Sector sat = level.PointInSector(spos); + double sz = sat.NextLowestFloorAt(spos.x,spos.y,mo.player.viewz-32.); + f.SetOrigin((spos.x,spos.y,sz),false); + f.A_SetAngle(mo.angle); + f.Spawn("SWWMItemFog",f.pos); + f.A_StartSound("bestsound",CHAN_ITEMEXTRA); } else if ( e.Name ~== "swwmballcheat" ) { @@ -231,19 +241,30 @@ extend Class SWWMHandler } else if ( e.Name ~== "swwmfartcheat" ) { + let mo = players[e.Args[0]].mo; if ( consoleplayer == e.Args[0] ) { - Console.Printf("\cyI'd rather not reimplement that one.\c-"); - S_StartSound("misc/nocheat",CHAN_ITEM,CHANF_UI); + Console.Printf("\cyI regret implementing this.\c-"); + S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); + S_StartSound("misc/omgfart",CHAN_VOICE,CHANF_UI); } + else mo.A_StartSound("misc/omgfart",CHAN_VOICE,CHANF_OVERLAP,1.,.5); + let f = mo.Spawn("SWWMGasCloudSpawner",mo.Vec3Angle(mo.radius*.5,mo.angle-180,mo.Height*.4)); + f.target = mo; + f.angle = mo.angle+180; + f.pitch = -mo.pitch; } else if ( e.Name ~== "swwmsupercheat" ) { if ( consoleplayer == e.Args[0] ) { - Console.Printf("\cyNo, you're the Demolitionist.\c-"); - S_StartSound("misc/nocheat",CHAN_ITEM,CHANF_UI); + Console.Printf("\cyNo, you're the Demolitionist. But with this thing, you'll also be invincible.\c-"); + S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); + S_StartSound("misc/p_pkup",CHAN_VOICE,CHANF_UI); } + let i = InvinciballPower(players[e.Args[0]].mo.FindInventory("InvinciballPower")); + if ( i ) i.EffectTics += i.default.EffectTics; + else players[e.Args[0]].mo.GiveInventory("InvinciballPower",1); } else if ( e.Name ~== "swwmstonecheat" ) { @@ -342,11 +363,11 @@ extend Class SWWMHandler if ( kstr != cht[i].Left(kstr.length()) ) continue; matchany = true; if ( kstr != cht[i] ) continue; - if ( (i > 4) && !nostalgic ) + if ( (i > 4) && !swwm_oldcheat ) { let m = new("SWWMSecretZanavethMessage").Init(); StatusBar.AttachMessage(m,-1232); - nostalgic = true; + CVar.FindCVar('swwm_oldcheat').SetBool(true); } if ( SWWMUtility.CheatsDisabled(consoleplayer) ) { diff --git a/zscript/hud/swwm_hudextra.zsc b/zscript/hud/swwm_hudextra.zsc index e3f06e365..1cb05ceab 100644 --- a/zscript/hud/swwm_hudextra.zsc +++ b/zscript/hud/swwm_hudextra.zsc @@ -367,7 +367,7 @@ Class SWWMSecretZanavethMessage : HUDMessageBase int idx = punctuation.IndexOf(ch); if ( idx >= 0 ) delay += (idx*2)+1; charcnt++; - if ( charcnt >= TotalLength() ) delay += 90; + if ( charcnt >= TotalLength() ) delay += (seqnum==5)?90:40; } override bool Tick() diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index 1641bc763..9f4b4e5b9 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -163,6 +163,134 @@ Class FroggyChair : Actor } } +// a flag +Class SWWMFlag : Actor +{ + int seq; + + override bool Used( Actor user ) + { + seq = (seq+1)%4; + switch ( seq ) + { + case 0: + SetStateLabel("Spawn"); + break; + case 1: + SetStateLabel("FlagPride"); + break; + case 2: + SetStateLabel("FlagTrans"); + break; + case 3: + SetStateLabel("FlagEnby"); + break; + } + A_StartSound("bestsound",CHAN_BODY,CHANF_OVERLAP); + return true; + } + Default + { + +SOLID; + +NOTELEPORT; + +DONTSPLASH; + Radius 2; + Height 104; + } + States + { + Spawn: + XZW1 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2; + XZW2 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2; + XZW3 ABCDEFGH 2; + Loop; + FlagPride: + XZW3 IJKLMNOPQRSTUVWXYZ 2; + XZW4 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2; + XZW5 ABCDEFGHIJKLMNOP 2; + Loop; + FlagTrans: + XZW5 QRSTUVWXYZ 2; + XZW6 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2; + XZW7 ABCDEFGHIJKLMNOPQRSTUVWX 2; + Loop; + FlagEnby: + XZW7 YZ 2; + XZW8 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2; + XZW9 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2; + XZWA ABCDEF 2; + Loop; + } +} + +// oof +Class SWWMGasCloudSpawner : Actor +{ + Default + { + Radius .1; + Height 0.; + +NOBLOCKMAP; + +NOTELEPORT; + +DONTSPLASH; + +NOINTERACTION; + } + override void Tick() + { + if ( !(special1%5) ) + { + Vector3 x, y, z; + [x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll); + let c = Spawn("SWWMGasCloud",level.Vec3Offset(pos,x*(20+special1*12))); + c.target = target; + c.specialf1 = 1+special1/10.; + } + special1++; + if ( special1 > 20 ) Destroy(); + } +} + +Class SWWMGasCloud : Actor +{ + Default + { + Radius .1; + Height 0.; + +NOBLOCKMAP; + +NOTELEPORT; + +DONTSPLASH; + +NOINTERACTION; + } + override void Tick() + { + for ( int i=0; i<2; i++ ) + { + let e = Spawn("SWWMFart",level.Vec3Offset(pos,specialf1*(FRandom[ExploS](-20,20),FRandom[ExploS](-20,20),FRandom[ExploS](-20,20)))); + e.target = target; + e.scale *= specialf1; + } + SWWMUtility.DoExplosion(self,Random[ExploS](2,6),0,60*specialf1,40,DE_NOBLEED|DE_NOSPLASH|DE_THRUWALLS|DE_HOWL,'Gas',target); + special1++; + if ( special1 >= 90 ) Destroy(); + } +} + +Class SWWMFart : SWWMHalfSmoke +{ + Default + { + RenderStyle "Add"; + Alpha .1; + } + States + { + Spawn: + FRT1 ABCDEFGHIJKLMNOPQRSTUVWXYZ 2 Bright; + FRT2 ABCDEFGHI 2 Bright; + Stop; + } +} + // yay! Class FancyConfetti : Actor {