mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-27 05:40:46 +00:00
named sequences WIP.
This commit is contained in:
parent
e0195ecab5
commit
142ca04d80
15 changed files with 189 additions and 146 deletions
|
@ -836,9 +836,7 @@ static void actInitThings()
|
|||
SEQINST* pInst = GetInstance(act);
|
||||
if (pInst)
|
||||
{
|
||||
auto seq = getSequence(pInst->nSeqID);
|
||||
if (!seq) break;
|
||||
seqSpawn(pInst->nSeqID, act);
|
||||
seqSpawn(pInst->nName, pInst->nSeqID, act);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -893,7 +891,6 @@ static void actInitDudes()
|
|||
|
||||
if (!act->hasX()) continue;
|
||||
|
||||
int seqStartId = act->seqStartID();
|
||||
if (!act->IsPlayerActor())
|
||||
{
|
||||
act->clipdist = act->fClipDist();
|
||||
|
@ -906,7 +903,7 @@ static void actInitDudes()
|
|||
act->xspr.health = act->startHealth() << 4;
|
||||
}
|
||||
|
||||
if (getSequence(seqStartId)) seqSpawn(seqStartId, act);
|
||||
seqSpawn(act->seqStartName(), act->seqStartID(), act);
|
||||
}
|
||||
aiInit();
|
||||
}
|
||||
|
@ -1083,7 +1080,7 @@ static void actNapalmMove(DBloodActor* actor)
|
|||
auto pOwner = actor->GetOwner();
|
||||
|
||||
actPostSprite(actor, kStatDecoration);
|
||||
seqSpawn(9, actor);
|
||||
seqSpawn(NAME_None, 9, actor);
|
||||
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
|
||||
|
||||
sfxPlay3DSound(actor, 303, 24 + (actor->spr.flags & 3), 1);
|
||||
|
@ -1104,7 +1101,7 @@ static void actNapalmMove(DBloodActor* actor)
|
|||
actor->spr.Angles.Yaw = (ang + rndang).Normalized360();
|
||||
auto spawned = actFireThing(actor, 0., 0., -0.5774, kThingNapalmBall, t1);
|
||||
spawned->SetOwner(actor->GetOwner());
|
||||
seqSpawn(61, spawned, AF(NapalmSeqCallback));
|
||||
seqSpawn(NAME_None, 61, spawned, AF(NapalmSeqCallback));
|
||||
spawned->xspr.data4 = spawnparam[i];
|
||||
}
|
||||
}
|
||||
|
@ -1147,7 +1144,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
|
|||
break;
|
||||
#endif
|
||||
case kDudeCerberusTwoHead: // Cerberus
|
||||
seqSpawn(actor->seqStartID() + 1, actor, nullptr);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 1, actor, nullptr);
|
||||
return true;
|
||||
|
||||
case kDudeCultistTommy:
|
||||
|
@ -1330,12 +1327,12 @@ static void zombieAxeNormalDeath(DBloodActor* actor, int nSeq)
|
|||
sfxPlay3DSound(actor, 1107 + Random(2), -1, 0);
|
||||
if (nSeq == 2)
|
||||
{
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor, AF(DudeToGibCallback1));
|
||||
spawnGibs(actor, GIBTYPE_27, -0xccccc);
|
||||
}
|
||||
else if (nSeq == 1 && Chance(0x4000))
|
||||
{
|
||||
seqSpawn(actor->seqStartID() + 7, actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 7, actor, AF(DudeToGibCallback1));
|
||||
evPostActor(actor, 0, AF(fxZombieBloodSpurt));
|
||||
sfxPlay3DSound(actor, 362, -1, 0);
|
||||
actor->xspr.data1 = 35;
|
||||
|
@ -1343,9 +1340,9 @@ static void zombieAxeNormalDeath(DBloodActor* actor, int nSeq)
|
|||
|
||||
spawnGibs(actor, GIBTYPE_27, -0x111111);
|
||||
}
|
||||
else if (nSeq == 14)seqSpawn(actor->seqStartID() + nSeq, actor, nullptr);
|
||||
else if (nSeq == 3) seqSpawn(actor->seqStartID() + 13, actor, AF(DudeToGibCallback2));
|
||||
else seqSpawn(actor->seqStartID() + nSeq, actor, AF(DudeToGibCallback1));
|
||||
else if (nSeq == 14)seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor, nullptr);
|
||||
else if (nSeq == 3) seqSpawn(actor->seqStartName(), actor->seqStartID() + 13, actor, AF(DudeToGibCallback2));
|
||||
else seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor, AF(DudeToGibCallback1));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1363,10 +1360,10 @@ static void burningCultistDeath(DBloodActor* actor, int nSeq)
|
|||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
GibSprite(actor, GIBTYPE_7, nullptr, nullptr);
|
||||
seqSpawn(actor->seqStartID() + 16 - Random(1), actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 16 - Random(1), actor, AF(DudeToGibCallback1));
|
||||
}
|
||||
else
|
||||
seqSpawn(actor->seqStartID() + 15, actor, AF(DudeToGibCallback2));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 15, actor, AF(DudeToGibCallback2));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1384,11 +1381,11 @@ void zombieAxeBurningDeath(DBloodActor* actor, int nSeq)
|
|||
|
||||
if (Chance(0x8000))
|
||||
{
|
||||
seqSpawn(actor->seqStartID() + 13, actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 13, actor, AF(DudeToGibCallback1));
|
||||
spawnGibs(actor, GIBTYPE_27, -0xccccc);
|
||||
}
|
||||
else
|
||||
seqSpawn(actor->seqStartID() + 13, actor, AF(DudeToGibCallback2));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 13, actor, AF(DudeToGibCallback2));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1402,14 +1399,14 @@ static void zombieButcherDeath(DBloodActor* actor, int nSeq)
|
|||
if (nSeq == 14)
|
||||
{
|
||||
sfxPlay3DSound(actor, 1206, -1, 0);
|
||||
seqSpawn(actor->seqStartID() + 11, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 11, actor);
|
||||
return;
|
||||
}
|
||||
sfxPlay3DSound(actor, 1204 + Random(2), -1, 0);
|
||||
if (nSeq == 3)
|
||||
seqSpawn(actor->seqStartID() + 10, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 10, actor);
|
||||
else
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1451,7 +1448,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
|
||||
int nSeq = checkDamageType(actor, damageType);
|
||||
|
||||
if (!getSequence(actor->seqStartID() + nSeq))
|
||||
if (!getSequence(actor->seqStartName(), actor->seqStartID() + nSeq))
|
||||
{
|
||||
seqKill(actor);
|
||||
AddKill(killerActor, actor);
|
||||
|
@ -1471,7 +1468,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
case kDudeCultistTesla:
|
||||
case kDudeCultistTNT:
|
||||
sfxPlay3DSound(actor, 1018 + Random(2), -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor, nSeq == 3 ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor, nSeq == 3 ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
|
||||
break;
|
||||
|
||||
case kDudeBurningCultist:
|
||||
|
@ -1502,7 +1499,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
|
||||
case kDudeBurningInnocent:
|
||||
damageType = kDamageExplode;
|
||||
seqSpawn(actor->seqStartID() + 7, actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 7, actor, AF(DudeToGibCallback1));
|
||||
break;
|
||||
|
||||
case kDudeZombieButcher:
|
||||
|
@ -1546,7 +1543,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
|
||||
case kDudeSpiderMother:
|
||||
sfxPlay3DSound(actor, 1850, -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
break;
|
||||
|
||||
case kDudeGillBeast:
|
||||
|
@ -1577,15 +1574,15 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
break;
|
||||
case kDudeTentacleGreen:
|
||||
sfxPlay3DSound(actor, damage == 5 ? 2471 : 2472, -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
break;
|
||||
case kDudePodFire:
|
||||
sfxPlay3DSound(actor, damage == 5 ? 2451 : 2452, -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
break;
|
||||
case kDudeTentacleFire:
|
||||
sfxPlay3DSound(actor, 2501, -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -1602,26 +1599,26 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
|
||||
case kDudeTchernobog:
|
||||
sfxPlay3DSound(actor, 2380, -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
break;
|
||||
|
||||
case kDudeBurningTinyCaleb:
|
||||
damageType = kDamageExplode;
|
||||
seqSpawn(actor->seqStartID() + 11, actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 11, actor, AF(DudeToGibCallback1));
|
||||
break;
|
||||
|
||||
case kDudeBeast:
|
||||
sfxPlay3DSound(actor, 9000 + Random(2), -1, 0);
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor, nSeq == 3 ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor, nSeq == 3 ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
|
||||
break;
|
||||
|
||||
case kDudeBurningBeast:
|
||||
damageType = kDamageExplode;
|
||||
seqSpawn(actor->seqStartID() + 12, actor, AF(DudeToGibCallback1));
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 12, actor, AF(DudeToGibCallback1));
|
||||
break;
|
||||
|
||||
default:
|
||||
seqSpawn(actor->seqStartID() + nSeq, actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + nSeq, actor);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1733,20 +1730,20 @@ static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, D
|
|||
}
|
||||
break;
|
||||
case kTrapMachinegun:
|
||||
seqSpawn(28, actor);
|
||||
seqSpawn(NAME_None, 28, actor);
|
||||
break;
|
||||
|
||||
case kThingFluorescent:
|
||||
seqSpawn(12, actor);
|
||||
seqSpawn(NAME_None, 12, actor);
|
||||
GibSprite(actor, GIBTYPE_6, nullptr, nullptr);
|
||||
break;
|
||||
|
||||
case kThingSpiderWeb:
|
||||
seqSpawn(15, actor);
|
||||
seqSpawn(NAME_None, 15, actor);
|
||||
break;
|
||||
|
||||
case kThingMetalGrate:
|
||||
seqSpawn(21, actor);
|
||||
seqSpawn(NAME_None, 21, actor);
|
||||
GibSprite(actor, GIBTYPE_4, nullptr, nullptr);
|
||||
break;
|
||||
|
||||
|
@ -1760,12 +1757,12 @@ static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, D
|
|||
break;
|
||||
|
||||
case 0:
|
||||
seqSpawn(25, actor, AF(TreeToGibCallback));
|
||||
seqSpawn(NAME_None, 25, actor, AF(TreeToGibCallback));
|
||||
sfxPlay3DSound(actor, 351, -1, 0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
seqSpawn(26, actor, AF(TreeToGibCallback));
|
||||
seqSpawn(NAME_None, 26, actor, AF(TreeToGibCallback));
|
||||
sfxPlay3DSound(actor, 351, -1, 0);
|
||||
break;
|
||||
}
|
||||
|
@ -1892,7 +1889,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
|
|||
actPostSprite(missileActor, kStatDecoration);
|
||||
if (missileActor->spr.Angles.Yaw == DAngle180) sfxPlay3DSound(missileActor, 307, -1, 0);
|
||||
missileActor->ChangeType(kSpriteDecoration);
|
||||
seqSpawn(9, missileActor);
|
||||
seqSpawn(NAME_None, 9, missileActor);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2060,7 +2057,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
|
|||
sfxKill3DSound(missileActor, -1, -1);
|
||||
sfxPlay3DSectorSound(missileActor->spr.pos, 522, missileActor->sector());
|
||||
actPostSprite(missileActor, kStatDebris);
|
||||
seqSpawn(20, missileActor);
|
||||
seqSpawn(NAME_None, 20, missileActor);
|
||||
if (hitCode == 3 && actorHit && actorHit->hasX())
|
||||
{
|
||||
if (actorHit->spr.statnum == kStatDude)
|
||||
|
@ -2075,7 +2072,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
|
|||
actPostSprite(missileActor, kStatDebris);
|
||||
missileActor->spr.cstat &= ~CSTAT_SPRITE_ALIGNMENT_WALL;
|
||||
missileActor->ChangeType(kSpriteDecoration);
|
||||
seqSpawn(20, missileActor);
|
||||
seqSpawn(NAME_None, 20, missileActor);
|
||||
if (hitCode == 3 && actorHit && actorHit->hasX())
|
||||
{
|
||||
if (actorHit->spr.statnum == kStatDude)
|
||||
|
@ -3364,7 +3361,7 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
{
|
||||
case kMissileFireballNapalm:
|
||||
nType = kExplosionNapalm;
|
||||
seqSpawn(4, actor);
|
||||
seqSpawn(NAME_None, 4, actor);
|
||||
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
|
||||
sfxPlay3DSound(actor, 303, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
|
@ -3372,7 +3369,7 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
|
||||
case kMissileFlareAlt:
|
||||
nType = kExplosionFireball;
|
||||
seqSpawn(9, actor);
|
||||
seqSpawn(NAME_None, 9, actor);
|
||||
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
|
||||
sfxPlay3DSound(actor, 306, 24 + (actor->GetIndex() & 3), FX_GlobalChannel);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
|
@ -3381,7 +3378,7 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
case kMissileFireballCerberus:
|
||||
case kMissileFireballTchernobog:
|
||||
nType = kExplosionFireball;
|
||||
seqSpawn(5, actor);
|
||||
seqSpawn(NAME_None, 5, actor);
|
||||
sfxPlay3DSound(actor, 304, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
break;
|
||||
|
@ -3389,7 +3386,7 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
case kThingArmedTNTStick:
|
||||
nType = kExplosionSmall;
|
||||
if (actor->hit.florhit.type == kHitNone) seqSpawn(4, actor);
|
||||
else seqSpawn(3, actor);
|
||||
else seqSpawn(NAME_None, 3, actor);
|
||||
sfxPlay3DSound(actor, 303, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
break;
|
||||
|
@ -3401,16 +3398,16 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
case kModernThingTNTProx:
|
||||
#endif
|
||||
nType = kExplosionStandard;
|
||||
if (actor->hit.florhit.type == kHitNone) seqSpawn(4, actor);
|
||||
if (actor->hit.florhit.type == kHitNone) seqSpawn(NAME_None, 4, actor);
|
||||
else
|
||||
seqSpawn(3, actor);
|
||||
seqSpawn(NAME_None, 3, actor);
|
||||
sfxPlay3DSound(actor, 304, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
break;
|
||||
|
||||
case kThingArmedSpray:
|
||||
nType = kExplosionSpray;
|
||||
seqSpawn(5, actor);
|
||||
seqSpawn(NAME_None, 5, actor);
|
||||
sfxPlay3DSound(actor, 307, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
break;
|
||||
|
@ -3427,7 +3424,7 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
else actPostSprite(actor, kStatFree);
|
||||
|
||||
nType = kExplosionLarge;
|
||||
seqSpawn(4, spawned);
|
||||
seqSpawn(NAME_None, 4, spawned);
|
||||
actor = spawned;
|
||||
|
||||
sfxPlay3DSound(actor, 305, -1, 0);
|
||||
|
@ -3461,13 +3458,13 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
if (tSnd > 0) nSnd = tSnd;
|
||||
}
|
||||
|
||||
if (getSequence(nSeq)) seqSpawn(nSeq, actor);
|
||||
seqSpawn(NAME_None, nSeq, actor);
|
||||
sfxPlay3DSound(actor, nSnd, -1, 0);
|
||||
break;
|
||||
}
|
||||
case kThingPodFireBall:
|
||||
nType = kExplosionFireball;
|
||||
seqSpawn(9, actor);
|
||||
seqSpawn(NAME_None, 9, actor);
|
||||
sfxPlay3DSound(actor, 307, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
fxSpawnPodStuff(actor, 240);
|
||||
|
@ -3475,7 +3472,7 @@ void actExplodeSprite(DBloodActor* actor)
|
|||
|
||||
default:
|
||||
nType = kExplosionStandard;
|
||||
seqSpawn(4, actor);
|
||||
seqSpawn(NAME_None, 4, actor);
|
||||
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
|
||||
sfxPlay3DSound(actor, 303, -1, 0);
|
||||
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
|
||||
|
@ -4218,8 +4215,7 @@ DBloodActor* actSpawnDude(DBloodActor* source, int nType, double dist)
|
|||
spawned->clipdist = spawned->fClipDist();
|
||||
spawned->xspr.health = spawned->startHealth() << 4;
|
||||
spawned->xspr.respawn = 1;
|
||||
if (getSequence(spawned->seqStartID()))
|
||||
seqSpawn(spawned->seqStartID(), spawned);
|
||||
seqSpawn(spawned->seqStartName(), spawned->seqStartID(), spawned);
|
||||
|
||||
#ifdef NOONE_EXTENSIONS
|
||||
// add a way to inherit some values of spawner type 18 by dude.
|
||||
|
|
|
@ -81,12 +81,16 @@ void aiNewState(DBloodActor* actor, FState* pAIState)
|
|||
actor->xspr.stateTimer = pAIState->Tics;
|
||||
actor->xspr.aiState = pAIState;
|
||||
int seqStartId = -1;
|
||||
FName seqStartName = NAME_None;
|
||||
|
||||
switch (pAIState->StateFlags & STF_SPRITESEQMASK)
|
||||
{
|
||||
case STF_SPRITESEQNAME:
|
||||
if (pAIState->sprite > 0)
|
||||
I_Error("Named SEQs not supported yet!");
|
||||
{
|
||||
seqStartName = ENamedName(pAIState->sprite);
|
||||
seqStartId = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case STF_SPRITESEQINDEX:
|
||||
|
@ -100,8 +104,7 @@ void aiNewState(DBloodActor* actor, FState* pAIState)
|
|||
|
||||
if (seqStartId >= 0)
|
||||
{
|
||||
if (getSequence(seqStartId))
|
||||
seqSpawn(seqStartId, actor, pAIState->ActionFunc);
|
||||
seqSpawn(seqStartName, seqStartId, actor, pAIState->ActionFunc);
|
||||
}
|
||||
|
||||
if (pAIState->EnterFunc)
|
||||
|
|
|
@ -62,7 +62,7 @@ void podAttack(DBloodActor* actor)
|
|||
pMissile = actFireThing(actor, 0., -500., dv.Z / 32768 - 0.22125, kThingPodGreenBall, nDist * (2048. / 64800));
|
||||
}
|
||||
if (pMissile)
|
||||
seqSpawn(68, pMissile);
|
||||
seqSpawn(NAME_None, 68, pMissile);
|
||||
break;
|
||||
case kDudePodFire:
|
||||
dv.Z += 31.25;
|
||||
|
@ -72,7 +72,7 @@ void podAttack(DBloodActor* actor)
|
|||
pMissile = actFireThing(actor, 0., -500., dv.Z / 32768 - 0.22125, kThingPodFireBall, nDist * (2048. / 64800));
|
||||
}
|
||||
if (pMissile)
|
||||
seqSpawn(22, pMissile);
|
||||
seqSpawn(NAME_None, 22, pMissile);
|
||||
break;
|
||||
}
|
||||
for (int i = 0; i < 4; i++)
|
||||
|
|
|
@ -2617,10 +2617,10 @@ void modernCustomDudeDeath(DBloodActor* actor, int nSeq, int damageType)
|
|||
{
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra;
|
||||
if (pExtra->availDeaths[kDmgBurn] == 3) seqSpawn((15 + Random(2)) + actor->xspr.data2, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 2) seqSpawn(16 + actor->xspr.data2, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 1) seqSpawn(15 + actor->xspr.data2, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 2) seqSpawn(NAME_None, 16 + actor->xspr.data2, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 1) seqSpawn(NAME_None, 15 + actor->xspr.data2, actor, dudeToGib);
|
||||
else if (getSequence(actor->xspr.data2 + nSeq))seqSpawn(nSeq + actor->xspr.data2, actor, dudeToGib);
|
||||
else seqSpawn(1 + actor->xspr.data2, actor, dudeToGib);
|
||||
else seqSpawn(NAME_None, 1 + actor->xspr.data2, actor, dudeToGib);
|
||||
|
||||
}
|
||||
else
|
||||
|
@ -2645,9 +2645,9 @@ void modernCustomDudeBurningDeath(DBloodActor* actor, int nSeq)
|
|||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra;
|
||||
int seqofs = actor->xspr.data2;
|
||||
if (pExtra->availDeaths[kDmgBurn] == 3) seqSpawn((15 + Random(2)) + seqofs, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 2) seqSpawn(16 + seqofs, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 1) seqSpawn(15 + seqofs, actor, dudeToGib);
|
||||
else seqSpawn(1 + seqofs, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 2) seqSpawn(NAME_None, 16 + seqofs, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 1) seqSpawn(NAME_None, 15 + seqofs, actor, dudeToGib);
|
||||
else seqSpawn(NAME_None, 1 + seqofs, actor, dudeToGib);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2669,7 +2669,7 @@ case kDudePodMother: // FakeDude type (no seq, custom flags, clipdist and cstat
|
|||
|
||||
/* onHit
|
||||
case kModernThingThrowableRock:
|
||||
seqSpawn(24, actor);
|
||||
seqSpawn(NAME_None, 24, actor);
|
||||
if (hit.type == kHitSprite)
|
||||
{
|
||||
self.scale = DVector2(0.5, 0.5);
|
||||
|
|
|
@ -205,6 +205,11 @@ public:
|
|||
|
||||
|
||||
// dudeinfo helpers.
|
||||
inline FName seqStartName() const
|
||||
{
|
||||
return NAME_None;
|
||||
}
|
||||
|
||||
inline int seqStartID() const
|
||||
{
|
||||
return *(int*)(GetClass()->Meta + o_seqStartID);
|
||||
|
|
|
@ -292,8 +292,7 @@ void Respawn(DBloodActor* actor) // 9
|
|||
switch (actor->GetType()) {
|
||||
default:
|
||||
actor->clipdist = actor->fClipDist();
|
||||
if (getSequence(actor->seqStartID()))
|
||||
seqSpawn(actor->seqStartID(), actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID(), actor);
|
||||
break;
|
||||
case kDudeModernCustom:
|
||||
seqSpawn(genDudeSeqStartId(actor), actor);
|
||||
|
@ -308,8 +307,7 @@ void Respawn(DBloodActor* actor) // 9
|
|||
#else
|
||||
actor->clipdist = actor->fClipDist();
|
||||
actor->xspr.health = actor->startHealth() << 4;
|
||||
if (getSequence(actor->seqStartID()))
|
||||
seqSpawn(actor->seqStartID(), actor);
|
||||
seqSpawn(actor->seqStartName(), actor->seqStartID(), actor);
|
||||
#endif
|
||||
aiInitSprite(actor);
|
||||
actor->xspr.key = 0;
|
||||
|
|
|
@ -374,7 +374,7 @@ void fxPrecache()
|
|||
{
|
||||
tilePrecacheTile(gFXData[i].textureID(), 0, 0);
|
||||
if (gFXData[i].seq)
|
||||
seqPrecacheId(gFXData[i].seq, 0);
|
||||
seqPrecacheId(NAME_None, gFXData[i].seq, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2210,8 +2210,8 @@ int playerDamageSprite(DBloodActor* source, DBloodPlayer* pPlayer, DAMAGE_TYPE n
|
|||
#endif
|
||||
|
||||
}
|
||||
assert(getSequence(pActor->seqStartID() + nDeathSeqID) != NULL);
|
||||
seqSpawn(pActor->seqStartID() + nDeathSeqID, pPlayer->GetActor(), nKneelingPlayer);
|
||||
//assert(getSequence(pActor->seqStartID() + nDeathSeqID) != NULL);
|
||||
seqSpawn(pActor->seqStartName(), pActor->seqStartID() + nDeathSeqID, pPlayer->GetActor(), nKneelingPlayer);
|
||||
return nDamage;
|
||||
}
|
||||
|
||||
|
|
|
@ -78,44 +78,44 @@ void tilePrecacheTile(FTextureID nTex, int nType, int palette)
|
|||
void PrecacheDude(DBloodActor* actor)
|
||||
{
|
||||
int palette = actor->spr.pal;
|
||||
seqPrecacheId(actor->seqStartID(), palette);
|
||||
seqPrecacheId(actor->seqStartID() + 5, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 1, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 2, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID(), palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 5, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 1, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 2, palette);
|
||||
switch (actor->GetType())
|
||||
{
|
||||
case kDudeCultistTommy:
|
||||
case kDudeCultistShotgun:
|
||||
case kDudeCultistTesla:
|
||||
case kDudeCultistTNT:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 9, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 13, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 14, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 15, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 9, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 13, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 14, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 15, palette);
|
||||
break;
|
||||
case kDudeZombieButcher:
|
||||
case kDudeGillBeast:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 9, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 10, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 11, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 9, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 10, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 11, palette);
|
||||
break;
|
||||
case kDudeGargoyleStatueFlesh:
|
||||
case kDudeGargoyleStatueStone:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette); //???
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette); //???
|
||||
[[fallthrough]];
|
||||
case kDudeGargoyleFlesh:
|
||||
case kDudeGargoyleStone:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 9, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 9, palette);
|
||||
break;
|
||||
case kDudePhantasm:
|
||||
case kDudeHellHound:
|
||||
|
@ -124,38 +124,38 @@ void PrecacheDude(DBloodActor* actor)
|
|||
case kDudeSpiderBlack:
|
||||
case kDudeSpiderMother:
|
||||
case kDudeTchernobog:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 8, palette);
|
||||
break;
|
||||
case kDudeCerberusTwoHead:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
[[fallthrough]];
|
||||
case kDudeHand:
|
||||
case kDudeBoneEel:
|
||||
case kDudeBat:
|
||||
case kDudeRat:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
break;
|
||||
case kDudeCultistBeast:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
break;
|
||||
case kDudeZombieAxeBuried:
|
||||
seqPrecacheId(actor->seqStartID() + 12, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 9, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 12, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 9, palette);
|
||||
[[fallthrough]];
|
||||
case kDudeZombieAxeLaying:
|
||||
seqPrecacheId(actor->seqStartID() + 10, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 10, palette);
|
||||
[[fallthrough]];
|
||||
case kDudeZombieAxeNormal:
|
||||
seqPrecacheId(actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 11, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 13, palette);
|
||||
seqPrecacheId(actor->seqStartID() + 14, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 6, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 7, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 8, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 11, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 13, palette);
|
||||
seqPrecacheId(actor->seqStartName(), actor->seqStartID() + 14, palette);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,9 +52,9 @@ void Seq::Precache(int palette)
|
|||
tilePrecacheTile(seqGetTexture(&frames[i]), -1, palette);
|
||||
}
|
||||
|
||||
void seqPrecacheId(int id, int palette)
|
||||
void seqPrecacheId(FName name, int id, int palette)
|
||||
{
|
||||
auto pSeq = getSequence(id);
|
||||
auto pSeq = getSequence(name, id);
|
||||
if (pSeq) pSeq->Precache(palette);
|
||||
}
|
||||
|
||||
|
@ -506,21 +506,36 @@ static void ByteSwapSEQ(Seq* pSeq)
|
|||
}
|
||||
|
||||
FMemArena seqcache;
|
||||
static TMap<int, Seq*> sequences;
|
||||
Seq* getSequence(int res_id)
|
||||
static TMap<int64_t, Seq*> sequences;
|
||||
Seq* getSequence(FName res_name, int res_id)
|
||||
{
|
||||
int64_t key = ((int64_t)res_name.GetIndex() << 32) | res_id;
|
||||
auto p = sequences.CheckKey(res_id);
|
||||
if (p != nullptr) return *p;
|
||||
|
||||
int index = fileSystem.FindResource(res_id, "SEQ");
|
||||
int index;
|
||||
if (res_name == NAME_None)
|
||||
{
|
||||
index = fileSystem.FindResource(res_id, "SEQ");
|
||||
}
|
||||
else
|
||||
{
|
||||
// named sequences are only read from the seq folder.
|
||||
FString frame;
|
||||
if (res_id > 0) frame.Format("@%d", res_id);
|
||||
FStringf path("seq/%s%s.seq", res_name.GetChars(), frame.GetChars());
|
||||
index = fileSystem.CheckNumForFullName(path.GetChars());
|
||||
}
|
||||
|
||||
if (index < 0)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto fr = fileSystem.OpenFileReader(index);
|
||||
auto seqdata = (Seq*)seqcache.Alloc(fr.GetLength());
|
||||
fr.Read(seqdata, fr.GetLength());
|
||||
sequences.Insert(res_id, seqdata);
|
||||
sequences.Insert(key, seqdata);
|
||||
ByteSwapSEQ(seqdata);
|
||||
return seqdata;
|
||||
}
|
||||
|
@ -531,9 +546,9 @@ Seq* getSequence(int res_id)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void seqSpawn_(int nSeqID, int type, const EventObject& eob, VMFunction* callback)
|
||||
void seqSpawn_(FName name, int nSeqID, int type, const EventObject& eob, VMFunction* callback)
|
||||
{
|
||||
Seq* pSequence = getSequence(nSeqID);
|
||||
Seq* pSequence = getSequence(name, nSeqID);
|
||||
|
||||
if (pSequence == nullptr) return;
|
||||
|
||||
|
@ -551,6 +566,7 @@ void seqSpawn_(int nSeqID, int type, const EventObject& eob, VMFunction* callbac
|
|||
|
||||
pInst->pSequence = pSequence;
|
||||
pInst->nSeqID = nSeqID;
|
||||
pInst->nName = name;
|
||||
pInst->callback = callback;
|
||||
pInst->timeCounter = (short)pSequence->ticksPerFrame;
|
||||
pInst->frameIndex = 0;
|
||||
|
@ -561,19 +577,36 @@ void seqSpawn_(int nSeqID, int type, const EventObject& eob, VMFunction* callbac
|
|||
|
||||
void seqSpawn(int nSeqID, DBloodActor* actor, VMFunction* callback)
|
||||
{
|
||||
seqSpawn_(nSeqID, SS_SPRITE, EventObject(actor), callback);
|
||||
seqSpawn_(NAME_None, nSeqID, SS_SPRITE, EventObject(actor), callback);
|
||||
}
|
||||
|
||||
void seqSpawn(int nSeqID, int type, sectortype* sect, VMFunction* callback)
|
||||
{
|
||||
assert(type == SS_FLOOR || type == SS_CEILING);
|
||||
seqSpawn_(nSeqID, type, EventObject(sect), callback);
|
||||
seqSpawn_(NAME_None, nSeqID, type, EventObject(sect), callback);
|
||||
}
|
||||
|
||||
void seqSpawn(int nSeqID, int type, walltype* wal, VMFunction* callback)
|
||||
{
|
||||
assert(type == SS_WALL || type == SS_MASKED);
|
||||
seqSpawn_(nSeqID, type, EventObject(wal), callback);
|
||||
seqSpawn_(NAME_None, nSeqID, type, EventObject(wal), callback);
|
||||
}
|
||||
|
||||
void seqSpawn(FName name, int nSeqID, DBloodActor* actor, VMFunction* callback)
|
||||
{
|
||||
seqSpawn_(name, nSeqID, SS_SPRITE, EventObject(actor), callback);
|
||||
}
|
||||
|
||||
void seqSpawn(FName name, int nSeqID, int type, sectortype* sect, VMFunction* callback)
|
||||
{
|
||||
assert(type == SS_FLOOR || type == SS_CEILING);
|
||||
seqSpawn_(name, nSeqID, type, EventObject(sect), callback);
|
||||
}
|
||||
|
||||
void seqSpawn(FName name, int nSeqID, int type, walltype* wal, VMFunction* callback)
|
||||
{
|
||||
assert(type == SS_WALL || type == SS_MASKED);
|
||||
seqSpawn_(name, nSeqID, type, EventObject(wal), callback);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -701,6 +734,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SEQINST& w, SEQINS
|
|||
arc("type", w.type)
|
||||
("callback", w.callback)
|
||||
("seqid", w.nSeqID)
|
||||
("name", w.nName)
|
||||
("timecounter", w.timeCounter)
|
||||
("frameindex", w.frameIndex)
|
||||
("target", w.target);
|
||||
|
@ -715,7 +749,7 @@ void SerializeSequences(FSerializer& arc)
|
|||
arc("sequences", activeList.list);
|
||||
if (arc.isReading()) for (unsigned i = 0; i < activeList.list.Size(); i++)
|
||||
{
|
||||
activeList.list[i].pSequence = getSequence(activeList.list[i].nSeqID);
|
||||
activeList.list[i].pSequence = getSequence(activeList.list[i].nName, activeList.list[i].nSeqID);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,32 +79,37 @@ struct SEQINST
|
|||
EventObject target;
|
||||
int type;
|
||||
|
||||
int nSeqID;
|
||||
int nSeqID; // only one of these two may be set
|
||||
FName nName;
|
||||
VMFunction* callback;
|
||||
int16_t timeCounter;
|
||||
uint8_t frameIndex;
|
||||
void Update();
|
||||
};
|
||||
|
||||
inline int seqGetTile(SEQFRAME* pFrame)
|
||||
{
|
||||
return pFrame->tile + (pFrame->tile2 << 12);
|
||||
}
|
||||
|
||||
inline FTextureID seqGetTexture(SEQFRAME* pFrame)
|
||||
{
|
||||
return tileGetTextureID(pFrame->tile + (pFrame->tile2 << 12));
|
||||
}
|
||||
|
||||
int seqRegisterClient(void(*pClient)(int, int));
|
||||
void seqPrecacheId(int id, int palette);
|
||||
void seqPrecacheId(FName name, int id, int palette);
|
||||
|
||||
inline void seqPrecacheId(int id, int palette)
|
||||
{
|
||||
seqPrecacheId(NAME_None, id, palette);
|
||||
}
|
||||
|
||||
SEQINST* GetInstance(int a1, EventObject& a2);
|
||||
SEQINST* GetInstance(DBloodActor* actor);
|
||||
void UnlockInstance(SEQINST* pInst);
|
||||
|
||||
void seqSpawn(int a1, int ty, walltype* a2, VMFunction* a4 = nullptr);
|
||||
void seqSpawn(int a1, int ty, sectortype* a2, VMFunction* a4 = nullptr);
|
||||
void seqSpawn(int a1, DBloodActor* actor, VMFunction* a4 = nullptr);
|
||||
|
||||
void seqSpawn(FName name, int nSeqID, DBloodActor* actor, VMFunction* callback = nullptr);
|
||||
void seqSpawn(FName name, int nSeqID, int type, sectortype* sect, VMFunction* callback = nullptr);
|
||||
void seqSpawn(FName name, int nSeqID, int type, walltype* wal, VMFunction* callback = nullptr);
|
||||
|
||||
void seqKill(int a1, walltype* a2);
|
||||
void seqKill(int a1, sectortype* a2);
|
||||
void seqKill(DBloodActor* actor);
|
||||
|
@ -117,7 +122,7 @@ int seqGetID(int a1, sectortype* a2);
|
|||
int seqGetID(DBloodActor*);
|
||||
void seqProcess(int a1);
|
||||
|
||||
Seq* getSequence(int res_id);
|
||||
Seq* getSequence(FName res_name, int res_id);
|
||||
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -350,11 +350,11 @@ void OperateSprite(DBloodActor* actor, EVENT event)
|
|||
switch (event.cmd) {
|
||||
case kCmdOff:
|
||||
if (!SetSpriteState(actor, 0, initiator)) break;
|
||||
seqSpawn(40, actor);
|
||||
seqSpawn(NAME_None, 40, actor);
|
||||
break;
|
||||
case kCmdOn:
|
||||
if (!SetSpriteState(actor, 1, initiator)) break;
|
||||
seqSpawn(38, actor, AF(MGunOpenSeqCallback));
|
||||
seqSpawn(NAME_None, 38, actor, AF(MGunOpenSeqCallback));
|
||||
if (actor->xspr.data1 > 0)
|
||||
actor->xspr.data2 = actor->xspr.data1;
|
||||
break;
|
||||
|
@ -395,12 +395,12 @@ void OperateSprite(DBloodActor* actor, EVENT event)
|
|||
switch (event.cmd) {
|
||||
case kCmdOff:
|
||||
if (!SetSpriteState(actor, 0, initiator)) break;
|
||||
seqSpawn(40, actor);
|
||||
seqSpawn(NAME_None, 40, actor);
|
||||
sfxKill3DSound(actor, 0, -1);
|
||||
break;
|
||||
case kCmdOn:
|
||||
if (!SetSpriteState(actor, 1, initiator)) break;
|
||||
seqSpawn(38, actor);
|
||||
seqSpawn(NAME_None, 38, actor);
|
||||
sfxPlay3DSound(actor, 441, 0, 0);
|
||||
break;
|
||||
}
|
||||
|
@ -412,11 +412,11 @@ void OperateSprite(DBloodActor* actor, EVENT event)
|
|||
break;
|
||||
case kCmdOn:
|
||||
if (!SetSpriteState(actor, 1, initiator)) break;
|
||||
seqSpawn(37, actor);
|
||||
seqSpawn(NAME_None, 37, actor);
|
||||
break;
|
||||
default:
|
||||
SetSpriteState(actor, actor->xspr.state ^ 1, initiator);
|
||||
if (actor->xspr.state) seqSpawn(37, actor);
|
||||
if (actor->xspr.state) seqSpawn(NAME_None, 37, actor);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -2484,10 +2484,10 @@ void ActivateGenerator(DBloodActor* actor)
|
|||
FireballTrapSeqCallback(actor);
|
||||
break;
|
||||
case 1:
|
||||
seqSpawn(35, actor, AF(FireballTrapSeqCallback));
|
||||
seqSpawn(NAME_None, 35, actor, AF(FireballTrapSeqCallback));
|
||||
break;
|
||||
case 2:
|
||||
seqSpawn(36, actor, AF(FireballTrapSeqCallback));
|
||||
seqSpawn(NAME_None, 36, actor, AF(FireballTrapSeqCallback));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -2546,7 +2546,7 @@ void MGunFireSeqCallback(DBloodActor* actor)
|
|||
|
||||
void MGunOpenSeqCallback(DBloodActor* actor)
|
||||
{
|
||||
seqSpawn(39, actor, AF(MGunFireSeqCallback));
|
||||
seqSpawn(NAME_None, 39, actor, AF(MGunFireSeqCallback));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -362,7 +362,7 @@ DEFINE_ACTION_FUNCTION(DBloodActor, seqSpawnID) // will be changed later.
|
|||
PARAM_SELF_PROLOGUE(DBloodActor);
|
||||
PARAM_INT(seqid);
|
||||
PARAM_POINTER(cbid, VMFunction);
|
||||
seqSpawn(seqid, self, cbid);
|
||||
seqSpawn(NAME_None, seqid, self, cbid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1948,7 +1948,7 @@ void AltFireNapalm(int, DBloodPlayer* pPlayer)
|
|||
{
|
||||
missile->xspr.data4 = ClipHigh(pPlayer->ammoCount[4], 12);
|
||||
UseAmmo(pPlayer, 4, missile->xspr.data4);
|
||||
seqSpawn(22, missile);
|
||||
seqSpawn(NAME_None, 22, missile);
|
||||
actBurnSprite(pPlayer->GetActor(), missile, 600);
|
||||
evPostActor(missile, 0, AF(fxFlameLick));
|
||||
sfxPlay3DSound(missile, 480, 2, 0);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class BloodDudeBase : Bloodactor
|
||||
{
|
||||
meta Name seqStartName;
|
||||
meta int seqStartID;
|
||||
meta int starthealth;
|
||||
meta int eyeHeight;
|
||||
|
@ -23,6 +24,7 @@ class BloodDudeBase : Bloodactor
|
|||
meta Sound explodeSound;
|
||||
|
||||
property prefix: none;
|
||||
property seqStartName: seqStartName;
|
||||
property seqStartID: seqStartID;
|
||||
property health: startHealth;
|
||||
property mass: mass;
|
||||
|
|
Loading…
Reference in a new issue