From 63ae0ea6bd9056d1341fda08cb5109df5c8e3d39 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 26 Nov 2022 17:42:56 -0500 Subject: [PATCH 01/66] Prevent finishline ever being your prevwaypoint --- src/k_kart.c | 5 +++++ src/k_waypoint.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 9973bc5d5..15cd34b9a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9067,6 +9067,11 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player) if (angledelta < nextbestdelta && momdelta < nextbestmomdelta) { + if (waypoint->prevwaypoints[i] == finishline) // NEVER allow finish line. + { + continue; + } + if (P_TraceWaypointTraversal(player->mo, waypoint->prevwaypoints[i]->mobj) == false) { // Save sight checks when all of the other checks pass, so we only do it if we have to diff --git a/src/k_waypoint.c b/src/k_waypoint.c index 837f77102..a36cdfeb7 100644 --- a/src/k_waypoint.c +++ b/src/k_waypoint.c @@ -361,7 +361,7 @@ waypoint_t *K_GetBestWaypointForMobj(mobj_t *const mobj) // remember: huge radius if (closestdist <= rad && checkdist <= rad && finishline != NULL) { - if (!P_TraceBlockingLines(mobj, checkwaypoint->mobj)) // Intentionally not P_TraceWaypointTraversal + if (!P_TraceWaypointTraversal(mobj, checkwaypoint->mobj)) { // Save sight checks when all of the other checks pass, so we only do it if we have to continue; @@ -379,7 +379,7 @@ waypoint_t *K_GetBestWaypointForMobj(mobj_t *const mobj) } else if (checkdist < closestdist && bestfindist == INT32_MAX) { - if (!P_TraceBlockingLines(mobj, checkwaypoint->mobj)) // Intentionally not P_TraceWaypointTraversal + if (!P_TraceWaypointTraversal(mobj, checkwaypoint->mobj)) { // Save sight checks when all of the other checks pass, so we only do it if we have to continue; From bd337d14940e35be41305b1d13c679639b8227a3 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 26 Nov 2022 18:57:05 -0500 Subject: [PATCH 02/66] Bots treat all offroad as wall Rather than only strong offroad. --- src/k_botsearch.c | 2 +- src/p_sight.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/k_botsearch.c b/src/k_botsearch.c index 2d9c9774d..06934024d 100644 --- a/src/k_botsearch.c +++ b/src/k_botsearch.c @@ -149,7 +149,7 @@ static boolean K_BotHatesThisSectorsSpecial(player_t *player, sector_t *sec) return true; } - if (sec->offroad > FRACUNIT) // Only care about strong offroad. + if (sec->offroad > 0) { return !K_BotCanTakeCut(player); } diff --git a/src/p_sight.c b/src/p_sight.c index e96bf9db8..cf85d614a 100644 --- a/src/p_sight.c +++ b/src/p_sight.c @@ -334,6 +334,12 @@ static boolean P_CanTraceBlockingLine(seg_t *seg, divline_t *divl, register los_ (void)divl; + if (!(line->flags & ML_TWOSIDED)) + { + // stop because it is not two sided anyway + return false; + } + if (P_IsLineBlocking(line, los->compareThing) == true) { // This line will always block us @@ -380,11 +386,16 @@ static boolean P_CanBotTraverse(seg_t *seg, divline_t *divl, register los_t *los if (los->compareThing->player != NULL && los->alreadyHates == false) { // Treat damage sectors like walls, if you're not already in a bad sector. + const sector_t *front, *back; vertex_t pos; + P_ClosestPointOnLine(los->compareThing->x, los->compareThing->y, line, &pos); - if (K_BotHatesThisSector(los->compareThing->player, line->frontsector, pos.x, pos.y) - || K_BotHatesThisSector(los->compareThing->player, line->backsector, pos.x, pos.y)) + front = seg->frontsector; + back = seg->backsector; + + if (K_BotHatesThisSector(los->compareThing->player, front, pos.x, pos.y) + || K_BotHatesThisSector(los->compareThing->player, back, pos.x, pos.y)) { // This line does not block us, but we don't want to be in it. return false; From ad02fbcf32d1ddff3207880518752f40db5a9f68 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 26 Nov 2022 19:02:07 -0500 Subject: [PATCH 03/66] Reel the prediction back when it hits wall --- src/k_bot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_bot.c b/src/k_bot.c index 73139e6b6..98bf8c88f 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -710,7 +710,7 @@ static botprediction_t *K_CreateBotPrediction(player_t *player) if (P_TraceBotTraversal(player->mo, wp->mobj) == false) { // If we can't get a direct path to this waypoint, predict less. - distanceleft -= disttonext; + distanceleft /= 2; radreduce = FRACUNIT >> 1; } From 581b989fe47f343a71066bed59568d74fb85c965 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 26 Nov 2022 20:46:37 -0500 Subject: [PATCH 04/66] Fix bots being unable to trigger UDMF regression --- src/p_enemy.c | 3 --- src/p_mobj.c | 2 +- src/p_spec.c | 7 ++----- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index 0db891f81..131e92bf7 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -750,9 +750,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed if (player->mo->health <= 0) continue; // dead - if (player->bot) - continue; // ignore bots - if (dist > 0 && P_AproxDistance(P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y), player->mo->z - actor->z) > dist) continue; // Too far away diff --git a/src/p_mobj.c b/src/p_mobj.c index 814aa6b57..0613d816c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4538,7 +4538,7 @@ boolean P_SupermanLook4Players(mobj_t *actor) { if (playeringame[c] && !players[c].spectator) { - if (!players[c].mo || players[c].bot) + if (!players[c].mo) continue; if (players[c].mo->health <= 0) diff --git a/src/p_spec.c b/src/p_spec.c index 4abe9f5e1..56eb3d941 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4282,7 +4282,7 @@ boolean P_IsPlayerValid(size_t playernum) boolean P_CanPlayerTrigger(size_t playernum) { - return P_IsPlayerValid(playernum) && !players[playernum].bot; + return P_IsPlayerValid(playernum); } /// \todo check continues for proper splitscreen support? @@ -4310,7 +4310,7 @@ static void P_ProcessEggCapsule(player_t *player, sector_t *sector) mobj_t *mo2; INT32 i; - if (player->bot || sector->ceilingdata || sector->floordata) + if (sector->ceilingdata || sector->floordata) return; // Find the center of the Eggtrap and release all the pretty animals! @@ -4517,9 +4517,6 @@ static void P_EvaluateDamageType(player_t *player, sector_t *sector, boolean isT static void P_EvaluateLinedefExecutorTrigger(player_t *player, sector_t *sector, boolean isTouching) { - if (player->bot) - return; - if (!sector->triggertag) return; From 1ca522044b0322050e1e3ff9784c5361ef90e73b Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 03:24:07 -0500 Subject: [PATCH 05/66] Fix bad usage of const --- src/p_sight.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_sight.c b/src/p_sight.c index cf85d614a..7ef9b9dd3 100644 --- a/src/p_sight.c +++ b/src/p_sight.c @@ -386,7 +386,7 @@ static boolean P_CanBotTraverse(seg_t *seg, divline_t *divl, register los_t *los if (los->compareThing->player != NULL && los->alreadyHates == false) { // Treat damage sectors like walls, if you're not already in a bad sector. - const sector_t *front, *back; + sector_t *front, *back; vertex_t pos; P_ClosestPointOnLine(los->compareThing->x, los->compareThing->y, line, &pos); From b1b77e94960b4005da98876aa98ab7269d1fa810 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 03:29:00 -0500 Subject: [PATCH 06/66] Bots treat Drop Target more like Banana than Orbi Fire with smaller threshold, and forcefully when banana-drag goes into effect. Fixes them holding it for absolutely way too long and making their gameplay worse. --- src/k_botitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_botitem.c b/src/k_botitem.c index bb90ef736..49b387d28 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -943,7 +943,7 @@ static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd) cmd->buttons |= BT_LOOKBACK; } - if (player->botvars.itemconfirm > 25*TICRATE) + if (player->botvars.itemconfirm > 10*TICRATE || player->bananadrag >= TICRATE) { K_BotGenericPressItem(player, cmd, throwdir); } From aa7c7fbf94fcd103a6e95cb787b4739197c0fa17 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 03:33:01 -0500 Subject: [PATCH 07/66] Bots don't use boost items in the air No Sneaker, Rocket Sneaker, or Ring waste when they can't apply! --- src/k_botitem.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/k_botitem.c b/src/k_botitem.c index 49b387d28..8c85a3c3c 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -486,6 +486,12 @@ static void K_BotItemGenericOrbitShield(player_t *player, ticcmd_t *cmd) --------------------------------------------------*/ static void K_BotItemSneaker(player_t *player, ticcmd_t *cmd) { + if (P_IsObjectOnGround(player->mo) == false) + { + // Don't use while mid-air. + return; + } + if ((player->offroad && K_ApplyOffroad(player)) // Stuck in offroad, use it NOW || K_GetWaypointIsShortcut(player->nextwaypoint) == true // Going toward a shortcut! || player->speed < K_GetKartSpeed(player, false, true) / 2 // Being slowed down too much @@ -518,6 +524,12 @@ static void K_BotItemSneaker(player_t *player, ticcmd_t *cmd) --------------------------------------------------*/ static void K_BotItemRocketSneaker(player_t *player, ticcmd_t *cmd) { + if (P_IsObjectOnGround(player->mo) == false) + { + // Don't use while mid-air. + return; + } + if (player->botvars.itemconfirm > TICRATE) { if (player->sneakertimer == 0 && K_ItemButtonWasDown(player) == false) @@ -1182,6 +1194,12 @@ static void K_BotItemRings(player_t *player, ticcmd_t *cmd) { INT32 saferingsval = 16 - K_GetKartRingPower(player, false); + if (P_IsObjectOnGround(player->mo) == false) + { + // Don't use while mid-air. + return; + } + if (player->speed < K_GetKartSpeed(player, false, true) / 2 // Being slowed down too much || player->speedboost > (FRACUNIT/5)) // Have another type of boost (tethering) { From a47faff8205f673433c5290ad226b2a1be668c64 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 03:43:36 -0500 Subject: [PATCH 08/66] Update bot Ballhog usage to have charging --- src/k_botitem.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/src/k_botitem.c b/src/k_botitem.c index 8c85a3c3c..abbba7ba6 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -903,6 +903,68 @@ static void K_BotItemOrbinaut(player_t *player, ticcmd_t *cmd) } } +/*-------------------------------------------------- + static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd) + + Item usage for Ballhog throwing. + + Input Arguments:- + player - Bot to do this for. + cmd - Bot's ticcmd to edit. + + Return:- + None +--------------------------------------------------*/ +static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd) +{ + const fixed_t topspeed = K_GetKartSpeed(player, false, true); + fixed_t radius = FixedMul(2560 * mapobjectscale, K_GetKartGameSpeedScalar(gamespeed)); + SINT8 throwdir = -1; + boolean tryLookback = false; + UINT8 snipeMul = 2; + player_t *target = NULL; + + if (player->speed > topspeed) + { + radius = FixedMul(radius, FixedDiv(player->speed, topspeed)); + snipeMul = 3; // Confirm faster when you'll throw it with a bunch of extra speed!! + } + + player->botvars.itemconfirm++; + + target = K_PlayerInCone(player, radius, 15, false); + if (target != NULL) + { + K_ItemConfirmForTarget(player, target, player->botvars.difficulty * snipeMul); + throwdir = 1; + } + else + { + target = K_PlayerInCone(player, radius, 15, true); + + if (target != NULL) + { + K_ItemConfirmForTarget(player, target, player->botvars.difficulty); + throwdir = -1; + tryLookback = true; + } + } + + if (tryLookback == true && throwdir == -1) + { + cmd->buttons |= BT_LOOKBACK; + } + + if (player->botvars.itemconfirm > 10*TICRATE) + { + // Charge up. If we lose sight of the target, then + // we'll just let go and do a partial-charge. + // Otherwise we'll go for full-charge :) + cmd->throwdir = KART_FULLTURN * throwdir; + cmd->buttons |= BT_ATTACK; + } +} + /*-------------------------------------------------- static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd) @@ -1343,8 +1405,6 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) K_BotItemGenericOrbitShield(player, cmd); } else if (player->position != 1) // Hold onto orbiting items when in 1st :) - /* FALLTHRU */ - case KITEM_BALLHOG: { K_BotItemOrbinaut(player, cmd); } @@ -1372,6 +1432,9 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) case KITEM_LANDMINE: K_BotItemLandmine(player, cmd, turnamt); break; + case KITEM_BALLHOG: + K_BotItemBallhog(player, cmd); + break; case KITEM_DROPTARGET: if (!(player->pflags & PF_ITEMOUT)) { From 366ade8cbbc1b5079065a2cc7d77da885674c428 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 03:45:45 -0500 Subject: [PATCH 09/66] Bots don't use items while exiting anymore They'll just hold onto 'em now. Makes the post-exit movement a bit more seamless. --- src/k_bot.c | 2 +- src/k_botitem.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_bot.c b/src/k_bot.c index 98bf8c88f..06cc737b6 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -1452,7 +1452,7 @@ void K_BuildBotTiccmd(player_t *player, ticcmd_t *cmd) } } - if (spindash == 0) + if (spindash == 0 && player->exiting == 0) { // Don't pointlessly try to use rings/sneakers while charging a spindash. // TODO: Allowing projectile items like orbinaut while e-braking would be nice, maybe just pass in the spindash variable? diff --git a/src/k_botitem.c b/src/k_botitem.c index abbba7ba6..c7c852571 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -1322,7 +1322,7 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) { // Use rings! - if (leveltime > starttime && !player->exiting) + if (leveltime > starttime) { K_BotItemRings(player, cmd); } From 66629a3576cb7b6ed6bcd6595714fc5aeb6a2194 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 03:49:47 -0500 Subject: [PATCH 10/66] Bot reuses Landmine use function for Hyudoro Previously used GenericTap, which was intended for when Hyu wasn't a trap item. Landmine has very similar usage (trap item with only the ability to place it on your current location), so I just made it reuse that function. --- src/k_botitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_botitem.c b/src/k_botitem.c index c7c852571..ba16c10c2 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -1373,7 +1373,6 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) case KITEM_SPB: case KITEM_GROW: case KITEM_SHRINK: - case KITEM_HYUDORO: case KITEM_SUPERRING: K_BotItemGenericTap(player, cmd); break; @@ -1430,6 +1429,7 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) } break; case KITEM_LANDMINE: + case KITEM_HYUDORO: // Function re-use, as they have about the same usage. K_BotItemLandmine(player, cmd, turnamt); break; case KITEM_BALLHOG: From 4b5681b5d53a89e05a9bc26c9b80d4c0c2ffe089 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 04:24:05 -0500 Subject: [PATCH 11/66] Add Garden Top bot item function --- src/k_botitem.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/src/k_botitem.c b/src/k_botitem.c index ba16c10c2..2dc5223f3 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -1240,6 +1240,92 @@ static void K_BotItemFlame(player_t *player, ticcmd_t *cmd) } } +/*-------------------------------------------------- + static void K_BotItemGardenTopDeploy(player_t *player, ticcmd_t *cmd) + + Item usage for deploying the Garden Top. + + Input Arguments:- + player - Bot to do this for. + cmd - Bot's ticcmd to edit. + + Return:- + None +--------------------------------------------------*/ +static void K_BotItemGardenTopDeploy(player_t *player, ticcmd_t *cmd) +{ + //if (player->curshield != KSHIELD_TOP) + if (player->botvars.itemconfirm++ > 2*TICRATE) + { + K_BotGenericPressItem(player, cmd, 0); + } +} + +/*-------------------------------------------------- + static void K_BotItemGardenTop(player_t *player, ticcmd_t *cmd, INT16 turnamt) + + Item usage for Garden Top movement. + + Input Arguments:- + player - Bot to do this for. + cmd - Bot's ticcmd to edit. + turnamt - How hard they currently are turning. + + Return:- + None +--------------------------------------------------*/ +static void K_BotItemGardenTop(player_t *player, ticcmd_t *cmd, INT16 turnamt) +{ + const fixed_t topspeed = K_GetKartSpeed(player, false, true); + fixed_t radius = FixedMul(2560 * mapobjectscale, K_GetKartGameSpeedScalar(gamespeed)); + SINT8 throwdir = -1; + UINT8 snipeMul = 1; + player_t *target = NULL; + + if (player->speed > topspeed) + { + radius = FixedMul(radius, FixedDiv(player->speed, topspeed)); + snipeMul = 2; // Confirm faster when you'll throw it with a bunch of extra speed!! + } + + player->botvars.itemconfirm++; + + target = K_PlayerInCone(player, radius, 15, false); + if (target != NULL) + { + K_ItemConfirmForTarget(player, target, player->botvars.difficulty * snipeMul); + throwdir = 1; + } + + if (player->topdriftheld > 0) + { + // Grinding in place. + // Wait until we're mostly done turning. + // Cancel early if we hit max thrust speed. + if ((abs(turnamt) >= KART_FULLTURN/8) + && (player->topdriftheld <= GARDENTOP_MAXGRINDTIME)) + { + cmd->buttons |= BT_DRIFT; + } + } + else + { + const angle_t maxDelta = ANGLE_11hh; + angle_t delta = AngleDelta(player->mo->angle, K_MomentumAngle(player->mo)); + + if (delta > maxDelta) + { + // Do we need to turn? Start grinding! + cmd->buttons |= BT_DRIFT; + } + } + + if (player->botvars.itemconfirm > 25*TICRATE) + { + K_BotGenericPressItem(player, cmd, throwdir); + } +} + /*-------------------------------------------------- static void K_BotItemRings(player_t *player, ticcmd_t *cmd) @@ -1445,6 +1531,16 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) K_BotItemDropTarget(player, cmd); } break; + case KITEM_GARDENTOP: + if (player->curshield != KSHIELD_TOP) + { + K_BotItemGardenTopDeploy(player, cmd); + } + else + { + K_BotItemGardenTop(player, cmd, turnamt); + } + break; case KITEM_LIGHTNINGSHIELD: K_BotItemLightning(player, cmd); break; From 9b439297b09a47d69adb7604fc39e40474debff3 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 04:26:47 -0500 Subject: [PATCH 12/66] Bots will try to place Drop Targets on turns Also a bit more Banana-like --- src/k_botitem.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/k_botitem.c b/src/k_botitem.c index 2dc5223f3..7b2b5d9b7 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -994,6 +994,12 @@ static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd) player->botvars.itemconfirm++; + if (abs(turnamt) >= KART_FULLTURN/2) + { + player->botvars.itemconfirm += player->botvars.difficulty / 2; + throwdir = -1; + } + target = K_PlayerInCone(player, radius, 15, false); if (target != NULL) { From bd2507bee7441801a3c8bade27d0fe6be3a3c812 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 04:43:43 -0500 Subject: [PATCH 13/66] Fix missing input arg --- src/k_botitem.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/k_botitem.c b/src/k_botitem.c index 7b2b5d9b7..b8b848345 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -966,18 +966,19 @@ static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd) } /*-------------------------------------------------- - static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd) + static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd, INT16 turnamt) Item usage for Drop Target throwing. Input Arguments:- player - Bot to do this for. cmd - Bot's ticcmd to edit. + turnamt - How hard they currently are turning. Return:- None --------------------------------------------------*/ -static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd) +static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd, INT16 turnamt) { const fixed_t topspeed = K_GetKartSpeed(player, false, true); fixed_t radius = FixedMul(1280 * mapobjectscale, K_GetKartGameSpeedScalar(gamespeed)); @@ -1534,7 +1535,7 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt) } else { - K_BotItemDropTarget(player, cmd); + K_BotItemDropTarget(player, cmd, turnamt); } break; case KITEM_GARDENTOP: From 7c962fc0fa02d186228e3031a73352f226b9be78 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 04:48:30 -0500 Subject: [PATCH 14/66] Improve Ballhog charge conditions --- src/k_botitem.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/k_botitem.c b/src/k_botitem.c index b8b848345..6c8b9ece4 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -923,6 +923,7 @@ static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd) boolean tryLookback = false; UINT8 snipeMul = 2; player_t *target = NULL; + boolean hold = false; if (player->speed > topspeed) { @@ -930,8 +931,6 @@ static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd) snipeMul = 3; // Confirm faster when you'll throw it with a bunch of extra speed!! } - player->botvars.itemconfirm++; - target = K_PlayerInCone(player, radius, 15, false); if (target != NULL) { @@ -955,11 +954,24 @@ static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd) cmd->buttons |= BT_LOOKBACK; } - if (player->botvars.itemconfirm > 10*TICRATE) + if (target != NULL) + { + // Charge up! + hold = true; + } + else + { + // If we lose sight of the target, then we'll just + // let go and it'll do a partial-blast. + + // If we've been waiting for too long though, then + // we'll go for the full charge :) + player->botvars.itemconfirm++; + hold = (player->botvars.itemconfirm > 10*TICRATE); + } + + if (hold == true) { - // Charge up. If we lose sight of the target, then - // we'll just let go and do a partial-charge. - // Otherwise we'll go for full-charge :) cmd->throwdir = KART_FULLTURN * throwdir; cmd->buttons |= BT_ATTACK; } From 3c8738baabb4348c967c458d7a8a106f97e335a9 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 27 Nov 2022 05:14:35 -0500 Subject: [PATCH 15/66] Displace bot predictions against slope physics This makes them able to climb steep slopes significantly better. --- src/k_bot.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/k_bot.c b/src/k_bot.c index 06cc737b6..caf6aa55f 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -745,6 +745,25 @@ static botprediction_t *K_CreateBotPrediction(player_t *player) predict->y += P_ReturnThrustY(NULL, angletonext, min(disttonext, distanceleft) * FRACUNIT); } + if (player->mo->standingslope != NULL) + { + const pslope_t *slope = player->mo->standingslope; + + if (!(slope->flags & SL_NOPHYSICS) && abs(slope->zdelta) >= FRACUNIT/21) + { + // Displace the prediction to go against the slope physics. + angle_t angle = slope->xydirection; + + if (P_MobjFlip(player->mo) * slope->zdelta < 0) + { + angle ^= ANGLE_180; + } + + predict->x -= P_ReturnThrustX(NULL, angle, startDist * abs(slope->zdelta)); + predict->y -= P_ReturnThrustY(NULL, angle, startDist * abs(slope->zdelta)); + } + } + ps_bots[player - players].prediction += I_GetPreciseTime() - time; return predict; } @@ -875,7 +894,7 @@ static void K_DrawPredictionDebug(botprediction_t *predict, player_t *player) debugMobj->frame |= FF_TRANS20|FF_FULLBRIGHT; debugMobj->color = SKINCOLOR_ORANGE; - debugMobj->scale *= 2; + P_SetScale(debugMobj, debugMobj->destscale * 2); debugMobj->tics = 2; @@ -902,7 +921,7 @@ static void K_DrawPredictionDebug(botprediction_t *predict, player_t *player) radiusMobj->frame |= FF_TRANS20|FF_FULLBRIGHT; radiusMobj->color = SKINCOLOR_YELLOW; - radiusMobj->scale /= 2; + P_SetScale(debugMobj, debugMobj->destscale / 2); radiusMobj->tics = 2; } From 0677d59d516cd8a2d2f9327091f9b299aa0b4ef1 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 5 Nov 2022 03:58:19 -0500 Subject: [PATCH 16/66] cmake: Build all deps and static link Overhaul cmake build --- CMakeLists.txt | 238 +++++++------- assets/CMakeLists.txt | 1 + cmake/CPM.cmake | 21 ++ cmake/Modules/FindDiscordRPC.cmake | 10 + cmake/Modules/FindGME.cmake | 12 +- cmake/Modules/FindOPENMPT.cmake | 12 +- cmake/Modules/FindSDL2.cmake | 10 + cmake/Modules/FindSDL2_mixer.cmake | 10 + src/CMakeLists.txt | 219 ++++-------- src/discord.h | 2 +- src/sdl/CMakeLists.txt | 396 +++++++--------------- src/sdl/mixer_sound.c | 2 +- thirdparty/CMakeLists.txt | 512 +++++++++++++++++++++++++++++ thirdparty/openmpt_svn_version.h | 10 + 14 files changed, 893 insertions(+), 562 deletions(-) create mode 100644 cmake/CPM.cmake create mode 100644 thirdparty/CMakeLists.txt create mode 100644 thirdparty/openmpt_svn_version.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0771f712c..7dc38d525 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,10 @@ -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.14 FATAL_ERROR) -# Enable CCache early -set(SRB2_USE_CCACHE OFF CACHE BOOL "Use CCache") -if (${SRB2_USE_CCACHE}) - find_program(CCACHE_PROGRAM ccache) - if(CCACHE_PROGRAM) - message(STATUS "Found CCache: ${CCACHE_PROGRAM}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") - else() - message(WARNING "You have specified to use CCACHE but it was not found. Object files will not be cached.") - endif() -endif() +# Set up CMAKE path +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + +include(CMakeDependentOption) +include(cmake/CPM.cmake) file(STRINGS src/version.h SRB2_VERSION) string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION}) @@ -19,117 +13,11 @@ string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION}) # Version change is fine. project(SRB2 VERSION ${SRB2_VERSION} - LANGUAGES C) + LANGUAGES C CXX) -if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR}) - message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.") -endif() - -if ((${SRB2_USE_CCACHE}) AND (${CMAKE_C_COMPILER} MATCHES "clang")) - message(WARNING "Using clang and CCache: You may want to set environment variable CCACHE_CPP2=yes to prevent include errors during compile.") -endif() - -# Set up CMAKE path -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") - -### Useful functions - -# Add sources from Sourcefile -function(target_sourcefile type) - file(STRINGS Sourcefile list - REGEX "[-0-9A-Za-z_]+\.${type}") - target_sources(SRB2SDL2 PRIVATE ${list}) -endfunction() - -# Macro to add OSX framework -macro(add_framework fwname appname) - find_library(FRAMEWORK_${fwname} - NAMES ${fwname} - PATHS ${CMAKE_OSX_SYSROOT}/System/Library - ${CMAKE_OSX_SYSROOT}/Library - /System/Library - /Library - ATH_SUFFIXES Frameworks - NO_DEFAULT_PATH) - if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND) - MESSAGE(ERROR ": Framework ${fwname} not found") - else() - TARGET_LINK_LIBRARIES(${appname} PRIVATE "${FRAMEWORK_${fwname}}/${fwname}") - MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}") - endif() -endmacro() - -# Macro to copy Windows DLLs to Debug/Release folder for easy debugging -# Note: this is general purpose, we could copy anything. Just using for DLLs on MSVC though -macro(copy_files_to_build_dir target dlllist_var) - if(MSVC) - # http://stackoverflow.com/a/26983405/3064195 - foreach(dlllist_item ${${dlllist_var}}) - get_filename_component(dllname ${dlllist_item} NAME) - add_custom_command(TARGET ${target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${dlllist_item} - $/${dllname} - ) - endforeach() - endif() -endmacro() - -# bitness check -set(SRB2_SYSTEM_BITS 0) -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - message(STATUS "Target is 64-bit") - set(SRB2_SYSTEM_BITS 64) -endif() -if(CMAKE_SIZEOF_VOID_P EQUAL 4) - message(STATUS "Target is 32-bit") - set(SRB2_SYSTEM_BITS 32) -endif() -if(${SRB2_SYSTEM_BITS} EQUAL 0) - message(STATUS "Target bitness is unknown") -endif() - -# OS macros -if (UNIX) - add_definitions(-DUNIXCOMMON) -endif() - -if(CMAKE_COMPILER_IS_GNUCC) - find_program(OBJCOPY objcopy) -endif() - -if(${CMAKE_SYSTEM} MATCHES "Linux") - add_definitions(-DLINUX) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - add_definitions(-DLINUX64) - endif() -endif() - -if(${CMAKE_SYSTEM} MATCHES "Darwin") - add_definitions(-DMACOSX) -endif() - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") - -# Set EXE names so the assets CMakeLists can refer to its target -set(SRB2_SDL2_EXE_NAME ringracers CACHE STRING "Executable binary output name") - -include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) - -## config.h generation -set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary") -include(GitUtilities) -git_latest_commit(SRB2_COMP_COMMIT "${CMAKE_SOURCE_DIR}") -git_current_branch(SRB2_GIT_BRANCH "${CMAKE_SOURCE_DIR}") -git_working_tree_dirty(SRB2_COMP_UNCOMMITTED "${CMAKE_SOURCE_DIR}") -set(SRB2_COMP_BRANCH "${SRB2_GIT_BRANCH}") -set(SRB2_COMP_REVISION "${SRB2_COMP_COMMIT}") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h) - -add_subdirectory(src) -if(NOT ${SRB2_CONFIG_DEV_BUILD}) - add_subdirectory(assets) +if(APPLE) + # DiscordRPC needs but does not properly specify ObjC + enable_language(OBJC) endif() ##### PACKAGE CONFIGURATION ##### @@ -137,11 +25,11 @@ endif() set(SRB2_CPACK_GENERATOR "" CACHE STRING "Generator to use for making a package. E.g., ZIP, TGZ, DragNDrop (OSX only). Leave blank for default generator.") if("${SRB2_CPACK_GENERATOR}" STREQUAL "") - if(${CMAKE_SYSTEM} MATCHES "Windows") + if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows") set(SRB2_CPACK_GENERATOR "ZIP") - elseif(${CMAKE_SYSTEM} MATCHES "Linux") + elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") set(SRB2_CPACK_GENERATOR "TGZ") - elseif(${CMAKE_SYSTEM} MATCHES "Darwin") + elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") set(SRB2_CPACK_GENERATOR "TGZ") endif() endif() @@ -157,3 +45,103 @@ set(CPACK_PACKAGE_VERSION_PATCH ${SRB2_VERSION_PATCH}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}") SET(CPACK_OUTPUT_FILE_PREFIX package) include(CPack) + +# Options + +if("${CMAKE_SYSTEM_NAME}" MATCHES Linux) + set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT ON) +else() + set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT OFF) +endif() + +option( + SRB2_CONFIG_SYSTEM_LIBRARIES + "Link dependencies using CMake's find_package and do not use internal builds" + ${SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT} +) +# This option isn't recommended for distribution builds and probably won't work (yet). +cmake_dependent_option( + SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES + "Use dynamic libraries when compiling internal dependencies" + OFF "NOT SRB2_CONFIG_SYSTEM_LIBRARIES" + OFF +) +option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON) +option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF) + +# Enable CCache early +set(SRB2_USE_CCACHE OFF CACHE BOOL "Use CCache") +if (${SRB2_USE_CCACHE}) + find_program(CCACHE_PROGRAM ccache) + if(CCACHE_PROGRAM) + message(STATUS "Found CCache: ${CCACHE_PROGRAM}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") + else() + message(WARNING "You have specified to use CCACHE but it was not found. Object files will not be cached.") + endif() +endif() + +# Dependencies +add_subdirectory(thirdparty) + +if("${SRB2_CONFIG_SYSTEM_LIBRARIES}") + find_package(ZLIB REQUIRED) + find_package(PNG REQUIRED) + find_package(SDL2 REQUIRED) + find_package(SDL2_mixer REQUIRED) + find_package(CURL REQUIRED) + find_package(OPENMPT REQUIRED) + find_package(GME REQUIRED) + find_package(DiscordRPC REQUIRED) +endif() + +if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR}) + message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.") +endif() + +if ((${SRB2_USE_CCACHE}) AND (${CMAKE_C_COMPILER} MATCHES "clang")) + message(WARNING "Using clang and CCache: You may want to set environment variable CCACHE_CPP2=yes to prevent include errors during compile.") +endif() + +# Add sources from Sourcefile +function(target_sourcefile type) + file(STRINGS Sourcefile list + REGEX "[-0-9A-Za-z_]+\.${type}") + target_sources(SRB2SDL2 PRIVATE ${list}) +endfunction() + +# bitness check +set(SRB2_SYSTEM_BITS 0) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + message(STATUS "Target is 64-bit") + set(SRB2_SYSTEM_BITS 64) +endif() +if(CMAKE_SIZEOF_VOID_P EQUAL 4) + message(STATUS "Target is 32-bit") + set(SRB2_SYSTEM_BITS 32) +endif() +if(${SRB2_SYSTEM_BITS} EQUAL 0) + message(STATUS "Target bitness is unknown") +endif() + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + +# Set EXE names so the assets CMakeLists can refer to its target +set(SRB2_SDL2_EXE_NAME ringracers CACHE STRING "Executable binary output name") + +include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) + +add_subdirectory(src) +add_subdirectory(assets) + + +## config.h generation +set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary") +include(GitUtilities) +git_latest_commit(SRB2_COMP_COMMIT "${CMAKE_SOURCE_DIR}") +git_current_branch(SRB2_GIT_BRANCH "${CMAKE_SOURCE_DIR}") +git_working_tree_dirty(SRB2_COMP_UNCOMMITTED "${CMAKE_SOURCE_DIR}") +set(SRB2_COMP_BRANCH "${SRB2_GIT_BRANCH}") +set(SRB2_COMP_REVISION "${SRB2_COMP_COMMIT}") +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h) diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index a8f4cac5c..1f94d1446 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -25,6 +25,7 @@ gfx.pk3;\ textures.pk3;\ chars.pk3;\ maps.pk3;\ +followers.pk3;\ patch.pk3" CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!" ) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake new file mode 100644 index 000000000..772103fc3 --- /dev/null +++ b/cmake/CPM.cmake @@ -0,0 +1,21 @@ +set(CPM_DOWNLOAD_VERSION 0.36.0) + +if(CPM_SOURCE_CACHE) + set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +elseif(DEFINED ENV{CPM_SOURCE_CACHE}) + set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +else() + set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +endif() + +# Expand relative path. This is important if the provided path contains a tilde (~) +get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE) +if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION})) + message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}") + file(DOWNLOAD + https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake + ${CPM_DOWNLOAD_LOCATION} + ) +endif() + +include(${CPM_DOWNLOAD_LOCATION}) diff --git a/cmake/Modules/FindDiscordRPC.cmake b/cmake/Modules/FindDiscordRPC.cmake index e71762767..2d3c987c1 100644 --- a/cmake/Modules/FindDiscordRPC.cmake +++ b/cmake/Modules/FindDiscordRPC.cmake @@ -21,3 +21,13 @@ find_library(DISCORDRPC_LIBRARY set(DISCORDRPC_PROCESS_INCLUDES DISCORDRPC_INCLUDE_DIR) set(DISCORDRPC_PROCESS_LIBS DISCORDRPC_LIBRARY) libfind_process(DISCORDRPC) + +if(DISCORDRPC_FOUND AND NOT TARGET DiscordRPC::DiscordRPC) + add_library(DiscordRPC::DiscordRPC UNKNOWN IMPORTED) + set_target_properties( + DiscordRPC::DiscordRPC + PROPERTIES + IMPORTED_LOCATION "${DISCORDRPC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${DISCORDRPC_INCLUDE_DIR}" + ) +endif() diff --git a/cmake/Modules/FindGME.cmake b/cmake/Modules/FindGME.cmake index ea80af454..3af0a94be 100644 --- a/cmake/Modules/FindGME.cmake +++ b/cmake/Modules/FindGME.cmake @@ -20,4 +20,14 @@ find_library(GME_LIBRARY set(GME_PROCESS_INCLUDES GME_INCLUDE_DIR) set(GME_PROCESS_LIBS GME_LIBRARY) -libfind_process(GME) \ No newline at end of file +libfind_process(GME) + +if(GME_FOUND AND NOT TARGET gme) + add_library(gme UNKNOWN IMPORTED) + set_target_properties( + gme + PROPERTIES + IMPORTED_LOCATION "${GME_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${GME_INCLUDE_DIR}" + ) +endif() diff --git a/cmake/Modules/FindOPENMPT.cmake b/cmake/Modules/FindOPENMPT.cmake index 2d334b6f0..7e5b2d5a3 100644 --- a/cmake/Modules/FindOPENMPT.cmake +++ b/cmake/Modules/FindOPENMPT.cmake @@ -20,4 +20,14 @@ find_library(OPENMPT_LIBRARY set(OPENMPT_PROCESS_INCLUDES OPENMPT_INCLUDE_DIR) set(OPENMPT_PROCESS_LIBS OPENMPT_LIBRARY) -libfind_process(OPENMPT) \ No newline at end of file +libfind_process(OPENMPT) + +if(OPENMPT_FOUND AND NOT TARGET openmpt) + add_library(openmpt UNKNOWN IMPORTED) + set_target_properties( + openmpt + PROPERTIES + IMPORTED_LOCATION "${OPENMPT_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${OPENMPT_INCLUDE_DIR}" + ) +endif() diff --git a/cmake/Modules/FindSDL2.cmake b/cmake/Modules/FindSDL2.cmake index 2fc833cef..2d625f84c 100644 --- a/cmake/Modules/FindSDL2.cmake +++ b/cmake/Modules/FindSDL2.cmake @@ -31,3 +31,13 @@ find_library(SDL2_LIBRARY set(SDL2_PROCESS_INCLUDES SDL2_INCLUDE_DIR) set(SDL2_PROCESS_LIBS SDL2_LIBRARY) libfind_process(SDL2) + +if(SDL2_FOUND AND NOT TARGET SDL2::SDL2) + add_library(SDL2::SDL2 UNKNOWN IMPORTED) + set_target_properties( + SDL2::SDL2 + PROPERTIES + IMPORTED_LOCATION "${SDL2_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}" + ) +endif() diff --git a/cmake/Modules/FindSDL2_mixer.cmake b/cmake/Modules/FindSDL2_mixer.cmake index 9af3e26dd..637498e53 100644 --- a/cmake/Modules/FindSDL2_mixer.cmake +++ b/cmake/Modules/FindSDL2_mixer.cmake @@ -32,3 +32,13 @@ find_library(SDL2_MIXER_LIBRARY set(SDL2_MIXER_PROCESS_INCLUDES SDL2_MIXER_INCLUDE_DIR) set(SDL2_MIXER_PROCESS_LIBS SDL2_MIXER_LIBRARY) libfind_process(SDL2_MIXER) + +if(SDL2_MIXER_FOUND AND NOT TARGET SDL2_mixer::SDL2_mixer) + add_library(SDL2_mixer::SDL2_mixer UNKNOWN IMPORTED) + set_target_properties( + SDL2_mixer::SDL2_mixer + PROPERTIES + IMPORTED_LOCATION "${SDL2_MIXER_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_MIXER_INCLUDE_DIR}" + ) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d08fe0faa..172e10b7f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,10 @@ -# SRB2 Core - add_executable(SRB2SDL2 MACOSX_BUNDLE WIN32) +if("${CMAKE_COMPILER_IS_GNUCC}" AND "${CMAKE_SYSTEM_NAME}" MATCHES "Windows" AND NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + # On MinGW with internal libraries, link the standard library statically + target_link_options(SRB2SDL2 PRIVATE "-static") +endif() + # Core sources target_sourcefile(c) target_sources(SRB2SDL2 PRIVATE comptime.c md5.c config.h.in) @@ -11,110 +14,56 @@ set(SRB2_ASM_SOURCES vid_copy.s) set(SRB2_NASM_SOURCES tmap_mmx.nas tmap.nas) ### Configuration -set(SRB2_CONFIG_HAVE_PNG ON CACHE BOOL - "Enable PNG support. Depends on zlib, so will be disabled if you don't enable that too.") -set(SRB2_CONFIG_HAVE_ZLIB ON CACHE BOOL - "Enable zlib support.") -set(SRB2_CONFIG_HAVE_GME ON CACHE BOOL - "Enable GME support.") -set(SRB2_CONFIG_HAVE_DISCORDRPC OFF CACHE BOOL - "Enable Discord rich presence support.") -set(SRB2_CONFIG_HAVE_CURL ON CACHE BOOL - "Enable cURL support, used for downloading files via HTTP.") -set(SRB2_CONFIG_HAVE_OPENMPT ON CACHE BOOL - "Enable OpenMPT support.") -set(SRB2_CONFIG_HAVE_CURL ON CACHE BOOL - "Enable curl support.") -set(SRB2_CONFIG_HAVE_THREADS ON CACHE BOOL - "Enable multithreading support.") -if(${CMAKE_SYSTEM} MATCHES Windows) - set(SRB2_CONFIG_HAVE_MIXERX ON CACHE BOOL - "Enable SDL Mixer X support.") -else() - set(SRB2_CONFIG_HAVE_MIXERX OFF) -endif() -set(SRB2_CONFIG_HWRENDER ON CACHE BOOL - "Enable hardware rendering through OpenGL.") set(SRB2_CONFIG_USEASM OFF CACHE BOOL "Enable NASM tmap implementation for software mode speedup.") set(SRB2_CONFIG_YASM OFF CACHE BOOL "Use YASM in place of NASM.") -set(SRB2_CONFIG_STATIC_OPENGL OFF CACHE BOOL - "Use statically linked OpenGL. NOT RECOMMENDED.") set(SRB2_CONFIG_DEV_BUILD OFF CACHE BOOL "Compile a development build of SRB2Kart.") -### use internal libraries? -if(${CMAKE_SYSTEM} MATCHES "Windows") ###set on Windows only - set(SRB2_CONFIG_USE_INTERNAL_LIBRARIES OFF CACHE BOOL - "Use SRB2Kart's internal copies of required dependencies (SDL2, PNG, zlib, GME, OpenMPT, cURL).") -endif() - add_subdirectory(blua) -if(${SRB2_CONFIG_HAVE_GME}) - if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - set(GME_FOUND ON) - set(GME_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/gme/include) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - set(GME_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/gme/win64 -lgme") - else() # 32-bit - set(GME_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/gme/win32 -lgme") - endif() - else() - find_package(GME) - endif() - if(${GME_FOUND}) - set(SRB2_HAVE_GME ON) - target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_GME) - else() - message(WARNING "You have specified that GME is available but it was not found.") +# OS macros +if (UNIX) + target_compile_definitions(SRB2SDL2 PRIVATE -DUNIXCOMMON) +endif() + +if(CMAKE_COMPILER_IS_GNUCC) + find_program(OBJCOPY objcopy) +endif() + +if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") + target_compile_definitions(SRB2SDL2 PRIVATE -DLINUX) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + target_compile_definitions(SRB2SDL2 PRIVATE -DLINUX64) endif() endif() -if(${SRB2_CONFIG_HAVE_OPENMPT}) - if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - set(OPENMPT_FOUND ON) - set(OPENMPT_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/libopenmpt/inc) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - set(OPENMPT_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/libopenmpt/lib/x86_64/mingw -lopenmpt") - else() # 32-bit - set(OPENMPT_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/libopenmpt/lib/x86/mingw -lopenmpt") - endif() - else() - find_package(OPENMPT) - endif() - if(${OPENMPT_FOUND}) - set(SRB2_HAVE_OPENMPT ON) - target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_OPENMPT) - else() - message(WARNING "You have specified that OpenMPT is available but it was not found.") - endif() +if("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") + target_compile_definitions(SRB2SDL2 PRIVATE -DMACOSX) endif() -if(${SRB2_CONFIG_HAVE_MIXERX}) - if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - set(MIXERX_FOUND ON) - set(MIXERX_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDLMixerX/i686-w64-mingw32/include/SDL2) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - set(MIXERX_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDLMixerX/x86_64-w64-mingw32/lib -lSDL2_mixer_ext") - else() # 32-bit - set(MIXERX_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDLMixerX/i686-w64-mingw32/lib -lSDL2_mixer_ext") - endif() - else() - # No support for non-Windows (yet?) - #find_package(MIXERX) - message(WARNING "SDL Mixer X is not supported as an external library.") - set(MIXERX_FOUND OFF) - endif() - if(${MIXERX_FOUND}) - set(SRB2_HAVE_MIXERX ON) - target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXERX) - else() - message(WARNING "You have specified that SDL Mixer X is available but it was not found.") - endif() +target_link_libraries(SRB2SDL2 PRIVATE gme) +target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_GME) +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + # this sucks but gme doesn't use modern cmake to delineate public headers + target_include_directories(SRB2SDL2 PRIVATE "${libgme_SOURCE_DIR}") endif() +target_link_libraries(SRB2SDL2 PRIVATE openmpt) +target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_OPENMPT) + +target_link_libraries(SRB2SDL2 PRIVATE ZLIB::ZLIB PNG::PNG CURL::libcurl) +target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_ZLIB -DHAVE_PNG -DHAVE_CURL -D_LARGEFILE64_SOURCE) +target_sources(SRB2SDL2 PRIVATE apng.c) + +target_link_libraries(SRB2SDL2 PRIVATE DiscordRPC::DiscordRPC) +target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_DISCORDRPC -DUSE_STUN) +target_sources(SRB2SDL2 PRIVATE discord.c stun.c) + +set(SRB2_HAVE_THREADS ON) +target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_THREADS) + if(${SRB2_CONFIG_HAVE_DISCORDRPC}) if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) set(DISCORDRPC_FOUND ON) @@ -182,49 +131,32 @@ if(${SRB2_CONFIG_HAVE_PNG} AND ${SRB2_CONFIG_HAVE_ZLIB}) endif() endif() -if(${SRB2_CONFIG_HAVE_CURL}) - if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - set(CURL_FOUND ON) - set(CURL_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/curl/include) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - set(CURL_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/curl/lib64 -lcurl") - else() # 32-bit - set(CURL_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/curl/lib32 -lcurl") - endif() - else() - find_package(CURL) - endif() - if(${CURL_FOUND}) - set(SRB2_HAVE_CURL ON) - target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_CURL) - else() - message(WARNING "You have specified that CURL is available but it was not found. SRB2Kart may not compile correctly.") - endif() -endif() - -if(${SRB2_CONFIG_HAVE_THREADS}) - set(SRB2_HAVE_THREADS ON) - target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_THREADS) -endif() - -if(${SRB2_CONFIG_HWRENDER}) +if("${SRB2_CONFIG_HWRENDER}") target_compile_definitions(SRB2SDL2 PRIVATE -DHWRENDER) add_subdirectory(hardware) + + if("${SRB2_CONFIG_STATIC_OPENGL}") + find_package(OpenGL) + if(${OPENGL_FOUND}) + target_compile_definitions(SRB2SDL2 PRIVATE -DSTATIC_OPENGL) + else() + message(WARNING "You have specified static opengl but opengl was not found. Not setting HWRENDER.") + endif() + endif() endif() -if(${SRB2_CONFIG_HWRENDER} AND ${SRB2_CONFIG_STATIC_OPENGL}) - find_package(OpenGL) - if(${OPENGL_FOUND}) - target_compile_definitions(SRB2SDL2 PRIVATE -DHWRENDER) - target_compile_definitions(SRB2SDL2 PRIVATE -DSTATIC_OPENGL) - else() - message(WARNING "You have specified static opengl but opengl was not found. Not setting HWRENDER.") - endif() +# TODO: build this with the game +if(${CMAKE_SYSTEM} MATCHES Windows AND ${CMAKE_C_COMPILER_ID} MATCHES "GNU" AND ${SRB2_SYSTEM_BITS} EQUAL 32) + target_link_libraries(SRB2SDL2 PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/../libs/drmingw/lib/win32/libexchndl.a" + "${CMAKE_CURRENT_SOURCE_DIR}/../libs/drmingw/lib/win32/libmgwhelp.a" + ) + target_include_directories(SRB2SDL2 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../libs/drmingw/include") endif() if(${SRB2_CONFIG_USEASM}) #SRB2_ASM_FLAGS can be used to pass flags to either nasm or yasm. - if(${CMAKE_SYSTEM} MATCHES "Linux") + if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") set(SRB2_ASM_FLAGS "-DLINUX ${SRB2_ASM_FLAGS}") endif() @@ -240,7 +172,7 @@ if(${SRB2_CONFIG_USEASM}) set(SRB2_USEASM ON) target_compile_definitions(SRB2SDL2 PRIVATE -DUSEASM) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse3 -mfpmath=sse") + target_compile_options(SRB2SDL2 PRIVATE -msse3 -mfpmath=sse) target_sources(SRB2SDL2 PRIVATE ${SRB2_ASM_SOURCES} ${SRB2_NASM_SOURCES}) @@ -253,7 +185,7 @@ endif() # If using CCACHE, then force it. # https://github.com/Cockatrice/Cockatrice/pull/3052/files -if (${CMAKE_SYSTEM} MATCHES "Darwin") +if ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE) if(RULE_LAUNCH_COMPILE) MESSAGE(STATUS "Force enabling CCache usage under macOS") @@ -275,35 +207,25 @@ endif() # Compatibility flag with later versions of GCC # We should really fix our code to not need this if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -mno-ms-bitfields) + target_compile_options(SRB2SDL2 PRIVATE -mno-ms-bitfields) + target_compile_options(SRB2SDL2 PRIVATE -Wno-trigraphs) endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-absolute-value) + target_compile_options(SRB2SDL2 PRIVATE -Wno-absolute-value) endif() if(${SRB2_CONFIG_DEV_BUILD}) target_compile_definitions(SRB2SDL2 PRIVATE -DDEVELOP) endif() - -set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-trigraphs) - target_compile_definitions(SRB2SDL2 PRIVATE -DCMAKECONFIG) -#add_library(SRB2Core STATIC -# ${SRB2_CORE_SOURCES} -# ${SRB2_CORE_HEADERS} -# ${SRB2_CORE_RENDER_SOURCES} -# ${SRB2_CORE_GAME_SOURCES} -# ${SRB2_LUA_SOURCES} -# ${SRB2_LUA_HEADERS} -# ${SRB2_BLUA_SOURCES} -# ${SRB2_BLUA_HEADERS} -#) +add_subdirectory(sdl) +add_subdirectory(objects) -## strip debug symbols into separate file when using gcc. -## to be consistent with Makefile, don't generate for OS X. -if((CMAKE_COMPILER_IS_GNUCC) AND NOT (${CMAKE_SYSTEM} MATCHES Darwin)) +# strip debug symbols into separate file when using gcc. +# to be consistent with Makefile, don't generate for OS X. +if((CMAKE_COMPILER_IS_GNUCC) AND NOT ("${CMAKE_SYSTEM_NAME}" MATCHES Darwin)) if((${CMAKE_BUILD_TYPE} MATCHES Debug) OR (${CMAKE_BUILD_TYPE} MATCHES RelWithDebInfo)) if(${CMAKE_BUILD_TYPE} MATCHES Debug) set(OBJCOPY_ONLY_KEEP_DEBUG "--only-keep-debug") @@ -316,10 +238,3 @@ if((CMAKE_COMPILER_IS_GNUCC) AND NOT (${CMAKE_SYSTEM} MATCHES Darwin)) ) endif() endif() - -add_subdirectory(sdl) -add_subdirectory(objects) - -if(NOT ${SRB2_SDL2_AVAILABLE}) - message(FATAL_ERROR "There are no targets available to build an SRB2Kart executable. :(") -endif() diff --git a/src/discord.h b/src/discord.h index a6bb1134a..29a8ec596 100644 --- a/src/discord.h +++ b/src/discord.h @@ -15,7 +15,7 @@ #ifdef HAVE_DISCORDRPC -#include "discord_rpc.h" +#include extern consvar_t cv_discordrp; extern consvar_t cv_discordstreamer; diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index 60921b587..da3c650b6 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -1,303 +1,137 @@ # Declare SDL2 interface sources -if(NOT ${SRB2_CONFIG_HAVE_MIXERX}) - set(SRB2_CONFIG_SDL2_USEMIXER ON CACHE BOOL "Use SDL2_mixer or regular sdl sound") -else() - set(SRB2_CONFIG_SDL2_USEMIXER OFF) -endif() - -if(${SRB2_CONFIG_SDL2_USEMIXER}) - if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - set(SDL2_MIXER_FOUND ON) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - set(SDL2_MIXER_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/x86_64-w64-mingw32/include/SDL2) - set(SDL2_MIXER_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/x86_64-w64-mingw32/lib -lSDL2_mixer") - else() # 32-bit - set(SDL2_MIXER_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/i686-w64-mingw32/include/SDL2) - set(SDL2_MIXER_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/i686-w64-mingw32/lib -lSDL2_mixer") - endif() - else() - find_package(SDL2_mixer) - endif() - if(${SDL2_MIXER_FOUND}) - set(SRB2_HAVE_MIXER ON) - target_sources(SRB2SDL2 PRIVATE mixer_sound.c) - else() - message(WARNING "You specified that SDL2_mixer is available, but it was not found. Falling back to sdl sound.") - target_sources(SRB2SDL2 PRIVATE sdl_sound.c) - endif() -elseif(${MIXERX_FOUND}) - target_sources(SRB2SDL2 PRIVATE mixer_sound.c) -else() - target_sources(SRB2SDL2 PRIVATE sdl_sound.c) -endif() +target_sources(SRB2SDL2 PRIVATE mixer_sound.c) target_sourcefile(c) target_sources(SRB2SDL2 PRIVATE ogl_sdl.c) -if(${SRB2_CONFIG_HAVE_THREADS}) - target_sources(SRB2SDL2 PRIVATE i_threads.c) +target_sources(SRB2SDL2 PRIVATE i_threads.c) + +if(${SRB2_USEASM}) + set_source_files_properties(${SRB2_ASM_SOURCES} PROPERTIES LANGUAGE C) + set_source_files_properties(${SRB2_ASM_SOURCES} PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp") endif() -# Dependency -if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - set(SDL2_FOUND ON) - if(${SRB2_SYSTEM_BITS} EQUAL 64) - set(SDL2_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/include/SDL2) - set(SDL2_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/lib -lSDL2") - else() # 32-bit - set(SDL2_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/include/SDL2) - set(SDL2_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/lib -lSDL2") - endif() +if("${CMAKE_SYSTEM_NAME}" MATCHES Windows) + target_sources(SRB2SDL2 PRIVATE + ../win32/win_dbg.c + ../win32/Srb2win.rc) +endif() + +if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin) + set(MACOSX_BUNDLE_ICON_FILE Srb2mac.icns) + set_source_files_properties(macosx/Srb2mac.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + target_sources(SRB2SDL2 PRIVATE + macosx/mac_alert.c + macosx/mac_alert.h + macosx/mac_resources.c + macosx/mac_resources.h + macosx/Srb2mac.icns + ) +endif() + +if("${CMAKE_SYSTEM_NAME}" MATCHES Windows) + set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME srb2win) +elseif("${CMAKE_SYSTEM_NAME}" MATCHES Linux) + set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME lsdlsrb2) else() - find_package(SDL2) + set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME srb2) endif() -if(${SDL2_FOUND}) - if(${SRB2_USEASM}) - set_source_files_properties(${SRB2_ASM_SOURCES} PROPERTIES LANGUAGE C) - set_source_files_properties(${SRB2_ASM_SOURCES} PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp") - endif() +if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin) + find_library(CORE_FOUNDATION_LIBRARY "CoreFoundation") + target_link_libraries(SRB2SDL2 PRIVATE + ${CORE_FOUNDATION_LIBRARY} + ) - if(${CMAKE_SYSTEM} MATCHES Windows) - target_sources(SRB2SDL2 PRIVATE - ../win32/win_dbg.c - ../win32/Srb2win.rc) - endif() + #target_link_libraries(SRB2SDL2 PRIVATE SRB2Core) + set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") - if(${CMAKE_SYSTEM} MATCHES Darwin) - set(MACOSX_BUNDLE_ICON_FILE Srb2mac.icns) - set_source_files_properties(macosx/Srb2mac.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - target_sources(SRB2SDL2 PRIVATE - macosx/mac_alert.c - macosx/mac_alert.h - macosx/mac_resources.c - macosx/mac_resources.h - macosx/Srb2mac.icns - ) - endif() + # Configure the app bundle icon and plist properties + target_sources(SRB2SDL2 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/macosx/Srb2mac.icns") + set_target_properties(SRB2SDL2 PROPERTIES + MACOSX_BUNDLE_ICON_FILE "Srb2mac" + MACOSX_BUNDLE_BUNDLE_NAME "Dr. Robotnik's Ring Racers" + MACOSX_BUNDLE_BUNDLE_VERSION ${SRB2_VERSION} - set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME ringracers) + RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/macosx/Srb2mac.icns" + ) +endif() - if(${CMAKE_SYSTEM} MATCHES Darwin) - find_library(CORE_LIB CoreFoundation) - target_link_libraries(SRB2SDL2 PRIVATE - ${CORE_LIB} - SDL2 - SDL2_mixer - ${GME_LIBRARIES} - ${OPENMPT_LIBRARIES} - ${MIXERX_LIBRARIES} - ${PNG_LIBRARIES} - ${ZLIB_LIBRARIES} - ${OPENGL_LIBRARIES} - ${CURL_LIBRARIES} - ${DISCORDRPC_LIBRARIES} - ) - set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}" AND NOT "${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}") + target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2-static SDL2_mixer::SDL2_mixer-static) +else() + target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2 SDL2_mixer::SDL2_mixer) +endif() + +if("${CMAKE_SYSTEM_NAME}" MATCHES Linux) + target_link_libraries(SRB2SDL2 PRIVATE m rt) +endif() + +if(${SRB2_USEASM}) + if(${SRB2_CONFIG_YASM}) + set(ASM_ASSEMBLER_TEMP ${CMAKE_ASM_YASM_COMPILER}) + set(ASM_ASSEMBLER_OBJFORMAT ${CMAKE_ASM_YASM_OBJECT_FORMAT}) + set_source_files_properties(${SRB2_NASM_SOURCES} LANGUAGE ASM_YASM) else() - target_link_libraries(SRB2SDL2 PRIVATE - ${SDL2_LIBRARIES} - ${SDL2_MIXER_LIBRARIES} - ${GME_LIBRARIES} - ${OPENMPT_LIBRARIES} - ${MIXERX_LIBRARIES} - ${PNG_LIBRARIES} - ${ZLIB_LIBRARIES} - ${OPENGL_LIBRARIES} - ${CURL_LIBRARIES} - ${DISCORDRPC_LIBRARIES} - ) + set(ASM_ASSEMBLER_TEMP ${CMAKE_ASM_NASM_COMPILER}) + set(ASM_ASSEMBLER_OBJFORMAT ${CMAKE_ASM_NASM_OBJECT_FORMAT}) + set_source_files_properties(${SRB2_NASM_SOURCES} LANGUAGE ASM_NASM) + endif() +endif() - if(${CMAKE_SYSTEM} MATCHES Linux) - target_link_libraries(SRB2SDL2 PRIVATE - m - rt +if("${CMAKE_SYSTEM_NAME}" MATCHES Windows) + target_link_libraries(SRB2SDL2 PRIVATE + ws2_32 + ) + target_compile_options(SRB2SDL2 PRIVATE + -U_WINDOWS + ) +endif() + +target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER) +target_compile_definitions(SRB2SDL2 PRIVATE -DDIRECTFULLSCREEN -DHAVE_SDL) + +#### Installation #### +if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin) + install(TARGETS SRB2SDL2 + BUNDLE DESTINATION . + ) + set_property(TARGET SRB2SDL2 PROPERTY INSTALL_RPATH_USE_LINK_PATH ON) +else() + install(TARGETS SRB2SDL2 SRB2SDL2 + RUNTIME DESTINATION . + ) + if ((${CMAKE_BUILD_TYPE} MATCHES Debug) OR (${CMAKE_BUILD_TYPE} MATCHES RelWithDebInfo)) + set(SRB2_DEBUG_INSTALL OFF CACHE BOOL "Insert *.debug file into the install directory or package.") + if (${SRB2_DEBUG_INSTALL}) + install(FILES $.debug + DESTINATION . + OPTIONAL ) endif() endif() - - if(${CMAKE_SYSTEM} MATCHES Windows AND ${CMAKE_C_COMPILER_ID} MATCHES "GNU" AND ${SRB2_SYSTEM_BITS} EQUAL 32) - target_link_libraries(SRB2SDL2 PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}/../../libs/drmingw/lib/win32/libexchndl.a" - "${CMAKE_CURRENT_SOURCE_DIR}/../../libs/drmingw/lib/win32/libmgwhelp.a" - ) - target_include_directories(SRB2SDL2 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../libs/drmingw/include") - endif() - - #target_link_libraries(SRB2SDL2 PRIVATE SRB2Core) - - if(${SRB2_USEASM}) - if(${SRB2_CONFIG_YASM}) - set(ASM_ASSEMBLER_TEMP ${CMAKE_ASM_YASM_COMPILER}) - set(ASM_ASSEMBLER_OBJFORMAT ${CMAKE_ASM_YASM_OBJECT_FORMAT}) - set_source_files_properties(${SRB2_NASM_SOURCES} LANGUAGE ASM_YASM) - else() - set(ASM_ASSEMBLER_TEMP ${CMAKE_ASM_NASM_COMPILER}) - set(ASM_ASSEMBLER_OBJFORMAT ${CMAKE_ASM_NASM_OBJECT_FORMAT}) - set_source_files_properties(${SRB2_NASM_SOURCES} LANGUAGE ASM_NASM) - endif() - endif() - - set_target_properties(SRB2SDL2 PROPERTIES VERSION ${SRB2_VERSION}) - - if(${CMAKE_SYSTEM} MATCHES Windows) - target_link_libraries(SRB2SDL2 PRIVATE - ws2_32 - ) - target_compile_options(SRB2SDL2 PRIVATE - -U_WINDOWS - ) - endif() - - target_include_directories(SRB2SDL2 PRIVATE - ${SDL2_INCLUDE_DIRS} - ${SDL2_MIXER_INCLUDE_DIRS} - ${GME_INCLUDE_DIRS} - ${OPENMPT_INCLUDE_DIRS} - ${MIXERX_INCLUDE_DIRS} - ${PNG_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIRS} - ${OPENGL_INCLUDE_DIRS} - ${CURL_INCLUDE_DIRS} - ${DISCORDRPC_INCLUDE_DIRS} - ) - - if((${SRB2_HAVE_MIXER}) OR (${SRB2_HAVE_MIXERX})) - target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER) - endif() - - target_compile_definitions(SRB2SDL2 PRIVATE - -DDIRECTFULLSCREEN -DHAVE_SDL - -DHAVE_THREADS - ) - - #### Installation #### - if(${CMAKE_SYSTEM} MATCHES Darwin) - install(TARGETS SRB2SDL2 - BUNDLE DESTINATION . - ) - else() - install(TARGETS SRB2SDL2 SRB2SDL2 - RUNTIME DESTINATION . - ) - if ((${CMAKE_BUILD_TYPE} MATCHES Debug) OR (${CMAKE_BUILD_TYPE} MATCHES RelWithDebInfo)) - set(SRB2_DEBUG_INSTALL OFF CACHE BOOL "Insert *.debug file into the install directory or package.") - if (${SRB2_DEBUG_INSTALL}) - install(FILES $.debug - DESTINATION . - OPTIONAL - ) - endif() - endif() - endif() - - if(${CMAKE_SYSTEM} MATCHES Windows) - set(win_extra_dll_list "") - macro(getwinlib dllname defaultname) - if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) - if (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles") - if(${SRB2_SYSTEM_BITS} EQUAL 64) - find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" - HINTS ${CMAKE_SOURCE_DIR}/libs/dll-binaries/x86_64 - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/bin - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/x86_64-w64-mingw32/bin - HINTS ${CMAKE_SOURCE_DIR}/libs/libopenmpt/bin/x86_64/mingw - HINTS ${CMAKE_SOURCE_DIR}/libs/SDLMixerX/x86_64-w64-mingw32/bin - ) - else() - find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" - HINTS ${CMAKE_SOURCE_DIR}/libs/dll-binaries/i686 - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/bin - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/i686-w64-mingw32/bin - HINTS ${CMAKE_SOURCE_DIR}/libs/libopenmpt/bin/x86/mingw - HINTS ${CMAKE_SOURCE_DIR}/libs/SDLMixerX/i686-w64-mingw32/bin - ) - endif() - else() - if(${SRB2_SYSTEM_BITS} EQUAL 64) - find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" - HINTS ${CMAKE_SOURCE_DIR}/libs/dll-binaries/x86_64 - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/lib/x64 - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/lib/x64 - HINTS ${CMAKE_SOURCE_DIR}/libs/libopenmpt/bin/x86_64/mingw - HINTS ${CMAKE_SOURCE_DIR}/libs/SDLMixerX/x86_64-w64-mingw32/bin - ) - else() - find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" - HINTS ${CMAKE_SOURCE_DIR}/libs/dll-binaries/i686 - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/lib/x86 - HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/lib/x86 - HINTS ${CMAKE_SOURCE_DIR}/libs/libopenmpt/bin/x86/mingw - HINTS ${CMAKE_SOURCE_DIR}/libs/SDLMixerX/i686-w64-mingw32/bin - ) - endif() - endif() - - list(APPEND win_extra_dll_list ${SRB2_SDL2_DLL_${dllname}}) - else() - find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}") - list(APPEND win_extra_dll_list ${SRB2_SDL2_DLL_${dllname}}) - endif() - endmacro() - getwinlib(SDL2 "SDL2.dll") - if(${SRB2_CONFIG_SDL2_USEMIXER}) - getwinlib(SDL2_mixer "SDL2_mixer.dll") - getwinlib(libogg_0 "libogg-0.dll") - getwinlib(libvorbis_0 "libvorbis-0.dll") - getwinlib(libvorbisfile_3 "libvorbisfile-3.dll") - endif() - if(${SRB2_CONFIG_HAVE_GME}) - getwinlib(libgme "libgme.dll") - endif() - if(${SRB2_CONFIG_HAVE_OPENMPT}) - getwinlib(libopenmpt "libopenmpt.dll") - endif() - if(${SRB2_CONFIG_HAVE_MIXERX}) - getwinlib(SDL2_mixer_ext "SDL2_mixer_ext.dll") - getwinlib(libfluidsynth-2 "libfluidsynth-2.dll") - getwinlib(libgcc_s_sjlj-1 "libgcc_s_sjlj-1.dll") - getwinlib(libstdc++-6 "libstdc++-6.dll") - endif() - - if(${SRB2_CONFIG_HAVE_DISCORDRPC}) - getwinlib(discord-rpc "discord-rpc.dll") - endif() - - install(PROGRAMS - ${win_extra_dll_list} - DESTINATION . - ) - - # We also want to copy those DLLs to build directories on MSVC. - # So we'll add a post_build step. - copy_files_to_build_dir(SRB2SDL2 win_extra_dll_list) - endif() - - - # Mac bundle fixup - # HACK: THIS IS IMPORTANT! See the escaped \${CMAKE_INSTALL_PREFIX}? This - # makes it so that var is evaluated LATER during cpack, not right now! - # This fixes the quirk where the bundled libraries don't land in the final package - # https://cmake.org/pipermail/cmake/2011-March/043532.html - # - # HOWEVER: ${CPACK_PACKAGE_DESCRIPTION_SUMMARY} is NOT escaped, because that var - # is only available to us at this step. Read the link: ${CMAKE_INSTALL_PREFIX} at - # this current step points to the CMAKE build folder, NOT the folder that CPACK uses. - # Therefore, it makes sense to escape that var, but not the other. - if(${CMAKE_SYSTEM} MATCHES Darwin) - install(CODE " - include(BundleUtilities) - fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_DESCRIPTION_SUMMARY}.app\" - \"\" - /Library/Frameworks - )" - ) - endif() - - set(SRB2_SDL2_AVAILABLE YES PARENT_SCOPE) -else() - message(WARNING "SDL2 was not found, so the SDL2 target will not be available.") - set(SRB2_SDL2_AVAILABLE NO PARENT_SCOPE) endif() + +# Mac bundle fixup +# HACK: THIS IS IMPORTANT! See the escaped \${CMAKE_INSTALL_PREFIX}? This +# makes it so that var is evaluated LATER during cpack, not right now! +# This fixes the quirk where the bundled libraries don't land in the final package +# https://cmake.org/pipermail/cmake/2011-March/043532.html +# +# HOWEVER: ${CPACK_PACKAGE_DESCRIPTION_SUMMARY} is NOT escaped, because that var +# is only available to us at this step. Read the link: ${CMAKE_INSTALL_PREFIX} at +# this current step points to the CMAKE build folder, NOT the folder that CPACK uses. +# Therefore, it makes sense to escape that var, but not the other. +if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin) + install(CODE " + include(BundleUtilities) + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_DESCRIPTION_SUMMARY}.app\" + \"\" + /Library/Frameworks + )" + ) +endif() + +set(SRB2_SDL2_AVAILABLE YES PARENT_SCOPE) diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c index d50bb49b5..5c4be227a 100644 --- a/src/sdl/mixer_sound.c +++ b/src/sdl/mixer_sound.c @@ -80,7 +80,7 @@ write netcode into the sound code, OKAY? #endif #ifdef HAVE_GME -#include "gme/gme.h" +#include #define GME_TREBLE 5.0f #define GME_BASS 1.0f #endif // HAVE_GME diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt new file mode 100644 index 000000000..7dfd9ffd5 --- /dev/null +++ b/thirdparty/CMakeLists.txt @@ -0,0 +1,512 @@ +macro(export) +endmacro() + +if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES) + set(SRB2_INTERNAL_LIBRARY_TYPE SHARED) + set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES OFF) +else() + set(SRB2_INTERNAL_LIBRARY_TYPE STATIC) + set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES ON) +endif() + + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME SDL2 + VERSION 2.24.2 + URL "https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.24.2.zip" + EXCLUDE_FROM_ALL ON + OPTIONS + "BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" + "SDL_SHARED ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" + "SDL_STATIC ${NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" + "SDL_TEST OFF" + "SDL2_DISABLE_SDL2MAIN ON" + "SDL2_DISABLE_INSTALL ON" + ) +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME SDL2_mixer + VERSION 2.6.2 + URL "https://github.com/libsdl-org/SDL_mixer/archive/refs/tags/release-2.6.2.zip" + EXCLUDE_FROM_ALL ON + OPTIONS + "BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" + "SDL2MIXER_INSTALL OFF" + "SDL2MIXER_DEPS_SHARED OFF" + "SDL2MIXER_SAMPLES OFF" + "SDL2MIXER_VENDORED ON" + "SDL2MIXER_FLAC ON" + "SDL2MIXER_FLAC_LIBFLAC OFF" + "SDL2MIXER_FLAC_DRFLAC ON" + "SDL2MIXER_MOD OFF" + "SDL2MIXER_MP3 ON" + "SDL2MIXER_MP3_DRMP3 ON" + "SDL2MIXER_MIDI ON" + "SDL2MIXER_OPUS OFF" + "SDL2MIXER_VORBIS STB" + "SDL2MIXER_WAVE ON" + ) +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME ZLIB + VERSION 1.2.13 + URL "https://github.com/madler/zlib/archive/refs/tags/v1.2.13.zip" + EXCLUDE_FROM_ALL + OPTIONS + # The assembly optimizations are unmaintained and slated to be removed + "ASM686 Off" + "AMD64 Off" + "SKIP_INSTALL_ALL ON" + ) + file(MAKE_DIRECTORY "${zlib_BINARY_DIR}/include") + file(COPY "${zlib_SOURCE_DIR}/zlib.h" DESTINATION "${zlib_BINARY_DIR}/include") + file(COPY "${zlib_BINARY_DIR}/zconf.h" DESTINATION "${zlib_BINARY_DIR}/include") + # honestly this should probably be built like png is + set_target_properties(zlib PROPERTIES EXCLUDE_FROM_ALL ON) + set_target_properties(minigzip PROPERTIES EXCLUDE_FROM_ALL ON) + set_target_properties(example PROPERTIES EXCLUDE_FROM_ALL ON) + # zlib cmake also adds these 64 targets separately + if(HAVE_OFF64_T) + set_target_properties(minigzip64 PROPERTIES EXCLUDE_FROM_ALL ON) + set_target_properties(example64 PROPERTIES EXCLUDE_FROM_ALL ON) + endif() + target_include_directories(zlib INTERFACE "${zlib_BINARY_DIR}/include") + target_include_directories(zlibstatic INTERFACE "${zlib_BINARY_DIR}/include") + if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES) + add_library(ZLIB::ZLIB ALIAS zlib) + else() + add_library(ZLIB::ZLIB ALIAS zlibstatic) + endif() +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME png + VERSION 1.6.38 + URL "https://github.com/glennrp/libpng/archive/refs/tags/v1.6.38.zip" + # png cmake build is broken on msys/mingw32 + DOWNLOAD_ONLY YES + ) + + if(png_ADDED) + # Since png's cmake build is broken, we're going to create a target manually + set( + PNG_SOURCES + + png.h + pngconf.h + + pngpriv.h + pngdebug.h + pnginfo.h + pngstruct.h + + png.c + pngerror.c + pngget.c + pngmem.c + pngpread.c + pngread.c + pngrio.c + pngrtran.c + pngrutil.c + pngset.c + pngtrans.c + pngwio.c + pngwrite.c + pngwtran.c + pngwutil.c + ) + list(TRANSFORM PNG_SOURCES PREPEND "${png_SOURCE_DIR}/") + + add_custom_command( + OUTPUT "${png_BINARY_DIR}/include/png.h" "${png_BINARY_DIR}/include/pngconf.h" + COMMAND ${CMAKE_COMMAND} -E copy "${png_SOURCE_DIR}/png.h" "${png_SOURCE_DIR}/pngconf.h" "${png_BINARY_DIR}/include" + DEPENDS "${png_SOURCE_DIR}/png.h" "${png_SOURCE_DIR}/pngconf.h" + VERBATIM + ) + add_custom_command( + OUTPUT "${png_BINARY_DIR}/include/pnglibconf.h" + COMMAND ${CMAKE_COMMAND} -E copy "${png_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt" "${png_BINARY_DIR}/include/pnglibconf.h" + DEPENDS "${png_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt" + VERBATIM + ) + list( + APPEND PNG_SOURCES + "${png_BINARY_DIR}/include/png.h" + "${png_BINARY_DIR}/include/pngconf.h" + "${png_BINARY_DIR}/include/pnglibconf.h" + ) + add_library(png "${SRB2_INTERNAL_LIBRARY_TYPE}" ${PNG_SOURCES}) + + # Disable ARM NEON since having it automatic breaks libpng external build on clang for some reason + target_compile_definitions(png PRIVATE -DPNG_ARM_NEON_OPT=0) + + # The png includes need to be available to consumers + target_include_directories(png PUBLIC "${png_BINARY_DIR}/include") + + # ... and these also need to be present only for png build + target_include_directories(png PRIVATE "${zlib_SOURCE_DIR}") + target_include_directories(png PRIVATE "${zlib_BINARY_DIR}") + target_include_directories(png PRIVATE "${png_BINARY_DIR}") + + target_link_libraries(png PRIVATE ZLIB::ZLIB) + add_library(PNG::PNG ALIAS png) + endif() +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + set( + internal_curl_options + + "BUILD_CURL_EXE OFF" + "BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" + "CURL_DISABLE_TESTS ON" + "HTTP_ONLY ON" + "CURL_DISABLE_CRYPTO_AUTH ON" + "CURL_DISABLE_NTLM ON" + "ENABLE_MANUAL OFF" + "ENABLE_THREADED_RESOLVER OFF" + "CURL_USE_LIBPSL OFF" + "CURL_USE_LIBSSH2 OFF" + "USE_LIBIDN2 OFF" + "CURL_ENABLE_EXPORT_TARGET OFF" + ) + if(${CMAKE_SYSTEM} MATCHES Windows) + list(APPEND internal_curl_options "CURL_USE_OPENSSL OFF") + list(APPEND internal_curl_options "CURL_USE_SCHANNEL ON") + endif() + if(${CMAKE_SYSTEM} MATCHES Darwin) + list(APPEND internal_curl_options "CURL_USE_OPENSSL OFF") + list(APPEND internal_curl_options "CURL_USE_SECTRANSP ON") + endif() + if(${CMAKE_SYSTEM} MATCHES Linux) + list(APPEND internal_curl_options "CURL_USE_OPENSSL ON") + endif() + + CPMAddPackage( + NAME curl + VERSION 7.86.0 + URL "https://github.com/curl/curl/archive/refs/tags/curl-7_86_0.zip" + EXCLUDE_FROM_ALL ON + OPTIONS ${internal_curl_options} + ) +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME openmpt + VERSION 0.4.30 + URL "https://github.com/OpenMPT/openmpt/archive/refs/tags/libopenmpt-0.4.30.zip" + DOWNLOAD_ONLY ON + ) + + if(openmpt_ADDED) + set( + openmpt_SOURCES + + # minimp3 + # -DMPT_WITH_MINIMP3 + include/minimp3/minimp3.c + + common/mptStringParse.cpp + common/mptLibrary.cpp + common/Logging.cpp + common/Profiler.cpp + common/version.cpp + common/mptCPU.cpp + common/ComponentManager.cpp + common/mptOS.cpp + common/serialization_utils.cpp + common/mptStringFormat.cpp + common/FileReader.cpp + common/mptWine.cpp + common/mptPathString.cpp + common/mptAlloc.cpp + common/mptUUID.cpp + common/mptTime.cpp + common/mptString.cpp + common/mptFileIO.cpp + common/mptStringBuffer.cpp + common/mptRandom.cpp + common/mptIO.cpp + common/misc_util.cpp + + common/mptCRC.h + common/mptLibrary.h + common/mptIO.h + common/version.h + common/stdafx.h + common/ComponentManager.h + common/Endianness.h + common/mptStringFormat.h + common/mptMutex.h + common/mptUUID.h + common/mptExceptionText.h + common/BuildSettings.h + common/mptAlloc.h + common/mptTime.h + common/FileReaderFwd.h + common/Logging.h + common/mptException.h + common/mptWine.h + common/mptStringBuffer.h + common/misc_util.h + common/mptBaseMacros.h + common/mptMemory.h + common/mptFileIO.h + common/serialization_utils.h + common/mptSpan.h + common/mptThread.h + common/FlagSet.h + common/mptString.h + common/mptStringParse.h + common/mptBaseUtils.h + common/mptRandom.h + common/CompilerDetect.h + common/FileReader.h + common/mptAssert.h + common/mptPathString.h + common/Profiler.h + common/mptOS.h + common/mptBaseTypes.h + common/mptCPU.h + common/mptBufferIO.h + common/versionNumber.h + + soundlib/WAVTools.cpp + soundlib/ITTools.cpp + soundlib/AudioCriticalSection.cpp + soundlib/Load_stm.cpp + soundlib/MixerLoops.cpp + soundlib/Load_dbm.cpp + soundlib/ModChannel.cpp + soundlib/Load_gdm.cpp + soundlib/Snd_fx.cpp + soundlib/Load_mid.cpp + soundlib/mod_specifications.cpp + soundlib/Snd_flt.cpp + soundlib/Load_psm.cpp + soundlib/Load_far.cpp + soundlib/patternContainer.cpp + soundlib/Load_med.cpp + soundlib/Load_dmf.cpp + soundlib/Paula.cpp + soundlib/modcommand.cpp + soundlib/Message.cpp + soundlib/SoundFilePlayConfig.cpp + soundlib/Load_uax.cpp + soundlib/plugins/PlugInterface.cpp + soundlib/plugins/LFOPlugin.cpp + soundlib/plugins/PluginManager.cpp + soundlib/plugins/DigiBoosterEcho.cpp + soundlib/plugins/dmo/DMOPlugin.cpp + soundlib/plugins/dmo/Flanger.cpp + soundlib/plugins/dmo/Distortion.cpp + soundlib/plugins/dmo/ParamEq.cpp + soundlib/plugins/dmo/Gargle.cpp + soundlib/plugins/dmo/I3DL2Reverb.cpp + soundlib/plugins/dmo/Compressor.cpp + soundlib/plugins/dmo/WavesReverb.cpp + soundlib/plugins/dmo/Echo.cpp + soundlib/plugins/dmo/Chorus.cpp + soundlib/Load_ams.cpp + soundlib/tuningbase.cpp + soundlib/ContainerUMX.cpp + soundlib/Load_ptm.cpp + soundlib/ContainerXPK.cpp + soundlib/SampleFormatMP3.cpp + soundlib/tuning.cpp + soundlib/Sndfile.cpp + soundlib/ContainerMMCMP.cpp + soundlib/Load_amf.cpp + soundlib/Load_669.cpp + soundlib/modsmp_ctrl.cpp + soundlib/Load_mtm.cpp + soundlib/OggStream.cpp + soundlib/Load_plm.cpp + soundlib/Tables.cpp + soundlib/Load_c67.cpp + soundlib/Load_mod.cpp + soundlib/Load_sfx.cpp + soundlib/Sndmix.cpp + soundlib/load_j2b.cpp + soundlib/ModSequence.cpp + soundlib/SampleFormatFLAC.cpp + soundlib/ModInstrument.cpp + soundlib/Load_mo3.cpp + soundlib/ModSample.cpp + soundlib/Dlsbank.cpp + soundlib/Load_itp.cpp + soundlib/UpgradeModule.cpp + soundlib/MIDIMacros.cpp + soundlib/ContainerPP20.cpp + soundlib/RowVisitor.cpp + soundlib/Load_imf.cpp + soundlib/SampleFormatVorbis.cpp + soundlib/Load_dsm.cpp + soundlib/Load_mt2.cpp + soundlib/MixerSettings.cpp + soundlib/S3MTools.cpp + soundlib/Load_xm.cpp + soundlib/MIDIEvents.cpp + soundlib/pattern.cpp + soundlib/Load_digi.cpp + soundlib/Load_s3m.cpp + soundlib/tuningCollection.cpp + soundlib/SampleIO.cpp + soundlib/Dither.cpp + soundlib/Load_mdl.cpp + soundlib/OPL.cpp + soundlib/WindowedFIR.cpp + soundlib/SampleFormats.cpp + soundlib/Load_wav.cpp + soundlib/Load_it.cpp + soundlib/UMXTools.cpp + soundlib/Load_stp.cpp + soundlib/Load_okt.cpp + soundlib/Load_ult.cpp + soundlib/MixFuncTable.cpp + soundlib/SampleFormatOpus.cpp + soundlib/Fastmix.cpp + soundlib/Tagging.cpp + soundlib/ITCompression.cpp + soundlib/Load_dtm.cpp + soundlib/MPEGFrame.cpp + soundlib/XMTools.cpp + soundlib/SampleFormatMediaFoundation.cpp + soundlib/InstrumentExtensions.cpp + + soundlib/MixerInterface.h + soundlib/SoundFilePlayConfig.h + soundlib/ModSample.h + soundlib/MIDIEvents.h + soundlib/ModSampleCopy.h + soundlib/patternContainer.h + soundlib/ChunkReader.h + soundlib/ITCompression.h + soundlib/Dither.h + soundlib/S3MTools.h + soundlib/MPEGFrame.h + soundlib/WAVTools.h + soundlib/mod_specifications.h + soundlib/ITTools.h + soundlib/RowVisitor.h + soundlib/plugins/PluginMixBuffer.h + soundlib/plugins/PluginStructs.h + soundlib/plugins/LFOPlugin.h + soundlib/plugins/PlugInterface.h + soundlib/plugins/DigiBoosterEcho.h + soundlib/plugins/OpCodes.h + soundlib/plugins/dmo/Echo.h + soundlib/plugins/dmo/I3DL2Reverb.h + soundlib/plugins/dmo/WavesReverb.h + soundlib/plugins/dmo/ParamEq.h + soundlib/plugins/dmo/Gargle.h + soundlib/plugins/dmo/DMOPlugin.h + soundlib/plugins/dmo/Chorus.h + soundlib/plugins/dmo/Compressor.h + soundlib/plugins/dmo/Distortion.h + soundlib/plugins/dmo/Flanger.h + soundlib/plugins/PluginManager.h + soundlib/SampleIO.h + soundlib/Container.h + soundlib/ModSequence.h + soundlib/UMXTools.h + soundlib/Message.h + soundlib/modcommand.h + soundlib/XMTools.h + soundlib/Snd_defs.h + soundlib/MixFuncTable.h + soundlib/pattern.h + soundlib/modsmp_ctrl.h + soundlib/Tagging.h + soundlib/tuningcollection.h + soundlib/Mixer.h + soundlib/FloatMixer.h + soundlib/AudioCriticalSection.h + soundlib/Tables.h + soundlib/tuningbase.h + soundlib/WindowedFIR.h + soundlib/Sndfile.h + soundlib/Paula.h + soundlib/ModInstrument.h + soundlib/Dlsbank.h + soundlib/IntMixer.h + soundlib/OPL.h + soundlib/Resampler.h + soundlib/ModChannel.h + soundlib/MixerSettings.h + soundlib/AudioReadTarget.h + soundlib/MixerLoops.h + soundlib/tuning.h + soundlib/MIDIMacros.h + soundlib/OggStream.h + soundlib/Loaders.h + soundlib/BitReader.h + soundlib/opal.h + + sounddsp/AGC.cpp + sounddsp/EQ.cpp + sounddsp/DSP.cpp + sounddsp/Reverb.cpp + sounddsp/Reverb.h + sounddsp/EQ.h + sounddsp/DSP.h + sounddsp/AGC.h + + libopenmpt/libopenmpt_c.cpp + libopenmpt/libopenmpt_cxx.cpp + libopenmpt/libopenmpt_impl.cpp + libopenmpt/libopenmpt_ext_impl.cpp + ) + list(TRANSFORM openmpt_SOURCES PREPEND "${openmpt_SOURCE_DIR}/") + + # -DLIBOPENMPT_BUILD + configure_file("openmpt_svn_version.h" "svn_version.h") + add_library(openmpt "${SRB2_INTERNAL_LIBRARY_TYPE}" ${openmpt_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/svn_version.h) + target_compile_features(openmpt PRIVATE cxx_std_11) + target_compile_definitions(openmpt PRIVATE -DLIBOPENMPT_BUILD) + + target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/common") + target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/src") + target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/include") + target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}") + target_include_directories(openmpt PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") + + # I wish this wasn't necessary, but it is + target_include_directories(openmpt PUBLIC "${openmpt_SOURCE_DIR}") + endif() +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME libgme + VERSION 0.6.3 + URL "https://bitbucket.org/mpyne/game-music-emu/get/e76bdc0cb916e79aa540290e6edd0c445879d3ba.zip" + EXCLUDE_FROM_ALL ON + OPTIONS + "BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" + "ENABLE_UBSAN OFF" + ) + target_compile_features(gme PRIVATE cxx_std_11) + target_link_libraries(gme PRIVATE ZLIB::ZLIB) +endif() + +if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") + CPMAddPackage( + NAME DiscordRPC + VERSION 3.4.0 + URL "https://github.com/discord/discord-rpc/archive/refs/tags/v3.4.0.zip" + EXCLUDE_FROM_ALL ON + OPTIONS + "BUILD_EXAMPLES OFF" + ) + target_include_directories(discord-rpc INTERFACE "${DiscordRPC_SOURCE_DIR}/include") + add_library(DiscordRPC::DiscordRPC ALIAS discord-rpc) +endif() \ No newline at end of file diff --git a/thirdparty/openmpt_svn_version.h b/thirdparty/openmpt_svn_version.h new file mode 100644 index 000000000..a45ed9f22 --- /dev/null +++ b/thirdparty/openmpt_svn_version.h @@ -0,0 +1,10 @@ + +#pragma once +#define OPENMPT_VERSION_SVNVERSION "17963" +#define OPENMPT_VERSION_REVISION 17963 +#define OPENMPT_VERSION_DIRTY 0 +#define OPENMPT_VERSION_MIXEDREVISIONS 0 +#define OPENMPT_VERSION_URL "https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.32" +#define OPENMPT_VERSION_DATE "2022-09-25T14:19:05.052596Z" +#define OPENMPT_VERSION_IS_PACKAGE 1 + From 1dd25181a9950e6f8f8219a6de20ee37297bf7e4 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 6 Nov 2022 02:29:54 -0800 Subject: [PATCH 17/66] cmake: use SRB2_SDL2_EXE_NAME, append git branch, add SRB2_SDL2_EXE_SUFFIX --- CMakeLists.txt | 11 +++++++++++ src/sdl/CMakeLists.txt | 8 -------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7dc38d525..98bf78c51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,6 +129,7 @@ set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") # Set EXE names so the assets CMakeLists can refer to its target set(SRB2_SDL2_EXE_NAME ringracers CACHE STRING "Executable binary output name") +set(SRB2_SDL2_EXE_SUFFIX "" CACHE STRING "Optional executable suffix, separated by an underscore") include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) @@ -145,3 +146,13 @@ git_working_tree_dirty(SRB2_COMP_UNCOMMITTED "${CMAKE_SOURCE_DIR}") set(SRB2_COMP_BRANCH "${SRB2_GIT_BRANCH}") set(SRB2_COMP_REVISION "${SRB2_COMP_COMMIT}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h) + + +list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_NAME}) +if(NOT "${SRB2_GIT_BRANCH}" STREQUAL "master") + list(APPEND EXE_NAME_PARTS ${SRB2_GIT_BRANCH}) +endif() +list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_SUFFIX}) + +list(JOIN EXE_NAME_PARTS "_" EXE_NAME) +set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME ${EXE_NAME}) diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index da3c650b6..dd8d304a4 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -31,14 +31,6 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin) ) endif() -if("${CMAKE_SYSTEM_NAME}" MATCHES Windows) - set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME srb2win) -elseif("${CMAKE_SYSTEM_NAME}" MATCHES Linux) - set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME lsdlsrb2) -else() - set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME srb2) -endif() - if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin) find_library(CORE_FOUNDATION_LIBRARY "CoreFoundation") target_link_libraries(SRB2SDL2 PRIVATE From 04674ca93b26d2f32d20176025e56f1df37a7653 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sun, 6 Nov 2022 09:56:44 -0600 Subject: [PATCH 18/66] Include exchndl with <> --- src/sdl/i_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c index de3ea3c9a..bc1200788 100644 --- a/src/sdl/i_main.c +++ b/src/sdl/i_main.c @@ -66,7 +66,7 @@ char logfilename[1024]; #endif #if defined (_WIN32) -#include "exchndl.h" +#include #endif #if defined (_WIN32) From f0338d22d739358e1db1dd8b8ee750a282fd7431 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 5 Nov 2022 19:26:01 -0500 Subject: [PATCH 19/66] cmake: Use TheLartians' Ccache script on non-Win32 Improves ccache support for Xcode --- CMakeLists.txt | 28 +++++++++++++++++++--------- cmake/launch-c.in | 3 --- cmake/launch-cxx.in | 3 --- 3 files changed, 19 insertions(+), 15 deletions(-) delete mode 100644 cmake/launch-c.in delete mode 100644 cmake/launch-cxx.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 98bf78c51..e7bced80e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,16 +69,26 @@ cmake_dependent_option( option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON) option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF) -# Enable CCache early -set(SRB2_USE_CCACHE OFF CACHE BOOL "Use CCache") -if (${SRB2_USE_CCACHE}) - find_program(CCACHE_PROGRAM ccache) - if(CCACHE_PROGRAM) - message(STATUS "Found CCache: ${CCACHE_PROGRAM}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") - else() - message(WARNING "You have specified to use CCACHE but it was not found. Object files will not be cached.") +# Enable CCache +# (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options) +if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows) + option(USE_CCACHE "Enable ccache support" OFF) + + if(USE_CCACHE) + find_program(CCACHE_TOOL_PATH ccache) + if(CCACHE_TOOL_PATH) + set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE) + set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE) + else() + message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)") + endif() endif() +else() + CPMAddPackage( + NAME Ccache.cmake + GITHUB_REPOSITORY TheLartians/Ccache.cmake + VERSION 1.2 + ) endif() # Dependencies diff --git a/cmake/launch-c.in b/cmake/launch-c.in deleted file mode 100644 index c60558232..000000000 --- a/cmake/launch-c.in +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -export CCACHE_CPP2=true -exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@" diff --git a/cmake/launch-cxx.in b/cmake/launch-cxx.in deleted file mode 100644 index c60558232..000000000 --- a/cmake/launch-cxx.in +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -export CCACHE_CPP2=true -exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@" From d31037abc99c42f93fce01e205f524eecf07764c Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sun, 6 Nov 2022 10:34:23 -0600 Subject: [PATCH 20/66] cmake: Remove asset hashing, CMAKE_ASSETS_DIR Simplifies build setup for cmake. # Conflicts: # assets/CMakeLists.txt # src/config.h.in # src/sdl/i_system.c --- CMakeLists.txt | 1 + assets/CMakeLists.txt | 93 ++++++++++++++++--------------------------- src/config.h.in | 14 +------ src/sdl/i_system.c | 12 ------ 4 files changed, 37 insertions(+), 83 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e7bced80e..170feb45c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,6 +68,7 @@ cmake_dependent_option( ) option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON) option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF) +set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.") # Enable CCache # (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options) diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index 1f94d1446..42243c9c1 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -1,76 +1,53 @@ ## Assets Target Configuration ## -# For prepending the current source path, later -FUNCTION(PREPEND var prefix) - SET(listVar "") - FOREACH(f ${ARGN}) - LIST(APPEND listVar "${prefix}/${f}") - ENDFOREACH(f) - SET(${var} "${listVar}" PARENT_SCOPE) -ENDFUNCTION(PREPEND) +if(${CMAKE_SYSTEM} MATCHES Linux) + # Asset installation isn't part of the Linux target + return() +endif() -set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer" - CACHE STRING "Path to directory that contains all asset files for the installer.") +if("${SRB2_CONFIG_ASSET_DIRECTORY}" STREQUAL "") + message(WARNING "SRB2_CONFIG_ASSET_DIRECTORY is not set, so installation will not contain data files.") + return() +endif() -set(SRB2_ASSET_INSTALL ON - CACHE BOOL "Insert asset files into the install directory or package.") +get_filename_component(SRB2_ASSET_DIRECTORY_ABSOLUTE "${SRB2_CONFIG_ASSET_DIRECTORY}" ABSOLUTE) + +set(SRB2_ASSETS_DOCS + "README.txt" + "HISTORY.txt" + "README-SDL.txt" + "LICENSE.txt" + "LICENSE-3RD-PARTY.txt" +) +list(TRANSFORM SRB2_ASSETS_DOCS PREPEND "/") +list(TRANSFORM SRB2_ASSETS_DOCS PREPEND "${SRB2_ASSET_DIRECTORY_ABSOLUTE}") #################### # POST-V2.2 NOTE: Do not forget to add patch.pk3 to the end of this list! #################### -set(SRB2_ASSET_HASHED -"main.kart;\ -gfx.pk3;\ -textures.pk3;\ -chars.pk3;\ -maps.pk3;\ -followers.pk3;\ -patch.pk3" - CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!" +set(SRB2_ASSETS_GAME + "main.kart" + "gfx.pk3" + "textures.pk3" + "chars.pk3" + "maps.pk3" + "followers.pk3" + "patch.pk3" ) +list(TRANSFORM SRB2_ASSETS_GAME PREPEND "/") +list(TRANSFORM SRB2_ASSETS_GAME PREPEND "${SRB2_ASSET_DIRECTORY_ABSOLUTE}") -set(SRB2_ASSET_DOCS -"README.txt;\ -HISTORY.txt;\ -LICENSE.txt;\ -LICENSE-3RD-PARTY.txt;\ -README-SDL.txt" - CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!" -) - -PREPEND(SRB2_ASSET_DOCS ${SRB2_ASSET_DIRECTORY} ${SRB2_ASSET_DOCS}) - -foreach(SRB2_ASSET ${SRB2_ASSET_HASHED}) - file(MD5 ${SRB2_ASSET_DIRECTORY}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH") - set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE) -endforeach() +set(SRB2_ASSETS ${SRB2_ASSET_DOCS} ${SRB2_ASSETS_GAME}) # Installation if(${CMAKE_SYSTEM} MATCHES Darwin) get_target_property(outname SRB2SDL2 OUTPUT_NAME) - if(${SRB2_ASSET_INSTALL}) - install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/" - DESTINATION "${outname}.app/Contents/Resources" - ) - endif() - # Always install the doc files, even in non-asset packages. - install(FILES ${SRB2_ASSET_DOCS} - DESTINATION . - OPTIONAL - ) + install(FILES ${SRB2_ASSETS} DESTINATION "${outname}.app/Contents/Resources") + install(DIRECTORY "${SRB2_ASSET_DIRECTORY_ABSOLUTE}/models" DESTINATION "${outname}.app/Contents/Resources") + install(FILES ${SRB2_ASSETS_DOCS} DESTINATION .) else() - if(${SRB2_ASSET_INSTALL}) - install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/" - DESTINATION . - ) - # Docs are assumed to be located in SRB2_ASSET_DIRECTORY, so don't install them in their own call. - else() - # Always install the doc files, even in non-asset packages. - install(FILES ${SRB2_ASSET_DOCS} - DESTINATION . - OPTIONAL - ) - endif() + install(FILES ${SRB2_ASSETS} DESTINATION .) + install(DIRECTORY "${SRB2_ASSET_DIRECTORY_ABSOLUTE}/models" DESTINATION .) endif() diff --git a/src/config.h.in b/src/config.h.in index c27628ffd..d7b67cdce 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -11,15 +11,6 @@ #ifdef CMAKECONFIG -#define ASSET_HASH_MAIN_KART "${SRB2_ASSET_main.kart_HASH}" -#define ASSET_HASH_GFX_PK3 "${SRB2_ASSET_gfx.pk3_HASH}" -#define ASSET_HASH_TEXTURES_PK3 "${SRB2_ASSET_textures.pk3_HASH}" -#define ASSET_HASH_CHARS_PK3 "${SRB2_ASSET_chars.pk3_HASH}" -#define ASSET_HASH_MAPS_PK3 "${SRB2_ASSET_maps.pk3_HASH}" -#ifdef USE_PATCH_FILE -#define ASSET_HASH_PATCH_PK3 "${SRB2_ASSET_patch.pk3_HASH}" -#endif - #define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}" #define SRB2_COMP_BRANCH "${SRB2_COMP_BRANCH}" // This is done with configure_file instead of defines in order to avoid @@ -29,9 +20,7 @@ #define COMPVERSION_UNCOMMITTED #endif -#define CMAKE_ASSETS_DIR "${CMAKE_SOURCE_DIR}/assets" - -#else +#endif /* Manually defined asset hashes for non-CMake builds * Last updated 2019 / 01 / 18 - Kart v1.0.2 - Main assets @@ -48,4 +37,3 @@ #endif #endif -#endif \ No newline at end of file diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index db4296f79..707d20427 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -2273,18 +2273,6 @@ static const char *locateWad(void) } #endif - -#ifdef CMAKECONFIG -#ifndef NDEBUG - I_OutputMsg(","CMAKE_ASSETS_DIR); - strcpy(returnWadPath, CMAKE_ASSETS_DIR); - if (isWadPathOk(returnWadPath)) - { - return returnWadPath; - } -#endif -#endif - #ifdef __APPLE__ OSX_GetResourcesPath(returnWadPath); I_OutputMsg(",%s", returnWadPath); From 146344e7de9739b954ec0c9eb29000bba129046e Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 5 Nov 2022 02:56:50 -0500 Subject: [PATCH 21/66] cmake: Port warning configuration from make Adds SRB2_CONFIG_ERRORMODE to replace ERRORMODE too. --- CMakeLists.txt | 1 + src/CMakeLists.txt | 134 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 132 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 170feb45c..d72ca76fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,6 +68,7 @@ cmake_dependent_option( ) option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON) option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF) +option(SRB2_CONFIG_ERRORMODE "Compile C code with warnings treated as errors. (C++ warnings are always treated as errors)" OFF) set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.") # Enable CCache diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 172e10b7f..a7de293d1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -208,13 +208,141 @@ endif() # We should really fix our code to not need this if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") target_compile_options(SRB2SDL2 PRIVATE -mno-ms-bitfields) - target_compile_options(SRB2SDL2 PRIVATE -Wno-trigraphs) endif() -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_compile_options(SRB2SDL2 PRIVATE -Wno-absolute-value) +# Compiler warnings configuration +target_compile_options(SRB2SDL2 PRIVATE + # Using generator expressions to handle per-language compile options + + # C, GNU + # This is a direct translation from versions.mk + $<$,$>: + -Wall + -Wno-trigraphs + -W # Was controlled by RELAXWARNINGS + -Wfloat-equal + -Wundef + -Wpointer-arith + -Wbad-function-cast + -Wcast-qual + -Wcast-align # Was controlled by NOCASTALIGNWARN + -Wwrite-strings + -Wsign-compare + -Waggregate-return + -Wmissing-prototypes + -Wmissing-declarations + -Wmissing-noreturn + -Wnested-externs + -Winline + -Wformat-y2k + -Wformat-security + + $<$,2.9.5>: + -Wno-div-by-zero + -Wendif-labels + -Wdisabled-optimization + > + + $<$,4.0.0>: + -Wold-style-definition + -Wmissing-field-initializers + > + + $<$,4.1.0>: + -Wshadow + > + + $<$,4.3.0>: + -funit-at-a-time + -Wlogical-op + > + + $<$,4.5.0>: + -Wlogical-op + -Wno-error=array-bounds + > + + $<$,4.6.0>: + -Wno-suggest-attribute=noreturn + -Wno-error=suggest-attribute=noreturn + > + + $<$,5.4.0>: + -Wno-logical-op + -Wno-error=logical-op + > + + $<$,6.1.0>: + -Wno-tautological-compare + -Wno-error=tautological-compare + > + + $<$,7.1.0>: + -Wno-error=format-overflow=2 + -Wimplicit-fallthrough=4 + > + + $<$,8.1.0>: + -Wno-error=format-overflow + -Wno-error=stringop-truncation + -Wno-error=stringop-overflow + -Wno-format-overflow + -Wno-stringop-truncation + -Wno-stringop-overflow + -Wno-error=multistatement-macros + > + + $<$,9.1.0>: + -Wno-error=address-of-packed-member + > + > + + # C, Clang and Apple Clang + $<$,$,$>>: + -Wall + -Wno-absolute-value + -Wno-trigraphs + -Wno-error=non-literal-null-conversion + -Wno-error=constant-conversion + -Wno-error=unused-but-set-variable + > + + # C, MSVC + $<$,$>: + # All warnings at and before Visual Studio 2019 RTM + # https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warnings-by-compiler-version?view=msvc-170 + /Wv:19.20.27004.0 + > + + # C++, GNU, Clang and Apple Clang + $<$,$,$,$>>: + -Wall + > + + # C++, MSVC + $<$,$>: + /Wv:19.20.27004.0 + > +) +if(SRB2_CONFIG_ERRORMODE) + target_compile_options(SRB2SDL2 PRIVATE + $<$,$,$>: + -Werror + > + + $<$: + /WX + > + ) endif() +# Link warnings configuration +target_link_options(SRB2SDL2 PRIVATE + $<$: + # -Wl,--as-needed - Was controlled by NOLDWARNING + > +) + if(${SRB2_CONFIG_DEV_BUILD}) target_compile_definitions(SRB2SDL2 PRIVATE -DDEVELOP) endif() From 8116edc5a132454c21e4fdb69b263a89e3ed1ff3 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sun, 6 Nov 2022 14:03:02 -0600 Subject: [PATCH 22/66] cmake: Port misc options from Makefiles - DEBUGMODE - MOBJCONSISTANCY - PACKETDROP - ZDEBUG - PROFILEMODE (likely moot, dunno how profiling with cmake works though) --- CMakeLists.txt | 8 +++++++- src/CMakeLists.txt | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d72ca76fc..9c5fcf1a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,13 @@ cmake_dependent_option( ) option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON) option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF) -option(SRB2_CONFIG_ERRORMODE "Compile C code with warnings treated as errors. (C++ warnings are always treated as errors)" OFF) +option(SRB2_CONFIG_ERRORMODE "Compile C code with warnings treated as errors." OFF) +option(SRB2_CONFIG_DEBUGMODE "Compile with PARANOIA, ZDEBUG, RANGECHECK and PACKETDROP defined." OFF) +option(SRB2_CONFIG_MOBJCONSISTANCY "Compile with MOBJCONSISTANCY defined." OFF) +option(SRB2_CONFIG_PACKETDROP "Compile with PACKETDROP defined." OFF) +option(SRB2_CONFIG_ZDEBUG "Compile with ZDEBUG defined." OFF) +# SRB2_CONFIG_PROFILEMODE is probably superceded by some CMake setting. +option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF) set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.") # Enable CCache diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a7de293d1..746aa1517 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -348,6 +348,24 @@ if(${SRB2_CONFIG_DEV_BUILD}) endif() target_compile_definitions(SRB2SDL2 PRIVATE -DCMAKECONFIG) +# Misc. build options from Makefiles +if(SRB2_CONFIG_DEBUGMODE) + target_compile_definitions(SRB2SDL2 PRIVATE -DZDEBUG -DPARANOIA -DRANGECHECK -DPACKETDROP) +endif() +if(SRB2_CONFIG_MOBJCONSISTANCY) + target_compile_definitions(SRB2SDL2 PRIVATE -DMOBJCONSISTANCY) +endif() +if(SRB2_CONFIG_PACKETDROP) + target_compile_definitions(SRB2SDL2 PRIVATE -DPACKETDROP) +endif() +if(SRB2_CONFIG_ZDEBUG) + target_compile_definitions(SRB2SDL2 PRIVATE -DZDEBUG) +endif() +if(SRB2_CONFIG_PROFILEMODE AND "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(SRB2SDL2 PRIVATE -pg) + target_link_options(SRB2SDL2 PRIVATE -pg) +endif() + add_subdirectory(sdl) add_subdirectory(objects) From e52a13bf3930fb0d4f054eb79b2a76e1db50ae6a Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 8 Nov 2022 19:00:39 -0600 Subject: [PATCH 23/66] cmake: link Rpcrt4 (for uuid) to openmpt on win32 --- thirdparty/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 7dfd9ffd5..71c815a25 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -470,6 +470,9 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") # -DLIBOPENMPT_BUILD configure_file("openmpt_svn_version.h" "svn_version.h") add_library(openmpt "${SRB2_INTERNAL_LIBRARY_TYPE}" ${openmpt_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/svn_version.h) + if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) + target_link_libraries(openmpt PRIVATE Rpcrt4) + endif() target_compile_features(openmpt PRIVATE cxx_std_11) target_compile_definitions(openmpt PRIVATE -DLIBOPENMPT_BUILD) From 757e3650eb180ba92f558de1131228f2ac51f7e0 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 8 Nov 2022 19:21:21 -0600 Subject: [PATCH 24/66] cmake: copy build shared internal libs to bin/ --- src/CMakeLists.txt | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 746aa1517..a98cecd7f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(SRB2SDL2 MACOSX_BUNDLE WIN32) -if("${CMAKE_COMPILER_IS_GNUCC}" AND "${CMAKE_SYSTEM_NAME}" MATCHES "Windows" AND NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") +if("${CMAKE_COMPILER_IS_GNUCC}" AND "${CMAKE_SYSTEM_NAME}" MATCHES "Windows" AND NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}" AND NOT "${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}") # On MinGW with internal libraries, link the standard library statically target_link_options(SRB2SDL2 PRIVATE "-static") endif() @@ -384,3 +384,27 @@ if((CMAKE_COMPILER_IS_GNUCC) AND NOT ("${CMAKE_SYSTEM_NAME}" MATCHES Darwin)) ) endif() endif() + +# copy DLLs to bin/ directory if building internal shared on windows +if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows AND NOT "${SRB2_CONFIG_INTERNAL_LIBRARIES}" AND "${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}") + set(ADDITIONAL_DLLS "") + if("${CMAKE_C_COMPILER_ID}" STREQUAL GNU) + # also copy implicitly linked system libraries + get_filename_component(MINGW_BIN_PATH ${CMAKE_CXX_COMPILER} PATH) + list(APPEND ADDITIONAL_DLLS + "libgcc_s_dw2-1.dll" + "libstdc++-6.dll" + "libwinpthread-1.dll" + ) + list(TRANSFORM ADDITIONAL_DLLS PREPEND "${MINGW_BIN_PATH}/") + endif() + add_custom_command(TARGET SRB2SDL2 POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $ + ${ADDITIONAL_DLLS} + + $ + COMMAND_EXPAND_LISTS + COMMENT "Copying runtime DLLs" + ) +endif() From 9fecb93c3ae7d66aebe445df7511f77cb9029169 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 8 Nov 2022 19:28:12 -0600 Subject: [PATCH 25/66] cmake: disable debug symbols for openmpt --- thirdparty/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 71c815a25..a1db22623 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -470,6 +470,9 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") # -DLIBOPENMPT_BUILD configure_file("openmpt_svn_version.h" "svn_version.h") add_library(openmpt "${SRB2_INTERNAL_LIBRARY_TYPE}" ${openmpt_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/svn_version.h) + if("${CMAKE_C_COMPILER_ID}" STREQUAL GNU OR "${CMAKE_C_COMPILER_ID}" STREQUAL Clang OR "${CMAKE_C_COMPILER_ID}" STREQUAL AppleClang) + target_compile_options(openmpt PRIVATE "-g0") + endif() if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) target_link_libraries(openmpt PRIVATE Rpcrt4) endif() From adfbdbf10ddf72f193cda52722f8166e7f15e64d Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 8 Nov 2022 19:30:23 -0600 Subject: [PATCH 26/66] cmake: gitignore /build Too common of a build pattern to ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7023aaa80..3eca1c57a 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ Win32_LIB_ASM_Release /assets/debian /make /bin +/build From 93aaa77de3bef4bcc005c91534ff2a25e5553e1c Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 8 Nov 2022 19:36:40 -0600 Subject: [PATCH 27/66] cmake: disallow in-source builds --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c5fcf1a1..c6cd6c3d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,9 @@ cmake_minimum_required(VERSION 3.14 FATAL_ERROR) +if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") + message(FATAL_ERROR "In-source builds are blocked. Please build from a separate directory.") +endif() + # Set up CMAKE path set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") From 63069ce710baaec3d93a5ec643c13382c9ca062a Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 03:20:37 -0800 Subject: [PATCH 28/66] cmake: set C std and enable pedantic warnings see d262190faf and cd5946be73 --- src/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a98cecd7f..746143077 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,6 +5,8 @@ if("${CMAKE_COMPILER_IS_GNUCC}" AND "${CMAKE_SYSTEM_NAME}" MATCHES "Windows" AND target_link_options(SRB2SDL2 PRIVATE "-static") endif() +set_property(TARGET SRB2SDL2 PROPERTY C_STANDARD 11) + # Core sources target_sourcefile(c) target_sources(SRB2SDL2 PRIVATE comptime.c md5.c config.h.in) @@ -220,6 +222,7 @@ target_compile_options(SRB2SDL2 PRIVATE -Wall -Wno-trigraphs -W # Was controlled by RELAXWARNINGS + -pedantic -Wfloat-equal -Wundef -Wpointer-arith From a8ccedbbc0b968b3ecaa06ca51c136627e635a50 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 03:27:10 -0800 Subject: [PATCH 29/66] cmake: remove -Waggregate-return --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 746143077..5b681d042 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -231,7 +231,6 @@ target_compile_options(SRB2SDL2 PRIVATE -Wcast-align # Was controlled by NOCASTALIGNWARN -Wwrite-strings -Wsign-compare - -Waggregate-return -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn From 8742150f2faf2f6c8cc2e0bfbdb285ab9ba38004 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 03:42:43 -0800 Subject: [PATCH 30/66] cmake: change library link name casing Fixes linux mingw cross compile --- thirdparty/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index a1db22623..41c26c4e0 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -474,7 +474,7 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") target_compile_options(openmpt PRIVATE "-g0") endif() if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) - target_link_libraries(openmpt PRIVATE Rpcrt4) + target_link_libraries(openmpt PRIVATE rpcrt4) endif() target_compile_features(openmpt PRIVATE cxx_std_11) target_compile_definitions(openmpt PRIVATE -DLIBOPENMPT_BUILD) @@ -515,4 +515,4 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") ) target_include_directories(discord-rpc INTERFACE "${DiscordRPC_SOURCE_DIR}/include") add_library(DiscordRPC::DiscordRPC ALIAS discord-rpc) -endif() \ No newline at end of file +endif() From b5310a1f68a912f589798a592dd0f3e104503c47 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 16:45:28 -0800 Subject: [PATCH 31/66] Add typedef.h All typedefs for structs that were present in other header files have been moved to here. (Except node_t because the renderer and netcode both define node_t LOL.) --- src/am_map.h | 8 +- src/command.h | 12 +- src/d_clisrv.h | 80 ++++---- src/d_event.h | 4 +- src/d_netcmd.h | 12 +- src/d_netfil.h | 10 +- src/d_player.h | 16 +- src/d_think.h | 4 +- src/d_ticcmd.h | 4 +- src/deh_tables.h | 4 +- src/dehacked.h | 4 +- src/discord.h | 4 +- src/doomdata.h | 32 +-- src/doomdef.h | 4 +- src/doomstat.h | 44 ++--- src/doomtype.h | 2 + src/font.h | 4 +- src/g_demo.h | 12 +- src/g_game.h | 5 +- src/hu_stuff.h | 4 +- src/i_joy.h | 3 +- src/i_net.h | 12 +- src/i_system.h | 8 +- src/i_time.h | 4 +- src/info.h | 8 +- src/k_bheap.h | 8 +- src/k_boss.h | 4 +- src/k_bot.h | 4 +- src/k_brightmap.h | 4 +- src/k_follower.h | 8 +- src/k_hud.h | 4 +- src/k_menu.h | 24 +-- src/k_pathfind.h | 12 +- src/k_profiles.h | 4 +- src/k_terrain.h | 20 +- src/k_waypoint.h | 4 +- src/lua_hudlib_drawlist.h | 2 - src/m_aatree.c | 2 +- src/m_aatree.h | 1 - src/m_cond.h | 20 +- src/m_dllist.h | 4 +- src/m_fixed.h | 12 +- src/m_perfstats.h | 8 +- src/m_queue.h | 8 +- src/mserv.h | 8 +- src/p_local.h | 20 +- src/p_maputl.h | 8 +- src/p_mobj.h | 12 +- src/p_polyobj.h | 72 +++---- src/p_saveg.h | 4 +- src/p_setup.h | 4 +- src/p_slopes.h | 8 +- src/p_spec.h | 112 +++++------ src/r_data.h | 4 +- src/r_defs.h | 100 +++++----- src/r_draw.h | 4 +- src/r_fps.h | 12 +- src/r_picformats.h | 8 +- src/r_plane.h | 8 +- src/r_portal.h | 4 +- src/r_skins.h | 4 +- src/r_splats.h | 4 +- src/r_state.h | 4 +- src/r_textures.h | 8 +- src/r_things.h | 12 +- src/s_sound.h | 20 +- src/screen.h | 12 +- src/sounds.h | 3 +- src/taglist.h | 8 +- src/typedef.h | 397 ++++++++++++++++++++++++++++++++++++++ src/v_video.h | 4 +- src/w_wad.h | 24 +-- 72 files changed, 867 insertions(+), 478 deletions(-) create mode 100644 src/typedef.h diff --git a/src/am_map.h b/src/am_map.h index 1c8fa70e4..596a17d46 100644 --- a/src/am_map.h +++ b/src/am_map.h @@ -16,15 +16,15 @@ #include "d_event.h" -typedef struct +struct fpoint_t { INT32 x, y; -} fpoint_t; +}; -typedef struct +struct fline_t { fpoint_t a, b; -} fline_t; +}; extern boolean am_recalc; // true if screen size changes extern boolean automapactive; // In AutoMap mode? diff --git a/src/command.h b/src/command.h index 35330d5d4..94cf2f269 100644 --- a/src/command.h +++ b/src/command.h @@ -79,14 +79,14 @@ void COM_Init(void); // Variable sized buffers // ====================== -typedef struct vsbuf_s +struct vsbuf_t { boolean allowoverflow; // if false, do a I_Error boolean overflowed; // set to true if the buffer size failed UINT8 *data; size_t maxsize; size_t cursize; -} vsbuf_t; +}; void VS_Alloc(vsbuf_t *buf, size_t initsize); void VS_Free(vsbuf_t *buf); @@ -127,13 +127,13 @@ typedef enum CV_NOLUA = 4096,/* don't let this be called from Lua */ } cvflags_t; -typedef struct CV_PossibleValue_s +struct CV_PossibleValue_t { INT32 value; const char *strvalue; -} CV_PossibleValue_t; +}; -typedef struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NULL +struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NULL { const char *name; const char *defaultvalue; @@ -158,7 +158,7 @@ typedef struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NUL // used only with CV_NETVAR char changed; // has variable been changed by the user? 0 = no, 1 = yes struct consvar_s *next; -} consvar_t; +}; /* name, defaultvalue, flags, PossibleValue, func */ #define CVAR_INIT( ... ) \ diff --git a/src/d_clisrv.h b/src/d_clisrv.h index eb11ca04a..4effefde8 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -130,43 +130,43 @@ void Command_Numnodes(void); #endif // Client to server packet -typedef struct +struct clientcmd_pak { UINT8 client_tic; UINT8 resendfrom; INT16 consistancy; ticcmd_t cmd; -} ATTRPACK clientcmd_pak; +} ATTRPACK; // Splitscreen packet // WARNING: must have the same format of clientcmd_pak, for more easy use -typedef struct +struct client2cmd_pak { UINT8 client_tic; UINT8 resendfrom; INT16 consistancy; ticcmd_t cmd, cmd2; -} ATTRPACK client2cmd_pak; +} ATTRPACK; // 3P Splitscreen packet // WARNING: must have the same format of clientcmd_pak, for more easy use -typedef struct +struct client3cmd_pak { UINT8 client_tic; UINT8 resendfrom; INT16 consistancy; ticcmd_t cmd, cmd2, cmd3; -} ATTRPACK client3cmd_pak; +} ATTRPACK; // 4P Splitscreen packet // WARNING: must have the same format of clientcmd_pak, for more easy use -typedef struct +struct client4cmd_pak { UINT8 client_tic; UINT8 resendfrom; INT16 consistancy; ticcmd_t cmd, cmd2, cmd3, cmd4; -} ATTRPACK client4cmd_pak; +} ATTRPACK; #ifdef _MSC_VER #pragma warning(disable : 4200) @@ -174,15 +174,15 @@ typedef struct // Server to client packet // this packet is too large -typedef struct +struct servertics_pak { UINT8 starttic; UINT8 numtics; UINT8 numslots; // "Slots filled": Highest player number in use plus one. ticcmd_t cmds[45]; // Normally [BACKUPTIC][MAXPLAYERS] but too large -} ATTRPACK servertics_pak; +} ATTRPACK; -typedef struct +struct serverconfig_pak { UINT8 version; // Different versions don't work UINT8 subversion; // Contains build version @@ -204,9 +204,9 @@ typedef struct UINT8 maxplayer; boolean allownewplayer; boolean discordinvites; -} ATTRPACK serverconfig_pak; +} ATTRPACK; -typedef struct +struct filetx_pak { UINT8 fileid; UINT32 filesize; @@ -214,21 +214,21 @@ typedef struct UINT32 position; UINT16 size; UINT8 data[]; // Size is variable using hardware_MAXPACKETLENGTH -} ATTRPACK filetx_pak; +} ATTRPACK; -typedef struct +struct fileacksegment_t { UINT32 start; UINT32 acks; -} ATTRPACK fileacksegment_t; +} ATTRPACK; -typedef struct +struct fileack_pak { UINT8 fileid; UINT8 iteration; UINT8 numsegments; fileacksegment_t segments[]; -} ATTRPACK fileack_pak; +} ATTRPACK; #ifdef _MSC_VER #pragma warning(default : 4200) @@ -236,7 +236,7 @@ typedef struct #define MAXAPPLICATION 16 -typedef struct +struct clientconfig_pak { UINT8 _255;/* see serverinfo_pak */ UINT8 packetversion; @@ -246,7 +246,7 @@ typedef struct UINT8 localplayers; // number of splitscreen players UINT8 mode; char names[MAXSPLITSCREENPLAYERS][MAXPLAYERNAME]; -} ATTRPACK clientconfig_pak; +} ATTRPACK; #define SV_SPEEDMASK 0x03 // used to send kartspeed #define SV_DEDICATED 0x40 // server is dedicated @@ -256,7 +256,7 @@ typedef struct #define MAXFILENEEDED 915 #define MAX_MIRROR_LENGTH 256 // This packet is too large -typedef struct +struct serverinfo_pak { /* In the old packet, 'version' is the first field. Now that field is set @@ -289,27 +289,27 @@ typedef struct char httpsource[MAX_MIRROR_LENGTH]; // HTTP URL to download from, always defined for compatibility INT16 avgpwrlv; // Kart avg power level UINT8 fileneeded[MAXFILENEEDED]; // is filled with writexxx (byteptr.h) -} ATTRPACK serverinfo_pak; +} ATTRPACK; -typedef struct +struct serverrefuse_pak { char reason[255]; -} ATTRPACK serverrefuse_pak; +} ATTRPACK; -typedef struct +struct askinfo_pak { UINT8 version; tic_t time; // used for ping evaluation -} ATTRPACK askinfo_pak; +} ATTRPACK; -typedef struct +struct msaskinfo_pak { char clientaddr[22]; tic_t time; // used for ping evaluation -} ATTRPACK msaskinfo_pak; +} ATTRPACK; // Shorter player information for external use. -typedef struct +struct plrinfo { UINT8 num; char name[MAXPLAYERNAME+1]; @@ -319,10 +319,10 @@ typedef struct UINT8 data; // Color is first four bits, hasflag, isit and issuper have one bit each, the last is unused. UINT32 score; UINT16 timeinserver; // In seconds. -} ATTRPACK plrinfo; +} ATTRPACK; // Shortest player information for join during intermission. -typedef struct +struct plrconfig { char name[MAXPLAYERNAME+1]; UINT8 skin; @@ -330,20 +330,20 @@ typedef struct UINT32 pflags; UINT32 score; UINT8 ctfteam; -} ATTRPACK plrconfig; +} ATTRPACK; -typedef struct +struct filesneededconfig_pak { INT32 first; UINT8 num; UINT8 more; UINT8 files[MAXFILENEEDED]; // is filled with writexxx (byteptr.h) -} ATTRPACK filesneededconfig_pak; +} ATTRPACK; // // Network packet data // -typedef struct +struct doomdata_t { UINT32 checksum; UINT8 ack; // If not zero the node asks for acknowledgement, the receiver must resend the ack @@ -375,18 +375,18 @@ typedef struct filesneededconfig_pak filesneededcfg; // ??? bytes UINT32 pingtable[MAXPLAYERS+1]; // 68 bytes } u; // This is needed to pack diff packet types data together -} ATTRPACK doomdata_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() #endif #define MAXSERVERLIST (MAXNETNODES-1) -typedef struct +struct serverelem_t { SINT8 node; serverinfo_pak info; -} serverelem_t; +}; extern serverelem_t serverlist[MAXSERVERLIST]; extern UINT32 serverlistcount; @@ -528,7 +528,7 @@ extern boolean hu_stopped; // SRB2Kart // -typedef struct rewind_s { +struct rewind_s { UINT8 savebuffer[(768*1024)]; tic_t leveltime; size_t demopos; @@ -537,7 +537,7 @@ typedef struct rewind_s { mobj_t oldghost[MAXPLAYERS]; struct rewind_s *next; -} rewind_t; +}; void CL_ClearRewinds(void); rewind_t *CL_SaveRewindPoint(size_t demopos); diff --git a/src/d_event.h b/src/d_event.h index 5a8c915a3..3ae1010c4 100644 --- a/src/d_event.h +++ b/src/d_event.h @@ -28,14 +28,14 @@ typedef enum } evtype_t; // Event structure. -typedef struct +struct event_t { evtype_t type; INT32 data1; // keys / mouse/joystick buttons INT32 data2; // mouse/joystick x move INT32 data3; // mouse/joystick y move INT32 device; // which player's device it belongs to -} event_t; +}; // // GLOBAL VARIABLES diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 1583ec5d8..3f4d00645 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -217,22 +217,22 @@ extern const char *netxcmdnames[MAXNETXCMD - 1]; //Packet composition for Command_TeamChange_f() ServerTeamChange, etc. //bitwise structs make packing bits a little easier, but byte alignment harder? //todo: decide whether to make the other netcommands conform, or just get rid of this experiment. -typedef struct { +struct changeteam_packet_t { UINT32 playernum : 5; // value 0 to 31 UINT32 newteam : 5; // value 0 to 31 UINT32 verification : 1; // value 0 to 1 UINT32 autobalance : 1; // value 0 to 1 UINT32 scrambled : 1; // value 0 to 1 -} ATTRPACK changeteam_packet_t; +} ATTRPACK; #ifdef _MSC_VER #pragma warning(default : 4214) #endif -typedef struct { +struct changeteam_value_t { UINT16 l; // liitle endian UINT16 b; // big enian -} ATTRPACK changeteam_value_t; +} ATTRPACK; //Since we do not want other files/modules to know about this data buffer we union it here with a Short Int. //Other files/modules will hand the INT16 back to us and we will decode it here. @@ -270,12 +270,12 @@ void RemoveAdminPlayer(INT32 playernum); void ItemFinder_OnChange(void); void D_SetPassword(const char *pw); -typedef struct +struct scheduleTask_t { UINT16 basetime; UINT16 timer; char *command; -} scheduleTask_t; +}; extern scheduleTask_t **schedule; extern size_t schedule_size; diff --git a/src/d_netfil.h b/src/d_netfil.h index 59fdd99e3..2bc415406 100644 --- a/src/d_netfil.h +++ b/src/d_netfil.h @@ -37,7 +37,7 @@ typedef enum FS_FALLBACK, // HTTP failed } filestatus_t; -typedef struct +struct fileneeded_t { UINT8 willsend; // Is the server willing to send it? char filename[MAX_WADPATH]; @@ -54,7 +54,7 @@ typedef struct UINT32 currentsize; UINT32 totalsize; UINT32 ackresendposition; // Used when resuming downloads -} fileneeded_t; +}; extern INT32 fileneedednum; extern fileneeded_t fileneeded[MAX_WADFILES]; @@ -71,8 +71,6 @@ extern boolean curl_failedwebdownload; extern boolean curl_running; extern INT32 curl_transfers; -typedef struct HTTP_login HTTP_login; - extern struct HTTP_login { char * url; @@ -112,7 +110,7 @@ typedef enum LFTNS_SENT // The node already has the file } luafiletransfernodestatus_t; -typedef struct luafiletransfer_s +struct luafiletransfer_s { char *filename; char *realfilename; @@ -122,7 +120,7 @@ typedef struct luafiletransfer_s luafiletransfernodestatus_t nodestatus[MAXNETNODES]; tic_t nodetimeouts[MAXNETNODES]; struct luafiletransfer_s *next; -} luafiletransfer_t; +}; extern luafiletransfer_t *luafiletransfers; extern boolean waitingforluafiletransfer; diff --git a/src/d_player.h b/src/d_player.h index e9ebe7668..cfd72df1c 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -287,7 +287,7 @@ typedef enum #define GARDENTOP_MAXGRINDTIME (45) // player_t struct for all respawn variables -typedef struct respawnvars_s +struct respawnvars_t { UINT8 state; // see RESPAWNST_ constants in k_respawn.h waypoint_t *wp; // Waypoint that we're going towards, NULL if the position isn't linked to one @@ -301,10 +301,10 @@ typedef struct respawnvars_s tic_t dropdash; // Drop Dash charge timer boolean truedeath; // Your soul has left your body boolean manual; // Respawn coords were manually set, please respawn exactly there -} respawnvars_t; +}; // player_t struct for all bot variables -typedef struct botvars_s +struct botvars_t { UINT8 difficulty; // Bot's difficulty setting UINT8 diffincrease; // In GP: bot difficulty will increase this much next round @@ -321,18 +321,18 @@ typedef struct botvars_s SINT8 turnconfirm; // Confirm turn direction tic_t spindashconfirm; // When high enough, they will try spindashing -} botvars_t; +}; // player_t struct for all skybox variables -typedef struct { +struct skybox_t { mobj_t * viewpoint; mobj_t * centerpoint; -} skybox_t; +}; // ======================================================================== // PLAYER STRUCTURE // ======================================================================== -typedef struct player_s +struct player_s { mobj_t *mo; @@ -612,6 +612,6 @@ typedef struct player_s #ifdef HWRENDER fixed_t fovadd; // adjust FOV for hw rendering #endif -} player_t; +}; #endif diff --git a/src/d_think.h b/src/d_think.h index 4bdac4627..8f786a4ed 100644 --- a/src/d_think.h +++ b/src/d_think.h @@ -40,7 +40,7 @@ typedef union typedef actionf_t think_t; // Doubly linked list of actors. -typedef struct thinker_s +struct thinker_s { struct thinker_s *prev; struct thinker_s *next; @@ -49,6 +49,6 @@ typedef struct thinker_s // killough 11/98: count of how many other objects reference // this one using pointers. Used for garbage collection. INT32 references; -} thinker_t; +}; #endif diff --git a/src/d_ticcmd.h b/src/d_ticcmd.h index 4cf1e7c97..7cf95cb0a 100644 --- a/src/d_ticcmd.h +++ b/src/d_ticcmd.h @@ -63,7 +63,7 @@ typedef enum #pragma pack(1) #endif -typedef struct +struct ticcmd_t { SINT8 forwardmove; // -MAXPLMOVE to MAXPLMOVE (50) INT16 turning; // Turn speed @@ -72,7 +72,7 @@ typedef struct UINT16 buttons; UINT8 latency; // Netgames: how many tics ago was this ticcmd generated from this player's end? UINT8 flags; -} ATTRPACK ticcmd_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() diff --git a/src/deh_tables.h b/src/deh_tables.h index cfb676172..8103634a3 100644 --- a/src/deh_tables.h +++ b/src/deh_tables.h @@ -41,11 +41,11 @@ struct flickytypes_s { /** Action pointer for reading actions from Dehacked lumps. */ -typedef struct +struct actionpointer_t { actionf_t action; ///< Function pointer corresponding to the actual action. const char *name; ///< Name of the action in ALL CAPS. -} actionpointer_t; +}; struct int_const_s { const char *n; diff --git a/src/dehacked.h b/src/dehacked.h index 88d303b33..63cf9cedd 100644 --- a/src/dehacked.h +++ b/src/dehacked.h @@ -57,13 +57,13 @@ extern UINT8 superstack; // the code was first write for a file // converted to use memory with this functions -typedef struct +struct MYFILE { char *data; char *curpos; size_t size; UINT16 wad; -} MYFILE; +}; #define myfeof(a) (a->data + a->size <= a->curpos) char *myfgets(char *buf, size_t bufsize, MYFILE *f); char *myhashfgets(char *buf, size_t bufsize, MYFILE *f); diff --git a/src/discord.h b/src/discord.h index a6bb1134a..99444b3cd 100644 --- a/src/discord.h +++ b/src/discord.h @@ -27,7 +27,7 @@ extern struct discordInfo_s { boolean everyoneCanInvite; } discordInfo; -typedef struct discordRequest_s { +struct discordRequest_s { char *username; // Discord user name. char *discriminator; // Discord discriminator (The little hashtag thing after the username). Separated for a "hide discriminators" cvar. char *userID; // The ID of the Discord user, gets used with Discord_Respond() @@ -40,7 +40,7 @@ typedef struct discordRequest_s { struct discordRequest_s *next; // Next request in the list. struct discordRequest_s *prev; // Previous request in the list. Not used normally, but just in case something funky happens, this should repair the list. -} discordRequest_t; +}; extern discordRequest_t *discordRequestList; diff --git a/src/doomdata.h b/src/doomdata.h index 6d3a6386c..0c02c17d4 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -68,24 +68,24 @@ enum #endif // A single Vertex. -typedef struct +struct mapvertex_t { INT16 x, y; -}ATTRPACK mapvertex_t; +}ATTRPACK; // A SideDef, defining the visual appearance of a wall, // by setting textures and offsets. -typedef struct +struct mapsidedef_t { INT16 textureoffset, rowoffset; char toptexture[8], bottomtexture[8], midtexture[8]; // Front sector, towards viewer. INT16 sector; -} ATTRPACK mapsidedef_t; +} ATTRPACK; // A LineDef, as used for editing, and as input // to the BSP builder. -typedef struct +struct maplinedef_t { INT16 v1, v2; INT16 flags; @@ -93,7 +93,7 @@ typedef struct INT16 tag; // sidenum[1] will be 0xffff if one sided UINT16 sidenum[2]; -} ATTRPACK maplinedef_t; +} ATTRPACK; // // LineDef attributes. @@ -152,7 +152,7 @@ enum }; // Sector definition, from editing. -typedef struct +struct mapsector_t { INT16 floorheight; INT16 ceilingheight; @@ -161,34 +161,34 @@ typedef struct INT16 lightlevel; INT16 special; INT16 tag; -} ATTRPACK mapsector_t; +} ATTRPACK; // SubSector, as generated by BSP. -typedef struct +struct mapsubsector_t { UINT16 numsegs; // Index of first one, segs are stored sequentially. UINT16 firstseg; -} ATTRPACK mapsubsector_t; +} ATTRPACK; // LineSeg, generated by splitting LineDefs // using partition lines selected by BSP builder. -typedef struct +struct mapseg_t { INT16 v1, v2; INT16 angle; INT16 linedef; INT16 side; INT16 offset; -} ATTRPACK mapseg_t; +} ATTRPACK; // BSP node structure. // Indicate a leaf. #define NF_SUBSECTOR 0x8000 -typedef struct +struct mapnode_t { // Partition line from (x,y) to x+dx,y+dy) INT16 x, y; @@ -199,7 +199,7 @@ typedef struct // If NF_SUBSECTOR it's a subsector, else it's a node of another subtree. UINT16 children[2]; -} ATTRPACK mapnode_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() @@ -210,7 +210,7 @@ typedef struct // Thing definition, position, orientation and type, // plus visibility flags and attributes. -typedef struct +struct mapthing_t { INT16 x, y; INT16 angle, pitch, roll; @@ -223,7 +223,7 @@ typedef struct INT32 args[NUMMAPTHINGARGS]; char *stringargs[NUMMAPTHINGSTRINGARGS]; struct mobj_s *mobj; -} mapthing_t; +}; #define ZSHIFT 4 diff --git a/src/doomdef.h b/src/doomdef.h index 8271a4ae2..f54916599 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -210,7 +210,7 @@ extern char logfilename[1024]; // Master Server compatibility ONLY #define MSCOMPAT_MAXPLAYERS (32) -typedef struct skincolor_s +struct skincolor_t { char name[MAXCOLORNAME+1]; // Skincolor name UINT8 ramp[COLORRAMPSIZE]; // Colormap ramp @@ -218,7 +218,7 @@ typedef struct skincolor_s UINT8 invshade; // Signpost color shade UINT16 chatcolor; // Chat color boolean accessible; // Accessible by the color command + setup menu -} skincolor_t; +}; #define FOLLOWERCOLOR_MATCH UINT16_MAX #define FOLLOWERCOLOR_OPPOSITE (UINT16_MAX-1) diff --git a/src/doomstat.h b/src/doomstat.h index 3338e9b76..739c69ad2 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -92,12 +92,12 @@ typedef enum PRECIPFX_WATERPARTICLES = 1<<2 } precipeffect_t; -typedef struct +struct precipprops_t { const char *name; mobjtype_t type; precipeffect_t effects; -} precipprops_t; +}; extern precipprops_t precipprops[MAXPRECIP]; extern preciptype_t precip_freeslot; @@ -107,13 +107,13 @@ extern preciptype_t curWeather; /** Time attack information, currently a very small structure. */ -typedef struct +struct recorddata_t { tic_t time; ///< Time in which the level was finished. tic_t lap; ///< Best lap time for this level. //UINT32 score; ///< Score when the level was finished. //UINT16 rings; ///< Rings when the level was finished. -} recorddata_t; +}; // mapvisited is now a set of flags that says what we've done in the map. #define MV_VISITED (1) @@ -220,7 +220,7 @@ extern UINT16 skincolor_redteam, skincolor_blueteam, skincolor_redring, skincolo extern boolean exitfadestarted; -typedef struct +struct scene_t { UINT8 numpics; char picname[8][8]; @@ -240,13 +240,13 @@ typedef struct UINT8 fadecolor; // Color number for fade, 0 means don't do the first fade UINT8 fadeinid; // ID of the first fade, to a color -- ignored if fadecolor is 0 UINT8 fadeoutid; // ID of the second fade, to the new screen -} scene_t; // TODO: It would probably behoove us to implement subsong/track selection here, too, but I'm lazy -SH +}; // TODO: It would probably behoove us to implement subsong/track selection here, too, but I'm lazy -SH -typedef struct +struct cutscene_t { scene_t scene[128]; // 128 scenes per cutscene. INT32 numscenes; // Number of scenes in this cutscene -} cutscene_t; +}; extern cutscene_t *cutscenes[128]; @@ -261,7 +261,7 @@ extern cutscene_t *cutscenes[128]; #define PROMPT_PIC_LOOP 1 #define PROMPT_PIC_DESTROY 2 #define MAX_PROMPT_PICS 8 -typedef struct +struct textpage_t { UINT8 numpics; UINT8 picmode; // sequence mode after displaying last pic, 0 = persist, 1 = loop, 2 = destroy @@ -294,13 +294,13 @@ typedef struct char nexttag[33]; // next tag to jump to. If set, this overrides nextprompt and nextpage. INT32 timetonext; // time in tics to jump to next page automatically. 0 = don't jump automatically char *text; -} textpage_t; +}; -typedef struct +struct textprompt_t { textpage_t page[MAX_PAGES]; INT32 numpages; // Number of pages in this prompt -} textprompt_t; +}; extern textprompt_t *textprompts[MAX_PROMPTS]; @@ -316,10 +316,10 @@ extern mapthing_t *rflagpoint, *bflagpoint; // Pointers to the flag spawn locati #define GF_BLUEFLAG 2 // A single point in space. -typedef struct +struct mappoint_t { fixed_t x, y, z; -} mappoint_t; +}; extern struct quake { @@ -333,11 +333,11 @@ extern struct quake } quake; // Custom Lua values -typedef struct +struct customoption_t { char option[32]; // 31 usable characters char value[256]; // 255 usable characters. If this seriously isn't enough then wtf. -} customoption_t; +}; // This could support more, but is that a good idea? // Keep in mind that it may encourage people making overly long cups just because they "can", and would be a waste of memory. @@ -347,7 +347,7 @@ typedef struct #define CUPCACHE_SPECIAL (CUPCACHE_BONUS+MAXBONUSLIST) #define CUPCACHE_MAX (CUPCACHE_SPECIAL+1) -typedef struct cupheader_s +struct cupheader_s { UINT16 id; ///< Cup ID char name[15]; ///< Cup title (14 chars) @@ -359,7 +359,7 @@ typedef struct cupheader_s UINT8 emeraldnum; ///< ID of Emerald to use for special stage (1-7 for Chaos Emeralds, 8-14 for Super Emeralds, 0 for no emerald) SINT8 unlockrequired; ///< An unlockable is required to select this cup. -1 for no unlocking required. struct cupheader_s *next; ///< Next cup in linked list -} cupheader_t; +}; extern cupheader_t *kartcupheaders; // Start of cup linked list extern UINT16 numkartcupheaders; @@ -368,7 +368,7 @@ extern UINT16 numkartcupheaders; /** Map header information. */ -typedef struct +struct mapheader_t { // Core game information, not user-modifiable directly char *lumpname; ///< Lump name can be really long @@ -441,7 +441,7 @@ typedef struct // Lua information UINT8 numCustomOptions; ///< Internal. For Lua custom value support. customoption_t *customopts; ///< Custom options. Allocated dynamically for space reasons. Be careful. -} mapheader_t; +}; // level flags #define LF_SCRIPTISFILE (1<<0) ///< True if the script is a file, not a lump. @@ -530,11 +530,11 @@ enum TypeOfLevel #define NUMBASETOLNAMES (4) #define NUMTOLNAMES (NUMBASETOLNAMES + NUMGAMETYPEFREESLOTS) -typedef struct +struct tolinfo_t { const char *name; UINT32 flag; -} tolinfo_t; +}; extern tolinfo_t TYPEOFLEVEL[NUMTOLNAMES]; extern UINT32 lastcustomtol; diff --git a/src/doomtype.h b/src/doomtype.h index 4aabab8b0..95f060008 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -406,4 +406,6 @@ typedef UINT64 precise_t; #define FUNCPTRCAST(p) ((union{void(*f)(void);void*v;})\ {(void(*)(void))p}).v +#include "typedef.h" + #endif //__DOOMTYPE__ diff --git a/src/font.h b/src/font.h index 88bedb44f..0cc6610d0 100644 --- a/src/font.h +++ b/src/font.h @@ -15,9 +15,7 @@ #define MAX_FONTS 32 -typedef struct font font_t; - -struct font +struct font_t { patch_t **font; diff --git a/src/g_demo.h b/src/g_demo.h index a00756a74..78e544342 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -28,12 +28,12 @@ extern consvar_t cv_recordmultiplayerdemos, cv_netdemosyncquality; extern tic_t demostarttime; -typedef struct democharlist_s { +struct democharlist_t { UINT8 mapping; // No, this isn't about levels. It maps to loaded character ID. UINT8 kartspeed; UINT8 kartweight; UINT32 flags; -} democharlist_t; +}; // Publicly-accessible demo vars struct demovars_s { @@ -76,7 +76,7 @@ typedef enum { MD_INVALID } menudemotype_e; -typedef struct menudemo_s { +struct menudemo_t { char filepath[256]; menudemotype_e type; @@ -93,7 +93,7 @@ typedef struct menudemo_s { UINT8 skin, color; UINT32 timeorscore; } standings[MAXPLAYERS]; -} menudemo_t; +}; extern mobj_t *metalplayback; @@ -160,7 +160,7 @@ void G_LoadMetal(UINT8 **buffer); // Your naming conventions are stupid and useless. // There is no conflict here. -typedef struct demoghost { +struct demoghost { UINT8 checksum[16]; UINT8 *buffer, *p, color; UINT8 fadein; @@ -169,7 +169,7 @@ typedef struct demoghost { democharlist_t *skinlist; mobj_t oldmo, *mo; struct demoghost *next; -} demoghost; +}; extern demoghost *ghosts; // G_CheckDemoExtraFiles: checks if our loaded WAD list matches the demo's. diff --git a/src/g_game.h b/src/g_game.h index 9c0bec553..0108cc06d 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -135,7 +135,7 @@ struct searchdim UINT8 siz; }; -typedef struct +struct mapsearchfreq_t { INT16 mapnum; UINT8 matchc; @@ -143,8 +143,7 @@ typedef struct UINT8 keywhc; struct searchdim *keywhd;/* ...in KEYWORD */ UINT8 total;/* total hits */ -} -mapsearchfreq_t; +}; INT32 G_FindMap(const char *query, char **foundmapnamep, mapsearchfreq_t **freqp, INT32 *freqc); diff --git a/src/hu_stuff.h b/src/hu_stuff.h index be0d97df9..078cd0751 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -81,12 +81,12 @@ extern char english_shiftxform[]; // sorted player lines //------------------------------------ -typedef struct +struct playersort_t { UINT32 count; INT32 num; const char *name; -} playersort_t; +}; //------------------------------------ // chat stuff diff --git a/src/i_joy.h b/src/i_joy.h index b10f4c55d..eb83a6649 100644 --- a/src/i_joy.h +++ b/src/i_joy.h @@ -38,7 +38,7 @@ actually, we need to know if it is a gamepad or analog controls */ -struct JoyType_s +struct JoyType_t { /*! if true, we MUST Poll() to get new joystick data, that is: we NEED the DIRECTINPUTDEVICE2 ! (watchout NT compatibility) */ @@ -48,7 +48,6 @@ struct JoyType_s INT32 bGamepadStyle; }; -typedef struct JoyType_s JoyType_t; /** \brief Joystick info for palyer[sic] 1-4's joystick/gamepad */ diff --git a/src/i_net.h b/src/i_net.h index 8ad08e08c..bc98dca8e 100644 --- a/src/i_net.h +++ b/src/i_net.h @@ -40,7 +40,7 @@ extern INT32 net_bandwidth; // in byte/s #pragma pack(1) #endif -typedef struct +struct doomcom_t { /// Supposed to be DOOMCOM_ID INT32 id; @@ -77,14 +77,14 @@ typedef struct /// The packet data to be sent. char data[MAXPACKETLENGTH]; -} ATTRPACK doomcom_t; +} ATTRPACK; -typedef struct +struct holepunch_t { INT32 magic; INT32 addr; INT16 port; -} ATTRPACK holepunch_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() @@ -172,11 +172,11 @@ extern boolean (*I_SetBanUsername) (const char *username); extern boolean (*I_SetBanReason) (const char *reason); extern boolean (*I_SetUnbanTime) (time_t timestamp); -typedef struct +struct bannednode_t { size_t banid; time_t timeleft; -} bannednode_t; +}; extern bannednode_t *bannednode; /// \brief Called by D_SRB2Main to be defined by extern network driver diff --git a/src/i_system.h b/src/i_system.h index 75e7b49e1..e7b9f2bf5 100644 --- a/src/i_system.h +++ b/src/i_system.h @@ -128,7 +128,7 @@ typedef enum NumberofForces, } FFType; -typedef struct JoyFF_s +struct JoyFF_t { INT32 ForceX; ///< The X of the Force's Vel INT32 ForceY; ///< The Y of the Force's Vel @@ -144,7 +144,7 @@ typedef struct JoyFF_s INT32 Offset; ///< Offset of the effect. UINT32 Phase; ///< Position in the cycle of the periodic effect at which playback begins, in the range from 0 through 35,999 UINT32 Period; ///< Period of the effect, in microseconds. -} JoyFF_t; +}; /** \brief Forcefeedback for the first joystick @@ -298,7 +298,7 @@ char *I_GetUserName(void); */ INT32 I_mkdir(const char *dirname, INT32 unixright); -typedef struct { +struct CPUInfoFlags { int FPU : 1; ///< FPU availabile int CPUID : 1; ///< CPUID instruction int RDTSC : 1; ///< RDTSC instruction @@ -324,7 +324,7 @@ typedef struct { int ALPHAbyte : 1; ///< ? int PAE : 1; ///< Physical Address Extension int CPUs : 8; -} CPUInfoFlags; +}; /** \brief Info about CPU diff --git a/src/i_time.h b/src/i_time.h index cab36133b..8d90c3d09 100644 --- a/src/i_time.h +++ b/src/i_time.h @@ -22,10 +22,10 @@ extern "C" { #endif -typedef struct timestate_s { +struct timestate_t { tic_t time; fixed_t timefrac; -} timestate_t; +}; extern timestate_t g_time; extern consvar_t cv_timescale; diff --git a/src/info.h b/src/info.h index 7dff6e2de..4425b4dc8 100644 --- a/src/info.h +++ b/src/info.h @@ -5567,7 +5567,7 @@ typedef enum state NUMSTATES } statenum_t; -typedef struct +struct state_t { spritenum_t sprite; UINT32 frame; // we use the upper 16 bits for translucency and other shade effects @@ -5576,7 +5576,7 @@ typedef struct INT32 var1; INT32 var2; statenum_t nextstate; -} state_t; +}; extern state_t states[NUMSTATES]; extern char sprnames[NUMSPRITES + 1][5]; @@ -6680,7 +6680,7 @@ typedef enum mobj_type NUMMOBJTYPES } mobjtype_t; -typedef struct +struct mobjinfo_t { INT32 doomednum; statenum_t spawnstate; @@ -6706,7 +6706,7 @@ typedef struct sfxenum_t activesound; UINT32 flags; statenum_t raisestate; -} mobjinfo_t; +}; extern mobjinfo_t mobjinfo[NUMMOBJTYPES]; diff --git a/src/k_bheap.h b/src/k_bheap.h index 04e37492c..881a8973c 100644 --- a/src/k_bheap.h +++ b/src/k_bheap.h @@ -17,21 +17,21 @@ typedef void(*updateindexfunc)(void *const, const size_t); -typedef struct bheapitem_s +struct bheapitem_t { size_t heapindex; // The index in the heap this item is updateindexfunc indexchanged; // A callback function that is called when this item changes index to alert data struct bheap_s *owner; // The heap that owns this item void *data; // data for this heap item UINT32 value; // The value of this item, the lowest value item is first in the array -} bheapitem_t; +}; -typedef struct bheap_s +struct bheap_s { size_t capacity; // capacity of the heap size_t count; // number of items in the heap bheapitem_t *array; // pointer to the heap items array -} bheap_t; +}; /*-------------------------------------------------- diff --git a/src/k_boss.h b/src/k_boss.h index db335bb07..f24365b29 100644 --- a/src/k_boss.h +++ b/src/k_boss.h @@ -26,14 +26,14 @@ typedef enum #define NUMWEAKSPOTS 8 #define WEAKSPOTANIMTIME (3*TICRATE) -typedef struct weakspot_t +struct weakspot_t { mobj_t *spot; spottype_t type; tic_t time; UINT16 color; boolean minimap; -} weakspot_t; +}; #define BOSSHEALTHBARLEN 110 diff --git a/src/k_bot.h b/src/k_bot.h index 858e4f331..60d22700d 100644 --- a/src/k_bot.h +++ b/src/k_bot.h @@ -31,10 +31,10 @@ #define BOTSPINDASHCONFIRM (2*TICRATE) // Point for bots to aim for -typedef struct botprediction_s { +struct botprediction_t { fixed_t x, y; fixed_t radius; -} botprediction_t; +}; // AVAILABLE FOR LUA diff --git a/src/k_brightmap.h b/src/k_brightmap.h index 9ed86b125..2c22a171f 100644 --- a/src/k_brightmap.h +++ b/src/k_brightmap.h @@ -17,7 +17,7 @@ #include "doomdef.h" #include "doomtype.h" -typedef struct brightmapStorage_s +struct brightmapStorage_t { // Brightmap storage struct. // Stores data for brightmap definitions, @@ -28,7 +28,7 @@ typedef struct brightmapStorage_s char brightmapName[9]; // The brightmap's name. UINT32 brightmapHash; // The brightmap name's hash. -} brightmapStorage_t; +}; /*-------------------------------------------------- void K_InitBrightmapsPwad(INT32 wadNum); diff --git a/src/k_follower.h b/src/k_follower.h index 3c1e2a7d1..13c67bb11 100644 --- a/src/k_follower.h +++ b/src/k_follower.h @@ -43,7 +43,7 @@ typedef enum // // We'll define these here because they're really just a mobj that'll follow some rules behind a player // -typedef struct follower_s +struct follower_t { char name[SKINNAMESIZE+1]; // Skin Name. This is what to refer to when asking the commands anything.. char icon[8+1]; // Lump names are only 8 characters. (+1 for \0) @@ -81,19 +81,19 @@ typedef struct follower_s statenum_t losestate; // state when the player has lost statenum_t hitconfirmstate; // state for hit confirm tic_t hitconfirmtime; // time to keep the above playing for -} follower_t; +}; extern INT32 numfollowers; extern follower_t followers[MAXSKINS]; #define MAXFOLLOWERCATEGORIES 32 -typedef struct followercategory_s +struct followercategory_t { char name[SKINNAMESIZE+1]; // Name. This is used for the menus. We'll just follow the same rules as skins for this. char icon[8+1]; // Lump names are only 8 characters. (+1 for \0) UINT8 numincategory; -} followercategory_t; +}; extern INT32 numfollowercategories; extern followercategory_t followercategories[MAXFOLLOWERCATEGORIES]; diff --git a/src/k_hud.h b/src/k_hud.h index 4f84f9dd3..eac04aba2 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -23,12 +23,12 @@ void K_AdjustXYWithSnap(INT32 *x, INT32 *y, UINT32 options, INT32 dupx, INT32 dupy); -typedef struct trackingResult_s +struct trackingResult_t { fixed_t x, y; fixed_t scale; boolean onScreen; -} trackingResult_t; +}; void K_ObjectTracking(trackingResult_t *result, vector3_t *point, boolean reverse); diff --git a/src/k_menu.h b/src/k_menu.h index 588542002..7e222d212 100644 --- a/src/k_menu.h +++ b/src/k_menu.h @@ -107,11 +107,11 @@ typedef union } itemaction_t; // Player Setup menu colors linked list -typedef struct menucolor_s { +struct menucolor_s { struct menucolor_s *next; struct menucolor_s *prev; UINT16 color; -} menucolor_t; +}; extern menucolor_t *menucolorhead, *menucolortail; @@ -121,7 +121,7 @@ extern CV_PossibleValue_t gametype_cons_t[]; // MENU TYPEDEFS // -typedef struct menuitem_s +struct menuitem_t { UINT16 status; // show IT_xxx @@ -134,9 +134,9 @@ typedef struct menuitem_s // extra variables INT32 mvar1; INT32 mvar2; -} menuitem_t; +}; -typedef struct menu_s +struct menu_s { INT16 numitems; // # of menu items struct menu_s *prevMenu; // previous menu @@ -155,7 +155,7 @@ typedef struct menu_s void (*initroutine)(void); // called when starting a new menu boolean (*quitroutine)(void); // called before quit a menu return true if we can boolean (*inputroutine)(INT32); // if set, called every frame in the input handler. Returning true overwrites normal input handling. -} menu_t; +}; typedef enum { @@ -522,7 +522,7 @@ typedef enum MBT_START = 1<<8 } menuButtonCode_t; -typedef struct menucmd_s +struct menucmd_t { SINT8 dpad_ud; // up / down dpad SINT8 dpad_lr; // left / right @@ -530,7 +530,7 @@ typedef struct menucmd_s UINT32 buttonsHeld; // prev frame's buttons UINT16 delay; // menu wait UINT32 delayCount; // num times ya did menu wait (to make the wait shorter each time) -} menucmd_t; +}; extern menucmd_t menucmd[MAXSPLITSCREENPLAYERS]; @@ -607,7 +607,7 @@ typedef enum CSSTEP_READY } setup_mdepth_t; -typedef struct setup_player_s +struct setup_player_t { SINT8 gridx, gridy; UINT8 profilen; @@ -633,7 +633,7 @@ typedef struct setup_player_s tic_t follower_timer; UINT8 follower_frame; state_t *follower_state; -} setup_player_t; +}; extern setup_player_t setup_player[MAXSPLITSCREENPLAYERS]; @@ -800,12 +800,12 @@ void M_ServerListFillDebug(void); // Options menu: // mode descriptions for video mode menu -typedef struct +struct modedesc_t { INT32 modenum; // video mode number in the vidmodes list const char *desc; // XXXxYYY UINT8 goodratio; // aspect correct if 1 -} modedesc_t; +}; #define MAXCOLUMNMODES 12 //max modes displayed in one column diff --git a/src/k_pathfind.h b/src/k_pathfind.h index 3d08d87e7..c18911202 100644 --- a/src/k_pathfind.h +++ b/src/k_pathfind.h @@ -35,27 +35,27 @@ typedef boolean(*getpathfindfinishedfunc)(void*, void*); // A pathfindnode contains information about a node from the pathfinding // heapindex is only used within the pathfinding algorithm itself, and is always 0 after it is completed -typedef struct pathfindnode_s { +struct pathfindnode_s { size_t heapindex; // The index in the openset binary heap. Only valid while the node is in the openset. void *nodedata; struct pathfindnode_s *camefrom; // should eventually be the most efficient predecessor node UINT32 gscore; // The accumulated distance from the start to this node UINT32 hscore; // The heuristic from this node to the goal -} pathfindnode_t; +}; // Contains the final created path after pathfinding is completed -typedef struct path_s { +struct path_t { size_t numnodes; struct pathfindnode_s *array; UINT32 totaldist; -} path_t; +}; // Contains info about the pathfinding used to setup the algorithm // (e.g. the base capacities of the dynamically allocated arrays) // should be setup by the caller before starting pathfinding // base capacities will be 8 if they aren't setup, missing callback functions will cause an error. // Can be accessed after the pathfinding is complete to get the final capacities of them -typedef struct pathfindsetup_s { +struct pathfindsetup_t { size_t opensetcapacity; size_t closedsetcapacity; size_t nodesarraycapacity; @@ -67,7 +67,7 @@ typedef struct pathfindsetup_s { getnodeheuristicfunc getheuristic; getnodetraversablefunc gettraversable; getpathfindfinishedfunc getfinished; -} pathfindsetup_t; +}; /*-------------------------------------------------- diff --git a/src/k_profiles.h b/src/k_profiles.h index 961ac807b..2e65a49fe 100644 --- a/src/k_profiles.h +++ b/src/k_profiles.h @@ -45,7 +45,7 @@ // profile_t definition (WIP) // If you edit, see PR_SaveProfiles and PR_LoadProfiles -typedef struct profile_s +struct profile_t { // Versionning @@ -70,7 +70,7 @@ typedef struct profile_s // Finally, control data itself INT32 controls[num_gamecontrols][MAXINPUTMAPPING]; // Lists of all the controls, defined the same way as default inputs in g_input.c -} profile_t; +}; // Functions diff --git a/src/k_terrain.h b/src/k_terrain.h index 84bdc6ad8..56bf7df34 100644 --- a/src/k_terrain.h +++ b/src/k_terrain.h @@ -22,7 +22,7 @@ #define TERRAIN_NAME_LEN 32 -typedef struct t_splash_s +struct t_splash_t { // Splash definition. // These are particles spawned when hitting the floor. @@ -41,9 +41,9 @@ typedef struct t_splash_s angle_t cone; // Randomized angle of the push-out. UINT8 numParticles; // Number of particles to spawn. -} t_splash_t; +}; -typedef struct t_footstep_s +struct t_footstep_t { // Footstep definition. // These are particles spawned when moving fast enough on a floor. @@ -64,7 +64,7 @@ typedef struct t_footstep_s tic_t sfxFreq; // How frequently to play the sound. tic_t frequency; // How frequently to spawn the particles. fixed_t requiredSpeed; // Speed percentage you need to be at to trigger the particles. -} t_footstep_t; +}; typedef enum { @@ -75,7 +75,7 @@ typedef enum TOV__MAX } t_overlay_action_t; -typedef struct t_overlay_s +struct t_overlay_t { // Overlay definition. // These are sprites displayed on top of the base object. @@ -87,7 +87,7 @@ typedef struct t_overlay_s fixed_t scale; // Thing scale multiplier. UINT16 color; // Colorize effect. SKINCOLOR_NONE has no colorize. fixed_t speed; // Speed-up based on object speed. 0 plays the animation at a constant rate. -} t_overlay_t; +}; typedef enum { @@ -98,7 +98,7 @@ typedef enum TRF_TRIPWIRE = 1<<3 // Texture is a tripwire when used as a midtexture } terrain_flags_t; -typedef struct terrain_s +struct terrain_s { // Terrain definition. // These are all of the properties that the floor gets. @@ -118,9 +118,9 @@ typedef struct terrain_s angle_t speedPadAngle; // Speed pad angle fixed_t floorClip; // Offset for sprites on this ground UINT32 flags; // Flag values (see: terrain_flags_t) -} terrain_t; +}; -typedef struct t_floor_s +struct t_floor_t { // Terrain floor definition. // Ties a texture name to a terrain definition. @@ -128,7 +128,7 @@ typedef struct t_floor_s char textureName[9]; // Floor texture name. UINT32 textureHash; // Floor texture hash. size_t terrainID; // Terrain definition ID. -} t_floor_t; +}; /*-------------------------------------------------- diff --git a/src/k_waypoint.h b/src/k_waypoint.h index 1cb659dbe..9322477e1 100644 --- a/src/k_waypoint.h +++ b/src/k_waypoint.h @@ -20,7 +20,7 @@ #define DEFAULT_WAYPOINT_RADIUS (384) -typedef struct waypoint_s +struct waypoint_s { mobj_t *mobj; boolean onaline; @@ -30,7 +30,7 @@ typedef struct waypoint_s UINT32 *prevwaypointdistances; size_t numnextwaypoints; size_t numprevwaypoints; -} waypoint_t; +}; // AVAILABLE FOR LUA diff --git a/src/lua_hudlib_drawlist.h b/src/lua_hudlib_drawlist.h index 398293602..15249e4f9 100644 --- a/src/lua_hudlib_drawlist.h +++ b/src/lua_hudlib_drawlist.h @@ -24,8 +24,6 @@ extern "C" { #endif -typedef struct huddrawlist_s *huddrawlist_h; - // Create a new drawlist. Returns a handle to it. huddrawlist_h LUA_HUD_CreateDrawList(void); // Clears the draw list. diff --git a/src/m_aatree.c b/src/m_aatree.c index c0bb739f8..506887776 100644 --- a/src/m_aatree.c +++ b/src/m_aatree.c @@ -27,7 +27,7 @@ typedef struct aatree_node_s struct aatree_node_s *left, *right; } aatree_node_t; -struct aatree_s +struct aatree_t { aatree_node_t *root; UINT32 flags; diff --git a/src/m_aatree.h b/src/m_aatree.h index b784eb17a..77bfd05fb 100644 --- a/src/m_aatree.h +++ b/src/m_aatree.h @@ -19,7 +19,6 @@ // Flags for AA trees. #define AATREE_ZUSER 1 // Treat values as z_zone-allocated blocks and set their user fields -typedef struct aatree_s aatree_t; typedef void (*aatree_iter_t)(INT32 key, void *value); aatree_t *M_AATreeAlloc(UINT32 flags); diff --git a/src/m_cond.h b/src/m_cond.h index 323c84347..c340fbef1 100644 --- a/src/m_cond.h +++ b/src/m_cond.h @@ -37,7 +37,7 @@ typedef enum } conditiontype_t; // Condition Set information -typedef struct +struct condition_t { UINT32 id; /// <- The ID of this condition. /// In an unlock condition, all conditions with the same ID @@ -47,14 +47,14 @@ typedef struct INT32 requirement; /// <- The requirement for this variable. INT16 extrainfo1; /// <- Extra information for the condition when needed. INT16 extrainfo2; /// <- Extra information for the condition when needed. -} condition_t; -typedef struct +}; +struct conditionset_t { UINT32 numconditions; /// <- number of conditions. condition_t *condition; /// <- All conditionals to be checked. UINT8 achieved; /// <- Whether this conditional has been achieved already or not. /// (Conditional checking is skipped if true -- it's assumed you can't relock an unlockable) -} conditionset_t; +}; // Emblem information #define ET_GLOBAL 0 // Emblem with a position in space @@ -69,7 +69,7 @@ typedef struct // Map emblem flags #define ME_ENCORE 1 -typedef struct +struct emblem_t { UINT8 type; ///< Emblem type INT16 tag; ///< Tag of emblem mapthing @@ -79,8 +79,8 @@ typedef struct INT32 var; ///< If needed, specifies information on the target amount to achieve (or target skin) char hint[110]; ///< Hint for emblem hints menu UINT8 collected; ///< Do you have this emblem? -} emblem_t; -typedef struct +}; +struct extraemblem_t { char name[20]; ///< Name of the goal (used in the "emblem awarded" cecho) char description[40]; ///< Description of goal (used in statistics) @@ -89,10 +89,10 @@ typedef struct UINT8 sprite; ///< emblem sprite to use, 0 - 25 UINT16 color; ///< skincolor to use UINT8 collected; ///< Do you have this emblem? -} extraemblem_t; +}; // Unlockable information -typedef struct +struct unlockable_t { char name[64]; char objective[64]; @@ -103,7 +103,7 @@ typedef struct UINT8 nocecho; UINT8 nochecklist; UINT8 unlocked; -} unlockable_t; +}; #define SECRET_NONE 0 // Does nil. Use with levels locked by UnlockRequired #define SECRET_HEADER 1 // Does nothing on its own, just serves as a header for the menu diff --git a/src/m_dllist.h b/src/m_dllist.h index 680c2cd80..9b9cfca81 100644 --- a/src/m_dllist.h +++ b/src/m_dllist.h @@ -29,11 +29,11 @@ #pragma warning(disable : 4706) #endif -typedef struct mdllistitem_s +struct mdllistitem_s { struct mdllistitem_s *next; struct mdllistitem_s **prev; -} mdllistitem_t; +}; FUNCINLINE static ATTRINLINE void M_DLListInsert(mdllistitem_t *item, mdllistitem_t **head) { diff --git a/src/m_fixed.h b/src/m_fixed.h index fd8e79b94..b605434fb 100644 --- a/src/m_fixed.h +++ b/src/m_fixed.h @@ -333,11 +333,11 @@ FUNCMATH FUNCINLINE static ATTRINLINE fixed_t FixedRound(fixed_t x) return INT32_MAX; } -typedef struct +struct vector2_t { fixed_t x; fixed_t y; -} vector2_t; +}; vector2_t *FV2_Load(vector2_t *vec, fixed_t x, fixed_t y); vector2_t *FV2_UnLoad(vector2_t *vec, fixed_t *x, fixed_t *y); @@ -361,10 +361,10 @@ boolean FV2_Equal(const vector2_t *a_1, const vector2_t *a_2); fixed_t FV2_Dot(const vector2_t *a_1, const vector2_t *a_2); vector2_t *FV2_Point2Vec (const vector2_t *point1, const vector2_t *point2, vector2_t *a_o); -typedef struct +struct vector3_t { fixed_t x, y, z; -} vector3_t; +}; vector3_t *FV3_Load(vector3_t *vec, fixed_t x, fixed_t y, fixed_t z); vector3_t *FV3_UnLoad(vector3_t *vec, fixed_t *x, fixed_t *y, fixed_t *z); @@ -401,10 +401,10 @@ vector3_t *FV3_IntersectionPoint(const vector3_t *vNormal, const vector3_t *vLin UINT8 FV3_PointOnLineSide(const vector3_t *point, const vector3_t *line); boolean FV3_PointInsideBox(const vector3_t *point, const vector3_t *box); -typedef struct +struct matrix_t { fixed_t m[16]; -} matrix_t; +}; void FM_LoadIdentity(matrix_t* matrix); void FM_CreateObjectMatrix(matrix_t *matrix, fixed_t x, fixed_t y, fixed_t z, fixed_t anglex, fixed_t angley, fixed_t anglez, fixed_t upx, fixed_t upy, fixed_t upz, fixed_t radius); diff --git a/src/m_perfstats.h b/src/m_perfstats.h index 2c448031c..f0a186bf3 100644 --- a/src/m_perfstats.h +++ b/src/m_perfstats.h @@ -38,22 +38,22 @@ extern int ps_checkposition_calls; extern precise_t ps_lua_thinkframe_time; extern int ps_lua_mobjhooks; -typedef struct +struct ps_hookinfo_t { precise_t time_taken; char short_src[LUA_IDSIZE]; -} ps_hookinfo_t; +}; void PS_SetThinkFrameHookInfo(int index, precise_t time_taken, char* short_src); -typedef struct +struct ps_botinfo_t { boolean isBot; precise_t total; precise_t prediction; // K_CreateBotPrediction precise_t nudge; // K_NudgePredictionTowardsObjects precise_t item; // K_BotItemUsage -} ps_botinfo_t; +}; extern ps_botinfo_t ps_bots[MAXPLAYERS]; diff --git a/src/m_queue.h b/src/m_queue.h index 3e9579e11..6ba8e335c 100644 --- a/src/m_queue.h +++ b/src/m_queue.h @@ -13,17 +13,17 @@ #ifndef M_QUEUE_H #define M_QUEUE_H -typedef struct mqueueitem_s +struct mqueueitem_s { struct mqueueitem_s *next; -} mqueueitem_t; +}; -typedef struct mqueue_s +struct mqueue_t { mqueueitem_t head; mqueueitem_t *tail; mqueueitem_t *rover; -} mqueue_t; +}; void M_QueueInit(mqueue_t *queue); void M_QueueInsert(mqueueitem_t *item, mqueue_t *queue); diff --git a/src/mserv.h b/src/mserv.h index eb1152876..b47bf2c25 100644 --- a/src/mserv.h +++ b/src/mserv.h @@ -27,16 +27,16 @@ typedef union } ATTRPACK msg_header_t; // Keep this structure 8 bytes aligned (current size is 80) -typedef struct +struct msg_server_t { msg_header_t header; char ip[16]; char port[8]; char contact[32]; char version[8]; // format is: x.yy.z (like 1.30.2 or 1.31) -} ATTRPACK msg_server_t; +} ATTRPACK; -typedef struct +struct msg_ban_t { msg_header_t header; char ipstart[16]; @@ -44,7 +44,7 @@ typedef struct char endstamp[32]; char reason[255]; INT32 hostonly; -} ATTRPACK msg_ban_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() diff --git a/src/p_local.h b/src/p_local.h index 9bc92cb64..70e26f9d9 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -80,7 +80,7 @@ void P_RemoveThinker(thinker_t *thinker); // // P_USER // -typedef struct camera_s +struct camera_t { boolean chase; angle_t aiming; @@ -119,7 +119,7 @@ typedef struct camera_s // Interpolation data fixed_t old_x, old_y, old_z; angle_t old_angle, old_aiming; -} camera_t; +}; // demo freecam or something before i commit die struct demofreecam_s { @@ -246,11 +246,11 @@ typedef enum NUMJINGLES } jingletype_t; -typedef struct +struct jingle_t { char musname[7]; boolean looping; -} jingle_t; +}; extern jingle_t jingleinfo[NUMJINGLES]; @@ -381,7 +381,7 @@ void P_InternalFlickyHop(mobj_t *actor, fixed_t momz, fixed_t momh, angle_t angl // P_MAP // -typedef struct tm_s +struct tm_t { mobj_t *thing; fixed_t x, y; @@ -411,7 +411,7 @@ typedef struct tm_s // set by PIT_CheckLine() for any line that stopped the PIT_CheckLine() // that is, for any line which is 'solid' line_t *blockingline; -} tm_t; +}; extern tm_t tm; @@ -431,12 +431,12 @@ void P_UnsetThingPosition(mobj_t *thing); void P_SetThingPosition(mobj_t *thing); void P_SetUnderlayPosition(mobj_t *thing); -typedef struct TryMoveResult_s +struct TryMoveResult_t { boolean success; line_t *line; mobj_t *mo; -} TryMoveResult_t; +}; boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y, TryMoveResult_t *result); boolean P_CheckMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff, TryMoveResult_t *result); @@ -496,7 +496,7 @@ extern mobj_t **blocklinks; // for thing chains // // P_INTER // -typedef struct BasicFF_s +struct BasicFF_t { INT32 ForceX; ///< The X of the Force's Vel INT32 ForceY; ///< The Y of the Force's Vel @@ -506,7 +506,7 @@ typedef struct BasicFF_s INT32 Gain; ///< /The gain to be applied to the effect, in the range from 0 through 10,000. //All, CONSTANTFORCE �10,000 to 10,000 INT32 Magnitude; ///< Magnitude of the effect, in the range from 0 through 10,000. -} BasicFF_t; +}; /* Damage/death types, for P_DamageMobj and related */ //// Damage types diff --git a/src/p_maputl.h b/src/p_maputl.h index b53bddfd1..15e2abbf4 100644 --- a/src/p_maputl.h +++ b/src/p_maputl.h @@ -20,12 +20,12 @@ // // P_MAPUTL // -typedef struct +struct divline_t { fixed_t x, y, dx, dy; -} divline_t; +}; -typedef struct +struct intercept_t { fixed_t frac; // along trace line boolean isaline; @@ -34,7 +34,7 @@ typedef struct mobj_t *thing; line_t *line; } d; -} intercept_t; +}; typedef boolean (*traverser_t)(intercept_t *in); diff --git a/src/p_mobj.h b/src/p_mobj.h index b725f2bf0..50686eac9 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -270,7 +270,7 @@ typedef enum { } precipflag_t; // Map Object definition. -typedef struct mobj_s +struct mobj_s { // List: thinker links. thinker_t thinker; @@ -414,7 +414,7 @@ typedef struct mobj_s INT32 dispoffset; // WARNING: New fields must be added separately to savegame and Lua. -} mobj_t; +}; // // For precipitation @@ -423,7 +423,7 @@ typedef struct mobj_s // so please keep the start of the // structure the same. // -typedef struct precipmobj_s +struct precipmobj_s { // List: thinker links. thinker_t thinker; @@ -480,15 +480,15 @@ typedef struct precipmobj_s INT32 tics; // state tic counter state_t *state; UINT32 flags; // flags from mobjinfo tables -} precipmobj_t; +}; -typedef struct actioncache_s +struct actioncache_s { struct actioncache_s *next; struct actioncache_s *prev; struct mobj_s *mobj; INT32 statenum; -} actioncache_t; +}; extern actioncache_t actioncachehead; diff --git a/src/p_polyobj.h b/src/p_polyobj.h index 91333a107..9cb94126b 100644 --- a/src/p_polyobj.h +++ b/src/p_polyobj.h @@ -66,7 +66,7 @@ typedef enum // Polyobject Structure // -typedef struct polyobj_s +struct polyobj_s { mdllistitem_t link; // for subsector links; must be first @@ -114,23 +114,23 @@ typedef struct polyobj_s // these are saved for netgames, so do not let Lua touch these! INT32 spawnflags; // Flags the polyobject originally spawned with INT32 spawntrans; // Translucency the polyobject originally spawned with -} polyobj_t; +}; // // Polyobject Blockmap Link Structure // -typedef struct polymaplink_s +struct polymaplink_t { mdllistitem_t link; // for blockmap links polyobj_t *po; // pointer to polyobject -} polymaplink_t; +}; // // Polyobject Special Thinkers // -typedef struct polyrotate_s +struct polyrotate_t { thinker_t thinker; // must be first @@ -138,9 +138,9 @@ typedef struct polyrotate_s INT32 speed; // speed of movement per frame INT32 distance; // distance to move UINT8 turnobjs; // turn objects? PTF_ flags -} polyrotate_t; +}; -typedef struct polymove_s +struct polymove_t { thinker_t thinker; // must be first @@ -150,7 +150,7 @@ typedef struct polymove_s fixed_t momy; // y component of speed along angle INT32 distance; // total distance to move UINT32 angle; // angle along which to move -} polymove_t; +}; // PolyObject waypoint movement return behavior typedef enum @@ -160,7 +160,7 @@ typedef enum PWR_COMEBACK, // Repeat sequence in reverse } polywaypointreturn_e; -typedef struct polywaypoint_s +struct polywaypoint_t { thinker_t thinker; // must be first @@ -172,9 +172,9 @@ typedef struct polywaypoint_s UINT8 returnbehavior; // behavior after reaching the last waypoint UINT8 continuous; // continuously move - used with PWR_WRAP or PWR_COMEBACK UINT8 stophere; // Will stop after it reaches the next waypoint -} polywaypoint_t; +}; -typedef struct polyslidedoor_s +struct polyslidedoor_t { thinker_t thinker; // must be first @@ -191,9 +191,9 @@ typedef struct polyslidedoor_s fixed_t momx; // x component of speed along angle fixed_t momy; // y component of speed along angle UINT8 closing; // if true, is closing -} polyslidedoor_t; +}; -typedef struct polyswingdoor_s +struct polyswingdoor_t { thinker_t thinker; // must be first @@ -205,9 +205,9 @@ typedef struct polyswingdoor_s INT32 initDistance; // initial distance to travel INT32 distance; // current distance to travel UINT8 closing; // if true, is closing -} polyswingdoor_t; +}; -typedef struct polydisplace_s +struct polydisplace_t { thinker_t thinker; // must be first @@ -216,9 +216,9 @@ typedef struct polydisplace_s fixed_t dx; fixed_t dy; fixed_t oldHeights; -} polydisplace_t; +}; -typedef struct polyrotdisplace_s +struct polyrotdisplace_t { thinker_t thinker; // must be first @@ -227,9 +227,9 @@ typedef struct polyrotdisplace_s fixed_t rotscale; UINT8 turnobjs; fixed_t oldHeights; -} polyrotdisplace_t; +}; -typedef struct polyfade_s +struct polyfade_t { thinker_t thinker; // must be first @@ -241,7 +241,7 @@ typedef struct polyfade_s boolean ticbased; INT32 duration; INT32 timer; -} polyfade_t; +}; // // Line Activation Data Structures @@ -261,23 +261,23 @@ typedef enum PTF_OTHERS = 1<<1, // Turn other mobjs with movement } polyturnflags_e; -typedef struct polyrotdata_s +struct polyrotdata_t { INT32 polyObjNum; // numeric id of polyobject to affect INT32 direction; // direction of rotation INT32 speed; // angular speed INT32 distance; // distance to move UINT8 flags; // TMPR_ flags -} polyrotdata_t; +}; -typedef struct polymovedata_s +struct polymovedata_t { INT32 polyObjNum; // numeric id of polyobject to affect fixed_t distance; // distance to move fixed_t speed; // linear speed angle_t angle; // angle of movement UINT8 overRide; // if true, will override any action on the object -} polymovedata_t; +}; typedef enum { @@ -285,14 +285,14 @@ typedef enum PWF_LOOP = 1<<1, // Loop movement (used with PWR_WRAP or PWR_COMEBACK) } polywaypointflags_e; -typedef struct polywaypointdata_s +struct polywaypointdata_t { INT32 polyObjNum; // numeric id of polyobject to affect INT32 sequence; // waypoint sequence # fixed_t speed; // linear speed UINT8 returnbehavior; // behavior after reaching the last waypoint UINT8 flags; // PWF_ flags -} polywaypointdata_t; +}; typedef enum { @@ -315,7 +315,7 @@ typedef enum POLY_DOOR_SWING, } polydoor_e; -typedef struct polydoordata_s +struct polydoordata_t { INT32 polyObjNum; // numeric id of polyobject to affect INT32 doorType; // polyobj door type @@ -323,31 +323,31 @@ typedef struct polydoordata_s angle_t angle; // for slide door only, angle of motion INT32 distance; // distance to move INT32 delay; // delay time after opening -} polydoordata_t; +}; -typedef struct polydisplacedata_s +struct polydisplacedata_t { INT32 polyObjNum; struct sector_s *controlSector; fixed_t dx; fixed_t dy; -} polydisplacedata_t; +}; -typedef struct polyrotdisplacedata_s +struct polyrotdisplacedata_t { INT32 polyObjNum; struct sector_s *controlSector; fixed_t rotscale; UINT8 turnobjs; -} polyrotdisplacedata_t; +}; -typedef struct polyflagdata_s +struct polyflagdata_t { INT32 polyObjNum; INT32 speed; UINT32 angle; fixed_t momx; -} polyflagdata_t; +}; typedef enum { @@ -358,7 +358,7 @@ typedef enum TMPF_GHOSTFADE = 1<<4, } textmappolyfade_t; -typedef struct polyfadedata_s +struct polyfadedata_t { INT32 polyObjNum; INT32 destvalue; @@ -366,7 +366,7 @@ typedef struct polyfadedata_s boolean doghostfade; boolean ticbased; INT32 speed; -} polyfadedata_t; +}; // // Functions diff --git a/src/p_saveg.h b/src/p_saveg.h index 27865bf50..b7ca6527f 100644 --- a/src/p_saveg.h +++ b/src/p_saveg.h @@ -28,14 +28,14 @@ boolean P_LoadNetGame(boolean reloading); mobj_t *P_FindNewPosition(UINT32 oldposition); -typedef struct +struct savedata_t { UINT8 skin; INT32 score; INT32 lives; UINT16 emeralds; UINT8 numgameovers; -} savedata_t; +}; extern savedata_t savedata; extern UINT8 *save_p; diff --git a/src/p_setup.h b/src/p_setup.h index 04a3233e0..9284a2b0d 100644 --- a/src/p_setup.h +++ b/src/p_setup.h @@ -45,7 +45,7 @@ enum // // MAP used flats lookup table // -typedef struct +struct levelflat_t { char name[9]; // resource name from wad @@ -85,7 +85,7 @@ typedef struct void *mipmap; void *mippic; #endif -} levelflat_t; +}; extern size_t numlevelflats; extern levelflat_t *levelflats; diff --git a/src/p_slopes.h b/src/p_slopes.h index 5543b785f..454dd344f 100644 --- a/src/p_slopes.h +++ b/src/p_slopes.h @@ -117,16 +117,16 @@ typedef enum { } dynplanetype_t; /// Permit slopes to be dynamically altered through a thinker. -typedef struct +struct dynlineplanethink_t { thinker_t thinker; pslope_t *slope; dynplanetype_t type; line_t *sourceline; fixed_t extent; -} dynlineplanethink_t; +}; -typedef struct +struct dynvertexplanethink_t { thinker_t thinker; pslope_t *slope; @@ -135,7 +135,7 @@ typedef struct fixed_t origsecheights[3]; fixed_t origvecheights[3]; UINT8 relative; -} dynvertexplanethink_t; +}; void T_DynamicSlopeLine (dynlineplanethink_t* th); void T_DynamicSlopeVert (dynvertexplanethink_t* th); diff --git a/src/p_spec.h b/src/p_spec.h index 91bc74150..6bfbc535a 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -578,17 +578,17 @@ UINT16 P_GetFFloorID(ffloor_t *fflr); ffloor_t *P_GetFFloorByID(sector_t *sec, UINT16 id); // Use this when you don't know the type of your thinker data struct but need to access its thinker. -typedef struct +struct thinkerdata_t { thinker_t thinker; -} thinkerdata_t; +}; // // P_LIGHTS // /** Fire flicker action structure. */ -typedef struct +struct fireflicker_t { thinker_t thinker; ///< The thinker in use for the effect. sector_t *sector; ///< The sector where action is taking place. @@ -596,29 +596,29 @@ typedef struct INT32 resetcount; INT16 maxlight; ///< The brightest light level to use. INT16 minlight; ///< The darkest light level to use. -} fireflicker_t; +}; -typedef struct +struct lightflash_t { thinker_t thinker; sector_t *sector; INT32 maxlight; INT32 minlight; -} lightflash_t; +}; /** Laser block thinker. */ -typedef struct +struct laserthink_t { thinker_t thinker; ///< Thinker structure for laser. INT16 tag; line_t *sourceline; UINT8 nobosses; -} laserthink_t; +}; /** Strobe light action structure.. */ -typedef struct +struct strobe_t { thinker_t thinker; ///< The thinker in use for the effect. sector_t *sector; ///< The sector where the action is taking place. @@ -627,9 +627,9 @@ typedef struct INT16 maxlight; ///< The maximum light level to use. INT32 darktime; ///< How INT32 to use minlight. INT32 brighttime; ///< How INT32 to use maxlight. -} strobe_t; +}; -typedef struct +struct glow_t { thinker_t thinker; sector_t *sector; @@ -637,11 +637,11 @@ typedef struct INT16 maxlight; INT16 direction; INT16 speed; -} glow_t; +}; /** Thinker struct for fading lights. */ -typedef struct +struct lightlevel_t { thinker_t thinker; ///< Thinker in use for the effect. sector_t *sector; ///< Sector where action is taking place. @@ -652,7 +652,7 @@ typedef struct fixed_t fixedpertic; ///< Fixed point for increment per tic. // The reason for those two above to be fixed point is to deal with decimal values that would otherwise get trimmed away. INT32 timer; ///< Internal timer. -} lightlevel_t; +}; #define GLOWSPEED 8 #define STROBEBRIGHT 5 @@ -709,7 +709,7 @@ typedef enum /** Ceiling movement structure. */ -typedef struct +struct ceiling_t { thinker_t thinker; ///< Thinker for the type of movement. ceiling_e type; ///< Type of movement. @@ -728,7 +728,7 @@ typedef struct INT16 tag; ///< Tag of linedef executor to run when movement is done. fixed_t origspeed; ///< The original, "real" speed. INT32 sourceline; ///< Index of the source linedef -} ceiling_t; +}; #define CEILSPEED (FRACUNIT) @@ -771,7 +771,7 @@ typedef enum bridgeFall, } elevator_e; -typedef struct +struct floormove_t { thinker_t thinker; floor_e type; @@ -786,9 +786,9 @@ typedef struct fixed_t delaytimer; INT16 tag; INT32 sourceline; -} floormove_t; +}; -typedef struct +struct elevator_t { thinker_t thinker; elevator_e type; @@ -807,7 +807,7 @@ typedef struct fixed_t floorwasheight; // Height the floor WAS at fixed_t ceilingwasheight; // Height the ceiling WAS at line_t *sourceline; -} elevator_t; +}; typedef enum { @@ -816,7 +816,7 @@ typedef enum CF_REVERSE = 1<<2, // Reverse gravity } crumbleflag_t; -typedef struct +struct crumble_t { thinker_t thinker; line_t *sourceline; @@ -830,15 +830,15 @@ typedef struct fixed_t floorwasheight; // Height the floor WAS at fixed_t ceilingwasheight; // Height the ceiling WAS at UINT8 flags; -} crumble_t; +}; -typedef struct +struct noenemies_t { thinker_t thinker; line_t *sourceline; // Source line of the thinker -} noenemies_t; +}; -typedef struct +struct continuousfall_t { thinker_t thinker; sector_t *sector; @@ -847,9 +847,9 @@ typedef struct fixed_t floorstartheight; fixed_t ceilingstartheight; fixed_t destheight; -} continuousfall_t; +}; -typedef struct +struct bouncecheese_t { thinker_t thinker; line_t *sourceline; @@ -859,9 +859,9 @@ typedef struct fixed_t floorwasheight; fixed_t ceilingwasheight; boolean low; -} bouncecheese_t; +}; -typedef struct +struct mariothink_t { thinker_t thinker; sector_t *sector; @@ -870,16 +870,16 @@ typedef struct fixed_t floorstartheight; fixed_t ceilingstartheight; INT16 tag; -} mariothink_t; +}; -typedef struct +struct mariocheck_t { thinker_t thinker; line_t *sourceline; sector_t *sector; -} mariocheck_t; +}; -typedef struct +struct thwomp_t { thinker_t thinker; line_t *sourceline; @@ -893,23 +893,23 @@ typedef struct INT16 tag; UINT16 sound; INT32 initDelay; -} thwomp_t; +}; -typedef struct +struct floatthink_t { thinker_t thinker; line_t *sourceline; sector_t *sector; INT16 tag; -} floatthink_t; +}; -typedef struct +struct eachtime_t { thinker_t thinker; line_t *sourceline; // Source line of the thinker boolean playersInArea[MAXPLAYERS]; boolean triggerOnExit; -} eachtime_t; +}; typedef enum { @@ -918,7 +918,7 @@ typedef enum RF_DYNAMIC = 1<<2, //Dynamically sinking platform } raiseflag_t; -typedef struct +struct raise_t { thinker_t thinker; INT16 tag; @@ -929,7 +929,7 @@ typedef struct fixed_t extraspeed; //For dynamically sinking platform UINT8 shaketimer; //For dynamically sinking platform UINT8 flags; -} raise_t; +}; #define ELEVATORSPEED (FRACUNIT*4) #define FLOORSPEED (FRACUNIT) @@ -971,20 +971,20 @@ void T_EachTimeThinker(eachtime_t *eachtime); void T_CameraScanner(elevator_t *elevator); void T_RaiseSector(raise_t *raise); -typedef struct +struct executor_t { thinker_t thinker; // Thinker for linedef executor delay line_t *line; // Pointer to line that is waiting. mobj_t *caller; // Pointer to calling mobj sector_t *sector; // Pointer to triggering sector INT32 timer; // Delay timer -} executor_t; +}; void T_ExecutorDelay(executor_t *e); /** Generalized scroller. */ -typedef struct +struct scroll_t { thinker_t thinker; ///< Thinker structure for scrolling. fixed_t dx, dy; ///< (dx,dy) scroll speeds. @@ -1004,14 +1004,14 @@ typedef struct sc_carry, ///< Carry objects on floor. sc_carry_ceiling,///< Carry objects on ceiling (for 3Dfloor conveyors). } type; -} scroll_t; +}; void T_Scroll(scroll_t *s); void T_LaserFlash(laserthink_t *flash); /** Friction for ice/sludge effects. */ -typedef struct +struct friction_t { thinker_t thinker; ///< Thinker structure for friction. INT32 friction; ///< Friction value, 0xe800 = normal. @@ -1019,7 +1019,7 @@ typedef struct INT32 affectee; ///< Number of affected sector. INT32 referrer; ///< If roverfriction == true, then this will contain the sector # of the control sector where the effect was applied. UINT8 roverfriction; ///< flag for whether friction originated from a FOF or not -} friction_t; +}; // Friction defines. #define ORIG_FRICTION (0xF5 << (FRACBITS-8)) ///< Original value. @@ -1033,7 +1033,7 @@ typedef enum } pushertype_e; // Model for pushers for push/pull effects -typedef struct +struct pusher_t { thinker_t thinker; ///< Thinker structure for pusher effect. pushertype_e type; ///< Type of pusher effect. @@ -1045,10 +1045,10 @@ typedef struct INT32 referrer; ///< If roverpusher == true, then this will contain the sector # of the control sector where the effect was applied. INT32 exclusive; /// < Once this affect has been applied to a mobj, no other pushers may affect it. INT32 slider; /// < Should the player go into an uncontrollable slide? -} pusher_t; +}; // Model for disappearing/reappearing FOFs -typedef struct +struct disappear_t { thinker_t thinker; ///< Thinker structure for effect. tic_t appeartime; ///< Tics to be appeared for @@ -1058,12 +1058,12 @@ typedef struct INT32 affectee; ///< Number of affected line INT32 sourceline; ///< Number of source line INT32 exists; ///< Exists toggle -} disappear_t; +}; void T_Disappear(disappear_t *d); // Model for fading FOFs -typedef struct +struct fade_t { thinker_t thinker; ///< Thinker structure for effect. ffloor_t *rover; ///< Target ffloor @@ -1084,13 +1084,13 @@ typedef struct boolean docollision; ///< Handle interactive flags boolean doghostfade; ///< No interactive flags during fading boolean exactalpha; ///< Use exact alpha values (opengl) -} fade_t; +}; void T_Fade(fade_t *d); // Model for fading colormaps -typedef struct +struct fadecolormap_t { thinker_t thinker; ///< Thinker structure for effect. sector_t *sector; ///< Sector where action is taking place. @@ -1099,7 +1099,7 @@ typedef struct boolean ticbased; ///< Tic-based timing INT32 duration; ///< Total duration for tic-based logic (OR: speed increment) INT32 timer; ///< Timer for tic-based logic (OR: internal speed counter) -} fadecolormap_t; +}; void T_FadeColormap(fadecolormap_t *d); @@ -1107,7 +1107,7 @@ void T_FadeColormap(fadecolormap_t *d); void T_Pusher(pusher_t *p); // Plane displacement -typedef struct +struct planedisplace_t { thinker_t thinker; ///< Thinker structure for plane displacement effect. INT32 affectee; ///< Number of affected sector. @@ -1123,7 +1123,7 @@ typedef struct pd_ceiling, ///< Displace ceiling. pd_both, ///< Displace both floor AND ceiling. } type; -} planedisplace_t; +}; void T_PlaneDisplace(planedisplace_t *pd); diff --git a/src/r_data.h b/src/r_data.h index da3f81163..5ba30010c 100644 --- a/src/r_data.h +++ b/src/r_data.h @@ -23,12 +23,12 @@ #endif // Store lists of lumps for F_START/F_END etc. -typedef struct +struct lumplist_t { UINT16 wadfile; UINT16 firstlump; size_t numlumps; -} lumplist_t; +}; UINT32 ASTBlendPixel(RGBA_t background, RGBA_t foreground, int style, UINT8 alpha); UINT32 ASTBlendTexturePixel(RGBA_t background, RGBA_t foreground, int style, UINT8 alpha); diff --git a/src/r_defs.h b/src/r_defs.h index a0c557e94..1d3fa65d8 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -35,11 +35,11 @@ // Clips the given range of columns // and includes it in the new clip list. // -typedef struct +struct cliprange_t { INT32 first; INT32 last; -} cliprange_t; +}; // Silhouette, needed for clipping segs (mainly) and sprites representing things. #define SIL_NONE 0 @@ -57,7 +57,7 @@ typedef UINT8 lighttable_t; #define CMF_FOG 4 // ExtraColormap type. Use for extra_colormaps from now on. -typedef struct extracolormap_s +struct extracolormap_s { UINT8 fadestart, fadeend; UINT8 flags; @@ -76,7 +76,7 @@ typedef struct extracolormap_s struct extracolormap_s *next; struct extracolormap_s *prev; -} extracolormap_t; +}; // // INTERNAL MAP TYPES used by play and refresh @@ -84,12 +84,12 @@ typedef struct extracolormap_s /** Your plain vanilla vertex. */ -typedef struct +struct vertex_t { fixed_t x, y; boolean floorzset, ceilingzset; fixed_t floorz, ceilingz; -} vertex_t; +}; // Forward of linedefs, for sectors. struct line_s; @@ -99,13 +99,13 @@ struct line_s; * handle sound from moving objects (doppler), because position is probably * just buffered, not updated. */ -typedef struct +struct degenmobj_t { thinker_t thinker; ///< Not used for anything. fixed_t x; ///< X coordinate. fixed_t y; ///< Y coordinate. fixed_t z; ///< Z coordinate. -} degenmobj_t; +}; #include "p_polyobj.h" @@ -208,7 +208,7 @@ typedef enum BT_STRONG, } busttype_e; -typedef struct ffloor_s +struct ffloor_s { fixed_t *topheight; INT32 *toppic; @@ -258,13 +258,13 @@ typedef struct ffloor_s INT32 spawnalpha; // alpha the 3D floor spawned with void *fadingdata; // fading FOF thinker -} ffloor_t; +}; // This struct holds information for shadows casted by 3D floors. // This information is contained inside the sector_t and is used as the base // information for casted shadows. -typedef struct lightlist_s +struct lightlist_t { fixed_t height; INT16 *lightlevel; @@ -272,11 +272,11 @@ typedef struct lightlist_s INT32 flags; ffloor_t *caster; struct pslope_s *slope; // FOF_DOUBLESHADOW makes me have to store this pointer here. Bluh bluh. -} lightlist_t; +}; // This struct is used for rendering walls with shadows casted on them... -typedef struct r_lightlist_s +struct r_lightlist_s { fixed_t height; fixed_t heightstep; @@ -288,7 +288,7 @@ typedef struct r_lightlist_s lighttable_t *rcolormap; ffloortype_e flags; INT32 lightnum; -} r_lightlist_t; +}; // Slopes typedef enum { @@ -296,7 +296,7 @@ typedef enum { SL_DYNAMIC = 1<<1, /// This plane slope will be assigned a thinker to make it dynamic. } slopeflags_t; -typedef struct pslope_s +struct pslope_s { UINT16 id; // The number of the slope, mostly used for netgame syncing purposes struct pslope_s *next; // Make a linked list of dynamic slopes, for easy reference later @@ -323,7 +323,7 @@ typedef struct pslope_s #ifdef HWRENDER INT16 hwLightOffset; #endif -} pslope_t; +}; typedef enum { @@ -399,7 +399,7 @@ typedef enum // The SECTORS record, at runtime. // Stores things/mobjs. // -typedef struct sector_s +struct sector_s { fixed_t floorheight; fixed_t ceilingheight; @@ -499,7 +499,7 @@ typedef struct sector_s // colormap structure extracolormap_t *spawn_extra_colormap; -} sector_t; +}; // // Move clipping aid for linedefs. @@ -517,7 +517,7 @@ typedef enum #define NUMLINEARGS 10 #define NUMLINESTRINGARGS 2 -typedef struct line_s +struct line_s { // Vertices, from v1 to v2. vertex_t *v1; @@ -556,9 +556,9 @@ typedef struct line_s char *text; // a concatenation of all front and back texture names, for linedef specials that require a string. INT16 callcount; // no. of calls left before triggering, for the "X calls" linedef specials, defaults to 0 -} line_t; +}; -typedef struct +struct side_t { // add this to the calculated texture column fixed_t textureoffset; @@ -582,7 +582,7 @@ typedef struct char *text; // a concatenation of all top, bottom, and mid texture names, for linedef specials that require a string. extracolormap_t *colormap_data; // storage for colormaps; not applied to sectors. -} side_t; +}; // // A subsector. @@ -590,14 +590,14 @@ typedef struct // Basically, this is a list of linesegs, indicating the visible walls that define // (all or some) sides of a convex BSP leaf. // -typedef struct subsector_s +struct subsector_s { sector_t *sector; INT16 numlines; UINT16 firstline; struct polyobj_s *polyList; // haleyjd 02/19/06: list of polyobjects size_t validcount; -} subsector_t; +}; // Sector list node showing all sectors an object appears in. // @@ -613,7 +613,7 @@ typedef struct subsector_s // // For the links, NULL means top or end of list. -typedef struct msecnode_s +struct msecnode_s { sector_t *m_sector; // a sector containing this object struct mobj_s *m_thing; // this object @@ -622,9 +622,9 @@ typedef struct msecnode_s struct msecnode_s *m_thinglist_prev; // prev msecnode_t for this sector struct msecnode_s *m_thinglist_next; // next msecnode_t for this sector boolean visited; // used in search algorithms -} msecnode_t; +}; -typedef struct mprecipsecnode_s +struct mprecipsecnode_s { sector_t *m_sector; // a sector containing this object struct precipmobj_s *m_thing; // this object @@ -633,12 +633,12 @@ typedef struct mprecipsecnode_s struct mprecipsecnode_s *m_thinglist_prev; // prev msecnode_t for this sector struct mprecipsecnode_s *m_thinglist_next; // next msecnode_t for this sector boolean visited; // used in search algorithms -} mprecipsecnode_t; +}; // for now, only used in hardware mode // maybe later for software as well? // that's why it's moved here -typedef struct light_s +struct light_t { UINT16 type; // light,... (cfr #define in hwr_light.c) @@ -651,19 +651,19 @@ typedef struct light_s UINT32 dynamic_color; // color of the light for dynamic lighting float dynamic_radius; // radius of the light ball float dynamic_sqrradius; // radius^2 of the light ball -} light_t; +}; -typedef struct lightmap_s +struct lightmap_s { float s[2], t[2]; light_t *light; struct lightmap_s *next; -} lightmap_t; +}; // // The lineseg. // -typedef struct seg_s +struct seg_s { vertex_t *v1; vertex_t *v2; @@ -704,7 +704,7 @@ typedef struct seg_s #ifdef HWRENDER INT16 hwLightOffset; #endif -} seg_t; +}; // // BSP node. @@ -727,11 +727,11 @@ typedef struct #endif // posts are runs of non masked source pixels -typedef struct +struct post_t { UINT8 topdelta; // -1 is the last post in a column UINT8 length; // length data bytes follows -} ATTRPACK post_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() @@ -751,7 +751,7 @@ typedef post_t column_t; // // ? // -typedef struct drawseg_s +struct drawseg_t { seg_t *curline; INT32 x1; @@ -783,7 +783,7 @@ typedef struct drawseg_s fixed_t maskedtextureheight[MAXVIDWIDTH]; // For handling sloped midtextures vertex_t leftpos, rightpos; // Used for rendering FOF walls with slopes -} drawseg_t; +}; typedef enum { @@ -795,11 +795,11 @@ typedef enum } pic_mode_t; #ifdef ROTSPRITE -typedef struct +struct rotsprite_t { INT32 angles; void **patches; -} rotsprite_t; +}; #endif // Patches. @@ -807,7 +807,7 @@ typedef struct // Patches are used for sprites and all masked pictures, and we compose // textures from the TEXTURES list of patches. // -typedef struct +struct patch_t { INT16 width, height; INT16 leftoffset, topoffset; @@ -821,7 +821,7 @@ typedef struct #ifdef ROTSPRITE rotsprite_t *rotated; // Rotated patches #endif -} patch_t; +}; extern patch_t *missingpat; extern patch_t *blanklvl; @@ -830,7 +830,7 @@ extern patch_t *blanklvl; #pragma pack(1) #endif -typedef struct +struct softwarepatch_t { INT16 width; // bounding box size INT16 height; @@ -838,14 +838,14 @@ typedef struct INT16 topoffset; // pixels below the origin INT32 columnofs[8]; // only [width] used // the [0] is &columnofs[width] -} ATTRPACK softwarepatch_t; +} ATTRPACK; #ifdef _MSC_VER #pragma warning(disable : 4200) #endif // a pic is an unmasked block of pixels, stored in horizontal way -typedef struct +struct pic_t { INT16 width; UINT8 zero; // set to 0 allow autodetection of pic_t @@ -854,7 +854,7 @@ typedef struct INT16 height; INT16 reserved1; // set to 0 UINT8 data[]; -} ATTRPACK pic_t; +} ATTRPACK; #ifdef _MSC_VER #pragma warning(default : 4200) @@ -951,7 +951,7 @@ typedef enum // Or the right side: NNNNFR // Or both, mirrored: NNNNFLFR // -typedef struct +struct spriteframe_t { // If false use 0 for any position. // Note: as eight entries are available, we might as well insert the same @@ -968,15 +968,15 @@ typedef struct #ifdef ROTSPRITE rotsprite_t *rotated[2][16]; // Rotated patches #endif -} spriteframe_t; +}; // // A sprite definition: a number of animation frames. // -typedef struct +struct spritedef_t { size_t numframes; spriteframe_t *spriteframes; -} spritedef_t; +}; #endif diff --git a/src/r_draw.h b/src/r_draw.h index d01ad6e74..130c44c00 100644 --- a/src/r_draw.h +++ b/src/r_draw.h @@ -72,9 +72,9 @@ extern UINT8 *ds_source; extern UINT8 *ds_brightmap; extern UINT8 *ds_transmap; -typedef struct { +struct floatv3_t { float x, y, z; -} floatv3_t; +}; // Vectors for Software's tilted slope drawers extern floatv3_t *ds_su, *ds_sv, *ds_sz; diff --git a/src/r_fps.h b/src/r_fps.h index c2bc05699..8a12e1d10 100644 --- a/src/r_fps.h +++ b/src/r_fps.h @@ -40,7 +40,7 @@ extern enum viewcontext_e viewcontext; #define R_GetViewNumber() ((viewcontext - VIEWCONTEXT_PLAYER1) & 3) -typedef struct { +struct viewvars_t { fixed_t x; fixed_t y; fixed_t z; @@ -54,11 +54,11 @@ typedef struct { fixed_t cos; fixed_t sin; mobj_t *mobj; -} viewvars_t; +}; extern viewvars_t *newview; -typedef struct { +struct interpmobjstate_t { fixed_t x; fixed_t y; fixed_t z; @@ -69,7 +69,7 @@ typedef struct { fixed_t spriteyscale; fixed_t spritexoffset; fixed_t spriteyoffset; -} interpmobjstate_t; +}; // Level interpolators @@ -83,7 +83,7 @@ typedef enum { } levelinterpolator_type_e; // Tagged union of a level interpolator -typedef struct levelinterpolator_s { +struct levelinterpolator_t { levelinterpolator_type_e type; thinker_t *thinker; union { @@ -116,7 +116,7 @@ typedef struct levelinterpolator_s { fixed_t oldzdelta, bakzdelta; } dynslope; }; -} levelinterpolator_t; +}; // Interpolates the current view variables (r_state.h) against the selected view context in R_SetViewContext void R_InterpolateView(fixed_t frac); diff --git a/src/r_picformats.h b/src/r_picformats.h index 700424814..57af58100 100644 --- a/src/r_picformats.h +++ b/src/r_picformats.h @@ -92,18 +92,18 @@ typedef enum ROTAXIS_Z // Yaw } rotaxis_t; -typedef struct +struct spriteframepivot_t { INT32 x, y; rotaxis_t rotaxis; -} spriteframepivot_t; +}; -typedef struct +struct spriteinfo_t { spriteframepivot_t pivot[64 + 1]; #define SPRINFO_DEFAULT_PIVOT (64) UINT8 available[BIT_ARRAY_SIZE(64 + 1)]; // 1 extra for default_pivot -} spriteinfo_t; +}; // Portable Network Graphics #define PNG_HEADER_SIZE (8) diff --git a/src/r_plane.h b/src/r_plane.h index f0a32d969..1aa5f84e3 100644 --- a/src/r_plane.h +++ b/src/r_plane.h @@ -28,7 +28,7 @@ // Now what is a visplane, anyway? // Simple: kinda floor/ceiling polygon optimised for SRB2 rendering. // -typedef struct visplane_s +struct visplane_s { struct visplane_s *next; @@ -56,7 +56,7 @@ typedef struct visplane_s boolean noencore; boolean ripple; -} visplane_t; +}; extern visplane_t *visplanes[MAXVISPLANES]; extern visplane_t *floorplane; @@ -104,7 +104,7 @@ void R_CalculateSlopeVectors(void); // Sets the slope vector pointers for the current tilted span. void R_SetTiltedSpan(INT32 span); -typedef struct planemgr_s +struct visffloor_t { visplane_t *plane; fixed_t height; @@ -123,7 +123,7 @@ typedef struct planemgr_s struct ffloor_s *ffloor; polyobj_t *polyobj; -} visffloor_t; +}; extern visffloor_t ffloor[MAXFFLOORS]; extern INT32 numffloors; diff --git a/src/r_portal.h b/src/r_portal.h index 3e77b2ef7..556faac8e 100644 --- a/src/r_portal.h +++ b/src/r_portal.h @@ -20,7 +20,7 @@ /** Portal structure for the software renderer. */ -typedef struct portal_s +struct portal_s { struct portal_s *next; @@ -39,7 +39,7 @@ typedef struct portal_s INT16 *ceilingclip; /**< Temporary screen top clipping array. */ INT16 *floorclip; /**< Temporary screen bottom clipping array. */ fixed_t *frontscale;/**< Temporary screen bottom clipping array. */ -} portal_t; +}; extern portal_t* portal_base; extern portal_t* portal_cap; diff --git a/src/r_skins.h b/src/r_skins.h index 1cc06cca4..f9dd944c0 100644 --- a/src/r_skins.h +++ b/src/r_skins.h @@ -30,7 +30,7 @@ #define DEFAULTSKIN4 "knuckles" // fourth player /// The skin_t struct -typedef struct +struct skin_t { char name[SKINNAMESIZE+1]; // INT16 descriptive name of the skin UINT16 wadnum; @@ -61,7 +61,7 @@ typedef struct // contains super versions too spritedef_t sprites[NUMPLAYERSPRITES*2]; spriteinfo_t sprinfo[NUMPLAYERSPRITES*2]; -} skin_t; +}; enum facepatches { FACE_RANK = 0, diff --git a/src/r_splats.h b/src/r_splats.h index a26661e03..23e475c06 100644 --- a/src/r_splats.h +++ b/src/r_splats.h @@ -28,7 +28,7 @@ struct rastery_s }; extern struct rastery_s *prastertab; // for ASM code -typedef struct floorsplat_s +struct floorsplat_t { UINT16 *pic; INT32 width, height; @@ -39,7 +39,7 @@ typedef struct floorsplat_s vector3_t verts[4]; // (x,y,z) as viewed from above on map fixed_t x, y, z; // position mobj_t *mobj; // Mobj it is tied to -} floorsplat_t; +}; void R_DrawFloorSplat(vissprite_t *spr); diff --git a/src/r_state.h b/src/r_state.h index dc577448e..4807a0f92 100644 --- a/src/r_state.h +++ b/src/r_state.h @@ -28,13 +28,13 @@ // // needed for pre rendering (fracs) -typedef struct +struct sprcache_t { fixed_t width; fixed_t offset; fixed_t topoffset; fixed_t height; -} sprcache_t; +}; extern sprcache_t *spritecachedinfo; diff --git a/src/r_textures.h b/src/r_textures.h index d4c9302e5..8f39f5bd4 100644 --- a/src/r_textures.h +++ b/src/r_textures.h @@ -28,7 +28,7 @@ // A single patch from a texture definition, // basically a rectangular area within // the texture rectangle. -typedef struct +struct texpatch_t { // Block origin (always UL), which has already accounted for the internal origin of the patch. INT16 originx, originy; @@ -36,7 +36,7 @@ typedef struct UINT8 flip; // 1 = flipx, 2 = flipy, 3 = both UINT8 alpha; // Translucency value patchalphastyle_t style; -} texpatch_t; +}; // texture type enum @@ -52,7 +52,7 @@ enum // A texture_t describes a rectangular texture, // which is composed of one or more texpatch_t structures // that arrange graphic patches. -typedef struct +struct texture_t { // Keep name for switch changing, etc. char name[8]; @@ -66,7 +66,7 @@ typedef struct // All the patches[patchcount] are drawn back to front into the cached texture. INT16 patchcount; texpatch_t patches[]; -} texture_t; +}; // all loaded and prepared textures from the start of the game extern texture_t **textures; diff --git a/src/r_things.h b/src/r_things.h index 18c55629b..06965c797 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -96,13 +96,13 @@ boolean R_ThingIsFlashing(mobj_t *thing); * per portal to later group them in separate * drawnode lists. */ -typedef struct +struct maskcount_t { size_t drawsegs[2]; size_t vissprites[2]; fixed_t viewx, viewy, viewz; /**< View z stored at the time of the BSP traversal for the view/portal. Masked sorting/drawing needs it. */ sector_t* viewsector; -} maskcount_t; +}; void R_DrawMasked(maskcount_t* masks, INT32 nummasks); @@ -145,7 +145,7 @@ typedef enum // A vissprite_t is a thing that will be drawn during a refresh, // i.e. a sprite object that is partly visible. -typedef struct vissprite_s +struct vissprite_s { // Doubly linked list. struct vissprite_s *prev; @@ -219,7 +219,7 @@ typedef struct vissprite_s INT32 dispoffset; // copy of info->dispoffset, affects ordering but not drawing fixed_t floorclip; // Cut off your tires in tall grass -} vissprite_t; +}; extern UINT32 visspritecount; @@ -236,7 +236,7 @@ UINT8 *R_GetSpriteTranslation(vissprite_t *vis); // A drawnode is something that points to a 3D floor, 3D side, or masked // middle texture. This is used for sorting with sprites. -typedef struct drawnode_s +struct drawnode_s { visplane_t *plane; drawseg_t *seg; @@ -246,7 +246,7 @@ typedef struct drawnode_s struct drawnode_s *next; struct drawnode_s *prev; -} drawnode_t; +}; void R_InitDrawNodes(void); diff --git a/src/s_sound.h b/src/s_sound.h index e67868266..d1a7ba25f 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -66,12 +66,12 @@ typedef enum SF_X2AWAYSOUND = 64, // Hear it from 2x the distance away } soundflags_t; -typedef struct { +struct listener_t { fixed_t x, y, z; angle_t angle; -} listener_t; +}; -typedef struct +struct channel_t { // sound information (if null, channel avail.) sfxinfo_t *sfxinfo; @@ -85,14 +85,14 @@ typedef struct // handle of the sound being played INT32 handle; -} channel_t; +}; -typedef struct { +struct caption_t { channel_t *c; sfxinfo_t *s; UINT16 t; UINT8 b; -} caption_t; +}; #define NUMCAPTIONS 8 #define MAXCAPTIONTICS (2*TICRATE) @@ -170,14 +170,14 @@ boolean S_MusicInfo(char *mname, UINT16 *mflags, boolean *looping); boolean S_SpeedMusic(float speed); // Music credits -typedef struct musicdef_s +struct musicdef_s { char name[7]; //char usage[256]; char source[256]; int volume; struct musicdef_s *next; -} musicdef_t; +}; extern struct cursongcredit { @@ -218,7 +218,7 @@ UINT32 S_GetMusicPosition(void); // Music Stacking (Jingles) // -typedef struct musicstack_s +struct musicstack_s { char musname[7]; UINT16 musflags; @@ -231,7 +231,7 @@ typedef struct musicstack_s struct musicstack_s *prev; struct musicstack_s *next; -} musicstack_t; +}; extern char music_stack_nextmusname[7]; extern boolean music_stack_noposition; diff --git a/src/screen.h b/src/screen.h index 8abf77224..6728f3762 100644 --- a/src/screen.h +++ b/src/screen.h @@ -45,7 +45,7 @@ #define BASEVIDHEIGHT 200 // resolution of the graphics. // global video state -typedef struct viddef_s +struct viddef_t { INT32 modenum; // vidmode num indexes videomodes list @@ -74,7 +74,7 @@ typedef struct viddef_s INT32/*fixed_t*/ fmeddupx, fmeddupy; INT32 glstate; #endif -} viddef_t; +}; enum { @@ -84,14 +84,14 @@ enum }; // internal additional info for vesa modes only -typedef struct +struct vesa_extra_t { INT32 vesamode; // vesa mode number plus LINEAR_MODE bit void *plinearmem; // linear address of start of frame buffer -} vesa_extra_t; +}; // a video modes from the video modes list, // note: video mode 0 is always standard VGA320x200. -typedef struct vmode_s +struct vmode_s { struct vmode_s *pnext; char *name; @@ -107,7 +107,7 @@ typedef struct vmode_s INT32 (*setmode)(viddef_t *lvid, struct vmode_s *pcurrentmode); #endif INT32 misc; // misc for display driver (r_opengl.dll etc) -} vmode_t; +}; #define NUMSPECIALMODES 4 extern vmode_t specialmodes[NUMSPECIALMODES]; diff --git a/src/sounds.h b/src/sounds.h index fe4427048..01dfbfc2b 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -62,9 +62,8 @@ typedef enum // // SoundFX struct. // -typedef struct sfxinfo_struct sfxinfo_t; -struct sfxinfo_struct +struct sfxinfo_t { // up to 6-character name const char *name; diff --git a/src/taglist.h b/src/taglist.h index a66312425..8db78b880 100644 --- a/src/taglist.h +++ b/src/taglist.h @@ -21,11 +21,11 @@ typedef INT16 mtag_t; #define MTAG_GLOBAL -1 /// Multitag list. Each taggable element will have its own taglist. -typedef struct +struct taglist_t { mtag_t* tags; UINT16 count; -} taglist_t; +}; void Tag_Add (taglist_t* list, const mtag_t tag); void Tag_Remove (taglist_t* list, const mtag_t tag); @@ -40,12 +40,12 @@ void Tag_SectorRemove (const size_t id, const mtag_t tag); void Tag_SectorFSet (const size_t id, const mtag_t tag); /// Taggroup list. It is essentially just an element id list. -typedef struct +struct taggroup_t { size_t *elements; size_t count; size_t capacity; -} taggroup_t; +}; extern bitarray_t tags_available[]; diff --git a/src/typedef.h b/src/typedef.h new file mode 100644 index 000000000..bbfaafad4 --- /dev/null +++ b/src/typedef.h @@ -0,0 +1,397 @@ +// SONIC ROBO BLAST 2 +//----------------------------------------------------------------------------- +// Copyright (C) 2022 by Kart Krew. +// +// This program is free software distributed under the +// terms of the GNU General Public License, version 2. +// See the 'LICENSE' file for more details. +//----------------------------------------------------------------------------- +/// \file typedef.h +/// \brief Universally accessible type definitions. This +/// file exists so these types can be used anywhere +/// without needing to include specific headers. + +#define TYPEDEF2(struct_id, new_type) \ + typedef struct struct_id new_type + +#define TYPEDEF(id) TYPEDEF2 (id, id) + +// am_map.h +TYPEDEF (fpoint_t); +TYPEDEF (fline_t); + +// command.h +TYPEDEF (vsbuf_t); +TYPEDEF (CV_PossibleValue_t); +TYPEDEF2 (consvar_s, consvar_t); + +// d_netcmd.h +TYPEDEF (changeteam_packet_t); +TYPEDEF (changeteam_value_t); +TYPEDEF (scheduleTask_t); + +// discord.h +TYPEDEF2 (discordRequest_s, discordRequest_t); + +// d_player.h +TYPEDEF (respawnvars_t); +TYPEDEF (botvars_t); +TYPEDEF (skybox_t); +TYPEDEF2 (player_s, player_t); + +// d_clisrv.h +TYPEDEF (clientcmd_pak); +TYPEDEF (client2cmd_pak); +TYPEDEF (client3cmd_pak); +TYPEDEF (client4cmd_pak); +TYPEDEF (servertics_pak); +TYPEDEF (serverconfig_pak); +TYPEDEF (filetx_pak); +TYPEDEF (fileacksegment_t); +TYPEDEF (fileack_pak); +TYPEDEF (clientconfig_pak); +TYPEDEF (serverinfo_pak); +TYPEDEF (serverrefuse_pak); +TYPEDEF (askinfo_pak); +TYPEDEF (msaskinfo_pak); +TYPEDEF (plrinfo); +TYPEDEF (plrconfig); +TYPEDEF (filesneededconfig_pak); +TYPEDEF (doomdata_t); +TYPEDEF (serverelem_t); +TYPEDEF2 (rewind_s, rewind_t); + +// d_event.h +TYPEDEF (event_t); + +// d_netfil.h +TYPEDEF (fileneeded_t); +TYPEDEF (HTTP_login); +TYPEDEF2 (luafiletransfer_s, luafiletransfer_t); + +// d_think.h +TYPEDEF2 (thinker_s, thinker_t); + +// d_ticcmd.h +TYPEDEF (ticcmd_t); + +// deh_tables.h +TYPEDEF (actionpointer_t); + +// dehacked.h +TYPEDEF (MYFILE); + +// domdata.h +TYPEDEF (mapvertex_t); +TYPEDEF (mapsidedef_t); +TYPEDEF (maplinedef_t); +TYPEDEF (mapsector_t); +TYPEDEF (mapsubsector_t); +TYPEDEF (mapseg_t); +TYPEDEF (mapnode_t); +TYPEDEF (mapthing_t); + +// doomdef.h +TYPEDEF (skincolor_t); + +// doomstat.h +TYPEDEF (precipprops_t); +TYPEDEF (recorddata_t); +TYPEDEF (scene_t); +TYPEDEF (cutscene_t); +TYPEDEF (textpage_t); +TYPEDEF (textprompt_t); +TYPEDEF (mappoint_t); +TYPEDEF (customoption_t); +TYPEDEF (mapheader_t); +TYPEDEF (tolinfo_t); +TYPEDEF2 (cupheader_s, cupheader_t); + +// font.h +TYPEDEF (font_t); + +// g_demo.h +TYPEDEF (democharlist_t); +TYPEDEF (menudemo_t); +TYPEDEF (demoghost); + +// g_game.h +TYPEDEF (mapsearchfreq_t); + +// hu_stuff.h +TYPEDEF (playersort_t); + +// i_joy.h +TYPEDEF (JoyType_t); + +// i_net.h +TYPEDEF (doomcom_t); +TYPEDEF (holepunch_t); +TYPEDEF (bannednode_t); + +// i_system.h +TYPEDEF (JoyFF_t); +TYPEDEF (CPUInfoFlags); + +// i_time.h +TYPEDEF (timestate_t); + +// info.h +TYPEDEF (state_t); +TYPEDEF (mobjinfo_t); + +// k_bheap.h +TYPEDEF (bheapitem_t); +TYPEDEF2 (bheap_s, bheap_t); + +// k_boss.h +TYPEDEF (weakspot_t); + +// k_bot.h +TYPEDEF (botprediction_t); + +// k_brightmap.h +TYPEDEF (brightmapStorage_t); + +// k_follower.h +TYPEDEF (follower_t); +TYPEDEF (followercategory_t); + +// k_hud.h +TYPEDEF (trackingResult_t); + +// k_menu.h +TYPEDEF2 (menucolor_s, menucolor_t); +TYPEDEF (menuitem_t); +TYPEDEF2 (menu_s, menu_t); +TYPEDEF (menucmd_t); +TYPEDEF (setup_player_t); +TYPEDEF (modedesc_t); + +// k_pathfind.h +TYPEDEF2 (pathfindnode_s, pathfindnode_t); +TYPEDEF (path_t); +TYPEDEF (pathfindsetup_t); + +// k_profiles.h +TYPEDEF (profile_t); + +// k_terrain.h +TYPEDEF (t_splash_t); +TYPEDEF (t_footstep_t); +TYPEDEF (t_overlay_t); +TYPEDEF2 (terrain_s, terrain_t); +TYPEDEF (t_floor_t); + +// k_waypoint.h +TYPEDEF2 (waypoint_s, waypoint_t); + +// lua_hudlib_drawlist.h +typedef struct huddrawlist_s *huddrawlist_h; + +// m_aatree.h +TYPEDEF (aatree_t); + +// m_cond.h +TYPEDEF (condition_t); +TYPEDEF (conditionset_t); +TYPEDEF (emblem_t); +TYPEDEF (extraemblem_t); +TYPEDEF (unlockable_t); + +// m_dllist.h +TYPEDEF2 (mdllistitem_s, mdllistitem_t); + +// m_fixed.h +TYPEDEF (vector2_t); +TYPEDEF (vector3_t); +TYPEDEF (matrix_t); + +// m_perfstats.h +TYPEDEF (ps_hookinfo_t); +TYPEDEF (ps_botinfo_t); + +// m_queue.h +TYPEDEF2 (mqueueitem_s, mqueueitem_t); +TYPEDEF (mqueue_t); + +// mserv.h +TYPEDEF (msg_server_t); +TYPEDEF (msg_ban_t); + +// p_local.h +TYPEDEF (camera_t); +TYPEDEF (jingle_t); +TYPEDEF (tm_t); +TYPEDEF (TryMoveResult_t); +TYPEDEF (BasicFF_t); + +// p_maputl.h +TYPEDEF (divline_t); +TYPEDEF (intercept_t); + +// p_mobj.h +TYPEDEF2 (mobj_s, mobj_t); +TYPEDEF2 (precipmobj_s, precipmobj_t); +TYPEDEF2 (actioncache_s, actioncache_t); + +// p_polyobj.h +TYPEDEF2 (polyobj_s, polyobj_t); +TYPEDEF (polymaplink_t); +TYPEDEF (polyrotate_t); +TYPEDEF (polymove_t); +TYPEDEF (polywaypoint_t); +TYPEDEF (polyslidedoor_t); +TYPEDEF (polyswingdoor_t); +TYPEDEF (polydisplace_t); +TYPEDEF (polyrotdisplace_t); +TYPEDEF (polyfade_t); +TYPEDEF (polyrotdata_t); +TYPEDEF (polymovedata_t); +TYPEDEF (polywaypointdata_t); +TYPEDEF (polydoordata_t); +TYPEDEF (polydisplacedata_t); +TYPEDEF (polyrotdisplacedata_t); +TYPEDEF (polyflagdata_t); +TYPEDEF (polyfadedata_t); + +// p_saveg.h +TYPEDEF (savedata_t); + +// p_setup.h +TYPEDEF (levelflat_t); + +// p_slopes.h +TYPEDEF (dynlineplanethink_t); +TYPEDEF (dynvertexplanethink_t); + +// p_spec.h +TYPEDEF (thinkerdata_t); +TYPEDEF (fireflicker_t); +TYPEDEF (lightflash_t); +TYPEDEF (laserthink_t); +TYPEDEF (strobe_t); +TYPEDEF (glow_t); +TYPEDEF (lightlevel_t); +TYPEDEF (ceiling_t); +TYPEDEF (floormove_t); +TYPEDEF (elevator_t); +TYPEDEF (crumble_t); +TYPEDEF (noenemies_t); +TYPEDEF (continuousfall_t); +TYPEDEF (bouncecheese_t); +TYPEDEF (mariothink_t); +TYPEDEF (mariocheck_t); +TYPEDEF (thwomp_t); +TYPEDEF (floatthink_t); +TYPEDEF (eachtime_t); +TYPEDEF (raise_t); +TYPEDEF (executor_t); +TYPEDEF (scroll_t); +TYPEDEF (friction_t); +TYPEDEF (pusher_t); +TYPEDEF (disappear_t); +TYPEDEF (fade_t); +TYPEDEF (fadecolormap_t); +TYPEDEF (planedisplace_t); + +// r_data.h +TYPEDEF (lumplist_t); + +// r_defs.h +TYPEDEF (cliprange_t); +TYPEDEF (vertex_t); +TYPEDEF (degenmobj_t); +TYPEDEF (light_t); +//TYPEDEF (node_t); +TYPEDEF (post_t); +TYPEDEF (drawseg_t); +TYPEDEF (rotsprite_t); +TYPEDEF (patch_t); +TYPEDEF (softwarepatch_t); +TYPEDEF (pic_t); +TYPEDEF (spriteframe_t); +TYPEDEF (spritedef_t); +TYPEDEF2 (extracolormap_s, extracolormap_t); +TYPEDEF2 (ffloor_s, ffloor_t); +TYPEDEF (lightlist_t); +TYPEDEF2 (r_lightlist_s, r_lightlist_t); +TYPEDEF2 (pslope_s, pslope_t); +TYPEDEF2 (sector_s, sector_t); +TYPEDEF2 (line_s, line_t); +TYPEDEF (side_t); +TYPEDEF2 (subsector_s, subsector_t); +TYPEDEF2 (msecnode_s, msecnode_t); +TYPEDEF2 (mprecipsecnode_s, mprecipsecnode_t); +TYPEDEF2 (lightmap_s, lightmap_t); +TYPEDEF2 (seg_s, seg_t); + +// r_draw.h +TYPEDEF (floatv3_t); + +// r_fps.h +TYPEDEF (viewvars_t); +TYPEDEF (interpmobjstate_t); +TYPEDEF (levelinterpolator_t); + +// r_picformats.h +TYPEDEF (spriteframepivot_t); +TYPEDEF (spriteinfo_t); + +// r_plane.h +TYPEDEF2 (visplane_s, visplane_t); +TYPEDEF (visffloor_t); + +// r_portal.h +TYPEDEF2 (portal_s, portal_t); + +// r_skins.h +TYPEDEF (skin_t); + +// r_splats.h +TYPEDEF (floorsplat_t); + +// r_state.h +TYPEDEF (sprcache_t); + +// r_textures.h +TYPEDEF (texpatch_t); +TYPEDEF (texture_t); + +// r_things.h +TYPEDEF (maskcount_t); +TYPEDEF2 (vissprite_s, vissprite_t); +TYPEDEF2 (drawnode_s, drawnode_t); + +// s_sound.h +TYPEDEF (listener_t); +TYPEDEF (channel_t); +TYPEDEF (caption_t); +TYPEDEF2 (musicdef_s, musicdef_t); +TYPEDEF2 (musicstack_s, musicstack_t); + +// screen.h +TYPEDEF (viddef_t); +TYPEDEF (vesa_extra_t); +TYPEDEF2 (vmode_s, vmode_t); + +// sounds.h +TYPEDEF (sfxinfo_t); + +// taglist.h +TYPEDEF (taglist_t); +TYPEDEF (taggroup_t); + +// v_video.h +TYPEDEF (colorlookup_t); + +// w_wad.h +TYPEDEF (filelump_t); +TYPEDEF (wadinfo_t); +TYPEDEF (lumpinfo_t); +TYPEDEF (virtlump_t); +TYPEDEF (virtres_t); +TYPEDEF (wadfile_t); + +#undef TYPEDEF +#undef TYPEDEF2 diff --git a/src/v_video.h b/src/v_video.h index 1803d0818..8009035ea 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -46,12 +46,12 @@ void V_Recalc(void); // Color look-up table #define CLUTINDEX(r, g, b) (((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3) -typedef struct +struct colorlookup_t { boolean init; RGBA_t palette[256]; UINT16 table[0xFFFF]; -} colorlookup_t; +}; void InitColorLUT(colorlookup_t *lut, RGBA_t *palette, boolean makecolors); UINT8 GetColorLUT(colorlookup_t *lut, UINT8 r, UINT8 g, UINT8 b); diff --git a/src/w_wad.h b/src/w_wad.h index ec3013af7..54bc9f4da 100644 --- a/src/w_wad.h +++ b/src/w_wad.h @@ -27,12 +27,12 @@ #if defined(_MSC_VER) #pragma pack(1) #endif -typedef struct +struct filelump_t { UINT32 filepos; // file offset of the resource UINT32 size; // size of the resource char name[8]; // name of the resource -} ATTRPACK filelump_t; +} ATTRPACK; #if defined(_MSC_VER) #pragma pack() #endif @@ -43,12 +43,12 @@ typedef struct // ============================================================== // header of a wad file -typedef struct +struct wadinfo_t { char identification[4]; // should be "IWAD" or "PWAD" UINT32 numlumps; // how many resources UINT32 infotableofs; // the 'directory' of resources -} wadinfo_t; +}; // Available compression methods for lumps. typedef enum @@ -62,7 +62,7 @@ typedef enum } compmethod; // a memory entry of the wad directory -typedef struct +struct lumpinfo_t { unsigned long position; // filelump_t filepos unsigned long disksize; // filelump_t size @@ -72,22 +72,22 @@ typedef struct char *fullname; // e.g. "Folder/Subfolder/LongEntryName.extension" size_t size; // real (uncompressed) size compmethod compression; // lump compression method -} lumpinfo_t; +}; // ========================================================================= // 'VIRTUAL' RESOURCES // ========================================================================= -typedef struct { +struct virtlump_t { char name[9]; UINT8* data; size_t size; -} virtlump_t; +}; -typedef struct { +struct virtres_t { size_t numlumps; virtlump_t* vlumps; -} virtres_t; +}; virtres_t* vres_GetMap(lumpnum_t); void vres_Free(virtres_t*); @@ -116,7 +116,7 @@ typedef enum restype RET_UNKNOWN, } restype_t; -typedef struct wadfile_s +struct wadfile_t { char *filename; restype_t type; @@ -129,7 +129,7 @@ typedef struct wadfile_s UINT8 md5sum[16]; boolean important; // also network - !W_VerifyNMUSlumps -} wadfile_t; +}; #define WADFILENUM(lumpnum) (UINT16)((lumpnum)>>16) // wad flumpnum>>16) // wad file number in upper word #define LUMPNUM(lumpnum) (UINT16)((lumpnum)&0xFFFF) // lump number for this pwad From 0d0310a140056229496a230617651e3d50b3d953 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 16:51:18 -0800 Subject: [PATCH 32/66] typedef.h: typedef node_t d_net.c: rename node_t to netnode_t --- src/d_net.c | 12 ++++++------ src/r_defs.h | 4 ++-- src/typedef.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/d_net.c b/src/d_net.c index 5978fef5d..3799ecd13 100644 --- a/src/d_net.c +++ b/src/d_net.c @@ -192,9 +192,9 @@ typedef struct UINT8 nextacknum; UINT8 flags; -} node_t; +} netnode_t; -static node_t nodes[MAXNETNODES]; +static netnode_t nodes[MAXNETNODES]; #define NODETIMEOUT 14 // return <0 if a < b (mod 256) @@ -218,7 +218,7 @@ FUNCMATH static INT32 cmpack(UINT8 a, UINT8 b) */ static boolean GetFreeAcknum(UINT8 *freeack, boolean lowtimer) { - node_t *node = &nodes[doomcom->remotenode]; + netnode_t *node = &nodes[doomcom->remotenode]; INT32 i, numfreeslot = 0; if (cmpack((UINT8)((node->remotefirstack + MAXACKTOSEND) % 256), node->nextacknum) < 0) @@ -325,7 +325,7 @@ static boolean Processackpak(void) { INT32 i; boolean goodpacket = true; - node_t *node = &nodes[doomcom->remotenode]; + netnode_t *node = &nodes[doomcom->remotenode]; // Received an ack return, so remove the ack in the list if (netbuffer->ackreturn && cmpack(node->remotefirstack, netbuffer->ackreturn) < 0) @@ -492,7 +492,7 @@ void Net_AckTicker(void) for (i = 0; i < MAXACKPACKETS; i++) { const INT32 nodei = ackpak[i].destinationnode; - node_t *node = &nodes[nodei]; + netnode_t *node = &nodes[nodei]; if (ackpak[i].acknum && ackpak[i].senttime + NODETIMEOUT < I_GetTime()) { if (ackpak[i].resentnum > 20 && (node->flags & NF_CLOSE)) @@ -612,7 +612,7 @@ void Net_WaitAllAckReceived(UINT32 timeout) } } -static void InitNode(node_t *node) +static void InitNode(netnode_t *node) { node->acktosend_head = node->acktosend_tail = 0; node->firstacktosend = 0; diff --git a/src/r_defs.h b/src/r_defs.h index 1d3fa65d8..2c1c67dc0 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -709,7 +709,7 @@ struct seg_s // // BSP node. // -typedef struct +struct node_t { // Partition line. fixed_t x, y; @@ -720,7 +720,7 @@ typedef struct // If NF_SUBSECTOR its a subsector. UINT16 children[2]; -} node_t; +}; #if defined(_MSC_VER) #pragma pack(1) diff --git a/src/typedef.h b/src/typedef.h index bbfaafad4..4bdddd18d 100644 --- a/src/typedef.h +++ b/src/typedef.h @@ -303,7 +303,7 @@ TYPEDEF (cliprange_t); TYPEDEF (vertex_t); TYPEDEF (degenmobj_t); TYPEDEF (light_t); -//TYPEDEF (node_t); +TYPEDEF (node_t); TYPEDEF (post_t); TYPEDEF (drawseg_t); TYPEDEF (rotsprite_t); From 051b4f8935e62a51698f8a30dfc056b80b5f1bb2 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 17:20:42 -0800 Subject: [PATCH 33/66] Always use typedef name instead of struct name mobj_t instead of struct mobj_s --- src/command.h | 4 +-- src/d_clisrv.h | 4 +-- src/d_netfil.h | 4 +-- src/d_player.h | 2 +- src/d_think.h | 6 ++-- src/discord.h | 6 ++-- src/doomdata.h | 2 +- src/doomstat.h | 4 +-- src/k_bheap.h | 4 +-- src/k_menu.h | 16 +++++----- src/k_pathfind.h | 6 ++-- src/k_terrain.h | 2 +- src/k_waypoint.h | 6 ++-- src/m_dllist.h | 6 ++-- src/m_queue.h | 4 +-- src/p_local.h | 2 +- src/p_mobj.h | 62 ++++++++++++++++++------------------ src/p_polyobj.h | 16 +++++----- src/r_defs.h | 81 +++++++++++++++++++++++------------------------- src/r_draw.c | 2 +- src/r_draw.h | 2 +- src/r_plane.h | 10 +++--- src/r_portal.h | 4 +-- src/r_things.h | 14 ++++----- src/s_sound.h | 10 +++--- src/screen.h | 8 ++--- src/typedef.h | 74 +++++++++++++++++++++---------------------- 27 files changed, 179 insertions(+), 182 deletions(-) diff --git a/src/command.h b/src/command.h index 94cf2f269..6715d66a0 100644 --- a/src/command.h +++ b/src/command.h @@ -133,7 +133,7 @@ struct CV_PossibleValue_t const char *strvalue; }; -struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NULL +struct consvar_t //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NULL { const char *name; const char *defaultvalue; @@ -157,7 +157,7 @@ struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NULL UINT16 netid; // used internaly : netid for send end receive // used only with CV_NETVAR char changed; // has variable been changed by the user? 0 = no, 1 = yes - struct consvar_s *next; + consvar_t *next; }; /* name, defaultvalue, flags, PossibleValue, func */ diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 4effefde8..42393da1b 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -528,7 +528,7 @@ extern boolean hu_stopped; // SRB2Kart // -struct rewind_s { +struct rewind_t { UINT8 savebuffer[(768*1024)]; tic_t leveltime; size_t demopos; @@ -536,7 +536,7 @@ struct rewind_s { ticcmd_t oldcmd[MAXPLAYERS]; mobj_t oldghost[MAXPLAYERS]; - struct rewind_s *next; + rewind_t *next; }; void CL_ClearRewinds(void); diff --git a/src/d_netfil.h b/src/d_netfil.h index 2bc415406..1191e1bfa 100644 --- a/src/d_netfil.h +++ b/src/d_netfil.h @@ -110,7 +110,7 @@ typedef enum LFTNS_SENT // The node already has the file } luafiletransfernodestatus_t; -struct luafiletransfer_s +struct luafiletransfer_t { char *filename; char *realfilename; @@ -119,7 +119,7 @@ struct luafiletransfer_s boolean ongoing; luafiletransfernodestatus_t nodestatus[MAXNETNODES]; tic_t nodetimeouts[MAXNETNODES]; - struct luafiletransfer_s *next; + luafiletransfer_t *next; }; extern luafiletransfer_t *luafiletransfers; diff --git a/src/d_player.h b/src/d_player.h index cfd72df1c..a65f0235b 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -332,7 +332,7 @@ struct skybox_t { // ======================================================================== // PLAYER STRUCTURE // ======================================================================== -struct player_s +struct player_t { mobj_t *mo; diff --git a/src/d_think.h b/src/d_think.h index 8f786a4ed..719efa564 100644 --- a/src/d_think.h +++ b/src/d_think.h @@ -40,10 +40,10 @@ typedef union typedef actionf_t think_t; // Doubly linked list of actors. -struct thinker_s +struct thinker_t { - struct thinker_s *prev; - struct thinker_s *next; + thinker_t *prev; + thinker_t *next; think_t function; // killough 11/98: count of how many other objects reference diff --git a/src/discord.h b/src/discord.h index 99444b3cd..eb38a8d2c 100644 --- a/src/discord.h +++ b/src/discord.h @@ -27,7 +27,7 @@ extern struct discordInfo_s { boolean everyoneCanInvite; } discordInfo; -struct discordRequest_s { +struct discordRequest_t { char *username; // Discord user name. char *discriminator; // Discord discriminator (The little hashtag thing after the username). Separated for a "hide discriminators" cvar. char *userID; // The ID of the Discord user, gets used with Discord_Respond() @@ -38,8 +38,8 @@ struct discordRequest_s { // Hey, wanna add ImageMagick as a dependency? :dying: //patch_t *avatar; - struct discordRequest_s *next; // Next request in the list. - struct discordRequest_s *prev; // Previous request in the list. Not used normally, but just in case something funky happens, this should repair the list. + discordRequest_t *next; // Next request in the list. + discordRequest_t *prev; // Previous request in the list. Not used normally, but just in case something funky happens, this should repair the list. }; extern discordRequest_t *discordRequestList; diff --git a/src/doomdata.h b/src/doomdata.h index 0c02c17d4..5767da5ec 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -222,7 +222,7 @@ struct mapthing_t fixed_t scale; INT32 args[NUMMAPTHINGARGS]; char *stringargs[NUMMAPTHINGSTRINGARGS]; - struct mobj_s *mobj; + mobj_t *mobj; }; #define ZSHIFT 4 diff --git a/src/doomstat.h b/src/doomstat.h index 739c69ad2..320e29c13 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -347,7 +347,7 @@ struct customoption_t #define CUPCACHE_SPECIAL (CUPCACHE_BONUS+MAXBONUSLIST) #define CUPCACHE_MAX (CUPCACHE_SPECIAL+1) -struct cupheader_s +struct cupheader_t { UINT16 id; ///< Cup ID char name[15]; ///< Cup title (14 chars) @@ -358,7 +358,7 @@ struct cupheader_s UINT8 numbonus; ///< Number of bonus stages defined UINT8 emeraldnum; ///< ID of Emerald to use for special stage (1-7 for Chaos Emeralds, 8-14 for Super Emeralds, 0 for no emerald) SINT8 unlockrequired; ///< An unlockable is required to select this cup. -1 for no unlocking required. - struct cupheader_s *next; ///< Next cup in linked list + cupheader_t *next; ///< Next cup in linked list }; extern cupheader_t *kartcupheaders; // Start of cup linked list diff --git a/src/k_bheap.h b/src/k_bheap.h index 881a8973c..be07b40df 100644 --- a/src/k_bheap.h +++ b/src/k_bheap.h @@ -21,12 +21,12 @@ struct bheapitem_t { size_t heapindex; // The index in the heap this item is updateindexfunc indexchanged; // A callback function that is called when this item changes index to alert data - struct bheap_s *owner; // The heap that owns this item + bheap_t *owner; // The heap that owns this item void *data; // data for this heap item UINT32 value; // The value of this item, the lowest value item is first in the array }; -struct bheap_s +struct bheap_t { size_t capacity; // capacity of the heap size_t count; // number of items in the heap diff --git a/src/k_menu.h b/src/k_menu.h index 7e222d212..d8a966775 100644 --- a/src/k_menu.h +++ b/src/k_menu.h @@ -101,15 +101,15 @@ extern M_waiting_mode_t m_waiting_mode; typedef union { - struct menu_s *submenu; // IT_SUBMENU + menu_t *submenu; // IT_SUBMENU consvar_t *cvar; // IT_CVAR void (*routine)(INT32 choice); // IT_CALL, IT_KEYHANDLER, IT_ARROWS } itemaction_t; // Player Setup menu colors linked list -struct menucolor_s { - struct menucolor_s *next; - struct menucolor_s *prev; +struct menucolor_t { + menucolor_t *next; + menucolor_t *prev; UINT16 color; }; @@ -136,10 +136,10 @@ struct menuitem_t INT32 mvar2; }; -struct menu_s +struct menu_t { INT16 numitems; // # of menu items - struct menu_s *prevMenu; // previous menu + menu_t *prevMenu; // previous menu INT16 lastOn; // last item user was on in menu menuitem_t *menuitems; // menu items @@ -537,8 +537,8 @@ extern menucmd_t menucmd[MAXSPLITSCREENPLAYERS]; extern struct menutransition_s { INT16 tics; INT16 dest; - struct menu_s *startmenu; - struct menu_s *endmenu; + menu_t *startmenu; + menu_t *endmenu; boolean in; } menutransition; diff --git a/src/k_pathfind.h b/src/k_pathfind.h index c18911202..38b0b207f 100644 --- a/src/k_pathfind.h +++ b/src/k_pathfind.h @@ -35,10 +35,10 @@ typedef boolean(*getpathfindfinishedfunc)(void*, void*); // A pathfindnode contains information about a node from the pathfinding // heapindex is only used within the pathfinding algorithm itself, and is always 0 after it is completed -struct pathfindnode_s { +struct pathfindnode_t { size_t heapindex; // The index in the openset binary heap. Only valid while the node is in the openset. void *nodedata; - struct pathfindnode_s *camefrom; // should eventually be the most efficient predecessor node + pathfindnode_t *camefrom; // should eventually be the most efficient predecessor node UINT32 gscore; // The accumulated distance from the start to this node UINT32 hscore; // The heuristic from this node to the goal }; @@ -46,7 +46,7 @@ struct pathfindnode_s { // Contains the final created path after pathfinding is completed struct path_t { size_t numnodes; - struct pathfindnode_s *array; + pathfindnode_t *array; UINT32 totaldist; }; diff --git a/src/k_terrain.h b/src/k_terrain.h index 56bf7df34..349455bed 100644 --- a/src/k_terrain.h +++ b/src/k_terrain.h @@ -98,7 +98,7 @@ typedef enum TRF_TRIPWIRE = 1<<3 // Texture is a tripwire when used as a midtexture } terrain_flags_t; -struct terrain_s +struct terrain_t { // Terrain definition. // These are all of the properties that the floor gets. diff --git a/src/k_waypoint.h b/src/k_waypoint.h index 9322477e1..9239cd41c 100644 --- a/src/k_waypoint.h +++ b/src/k_waypoint.h @@ -20,12 +20,12 @@ #define DEFAULT_WAYPOINT_RADIUS (384) -struct waypoint_s +struct waypoint_t { mobj_t *mobj; boolean onaline; - struct waypoint_s **nextwaypoints; - struct waypoint_s **prevwaypoints; + waypoint_t **nextwaypoints; + waypoint_t **prevwaypoints; UINT32 *nextwaypointdistances; UINT32 *prevwaypointdistances; size_t numnextwaypoints; diff --git a/src/m_dllist.h b/src/m_dllist.h index 9b9cfca81..1a1f0a6ea 100644 --- a/src/m_dllist.h +++ b/src/m_dllist.h @@ -29,10 +29,10 @@ #pragma warning(disable : 4706) #endif -struct mdllistitem_s +struct mdllistitem_t { - struct mdllistitem_s *next; - struct mdllistitem_s **prev; + mdllistitem_t *next; + mdllistitem_t **prev; }; FUNCINLINE static ATTRINLINE void M_DLListInsert(mdllistitem_t *item, mdllistitem_t **head) diff --git a/src/m_queue.h b/src/m_queue.h index 6ba8e335c..8e0c02797 100644 --- a/src/m_queue.h +++ b/src/m_queue.h @@ -13,9 +13,9 @@ #ifndef M_QUEUE_H #define M_QUEUE_H -struct mqueueitem_s +struct mqueueitem_t { - struct mqueueitem_s *next; + mqueueitem_t *next; }; struct mqueue_t diff --git a/src/p_local.h b/src/p_local.h index 70e26f9d9..e547bc7b4 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -96,7 +96,7 @@ struct camera_t //More drawing info: to determine current sprite. angle_t angle; // orientation - struct subsector_s *subsector; + subsector_t *subsector; // The closest interval over all contacted Sectors (or Things). fixed_t floorz; diff --git a/src/p_mobj.h b/src/p_mobj.h index 50686eac9..8811c0149 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -270,7 +270,7 @@ typedef enum { } precipflag_t; // Map Object definition. -struct mobj_s +struct mobj_t { // List: thinker links. thinker_t thinker; @@ -284,8 +284,8 @@ struct mobj_s fixed_t old_x2, old_y2, old_z2; // More list: links in sector (if needed) - struct mobj_s *snext; - struct mobj_s **sprev; // killough 8/11/98: change to ptr-to-ptr + mobj_t *snext; + mobj_t **sprev; // killough 8/11/98: change to ptr-to-ptr // More drawing info: to determine current sprite. angle_t angle, pitch, roll; // orientation @@ -302,17 +302,17 @@ struct mobj_s fixed_t spritexoffset, spriteyoffset; fixed_t old_spritexscale, old_spriteyscale; fixed_t old_spritexoffset, old_spriteyoffset; - struct pslope_s *floorspriteslope; // The slope that the floorsprite is rotated by + pslope_t *floorspriteslope; // The slope that the floorsprite is rotated by - struct msecnode_s *touching_sectorlist; // a linked list of sectors where this object appears + msecnode_t *touching_sectorlist; // a linked list of sectors where this object appears - struct subsector_s *subsector; // Subsector the mobj resides in. + subsector_t *subsector; // Subsector the mobj resides in. // The closest interval over all contacted sectors (or things). fixed_t floorz; // Nearest floor below. fixed_t ceilingz; // Nearest ceiling above. - struct ffloor_s *floorrover; // FOF referred by floorz - struct ffloor_s *ceilingrover; // FOF referred by ceilingz + ffloor_t *floorrover; // FOF referred by floorz + ffloor_t *ceilingrover; // FOF referred by ceilingz fixed_t floordrop; fixed_t ceilingdrop; @@ -337,15 +337,15 @@ struct mobj_s // Interaction info, by BLOCKMAP. // Links in blocks (if needed). - struct mobj_s *bnext; - struct mobj_s **bprev; // killough 8/11/98: change to ptr-to-ptr + mobj_t *bnext; + mobj_t **bprev; // killough 8/11/98: change to ptr-to-ptr // Additional pointers for NiGHTS hoops - struct mobj_s *hnext; - struct mobj_s *hprev; + mobj_t *hnext; + mobj_t *hprev; // One last pointer for kart item lists - struct mobj_s *itnext; + mobj_t *itnext; INT32 health; // for player this is rings + 1 -- no it isn't, not any more!! @@ -353,7 +353,7 @@ struct mobj_s angle_t movedir; // dirtype_t 0-7; also used by Deton for up/down angle INT32 movecount; // when 0, select a new dir - struct mobj_s *target; // Thing being chased/attacked (or NULL), and originator for missiles. + mobj_t *target; // Thing being chased/attacked (or NULL), and originator for missiles. INT32 reactiontime; // If not 0, don't attack yet. @@ -361,13 +361,13 @@ struct mobj_s // Additional info record for player avatars only. // Only valid if type == MT_PLAYER - struct player_s *player; + player_t *player; INT32 lastlook; // Player number last looked for. mapthing_t *spawnpoint; // Used for CTF flags, objectplace, and a handful other applications. - struct mobj_s *tracer; // Thing being chased/attacked for tracers. + mobj_t *tracer; // Thing being chased/attacked for tracers. fixed_t friction; fixed_t movefactor; @@ -394,7 +394,7 @@ struct mobj_s INT32 cusval; INT32 cvmem; - struct pslope_s *standingslope; // The slope that the object is standing on (shouldn't need synced in savegames, right?) + pslope_t *standingslope; // The slope that the object is standing on (shouldn't need synced in savegames, right?) boolean resetinterp; // if true, some fields should not be interpolated (see R_InterpolateMobjState implementation) boolean colorized; // Whether the mobj uses the rainbow colormap @@ -405,8 +405,8 @@ struct mobj_s fixed_t sprxoff, spryoff, sprzoff; // Sprite offsets in real space, does NOT affect position or collision - struct terrain_s *terrain; // Terrain definition of the floor this object last hit. NULL when in the air. - struct mobj_s *terrainOverlay; // Overlay sprite object for terrain + terrain_t *terrain; // Terrain definition of the floor this object last hit. NULL when in the air. + mobj_t *terrainOverlay; // Overlay sprite object for terrain INT32 hitlag; // Sal-style hit lag, straight from Captain Fetch's jowls UINT8 waterskip; // Water skipping counter @@ -423,7 +423,7 @@ struct mobj_s // so please keep the start of the // structure the same. // -struct precipmobj_s +struct precipmobj_t { // List: thinker links. thinker_t thinker; @@ -437,8 +437,8 @@ struct precipmobj_s fixed_t old_x2, old_y2, old_z2; // More list: links in sector (if needed) - struct precipmobj_s *snext; - struct precipmobj_s **sprev; // killough 8/11/98: change to ptr-to-ptr + precipmobj_t *snext; + precipmobj_t **sprev; // killough 8/11/98: change to ptr-to-ptr // More drawing info: to determine current sprite. angle_t angle, pitch, roll; // orientation @@ -455,17 +455,17 @@ struct precipmobj_s fixed_t spritexoffset, spriteyoffset; fixed_t old_spritexscale, old_spriteyscale; fixed_t old_spritexoffset, old_spriteyoffset; - struct pslope_s *floorspriteslope; // The slope that the floorsprite is rotated by + pslope_t *floorspriteslope; // The slope that the floorsprite is rotated by - struct mprecipsecnode_s *touching_sectorlist; // a linked list of sectors where this object appears + mprecipsecnode_t *touching_sectorlist; // a linked list of sectors where this object appears - struct subsector_s *subsector; // Subsector the mobj resides in. + subsector_t *subsector; // Subsector the mobj resides in. // The closest interval over all contacted sectors (or things). fixed_t floorz; // Nearest floor below. fixed_t ceilingz; // Nearest ceiling above. - struct ffloor_s *floorrover; // FOF referred by floorz - struct ffloor_s *ceilingrover; // FOF referred by ceilingz + ffloor_t *floorrover; // FOF referred by floorz + ffloor_t *ceilingrover; // FOF referred by ceilingz fixed_t floordrop; fixed_t ceilingdrop; @@ -482,11 +482,11 @@ struct precipmobj_s UINT32 flags; // flags from mobjinfo tables }; -struct actioncache_s +struct actioncache_t { - struct actioncache_s *next; - struct actioncache_s *prev; - struct mobj_s *mobj; + actioncache_t *next; + actioncache_t *prev; + mobj_t *mobj; INT32 statenum; }; diff --git a/src/p_polyobj.h b/src/p_polyobj.h index 9cb94126b..dc5dab153 100644 --- a/src/p_polyobj.h +++ b/src/p_polyobj.h @@ -66,7 +66,7 @@ typedef enum // Polyobject Structure // -struct polyobj_s +struct polyobj_t { mdllistitem_t link; // for subsector links; must be first @@ -78,7 +78,7 @@ struct polyobj_s size_t segCount; // number of segs in polyobject size_t numSegsAlloc; // number of segs allocated - struct seg_s **segs; // the segs, a reallocating array. + seg_t **segs; // the segs, a reallocating array. size_t numVertices; // number of vertices (generally == segCount) size_t numVerticesAlloc; // number of vertices allocated @@ -88,7 +88,7 @@ struct polyobj_s size_t numLines; // number of linedefs (generally <= segCount) size_t numLinesAlloc; // number of linedefs allocated - struct line_s **lines; // linedefs this polyobject must move + line_t **lines; // linedefs this polyobject must move degenmobj_t spawnSpot; // location of spawn spot vertex_t centerPt; // center point @@ -109,7 +109,7 @@ struct polyobj_s INT32 translucency; // index to translucency tables INT16 triggertag; // Tag of linedef executor to trigger on touch - struct visplane_s *visplane; // polyobject's visplane, for ease of putting into the list later + visplane_t *visplane; // polyobject's visplane, for ease of putting into the list later // these are saved for netgames, so do not let Lua touch these! INT32 spawnflags; // Flags the polyobject originally spawned with @@ -212,7 +212,7 @@ struct polydisplace_t thinker_t thinker; // must be first INT32 polyObjNum; - struct sector_s *controlSector; + sector_t *controlSector; fixed_t dx; fixed_t dy; fixed_t oldHeights; @@ -223,7 +223,7 @@ struct polyrotdisplace_t thinker_t thinker; // must be first INT32 polyObjNum; - struct sector_s *controlSector; + sector_t *controlSector; fixed_t rotscale; UINT8 turnobjs; fixed_t oldHeights; @@ -328,7 +328,7 @@ struct polydoordata_t struct polydisplacedata_t { INT32 polyObjNum; - struct sector_s *controlSector; + sector_t *controlSector; fixed_t dx; fixed_t dy; }; @@ -336,7 +336,7 @@ struct polydisplacedata_t struct polyrotdisplacedata_t { INT32 polyObjNum; - struct sector_s *controlSector; + sector_t *controlSector; fixed_t rotscale; UINT8 turnobjs; }; diff --git a/src/r_defs.h b/src/r_defs.h index 2c1c67dc0..59faac3c0 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -57,7 +57,7 @@ typedef UINT8 lighttable_t; #define CMF_FOG 4 // ExtraColormap type. Use for extra_colormaps from now on. -struct extracolormap_s +struct extracolormap_t { UINT8 fadestart, fadeend; UINT8 flags; @@ -74,8 +74,8 @@ struct extracolormap_s char lumpname[9]; // for netsyncing #endif - struct extracolormap_s *next; - struct extracolormap_s *prev; + extracolormap_t *next; + extracolormap_t *prev; }; // @@ -91,9 +91,6 @@ struct vertex_t fixed_t floorz, ceilingz; }; -// Forward of linedefs, for sectors. -struct line_s; - /** Degenerate version of ::mobj_t, storing only a location. * Used for sound origins in sectors, hoop centers, and the like. Does not * handle sound from moving objects (doppler), because position is probably @@ -208,7 +205,7 @@ typedef enum BT_STRONG, } busttype_e; -struct ffloor_s +struct ffloor_t { fixed_t *topheight; INT32 *toppic; @@ -224,17 +221,17 @@ struct ffloor_s angle_t *bottomangle; // Pointers to pointers. Yup. - struct pslope_s **t_slope; - struct pslope_s **b_slope; + pslope_t **t_slope; + pslope_t **b_slope; size_t secnum; ffloortype_e fofflags; - struct line_s *master; + line_t *master; - struct sector_s *target; + sector_t *target; - struct ffloor_s *next; - struct ffloor_s *prev; + ffloor_t *next; + ffloor_t *prev; INT32 lastlight; INT32 alpha; @@ -271,12 +268,12 @@ struct lightlist_t extracolormap_t **extra_colormap; // pointer-to-a-pointer, so we can react to colormap changes INT32 flags; ffloor_t *caster; - struct pslope_s *slope; // FOF_DOUBLESHADOW makes me have to store this pointer here. Bluh bluh. + pslope_t *slope; // FOF_DOUBLESHADOW makes me have to store this pointer here. Bluh bluh. }; // This struct is used for rendering walls with shadows casted on them... -struct r_lightlist_s +struct r_lightlist_t { fixed_t height; fixed_t heightstep; @@ -296,10 +293,10 @@ typedef enum { SL_DYNAMIC = 1<<1, /// This plane slope will be assigned a thinker to make it dynamic. } slopeflags_t; -struct pslope_s +struct pslope_t { UINT16 id; // The number of the slope, mostly used for netgame syncing purposes - struct pslope_s *next; // Make a linked list of dynamic slopes, for easy reference later + pslope_t *next; // Make a linked list of dynamic slopes, for easy reference later // The plane's definition. vector3_t o; /// Plane origin. @@ -399,7 +396,7 @@ typedef enum // The SECTORS record, at runtime. // Stores things/mobjs. // -struct sector_s +struct sector_t { fixed_t floorheight; fixed_t ceilingheight; @@ -445,10 +442,10 @@ struct sector_s // list of mobjs that are at least partially in the sector // thinglist is a subset of touching_thinglist - struct msecnode_s *touching_thinglist; + msecnode_t *touching_thinglist; size_t linecount; - struct line_s **lines; // [linecount] size + line_t **lines; // [linecount] size // Improved fake floor hack ffloor_t *ffloors; @@ -480,14 +477,14 @@ struct sector_s fixed_t friction; // Sprite culling feature - struct line_s *cullheight; + line_t *cullheight; // Current speed of ceiling/floor. For Knuckles to hold onto stuff. fixed_t floorspeed, ceilspeed; // list of precipitation mobjs in sector precipmobj_t *preciplist; - struct mprecipsecnode_s *touching_preciplist; + mprecipsecnode_t *touching_preciplist; // Eternity engine slope pslope_t *f_slope; // floor slope @@ -517,7 +514,7 @@ typedef enum #define NUMLINEARGS 10 #define NUMLINESTRINGARGS 2 -struct line_s +struct line_t { // Vertices, from v1 to v2. vertex_t *v1; @@ -590,12 +587,12 @@ struct side_t // Basically, this is a list of linesegs, indicating the visible walls that define // (all or some) sides of a convex BSP leaf. // -struct subsector_s +struct subsector_t { sector_t *sector; INT16 numlines; UINT16 firstline; - struct polyobj_s *polyList; // haleyjd 02/19/06: list of polyobjects + polyobj_t *polyList; // haleyjd 02/19/06: list of polyobjects size_t validcount; }; @@ -613,25 +610,25 @@ struct subsector_s // // For the links, NULL means top or end of list. -struct msecnode_s +struct msecnode_t { sector_t *m_sector; // a sector containing this object - struct mobj_s *m_thing; // this object - struct msecnode_s *m_sectorlist_prev; // prev msecnode_t for this thing - struct msecnode_s *m_sectorlist_next; // next msecnode_t for this thing - struct msecnode_s *m_thinglist_prev; // prev msecnode_t for this sector - struct msecnode_s *m_thinglist_next; // next msecnode_t for this sector + mobj_t *m_thing; // this object + msecnode_t *m_sectorlist_prev; // prev msecnode_t for this thing + msecnode_t *m_sectorlist_next; // next msecnode_t for this thing + msecnode_t *m_thinglist_prev; // prev msecnode_t for this sector + msecnode_t *m_thinglist_next; // next msecnode_t for this sector boolean visited; // used in search algorithms }; -struct mprecipsecnode_s +struct mprecipsecnode_t { sector_t *m_sector; // a sector containing this object - struct precipmobj_s *m_thing; // this object - struct mprecipsecnode_s *m_sectorlist_prev; // prev msecnode_t for this thing - struct mprecipsecnode_s *m_sectorlist_next; // next msecnode_t for this thing - struct mprecipsecnode_s *m_thinglist_prev; // prev msecnode_t for this sector - struct mprecipsecnode_s *m_thinglist_next; // next msecnode_t for this sector + precipmobj_t *m_thing; // this object + mprecipsecnode_t *m_sectorlist_prev; // prev msecnode_t for this thing + mprecipsecnode_t *m_sectorlist_next; // next msecnode_t for this thing + mprecipsecnode_t *m_thinglist_prev; // prev msecnode_t for this sector + mprecipsecnode_t *m_thinglist_next; // next msecnode_t for this sector boolean visited; // used in search algorithms }; @@ -653,17 +650,17 @@ struct light_t float dynamic_sqrradius; // radius^2 of the light ball }; -struct lightmap_s +struct lightmap_t { float s[2], t[2]; light_t *light; - struct lightmap_s *next; + lightmap_t *next; }; // // The lineseg. // -struct seg_s +struct seg_t { vertex_t *v1; vertex_t *v2; @@ -771,9 +768,9 @@ struct drawseg_t INT16 *sprbottomclip; INT16 *maskedtexturecol; - struct visplane_s *ffloorplanes[MAXFFLOORS]; + visplane_t *ffloorplanes[MAXFFLOORS]; INT32 numffloorplanes; - struct ffloor_s *thicksides[MAXFFLOORS]; + ffloor_t *thicksides[MAXFFLOORS]; INT16 *thicksidecol; INT32 numthicksides; fixed_t frontscale[MAXVIDWIDTH]; diff --git a/src/r_draw.c b/src/r_draw.c index 4b8eaf715..6eb5d6cfb 100644 --- a/src/r_draw.c +++ b/src/r_draw.c @@ -103,7 +103,7 @@ UINT8 *dc_transmap; // one of the translucency tables */ UINT8 *dc_translation; -struct r_lightlist_s *dc_lightlist = NULL; +struct r_lightlist_t *dc_lightlist = NULL; INT32 dc_numlights = 0, dc_maxlights, dc_texheight; // ========================================================================= diff --git a/src/r_draw.h b/src/r_draw.h index 130c44c00..aee8ecc5f 100644 --- a/src/r_draw.h +++ b/src/r_draw.h @@ -47,7 +47,7 @@ extern UINT8 *dc_transmap; extern UINT8 *dc_translation; -extern struct r_lightlist_s *dc_lightlist; +extern struct r_lightlist_t *dc_lightlist; extern INT32 dc_numlights, dc_maxlights; //Fix TUTIFRUTI diff --git a/src/r_plane.h b/src/r_plane.h index 1aa5f84e3..782691af6 100644 --- a/src/r_plane.h +++ b/src/r_plane.h @@ -28,9 +28,9 @@ // Now what is a visplane, anyway? // Simple: kinda floor/ceiling polygon optimised for SRB2 rendering. // -struct visplane_s +struct visplane_t { - struct visplane_s *next; + visplane_t *next; fixed_t height; fixed_t viewx, viewy, viewz; @@ -50,7 +50,7 @@ struct visplane_s fixed_t xoffs, yoffs; // Scrolling flats. - struct ffloor_s *ffloor; + ffloor_t *ffloor; polyobj_t *polyobj; pslope_t *slope; @@ -119,9 +119,9 @@ struct visffloor_t fixed_t f_pos_slope; fixed_t b_pos_slope; - struct pslope_s *slope; + pslope_t *slope; - struct ffloor_s *ffloor; + ffloor_t *ffloor; polyobj_t *polyobj; }; diff --git a/src/r_portal.h b/src/r_portal.h index 556faac8e..4f665f90b 100644 --- a/src/r_portal.h +++ b/src/r_portal.h @@ -20,9 +20,9 @@ /** Portal structure for the software renderer. */ -struct portal_s +struct portal_t { - struct portal_s *next; + portal_t *next; // Viewport. fixed_t viewx; diff --git a/src/r_things.h b/src/r_things.h index 06965c797..f27f3a7c9 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -145,14 +145,14 @@ typedef enum // A vissprite_t is a thing that will be drawn during a refresh, // i.e. a sprite object that is partly visible. -struct vissprite_s +struct vissprite_t { // Doubly linked list. - struct vissprite_s *prev; - struct vissprite_s *next; + vissprite_t *prev; + vissprite_t *next; // Bonus linkdraw pointer. - struct vissprite_s *linkdraw; + vissprite_t *linkdraw; mobj_t *mobj; // for easy access @@ -236,7 +236,7 @@ UINT8 *R_GetSpriteTranslation(vissprite_t *vis); // A drawnode is something that points to a 3D floor, 3D side, or masked // middle texture. This is used for sorting with sprites. -struct drawnode_s +struct drawnode_t { visplane_t *plane; drawseg_t *seg; @@ -244,8 +244,8 @@ struct drawnode_s ffloor_t *ffloor; vissprite_t *sprite; - struct drawnode_s *next; - struct drawnode_s *prev; + drawnode_t *next; + drawnode_t *prev; }; void R_InitDrawNodes(void); diff --git a/src/s_sound.h b/src/s_sound.h index d1a7ba25f..a3ad44750 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -170,13 +170,13 @@ boolean S_MusicInfo(char *mname, UINT16 *mflags, boolean *looping); boolean S_SpeedMusic(float speed); // Music credits -struct musicdef_s +struct musicdef_t { char name[7]; //char usage[256]; char source[256]; int volume; - struct musicdef_s *next; + musicdef_t *next; }; extern struct cursongcredit @@ -218,7 +218,7 @@ UINT32 S_GetMusicPosition(void); // Music Stacking (Jingles) // -struct musicstack_s +struct musicstack_t { char musname[7]; UINT16 musflags; @@ -229,8 +229,8 @@ struct musicstack_s lumpnum_t mlumpnum; boolean noposition; // force music stack resuming from zero (like music_stack_noposition) - struct musicstack_s *prev; - struct musicstack_s *next; + musicstack_t *prev; + musicstack_t *next; }; extern char music_stack_nextmusname[7]; diff --git a/src/screen.h b/src/screen.h index 6728f3762..d49f4aee2 100644 --- a/src/screen.h +++ b/src/screen.h @@ -91,9 +91,9 @@ struct vesa_extra_t }; // a video modes from the video modes list, // note: video mode 0 is always standard VGA320x200. -struct vmode_s +struct vmode_t { - struct vmode_s *pnext; + vmode_t *pnext; char *name; UINT32 width, height; UINT32 rowbytes; // bytes per scanline @@ -102,9 +102,9 @@ struct vmode_s INT32 numpages; vesa_extra_t *pextradata; // vesa mode extra data #ifdef _WIN32 - INT32 (WINAPI *setmode)(viddef_t *lvid, struct vmode_s *pcurrentmode); + INT32 (WINAPI *setmode)(viddef_t *lvid, vmode_t *pcurrentmode); #else - INT32 (*setmode)(viddef_t *lvid, struct vmode_s *pcurrentmode); + INT32 (*setmode)(viddef_t *lvid, vmode_t *pcurrentmode); #endif INT32 misc; // misc for display driver (r_opengl.dll etc) }; diff --git a/src/typedef.h b/src/typedef.h index 4bdddd18d..db751340c 100644 --- a/src/typedef.h +++ b/src/typedef.h @@ -23,7 +23,7 @@ TYPEDEF (fline_t); // command.h TYPEDEF (vsbuf_t); TYPEDEF (CV_PossibleValue_t); -TYPEDEF2 (consvar_s, consvar_t); +TYPEDEF (consvar_t); // d_netcmd.h TYPEDEF (changeteam_packet_t); @@ -31,13 +31,13 @@ TYPEDEF (changeteam_value_t); TYPEDEF (scheduleTask_t); // discord.h -TYPEDEF2 (discordRequest_s, discordRequest_t); +TYPEDEF (discordRequest_t); // d_player.h TYPEDEF (respawnvars_t); TYPEDEF (botvars_t); TYPEDEF (skybox_t); -TYPEDEF2 (player_s, player_t); +TYPEDEF (player_t); // d_clisrv.h TYPEDEF (clientcmd_pak); @@ -59,7 +59,7 @@ TYPEDEF (plrconfig); TYPEDEF (filesneededconfig_pak); TYPEDEF (doomdata_t); TYPEDEF (serverelem_t); -TYPEDEF2 (rewind_s, rewind_t); +TYPEDEF (rewind_t); // d_event.h TYPEDEF (event_t); @@ -67,10 +67,10 @@ TYPEDEF (event_t); // d_netfil.h TYPEDEF (fileneeded_t); TYPEDEF (HTTP_login); -TYPEDEF2 (luafiletransfer_s, luafiletransfer_t); +TYPEDEF (luafiletransfer_t); // d_think.h -TYPEDEF2 (thinker_s, thinker_t); +TYPEDEF (thinker_t); // d_ticcmd.h TYPEDEF (ticcmd_t); @@ -105,7 +105,7 @@ TYPEDEF (mappoint_t); TYPEDEF (customoption_t); TYPEDEF (mapheader_t); TYPEDEF (tolinfo_t); -TYPEDEF2 (cupheader_s, cupheader_t); +TYPEDEF (cupheader_t); // font.h TYPEDEF (font_t); @@ -142,7 +142,7 @@ TYPEDEF (mobjinfo_t); // k_bheap.h TYPEDEF (bheapitem_t); -TYPEDEF2 (bheap_s, bheap_t); +TYPEDEF (bheap_t); // k_boss.h TYPEDEF (weakspot_t); @@ -161,15 +161,15 @@ TYPEDEF (followercategory_t); TYPEDEF (trackingResult_t); // k_menu.h -TYPEDEF2 (menucolor_s, menucolor_t); +TYPEDEF (menucolor_t); TYPEDEF (menuitem_t); -TYPEDEF2 (menu_s, menu_t); +TYPEDEF (menu_t); TYPEDEF (menucmd_t); TYPEDEF (setup_player_t); TYPEDEF (modedesc_t); // k_pathfind.h -TYPEDEF2 (pathfindnode_s, pathfindnode_t); +TYPEDEF (pathfindnode_t); TYPEDEF (path_t); TYPEDEF (pathfindsetup_t); @@ -180,11 +180,11 @@ TYPEDEF (profile_t); TYPEDEF (t_splash_t); TYPEDEF (t_footstep_t); TYPEDEF (t_overlay_t); -TYPEDEF2 (terrain_s, terrain_t); +TYPEDEF (terrain_t); TYPEDEF (t_floor_t); // k_waypoint.h -TYPEDEF2 (waypoint_s, waypoint_t); +TYPEDEF (waypoint_t); // lua_hudlib_drawlist.h typedef struct huddrawlist_s *huddrawlist_h; @@ -200,7 +200,7 @@ TYPEDEF (extraemblem_t); TYPEDEF (unlockable_t); // m_dllist.h -TYPEDEF2 (mdllistitem_s, mdllistitem_t); +TYPEDEF (mdllistitem_t); // m_fixed.h TYPEDEF (vector2_t); @@ -212,7 +212,7 @@ TYPEDEF (ps_hookinfo_t); TYPEDEF (ps_botinfo_t); // m_queue.h -TYPEDEF2 (mqueueitem_s, mqueueitem_t); +TYPEDEF (mqueueitem_t); TYPEDEF (mqueue_t); // mserv.h @@ -231,12 +231,12 @@ TYPEDEF (divline_t); TYPEDEF (intercept_t); // p_mobj.h -TYPEDEF2 (mobj_s, mobj_t); -TYPEDEF2 (precipmobj_s, precipmobj_t); -TYPEDEF2 (actioncache_s, actioncache_t); +TYPEDEF (mobj_t); +TYPEDEF (precipmobj_t); +TYPEDEF (actioncache_t); // p_polyobj.h -TYPEDEF2 (polyobj_s, polyobj_t); +TYPEDEF (polyobj_t); TYPEDEF (polymaplink_t); TYPEDEF (polyrotate_t); TYPEDEF (polymove_t); @@ -312,19 +312,19 @@ TYPEDEF (softwarepatch_t); TYPEDEF (pic_t); TYPEDEF (spriteframe_t); TYPEDEF (spritedef_t); -TYPEDEF2 (extracolormap_s, extracolormap_t); -TYPEDEF2 (ffloor_s, ffloor_t); +TYPEDEF (extracolormap_t); +TYPEDEF (ffloor_t); TYPEDEF (lightlist_t); -TYPEDEF2 (r_lightlist_s, r_lightlist_t); -TYPEDEF2 (pslope_s, pslope_t); -TYPEDEF2 (sector_s, sector_t); -TYPEDEF2 (line_s, line_t); +TYPEDEF (r_lightlist_t); +TYPEDEF (pslope_t); +TYPEDEF (sector_t); +TYPEDEF (line_t); TYPEDEF (side_t); -TYPEDEF2 (subsector_s, subsector_t); -TYPEDEF2 (msecnode_s, msecnode_t); -TYPEDEF2 (mprecipsecnode_s, mprecipsecnode_t); -TYPEDEF2 (lightmap_s, lightmap_t); -TYPEDEF2 (seg_s, seg_t); +TYPEDEF (subsector_t); +TYPEDEF (msecnode_t); +TYPEDEF (mprecipsecnode_t); +TYPEDEF (lightmap_t); +TYPEDEF (seg_t); // r_draw.h TYPEDEF (floatv3_t); @@ -339,11 +339,11 @@ TYPEDEF (spriteframepivot_t); TYPEDEF (spriteinfo_t); // r_plane.h -TYPEDEF2 (visplane_s, visplane_t); +TYPEDEF (visplane_t); TYPEDEF (visffloor_t); // r_portal.h -TYPEDEF2 (portal_s, portal_t); +TYPEDEF (portal_t); // r_skins.h TYPEDEF (skin_t); @@ -360,20 +360,20 @@ TYPEDEF (texture_t); // r_things.h TYPEDEF (maskcount_t); -TYPEDEF2 (vissprite_s, vissprite_t); -TYPEDEF2 (drawnode_s, drawnode_t); +TYPEDEF (vissprite_t); +TYPEDEF (drawnode_t); // s_sound.h TYPEDEF (listener_t); TYPEDEF (channel_t); TYPEDEF (caption_t); -TYPEDEF2 (musicdef_s, musicdef_t); -TYPEDEF2 (musicstack_s, musicstack_t); +TYPEDEF (musicdef_t); +TYPEDEF (musicstack_t); // screen.h TYPEDEF (viddef_t); TYPEDEF (vesa_extra_t); -TYPEDEF2 (vmode_s, vmode_t); +TYPEDEF (vmode_t); // sounds.h TYPEDEF (sfxinfo_t); From 479f9e4d57b87d8c4529f11908dbe34d5fc314ae Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 17:27:22 -0800 Subject: [PATCH 34/66] S_ReducedVFXSoundAtVolume: use player_t* --- src/s_sound.c | 4 ++-- src/s_sound.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index a36b14bf6..fb21cc190 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -732,7 +732,7 @@ void S_StartSound(const void *origin, sfxenum_t sfx_id) S_StartSoundAtVolume(origin, sfx_id, 255); } -void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volume, void *owner) +void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volume, player_t *owner) { if (S_SoundDisabled()) return; @@ -744,7 +744,7 @@ void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volum return; } - if (P_IsDisplayPlayer((player_t *)owner) == false) + if (P_IsDisplayPlayer(owner) == false) { return; } diff --git a/src/s_sound.h b/src/s_sound.h index a3ad44750..adbf92533 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -140,7 +140,7 @@ void S_StartSound(const void *origin, sfxenum_t sound_id); void S_StartSoundAtVolume(const void *origin, sfxenum_t sound_id, INT32 volume); // Will start a sound, but only if VFX reduce is off or the owner isn't a display player. -void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volume, void *owner); +void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volume, player_t *owner); #define S_ReducedVFXSound(a, b, c) S_ReducedVFXSoundAtVolume(a, b, 255, c) // Stop sound for thing at From 404aa0b5feedc6314c8eeb382f29f3a567531ebf Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 27 Nov 2022 21:19:04 -0800 Subject: [PATCH 35/66] Hide MT_OVERLAY with drawpickups --- src/r_things.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/r_things.c b/src/r_things.c index 87b19eb6b..cc0d46a2a 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -3454,6 +3454,7 @@ boolean R_ThingVisible (mobj_t *thing) case MT_SPHEREBOX: case MT_ITEMCAPSULE: case MT_ITEMCAPSULE_PART: + case MT_OVERLAY: // mostly capsule numbers :))) case MT_BATTLECAPSULE: case MT_BATTLECAPSULE_PIECE: return false; From 7b0361a6f25f33dbd7cb226a4218c4952dc9e2ad Mon Sep 17 00:00:00 2001 From: SteelT Date: Mon, 28 Nov 2022 23:05:54 -0500 Subject: [PATCH 36/66] Make vsync default to off --- src/sdl/i_video.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index 5e97694ad..5cea8c65a 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -108,7 +108,7 @@ boolean highcolor = false; // synchronize page flipping with screen refresh -consvar_t cv_vidwait = CVAR_INIT ("vid_wait", "On", CV_SAVE, CV_OnOff, NULL); +consvar_t cv_vidwait = CVAR_INIT ("vid_wait", "Off", CV_SAVE, CV_OnOff, NULL); static consvar_t cv_stretch = CVAR_INIT ("stretch", "Off", CV_SAVE|CV_NOSHOWHELP, CV_OnOff, NULL); static consvar_t cv_alwaysgrabmouse = CVAR_INIT ("alwaysgrabmouse", "Off", CV_SAVE, CV_OnOff, NULL); From ef442e06b7085de75f67a88f0635de6dc2027dd4 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 28 Nov 2022 22:02:33 -0800 Subject: [PATCH 37/66] cmake: let SRB2_SDL2_EXE_NAME override git branch SRB2_SDL2_EXE_NAME is now "" by default. Internally defaults to ringracers. --- CMakeLists.txt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c6cd6c3d4..10c65a167 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,7 +150,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") # Set EXE names so the assets CMakeLists can refer to its target -set(SRB2_SDL2_EXE_NAME ringracers CACHE STRING "Executable binary output name") +set(SRB2_SDL2_EXE_NAME "" CACHE STRING "Override executable binary output name") set(SRB2_SDL2_EXE_SUFFIX "" CACHE STRING "Optional executable suffix, separated by an underscore") include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) @@ -170,10 +170,16 @@ set(SRB2_COMP_REVISION "${SRB2_COMP_COMMIT}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h) -list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_NAME}) -if(NOT "${SRB2_GIT_BRANCH}" STREQUAL "master") - list(APPEND EXE_NAME_PARTS ${SRB2_GIT_BRANCH}) +if("${SRB2_SDL2_EXE_NAME}" STREQUAL "") + list(APPEND EXE_NAME_PARTS "ringracers") + + if(NOT "${SRB2_GIT_BRANCH}" STREQUAL "master") + list(APPEND EXE_NAME_PARTS ${SRB2_GIT_BRANCH}) + endif() +else() + list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_NAME}) endif() + list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_SUFFIX}) list(JOIN EXE_NAME_PARTS "_" EXE_NAME) From 3d500148cd3ac455bc213f9edd219ff269b50336 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 29 Nov 2022 16:54:31 -0800 Subject: [PATCH 38/66] Make Test Run the default map in DEVELOP builds This makes testing easy by starting the game with -server --- src/d_main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index bd63cd874..e3230d81e 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1203,7 +1203,11 @@ D_ConvertVersionNumbers (void) void D_SRB2Main(void) { INT32 i, p; - INT32 pstartmap = 0; +#ifdef DEVELOP + INT32 pstartmap = 1; // default to first loaded map (Test Run) +#else + INT32 pstartmap = 0; // default to random map (0 is not a valid map number) +#endif boolean autostart = false; /* break the version string into version numbers, for netplay */ From 7794f0956e5787255e30445f0b7b8bbe31f1c148 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 2 Dec 2022 00:27:34 -0500 Subject: [PATCH 39/66] Reset pitch/roll on springs + trick panels --- src/k_kart.c | 3 +++ src/p_user.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 15cd34b9a..8297317f2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6658,6 +6658,9 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound) mo->momz = FixedDiv(mo->momz, FixedSqrt(3*FRACUNIT)); } + mo->pitch = 0; + mo->roll = 0; + if (sound) { S_StartSound(mo, (sound == 1 ? sfx_kc2f : sfx_kpogos)); diff --git a/src/p_user.c b/src/p_user.c index 7d21578dd..57f4b2af9 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -478,6 +478,12 @@ void P_ResetPlayer(player_t *player) player->trickpanel = 0; player->glanceDir = 0; player->fastfall = 0; + + if (player->mo != NULL && P_MobjWasRemoved(player->mo) == false) + { + player->mo->pitch = 0; + player->mo->roll = 0; + } } // From dbedd662590446e13016996ed53b142d2f97fe43 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 2 Dec 2022 02:01:02 -0500 Subject: [PATCH 40/66] Fix solid midtextures UDMF's ML_MIDPEG == Binary's (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_MIDPEG)). This is converted in P_ConvertBinaryLinedefFlags --- src/p_maputl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_maputl.c b/src/p_maputl.c index 7eb4a7e19..e1ceeb0fe 100644 --- a/src/p_maputl.c +++ b/src/p_maputl.c @@ -534,7 +534,7 @@ P_GetMidtextureTopBottom texbottom = back->floorheight + side->rowoffset; textop = back->ceilingheight + side->rowoffset; } - else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_MIDPEG)) + else if (linedef->flags & ML_MIDPEG) { texbottom = back->floorheight + side->rowoffset; textop = texbottom + texheight*(side->repeatcnt+1); @@ -553,7 +553,7 @@ P_GetMidtextureTopBottom texbottom += side->rowoffset; textop += side->rowoffset; } - else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_MIDPEG)) + else if (linedef->flags & ML_MIDPEG) { texbottom += side->rowoffset; textop = texbottom + texheight*(side->repeatcnt+1); From b62ed336551aaa6fe2e444be0164e944123ac723 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 2 Dec 2022 03:56:15 -0500 Subject: [PATCH 41/66] Fix Battle mode Egg Capsules bumping Old vanilla-ass code for platform-like objects that is conflicting super hard with bumping / horizontal momentum. If we ever have a moving platform object this code should be brought back only for that object, and not solid objects as a whole. --- src/p_map.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/p_map.c b/src/p_map.c index cb5d030a2..c7047bcde 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1464,6 +1464,11 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) } } + // This code is causing conflicts for Ring Racers, + // as solid objects cause bumping. If you need to + // bring back this code for a moving platform-style + // object, separate it properly. +#if 0 if ((tm.thing->flags & MF_SPRING || tm.thing->type == MT_STEAM || tm.thing->type == MT_SPIKE || tm.thing->type == MT_WALLSPIKE) && (thing->player)) ; // springs, gas jets and springs should never be able to step up onto a player // z checking at last @@ -1562,6 +1567,7 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) } } } +#endif // not solid not blocked return BMIT_CONTINUE; From bdbd79dd4109772694acd4eeeed90d5c629a1bb9 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 2 Dec 2022 04:12:04 -0500 Subject: [PATCH 42/66] Fix Egg Capsule interp --- src/p_mobj.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 0613d816c..91fbbfa52 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9156,9 +9156,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) // Move each piece to the proper position while (cur && !P_MobjWasRemoved(cur)) { - fixed_t newx = mobj->x; - fixed_t newy = mobj->y; - fixed_t newz = bottom; + fixed_t newx = mobj->x + mobj->momx; + fixed_t newy = mobj->y + mobj->momy; + fixed_t newz = bottom + mobj->momz; statenum_t state = (statenum_t)(cur->state-states); cur->scale = mobj->scale; @@ -9202,7 +9202,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) cur->angle = angle + ANGLE_90; } - P_MoveOrigin(cur, newx, newy, newz); + cur->momx = newx - cur->x; + cur->momy = newy - cur->y; + cur->momz = newz - cur->z; cur = cur->hnext; } From e8e02058ef1aee030335b45c2f26435d04aad6bc Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 2 Dec 2022 04:21:23 -0500 Subject: [PATCH 43/66] Bigger Egg Capsule hitbox --- src/info.c | 4 ++-- src/p_mobj.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/info.c b/src/info.c index 3824731d1..dcf6a9f65 100644 --- a/src/info.c +++ b/src/info.c @@ -28661,8 +28661,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 28<radius; - fixed_t offy = mobj->radius; + fixed_t offx = 28 * mobj->scale; + fixed_t offy = 28 * mobj->scale; if (cur->extravalue1 & 1) offx = -offx; From d6bd869b9212a51cef3280f0d295f767eada70ca Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 3 Dec 2022 03:08:44 -0500 Subject: [PATCH 44/66] Give Egg Capsules drop shadows --- src/info.c | 2 +- src/p_mobj.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index dcf6a9f65..61af1efeb 100644 --- a/src/info.c +++ b/src/info.c @@ -28646,7 +28646,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_BATTLECAPSULE 2333, // doomednum - S_INVISIBLE, // spawnstate + S_SHADOW, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound diff --git a/src/p_mobj.c b/src/p_mobj.c index caf725e26..78d27e96a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9998,6 +9998,7 @@ static void P_DefaultMobjShadowScale(mobj_t *thing) { case MT_PLAYER: case MT_KART_LEFTOVER: + case MT_BATTLECAPSULE: thing->shadowscale = FRACUNIT; break; case MT_SMALLMACE: From 226cb7d736b6a4b134feddb93da16a26ecd47a8f Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 3 Dec 2022 04:25:34 -0500 Subject: [PATCH 45/66] Update capsule parts - The pieces do the positioning, instead of the capsule itself. This makes it so that the parts update after the capsule has applied its momentum. - Use proper inradius instead, so the sides line up. - Because of the above change, the capsule as a whole is bigger. This means... - Increased hitbox again - Changed a few of the sprites --- src/info.c | 2 +- src/p_mobj.c | 171 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 107 insertions(+), 66 deletions(-) diff --git a/src/info.c b/src/info.c index 61af1efeb..ae5bce736 100644 --- a/src/info.c +++ b/src/info.c @@ -28661,7 +28661,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 56<extravalue2) + { mobj->frame |= FF_VERTICALFLIP; + } else + { mobj->frame &= ~FF_VERTICALFLIP; + } if (mobj->flags2 & MF2_OBJECTFLIP) + { mobj->eflags |= MFE_VERTICALFLIP; + } if (mobj->tics > 0) + { + // Despawning. mobj->renderflags ^= RF_DONTDRAW; + } + else + { + statenum_t state = (statenum_t)(mobj->state - states); + mobj_t *owner = mobj->target; + fixed_t newx, newy, newz; + SINT8 flip; + + if (owner == NULL || P_MobjWasRemoved(owner) == true) + { + // Exit early. + break; + } + + newx = owner->x; + newy = owner->y; + newz = P_GetMobjFeet(owner); + + flip = P_MobjFlip(owner); // Flying capsules needs flipped sprites, but not flipped gravity + if (owner->extravalue1) + { + flip = -flip; + newz += owner->height; + } + + mobj->scale = owner->scale; + mobj->destscale = owner->destscale; + mobj->scalespeed = owner->scalespeed; + + mobj->extravalue2 = owner->extravalue1; + + mobj->flags2 = (mobj->flags2 & ~MF2_OBJECTFLIP) | (owner->flags2 & MF2_OBJECTFLIP); + + switch (state) + { + case S_BATTLECAPSULE_TOP: + { + newz += (80 * owner->scale * flip); + break; + } + + case S_BATTLECAPSULE_BUTTON: + { + newz += (120 * owner->scale * flip); + break; + } + + case S_BATTLECAPSULE_SUPPORT: + case S_BATTLECAPSULE_SUPPORTFLY: + case S_KARMAWHEEL: + { + fixed_t offx = 36 * owner->scale; + fixed_t offy = 36 * owner->scale; + + if (mobj->extravalue1 & 1) + { + offx = -offx; + } + + if (mobj->extravalue1 > 1) + { + offy = -offy; + } + + newx += offx; + newy += offy; + break; + } + + case S_BATTLECAPSULE_SIDE1: + case S_BATTLECAPSULE_SIDE2: + { +#define inradius 3797355 // Precalculated +#ifndef inradius + fixed_t inradius = FixedDiv(48 << FRACBITS, 2 * FINETANGENT((((ANGLE_180 / 8) + ANGLE_90) >> ANGLETOFINESHIFT) & 4095)); +#endif + fixed_t offset = FixedMul(inradius, owner->scale); + angle_t angle = (ANGLE_45 * mobj->extravalue1); + + newx += FixedMul(offset, FINECOSINE(angle >> ANGLETOFINESHIFT)); + newy += FixedMul(offset, FINESINE(angle >> ANGLETOFINESHIFT)); + newz += (12 * owner->scale * flip); + + mobj->angle = angle + ANGLE_90; + break; +#undef inradius + } + + default: + { + break; + } + } + + mobj->momx = newx - mobj->x; + mobj->momy = newy - mobj->y; + mobj->momz = newz - mobj->z; + } break; case MT_SPINDASHWIND: case MT_DRIFTELECTRICSPARK: @@ -9039,8 +9145,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj) { SINT8 realflip = P_MobjFlip(mobj); SINT8 flip = realflip; // Flying capsules needs flipped sprites, but not flipped gravity - fixed_t bottom; - mobj_t *cur; if (mobj->extravalue1) { @@ -9145,69 +9249,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj) } } } - - if (flip == -1) - bottom = mobj->z + mobj->height; - else - bottom = mobj->z; - - cur = mobj->hnext; - - // Move each piece to the proper position - while (cur && !P_MobjWasRemoved(cur)) - { - fixed_t newx = mobj->x + mobj->momx; - fixed_t newy = mobj->y + mobj->momy; - fixed_t newz = bottom + mobj->momz; - statenum_t state = (statenum_t)(cur->state-states); - - cur->scale = mobj->scale; - cur->destscale = mobj->destscale; - cur->scalespeed = mobj->scalespeed; - - cur->extravalue2 = mobj->extravalue1; - - cur->flags2 = (cur->flags2 & ~MF2_OBJECTFLIP)|(mobj->flags2 & MF2_OBJECTFLIP); - - if (state == S_BATTLECAPSULE_TOP) - newz += (80 * mobj->scale * flip); - else if (state == S_BATTLECAPSULE_BUTTON) - newz += (108 * mobj->scale * flip); - else if (state == S_BATTLECAPSULE_SUPPORT - || state == S_BATTLECAPSULE_SUPPORTFLY - || state == S_KARMAWHEEL) - { - fixed_t offx = 28 * mobj->scale; - fixed_t offy = 28 * mobj->scale; - - if (cur->extravalue1 & 1) - offx = -offx; - - if (cur->extravalue1 > 1) - offy = -offy; - - newx += offx; - newy += offy; - } - else if (state == S_BATTLECAPSULE_SIDE1 - || state == S_BATTLECAPSULE_SIDE2) - { - fixed_t offset = 48 * mobj->scale; - angle_t angle = (ANGLE_45 * cur->extravalue1); - - newx += FixedMul(offset, FINECOSINE(angle >> ANGLETOFINESHIFT)); - newy += FixedMul(offset, FINESINE(angle >> ANGLETOFINESHIFT)); - newz += (12 * mobj->scale * flip); - - cur->angle = angle + ANGLE_90; - } - - cur->momx = newx - cur->x; - cur->momy = newy - cur->y; - cur->momz = newz - cur->z; - - cur = cur->hnext; - } } break; case MT_RANDOMITEM: From 2140c2f6162d42aa75be8ed8f764d7a68f4ec998 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 3 Dec 2022 04:45:59 -0500 Subject: [PATCH 46/66] Use P1-4 starts in Capsules Attack / Bonus Stage Rather than randomized Battle starts. --- src/g_game.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/g_game.c b/src/g_game.c index fe73d8ae6..5cde2d270 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2824,6 +2824,11 @@ mapthing_t *G_FindMapStart(INT32 playernum) spawnpoint = G_FindRaceStartOrFallback(playernum); } + // -- Grand Prix / Time Attack -- + // Order: Race->DM->CTF + else if (grandprixinfo.gp || modeattacking) + spawnpoint = G_FindRaceStartOrFallback(playernum); + // -- CTF -- // Order: CTF->DM->Race else if ((gametyperules & GTR_TEAMSTARTS) && players[playernum].ctfteam) From 7b2095f6a5f40bc7dc1833372a89a9a6cdc2feb6 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 29 Nov 2022 01:59:17 -0800 Subject: [PATCH 47/66] Scale player weight buff from speed to mobjscale --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 15cd34b9a..42ee7af53 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1508,7 +1508,7 @@ static fixed_t K_PlayerWeight(mobj_t *mobj, mobj_t *against) weight = (mobj->player->kartweight) * FRACUNIT; if (mobj->player->speed > spd) - weight += (mobj->player->speed - spd) / 8; + weight += FixedDiv((mobj->player->speed - spd), 8 * mapobjectscale); if (mobj->player->itemtype == KITEM_BUBBLESHIELD) weight += 9*FRACUNIT; From abdb2e3ac38a30807c8d13dcbdc3fa2049b1e29f Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 1 Dec 2022 20:39:53 -0800 Subject: [PATCH 48/66] Set Lightning Shield attack to DMG_VOLTAGE --- src/deh_tables.c | 1 + src/k_collide.c | 2 +- src/p_inter.c | 1 + src/p_local.h | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/deh_tables.c b/src/deh_tables.c index a36b7af9d..ab0ef138b 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -6369,6 +6369,7 @@ struct int_const_s const INT_CONST[] = { {"DMG_TUMBLE",DMG_TUMBLE}, {"DMG_STING",DMG_STING}, {"DMG_KARMA",DMG_KARMA}, + {"DMG_VOLTAGE",DMG_VOLTAGE}, //// Death types {"DMG_INSTAKILL",DMG_INSTAKILL}, {"DMG_DEATHPIT",DMG_DEATHPIT}, diff --git a/src/k_collide.c b/src/k_collide.c index 6a67e5a04..dac44b5f7 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -625,7 +625,7 @@ static inline BlockItReturn_t PIT_LightningShieldAttack(mobj_t *thing) } #endif - P_DamageMobj(thing, lightningSource, lightningSource, 1, DMG_NORMAL|DMG_CANTHURTSELF|DMG_WOMBO); + P_DamageMobj(thing, lightningSource, lightningSource, 1, DMG_VOLTAGE|DMG_CANTHURTSELF|DMG_WOMBO); return BMIT_CONTINUE; } diff --git a/src/p_inter.c b/src/p_inter.c index e77a5d8ff..76757f193 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2180,6 +2180,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da K_SpinPlayer(player, inflictor, source, KSPIN_WIPEOUT); K_KartPainEnergyFling(player); break; + case DMG_VOLTAGE: case DMG_NORMAL: default: K_SpinPlayer(player, inflictor, source, KSPIN_SPINOUT); diff --git a/src/p_local.h b/src/p_local.h index e547bc7b4..d9486e8b7 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -516,6 +516,7 @@ struct BasicFF_t #define DMG_TUMBLE 0x03 #define DMG_STING 0x04 #define DMG_KARMA 0x05 // Karma Bomb explosion -- works like DMG_EXPLODE, but steals half of their bumpers & deletes the rest +#define DMG_VOLTAGE 0x06 //// Death types - cannot be combined with damage types #define DMG_INSTAKILL 0x80 #define DMG_DEATHPIT 0x81 From 3bc359e29865252f9d7c20ddd2b5230b9ca97f69 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 1 Dec 2022 21:00:49 -0800 Subject: [PATCH 49/66] Mobj scale explosions smoldering rising momentum --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 0613d816c..ace1a7c22 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5886,7 +5886,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) K_MatchGenericExtraFlags(smoke, mobj); smoke->scale = mobj->scale * 2; smoke->destscale = mobj->scale * 6; - smoke->momz = P_RandomRange(PR_SMOLDERING, 4, 9)*FRACUNIT*P_MobjFlip(smoke); + smoke->momz = P_RandomRange(PR_SMOLDERING, 4, 9)*mobj->scale*P_MobjFlip(smoke); } break; case MT_BOOMPARTICLE: From cbb1f3c714a8c3b929ac81f6a33e70ce3d30781a Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 3 Dec 2022 03:33:49 -0800 Subject: [PATCH 50/66] Fix NULL lump name guard for W_CheckNumForName --- src/w_wad.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/w_wad.c b/src/w_wad.c index fb828cf81..cef5615cc 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -1202,7 +1202,7 @@ UINT16 W_CheckNumForFullNamePK3(const char *name, UINT16 wad, UINT16 startlump) lumpnum_t W_CheckNumForName(const char *name) { lumpnum_t check = INT16_MAX; - UINT32 hash = quickncasehash(name, 8); + UINT32 hash = name ? quickncasehash(name, 8) : 0; INT32 i; if (name == NULL) @@ -1258,7 +1258,7 @@ lumpnum_t W_CheckNumForName(const char *name) lumpnum_t W_CheckNumForLongName(const char *name) { lumpnum_t check = INT16_MAX; - UINT32 hash = quickncasehash(name, LUMPNUMCACHENAME); + UINT32 hash = name ? quickncasehash(name, LUMPNUMCACHENAME) : 0; INT32 i; if (name == NULL) From 90a4159acd00cb8b625b5accd12c18ff830cafeb Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 5 Dec 2022 13:45:26 -0800 Subject: [PATCH 51/66] Add IMON sprite definition --- src/info.c | 1 + src/info.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/info.c b/src/info.c index 3824731d1..f4a17b28b 100644 --- a/src/info.c +++ b/src/info.c @@ -543,6 +543,7 @@ char sprnames[NUMSPRITES + 1][5] = "KINF", // Invincibility flash "INVI", // Invincibility speedlines "ICAP", // Item capsules + "IMON", // Item Monitor "MGBX", // Heavy Magician transform box "MGBT", // Heavy Magician transform box top "MGBB", // Heavy Magician transform box bottom diff --git a/src/info.h b/src/info.h index 4425b4dc8..35a050011 100644 --- a/src/info.h +++ b/src/info.h @@ -1089,6 +1089,7 @@ typedef enum sprite SPR_KINF, // Invincibility flash SPR_INVI, // Invincibility speedlines SPR_ICAP, // Item capsules + SPR_IMON, // Item Monitor SPR_MGBX, // Heavy Magician transform box SPR_MGBT, // Heavy Magician transform box top SPR_MGBB, // Heavy Magician transform box bottom From b95a18676ff83a3b334bb838122bd63880f3071b Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 11 Dec 2022 13:53:51 -0500 Subject: [PATCH 52/66] Clipping rectangle Instead of the absolute insanity that is V_DrawCroppedPatch, which makes you specify the number of pixels to crop off the top/left and then the number of pixels to show after the crop ... you just use V_SetClipRect to create a rectangle for any future draws to be cropped down to, and V_ClearClipRect afterwards to clear it. Currently only supported by V_DrawStretchyFixedPatch. Ideally other drawing functions should also receive clipping rectangle support too. --- src/hardware/hw_draw.c | 6 +- src/k_hud.c | 115 +------------ src/k_hud.h | 2 - src/typedef.h | 1 + src/v_video.c | 381 ++++++++++++++++++++++++++++------------- src/v_video.h | 13 ++ 6 files changed, 286 insertions(+), 232 deletions(-) diff --git a/src/hardware/hw_draw.c b/src/hardware/hw_draw.c index b5268986b..56890382f 100644 --- a/src/hardware/hw_draw.c +++ b/src/hardware/hw_draw.c @@ -207,7 +207,7 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p INT32 intx, inty; intx = (INT32)cx; inty = (INT32)cy; - K_AdjustXYWithSnap(&intx, &inty, option, dupx, dupy); + V_AdjustXYWithSnap(&intx, &inty, option, dupx, dupy); cx = (float)intx; cy = (float)inty; } @@ -1011,7 +1011,7 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32 intx = (INT32)fx; inty = (INT32)fy; - K_AdjustXYWithSnap(&intx, &inty, color, dupx, dupy); + V_AdjustXYWithSnap(&intx, &inty, color, dupx, dupy); fx = (float)intx; fy = (float)inty; } @@ -1102,7 +1102,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) intx = (INT32)fx; inty = (INT32)fy; - K_AdjustXYWithSnap(&intx, &inty, color, dupx, dupy); + V_AdjustXYWithSnap(&intx, &inty, color, dupx, dupy); fx = (float)intx; fy = (float)inty; } diff --git a/src/k_hud.c b/src/k_hud.c index 5325f07eb..543a7a9e7 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -762,117 +762,6 @@ INT32 POSI2_X, POSI2_Y; // trick "cool" INT32 TCOOL_X, TCOOL_Y; - -void K_AdjustXYWithSnap(INT32 *x, INT32 *y, UINT32 options, INT32 dupx, INT32 dupy) -{ - // dupx adjustments pretend that screen width is BASEVIDWIDTH * dupx - INT32 screenwidth = vid.width; - INT32 screenheight = vid.height; - INT32 basewidth = BASEVIDWIDTH * dupx; - INT32 baseheight = BASEVIDHEIGHT * dupy; - SINT8 player = -1; - UINT8 i; - - if (options & V_SPLITSCREEN) - { - if (r_splitscreen > 0) - { - screenheight /= 2; - baseheight /= 2; - } - - if (r_splitscreen > 1) - { - screenwidth /= 2; - basewidth /= 2; - } - } - - for (i = 0; i <= r_splitscreen; i++) - { - if (stplyr == &players[displayplayers[i]]) - { - player = i; - break; - } - } - - if (vid.width != (BASEVIDWIDTH * dupx)) - { - if (options & V_SNAPTORIGHT) - *x += (screenwidth - basewidth); - else if (!(options & V_SNAPTOLEFT)) - *x += (screenwidth - basewidth) / 2; - } - - if (vid.height != (BASEVIDHEIGHT * dupy)) - { - if (options & V_SNAPTOBOTTOM) - *y += (screenheight - baseheight); - else if (!(options & V_SNAPTOTOP)) - *y += (screenheight - baseheight) / 2; - } - - if (options & V_SPLITSCREEN) - { - if (r_splitscreen == 1) - { - if (player == 1) - *y += screenheight; - } - else if (r_splitscreen > 1) - { - if (player == 1 || player == 3) - *x += screenwidth; - - if (player == 2 || player == 3) - *y += screenheight; - } - } - - if (options & V_SLIDEIN) - { - const tic_t length = TICRATE/4; - tic_t timer = lt_exitticker; - if (bossinfo.boss == true) - { - if (leveltime <= 3) - timer = 0; - else - timer = leveltime-3; - } - - if (timer < length) - { - boolean slidefromright = false; - - const INT32 offsetAmount = (screenwidth * FRACUNIT/2) / length; - fixed_t offset = (screenwidth * FRACUNIT/2) - (timer * offsetAmount); - - offset += FixedMul(offsetAmount, renderdeltatics); - offset /= FRACUNIT; - - if (r_splitscreen > 1) - { - if (stplyr == &players[displayplayers[1]] || stplyr == &players[displayplayers[3]]) - slidefromright = true; - } - - if (options & V_SNAPTORIGHT) - slidefromright = true; - else if (options & V_SNAPTOLEFT) - slidefromright = false; - - if (slidefromright == true) - { - offset = -offset; - } - - *x -= offset; - } - } -} - // This version of the function was prototyped in Lua by Nev3r ... a HUGE thank you goes out to them! void K_ObjectTracking(trackingResult_t *result, vector3_t *point, boolean reverse) { @@ -1301,6 +1190,8 @@ static void K_drawKartItem(void) V_DrawScaledPatch(fx, fy, V_HUDTRANS|V_SLIDEIN|fflags, localbg); + V_SetClipRect((fx + 10) << FRACBITS, (fy + 10) << FRACBITS, 30 << FRACBITS, 30 << FRACBITS, V_HUDTRANS|V_SLIDEIN|fflags); + // Then, the numbers: if (stplyr->itemamount >= numberdisplaymin && !stplyr->itemroulette) { @@ -1320,6 +1211,8 @@ static void K_drawKartItem(void) else V_DrawFixedPatch(fx< 0) + { + screenheight /= 2; + baseheight /= 2; + } + + if (r_splitscreen > 1) + { + screenwidth /= 2; + basewidth /= 2; + } + } + + for (i = 0; i <= r_splitscreen; i++) + { + if (stplyr == &players[displayplayers[i]]) + { + player = i; + break; + } + } + + if (vid.width != (BASEVIDWIDTH * dupx)) + { + if (options & V_SNAPTORIGHT) + *x += (screenwidth - basewidth); + else if (!(options & V_SNAPTOLEFT)) + *x += (screenwidth - basewidth) / 2; + } + + if (vid.height != (BASEVIDHEIGHT * dupy)) + { + if (options & V_SNAPTOBOTTOM) + *y += (screenheight - baseheight); + else if (!(options & V_SNAPTOTOP)) + *y += (screenheight - baseheight) / 2; + } + + if (options & V_SPLITSCREEN) + { + if (r_splitscreen == 1) + { + if (player == 1) + *y += screenheight; + } + else if (r_splitscreen > 1) + { + if (player == 1 || player == 3) + *x += screenwidth; + + if (player == 2 || player == 3) + *y += screenheight; + } + } + + if (options & V_SLIDEIN) + { + const tic_t length = TICRATE/4; + tic_t timer = lt_exitticker; + if (bossinfo.boss == true) + { + if (leveltime <= 3) + timer = 0; + else + timer = leveltime-3; + } + + if (timer < length) + { + boolean slidefromright = false; + + const INT32 offsetAmount = (screenwidth * FRACUNIT/2) / length; + fixed_t offset = (screenwidth * FRACUNIT/2) - (timer * offsetAmount); + + offset += FixedMul(offsetAmount, renderdeltatics); + offset /= FRACUNIT; + + if (r_splitscreen > 1) + { + if (stplyr == &players[displayplayers[1]] || stplyr == &players[displayplayers[3]]) + slidefromright = true; + } + + if (options & V_SNAPTORIGHT) + slidefromright = true; + else if (options & V_SNAPTOLEFT) + slidefromright = false; + + if (slidefromright == true) + { + offset = -offset; + } + + *x -= offset; + } + } +} + +static cliprect_t cliprect; + +cliprect_t *V_GetClipRect(void) +{ + if (cliprect.enabled == false) + { + return NULL; + } + + return &cliprect; +} + +void V_SetClipRect(fixed_t x, fixed_t y, fixed_t w, fixed_t h, INT32 flags) +{ + // Adjust position. + if (!(flags & V_NOSCALESTART)) + { + fixed_t dupx = vid.dupx; + fixed_t dupy = vid.dupy; + + if (flags & V_SCALEPATCHMASK) + { + switch ((flags & V_SCALEPATCHMASK) >> V_SCALEPATCHSHIFT) + { + case 1: // V_NOSCALEPATCH + dupx = dupy = 1; + break; + case 2: // V_SMALLSCALEPATCH + dupx = vid.smalldupx; + dupy = vid.smalldupy; + break; + case 3: // V_MEDSCALEPATCH + dupx = vid.meddupx; + dupy = vid.meddupy; + break; + default: + break; + } + } + + dupx = dupy = (dupx < dupy ? dupx : dupy); + + x = FixedMul(x, dupx); + y = FixedMul(y, dupy); + w = FixedMul(w, dupx); + h = FixedMul(h, dupy); + + if (!(flags & V_SCALEPATCHMASK)) + { + V_AdjustXYWithSnap(&x, &y, flags, dupx, dupy); + } + } + + if (x < 0) + { + w += x; + x = 0; + } + + if (y < 0) + { + h += y; + y = 0; + } + + if (x > vid.width) + { + x = vid.width; + w = 0; + } + + if (y > vid.height) + { + y = vid.height; + h = 0; + } + + cliprect.l = x; + cliprect.t = y; + cliprect.r = x + w; + cliprect.b = y + h; + cliprect.flags = flags; + cliprect.enabled = true; + + /* + V_DrawFill(cliprect.l, cliprect.t, cliprect.r - cliprect.l, cliprect.b - cliprect.t, V_NOSCALESTART); + CONS_Printf("[(%d, %d), (%d, %d)]\n", cliprect.l, cliprect.t, cliprect.r, cliprect.b); + */ +} + +void V_ClearClipRect(void) +{ + cliprect.enabled = false; +} + static UINT8 hudplusalpha[11] = { 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0}; static UINT8 hudminusalpha[11] = { 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5}; @@ -554,6 +760,8 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca fixed_t pwidth; // patch width fixed_t offx = 0; // x offset + cliprect_t *const clip = V_GetClipRect(); + if (rendermode == render_none) return; @@ -662,7 +870,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca // Center it if necessary if (!(scrn & V_SCALEPATCHMASK)) { - K_AdjustXYWithSnap(&x, &y, scrn, dupx, dupy); + V_AdjustXYWithSnap(&x, &y, scrn, dupx, dupy); } desttop += (y*vid.width) + x; @@ -684,18 +892,19 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca for (col = 0; (col>>FRACBITS) < patch->width; col += colfrac, ++offx, desttop++) { INT32 topdelta, prevdelta = -1; + if (scrn & V_FLIP) // offx is measured from right edge instead of left { - if (x+pwidth-offx < 0) // don't draw off the left of the screen (WRAP PREVENTION) + if (x+pwidth-offx < (clip ? clip->l : 0)) // don't draw off the left of the screen (WRAP PREVENTION) break; - if (x+pwidth-offx >= vid.width) // don't draw off the right of the screen (WRAP PREVENTION) + if (x+pwidth-offx >= (clip ? clip->r : vid.width)) // don't draw off the right of the screen (WRAP PREVENTION) continue; } else { - if (x+offx < 0) // don't draw off the left of the screen (WRAP PREVENTION) + if (x+offx < (clip ? clip->l : 0)) // don't draw off the left of the screen (WRAP PREVENTION) continue; - if (x+offx >= vid.width) // don't draw off the right of the screen (WRAP PREVENTION) + if (x+offx >= (clip ? clip->r : vid.width)) // don't draw off the right of the screen (WRAP PREVENTION) break; } @@ -703,6 +912,8 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca while (column->topdelta != 0xff) { + fixed_t offy = 0; + topdelta = column->topdelta; if (topdelta <= prevdelta) topdelta += prevdelta; @@ -712,23 +923,60 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca dest = desttop; if (scrn & V_FLIP) dest = deststart + (destend - dest); - dest += FixedInt(FixedMul(topdelta<length << FRACBITS)-1; dest < deststop && ofs >= 0; ofs -= rowfrac) + for (ofs = (column->length << FRACBITS)-1; dest < deststop && ofs >= 0; ofs -= rowfrac, ++offy) { + if (clip != NULL) + { + const INT32 cy = y + topdelta - offy; + + if (cy < clip->t) // don't draw off the top of the clip rect + { + dest += vid.width; + continue; + } + + if (cy > clip->b) // don't draw off the bottom of the clip rect + { + dest += vid.width; + continue; + } + } + if (dest >= screens[scrn&V_SCREENMASK]) // don't draw off the top of the screen (CRASH PREVENTION) *dest = patchdrawfunc(dest, source, ofs); + dest += vid.width; } } else { - for (ofs = 0; dest < deststop && ofs < (column->length << FRACBITS); ofs += rowfrac) + for (ofs = 0; dest < deststop && ofs < (column->length << FRACBITS); ofs += rowfrac, ++offy) { + if (clip != NULL) + { + const INT32 cy = y + topdelta + offy; + + if (cy < clip->t) // don't draw off the top of the clip rect + { + dest += vid.width; + continue; + } + + if (cy > clip->b) // don't draw off the bottom of the clip rect + { + dest += vid.width; + continue; + } + } + if (dest >= screens[scrn&V_SCREENMASK]) // don't draw off the top of the screen (CRASH PREVENTION) *dest = patchdrawfunc(dest, source, ofs); + dest += vid.width; } } @@ -741,115 +989,16 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca // Draws a patch cropped and scaled to arbitrary size. void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_t *patch, fixed_t sx, fixed_t sy, fixed_t w, fixed_t h) { - UINT8 (*patchdrawfunc)(const UINT8*, const UINT8*, fixed_t); - UINT32 alphalevel, blendmode; - // boolean flip = false; + cliprect_t oldClip = cliprect; - fixed_t col, ofs, colfrac, rowfrac, fdup; - INT32 dupx, dupy; - const column_t *column; - UINT8 *desttop, *dest; - const UINT8 *source, *deststop; + V_SetClipRect(x, y, w, h, scrn); - if (rendermode == render_none) - return; + x -= sx; + y -= sy; -#ifdef HWRENDER - //if (rendermode != render_soft && !con_startup) // Not this again - if (rendermode == render_opengl) - { - HWR_DrawCroppedPatch(patch,x,y,pscale,scrn,sx,sy,w,h); - return; - } -#endif + V_DrawStretchyFixedPatch(x, y, pscale, pscale, scrn, patch, NULL); - patchdrawfunc = standardpdraw; - - if ((blendmode = ((scrn & V_BLENDMASK) >> V_BLENDSHIFT))) - blendmode++; // realign to constants - if ((alphalevel = ((scrn & V_ALPHAMASK) >> V_ALPHASHIFT))) - { - if (alphalevel == 10) // V_HUDTRANSHALF - alphalevel = hudminusalpha[st_translucency]; - else if (alphalevel == 11) // V_HUDTRANS - alphalevel = 10 - st_translucency; - else if (alphalevel == 12) // V_HUDTRANSDOUBLE - alphalevel = hudplusalpha[st_translucency]; - - if (alphalevel >= 10) // Still inelegible to render? - return; - } - if ((v_translevel = R_GetBlendTable(blendmode, alphalevel))) - patchdrawfunc = translucentpdraw; - - // only use one dup, to avoid stretching (har har) - dupx = dupy = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy); - fdup = FixedMul(dupx<topoffset<leftoffset<>= FRACBITS; - y >>= FRACBITS; - desttop += (y*vid.width) + x; - } - else - { - x = FixedMul(x,dupx<>= FRACBITS; - y >>= FRACBITS; - - // Center it if necessary - // adjustxy - - desttop += (y*vid.width) + x; - } - - for (col = sx<>FRACBITS) < patch->width && ((col>>FRACBITS) - sx) < w; col += colfrac, ++x, desttop++) - { - INT32 topdelta, prevdelta = -1; - if (x < 0) // don't draw off the left of the screen (WRAP PREVENTION) - continue; - if (x >= vid.width) // don't draw off the right of the screen (WRAP PREVENTION) - break; - column = (const column_t *)((const UINT8 *)(patch->columns) + (patch->columnofs[col>>FRACBITS])); - - while (column->topdelta != 0xff) - { - topdelta = column->topdelta; - if (topdelta <= prevdelta) - topdelta += prevdelta; - prevdelta = topdelta; - source = (const UINT8 *)(column) + 3; - dest = desttop; - if (topdelta-sy > 0) - { - dest += FixedInt(FixedMul((topdelta-sy)<>FRACBITS) < column->length && (((ofs>>FRACBITS) - sy) + topdelta) < h; ofs += rowfrac) - { - if (dest >= screens[scrn&V_SCREENMASK]) // don't draw off the top of the screen (CRASH PREVENTION) - *dest = patchdrawfunc(dest, source, ofs); - dest += vid.width; - } - column = (const column_t *)((const UINT8 *)column + column->length + 4); - } - } + cliprect = oldClip; } // @@ -927,7 +1076,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) h *= dupy; // Center it if necessary - K_AdjustXYWithSnap(&x, &y, c, dupx, dupy); + V_AdjustXYWithSnap(&x, &y, c, dupx, dupy); } if (x >= vid.width || y >= vid.height) @@ -1039,7 +1188,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) h *= dupy; // Center it if necessary - K_AdjustXYWithSnap(&x, &y, c, dupx, dupy); + V_AdjustXYWithSnap(&x, &y, c, dupx, dupy); } if (x >= vid.width || y >= vid.height) @@ -1126,7 +1275,7 @@ void V_DrawDiag(INT32 x, INT32 y, INT32 wh, INT32 c) wh *= dupx; // Center it if necessary - K_AdjustXYWithSnap(&x, &y, c, dupx, dupy); + V_AdjustXYWithSnap(&x, &y, c, dupx, dupy); } if (x >= vid.width || y >= vid.height) diff --git a/src/v_video.h b/src/v_video.h index 8009035ea..666abcc68 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -168,6 +168,19 @@ void V_CubeApply(RGBA_t *input); #define V_NOSCALESTART 0x40000000 // don't scale x, y, start coords #define V_SPLITSCREEN 0x80000000 // Add half of screen width or height automatically depending on player number +void V_AdjustXYWithSnap(INT32 *x, INT32 *y, UINT32 options, INT32 dupx, INT32 dupy); + +struct cliprect_t +{ + fixed_t l, r, t, b; + INT32 flags; + boolean enabled; +}; + +cliprect_t *V_GetClipRect(void); +void V_SetClipRect(fixed_t x, fixed_t y, fixed_t w, fixed_t h, INT32 flags); +void V_ClearClipRect(void); + // defines for old functions #define V_DrawPatch(x,y,s,p) V_DrawFixedPatch((x)< Date: Sun, 11 Dec 2022 14:02:48 -0500 Subject: [PATCH 53/66] Comment out test case --- src/k_hud.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_hud.c b/src/k_hud.c index 543a7a9e7..9822f1706 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -1190,7 +1190,7 @@ static void K_drawKartItem(void) V_DrawScaledPatch(fx, fy, V_HUDTRANS|V_SLIDEIN|fflags, localbg); - V_SetClipRect((fx + 10) << FRACBITS, (fy + 10) << FRACBITS, 30 << FRACBITS, 30 << FRACBITS, V_HUDTRANS|V_SLIDEIN|fflags); + //V_SetClipRect((fx + 10) << FRACBITS, (fy + 10) << FRACBITS, 30 << FRACBITS, 30 << FRACBITS, V_HUDTRANS|V_SLIDEIN|fflags); // Then, the numbers: if (stplyr->itemamount >= numberdisplaymin && !stplyr->itemroulette) @@ -1211,7 +1211,7 @@ static void K_drawKartItem(void) else V_DrawFixedPatch(fx< Date: Sun, 11 Dec 2022 14:14:12 -0500 Subject: [PATCH 54/66] Clear clipping rectangle before each hook call Prevents Lua from being able to make a mess. --- src/d_main.c | 3 +++ src/lua_hooklib.c | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/d_main.c b/src/d_main.c index e3230d81e..fe5046585 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -373,6 +373,9 @@ static void D_Display(void) if (dedicated) //bail out after wipe logic return; + // Catch runaway clipping rectangles. + V_ClearClipRect(); + // do buffered drawing switch (gamestate) { diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index b797f669c..142d01490 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -27,6 +27,8 @@ #include "d_netcmd.h" // for cv_perfstats #include "i_system.h" // I_GetPreciseTime +#include "v_video.h" // V_ClearClipRect + /* ========================================================================= ABSTRACTION ========================================================================= */ @@ -641,8 +643,13 @@ void LUA_HookHUD(huddrawlist_h list, int hook_type) LUA_SetHudHook(hook_type, list); hud_running = true; // local hook + + // Catch runaway clipping rectangles. + V_ClearClipRect(); + init_hook_call(&hook, 0, res_none); call_mapped(&hook, map); + hud_running = false; } } From 8cdfcea3192f3c3f3871d6013ed9cebbda601e83 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 11 Dec 2022 16:47:25 -0500 Subject: [PATCH 55/66] Prevent modifying cliprect, wordier vars --- src/v_video.c | 28 ++++++++++++++-------------- src/v_video.h | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/v_video.c b/src/v_video.c index a3feb21d0..66be9bf30 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -630,7 +630,7 @@ void V_AdjustXYWithSnap(INT32 *x, INT32 *y, UINT32 options, INT32 dupx, INT32 du static cliprect_t cliprect; -cliprect_t *V_GetClipRect(void) +const cliprect_t *V_GetClipRect(void) { if (cliprect.enabled == false) { @@ -705,10 +705,10 @@ void V_SetClipRect(fixed_t x, fixed_t y, fixed_t w, fixed_t h, INT32 flags) h = 0; } - cliprect.l = x; - cliprect.t = y; - cliprect.r = x + w; - cliprect.b = y + h; + cliprect.left = x; + cliprect.top = y; + cliprect.right = x + w; + cliprect.bottom = y + h; cliprect.flags = flags; cliprect.enabled = true; @@ -760,7 +760,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca fixed_t pwidth; // patch width fixed_t offx = 0; // x offset - cliprect_t *const clip = V_GetClipRect(); + const cliprect_t *clip = V_GetClipRect(); if (rendermode == render_none) return; @@ -895,16 +895,16 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca if (scrn & V_FLIP) // offx is measured from right edge instead of left { - if (x+pwidth-offx < (clip ? clip->l : 0)) // don't draw off the left of the screen (WRAP PREVENTION) + if (x+pwidth-offx < (clip ? clip->left : 0)) // don't draw off the left of the screen (WRAP PREVENTION) break; - if (x+pwidth-offx >= (clip ? clip->r : vid.width)) // don't draw off the right of the screen (WRAP PREVENTION) + if (x+pwidth-offx >= (clip ? clip->right : vid.width)) // don't draw off the right of the screen (WRAP PREVENTION) continue; } else { - if (x+offx < (clip ? clip->l : 0)) // don't draw off the left of the screen (WRAP PREVENTION) + if (x+offx < (clip ? clip->left : 0)) // don't draw off the left of the screen (WRAP PREVENTION) continue; - if (x+offx >= (clip ? clip->r : vid.width)) // don't draw off the right of the screen (WRAP PREVENTION) + if (x+offx >= (clip ? clip->right : vid.width)) // don't draw off the right of the screen (WRAP PREVENTION) break; } @@ -934,13 +934,13 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca { const INT32 cy = y + topdelta - offy; - if (cy < clip->t) // don't draw off the top of the clip rect + if (cy < clip->top) // don't draw off the top of the clip rect { dest += vid.width; continue; } - if (cy > clip->b) // don't draw off the bottom of the clip rect + if (cy > clip->bottom) // don't draw off the bottom of the clip rect { dest += vid.width; continue; @@ -961,13 +961,13 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca { const INT32 cy = y + topdelta + offy; - if (cy < clip->t) // don't draw off the top of the clip rect + if (cy < clip->top) // don't draw off the top of the clip rect { dest += vid.width; continue; } - if (cy > clip->b) // don't draw off the bottom of the clip rect + if (cy > clip->bottom) // don't draw off the bottom of the clip rect { dest += vid.width; continue; diff --git a/src/v_video.h b/src/v_video.h index 666abcc68..ddf5bb89e 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -172,12 +172,12 @@ void V_AdjustXYWithSnap(INT32 *x, INT32 *y, UINT32 options, INT32 dupx, INT32 du struct cliprect_t { - fixed_t l, r, t, b; + fixed_t left, right, top, bottom; INT32 flags; boolean enabled; }; -cliprect_t *V_GetClipRect(void); +const cliprect_t *V_GetClipRect(void); void V_SetClipRect(fixed_t x, fixed_t y, fixed_t w, fixed_t h, INT32 flags); void V_ClearClipRect(void); From 09c55858b759a6f5518b305e2bb1a821bf268ea1 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 11 Dec 2022 17:43:11 -0800 Subject: [PATCH 56/66] Fix off-by-one when clipping rectangle bottom --- src/v_video.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v_video.c b/src/v_video.c index 66be9bf30..d65b34cea 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -940,7 +940,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca continue; } - if (cy > clip->bottom) // don't draw off the bottom of the clip rect + if (cy >= clip->bottom) // don't draw off the bottom of the clip rect { dest += vid.width; continue; @@ -967,7 +967,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca continue; } - if (cy > clip->bottom) // don't draw off the bottom of the clip rect + if (cy >= clip->bottom) // don't draw off the bottom of the clip rect { dest += vid.width; continue; From db062fd0bbbcc0a589d8c84fc7f69f35ca9ad391 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 11 Dec 2022 17:44:49 -0800 Subject: [PATCH 57/66] OpenGL: clipping support for HWR_DrawStretchyFixedPatch --- src/hardware/hw_draw.c | 56 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/src/hardware/hw_draw.c b/src/hardware/hw_draw.c index 56890382f..d8eac4a44 100644 --- a/src/hardware/hw_draw.c +++ b/src/hardware/hw_draw.c @@ -145,6 +145,11 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p // 0--1 float dupx, dupy, fscalew, fscaleh, fwidth, fheight; + const cliprect_t *clip = V_GetClipRect(); + + float s_min, s_max; + float t_min, t_max; + // make patch ready in hardware cache if (!colormap) HWR_GetPatch(gpatch); @@ -224,6 +229,41 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p fheight = (float)(gpatch->height) * dupy; } + s_min = t_min = 0.0f; + s_max = hwrPatch->max_s; + t_max = hwrPatch->max_t; + + if (clip) + { + if (cx < clip->left) + { + s_min = ((clip->left - cx) / fwidth) * s_max; + cx = clip->left; + } + + if (cy < clip->top) + { + t_min = ((clip->top - cy) / fheight) * t_max; + cy = clip->top; + } + + if ((cx + fwidth) > clip->right) + { + const float n = (clip->right - clip->left); + + s_max = (s_min + ((n / fwidth) * s_max)); + fwidth = n; + } + + if ((cy + fheight) > clip->bottom) + { + const float n = (clip->bottom - clip->top); + + t_max = (t_min + ((n / fheight) * t_max)); + fheight = n; + } + } + // positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1 cx = -1 + (cx / (vid.width/2)); cy = 1 - (cy / (vid.height/2)); @@ -243,24 +283,24 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p if (option & V_FLIP) { - v[0].s = v[3].s = hwrPatch->max_s; - v[2].s = v[1].s = 0.0f; + v[0].s = v[3].s = s_max; + v[2].s = v[1].s = s_min; } else { - v[0].s = v[3].s = 0.0f; - v[2].s = v[1].s = hwrPatch->max_s; + v[0].s = v[3].s = s_min; + v[2].s = v[1].s = s_max; } if (option & V_VFLIP) { - v[0].t = v[1].t = hwrPatch->max_t; - v[2].t = v[3].t = 0.0f; + v[0].t = v[1].t = t_max; + v[2].t = v[3].t = t_min; } else { - v[0].t = v[1].t = 0.0f; - v[2].t = v[3].t = hwrPatch->max_t; + v[0].t = v[1].t = t_min; + v[2].t = v[3].t = t_max; } flags = PF_NoDepthTest; From 0d49cc176818237f879f7e9e4ad0d1ebb5358833 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Wed, 9 Nov 2022 02:30:35 +0000 Subject: [PATCH 58/66] Cherry-pick internal zlib MR from SRB2/next cmake: build zlib manually in internal build See merge request STJr/SRB2!1856 (cherry picked from commit 3597957af13878854c02305a0aec5ca744209ef2) # Conflicts: # thirdparty/CMakeLists.txt --- thirdparty/CMakeLists.txt | 70 +++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 41c26c4e0..a6b77fd25 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -57,30 +57,52 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") VERSION 1.2.13 URL "https://github.com/madler/zlib/archive/refs/tags/v1.2.13.zip" EXCLUDE_FROM_ALL - OPTIONS - # The assembly optimizations are unmaintained and slated to be removed - "ASM686 Off" - "AMD64 Off" - "SKIP_INSTALL_ALL ON" + DOWNLOAD_ONLY YES ) - file(MAKE_DIRECTORY "${zlib_BINARY_DIR}/include") - file(COPY "${zlib_SOURCE_DIR}/zlib.h" DESTINATION "${zlib_BINARY_DIR}/include") - file(COPY "${zlib_BINARY_DIR}/zconf.h" DESTINATION "${zlib_BINARY_DIR}/include") - # honestly this should probably be built like png is - set_target_properties(zlib PROPERTIES EXCLUDE_FROM_ALL ON) - set_target_properties(minigzip PROPERTIES EXCLUDE_FROM_ALL ON) - set_target_properties(example PROPERTIES EXCLUDE_FROM_ALL ON) - # zlib cmake also adds these 64 targets separately - if(HAVE_OFF64_T) - set_target_properties(minigzip64 PROPERTIES EXCLUDE_FROM_ALL ON) - set_target_properties(example64 PROPERTIES EXCLUDE_FROM_ALL ON) - endif() - target_include_directories(zlib INTERFACE "${zlib_BINARY_DIR}/include") - target_include_directories(zlibstatic INTERFACE "${zlib_BINARY_DIR}/include") - if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES) - add_library(ZLIB::ZLIB ALIAS zlib) - else() - add_library(ZLIB::ZLIB ALIAS zlibstatic) + if(ZLIB_ADDED) + set(ZLIB_SRCS + crc32.h + deflate.h + gzguts.h + inffast.h + inffixed.h + inflate.h + inftrees.h + trees.h + zutil.h + + adler32.c + compress.c + crc32.c + deflate.c + gzclose.c + gzlib.c + gzread.c + gzwrite.c + inflate.c + infback.c + inftrees.c + inffast.c + trees.c + uncompr.c + zutil.c + ) + list(TRANSFORM ZLIB_SRCS PREPEND "${ZLIB_SOURCE_DIR}/") + + configure_file("${ZLIB_SOURCE_DIR}/zlib.pc.cmakein" "${ZLIB_BINARY_DIR}/zlib.pc" @ONLY) + configure_file("${ZLIB_SOURCE_DIR}/zconf.h.cmakein" "${ZLIB_BINARY_DIR}/include/zconf.h" @ONLY) + + add_library(ZLIB ${SRB2_INTERNAL_LIBRARY_TYPE} ${ZLIB_SRCS}) + set_target_properties(ZLIB PROPERTIES + VERSION 1.2.13 + OUTPUT_NAME "z" + ) + target_include_directories(ZLIB PRIVATE "${ZLIB_SOURCE_DIR}") + target_include_directories(ZLIB PUBLIC "${ZLIB_BINARY_DIR}/include") + if(MSVC) + target_compile_definitions(ZLIB PRIVATE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) + endif() + add_library(ZLIB::ZLIB ALIAS ZLIB) endif() endif() @@ -474,7 +496,7 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") target_compile_options(openmpt PRIVATE "-g0") endif() if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) - target_link_libraries(openmpt PRIVATE rpcrt4) + target_link_libraries(openmpt PRIVATE Rpcrt4) endif() target_compile_features(openmpt PRIVATE cxx_std_11) target_compile_definitions(openmpt PRIVATE -DLIBOPENMPT_BUILD) From 1f9b97a0a89f47ac68bf3f32f4b1f4dbd099cde1 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 10 Dec 2022 01:46:42 -0600 Subject: [PATCH 59/66] cmake: Use MAME YM2612 emu in GME (cherry picked from commit fb0f0c5e6c161b4b88439cda84c8b6cae9d236cc) --- thirdparty/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index a6b77fd25..0f8ddd2aa 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -521,6 +521,7 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") OPTIONS "BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}" "ENABLE_UBSAN OFF" + "GME_YM2612_EMU MAME" ) target_compile_features(gme PRIVATE cxx_std_11) target_link_libraries(gme PRIVATE ZLIB::ZLIB) From b9f277df66cb99c59cf6aa48a9dd76045876b63b Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 10 Dec 2022 01:53:23 -0600 Subject: [PATCH 60/66] cmake: Fix png and openmpt builds in clean envs In environments without zlib installed, png would fail to build since it can't find zlib.h. The zlib build's generated public include dir needs zlib.h to work. openmpt fails to build because it can't find Rpcrt4, which is not a necessary link under mingw, but exists in some mingw-w64 toolchains. It is only needed for MSVC. (cherry picked from commit fcf69001ada08077f82d3fc8510dcd24b4433e64) --- thirdparty/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 0f8ddd2aa..8e9793ee7 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -91,6 +91,7 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") configure_file("${ZLIB_SOURCE_DIR}/zlib.pc.cmakein" "${ZLIB_BINARY_DIR}/zlib.pc" @ONLY) configure_file("${ZLIB_SOURCE_DIR}/zconf.h.cmakein" "${ZLIB_BINARY_DIR}/include/zconf.h" @ONLY) + configure_file("${ZLIB_SOURCE_DIR}/zlib.h" "${ZLIB_BINARY_DIR}/include/zlib.h" @ONLY) add_library(ZLIB ${SRB2_INTERNAL_LIBRARY_TYPE} ${ZLIB_SRCS}) set_target_properties(ZLIB PROPERTIES @@ -173,8 +174,8 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") target_include_directories(png PUBLIC "${png_BINARY_DIR}/include") # ... and these also need to be present only for png build - target_include_directories(png PRIVATE "${zlib_SOURCE_DIR}") - target_include_directories(png PRIVATE "${zlib_BINARY_DIR}") + target_include_directories(png PRIVATE "${ZLIB_SOURCE_DIR}") + target_include_directories(png PRIVATE "${ZLIB_BINARY_DIR}") target_include_directories(png PRIVATE "${png_BINARY_DIR}") target_link_libraries(png PRIVATE ZLIB::ZLIB) @@ -495,7 +496,7 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}") if("${CMAKE_C_COMPILER_ID}" STREQUAL GNU OR "${CMAKE_C_COMPILER_ID}" STREQUAL Clang OR "${CMAKE_C_COMPILER_ID}" STREQUAL AppleClang) target_compile_options(openmpt PRIVATE "-g0") endif() - if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows) + if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows AND "${CMAKE_C_COMPILER_ID}" STREQUAL MSVC) target_link_libraries(openmpt PRIVATE Rpcrt4) endif() target_compile_features(openmpt PRIVATE cxx_std_11) From 34dec00539d9823afcab4272b7f850fd5ac66296 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 12 Dec 2022 20:56:34 -0800 Subject: [PATCH 61/66] Add K_SpawnBrolyKi, green circle shrinks during explosion hitlag --- src/deh_tables.c | 5 +++++ src/info.c | 5 +++++ src/info.h | 6 ++++++ src/k_collide.c | 23 +++++++++++++++++++++-- src/k_collide.h | 2 +- src/k_kart.c | 42 +++++++++++++++++++++++++++++++++++++++--- src/k_kart.h | 3 ++- src/lua_baselib.c | 3 ++- src/p_enemy.c | 26 ++++++++++++++++++++++---- src/p_mobj.c | 4 ++++ 10 files changed, 107 insertions(+), 12 deletions(-) diff --git a/src/deh_tables.c b/src/deh_tables.c index ab0ef138b..5f026fe39 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -313,6 +313,7 @@ actionpointer_t actionpointers[] = {{A_JawzExplode}, "A_JAWZEXPLODE"}, {{A_SSMineSearch}, "A_SSMINESEARCH"}, {{A_SSMineExplode}, "A_SSMINEEXPLODE"}, + {{A_SSMineFlash}, "A_SSMINEFLASH"}, {{A_LandMineExplode}, "A_LANDMINEEXPLODE"}, {{A_BallhogExplode}, "A_BALLHOGEXPLODE"}, {{A_LightningFollowPlayer}, "A_LIGHTNINGFOLLOWPLAYER"}, @@ -4529,6 +4530,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_JANKSPARK2", "S_JANKSPARK3", "S_JANKSPARK4", + + // Broly Ki Orb + "S_BROLY1", + "S_BROLY2", }; // RegEx to generate this from info.h: ^\tMT_([^,]+), --> \t"MT_\1", diff --git a/src/info.c b/src/info.c index 3c6612ac4..345069d54 100644 --- a/src/info.c +++ b/src/info.c @@ -495,6 +495,7 @@ char sprnames[NUMSPRITES + 1][5] = "BOM3", // Boss Explosion 2 "BOM4", // Underwater Explosion "BMNB", // Mine Explosion + "LSSJ", // My ki is overflowing!! // Crumbly rocks "ROIA", @@ -5141,6 +5142,10 @@ state_t states[NUMSTATES] = {SPR_JANK, FF_PAPERSPRITE|FF_FULLBRIGHT|FF_ANIMATE, 4, {NULL}, 3, 1, S_JANKSPARK3}, // S_JANKSPARK2 {SPR_JANK, 0, 0, {A_SetCustomValue}, -1, 5, S_JANKSPARK4}, // S_JANKSPARK3 {SPR_JANK, 0, 0, {A_ChangeAngleRelative}, 180, 180, S_JANKSPARK2}, // S_JANKSPARK4 + + // Broly Ki Orb + {SPR_LSSJ, FF_REVERSESUBTRACT|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BROLY2}, // S_BROLY1 + {SPR_NULL, 0, 1, {A_SSMineFlash}, 0, 0, S_NULL}, // S_BROLY2 }; mobjinfo_t mobjinfo[NUMMOBJTYPES] = diff --git a/src/info.h b/src/info.h index 35a050011..e4c96915c 100644 --- a/src/info.h +++ b/src/info.h @@ -549,6 +549,7 @@ void A_ItemPop(); void A_JawzExplode(); void A_SSMineSearch(); void A_SSMineExplode(); +void A_SSMineFlash(); void A_LandMineExplode(); void A_LandMineExplode(); void A_BallhogExplode(); @@ -1041,6 +1042,7 @@ typedef enum sprite SPR_BOM3, // Boss Explosion 2 SPR_BOM4, // Underwater Explosion SPR_BMNB, // Mine Explosion + SPR_LSSJ, // My ki is overflowing!! // Crumbly rocks SPR_ROIA, @@ -5563,6 +5565,10 @@ typedef enum state S_JANKSPARK3, S_JANKSPARK4, + // Broly Ki Orb + S_BROLY1, + S_BROLY2, + S_FIRSTFREESLOT, S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1, NUMSTATES diff --git a/src/k_collide.c b/src/k_collide.c index dac44b5f7..64f460a61 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -206,6 +206,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) static mobj_t *grenade; static fixed_t explodedist; static boolean explodespin; +static tic_t minehitlag; static inline boolean PIT_SSMineChecks(mobj_t *thing) { @@ -284,17 +285,22 @@ static inline BlockItReturn_t PIT_SSMineExplode(mobj_t *thing) if (PIT_SSMineChecks(thing) == true) return BMIT_CONTINUE; - P_DamageMobj(thing, grenade, grenade->target, 1, (explodespin ? DMG_NORMAL : DMG_EXPLODE)); + if (P_DamageMobj(thing, grenade, grenade->target, 1, (explodespin ? DMG_NORMAL : DMG_EXPLODE))) + { + minehitlag = thing->hitlag; + } + return BMIT_CONTINUE; } -void K_MineExplodeAttack(mobj_t *actor, fixed_t size, boolean spin) +tic_t K_MineExplodeAttack(mobj_t *actor, fixed_t size, boolean spin) { INT32 bx, by, xl, xh, yl, yh; explodespin = spin; explodedist = FixedMul(size, actor->scale); grenade = actor; + minehitlag = 0; // Use blockmap to check for nearby shootables yh = (unsigned)(actor->y + explodedist - bmaporgy)>>MAPBLOCKSHIFT; @@ -310,6 +316,15 @@ void K_MineExplodeAttack(mobj_t *actor, fixed_t size, boolean spin) // Set this flag to ensure that the inital action won't be triggered twice. actor->flags2 |= MF2_DEBRIS; + + if (!spin) + { + K_SpawnBrolyKi(actor, minehitlag); + + return minehitlag; + } + + return 0; } boolean K_MineCollide(mobj_t *t1, mobj_t *t2) @@ -396,6 +411,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2) P_DamageMobj(t2, t1, t1->target, 1, DMG_TUMBLE); } + t1->reactiontime = t2->hitlag; P_KillMobj(t1, t2, t2, DMG_NORMAL); } else if (t2->type == MT_BANANA || t2->type == MT_BANANA_SHIELD @@ -419,6 +435,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2) P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH); + t1->reactiontime = t2->hitlag; P_KillMobj(t1, t2, t2, DMG_NORMAL); } else if (t2->type == MT_SSMINE_SHIELD || t2->type == MT_SSMINE || t2->type == MT_LANDMINE) @@ -431,6 +448,8 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2) { // Shootable damage P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL); + + t1->reactiontime = t2->hitlag; P_KillMobj(t1, t2, t2, DMG_NORMAL); } diff --git a/src/k_collide.h b/src/k_collide.h index a498241ca..e8700a097 100644 --- a/src/k_collide.h +++ b/src/k_collide.h @@ -10,7 +10,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2); boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2); void K_DoMineSearch(mobj_t *actor, fixed_t size); -void K_MineExplodeAttack(mobj_t *actor, fixed_t size, boolean spin); +tic_t K_MineExplodeAttack(mobj_t *actor, fixed_t size, boolean spin); boolean K_MineCollide(mobj_t *t1, mobj_t *t2); boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2); diff --git a/src/k_kart.c b/src/k_kart.c index d3fd17661..05decab06 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5122,7 +5122,7 @@ void K_MineFlashScreen(mobj_t *source) } // Spawns the purely visual explosion -void K_SpawnMineExplosion(mobj_t *source, UINT8 color) +void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay) { INT32 i, radius, height; mobj_t *smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING); @@ -5130,10 +5130,9 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) mobj_t *truc; INT32 speed, speed2; - K_MineFlashScreen(source); - K_MatchGenericExtraFlags(smoldering, source); smoldering->tics = TICRATE*3; + smoldering->hitlag += delay; radius = source->radius>>FRACBITS; height = source->height>>FRACBITS; @@ -5151,6 +5150,8 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) dust->destscale = source->scale*10; dust->scalespeed = source->scale/12; P_InstaThrust(dust, dust->angle, FixedMul(20*FRACUNIT, source->scale)); + dust->hitlag += delay; + dust->renderflags |= RF_DONTDRAW; truc = P_SpawnMobj(source->x + P_RandomRange(PR_EXPLOSION, -radius, radius)*FRACUNIT, source->y + P_RandomRange(PR_EXPLOSION, -radius, radius)*FRACUNIT, @@ -5167,6 +5168,8 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) if (truc->eflags & MFE_UNDERWATER) truc->momz = (117 * truc->momz) / 200; truc->color = color; + truc->hitlag += delay; + truc->renderflags |= RF_DONTDRAW; } for (i = 0; i < 16; i++) @@ -5180,6 +5183,8 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) dust->scalespeed = source->scale/12; dust->tics = 30; dust->momz = P_RandomRange(PR_EXPLOSION, FixedMul(3*FRACUNIT, source->scale)>>FRACBITS, FixedMul(7*FRACUNIT, source->scale)>>FRACBITS)*FRACUNIT; + dust->hitlag += delay; + dust->renderflags |= RF_DONTDRAW; truc = P_SpawnMobj(source->x + P_RandomRange(PR_EXPLOSION, -radius, radius)*FRACUNIT, source->y + P_RandomRange(PR_EXPLOSION, -radius, radius)*FRACUNIT, @@ -5200,9 +5205,40 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) truc->momz = (117 * truc->momz) / 200; truc->tics = TICRATE*2; truc->color = color; + truc->hitlag += delay; + truc->renderflags |= RF_DONTDRAW; } } +void K_SpawnBrolyKi(mobj_t *source, tic_t duration) +{ + mobj_t *x; + + if (duration == 0) + { + return; + } + + x = P_SpawnMobjFromMobj(source, 0, 0, 0, MT_THOK); + + // Shrink into center of source object. + x->z = (source->z + source->height / 2); + x->height = 0; + + P_SetMobjState(x, S_BROLY1); + x->hitlag = 0; // do not copy source hitlag + + P_SetScale(x, 64 * mapobjectscale); + x->scalespeed = x->scale / duration; + + // The last tic doesn't actually get rendered so in order + // to show scale = destscale, add one buffer tic. + x->tics = (duration + 1); + x->destscale = 1; // 0 also doesn't work + + K_ReduceVFX(x, NULL); +} + #undef MINEQUAKEDIST fixed_t K_ItemScaleForPlayer(player_t *player) diff --git a/src/k_kart.h b/src/k_kart.h index cddf3d503..87f3e1998 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -106,7 +106,8 @@ void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers); void K_DestroyBumpers(player_t *player, UINT8 amount); void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount); void K_MineFlashScreen(mobj_t *source); -void K_SpawnMineExplosion(mobj_t *source, UINT8 color); +void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay); +void K_SpawnBrolyKi(mobj_t *source, tic_t duration); void K_RunFinishLineBeam(void); UINT16 K_DriftSparkColor(player_t *player, INT32 charge); void K_SpawnBoostTrail(player_t *player); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 06fbb789c..8c88c5155 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -3601,10 +3601,11 @@ static int lib_kSpawnMineExplosion(lua_State *L) { mobj_t *source = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); UINT8 color = (UINT8)luaL_optinteger(L, 2, SKINCOLOR_KETCHUP); + tic_t delay = (tic_t)luaL_optinteger(L, 3, 0); NOHUD if (!source) return LUA_ErrInvalid(L, "mobj_t"); - K_SpawnMineExplosion(source, color); + K_SpawnMineExplosion(source, color, delay); return 0; } diff --git a/src/p_enemy.c b/src/p_enemy.c index 131e92bf7..afe17b5bc 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -315,6 +315,7 @@ void A_ItemPop(mobj_t *actor); void A_JawzExplode(mobj_t *actor); void A_SSMineSearch(mobj_t *actor); void A_SSMineExplode(mobj_t *actor); +void A_SSMineFlash(mobj_t *actor); void A_LandMineExplode(mobj_t *actor); void A_BallhogExplode(mobj_t *actor); void A_LightningFollowPlayer(mobj_t *actor); @@ -13117,14 +13118,21 @@ void A_SSMineExplode(mobj_t *actor) { INT32 locvar1 = var1; + tic_t delay; + if (LUA_CallAction(A_SSMINEEXPLODE, actor)) return; if (actor->flags2 & MF2_DEBRIS) return; - K_SpawnMineExplosion(actor, (actor->target && actor->target->player) ? actor->target->player->skincolor : SKINCOLOR_KETCHUP); - K_MineExplodeAttack(actor, (3*actor->info->painchance)>>1, (boolean)locvar1); + delay = K_MineExplodeAttack(actor, (3*actor->info->painchance)>>1, (boolean)locvar1); + K_SpawnMineExplosion(actor, (actor->target && actor->target->player) ? actor->target->player->skincolor : SKINCOLOR_KETCHUP, delay); +} + +void A_SSMineFlash(mobj_t *actor) +{ + K_MineFlashScreen(actor); } void A_LandMineExplode(mobj_t *actor) @@ -13135,21 +13143,27 @@ void A_LandMineExplode(mobj_t *actor) INT32 i; mobj_t *smoldering; + tic_t delay = actor->reactiontime; + if (LUA_CallAction(A_LANDMINEEXPLODE, actor)) return; + if (delay == 0) + { + delay = 8; + } + // we'll base the explosion "timer" off of some stupid variable like uh... cvmem! // Yeah let's use cvmem since nobody uses that if (actor->target && !P_MobjWasRemoved(actor->target)) colour = actor->target->color; - K_MineFlashScreen(actor); - // Spawn smoke remains: smoldering = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SMOLDERING); P_SetScale(smoldering, actor->scale); smoldering->tics = TICRATE*3; + smoldering->hitlag = delay; actor->fuse = actor->tics; // disappear when this state ends. @@ -13159,6 +13173,8 @@ void A_LandMineExplode(mobj_t *actor) expl = P_SpawnMobj(actor->x, actor->y, actor->z + actor->scale, MT_BOOMEXPLODE); expl->color = colour; expl->tics = (i+1); + expl->hitlag = delay; + expl->renderflags |= RF_DONTDRAW; //K_MatchGenericExtraFlags(expl, actor); P_SetScale(expl, actor->scale*4); @@ -13169,6 +13185,8 @@ void A_LandMineExplode(mobj_t *actor) // 100/45 = 2.22 fu/t expl->momz = ((i+1)*actor->scale*5/2)*P_MobjFlip(expl); } + + K_SpawnBrolyKi(actor, delay); } void A_BallhogExplode(mobj_t *actor) diff --git a/src/p_mobj.c b/src/p_mobj.c index 340e40e52..ce526659d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5889,6 +5889,10 @@ static void P_MobjSceneryThink(mobj_t *mobj) smoke->momz = P_RandomRange(PR_SMOLDERING, 4, 9)*mobj->scale*P_MobjFlip(smoke); } break; + case MT_SMOKE: + case MT_BOOMEXPLODE: + mobj->renderflags &= ~(RF_DONTDRAW); + break; case MT_BOOMPARTICLE: { fixed_t x = P_RandomRange(PR_EXPLOSION, -16, 16)*mobj->scale; From 2ec29b258652d5a8d04ce7283a66e86e500cd825 Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 14 Dec 2022 01:33:31 -0800 Subject: [PATCH 62/66] Adjust mine and explosion to center Broly ki --- src/info.c | 2 +- src/k_kart.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 345069d54..4c45490e5 100644 --- a/src/info.c +++ b/src/info.c @@ -23347,7 +23347,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // deathsound 0, // speed 16*FRACUNIT, // radius - 24*FRACUNIT, // height + 56*FRACUNIT, // height 0, // display offset 100, // mass 1, // damage diff --git a/src/k_kart.c b/src/k_kart.c index 05decab06..f618763c5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8640,6 +8640,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) //player->flashing = 0; eggsexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SPBEXPLOSION); + eggsexplode->height = 2 * player->mo->height; + if (player->eggmanblame >= 0 && player->eggmanblame < MAXPLAYERS && playeringame[player->eggmanblame] From 2d52e4a04784e44fa024495324529b2a5775f8d7 Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 14 Dec 2022 02:00:56 -0800 Subject: [PATCH 63/66] Colorize Broly ki to player color --- src/k_kart.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index f618763c5..d72cb30f1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5226,6 +5226,8 @@ void K_SpawnBrolyKi(mobj_t *source, tic_t duration) x->height = 0; P_SetMobjState(x, S_BROLY1); + x->colorized = true; + x->color = source->color; x->hitlag = 0; // do not copy source hitlag P_SetScale(x, 64 * mapobjectscale); @@ -8641,6 +8643,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) //player->flashing = 0; eggsexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SPBEXPLOSION); eggsexplode->height = 2 * player->mo->height; + eggsexplode->color = player->mo->color; if (player->eggmanblame >= 0 && player->eggmanblame < MAXPLAYERS From 9017ca1c2020a794cab5f31f0d8ebc0aa813b51d Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 14 Dec 2022 02:21:41 -0800 Subject: [PATCH 64/66] Delay mine explosion sound until after Broly ki --- src/info.c | 2 +- src/k_kart.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/info.c b/src/info.c index 4c45490e5..5a1cefa1f 100644 --- a/src/info.c +++ b/src/info.c @@ -5145,7 +5145,7 @@ state_t states[NUMSTATES] = // Broly Ki Orb {SPR_LSSJ, FF_REVERSESUBTRACT|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BROLY2}, // S_BROLY1 - {SPR_NULL, 0, 1, {A_SSMineFlash}, 0, 0, S_NULL}, // S_BROLY2 + {SPR_NULL, 0, 5*TICRATE, {A_SSMineFlash}, 0, 0, S_NULL}, // S_BROLY2 }; mobjinfo_t mobjinfo[NUMMOBJTYPES] = diff --git a/src/k_kart.c b/src/k_kart.c index d72cb30f1..0ed21875c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5100,6 +5100,8 @@ void K_MineFlashScreen(mobj_t *source) INT32 pnum; player_t *p; + S_StartSound(source, sfx_s3k4e); + // check for potential display players near the source so we can have a sick earthquake / flashpal. for (pnum = 0; pnum < MAXPLAYERS; pnum++) { @@ -5136,8 +5138,6 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay) radius = source->radius>>FRACBITS; height = source->height>>FRACBITS; - S_StartSound(smoldering, sfx_s3k4e); - if (!color) color = SKINCOLOR_KETCHUP; From 130953fc7e799e1d814046f71c8c6b3f6a6d4f31 Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 14 Dec 2022 02:37:30 -0800 Subject: [PATCH 65/66] Add sfx to Broly ki --- src/k_kart.c | 2 ++ src/sounds.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 0ed21875c..1c8213998 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5239,6 +5239,8 @@ void K_SpawnBrolyKi(mobj_t *source, tic_t duration) x->destscale = 1; // 0 also doesn't work K_ReduceVFX(x, NULL); + + S_StartSound(x, sfx_cdfm74); } #undef MINEQUAKEDIST diff --git a/src/sounds.c b/src/sounds.c index f50e94942..a82cd2e59 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -750,7 +750,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"cdfm71", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"cdfm72", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"cdfm73", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, - {"cdfm74", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, + {"cdfm74", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Broly ki {"cdfm75", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"cdfm76", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"cdfm77", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, From b97c8cd176ad75bbe8f732f350ce01164ce3b0dc Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 14 Dec 2022 19:31:32 -0800 Subject: [PATCH 66/66] Make explosions louder from a distance --- src/sounds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sounds.c b/src/sounds.c index a82cd2e59..016cf5029 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -479,7 +479,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Splash"}, {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy hit"}, {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing bullet"}, - {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Big explosion"}, // Kart explosion + {"s3k4e", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Big explosion"}, // Kart explosion {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flamethrower"}, {"s3k50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Siren"}, {"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling"},