From 6e0d61d13723ef765eadc40b202b0c1358c2a4b1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 16 Oct 2023 23:28:08 +0200 Subject: [PATCH] nnext fully integrated, everything compiles and links again. --- source/games/blood/src/ai.cpp | 2 +- source/games/blood/src/aicdud.cpp | 1 - source/games/blood/src/blood.cpp | 7 +++++++ source/games/blood/src/blood.h | 9 +++++++++ source/games/blood/src/callback.cpp | 1 - source/games/blood/src/mapstructs.h | 10 ++++++++++ source/games/blood/src/nnextcdud.cpp | 2 +- source/games/blood/src/nnextcdud.h | 1 + source/games/blood/src/nnexts.cpp | 14 +++++++------- source/games/blood/src/nnexts.h | 13 +------------ source/games/blood/src/view.h | 11 ++--------- 11 files changed, 39 insertions(+), 32 deletions(-) diff --git a/source/games/blood/src/ai.cpp b/source/games/blood/src/ai.cpp index b920e09f8..638bcfdaa 100644 --- a/source/games/blood/src/ai.cpp +++ b/source/games/blood/src/ai.cpp @@ -1758,7 +1758,7 @@ void aiInitSprite(DBloodActor* actor) actor->xspr.data3 = 0; // make dude follow the markers - bool uwater = spriteIsUnderwater(actor); + bool uwater = spriteIsUnderwater(actor, false); if (stateTimer > 0) { diff --git a/source/games/blood/src/aicdud.cpp b/source/games/blood/src/aicdud.cpp index bcd49f6e3..42f408cfb 100644 --- a/source/games/blood/src/aicdud.cpp +++ b/source/games/blood/src/aicdud.cpp @@ -1247,7 +1247,6 @@ void enterMorph(DBloodActor* pSpr) void thinkMorph(DBloodActor* pSpr) { - int nTarget; bool triggerOn, triggerOff; DCustomDude* pDude = cdudeGet(pSpr); diff --git a/source/games/blood/src/blood.cpp b/source/games/blood/src/blood.cpp index 34e976c92..77b47ee36 100644 --- a/source/games/blood/src/blood.cpp +++ b/source/games/blood/src/blood.cpp @@ -111,6 +111,13 @@ size_t DBloodActor::PropagateMark() return Super::PropagateMark(); } +void DBloodActor::OnDestroy() +{ + if (customDude) customDude->Destroy(); + customDude = nullptr; + Super::OnDestroy(); +} + static void markgcroots() { #ifdef NOONE_EXTENSIONS diff --git a/source/games/blood/src/blood.h b/source/games/blood/src/blood.h index 920195873..c8a6cf78c 100644 --- a/source/games/blood/src/blood.h +++ b/source/games/blood/src/blood.h @@ -391,4 +391,13 @@ struct GameInterface : public ::GameInterface void FinalizeSetup() override; }; +inline void viewBackupSpriteLoc(DBloodActor* actor) +{ + if (!actor->interpolated) + { + actor->backuploc(); + actor->interpolated = true; + } +} + END_BLD_NS diff --git a/source/games/blood/src/callback.cpp b/source/games/blood/src/callback.cpp index 3a83c6403..1c447248d 100644 --- a/source/games/blood/src/callback.cpp +++ b/source/games/blood/src/callback.cpp @@ -305,7 +305,6 @@ void Respawn(DBloodActor* actor) // 9 seqSpawn(getDudeInfo(nType + kDudeBase)->seqStartID, actor); break; case kDudeModernCustom: - seqSpawn(genDudeSeqStartId(actor), actor); break; } diff --git a/source/games/blood/src/mapstructs.h b/source/games/blood/src/mapstructs.h index 89599eaab..3a003a6d6 100644 --- a/source/games/blood/src/mapstructs.h +++ b/source/games/blood/src/mapstructs.h @@ -278,5 +278,15 @@ struct DUDEEXTRA int birthCounter; }; +struct SPRITEMASS { // sprite mass info for getSpriteMassBySize(); + int seqId; + FTextureID texid; // mainly needs for moving debris + DVector2 scale; + int16_t airVel; // mainly needs for moving debris + double clipDist; // mass multiplier + int mass; + int fraction; // mainly needs for moving debris +}; + END_BLD_NS diff --git a/source/games/blood/src/nnextcdud.cpp b/source/games/blood/src/nnextcdud.cpp index 1de7a57c3..e5efe602e 100644 --- a/source/games/blood/src/nnextcdud.cpp +++ b/source/games/blood/src/nnextcdud.cpp @@ -4373,7 +4373,7 @@ DBloodActor* cdudeSpawn(DBloodActor* pSource, DBloodActor* pSprite, double nDist // for kThingModernEnemyLifeLeech -void cdudeLeechOperate(DBloodActor* pSpr, XSPRITE* pXSpr) +void cdudeLeechOperate(DBloodActor* pSpr) { if (DBloodActor* pOwn = pSpr->ownerActor) { diff --git a/source/games/blood/src/nnextcdud.h b/source/games/blood/src/nnextcdud.h index e585a167e..0579b85d7 100644 --- a/source/games/blood/src/nnextcdud.h +++ b/source/games/blood/src/nnextcdud.h @@ -993,6 +993,7 @@ class CUSTOMDUDE_EFFECT else { nID -= kCdudeFXEffectBase; + DBloodActor* pFX; if ((pFX = gFX.fxSpawnActor((FX_ID)nID, pSpr->spr.sectp, pos)) != nullptr) Setup(pSpr, pFX, false); } diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index 1705ea877..dc32fa01a 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -477,7 +477,7 @@ int idListProcessPhysSprite(DBloodActor* actor) actor->norm_ang(); DAngle ang = actor->spr.Angles.Yaw; - if ((uwater = spriteIsUnderwater(actor)) == false) evKillActor(actor, AF(EnemyBubble)); + if ((uwater = spriteIsUnderwater(actor, false)) == false) evKillActor(actor, AF(EnemyBubble)); else if (Chance(0x1000 - mass)) { if (actor->vel.Z > 0x100) debrisBubble(actor); @@ -758,7 +758,8 @@ DBloodActor* nnExtFireMissile(DBloodActor* actor, double xyoff, double zoff, DVe VMCall(func, p, 2, nullptr, 0); } - actPropagateSpriteOwner(pShot, actor); + + pShot->SetOwner(actor); pShot->spr.cstat &= ~CSTAT_SPRITE_BLOCK; // projectiles don't even need this pShot->xspr.target = nullptr; @@ -2084,7 +2085,7 @@ void aiSetGenIdleState(DBloodActor* actor) switch (actor->GetType()) { case kDudeModernCustom: - aiGenDudeNewState(actor, &genIdle); + cdudeGet(actor)->NewState(kCdudeStateGenIdle); break; default: aiNewState(actor, &genIdle); @@ -4532,8 +4533,7 @@ bool aiFightUnitCanFly(DBloodActor* dude) bool aiFightIsMeleeUnit(DBloodActor* dude) { - if (dude->GetType() == kDudeModernCustom) return (dude->hasX() && dudeIsMelee(dude)); - else return (dude->IsDudeActor() && gDudeInfoExtra[dude->GetType() - kDudeBase].melee); + return (dude->IsDudeActor() && gDudeInfoExtra[dude->GetType() - kDudeBase].melee); } //--------------------------------------------------------------------------- @@ -6382,7 +6382,7 @@ void usePictureChanger(DBloodActor* sourceactor, int objType, sectortype* targSe void useCustomDudeSpawn(DBloodActor* pSource, DBloodActor* pActor) { - genDudeSpawn(pSource, pActor, pActor->clipdist * 0.5); + cdudeSpawn(pSource, pActor, pActor->clipdist * 2); } //--------------------------------------------------------------------------- @@ -6396,7 +6396,7 @@ void useDripGenerator(DBloodActor* pSource, DBloodActor* pActor) double top, bottom; GetActorExtents(pActor, &top, &bottom); auto pThing = actSpawnThing(pActor->sector(), DVector3(pActor->spr.pos.XY(), bottom), (pActor->GetType() == kGenDripWater) ? kThingDripWater : kThingDripBlood); - actPropagateSpriteOwner(pThing, pActor); + pThing->SetOwner(pActor); if (pSource->xspr.data4) pThing->vel.Z = pSource->xspr.data4 / 256.; } diff --git a/source/games/blood/src/nnexts.h b/source/games/blood/src/nnexts.h index 00f0acc59..d50b2c2f6 100644 --- a/source/games/blood/src/nnexts.h +++ b/source/games/blood/src/nnexts.h @@ -175,16 +175,6 @@ enum { // - STRUCTS ------------------------------------------------------------------ -struct SPRITEMASS { // sprite mass info for getSpriteMassBySize(); - int seqId; - FTextureID texid; // mainly needs for moving debris - DVector2 scale; - int16_t airVel; // mainly needs for moving debris - double clipDist; // mass multiplier - int mass; - int fraction; // mainly needs for moving debris -}; - struct EXPLOSION_EXTRA { uint8_t seq; @@ -252,7 +242,6 @@ extern const THINGINFO_EXTRA gThingInfoExtra[kThingMax]; extern const VECTORINFO_EXTRA gVectorInfoExtra[kVectorMax]; extern const MISSILEINFO_EXTRA gMissileInfoExtra[kMissileMax]; extern const EXPLOSION_EXTRA gExplodeExtra[kExplosionMax]; -extern const DUDEINFO_EXTRA gDudeInfoExtra[kDudeMax]; extern TRPLAYERCTRL gPlayerCtrl[kMaxPlayers]; extern AISTATE genPatrolStates[kPatrolStateSize]; @@ -410,7 +399,7 @@ bool dudeIsAlive(DBloodActor* actor); DBloodActor* nnExtFireMissile(DBloodActor* actor, double xyoff, double zoff, DVector3 dc, int nType); bool nnExtOffsetSprite(DBloodActor* pSpr, const DVector3& opos); DBloodActor* nnExtSpawnDude(DBloodActor* pSrc, int nType, const DVector3& pos); -bool spriteIsUnderwater(DBloodActor* actor, bool oldWay); +bool spriteIsUnderwater(DBloodActor* actor, bool oldWay = false); inline bool valueIsBetween(int val, int min, int max) diff --git a/source/games/blood/src/view.h b/source/games/blood/src/view.h index 19ef46d9e..99fcd8d87 100644 --- a/source/games/blood/src/view.h +++ b/source/games/blood/src/view.h @@ -30,6 +30,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. BEGIN_BLD_NS +class DBloodPlayer; + extern bool gPrediction; enum VIEW_EFFECT { @@ -106,14 +108,5 @@ inline void viewInterpolateWall(walltype* pWall) StartInterpolation(pWall, Interp_Wall_Y); } -inline void viewBackupSpriteLoc(DBloodActor* actor) -{ - if (!actor->interpolated) - { - actor->backuploc(); - actor->interpolated = true; - } -} - END_BLD_NS