From 04a380ce14abe3707691fc2fa85edf124d30f54e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 23 Jan 2022 19:03:14 +0100 Subject: [PATCH] - added script exports for DCoreActor's member variables. --- source/build/src/mdsprite.cpp | 2 +- source/build/src/polymost.cpp | 8 ++--- source/core/actorinfo.h | 25 ++++++++++++++ source/core/actorlist.cpp | 37 +++++++++++++++++++++ source/core/maphack.cpp | 10 +++--- source/core/maptypes.h | 2 +- source/core/rendering/scene/hw_drawinfo.cpp | 6 ++-- source/core/savegamehelp.cpp | 2 +- source/games/blood/src/animatesprite.cpp | 12 +++---- source/games/sw/src/jsector.cpp | 4 +-- wadsrc/static/zscript/coreactor.zs | 36 +++++++++++++++++++- 11 files changed, 120 insertions(+), 24 deletions(-) diff --git a/source/build/src/mdsprite.cpp b/source/build/src/mdsprite.cpp index 76c205f94cb..6699091782c 100644 --- a/source/build/src/mdsprite.cpp +++ b/source/build/src/mdsprite.cpp @@ -1544,7 +1544,7 @@ void updateModelInterpolation() TSpriteIterator it; while (auto actor = it.Next()) { - if ((mdpause && actor->sprext.mdanimtims) || (actor->sprext.flags & SPREXT_NOMDANIM)) + if ((mdpause && actor->sprext.mdanimtims) || (actor->sprext.renderflags & SPREXT_NOMDANIM)) actor->sprext.mdanimtims += mdtims - omdtims; } } diff --git a/source/build/src/polymost.cpp b/source/build/src/polymost.cpp index f260bd2ad20..4cee1c76e5a 100644 --- a/source/build/src/polymost.cpp +++ b/source/build/src/polymost.cpp @@ -2721,7 +2721,7 @@ void polymost_drawsprite(int32_t snum) sec = tspr->sectp; - while (!(actor->sprext.flags & SPREXT_NOTMD)) + while (!(actor->sprext.renderflags & SPREXT_NOTMD)) { if (hw_models && tile2model[Ptile2tile(tspr->picnum, tspr->pal)].modelid >= 0 && tile2model[Ptile2tile(tspr->picnum, tspr->pal)].framenum >= 0) @@ -2753,12 +2753,12 @@ void polymost_drawsprite(int32_t snum) vec3_t pos = tspr->pos; - if (actor->sprext.flags & SPREXT_AWAY1) + if (actor->sprext.renderflags & SPREXT_AWAY1) { pos.X += bcos(tspr->ang, -13); pos.Y += bsin(tspr->ang, -13); } - else if (actor->sprext.flags & SPREXT_AWAY2) + else if (actor->sprext.renderflags & SPREXT_AWAY2) { pos.X -= bcos(tspr->ang, -13); pos.Y -= bsin(tspr->ang, -13); @@ -3479,7 +3479,7 @@ static void sortsprites(int const start, int const end) static bool spriteIsModelOrVoxel(const tspritetype* tspr) { - if (!tspr->ownerActor || tspr->ownerActor->sprext.flags & SPREXT_NOTMD) + if (!tspr->ownerActor || tspr->ownerActor->sprext.renderflags & SPREXT_NOTMD) return false; if (hw_models) diff --git a/source/core/actorinfo.h b/source/core/actorinfo.h index c0e38c32d0b..eaf58a47018 100644 --- a/source/core/actorinfo.h +++ b/source/core/actorinfo.h @@ -10,12 +10,37 @@ class FScanner; class FInternalLightAssociation; +enum EDefaultFlags +{ + DEFF_PICNUM = 1, + DEFF_STATNUM = 2, + DEFF_ANG = 4, + DEFF_XVEL = 8, + DEFF_YVEL = 16, + DEFF_ZVEL = 32, + DEFF_HITAG = 64, + DEFF_LOTAG = 128, + DEFF_EXTRA = 256, + DEFF_DETAIL = 512, + DEFF_SHADE = 1024, + DEFF_PAL = 2048, + DEFF_CLIPDIST = 8192, + DEFF_BLEND = 16384, + DEFF_XREPEAT = 32768, + DEFF_YREPEAT = 65536, + DEFF_XOFFSET = 0x20000, + DEFF_YOFFSET = 0x40000, + DEFF_OWNER = 0x80000, +}; + struct FActorInfo { TArray LightAssociations; PClassActor *Replacement = nullptr; PClassActor *Replacee = nullptr; int TypeNum = -1; + int DefaultFlags = 0; + int DefaultCstat = 0; FActorInfo() = default; FActorInfo(const FActorInfo & other) = delete; diff --git a/source/core/actorlist.cpp b/source/core/actorlist.cpp index 358a7b28f55..a27ec5f4981 100644 --- a/source/core/actorlist.cpp +++ b/source/core/actorlist.cpp @@ -36,6 +36,7 @@ #include "coreactor.h" #include "gamefuncs.h" #include "raze_sound.h" +#include "vm.h" // Doubly linked ring list of Actors @@ -474,3 +475,39 @@ size_t DCoreActor::PropagateMark() return Super::PropagateMark(); } + +DEFINE_FIELD_NAMED(DCoreActor, spr.sectp, sector) +DEFINE_FIELD_NAMED(DCoreActor, spr.cstat, cstat) +DEFINE_FIELD_NAMED(DCoreActor, spr.cstat2, cstat2) +DEFINE_FIELD_NAMED(DCoreActor, spr.picnum, picnum) +DEFINE_FIELD_NAMED(DCoreActor, spr.statnum, statnum) +DEFINE_FIELD_NAMED(DCoreActor, spr.ang, ang) +DEFINE_FIELD_NAMED(DCoreActor, spr.xvel, xvel) +DEFINE_FIELD_NAMED(DCoreActor, spr.yvel, yvel) +DEFINE_FIELD_NAMED(DCoreActor, spr.zvel, zvel) +DEFINE_FIELD_NAMED(DCoreActor, spr.inittype, inittype) +DEFINE_FIELD_NAMED(DCoreActor, spr.hitag, hitag) +DEFINE_FIELD_NAMED(DCoreActor, spr.lotag, lotag) +DEFINE_FIELD_NAMED(DCoreActor, spr.type, type) +DEFINE_FIELD_NAMED(DCoreActor, spr.flags, flags) // need to be careful with this! +DEFINE_FIELD_NAMED(DCoreActor, spr.extra, extra) +DEFINE_FIELD_NAMED(DCoreActor, spr.detail, detail) +DEFINE_FIELD_NAMED(DCoreActor, spr.shade, shade) +DEFINE_FIELD_NAMED(DCoreActor, spr.pal, pal) +DEFINE_FIELD_NAMED(DCoreActor, spr.clipdist, clipdist) +DEFINE_FIELD_NAMED(DCoreActor, spr.blend, blend) +DEFINE_FIELD_NAMED(DCoreActor, spr.xrepeat, xrepeat) +DEFINE_FIELD_NAMED(DCoreActor, spr.yrepeat, yrepeat) +DEFINE_FIELD_NAMED(DCoreActor, spr.xoffset, xoffset) +DEFINE_FIELD_NAMED(DCoreActor, spr.yoffset, yoffset) +DEFINE_FIELD_NAMED(DCoreActor, spr.owner, owner) +DEFINE_FIELD_NAMED(DCoreActor, sprext.mdanimtims, mdanimtims) +DEFINE_FIELD_NAMED(DCoreActor, sprext.mdanimcur, mdanimcur) +DEFINE_FIELD_NAMED(DCoreActor, sprext.angoff, angoff) +DEFINE_FIELD_NAMED(DCoreActor, sprext.pitch, pitch) +DEFINE_FIELD_NAMED(DCoreActor, sprext.roll, roll) +DEFINE_FIELD_NAMED(DCoreActor, sprext.pivot_offset, pivot_offset) +DEFINE_FIELD_NAMED(DCoreActor, sprext.renderflags, renderflags) +DEFINE_FIELD_NAMED(DCoreActor, sprext.alpha, alpha) +DEFINE_FIELD_NAMED(DCoreActor, time, spawnindex) + diff --git a/source/core/maphack.cpp b/source/core/maphack.cpp index c78a85afd50..b5b2058a92e 100644 --- a/source/core/maphack.cpp +++ b/source/core/maphack.cpp @@ -258,12 +258,12 @@ static int32_t LoadMapHack(const char *filename, SpawnSpriteDef& sprites) else if (sc.Compare("notmd") || sc.Compare("notmd2") || sc.Compare("notmd3")) { if (validateSprite()) - sprites.sprext[currentsprite].flags |= SPREXT_NOTMD; + sprites.sprext[currentsprite].renderflags |= SPREXT_NOTMD; } else if (sc.Compare("nomdanim") || sc.Compare("nomd2anim") || sc.Compare("nomd3anim")) { if (validateSprite()) - sprites.sprext[currentsprite].flags |= SPREXT_NOMDANIM; + sprites.sprext[currentsprite].renderflags |= SPREXT_NOMDANIM; } else if (sc.Compare("pitch")) { @@ -308,12 +308,12 @@ static int32_t LoadMapHack(const char *filename, SpawnSpriteDef& sprites) else if (sc.Compare("away1")) { if (validateSprite()) - sprites.sprext[currentsprite].flags |= SPREXT_AWAY1; + sprites.sprext[currentsprite].renderflags |= SPREXT_AWAY1; } else if (sc.Compare("away2")) { if (validateSprite()) - sprites.sprext[currentsprite].flags |= SPREXT_AWAY2; + sprites.sprext[currentsprite].renderflags |= SPREXT_AWAY2; } else if (sc.Compare("mhkreset")) { @@ -321,7 +321,7 @@ static int32_t LoadMapHack(const char *filename, SpawnSpriteDef& sprites) { auto& sx = sprites.sprext[currentsprite]; sx.angoff = 0; - sx.flags &= ~(SPREXT_NOTMD | SPREXT_NOMDANIM | SPREXT_AWAY1 | SPREXT_AWAY2); + sx.renderflags &= ~(SPREXT_NOTMD | SPREXT_NOMDANIM | SPREXT_AWAY1 | SPREXT_AWAY2); sx.pitch = 0; sx.roll = 0; sx.pivot_offset = {}; diff --git a/source/core/maptypes.h b/source/core/maptypes.h index faf664fd15f..6dad82930d3 100644 --- a/source/core/maptypes.h +++ b/source/core/maptypes.h @@ -618,7 +618,7 @@ struct spriteext_t int16_t mdanimcur; int16_t angoff, pitch, roll; vec3_t pivot_offset, position_offset; - uint8_t flags; + uint8_t renderflags; float alpha; }; diff --git a/source/core/rendering/scene/hw_drawinfo.cpp b/source/core/rendering/scene/hw_drawinfo.cpp index e44dcb90043..abb467cbffa 100644 --- a/source/core/rendering/scene/hw_drawinfo.cpp +++ b/source/core/rendering/scene/hw_drawinfo.cpp @@ -288,7 +288,7 @@ void HWDrawInfo::DispatchSprites() tspr->picnum = tilenum; gotpic.Set(tilenum); - if (!(actor->sprext.flags & SPREXT_NOTMD)) + if (!(actor->sprext.renderflags & SPREXT_NOTMD)) { int pt = Ptile2tile(tilenum, tspr->pal); if (hw_models && tile2model[pt].modelid >= 0 && tile2model[pt].framenum >= 0) @@ -315,12 +315,12 @@ void HWDrawInfo::DispatchSprites() } } - if (actor->sprext.flags & SPREXT_AWAY1) + if (actor->sprext.renderflags & SPREXT_AWAY1) { tspr->pos.X += bcos(tspr->ang, -13); tspr->pos.Y += bsin(tspr->ang, -13); } - else if (actor->sprext.flags & SPREXT_AWAY2) + else if (actor->sprext.renderflags & SPREXT_AWAY2) { tspr->pos.X -= bcos(tspr->ang, -13); tspr->pos.Y -= bsin(tspr->ang, -13); diff --git a/source/core/savegamehelp.cpp b/source/core/savegamehelp.cpp index 2f27384e30e..eaa57d65361 100644 --- a/source/core/savegamehelp.cpp +++ b/source/core/savegamehelp.cpp @@ -494,7 +494,7 @@ FSerializer& Serialize(FSerializer& arc, const char* key, spriteext_t& c, sprite ("roll", c.roll, def->roll) ("pivot_offset", c.pivot_offset, def->pivot_offset) ("position_offset", c.position_offset, def->position_offset) - ("flags", c.flags, def->flags) + ("flags", c.renderflags, def->renderflags) ("alpha", c.alpha, def->alpha) .EndObject(); } diff --git a/source/games/blood/src/animatesprite.cpp b/source/games/blood/src/animatesprite.cpp index f5a5b4e2abd..86f6874854d 100644 --- a/source/games/blood/src/animatesprite.cpp +++ b/source/games/blood/src/animatesprite.cpp @@ -597,7 +597,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in break; case 1: { - if (tilehasmodelorvoxel(pTSprite->picnum, pTSprite->pal) && !(owneractor->sprext.flags & SPREXT_NOTMD)) + if (tilehasmodelorvoxel(pTSprite->picnum, pTSprite->pal) && !(owneractor->sprext.renderflags & SPREXT_NOTMD)) { pTSprite->cstat &= ~CSTAT_SPRITE_XFLIP; break; @@ -619,7 +619,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in } case 2: { - if (tilehasmodelorvoxel(pTSprite->picnum, pTSprite->pal) && !(owneractor->sprext.flags & SPREXT_NOTMD)) + if (tilehasmodelorvoxel(pTSprite->picnum, pTSprite->pal) && !(owneractor->sprext.renderflags & SPREXT_NOTMD)) { pTSprite->cstat &= ~CSTAT_SPRITE_XFLIP; break; @@ -649,11 +649,11 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in case 6: case 7: { - if (hw_models && md_tilehasmodel(pTSprite->picnum, pTSprite->pal) >= 0 && !(owneractor->sprext.flags & SPREXT_NOTMD)) + if (hw_models && md_tilehasmodel(pTSprite->picnum, pTSprite->pal) >= 0 && !(owneractor->sprext.renderflags & SPREXT_NOTMD)) break; // Can be overridden by def script - if (r_voxels && tiletovox[pTSprite->picnum] == -1 && voxelIndex[pTSprite->picnum] != -1 && !(owneractor->sprext.flags & SPREXT_NOTMD)) + if (r_voxels && tiletovox[pTSprite->picnum] == -1 && voxelIndex[pTSprite->picnum] != -1 && !(owneractor->sprext.renderflags & SPREXT_NOTMD)) { if ((pTSprite->flags & kHitagRespawn) == 0) { @@ -676,7 +676,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in nAnim--; } - if ((pTSprite->cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != CSTAT_SPRITE_ALIGNMENT_SLAB && r_voxels && !(owneractor->sprext.flags & SPREXT_NOTMD)) + if ((pTSprite->cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != CSTAT_SPRITE_ALIGNMENT_SLAB && r_voxels && !(owneractor->sprext.renderflags & SPREXT_NOTMD)) { int const nRootTile = pTSprite->picnum; int nAnimTile = pTSprite->picnum + qanimateoffs(pTSprite->picnum, 32768 + (pTSprite->ownerActor->GetIndex() & 16383)); @@ -695,7 +695,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in pTSprite->clipdist |= TSPR_MDLROTATE; // per-sprite rotation setting. } - if ((pTSprite->cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != CSTAT_SPRITE_ALIGNMENT_SLAB && hw_models && !(owneractor->sprext.flags & SPREXT_NOTMD)) + if ((pTSprite->cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != CSTAT_SPRITE_ALIGNMENT_SLAB && hw_models && !(owneractor->sprext.renderflags & SPREXT_NOTMD)) { int const nRootTile = pTSprite->picnum; int nAnimTile = pTSprite->picnum + qanimateoffs(pTSprite->picnum, 32768 + (pTSprite->ownerActor->GetIndex() & 16383)); diff --git a/source/games/sw/src/jsector.cpp b/source/games/sw/src/jsector.cpp index 316e69a9ac9..aeb4a2c19b1 100644 --- a/source/games/sw/src/jsector.cpp +++ b/source/games/sw/src/jsector.cpp @@ -847,7 +847,7 @@ void JAnalyzeSprites(tspritetype* tspr) //if (bVoxelsOn) if (r_voxels) { - if (aVoxelArray[tspr->picnum].Voxel >= 0 && !(tspr->ownerActor->sprext.flags & SPREXT_NOTMD)) + if (aVoxelArray[tspr->picnum].Voxel >= 0 && !(tspr->ownerActor->sprext.renderflags & SPREXT_NOTMD)) { // Turn on voxels tspr->picnum = aVoxelArray[tspr->picnum].Voxel; // Get the voxel number @@ -860,7 +860,7 @@ void JAnalyzeSprites(tspritetype* tspr) { case 764: // Gun barrel - if (!r_voxels || (tspr->ownerActor->sprext.flags & SPREXT_NOTMD)) + if (!r_voxels || (tspr->ownerActor->sprext.renderflags & SPREXT_NOTMD)) { tspr->cstat |= CSTAT_SPRITE_ALIGNMENT_WALL; break; diff --git a/wadsrc/static/zscript/coreactor.zs b/wadsrc/static/zscript/coreactor.zs index cef41f4e8af..c93f3bb8f06 100644 --- a/wadsrc/static/zscript/coreactor.zs +++ b/wadsrc/static/zscript/coreactor.zs @@ -1,4 +1,38 @@ class CoreActor native { -} \ No newline at end of file + //native readonly sectortype sectp; + + native int16 cstat; + native int16 picnum; + native readonly int16 statnum; + native int16 ang; + native int16 xvel; + native int16 yvel; + native int16 zvel, inittype; // inittype, type and flags are for Blood. + native int16 lotag, type; + native int16 hitag, flags; + native int16 extra; + native int16 detail; + + native int8 shade; + native uint8 pal; + native uint8 clipdist; + native uint8 blend; + native uint8 xrepeat; + native uint8 yrepeat; + native int8 xoffset; + native int8 yoffset; + native int16 owner; + native uint16 cstat2; + + native uint mdanimtims; + native int16 mdanimcur; + native int16 angoff, pitch, roll; + //native vec3 pivot_offset, position_offset; + native uint8 renderflags; + native float alpha; + + native readonly int spawnindex; +} +