gzdoom/wadsrc/static/zscript/actors/strife/strifeplayer.zs
Christoph Oelckers a638cfbd6e - fixed: player_t::GetPSprite cannot guarantee success
As a consequence it must return null in the failure case instead of asserting and all calls to this function must check for the failure case.
2020-03-11 00:56:29 +01:00

168 lines
4.1 KiB
Text

// The player ---------------------------------------------------------------
class StrifePlayer : PlayerPawn
{
Default
{
Health 100;
Radius 18;
Height 56;
Mass 100;
PainChance 255;
Speed 1;
MaxStepHeight 16;
CrushPainSound "misc/pcrush";
Player.DisplayName "Rebel";
Player.StartItem "PunchDagger";
Player.RunHealth 15;
Player.WeaponSlot 1, "PunchDagger";
Player.WeaponSlot 2, "StrifeCrossbow2", "StrifeCrossbow";
Player.WeaponSlot 3, "AssaultGun";
Player.WeaponSlot 4, "MiniMissileLauncher";
Player.WeaponSlot 5, "StrifeGrenadeLauncher2", "StrifeGrenadeLauncher";
Player.WeaponSlot 6, "FlameThrower";
Player.WeaponSlot 7, "Mauler2", "Mauler";
Player.WeaponSlot 8, "Sigil";
Player.ColorRange 128, 143;
Player.Colorset 0, "$TXT_COLOR_BROWN", 0x80, 0x8F, 0x82;
Player.Colorset 1, "$TXT_COLOR_RED", 0x40, 0x4F, 0x42, 0x20, 0x3F, 0x00, 0x1F, 0xF1, 0xF6, 0xE0, 0xE5, 0xF7, 0xFB, 0xF1, 0xF5;
Player.Colorset 2, "$TXT_COLOR_RUST", 0xB0, 0xBF, 0xB2, 0x20, 0x3F, 0x00, 0x1F;
Player.Colorset 3, "$TXT_COLOR_GRAY", 0x10, 0x1F, 0x12, 0x20, 0x2F, 0xD0, 0xDF, 0x30, 0x3F, 0xD0, 0xDF;
Player.Colorset 4, "$TXT_COLOR_DARKGREEN", 0x30, 0x3F, 0x32, 0x20, 0x2F, 0xD0, 0xDF, 0x30, 0x3F, 0xD0, 0xDF;
Player.Colorset 5, "$TXT_COLOR_GOLD", 0x50, 0x5F, 0x52, 0x20, 0x3F, 0x00, 0x1F, 0x50, 0x5F, 0x80, 0x8F, 0xC0, 0xCF, 0xA0, 0xAF, 0xD0, 0xDF, 0xB0, 0xBF;
Player.Colorset 6, "$TXT_COLOR_BRIGHTGREEN",0x60, 0x6F, 0x62, 0x20, 0x3F, 0x00, 0x1F, 0x50, 0x5F, 0x10, 0x1F, 0xC0, 0xCF, 0x20, 0x2F, 0xD0, 0xDF, 0x30, 0x3F;
Player.Colorset 7, "$TXT_COLOR_BLUE", 0x90, 0x9F, 0x92, 0x20, 0x3F, 0x00, 0x1F, 0x50, 0x5F, 0x40, 0x4F, 0xC1, 0xCF, 0x01, 0x0F, 0xC0,0xC0,1,1, 0xD0, 0xDF, 0x10, 0x1F;
}
States
{
Spawn:
PLAY A -1;
stop;
See:
PLAY ABCD 4;
loop;
Missile:
PLAY E 12;
goto Spawn;
Melee:
PLAY F 6;
goto Missile;
Pain:
PLAY Q 4;
PLAY Q 4 A_Pain;
Goto Spawn;
Death:
PLAY H 3;
PLAY I 3 A_PlayerScream;
PLAY J 3 A_NoBlocking;
PLAY KLMNO 4;
PLAY P -1;
Stop;
XDeath:
RGIB A 5 A_TossGib;
RGIB B 5 A_XScream;
RGIB C 5 A_NoBlocking;
RGIB DEFG 5 A_TossGib;
RGIB H -1 A_TossGib;
Burn:
BURN A 3 Bright A_ItBurnsItBurns;
BURN B 3 Bright A_DropFire;
BURN C 3 Bright A_Wander;
BURN D 3 Bright A_NoBlocking;
BURN E 5 Bright A_DropFire;
BURN FGH 5 Bright A_Wander;
BURN I 5 Bright A_DropFire;
BURN JKL 5 Bright A_Wander;
BURN M 5 Bright A_DropFire;
BURN N 5 Bright A_CrispyPlayer;
BURN OPQPQ 5 Bright;
BURN RSTU 7 Bright;
BURN V -1;
Stop;
Disintegrate:
DISR A 5 A_StartSound("misc/disruptordeath", CHAN_VOICE);
DISR BC 5;
DISR D 5 A_NoBlocking;
DISR EF 5;
DISR GHIJ 4;
MEAT D -1;
Stop;
Firehands:
WAVE ABCD 3;
Loop;
Firehandslower:
WAVE ABCD 3 A_HandLower;
Loop;
}
void A_ItBurnsItBurns()
{
A_StartSound ("human/imonfire", CHAN_VOICE);
if (player != null && player.mo == self)
{
player.SetPsprite(PSP_STRIFEHANDS, FindState("FireHands"));
player.ReadyWeapon = null;
player.PendingWeapon = WP_NOCHANGE;
player.playerstate = PST_LIVE;
player.extralight = 3;
}
}
void A_CrispyPlayer()
{
if (player != null && player.mo == self)
{
PSprite psp = player.GetPSprite(PSP_STRIFEHANDS);
State firehandslower = FindState("FireHandsLower");
State firehands = FindState("FireHands");
if (psp)
{
if (psp.CurState != null && firehandslower != null && firehands != null)
{
// Calculate state to go to.
int dist = firehands.DistanceTo(psp.curState);
if (dist > 0)
{
player.playerstate = PST_DEAD;
psp.SetState(firehandslower + dist);
return;
}
}
player.playerstate = PST_DEAD;
psp.SetState(null);
}
}
}
void A_HandLower()
{
if (player != null)
{
PSprite psp = player.GetPSprite(PSP_STRIFEHANDS);
if (psp)
{
if (psp.CurState == null)
{
psp.SetState(null);
return;
}
psp.y += 9;
if (psp.y > WEAPONBOTTOM*2)
{
psp.SetState(null);
}
}
if (player.extralight > 0) player.extralight--;
}
return;
}
}