nnext fully integrated, everything compiles and links again.

This commit is contained in:
Christoph Oelckers 2023-10-16 23:28:08 +02:00
parent c17ccd62e6
commit 6e0d61d137
11 changed files with 39 additions and 32 deletions

View file

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

View file

@ -1247,7 +1247,6 @@ void enterMorph(DBloodActor* pSpr)
void thinkMorph(DBloodActor* pSpr)
{
int nTarget;
bool triggerOn, triggerOff;
DCustomDude* pDude = cdudeGet(pSpr);

View file

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

View file

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

View file

@ -305,7 +305,6 @@ void Respawn(DBloodActor* actor) // 9
seqSpawn(getDudeInfo(nType + kDudeBase)->seqStartID, actor);
break;
case kDudeModernCustom:
seqSpawn(genDudeSeqStartId(actor), actor);
break;
}

View file

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

View file

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

View file

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

View file

@ -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.;
}

View file

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

View file

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