From bd3aaea3b20e77cf3c3b21b74971a8cffe1bf1cf Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 25 Dec 2021 01:58:34 +0100 Subject: [PATCH] - big macro mess cleanup. --- source/games/sw/src/game.cpp | 2 +- source/games/sw/src/game.h | 78 +++++++++++++++------------------- source/games/sw/src/weapon.cpp | 14 +++--- 3 files changed, 42 insertions(+), 52 deletions(-) diff --git a/source/games/sw/src/game.cpp b/source/games/sw/src/game.cpp index cbe969eb8..71ad7e13a 100644 --- a/source/games/sw/src/game.cpp +++ b/source/games/sw/src/game.cpp @@ -773,7 +773,7 @@ int StdRandomRange(int range) if (range <= 0) return 0; - rand_num = STD_RANDOM(); + rand_num = rand(); if (rand_num == RAND_MAX) rand_num--; diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index f729f67ad..1900ff53d 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -196,14 +196,28 @@ inline int32_t FIXED(int32_t msw, int32_t lsw) int StdRandomRange(int range); #define STD_RANDOM_P2(pwr_of_2) (MOD_P2(rand(),(pwr_of_2))) -#define STD_RANDOM() (rand()) #define RANDOM_NEG(x,y) ((RANDOM_P2(((x)<<(y))<<1) - (x))<<(y)) -#define MOVEx(vel,ang) (MulScale(vel, bcos(ang), 14)) -#define MOVEy(vel,ang) (MulScale(vel, bsin(ang), 14)) +inline int MOVEx(int vel, int ang) +{ + return (MulScale(vel, bcos(ang), 14)); +} -#define DIST(x1, y1, x2, y2) ksqrt( SQ((x1) - (x2)) + SQ((y1) - (y2)) ) +inline int MOVEy(int vel, int ang) +{ + return (MulScale(vel, bsin(ang), 14)); +} + +inline int SQ(int val) +{ + return val * val; +} + +inline int DIST(int x1, int y1, int x2, int y2) +{ + return ksqrt(SQ((x1)-(x2)) + SQ((y1)-(y2))); +} // Distance macro - tx, ty, tmin are holding vars that must be declared in the routine // that uses this macro @@ -215,11 +229,6 @@ inline void DISTANCE(int x1, int y1, int x2, int y2, int& dist, int& tx, int& ty dist = tx + ty - (tmin >> 1); } -inline int GetSpriteSizeX(const spritetypebase* sp) -{ - return MulScale(tileWidth(sp->picnum), sp->xrepeat, 6); -} - inline int GetSpriteSizeY(const spritetypebase* sp) { return MulScale(tileHeight(sp->picnum), sp->yrepeat, 6); @@ -231,22 +240,15 @@ inline int GetSpriteSizeZ(const spritetypebase* sp) } -// Given a z height and sprite return the correct y repeat value -inline int GetRepeatFromHeight(const spritetype* sp, int zh) -{ - return zh / (4 * tileHeight(sp->picnum)); -} - - // Z size of top (TOS) and bottom (BOS) part of sprite inline int GetSpriteSizeToTop(const spritetypebase* sp) { - return (DIV2(GetSpriteSizeZ(sp)) + (tileTopOffset(sp->picnum) << 8)); + return ((GetSpriteSizeZ(sp) >> 1) + (tileTopOffset(sp->picnum) << 8)); } inline int GetSpriteSizeToBottom(const spritetypebase* sp) { - return (DIV2(GetSpriteSizeZ(sp)) - (tileTopOffset(sp->picnum) << 8)); + return ((GetSpriteSizeZ(sp) >> 1) - (tileTopOffset(sp->picnum) << 8)); } // actual Z for TOS and BOS - handles both WYSIWYG and old style @@ -275,37 +277,25 @@ constexpr int PIXZ(int value) return value >> 8; } -constexpr int SQ(int val) -{ - return val * val; -} - // two vectors // can determin direction -#define DOT_PRODUCT_2D(x1,y1,x2,y2) (MulScale((x1), (x2), 16) + MulScale((y1), (y2), 16)) +constexpr int DOT_PRODUCT_2D(int x1, int y1, int x2, int y2) +{ + return (MulScale((x1), (x2), 16) + MulScale((y1), (y2), 16)); +} + +constexpr int SEC(int value) +{ + return ((value) * 120); +} -#define SEC(value) ((value)*120) - -#define CEILING_DIST (Z(4)) -#define FLOOR_DIST (Z(4)) - -#define NORM_SPRITE(val) ((val) & (kHitIndexMask)) - -#define NORM_SECTOR(val) ((val) & (kHitIndexMask)) - -// overwritesprite flags -#define OVER_SPRITE_MIDDLE (BIT(0)) -#define OVER_SPRITE_VIEW_CLIP (BIT(1)) -#define OVER_SPRITE_TRANSLUCENT (BIT(2)) -#define OVER_SPRITE_XFLIP (BIT(3)) -#define OVER_SPRITE_YFLIP (BIT(4)) - -#undef CLIPMASK0 // defined in build.h -#undef CLIPMASK1 - -// new define more readable defines +enum +{ + CEILING_DIST = (Z(4)), + FLOOR_DIST = (Z(4)) +}; // Clip Sprite adjustment constexpr int CS(int sprite_bit) diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index f9dd7e12d..e71b1a85c 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -14806,7 +14806,7 @@ int InitEnemyRocket(DSWActor* actor) nx = actor->spr.pos.X; ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - DIV2(ActorSizeZ(actor))-Z(8); + nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1)-Z(8); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], actor->spr.sector(), @@ -14889,7 +14889,7 @@ int InitEnemyRail(DSWActor* actor) nx = actor->spr.pos.X; ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - DIV2(ActorSizeZ(actor))-Z(8); + nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1)-Z(8); // Spawn a shot // Inserting and setting up variables @@ -14973,7 +14973,7 @@ int InitZillaRocket(DSWActor* actor) { nx = actor->spr.pos.X; ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - DIV2(ActorSizeZ(actor))-Z(8); + nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1)-Z(8); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], actor->spr.sector(), @@ -15132,7 +15132,7 @@ int InitSkelSpell(DSWActor* actor) nx = actor->spr.pos.X; ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - DIV2(ActorSizeZ(actor)); + nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, ELECTRO_ENEMY, s_Electro, actor->spr.sector(), @@ -17435,7 +17435,7 @@ int InitEnemyFireball(DSWActor* actor) //dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, tsp->pos.X, tsp->pos.Y); // Determine target Z value - targ_z = tsp->pos.Z - DIV2(Z(ActorSizeY(actor))); + targ_z = tsp->pos.Z - (Z(ActorSizeY(actor)) >> 1); // (velocity * difference between the target and the throwing star) / // distance @@ -18433,8 +18433,8 @@ DSWActor* QueueWallBlood(DSWActor* actor, short ang) return nullptr; // No blood underwater! daz = Z(RANDOM_P2(128))<<3; - daz -= DIV2(Z(128)<<3); - dang = (ang+(RANDOM_P2(128<<5) >> 5)) - DIV2(128); + daz -= (Z(128)<<2); + dang = (ang+(RANDOM_P2(128<<5) >> 5)) - (64); FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(30), actor->spr.sector(), // Start position bcos(dang), // X vector of 3D ang