From 8a54edf2047f58742ffd6d7f26f13d12f63bb60d Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 21 Dec 2023 21:39:30 -0800 Subject: [PATCH] Obj_TryCrateDamage: return bool --- src/k_objects.h | 2 +- src/objects/crate.cpp | 20 ++++++++++++-------- src/p_inter.c | 3 +-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/k_objects.h b/src/k_objects.h index 8e5d34014..f02b0f7b6 100644 --- a/src/k_objects.h +++ b/src/k_objects.h @@ -326,7 +326,7 @@ void Obj_BoxSideThink(mobj_t *mo); void Obj_TryCrateInit(mobj_t *mo); boolean Obj_TryCrateThink(mobj_t *mo); void Obj_TryCrateTouch(mobj_t *special, mobj_t *toucher); -void Obj_TryCrateDamage(mobj_t *target, mobj_t *inflictor); +boolean Obj_TryCrateDamage(mobj_t *target, mobj_t *inflictor); boolean Obj_SA2CrateIsMetal(mobj_t *mo); /* Lavender Shrine Spears */ diff --git a/src/objects/crate.cpp b/src/objects/crate.cpp index afd728fff..3f208b311 100644 --- a/src/objects/crate.cpp +++ b/src/objects/crate.cpp @@ -197,11 +197,11 @@ struct Box : AnyBox bool damage_valid(const Mobj* inflictor) const { return !fuse && Mobj::valid(inflictor); } - void damage(Mobj* inflictor) + bool damage(Mobj* inflictor) { if (!damage_valid(inflictor)) { - return; + return false; } inflictor->hitlag(3); @@ -230,6 +230,8 @@ struct Box : AnyBox debris(inflictor); update_nearby(); + + return true; } private: @@ -321,19 +323,19 @@ struct Crate : Box } } - void damage(Toucher* inflictor) + bool damage(Toucher* inflictor) { if (!Box::damage_valid(inflictor)) { - return; + return false; } if (metal() && !inflictor->boosting()) { - return; + return false; } - Box::damage(inflictor); + return Box::damage(inflictor); } }; @@ -385,9 +387,11 @@ void Obj_TryCrateTouch(mobj_t* special, mobj_t* toucher) static_cast(special)->visit([&](auto box) { box->touch(static_cast(toucher)); }); } -void Obj_TryCrateDamage(mobj_t* target, mobj_t* inflictor) +boolean Obj_TryCrateDamage(mobj_t* target, mobj_t* inflictor) { - static_cast(target)->visit([&](auto box) { box->damage(static_cast(inflictor)); }); + bool c = false; + static_cast(target)->visit([&](auto box) { c = box->damage(static_cast(inflictor)); }); + return c; } boolean Obj_SA2CrateIsMetal(mobj_t* mobj) diff --git a/src/p_inter.c b/src/p_inter.c index e25ec3a7e..b8645c76a 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2883,8 +2883,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da case MT_SA2_CRATE: case MT_ICECAPBLOCK: - Obj_TryCrateDamage(target, inflictor); - return true; + return Obj_TryCrateDamage(target, inflictor); default: break;