diff --git a/src/g_doom/a_doomweaps.cpp b/src/g_doom/a_doomweaps.cpp index cce1161cf..067a106be 100644 --- a/src/g_doom/a_doomweaps.cpp +++ b/src/g_doom/a_doomweaps.cpp @@ -16,42 +16,11 @@ */ void P_SetSafeFlash(AWeapon *weapon, player_t *player, FState *flashstate, int index); -static FRandom pr_fireplasma ("FirePlasma"); static FRandom pr_firerail ("FireRail"); static FRandom pr_bfgspray ("BFGSpray"); static FRandom pr_oldbfg ("OldBFG"); -// -// A_FirePlasma -// -DEFINE_ACTION_FUNCTION(AActor, A_FirePlasma) -{ - PARAM_ACTION_PROLOGUE(AActor); - - player_t *player; - - if (NULL == (player = self->player)) - { - return 0; - } - AWeapon *weapon = self->player->ReadyWeapon; - if (weapon != NULL && ACTION_CALL_FROM_PSPRITE()) - { - if (!weapon->DepleteAmmo (weapon->bAltFire, true, 1)) - return 0; - - FState *flash = weapon->FindState(NAME_Flash); - if (flash != NULL) - { - P_SetSafeFlash(weapon, player, flash, (pr_fireplasma()&1)); - } - } - - P_SpawnPlayerMissile (self, PClass::FindActor("PlasmaBall")); - return 0; -} - // // [RH] A_FireRailgun // diff --git a/wadsrc/static/zscript.txt b/wadsrc/static/zscript.txt index aec7e8089..192089d85 100644 --- a/wadsrc/static/zscript.txt +++ b/wadsrc/static/zscript.txt @@ -55,6 +55,7 @@ zscript/doom/weaponssg.txt zscript/doom/weaponchaingun.txt zscript/doom/weaponchainsaw.txt zscript/doom/weaponrlaunch.txt +zscript/doom/weaponplasma.txt zscript/doom/deadthings.txt zscript/doom/doomammo.txt diff --git a/wadsrc/static/zscript/doom/doomweapons.txt b/wadsrc/static/zscript/doom/doomweapons.txt index ade261d33..7f8d7478f 100644 --- a/wadsrc/static/zscript/doom/doomweapons.txt +++ b/wadsrc/static/zscript/doom/doomweapons.txt @@ -13,115 +13,6 @@ class DoomWeapon : Weapon } -// -------------------------------------------------------------------------- -// -// Plasma rifle -// -// -------------------------------------------------------------------------- - -class PlasmaRifle : DoomWeapon -{ - Default - { - Weapon.SelectionOrder 100; - Weapon.AmmoUse 1; - Weapon.AmmoGive 40; - Weapon.AmmoType "Cell"; - Inventory.PickupMessage "$GOTPLASMA"; - Tag "$TAG_PLASMARIFLE"; - } - States - { - Ready: - PLSG A 1 A_WeaponReady; - Loop; - Deselect: - PLSG A 1 A_Lower; - Loop; - Select: - PLSG A 1 A_Raise; - Loop; - Fire: - PLSG A 3 A_FirePlasma; - PLSG B 20 A_ReFire; - Goto Ready; - Flash: - PLSF A 4 Bright A_Light1; - Goto LightDone; - PLSF B 4 Bright A_Light1; - Goto LightDone; - Spawn: - PLAS A -1; - Stop; - } -} - -class PlasmaBall : Actor -{ - Default - { - Radius 13; - Height 8; - Speed 25; - Damage 5; - Projectile; - +RANDOMIZE - RenderStyle "Add"; - Alpha 0.75; - SeeSound "weapons/plasmaf"; - DeathSound "weapons/plasmax"; - Obituary "$OB_MPPLASMARIFLE"; - } - States - { - Spawn: - PLSS AB 6 Bright; - Loop; - Death: - PLSE ABCDE 4 Bright; - Stop; - } -} - -// -------------------------------------------------------------------------- -// -// BFG 2704 -// -// -------------------------------------------------------------------------- - -class PlasmaBall1 : PlasmaBall -{ - Default - { - Damage 4; - BounceType "Classic"; - BounceFactor 1.0; - Obituary "$OB_MPBFG_MBF"; - } - States - { - Spawn: - PLS1 AB 6 Bright; - Loop; - Death: - PLS1 CDEFG 4 Bright; - Stop; - } -} - -class PlasmaBall2 : PlasmaBall1 -{ - States - { - Spawn: - PLS2 AB 6 Bright; - Loop; - Death: - PLS2 CDE 4 Bright; - Stop; - } -} - // -------------------------------------------------------------------------- // // BFG 9000 diff --git a/wadsrc/static/zscript/doom/weaponplasma.txt b/wadsrc/static/zscript/doom/weaponplasma.txt new file mode 100644 index 000000000..945339a35 --- /dev/null +++ b/wadsrc/static/zscript/doom/weaponplasma.txt @@ -0,0 +1,148 @@ +// -------------------------------------------------------------------------- +// +// Plasma rifle +// +// -------------------------------------------------------------------------- + +class PlasmaRifle : DoomWeapon +{ + Default + { + Weapon.SelectionOrder 100; + Weapon.AmmoUse 1; + Weapon.AmmoGive 40; + Weapon.AmmoType "Cell"; + Inventory.PickupMessage "$GOTPLASMA"; + Tag "$TAG_PLASMARIFLE"; + } + States + { + Ready: + PLSG A 1 A_WeaponReady; + Loop; + Deselect: + PLSG A 1 A_Lower; + Loop; + Select: + PLSG A 1 A_Raise; + Loop; + Fire: + PLSG A 3 A_FirePlasma; + PLSG B 20 A_ReFire; + Goto Ready; + Flash: + PLSF A 4 Bright A_Light1; + Goto LightDone; + PLSF B 4 Bright A_Light1; + Goto LightDone; + Spawn: + PLAS A -1; + Stop; + } +} + +class PlasmaBall : Actor +{ + Default + { + Radius 13; + Height 8; + Speed 25; + Damage 5; + Projectile; + +RANDOMIZE + RenderStyle "Add"; + Alpha 0.75; + SeeSound "weapons/plasmaf"; + DeathSound "weapons/plasmax"; + Obituary "$OB_MPPLASMARIFLE"; + } + States + { + Spawn: + PLSS AB 6 Bright; + Loop; + Death: + PLSE ABCDE 4 Bright; + Stop; + } +} + +// -------------------------------------------------------------------------- +// +// BFG 2704 +// +// -------------------------------------------------------------------------- + +class PlasmaBall1 : PlasmaBall +{ + Default + { + Damage 4; + BounceType "Classic"; + BounceFactor 1.0; + Obituary "$OB_MPBFG_MBF"; + } + States + { + Spawn: + PLS1 AB 6 Bright; + Loop; + Death: + PLS1 CDEFG 4 Bright; + Stop; + } +} + +class PlasmaBall2 : PlasmaBall1 +{ + States + { + Spawn: + PLS2 AB 6 Bright; + Loop; + Death: + PLS2 CDE 4 Bright; + Stop; + } +} + + +//=========================================================================== +// +// Code (must be attached to StateProvider) +// +//=========================================================================== + +extend class StateProvider +{ + + //=========================================================================== + // + // A_FirePlasma + // + //=========================================================================== + + action void A_FirePlasma() + { + if (player == null) + { + return; + } + Weapon weap = player.ReadyWeapon; + if (weap != null && invoker == weap && stateinfo != null && stateinfo.mStateType == STATE_Psprite) + { + if (!weap.DepleteAmmo (weap.bAltFire, true, 1)) + return; + + State flash = weap.FindState('Flash'); + if (flash != null) + { + player.SetSafeFlash(weap, flash, random[FirePlasma]()&1); + } + + } + + SpawnPlayerMissile ("PlasmaBall"); + } +} diff --git a/wadsrc/static/zscript/shared/inventory.txt b/wadsrc/static/zscript/shared/inventory.txt index c1f40fd1f..270d5e6d7 100644 --- a/wadsrc/static/zscript/shared/inventory.txt +++ b/wadsrc/static/zscript/shared/inventory.txt @@ -51,7 +51,6 @@ class StateProvider : Inventory native action native void A_Lower(); action native void A_Raise(); - action native void A_FirePlasma(); action native void A_FireRailgun(); action native void A_FireRailgunLeft(); action native void A_FireRailgunRight();