From e33574029c4938085a3551593228ccae9ba3afb8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 20 Jan 2025 22:41:31 +0000 Subject: [PATCH] Add: Variable to test how many vehicles in a chain contain a specific badge. --- src/newgrf_engine.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index fa02ecf4f2..b0f3da8223 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -693,6 +693,23 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec default: return 0x00; } + case 0x64: { // Count consist's badge ID occurrence + if (v->type != VEH_TRAIN) return GetBadgeVariableResult(*object->ro.grffile, v->GetEngine()->badges, parameter); + + /* Look up badge index. */ + if (parameter >= std::size(object->ro.grffile->badge_list)) return UINT_MAX; + BadgeID index = object->ro.grffile->badge_list[parameter]; + + /* Count number of vehicles that contain this badge index. */ + uint count = 0; + for (; v != nullptr; v = v->Next()) { + const auto &badges = v->GetEngine()->badges; + if (std::ranges::find(badges, index) != std::end(badges)) count++; + } + + return count; + } + case 0x7A: return GetBadgeVariableResult(*object->ro.grffile, v->GetEngine()->badges, parameter); case 0xFE: