- scriptified A_FirePlasma.

This commit is contained in:
Christoph Oelckers 2016-11-20 01:18:21 +01:00
parent fdab994fcb
commit 3c726aa570
5 changed files with 149 additions and 141 deletions

View file

@ -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
//

View file

@ -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

View file

@ -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

View file

@ -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");
}
}

View file

@ -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();