diff --git a/source/blood/src/bloodactor.h b/source/blood/src/bloodactor.h new file mode 100644 index 000000000..3934a0db4 --- /dev/null +++ b/source/blood/src/bloodactor.h @@ -0,0 +1,43 @@ +#pragma once + +#include "build.h" +#include "common_game.h" +#include "db.h" +#include "ai.h" +#include "nnexts.h" +#include "seq.h" +#include "aiunicult.h" + +BEGIN_BLD_NS + +// Due to the messed up array storage of all the game data we cannot do any direct referenced here yet. We have to access everything via wrapper functions for now. +// Note that the indexing is very inconsistent - partially by sprite index, partially by xsprite index. +class DBloodActor +{ + const int index; + DBloodActor* base(); + +public: + DBloodActor() :index(int(this - base())) { assert(index >= 0 && index < kMaxSprites); } + + bool hasX() { return sprite[index].extra > 0; } + spritetype& s() { return sprite[index]; } + XSPRITE& x() { return xsprite[sprite[index].extra]; } // calling this does not validate the xsprite! + SPRITEHIT& hit() { return gSpriteHit[sprite[index].extra]; } + int& xvel() { return Blood::xvel[index]; } + int& yvel() { return Blood::yvel[index]; } + int& zvel() { return Blood::zvel[index]; } + + int& cumulDamage() { return Blood::cumulDamage[sprite[index].extra]; } + int& dudeSlope() { return Blood::gDudeSlope[sprite[index].extra]; } + DUDEEXTRA& dudeExtra() { return gDudeExtra[sprite[index].extra]; } + SPRITEMASS& spriteMass() { return gSpriteMass[sprite[index].extra]; } + GENDUDEEXTRA& genDudeExtra() { return Blood::gGenDudeExtra[index]; } + POINT3D& basePoint() { return Blood::baseSprite[index]; } +}; + +extern DBloodActor bloodActors[kMaxSprites]; + +inline DBloodActor* DBloodActor::base() { return bloodActors; } + +END_BLD_NS diff --git a/source/blood/src/d_menu.cpp b/source/blood/src/d_menu.cpp index 1c9ca4d6e..3dfdcc3ce 100644 --- a/source/blood/src/d_menu.cpp +++ b/source/blood/src/d_menu.cpp @@ -24,6 +24,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! +#include "bloodactor.h" + #include "build.h" #include "compat.h" #include "mmulti.h" diff --git a/source/blood/src/db.cpp b/source/blood/src/db.cpp index 08bec6fe7..cfb50137d 100644 --- a/source/blood/src/db.cpp +++ b/source/blood/src/db.cpp @@ -37,9 +37,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "db.h" #include "eventq.h" #include "nnexts.h" +#include "bloodactor.h" BEGIN_BLD_NS +DBloodActor bloodActors[kMaxSprites]; + + bool gModernMap = false; unsigned short gStatCount[kMaxStatus + 1];