mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-26 05:51:30 +00:00
allow Blood to compile with NOONE_EXTENSIONS disabled.
This commit is contained in:
parent
c4ded2f133
commit
495e236764
14 changed files with 189 additions and 145 deletions
|
@ -1,6 +1,13 @@
|
||||||
|
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
|
#undef NOONE_EXTENSIONS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
#ifndef NOONE_EXTENSIONS
|
#ifndef NOONE_EXTENSIONS
|
||||||
#define NOONE_EXTENSIONS
|
#define NOONE_EXTENSIONS
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
#include "src/actor.cpp"
|
#include "src/actor.cpp"
|
||||||
#include "src/ai.cpp"
|
#include "src/ai.cpp"
|
||||||
|
|
|
@ -3487,7 +3487,7 @@ void MoveDude(DBloodActor* actor)
|
||||||
trTriggerSprite(coll.actor(), kCmdSpriteTouch, actor);
|
trTriggerSprite(coll.actor(), kCmdSpriteTouch, actor);
|
||||||
#else
|
#else
|
||||||
if (hitActor->hasX() && hitActor->xspr.Touch && !hitActor->xspr.state && !hitActor->xspr.isTriggered)
|
if (hitActor->hasX() && hitActor->xspr.Touch && !hitActor->xspr.state && !hitActor->xspr.isTriggered)
|
||||||
trTriggerSprite(coll.actor, kCmdSpriteTouch);
|
trTriggerSprite(coll.actor(), kCmdSpriteTouch);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pDudeInfo->lockOut && hitActor->hasX() && hitActor->xspr.Push && !hitActor->xspr.key && !hitActor->xspr.DudeLockout && !hitActor->xspr.state && !hitActor->xspr.busy && !pPlayer)
|
if (pDudeInfo->lockOut && hitActor->hasX() && hitActor->xspr.Push && !hitActor->xspr.key && !hitActor->xspr.DudeLockout && !hitActor->xspr.state && !hitActor->xspr.busy && !pPlayer)
|
||||||
|
@ -4636,6 +4636,32 @@ static void actCheckTraps()
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool IsBurningDude(DBloodActor* actor)
|
||||||
|
{
|
||||||
|
if (actor == NULL) return false;
|
||||||
|
switch (actor->GetType())
|
||||||
|
{
|
||||||
|
case kDudeBurningInnocent:
|
||||||
|
case kDudeBurningCultist:
|
||||||
|
case kDudeBurningZombieAxe:
|
||||||
|
case kDudeBurningZombieButcher:
|
||||||
|
case kDudeBurningTinyCaleb:
|
||||||
|
case kDudeBurningBeast:
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
|
case kDudeModernCustomBurning:
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
static void actCheckDudes()
|
static void actCheckDudes()
|
||||||
{
|
{
|
||||||
BloodStatIterator it(kStatDude);
|
BloodStatIterator it(kStatDude);
|
||||||
|
|
|
@ -1612,8 +1612,8 @@ void aiProcessDudes(void)
|
||||||
actor->xspr.aiState->thinkFunc(actor);
|
actor->xspr.aiState->thinkFunc(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (actor->GetType()) {
|
|
||||||
#ifdef NOONE_EXTENSIONS
|
#ifdef NOONE_EXTENSIONS
|
||||||
|
switch (actor->GetType()) {
|
||||||
case kDudeModernCustom:
|
case kDudeModernCustom:
|
||||||
case kDudeModernCustomBurning: {
|
case kDudeModernCustomBurning: {
|
||||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra;
|
GENDUDEEXTRA* pExtra = &actor->genDudeExtra;
|
||||||
|
@ -1630,8 +1630,8 @@ void aiProcessDudes(void)
|
||||||
RecoilDude(actor);
|
RecoilDude(actor);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
|
#endif
|
||||||
if (actor->xspr.stateTimer == 0 && actor->xspr.aiState && actor->xspr.aiState->nextState) {
|
if (actor->xspr.stateTimer == 0 && actor->xspr.aiState && actor->xspr.aiState->nextState) {
|
||||||
if (actor->xspr.aiState->stateTicks > 0)
|
if (actor->xspr.aiState->stateTicks > 0)
|
||||||
aiNewState(actor, actor->xspr.aiState->nextState);
|
aiNewState(actor, actor->xspr.aiState->nextState);
|
||||||
|
@ -1644,8 +1644,10 @@ void aiProcessDudes(void)
|
||||||
actor->xspr.data3 = actor->cumulDamage;
|
actor->xspr.data3 = actor->cumulDamage;
|
||||||
RecoilDude(actor);
|
RecoilDude(actor);
|
||||||
}
|
}
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
it.Reset(kStatDude);
|
it.Reset(kStatDude);
|
||||||
|
@ -1936,4 +1938,5 @@ void aiInitSprite(DBloodActor* actor)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
|
@ -120,6 +120,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
||||||
auto pTTex = TexMan.GetGameTexture(pTSprite->spritetexture());
|
auto pTTex = TexMan.GetGameTexture(pTSprite->spritetexture());
|
||||||
switch (nViewEffect)
|
switch (nViewEffect)
|
||||||
{
|
{
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
case kViewEffectSpotProgress: {
|
case kViewEffectSpotProgress: {
|
||||||
int perc = (100 * owneractor->xspr.data3) / kMaxPatrolSpotValue;
|
int perc = (100 * owneractor->xspr.data3) / kMaxPatrolSpotValue;
|
||||||
int width = (94 * owneractor->xspr.data3) / kMaxPatrolSpotValue;
|
int width = (94 * owneractor->xspr.data3) / kMaxPatrolSpotValue;
|
||||||
|
@ -142,6 +143,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
||||||
pNSprite2->shade = -128;
|
pNSprite2->shade = -128;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
case kViewEffectAtom:
|
case kViewEffectAtom:
|
||||||
for (int i = 0; i < 16; i++)
|
for (int i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
|
@ -874,10 +876,12 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
if (gModernMap && owneractor->hasX()) { // add target spot indicator for patrol dudes
|
if (gModernMap && owneractor->hasX()) { // add target spot indicator for patrol dudes
|
||||||
if (owneractor->xspr.dudeFlag4 && aiInPatrolState(owneractor->xspr.aiState) && owneractor->xspr.data3 > 0 && owneractor->xspr.data3 <= kMaxPatrolSpotValue)
|
if (owneractor->xspr.dudeFlag4 && aiInPatrolState(owneractor->xspr.aiState) && owneractor->xspr.data3 > 0 && owneractor->xspr.data3 <= kMaxPatrolSpotValue)
|
||||||
viewAddEffect(tsprites, nTSprite, kViewEffectSpotProgress);
|
viewAddEffect(tsprites, nTSprite, kViewEffectSpotProgress);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kStatTraps: {
|
case kStatTraps: {
|
||||||
|
|
|
@ -57,6 +57,7 @@ BEGIN_BLD_NS
|
||||||
|
|
||||||
IMPLEMENT_CLASS(DBloodActor, false, true)
|
IMPLEMENT_CLASS(DBloodActor, false, true)
|
||||||
IMPLEMENT_POINTERS_START(DBloodActor)
|
IMPLEMENT_POINTERS_START(DBloodActor)
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
IMPLEMENT_POINTER(prevmarker)
|
IMPLEMENT_POINTER(prevmarker)
|
||||||
IMPLEMENT_POINTER(ownerActor)
|
IMPLEMENT_POINTER(ownerActor)
|
||||||
IMPLEMENT_POINTER(genDudeExtra.pLifeLeech)
|
IMPLEMENT_POINTER(genDudeExtra.pLifeLeech)
|
||||||
|
@ -67,6 +68,7 @@ IMPLEMENT_POINTER(genDudeExtra.slave[3])
|
||||||
IMPLEMENT_POINTER(genDudeExtra.slave[4])
|
IMPLEMENT_POINTER(genDudeExtra.slave[4])
|
||||||
IMPLEMENT_POINTER(genDudeExtra.slave[5])
|
IMPLEMENT_POINTER(genDudeExtra.slave[5])
|
||||||
IMPLEMENT_POINTER(genDudeExtra.slave[6])
|
IMPLEMENT_POINTER(genDudeExtra.slave[6])
|
||||||
|
#endif
|
||||||
IMPLEMENT_POINTER(xspr.burnSource)
|
IMPLEMENT_POINTER(xspr.burnSource)
|
||||||
IMPLEMENT_POINTER(xspr.target)
|
IMPLEMENT_POINTER(xspr.target)
|
||||||
IMPLEMENT_POINTERS_END
|
IMPLEMENT_POINTERS_END
|
||||||
|
@ -110,26 +112,30 @@ size_t DBloodActor::PropagateMark()
|
||||||
if (hit.hit.type == kHitSprite) GC::Mark(hit.hit.hitActor);
|
if (hit.hit.type == kHitSprite) GC::Mark(hit.hit.hitActor);
|
||||||
if (hit.ceilhit.type == kHitSprite) GC::Mark(hit.ceilhit.hitActor);
|
if (hit.ceilhit.type == kHitSprite) GC::Mark(hit.ceilhit.hitActor);
|
||||||
if (hit.florhit.type == kHitSprite) GC::Mark(hit.florhit.hitActor);
|
if (hit.florhit.type == kHitSprite) GC::Mark(hit.florhit.hitActor);
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
condition[0].Mark();
|
condition[0].Mark();
|
||||||
condition[1].Mark();
|
condition[1].Mark();
|
||||||
|
#endif
|
||||||
return Super::PropagateMark();
|
return Super::PropagateMark();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void markgcroots()
|
static void markgcroots()
|
||||||
{
|
{
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
GC::MarkArray(gProxySpritesList, gProxySpritesCount);
|
GC::MarkArray(gProxySpritesList, gProxySpritesCount);
|
||||||
GC::MarkArray(gSightSpritesList, gSightSpritesCount);
|
GC::MarkArray(gSightSpritesList, gSightSpritesCount);
|
||||||
GC::MarkArray(gPhysSpritesList, gPhysSpritesCount);
|
GC::MarkArray(gPhysSpritesList, gPhysSpritesCount);
|
||||||
GC::MarkArray(gImpactSpritesList, gImpactSpritesCount);
|
GC::MarkArray(gImpactSpritesList, gImpactSpritesCount);
|
||||||
MarkSprInSect();
|
|
||||||
for (auto& evobj : rxBucket)
|
|
||||||
{
|
|
||||||
evobj.Mark();
|
|
||||||
}
|
|
||||||
for (auto& cond : gConditions)
|
for (auto& cond : gConditions)
|
||||||
{
|
{
|
||||||
for (auto& obj : cond.objects) obj.obj.Mark();
|
for (auto& obj : cond.objects) obj.obj.Mark();
|
||||||
}
|
}
|
||||||
|
MarkSprInSect();
|
||||||
|
#endif
|
||||||
|
for (auto& evobj : rxBucket)
|
||||||
|
{
|
||||||
|
evobj.Mark();
|
||||||
|
}
|
||||||
MarkSeq();
|
MarkSeq();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
BEGIN_BLD_NS
|
BEGIN_BLD_NS
|
||||||
|
|
||||||
// ai callbacks
|
// ai callbacks
|
||||||
DEF_ANIMATOR(aiGenDudeMoveForward)
|
|
||||||
DEF_ANIMATOR(aiMoveDodge)
|
DEF_ANIMATOR(aiMoveDodge)
|
||||||
DEF_ANIMATOR(aiMoveForward)
|
DEF_ANIMATOR(aiMoveForward)
|
||||||
DEF_ANIMATOR(aiMoveTurn)
|
DEF_ANIMATOR(aiMoveTurn)
|
||||||
|
@ -117,7 +116,6 @@ DEF_ANIMATOR(entryEStand)
|
||||||
DEF_ANIMATOR(entryEZombie)
|
DEF_ANIMATOR(entryEZombie)
|
||||||
DEF_ANIMATOR(entryFStatue)
|
DEF_ANIMATOR(entryFStatue)
|
||||||
DEF_ANIMATOR(entrySStatue)
|
DEF_ANIMATOR(entrySStatue)
|
||||||
DEF_ANIMATOR(forcePunch)
|
|
||||||
DEF_ANIMATOR(gargMoveDodgeDown)
|
DEF_ANIMATOR(gargMoveDodgeDown)
|
||||||
DEF_ANIMATOR(gargMoveDodgeUp)
|
DEF_ANIMATOR(gargMoveDodgeUp)
|
||||||
DEF_ANIMATOR(gargMoveFly)
|
DEF_ANIMATOR(gargMoveFly)
|
||||||
|
@ -175,9 +173,6 @@ DEF_ANIMATOR(sub_72580)
|
||||||
DEF_ANIMATOR(sub_725A4)
|
DEF_ANIMATOR(sub_725A4)
|
||||||
DEF_ANIMATOR(sub_72850)
|
DEF_ANIMATOR(sub_72850)
|
||||||
DEF_ANIMATOR(tchernobogThinkChase)
|
DEF_ANIMATOR(tchernobogThinkChase)
|
||||||
DEF_ANIMATOR(unicultThinkChase)
|
|
||||||
DEF_ANIMATOR(unicultThinkGoto)
|
|
||||||
DEF_ANIMATOR(unicultThinkSearch)
|
|
||||||
DEF_ANIMATOR(zombaThinkChase)
|
DEF_ANIMATOR(zombaThinkChase)
|
||||||
DEF_ANIMATOR(zombaThinkGoto)
|
DEF_ANIMATOR(zombaThinkGoto)
|
||||||
DEF_ANIMATOR(zombaThinkPonder)
|
DEF_ANIMATOR(zombaThinkPonder)
|
||||||
|
@ -241,11 +236,6 @@ DEF_ANIMATOR(FireballTrapSeqCallback)
|
||||||
DEF_ANIMATOR(MGunFireSeqCallback)
|
DEF_ANIMATOR(MGunFireSeqCallback)
|
||||||
DEF_ANIMATOR(MGunOpenSeqCallback)
|
DEF_ANIMATOR(MGunOpenSeqCallback)
|
||||||
|
|
||||||
// nnext
|
|
||||||
DEF_ANIMATOR(genDudeAttack1)
|
|
||||||
DEF_ANIMATOR(punchCallback)
|
|
||||||
DEF_ANIMATOR(ThrowCallback1)
|
|
||||||
DEF_ANIMATOR(ThrowCallback2)
|
|
||||||
|
|
||||||
// event callbacks
|
// event callbacks
|
||||||
DEF_ANIMATOR(fxFlameLick) // 0
|
DEF_ANIMATOR(fxFlameLick) // 0
|
||||||
|
@ -269,10 +259,22 @@ DEF_ANIMATOR(fxPodBloodSpray) // 18
|
||||||
DEF_ANIMATOR(fxPodBloodSplat) // 19
|
DEF_ANIMATOR(fxPodBloodSplat) // 19
|
||||||
DEF_ANIMATOR(LeechStateTimer) // 20
|
DEF_ANIMATOR(LeechStateTimer) // 20
|
||||||
DEF_ANIMATOR(DropVoodooCb) // unused
|
DEF_ANIMATOR(DropVoodooCb) // unused
|
||||||
|
DEF_ANIMATOR(callbackMakeMissileBlocking) // 23
|
||||||
|
DEF_ANIMATOR(callbackMissileBurst)
|
||||||
|
|
||||||
DEF_ANIMATOR(callbackMakeMissileBlocking)
|
#ifdef NOONE_EXTENSIONS
|
||||||
|
DEF_ANIMATOR(forcePunch)
|
||||||
|
DEF_ANIMATOR(aiGenDudeMoveForward)
|
||||||
|
DEF_ANIMATOR(unicultThinkChase)
|
||||||
|
DEF_ANIMATOR(unicultThinkGoto)
|
||||||
|
DEF_ANIMATOR(unicultThinkSearch)
|
||||||
|
DEF_ANIMATOR(genDudeAttack1)
|
||||||
|
DEF_ANIMATOR(punchCallback)
|
||||||
|
DEF_ANIMATOR(ThrowCallback1)
|
||||||
|
DEF_ANIMATOR(ThrowCallback2)
|
||||||
DEF_ANIMATOR(callbackGenDudeUpdate)
|
DEF_ANIMATOR(callbackGenDudeUpdate)
|
||||||
DEF_ANIMATOR(callbackUniMissileBurst)
|
#endif
|
||||||
|
|
||||||
|
|
||||||
enum EFeatureFlags
|
enum EFeatureFlags
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,11 +29,13 @@ public:
|
||||||
TObjPtr<DBloodActor*> ownerActor; // was previously stored in the sprite's owner field.
|
TObjPtr<DBloodActor*> ownerActor; // was previously stored in the sprite's owner field.
|
||||||
|
|
||||||
// nnext stuff. For now not exported to scripting.
|
// nnext stuff. For now not exported to scripting.
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
SPRITEMASS spriteMass;
|
SPRITEMASS spriteMass;
|
||||||
GENDUDEEXTRA genDudeExtra;
|
GENDUDEEXTRA genDudeExtra;
|
||||||
TObjPtr<DBloodActor*> prevmarker; // needed by the nnext marker code. This originally hijacked targetX in XSPRITE
|
|
||||||
DVector3 basePoint;
|
|
||||||
EventObject condition[2];
|
EventObject condition[2];
|
||||||
|
TObjPtr<DBloodActor*> prevmarker; // needed by the nnext marker code. This originally hijacked targetX in XSPRITE
|
||||||
|
#endif
|
||||||
|
DVector3 basePoint;
|
||||||
int16_t dmgControl[kDamageMax]; // combination of the ones in DUDEINFO, THINGINFO and GENDUDEEXTRA, needs to be modifiable
|
int16_t dmgControl[kDamageMax]; // combination of the ones in DUDEINFO, THINGINFO and GENDUDEEXTRA, needs to be modifiable
|
||||||
|
|
||||||
// transient data (not written to savegame)
|
// transient data (not written to savegame)
|
||||||
|
|
|
@ -828,4 +828,64 @@ void DropVoodooCb(DBloodActor* actor) // unused
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void callbackMissileBurst(DBloodActor* actor) // 22
|
||||||
|
{
|
||||||
|
if (!actor) return;
|
||||||
|
if (actor->spr.statnum != kStatProjectile) return;
|
||||||
|
auto nAngVec = actor->vel.XY().Angle().ToVector();
|
||||||
|
double nRadius = FixedToFloat(0x55555);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
auto burstactor = actSpawnSprite(actor, kStatProjectile, actor->GetClass(), actor->GetType());
|
||||||
|
if (!burstactor) break;
|
||||||
|
|
||||||
|
burstactor->spr.shade = actor->spr.shade;
|
||||||
|
burstactor->spr.setspritetexture(actor->spr.spritetexture());
|
||||||
|
|
||||||
|
|
||||||
|
burstactor->spr.cstat = actor->spr.cstat;
|
||||||
|
if ((burstactor->spr.cstat & CSTAT_SPRITE_BLOCK))
|
||||||
|
{
|
||||||
|
burstactor->spr.cstat &= ~CSTAT_SPRITE_BLOCK; // we don't want missiles impact each other
|
||||||
|
evPostActor(burstactor, 100, AF(callbackMakeMissileBlocking)); // so set blocking flag a bit later
|
||||||
|
}
|
||||||
|
|
||||||
|
burstactor->spr.pal = actor->spr.pal;
|
||||||
|
burstactor->clipdist = actor->clipdist * 0.25;
|
||||||
|
burstactor->spr.flags = actor->spr.flags;
|
||||||
|
burstactor->spr.scale = actor->spr.scale;
|
||||||
|
burstactor->spr.scale *= 0.5;
|
||||||
|
|
||||||
|
burstactor->spr.Angles.Yaw = actor->spr.Angles.Yaw + DAngle::fromDeg(actor->FloatVar("angleofs"));
|
||||||
|
burstactor->SetOwner(actor);
|
||||||
|
|
||||||
|
IFVIRTUALPTRNAME(burstactor, NAME_BloodMissileBase, initMissile) // note: delete the name if this get scriptified.
|
||||||
|
{
|
||||||
|
VMValue p[] = { burstactor, actor };
|
||||||
|
VMCall(func, p, 2, nullptr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto spAngVec = DAngle::fromBam(i << 29).ToVector().Rotated90CW() * nRadius;
|
||||||
|
if (i & 1) spAngVec *= 0.5;
|
||||||
|
burstactor->vel += DVector3(DVector2(0, spAngVec.X).Rotated(nAngVec.X, nAngVec.Y), spAngVec.Y);
|
||||||
|
evPostActor(burstactor, 960, AF(RemoveActor));
|
||||||
|
}
|
||||||
|
evPostActor(actor, 0, AF(RemoveActor));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void callbackMakeMissileBlocking(DBloodActor* actor) // 23
|
||||||
|
{
|
||||||
|
if (!actor || actor->spr.statnum != kStatProjectile) return;
|
||||||
|
actor->spr.cstat |= CSTAT_SPRITE_BLOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
|
@ -143,7 +143,7 @@ void hudDraw(DBloodPlayer* pPlayer, sectortype* pSector, double bobx, double bob
|
||||||
pPlayer->qavTimer = pPlayer->weaponTimer = pPlayer->curWeapon = 0;
|
pPlayer->qavTimer = pPlayer->weaponTimer = pPlayer->curWeapon = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
WeaponDraw(pPlayer, nShade, cX, cY, nPalette);
|
WeaponDraw(pPlayer, nShade, cXY.X, cXY.Y, nPalette, angle);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (gViewPos == 0 && pPlayer->GetActor()->xspr.burnTime > 60)
|
if (gViewPos == 0 && pPlayer->GetActor()->xspr.burnTime > 60)
|
||||||
|
|
|
@ -324,6 +324,35 @@ static AISTATE* const allAIStates[] =
|
||||||
&tcherno13A9F0,
|
&tcherno13A9F0,
|
||||||
&tcherno13AA0C,
|
&tcherno13AA0C,
|
||||||
&tcherno13AA28,
|
&tcherno13AA28,
|
||||||
|
&zombieAIdle,
|
||||||
|
&zombieAChase,
|
||||||
|
&zombieAPonder,
|
||||||
|
&zombieAGoto,
|
||||||
|
&zombieAHack,
|
||||||
|
&zombieASearch,
|
||||||
|
&zombieARecoil,
|
||||||
|
&zombieATeslaRecoil,
|
||||||
|
&zombieARecoil2,
|
||||||
|
&zombieAStand,
|
||||||
|
&zombieEIdle,
|
||||||
|
&zombieEUp2,
|
||||||
|
&zombieEUp,
|
||||||
|
&zombie2Idle,
|
||||||
|
&zombie2Search,
|
||||||
|
&zombieSIdle,
|
||||||
|
&zombie13AC2C,
|
||||||
|
&zombieFIdle,
|
||||||
|
&zombieFChase,
|
||||||
|
&zombieFGoto,
|
||||||
|
&zombieFDodge,
|
||||||
|
&zombieFHack,
|
||||||
|
&zombieFPuke,
|
||||||
|
&zombieFThrow,
|
||||||
|
&zombieFSearch,
|
||||||
|
&zombieFRecoil,
|
||||||
|
&zombieFTeslaRecoil,
|
||||||
|
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
&genDudeIdleL,
|
&genDudeIdleL,
|
||||||
&genDudeIdleW,
|
&genDudeIdleW,
|
||||||
&genDudeSearchL,
|
&genDudeSearchL,
|
||||||
|
@ -359,33 +388,8 @@ static AISTATE* const allAIStates[] =
|
||||||
&genDudeThrow,
|
&genDudeThrow,
|
||||||
&genDudeThrow2,
|
&genDudeThrow2,
|
||||||
&genDudePunch,
|
&genDudePunch,
|
||||||
&zombieAIdle,
|
#endif
|
||||||
&zombieAChase,
|
|
||||||
&zombieAPonder,
|
|
||||||
&zombieAGoto,
|
|
||||||
&zombieAHack,
|
|
||||||
&zombieASearch,
|
|
||||||
&zombieARecoil,
|
|
||||||
&zombieATeslaRecoil,
|
|
||||||
&zombieARecoil2,
|
|
||||||
&zombieAStand,
|
|
||||||
&zombieEIdle,
|
|
||||||
&zombieEUp2,
|
|
||||||
&zombieEUp,
|
|
||||||
&zombie2Idle,
|
|
||||||
&zombie2Search,
|
|
||||||
&zombieSIdle,
|
|
||||||
&zombie13AC2C,
|
|
||||||
&zombieFIdle,
|
|
||||||
&zombieFChase,
|
|
||||||
&zombieFGoto,
|
|
||||||
&zombieFDodge,
|
|
||||||
&zombieFHack,
|
|
||||||
&zombieFPuke,
|
|
||||||
&zombieFThrow,
|
|
||||||
&zombieFSearch,
|
|
||||||
&zombieFRecoil,
|
|
||||||
&zombieFTeslaRecoil,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -409,11 +413,13 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, AISTATE*& w, AISTA
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
if (w >= genPatrolStates && w < genPatrolStates + kPatrolStateSize)
|
if (w >= genPatrolStates && w < genPatrolStates + kPatrolStateSize)
|
||||||
{
|
{
|
||||||
i = int(w - genPatrolStates) + 1000;
|
i = int(w - genPatrolStates) + 1000;
|
||||||
arc(keyname, i);
|
arc(keyname, i);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -422,10 +428,12 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, AISTATE*& w, AISTA
|
||||||
{
|
{
|
||||||
w = allAIStates[i];
|
w = allAIStates[i];
|
||||||
}
|
}
|
||||||
|
#ifdef NOONE_EXTENSIONS
|
||||||
else if (i >= 1000 && i < 1000 + kPatrolStateSize)
|
else if (i >= 1000 && i < 1000 + kPatrolStateSize)
|
||||||
{
|
{
|
||||||
w = genPatrolStates + (i - 1000);
|
w = genPatrolStates + (i - 1000);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
w = nullptr;
|
w = nullptr;
|
||||||
|
|
|
@ -6552,7 +6552,7 @@ void useUniMissileGen(DBloodActor* sourceactor, DBloodActor* actor)
|
||||||
|
|
||||||
// add bursting for missiles
|
// add bursting for missiles
|
||||||
if (missileactor->GetType() != kMissileFlareAlt && sourceactor->xspr.data4 > 0)
|
if (missileactor->GetType() != kMissileFlareAlt && sourceactor->xspr.data4 > 0)
|
||||||
evPostActor(missileactor, ClipHigh(sourceactor->xspr.data4, 500), AF(callbackUniMissileBurst));
|
evPostActor(missileactor, ClipHigh(sourceactor->xspr.data4, 500), AF(callbackMissileBurst));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7439,30 +7439,6 @@ DBloodPlayer* getPlayerById(int id)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool IsBurningDude(DBloodActor* actor)
|
|
||||||
{
|
|
||||||
if (actor == NULL) return false;
|
|
||||||
switch (actor->GetType())
|
|
||||||
{
|
|
||||||
case kDudeBurningInnocent:
|
|
||||||
case kDudeBurningCultist:
|
|
||||||
case kDudeBurningZombieAxe:
|
|
||||||
case kDudeBurningZombieButcher:
|
|
||||||
case kDudeBurningTinyCaleb:
|
|
||||||
case kDudeBurningBeast:
|
|
||||||
case kDudeModernCustomBurning:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsKillableDude(DBloodActor* actor)
|
bool IsKillableDude(DBloodActor* actor)
|
||||||
{
|
{
|
||||||
switch (actor->GetType())
|
switch (actor->GetType())
|
||||||
|
@ -9163,58 +9139,6 @@ void levelEndLevelCustom(int nLevel)
|
||||||
gNextLevel = FindMapByIndex(currentLevel->cluster, nLevel + 1);
|
gNextLevel = FindMapByIndex(currentLevel->cluster, nLevel + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void callbackUniMissileBurst(DBloodActor* actor) // 22
|
|
||||||
{
|
|
||||||
if (!actor) return;
|
|
||||||
if (actor->spr.statnum != kStatProjectile) return;
|
|
||||||
auto nAngVec = actor->vel.XY().Angle().ToVector();
|
|
||||||
double nRadius = FixedToFloat(0x55555);
|
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++)
|
|
||||||
{
|
|
||||||
auto burstactor = actSpawnSprite(actor, kStatProjectile, actor->GetClass(), actor->GetType());
|
|
||||||
if (!burstactor) break;
|
|
||||||
|
|
||||||
burstactor->spr.shade = actor->spr.shade;
|
|
||||||
burstactor->spr.setspritetexture(actor->spr.spritetexture());
|
|
||||||
|
|
||||||
|
|
||||||
burstactor->spr.cstat = actor->spr.cstat;
|
|
||||||
if ((burstactor->spr.cstat & CSTAT_SPRITE_BLOCK))
|
|
||||||
{
|
|
||||||
burstactor->spr.cstat &= ~CSTAT_SPRITE_BLOCK; // we don't want missiles impact each other
|
|
||||||
evPostActor(burstactor, 100, AF(callbackMakeMissileBlocking)); // so set blocking flag a bit later
|
|
||||||
}
|
|
||||||
|
|
||||||
burstactor->spr.pal = actor->spr.pal;
|
|
||||||
burstactor->clipdist = actor->clipdist * 0.25;
|
|
||||||
burstactor->spr.flags = actor->spr.flags;
|
|
||||||
burstactor->spr.scale = actor->spr.scale;
|
|
||||||
burstactor->spr.scale *= 0.5;
|
|
||||||
|
|
||||||
burstactor->spr.Angles.Yaw = actor->spr.Angles.Yaw + DAngle::fromDeg(actor->FloatVar("angleofs"));
|
|
||||||
burstactor->SetOwner(actor);
|
|
||||||
|
|
||||||
IFVIRTUALPTRNAME(burstactor, NAME_BloodMissileBase, initMissile) // note: delete the name if this get scriptified.
|
|
||||||
{
|
|
||||||
VMValue p[] = { burstactor, actor };
|
|
||||||
VMCall(func, p, 2, nullptr, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto spAngVec = DAngle::fromBam(i << 29).ToVector().Rotated90CW() * nRadius;
|
|
||||||
if (i & 1) spAngVec *= 0.5;
|
|
||||||
burstactor->vel += DVector3(DVector2(0, spAngVec.X).Rotated(nAngVec.X, nAngVec.Y), spAngVec.Y);
|
|
||||||
evPostActor(burstactor, 960, AF(RemoveActor));
|
|
||||||
}
|
|
||||||
evPostActor(actor, 0, AF(RemoveActor));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
|
@ -9222,12 +9146,6 @@ void callbackUniMissileBurst(DBloodActor* actor) // 22
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void callbackMakeMissileBlocking(DBloodActor* actor) // 23
|
|
||||||
{
|
|
||||||
if (!actor || actor->spr.statnum != kStatProjectile) return;
|
|
||||||
actor->spr.cstat |= CSTAT_SPRITE_BLOCK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void callbackGenDudeUpdate(DBloodActor* actor) // 24
|
void callbackGenDudeUpdate(DBloodActor* actor) // 24
|
||||||
{
|
{
|
||||||
if (actor)
|
if (actor)
|
||||||
|
|
|
@ -351,7 +351,7 @@ void playerQavScenePlay(DBloodPlayer* pPlayer);
|
||||||
void playerQavSceneDraw(DBloodPlayer* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle);
|
void playerQavSceneDraw(DBloodPlayer* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle);
|
||||||
void playerQavSceneReset(DBloodPlayer* pPlayer);
|
void playerQavSceneReset(DBloodPlayer* pPlayer);
|
||||||
// ------------------------------------------------------------------------- //
|
// ------------------------------------------------------------------------- //
|
||||||
void callbackUniMissileBurst(DBloodActor* actor);
|
void callbackMissileBurst(DBloodActor* actor);
|
||||||
void callbackMakeMissileBlocking(DBloodActor* actor);
|
void callbackMakeMissileBlocking(DBloodActor* actor);
|
||||||
void callbackGenDudeUpdate(DBloodActor* actor);
|
void callbackGenDudeUpdate(DBloodActor* actor);
|
||||||
// ------------------------------------------------------------------------- //
|
// ------------------------------------------------------------------------- //
|
||||||
|
@ -423,7 +423,6 @@ bool isMovableSector(int nType);
|
||||||
bool isMovableSector(sectortype* pSect);
|
bool isMovableSector(sectortype* pSect);
|
||||||
void killEffectGenCallbacks(DBloodActor* actor);
|
void killEffectGenCallbacks(DBloodActor* actor);
|
||||||
bool xsprIsFine(DBloodActor* pSpr);
|
bool xsprIsFine(DBloodActor* pSpr);
|
||||||
#endif
|
|
||||||
|
|
||||||
inline bool valueIsBetween(int val, int min, int max)
|
inline bool valueIsBetween(int val, int min, int max)
|
||||||
{
|
{
|
||||||
|
@ -437,3 +436,4 @@ inline bool valueIsBetween(int val, int min, int max)
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2208,7 +2208,7 @@ void trProcessBusy(void)
|
||||||
if (!gModernMap || !gBusy[i].sect->xs().pauseMotion) nStatus = gBusyProc[gBusy[i].type](gBusy[i].sect, gBusy[i].busy, nullptr);
|
if (!gModernMap || !gBusy[i].sect->xs().pauseMotion) nStatus = gBusyProc[gBusy[i].type](gBusy[i].sect, gBusy[i].busy, nullptr);
|
||||||
else nStatus = 3; // allow to pause/continue motion for sectors any time by sending special command
|
else nStatus = 3; // allow to pause/continue motion for sectors any time by sending special command
|
||||||
#else
|
#else
|
||||||
nStatus = gBusyProc[gBusy[i].type](gBusy[i].at0, gBusy[i].at8);
|
nStatus = gBusyProc[gBusy[i].type](gBusy[i].sect, gBusy[i].busy, nullptr);
|
||||||
#endif
|
#endif
|
||||||
switch (nStatus) {
|
switch (nStatus) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|
|
@ -119,9 +119,12 @@ class BloodActor : CoreActor native
|
||||||
kStatFree = 1024,
|
kStatFree = 1024,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
states
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// all callbacks, this is to allow using VM functions for all of them
|
// all callbacks, this is to allow using VM functions for all of them
|
||||||
native void aiGenDudeMoveForward();
|
|
||||||
native void aiMoveDodge();
|
native void aiMoveDodge();
|
||||||
native void aiMoveForward();
|
native void aiMoveForward();
|
||||||
native void aiMoveTurn();
|
native void aiMoveTurn();
|
||||||
|
@ -177,7 +180,6 @@ native void entryEStand();
|
||||||
native void entryEZombie();
|
native void entryEZombie();
|
||||||
native void entryFStatue();
|
native void entryFStatue();
|
||||||
native void entrySStatue();
|
native void entrySStatue();
|
||||||
native void forcePunch();
|
|
||||||
native void gargMoveDodgeDown();
|
native void gargMoveDodgeDown();
|
||||||
native void gargMoveDodgeUp();
|
native void gargMoveDodgeUp();
|
||||||
native void gargMoveFly();
|
native void gargMoveFly();
|
||||||
|
@ -235,9 +237,6 @@ native void sub_72580();
|
||||||
native void sub_725A4();
|
native void sub_725A4();
|
||||||
native void sub_72850();
|
native void sub_72850();
|
||||||
native void tchernobogThinkChase();
|
native void tchernobogThinkChase();
|
||||||
native void unicultThinkChase();
|
|
||||||
native void unicultThinkGoto();
|
|
||||||
native void unicultThinkSearch();
|
|
||||||
native void zombaThinkChase();
|
native void zombaThinkChase();
|
||||||
native void zombaThinkGoto();
|
native void zombaThinkGoto();
|
||||||
native void zombaThinkPonder();
|
native void zombaThinkPonder();
|
||||||
|
@ -289,10 +288,6 @@ native void SpidBirthSeqCallback();
|
||||||
native void tchernobogFire();
|
native void tchernobogFire();
|
||||||
native void tchernobogBurnSeqCallback();
|
native void tchernobogBurnSeqCallback();
|
||||||
native void tchernobogBurnSeqCallback2();
|
native void tchernobogBurnSeqCallback2();
|
||||||
native void genDudeAttack1();
|
|
||||||
native void punchCallback();
|
|
||||||
native void ThrowCallback1();
|
|
||||||
native void ThrowCallback2();
|
|
||||||
native void HackSeqCallback();
|
native void HackSeqCallback();
|
||||||
native void StandSeqCallback();
|
native void StandSeqCallback();
|
||||||
native void zombfHackSeqCallback();
|
native void zombfHackSeqCallback();
|
||||||
|
@ -324,6 +319,19 @@ native void fxPodBloodSpray(); // 18
|
||||||
native void fxPodBloodSplat(); // 19
|
native void fxPodBloodSplat(); // 19
|
||||||
native void LeechStateTimer(); // 20
|
native void LeechStateTimer(); // 20
|
||||||
native void DropVoodooCb(); // unused
|
native void DropVoodooCb(); // unused
|
||||||
|
native void callbackMakeMissileBlocking(); // 23
|
||||||
|
native void callbackMissileBurst();
|
||||||
|
|
||||||
|
|
||||||
|
//native void unicultThinkChase();
|
||||||
|
//native void unicultThinkGoto();
|
||||||
|
//native void unicultThinkSearch();
|
||||||
|
//native void forcePunch();
|
||||||
|
//native void aiGenDudeMoveForward();
|
||||||
|
//native void genDudeAttack1();
|
||||||
|
//native void punchCallback();
|
||||||
|
//native void ThrowCallback1();
|
||||||
|
//native void ThrowCallback2();
|
||||||
|
|
||||||
native double dudeSlope;
|
native double dudeSlope;
|
||||||
native readonly bool hasx;
|
native readonly bool hasx;
|
||||||
|
|
Loading…
Reference in a new issue