Explodium Gun and Candy Gun now have a slide lock.

This commit is contained in:
Mari the Deer 2021-08-08 19:30:59 +02:00
commit 5f01001891
11 changed files with 694 additions and 46 deletions

View file

@ -60,10 +60,8 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after
- [Hexen] And Another One *(Defeat... yup, one more Heresiarch)*
- [Hexen] The Last One *(Defeat the last Heresiarch)*
- [Hexen] Didn't I Kick Your Ass Before? *(Defeat the Deathkings)*
* **Official Sunder support *(when the WAD is complete)***
* ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff**
* **Mothgirl summon for Lämp easter egg**
* **Replace all hitscan with *"light projectiles"***
* **Customized cluster text stuff if that ever gets scriptified**
* **Crouch sliding *(+ proper crouch dashing)***
* **Expand third person animations**
- 4-directional movement variants
@ -75,33 +73,40 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after
- Giggle
- Shrug
- Beckon
* **Japanese localization???**
* ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff**
* **Customized cluster text stuff if that ever gets scriptified**
* **Official Sunder support *(when the WAD is complete)***
* **Photo Mode**
- Dedicated poses
- Stickers
* **Monster/decoration replacements add-on:**
- Potentially standalone, usable with other mods
- Balanced for this mod
- Unique bosses
- Some extra enemy variants
- Coverage for all supported IWADs *(oof)*
* **DLC Gameset:**
- Tetris
- Pong
- Snake
- **[Doom]** Demo Land Adventure (platformer with shooty gameplay)
- **[Heretic]** Interstellar Demolitionist (a somewhat simple vertical SHMUP, kinda Touhou styled)
- **[Hexen]** Demolition Quest (a JRPG, kinda like early FF / BoF)
* **Mothgirl summon for Lämp easter egg**
* **Ibuki companion add-on**
* **Saya companion add-on**
* **Kirin companion add-on *(Hexen-exclusive)***
- **[Doom]** Demo Land Adventure *(platformer with shooty gameplay)*
- **[Heretic]** Interstellar Demolitionist *(a somewhat simple vertical SHMUP, kinda Touhou styled)*
- **[Hexen]** Demolition Quest *(a JRPG, kinda like early FF / BoF)*
* **Original English Voice Acting:**
- Demolitionist
- Ibuki
- Saya
- Kirin
* **Japanese localization???**
* **Monster/decoration replacements add-on**
* **Photo Mode**
- Dedicated poses
- Stickers
* **Hardcore Mode**
* **Ibuki sub-mod *(Red Oni)***
* **Saya sub-mod *(Red-Eyed Rampage)***
* **Kirin sub-mod *(Red Star of Innocence)***
* **Hardcore Mode sub-mod:**
- Featuring Demolitionist on Maidbot frame
- More complex game mechanics
- Manual Hammerspace management
- Manual reloading and weapon maintenance
- Alternate mobility options (no jetpack)
- Alternate mobility options *(no jetpack)*
- Non-instant item usage
* **DLC Weaponset 2:**
- [1] Hand of Divine *(Total Madness)*
@ -119,4 +124,7 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after
- [Heretic/Hexen] Safety Tether *(Original)*
- Devastation Sigil *(SWWM)*
- Divine Sprite *(SWWM Platinum)*
- Angel of Death *(Total Destruction, SWWM Platinum Ep2)*
- Angel of Death *(Total Destruction, SWWM Platinum Ep2)*
* **Official Campaign:**
- Retell the events of UnSX 2 *(but with the Demolitionist's participation)*
- Basically give SWWM GZ its own IWAD as a standalone game

View file

@ -17,6 +17,7 @@
**Very extra things for the future:**
- Saya and Ibuki companion add-ons (potentially a Kirin companion too)
- Possibly also playable versions of them, for coop
- Modeled Monster/Decoration replacers for all IWADs done in the style of the mod (will be very time consuming)
- Another DLC weaponset
- Official DM map pack
- Official IWAD

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r586 \cu(Sat 7 Aug 23:17:38 CEST 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r586 \cu(2021-08-07 23:17:38)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r588 \cu(Sun 8 Aug 19:32:39 CEST 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r588 \cu(2021-08-08 19:32:39)\c-";

View file

@ -430,4 +430,90 @@ Model "CandyGun"
FrameIndex XZWC H 1 21
FrameIndex XZWC I 1 22
FrameIndex XZWC J 1 23
/// LAST ROUND
SurfaceSkin 1 0 "DemoTags.png"
SurfaceSkin 1 1 "DemoArms.png"
SurfaceSkin 1 2 "DemoSoft.png"
SurfaceSkin 1 3 "CandyGun.png"
SurfaceSkin 1 4 ""
SurfaceSkin 1 5 "CandyGun.png"
// Fire
FrameIndex XZWC K 1 237
FrameIndex XZWC L 1 238
FrameIndex XZWC M 1 239
FrameIndex XZWC N 1 240
FrameIndex XZWC O 1 241
FrameIndex XZWC P 1 242
FrameIndex XZWC Q 1 243
FrameIndex XZWC R 1 244
FrameIndex XZWC S 1 245
// Still
FrameIndex XZW9 X 1 248
// Reload (Part 1)
SurfaceSkin 1 5 "CandyGun_EmptyMag.png" // empty mag
FrameIndex XZW9 Z 1 249
FrameIndex XZWC X 1 250
FrameIndex XZWC Y 1 251
FrameIndex XZWC Z 1 252
FrameIndex XZWD A 1 253
FrameIndex XZWD B 1 254
FrameIndex XZWD C 1 255
FrameIndex XZWD D 1 256
FrameIndex XZWD E 1 257
FrameIndex XZWD F 1 258
FrameIndex XZWD G 1 259
FrameIndex XZWD H 1 260
FrameIndex XZWD I 1 261
FrameIndex XZWD J 1 262
FrameIndex XZWD K 1 263
FrameIndex XZWD L 1 264
// Reload (Part 2)
SurfaceSkin 1 5 "" // hide mag
SurfaceSkin 1 6 "ExplodiumGun.png" // show new mag
FrameIndex XZWD M 1 265
FrameIndex XZWD N 1 266
FrameIndex XZWD O 1 267
FrameIndex XZWD P 1 268
FrameIndex XZWD Q 1 269
FrameIndex XZWD R 1 270
FrameIndex XZWD S 1 271
FrameIndex XZWD T 1 272
SurfaceSkin 1 6 "" // hide new mag
FrameIndex XZWD U 1 273
FrameIndex XZWD V 1 274
FrameIndex XZWD W 1 275
SurfaceSkin 1 5 "CandyGun.png" // show mag
FrameIndex XZWD X 1 276
FrameIndex XZWD Y 1 277
FrameIndex XZWD Z 1 278
FrameIndex XZWE A 1 279
FrameIndex XZWE B 1 280
FrameIndex XZWE C 1 281
FrameIndex XZWE D 1 282
FrameIndex XZWE E 1 283
FrameIndex XZWE F 1 284
FrameIndex XZWE G 1 285
FrameIndex XZWE H 1 286
FrameIndex XZWE I 1 287
FrameIndex XZWE J 1 288
FrameIndex XZWE K 1 289
FrameIndex XZWE L 1 290
FrameIndex XZWE M 1 291
FrameIndex XZWE N 1 292
FrameIndex XZWE O 1 293
FrameIndex XZWE P 1 294
// Deselect
FrameIndex XZWE Q 1 297
FrameIndex XZWE R 1 298
FrameIndex XZWE S 1 299
FrameIndex XZWE T 1 300
// Select
FrameIndex XZWE U 1 301
FrameIndex XZWE V 1 302
FrameIndex XZWE W 1 303
FrameIndex XZWE X 1 304
FrameIndex XZWE Y 1 305
FrameIndex XZWE Z 1 306
FrameIndex XZWF A 1 307
}

View file

@ -372,5 +372,77 @@ Model "ExplodiumGun"
FrameIndex XZWA H 1 21
FrameIndex XZWA I 1 22
FrameIndex XZWA J 1 23
/// LAST ROUND
SurfaceSkin 1 0 "DemoTags.png"
SurfaceSkin 1 1 "DemoArms.png"
SurfaceSkin 1 2 "DemoSoft.png"
SurfaceSkin 1 3 "ExplodiumGun.png"
SurfaceSkin 1 4 ""
SurfaceSkin 1 5 "ExplodiumGun.png"
// Fire
FrameIndex XZWA K 1 237
FrameIndex XZWA L 1 238
FrameIndex XZWA M 1 239
FrameIndex XZWA N 1 240
FrameIndex XZWA O 1 241
FrameIndex XZWA P 1 242
FrameIndex XZWA Q 1 243
FrameIndex XZWA R 1 244
FrameIndex XZWA S 1 245
// Still
FrameIndex XZW9 X 1 248
// Reload (Part 1)
SurfaceSkin 1 5 "ExplodiumGun_EmptyMag.png" // empty mag
FrameIndex XZW9 Z 1 249
FrameIndex XZWA X 1 250
FrameIndex XZWA Y 1 251
FrameIndex XZWA Z 1 252
FrameIndex XZWB A 1 253
FrameIndex XZWB B 1 254
FrameIndex XZWB C 1 255
FrameIndex XZWB D 1 256
FrameIndex XZWB E 1 257
FrameIndex XZWB F 1 258
FrameIndex XZWB G 1 259
FrameIndex XZWB H 1 260
FrameIndex XZWB I 1 261
FrameIndex XZWB J 1 262
FrameIndex XZWB K 1 263
FrameIndex XZWB L 1 264
// Reload (Part 2)
SurfaceSkin 1 5 "" // hide mag
SurfaceSkin 1 6 "ExplodiumGun.png" // show new mag
FrameIndex XZWB M 1 265
FrameIndex XZWB N 1 266
FrameIndex XZWB O 1 267
FrameIndex XZWB P 1 268
FrameIndex XZWB Q 1 269
FrameIndex XZWB R 1 270
FrameIndex XZWB S 1 271
FrameIndex XZWB T 1 272
SurfaceSkin 1 6 "" // hide new mag
FrameIndex XZWB U 1 273
FrameIndex XZWB V 1 274
FrameIndex XZWB W 1 275
SurfaceSkin 1 5 "ExplodiumGun.png" // show mag
FrameIndex XZWB X 1 276
FrameIndex XZWB Y 1 277
FrameIndex XZWB Z 1 278
FrameIndex XZWC A 1 279
FrameIndex XZWC B 1 280
FrameIndex XZWC C 1 281
FrameIndex XZWC D 1 282
FrameIndex XZWC E 1 283
FrameIndex XZWC F 1 284
FrameIndex XZWC G 1 285
FrameIndex XZWC H 1 286
FrameIndex XZWC I 1 287
FrameIndex XZWC J 1 288
FrameIndex XZWC K 1 289
FrameIndex XZWC L 1 290
FrameIndex XZWC M 1 291
FrameIndex XZWC N 1 292
FrameIndex XZWC O 1 293
FrameIndex XZWC P 1 294
}

View file

@ -402,4 +402,171 @@ Model "DualExplodiumGun"
FrameIndex XZWI H 1 21
FrameIndex XZWI I 1 22
FrameIndex XZWI J 1 23
/// LAST ROUND
SurfaceSkin 1 0 "DemoTags.png"
SurfaceSkin 1 1 "DemoArms.png"
SurfaceSkin 1 2 "DemoSoft.png"
SurfaceSkin 1 3 "ExplodiumGun.png"
SurfaceSkin 1 4 ""
SurfaceSkin 1 5 "ExplodiumGun.png"
// RIGHT
Model 1 "ExplodiumGun1st_d.3d"
Offset 3 0 -2
// Fire
FrameIndex XZWI K 1 237
FrameIndex XZWI L 1 238
FrameIndex XZWI M 1 239
FrameIndex XZWI N 1 240
FrameIndex XZWI O 1 241
FrameIndex XZWI P 1 242
FrameIndex XZWI Q 1 243
FrameIndex XZWI R 1 244
FrameIndex XZWI S 1 245
// Still
FrameIndex XZWI V 1 248
// Reload (Part 1)
SurfaceSkin 1 5 "ExplodiumGun_EmptyMag.png" // empty mag
FrameIndex XZWI W 1 249
FrameIndex XZWI X 1 250
FrameIndex XZWI Y 1 251
FrameIndex XZWI Z 1 252
FrameIndex XZWJ A 1 253
FrameIndex XZWJ B 1 254
FrameIndex XZWJ C 1 255
FrameIndex XZWJ D 1 256
FrameIndex XZWJ E 1 257
FrameIndex XZWJ F 1 258
FrameIndex XZWJ G 1 259
FrameIndex XZWJ H 1 260
FrameIndex XZWJ I 1 261
FrameIndex XZWJ J 1 262
FrameIndex XZWJ K 1 263
FrameIndex XZWJ L 1 264
// Reload (Part 2)
SurfaceSkin 1 5 "" // hide mag
SurfaceSkin 1 6 "ExplodiumGun.png" // show new mag
FrameIndex XZWJ M 1 265
FrameIndex XZWJ N 1 266
FrameIndex XZWJ O 1 267
FrameIndex XZWJ P 1 268
FrameIndex XZWJ Q 1 269
FrameIndex XZWJ R 1 270
FrameIndex XZWJ S 1 271
FrameIndex XZWJ T 1 272
SurfaceSkin 1 6 "" // hide new mag
FrameIndex XZWJ U 1 273
FrameIndex XZWJ V 1 274
FrameIndex XZWJ W 1 275
SurfaceSkin 1 5 "ExplodiumGun.png" // show mag
FrameIndex XZWJ X 1 276
FrameIndex XZWJ Y 1 277
FrameIndex XZWJ Z 1 278
FrameIndex XZWK A 1 279
FrameIndex XZWK B 1 280
FrameIndex XZWK C 1 281
FrameIndex XZWK D 1 282
FrameIndex XZWK E 1 283
FrameIndex XZWK F 1 284
FrameIndex XZWK G 1 285
FrameIndex XZWK H 1 286
FrameIndex XZWK I 1 287
FrameIndex XZWK J 1 288
FrameIndex XZWK K 1 289
FrameIndex XZWK L 1 290
FrameIndex XZWK M 1 291
FrameIndex XZWK N 1 292
FrameIndex XZWK O 1 293
FrameIndex XZWK P 1 294
// Lower
FrameIndex XZWM U 1 297
FrameIndex XZWM V 1 298
FrameIndex XZWM W 1 299
FrameIndex XZWM X 1 300
FrameIndex XZWM Y 1 301 // Raise
FrameIndex XZWM Z 1 302
FrameIndex XZWN A 1 303
FrameIndex XZWN B 1 304
FrameIndex XZWN C 1 305
FrameIndex XZWN D 1 306
FrameIndex XZWN E 1 307
// LEFT
Model 1 "ExplodiumGun1stL_d.3d"
Offset -3 0 -2
// Fire
FrameIndex XZWK Q 1 237
FrameIndex XZWK R 1 238
FrameIndex XZWK S 1 239
FrameIndex XZWK T 1 240
FrameIndex XZWK U 1 241
FrameIndex XZWK V 1 242
FrameIndex XZWK W 1 243
FrameIndex XZWK X 1 244
FrameIndex XZWK Y 1 245
// Still
FrameIndex XZWK Z 1 248
// Reload (Part 1)
SurfaceSkin 1 5 "ExplodiumGun_EmptyMag.png" // empty mag
FrameIndex XZWL A 1 249
FrameIndex XZWL B 1 250
FrameIndex XZWL C 1 251
FrameIndex XZWL D 1 252
FrameIndex XZWL E 1 253
FrameIndex XZWL F 1 254
FrameIndex XZWL G 1 255
FrameIndex XZWL H 1 256
FrameIndex XZWL I 1 257
FrameIndex XZWL J 1 258
FrameIndex XZWL K 1 259
FrameIndex XZWL L 1 260
FrameIndex XZWL M 1 261
FrameIndex XZWL N 1 262
FrameIndex XZWL O 1 263
FrameIndex XZWL P 1 264
// Reload (Part 2)
SurfaceSkin 1 5 "" // hide mag
SurfaceSkin 1 6 "ExplodiumGun.png" // show new mag
FrameIndex XZWL Q 1 265
FrameIndex XZWL R 1 266
FrameIndex XZWL S 1 267
FrameIndex XZWL T 1 268
FrameIndex XZWL U 1 269
FrameIndex XZWL V 1 270
FrameIndex XZWL W 1 271
FrameIndex XZWL X 1 272
SurfaceSkin 1 6 "" // hide new mag
FrameIndex XZWL Y 1 273
FrameIndex XZWL Z 1 274
FrameIndex XZWM A 1 275
SurfaceSkin 1 5 "ExplodiumGun.png" // show mag
FrameIndex XZWM B 1 276
FrameIndex XZWM C 1 277
FrameIndex XZWM D 1 278
FrameIndex XZWM E 1 279
FrameIndex XZWM F 1 280
FrameIndex XZWM G 1 281
FrameIndex XZWM H 1 282
FrameIndex XZWM I 1 283
FrameIndex XZWM J 1 284
FrameIndex XZWM K 1 285
FrameIndex XZWM L 1 286
FrameIndex XZWM M 1 287
FrameIndex XZWM N 1 288
FrameIndex XZWM O 1 289
FrameIndex XZWM P 1 290
FrameIndex XZWM Q 1 291
FrameIndex XZWM R 1 292
FrameIndex XZWM S 1 293
FrameIndex XZWM T 1 294
// Lower
FrameIndex XZWN F 1 297
FrameIndex XZWN G 1 298
FrameIndex XZWN H 1 299
FrameIndex XZWN I 1 300
FrameIndex XZWN J 1 301 // Raise
FrameIndex XZWN K 1 302
FrameIndex XZWN L 1 303
FrameIndex XZWN M 1 304
FrameIndex XZWN N 1 305
FrameIndex XZWN O 1 306
FrameIndex XZWN P 1 307
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -335,13 +335,16 @@ Class ExplodiumGun : SWWMWeapon
Ready:
XZW2 A 1
{
if ( (invoker.clipcount <= 0) && !invoker.chambered ) player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
else if ( (invoker.clipcount > 0) && !invoker.chambered ) player.SetPSprite(PSP_WEAPON,ResolveState("Slide"));
if ( (invoker.clipcount > 0) && !invoker.chambered ) player.SetPSprite(PSP_WEAPON,ResolveState("Slide"));
else A_WeaponReady(WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWRELOAD);
}
Wait;
Fire:
XZW2 A 1 A_Schutt();
XZW2 A 1
{
A_Schutt();
return A_JumpIf((invoker.clipcount<=0)&&!invoker.chambered,"FireLast");
}
XZW2 I 1;
XZW2 J 1
{
@ -352,6 +355,47 @@ Class ExplodiumGun : SWWMWeapon
XZW2 KLMNOP 1;
XZW2 Q 2;
Goto Ready;
FireLast:
XZW2 A 1;
XZWA K 1;
XZWA L 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"Casing");
}
XZWA M 1;
XZWA N 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP,.6,pitch:1.5);
XZWA OPQR 1;
XZWA S 2;
Goto ReloadLast;
ReloadLast:
XZW9 X 1 A_PlayerReload();
XZW9 Z 1;
XZWA XYZ 1;
XZWB ABC 1;
XZWB D 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
XZWB E 1 { invoker.clipcount = 0; }
XZWB F 1;
XZWB G 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
XZWB HIJK 1;
XZWB L 1 A_DropMag();
XZWB MNOPQR 1;
XZWB S 1 A_StartSound("explodium/magin",CHAN_WEAPON,CHANF_OVERLAP);
XZWB TUVWXYZ 1;
XZWC ABCD 1;
XZWC E 1 { A_StartSound("explodium/jamitin",CHAN_WEAPON,CHANF_OVERLAP); invoker.clipcount = invoker.default.clipcount; }
XZWC FGHI 1;
XZWC J 1
{
A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
invoker.clipcount--;
invoker.chambered = true;
}
XZWC K 1;
XZWC L 3;
XZWC MNOP 1;
Goto Ready;
Casing:
XZWA A 1
{
@ -736,14 +780,12 @@ Class DualExplodiumGun : SWWMWeapon
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReady"));
sis = player.FindPSprite(PSP_WEAPON+1);
}
if ( sis.CurState.InStateSequence(ResolveState("LeftReady")) )
if ( sis.CurState.InStateSequence(ResolveState("LeftReady")) || sis.CurState.InStateSequence(ResolveState("LeftWaitLast")) )
{
if ( (ExplodiumGun(invoker.SisterWeapon).clipcount <= 0) && !ExplodiumGun(invoker.SisterWeapon).chambered )
player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
else if ( (ExplodiumGun(invoker.SisterWeapon).clipcount > 0) && !ExplodiumGun(invoker.SisterWeapon).chambered )
if ( (ExplodiumGun(invoker.SisterWeapon).clipcount > 0) && !ExplodiumGun(invoker.SisterWeapon).chambered )
player.SetPSprite(PSP_WEAPON,ResolveState("PreSlide"));
else if ( (invoker.clipcount <= 0) && !invoker.chambered )
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReload"));
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReloadLast"));
else if ( (invoker.clipcount > 0) && !invoker.chambered )
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftPreSlide"));
else if ( (player.cmd.buttons&BT_RELOAD) && (ExplodiumGun(invoker.SisterWeapon).clipcount < ExplodiumGun(invoker.SisterWeapon).default.clipcount)
@ -751,7 +793,8 @@ Class DualExplodiumGun : SWWMWeapon
player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
else if ( (player.cmd.buttons&BT_RELOAD) && (invoker.clipcount < invoker.default.clipcount) )
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReload"));
else A_WeaponReady(WRF_ALLOWZOOM|WRF_ALLOWUSER1);
else if ( !sis.CurState.InStateSequence(ResolveState("LeftWaitLast")) ) A_WeaponReady(WRF_ALLOWZOOM|WRF_ALLOWUSER1);
else A_WeaponReady();
}
else
{
@ -770,7 +813,11 @@ Class DualExplodiumGun : SWWMWeapon
}
Wait;
Fire:
XZW2 A 1 A_Schutt();
XZW2 A 1
{
A_Schutt();
return A_JumpIf((ExplodiumGun(invoker.SisterWeapon).clipcount<=0)&&!ExplodiumGun(invoker.SisterWeapon).chambered,"FireLast");
}
XZW2 I 1;
XZW2 J 1
{
@ -781,8 +828,70 @@ Class DualExplodiumGun : SWWMWeapon
XZW2 KLMNOP 1;
XZW2 Q 2;
Goto Ready;
FireLast:
XZW2 A 1;
XZWI K 1;
XZWI L 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"Casing");
}
XZWI M 1;
XZWI N 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP,.6,pitch:1.5);
XZWI OPQR 1;
XZWI S 2;
Goto WaitLast;
WaitLast:
XZWI V 1
{
let sis = player.FindPSprite(PSP_WEAPON+1);
return A_JumpIf(sis.CurState.InStateSequence(ResolveState("LeftReady"))||sis.CurState.InStateSequence(ResolveState("LeftWaitLast")),"ReloadLast");
}
Wait;
ReloadLast:
XZWI V 9
{
let sis = player.FindPSprite(PSP_WEAPON+1);
if ( sis.CurState.InStateSequence(ResolveState("LeftWaitLast")) )
player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLowerLast"));
else player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower"));
}
XZWI V 1 A_PlayerReload();
XZWI WXYZ 1;
XZWJ ABC 1;
XZWJ D 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
XZWJ E 1 { ExplodiumGun(invoker.SisterWeapon).clipcount = 0; }
XZWJ F 1;
XZWJ G 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
XZWJ HIJK 1;
XZWJ L 1 A_DropMag();
XZWJ MNOPQR 1;
XZWJ S 1 A_StartSound("explodium/magin",CHAN_WEAPON,CHANF_OVERLAP);
XZWJ TUVWXYZ 1;
XZWK ABCD 1;
XZWK E 1 { A_StartSound("explodium/jamitin",CHAN_WEAPON,CHANF_OVERLAP); ExplodiumGun(invoker.SisterWeapon).clipcount = ExplodiumGun(invoker.SisterWeapon).default.clipcount; }
XZWK FGHI 1;
XZWK J 1
{
A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
ExplodiumGun(invoker.SisterWeapon).clipcount--;
ExplodiumGun(invoker.SisterWeapon).chambered = true;
let sis = player.FindPSprite(PSP_WEAPON+1);
if ( sis.CurState.InStateSequence(ResolveState("LeftLowerLast")) )
player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaiseLast"));
else player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise"));
}
XZWK K 1;
XZWK L 3;
XZWK MNOP 1;
Goto Ready;
LeftFire:
XZWB A 1 A_Schutt(-1);
XZWB A 1
{
A_Schutt(-1);
return A_JumpIf((invoker.clipcount<=0)&&!invoker.chambered,"LeftFireLast");
}
XZWB I 1;
XZWB J 1
{
@ -793,6 +902,53 @@ Class DualExplodiumGun : SWWMWeapon
XZWB KLMNOP 1;
XZWB Q 2;
Goto LeftReady;
LeftFireLast:
XZWB A 1;
XZWK Q 1;
XZWK R 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"Casing");
}
XZWK S 1;
XZWK T 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP,.6,pitch:1.5);
XZWK UVWX 1;
XZWK Y 2;
Goto LeftWaitLast;
LeftWaitLast:
XZWK Z 1;
Wait;
LeftReloadLast:
XZWK Z 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Lower")); }
XZWK Z 1 A_PlayerReload();
XZWL ABCDEFG 1;
XZWL H 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
XZWL I 1 { invoker.clipcount = 0; }
XZWL J 1;
XZWL K 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
XZWL LMNO 1;
XZWL P 1 A_DropMag();
XZWL QRSTUV 1;
XZWL W 1 A_StartSound("explodium/magin",CHAN_WEAPON,CHANF_OVERLAP);
XZWL XYZ 1;
XZWM ABCDEFGH 1;
XZWM I 1 { A_StartSound("explodium/jamitin",CHAN_WEAPON,CHANF_OVERLAP); invoker.clipcount = invoker.default.clipcount; }
XZWM JKLM 1;
XZWM N 1
{
A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
invoker.clipcount--;
invoker.chambered = true;
let sis = player.FindPSprite(PSP_WEAPON);
if ( sis.CurState.InStateSequence(ResolveState("LowerLast")) )
player.SetPSPrite(PSP_WEAPON,ResolveState("RaiseLast"));
else player.SetPSPrite(PSP_WEAPON,ResolveState("Raise"));
}
XZWM O 1;
XZWM P 3;
XZWM QRST 1;
Goto LeftReady;
Casing:
XZWA A 1
{
@ -833,8 +989,33 @@ Class DualExplodiumGun : SWWMWeapon
XZWG VUT 2;
XZWB A 1;
Goto LeftReady;
LowerLast:
XZWI V 2;
XZWM UVW 2;
XZWM Y -1;
Stop;
LeftLowerLast:
XZWK Z 2;
XZWN FGH 2;
XZWN J -1;
Stop;
RaiseLast:
XZWM Y 2;
XZWN WVU 2;
XZWI V 1;
Goto WaitLast;
LeftRaiseLast:
XZWN JHGF 2;
XZWK Z 1;
Goto LeftWaitLast;
Reload:
XZW2 A 9 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower")); }
XZW2 A 9
{
let sis = player.FindPSprite(PSP_WEAPON+1);
if ( sis.CurState.InStateSequence(ResolveState("LeftWaitLast")) )
player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLowerLast"));
else player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower"));
}
XZW2 A 1
{
A_PlayerReload();
@ -870,10 +1051,22 @@ Class DualExplodiumGun : SWWMWeapon
}
XZW4 STUV 1;
XZW2 A 0 A_JumpIf(!ExplodiumGun(invoker.SisterWeapon).chambered,"Slide");
XZW2 A 0 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise")); }
XZW2 A 0
{
let sis = player.FindPSprite(PSP_WEAPON+1);
if ( sis.CurState.InStateSequence(ResolveState("LeftLowerLast")) )
player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaiseLast"));
else player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise"));
}
Goto Ready;
PreSlide:
XZW2 A 9 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower")); }
XZW2 A 9
{
let sis = player.FindPSprite(PSP_WEAPON+1);
if ( sis.CurState.InStateSequence(ResolveState("LeftWaitLast")) )
player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLowerLast"));
else player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower"));
}
Slide:
XZW2 A 1;
XZW4 WXY 1;
@ -887,10 +1080,22 @@ Class DualExplodiumGun : SWWMWeapon
XZW5 EFG 1;
XZW5 H 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 IJKLM 1;
XZW2 A 0 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise")); }
XZW2 A 0
{
let sis = player.FindPSprite(PSP_WEAPON+1);
if ( sis.CurState.InStateSequence(ResolveState("LeftLowerLast")) )
player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaiseLast"));
else player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise"));
}
Goto Ready;
LeftReload:
XZWB A 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Lower")); }
XZWB A 9
{
let sis = player.FindPSprite(PSP_WEAPON);
if ( sis.CurState.InStateSequence(ResolveState("WaitLast")) )
player.SetPSPrite(PSP_WEAPON,ResolveState("LowerLast"));
else player.SetPSPrite(PSP_WEAPON,ResolveState("Lower"));
}
XZWB A 1
{
A_PlayerReload();
@ -926,10 +1131,22 @@ Class DualExplodiumGun : SWWMWeapon
}
XZWD STUV 1;
XZWB A 0 A_JumpIf(!invoker.chambered,"LeftSlide");
XZWB A 0 { player.SetPSPrite(PSP_WEAPON,ResolveState("Raise")); }
XZWB A 0
{
let sis = player.FindPSprite(PSP_WEAPON);
if ( sis.CurState.InStateSequence(ResolveState("LowerLast")) )
player.SetPSPrite(PSP_WEAPON,ResolveState("RaiseLast"));
else player.SetPSPrite(PSP_WEAPON,ResolveState("Raise"));
}
Goto LeftReady;
LeftPreSlide:
XZWB A 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Lower")); }
XZWB A 9
{
let sis = player.FindPSprite(PSP_WEAPON);
if ( sis.CurState.InStateSequence(ResolveState("WaitLast")) )
player.SetPSPrite(PSP_WEAPON,ResolveState("LowerLast"));
else player.SetPSPrite(PSP_WEAPON,ResolveState("Lower"));
}
LeftSlide:
XZWB A 1;
XZWD WXY 1;
@ -943,7 +1160,13 @@ Class DualExplodiumGun : SWWMWeapon
XZWE EFG 1;
XZWE H 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
XZWE IJKLM 1;
XZWB A 0 { player.SetPSPrite(PSP_WEAPON,ResolveState("Raise")); }
XZWB A 0
{
let sis = player.FindPSprite(PSP_WEAPON);
if ( sis.CurState.InStateSequence(ResolveState("LowerLast")) )
player.SetPSPrite(PSP_WEAPON,ResolveState("RaiseLast"));
else player.SetPSPrite(PSP_WEAPON,ResolveState("Raise"));
}
Goto LeftReady;
Zoom:
XZW2 A 1

View file

@ -363,14 +363,21 @@ Class CandyGun : SWWMWeapon
XZW1 AB -1;
Stop;
Select:
XZW2 B 2 A_FullRaise();
XZW2 B 2
{
A_FullRaise();
return A_JumpIf((invoker.clipcount<=0)&&!invoker.chambered,"SelectLast");
}
XZW2 CDEFGH 2;
Goto Ready;
SelectLast:
XZWE UVWXYZ 2;
XZWF A 2;
Goto ReadyLast;
Ready:
XZW2 A 1
{
if ( (invoker.clipcount <= 0) && !invoker.chambered && ((invoker.Ammo1.Amount > 0) || (CountInv("CandyGunBullets") > 0)) ) player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
else if ( (invoker.clipcount > 0) && !invoker.chambered ) player.SetPSprite(PSP_WEAPON,ResolveState("Slide"));
if ( (invoker.clipcount > 0) && !invoker.chambered ) player.SetPSprite(PSP_WEAPON,ResolveState("Slide"));
else
{
int flg = WRF_ALLOWZOOM|WRF_ALLOWUSER1;
@ -382,8 +389,24 @@ Class CandyGun : SWWMWeapon
}
}
Wait;
ReadyLast:
XZW9 X 1
{
if ( (invoker.Ammo1.Amount > 0) || (CountInv("CandyGunBullets") > 0) || sv_infiniteammo || FindInventory('PowerInfiniteAmmo',true) ) player.SetPSprite(PSP_WEAPON,ResolveState("ReloadLast"));
else
{
A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY);
if ( player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK) )
invoker.CheckAmmo(EitherFire,true);
}
}
Wait;
Fire:
XZW2 A 1 A_Schutt();
XZW2 A 1
{
A_Schutt();
return A_JumpIf((invoker.clipcount<=0)&&!invoker.chambered,"FireLast");
}
XZW2 I 1;
XZW2 J 1
{
@ -394,6 +417,64 @@ Class CandyGun : SWWMWeapon
XZW2 KLMNOP 1;
XZW2 Q 2;
Goto Ready;
FireLast:
XZW2 A 1;
XZWC K 1;
XZWC L 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"Casing");
}
XZWC M 1;
XZWC N 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP,.6,pitch:1.5);
XZWC OPQR 1;
XZWC S 2;
Goto ReadyLast;
ReloadLast:
XZW9 X 1 A_PlayerReload();
XZW9 Z 1;
XZWC XYZ 1;
XZWD ABC 1;
XZWD D 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
XZWD E 1 { invoker.clipcount = 0; }
XZWD F 1;
XZWD G 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
XZWD HIJK 1;
XZWD L 1 A_DropMag();
XZWD MNOPQR 1;
XZWD S 1 A_StartSound("explodium/magin",CHAN_WEAPON,CHANF_OVERLAP);
XZWD TUVWXYZ 1;
XZWE ABCD 1;
XZWE E 1
{
A_StartSound("explodium/jamitin",CHAN_WEAPON,CHANF_OVERLAP);
if ( sv_infiniteammo || FindInventory('PowerInfiniteAmmo',true) )
invoker.clipcount = invoker.default.clipcount;
else if ( invoker.Ammo1.Amount <= 0 )
{
MagAmmo sb = MagAmmo(FindInventory("CandyGunBullets"));
int takeamt = min(sb.Amount,sb.ClipSize);
invoker.clipcount = takeamt;
sb.Amount -= takeamt;
}
else
{
invoker.Ammo1.Amount = max(0,invoker.Ammo1.Amount-1);
invoker.clipcount = invoker.default.clipcount;
}
}
XZWE FGHI 1;
XZWE J 1
{
A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
invoker.clipcount--;
invoker.chambered = true;
}
XZWE K 1;
XZWE L 3;
XZWE MNOP 1;
Goto Ready;
Casing:
XZWC A 1
{
@ -572,11 +653,21 @@ Class CandyGun : SWWMWeapon
XZW9 ABCDEFGHIJKLMNOPQRSTUVW 1;
Goto Ready;
Deselect:
XZW2 A 2 A_StartSound("explodium/deselect",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 A 2
{
A_StartSound("explodium/deselect",CHAN_WEAPON,CHANF_OVERLAP);
return A_JumpIf((invoker.clipcount<=0)&&!invoker.chambered,"DeselectLast");
}
XZWA TUVW 2;
XZW2 B 2;
XZW2 B -1 A_FullLower();
Stop;
DeselectLast:
XZW9 X 2;
XZWE QRST 2;
XZWE U 2;
XZWE U -1 A_FullLower();
Stop;
Flash:
XZWZ A 2
{