Select BB Brutal Peeps HP table by episode

This commit is contained in:
2026-06-06 23:24:39 -04:00
parent 6492dbf879
commit 98dd6b8913
+25 -7
View File
@@ -800,22 +800,40 @@ static std::shared_ptr<AsyncPromise<C_ExecuteCodeResult_B3>> send_brutal_peeps_h
} }
const double mult = brutal_peeps_def ? brutal_peeps_def->enemy_hp_multiplier : 1.0; const double mult = brutal_peeps_def ? brutal_peeps_def->enemy_hp_multiplier : 1.0;
const std::string bp_filename = [&]() -> std::string {
auto l = c->lobby.lock();
if (l && l->is_game()) {
switch (l->episode) {
case Episode::EP1:
return "BattleParamEntry_on.dat";
case Episode::EP2:
return "BattleParamEntry_lab_on.dat";
case Episode::EP4:
return "BattleParamEntry_ep4_on.dat";
default:
break;
}
}
return "BattleParamEntry_on.dat";
}();
const BBStreamFile::Entry* bp_entry = nullptr; const BBStreamFile::Entry* bp_entry = nullptr;
for (const auto& sf_entry : s->bb_stream_file->entries) { for (const auto& sf_entry : s->bb_stream_file->entries) {
if (sf_entry.filename == "BattleParamEntry_on.dat") { if (sf_entry.filename == bp_filename) {
bp_entry = &sf_entry; bp_entry = &sf_entry;
break; break;
} }
} }
if (!bp_entry) { if (!bp_entry) {
c->log.warning_f("Skipping Brutal Peeps HP client patch: BattleParamEntry_on.dat not found in BB stream file"); c->log.warning_f("Skipping Brutal Peeps HP client patch: {} not found in BB stream file", bp_filename);
return nullptr; return nullptr;
} }
if ((bp_entry->offset > s->bb_stream_file->data.size()) || if ((bp_entry->offset > s->bb_stream_file->data.size()) ||
(bp_entry->size > (s->bb_stream_file->data.size() - bp_entry->offset)) || (bp_entry->size > (s->bb_stream_file->data.size() - bp_entry->offset)) ||
(bp_entry->size < sizeof(BattleParamsIndex::Table))) { (bp_entry->size < sizeof(BattleParamsIndex::Table))) {
c->log.warning_f("Skipping Brutal Peeps HP client patch: invalid BattleParamEntry_on.dat range"); c->log.warning_f("Skipping Brutal Peeps HP client patch: invalid {} range", bp_filename);
return nullptr; return nullptr;
} }
@@ -832,11 +850,11 @@ static std::shared_ptr<AsyncPromise<C_ExecuteCodeResult_B3>> send_brutal_peeps_h
constexpr uint32_t num_bp_rows = 0x60; constexpr uint32_t num_bp_rows = 0x60;
if (bp_entry->size < signature_size) { if (bp_entry->size < signature_size) {
c->log.warning_f("Skipping Brutal Peeps HP client patch: BattleParamEntry_on.dat too small for signature"); c->log.warning_f("Skipping Brutal Peeps HP client patch: {} too small for signature", bp_filename);
return nullptr; return nullptr;
} }
if (bp_entry->size < (ultimate_hp_base_offset + ((num_bp_rows - 1) * stats_row_size) + 2)) { if (bp_entry->size < (ultimate_hp_base_offset + ((num_bp_rows - 1) * stats_row_size) + 2)) {
c->log.warning_f("Skipping Brutal Peeps HP client patch: BattleParamEntry_on.dat too small for Ultimate HP table"); c->log.warning_f("Skipping Brutal Peeps HP client patch: {} too small for Ultimate HP table", bp_filename);
return nullptr; return nullptr;
} }
@@ -904,8 +922,8 @@ static std::shared_ptr<AsyncPromise<C_ExecuteCodeResult_B3>> send_brutal_peeps_h
c->enabled_flags |= fn->client_flag; c->enabled_flags |= fn->client_flag;
c->log.info_f("Brutal Peeps HP client patch sent: tier={} mult={:g} patch_entries={} scan={:08X}-{:08X}", c->log.info_f("Brutal Peeps HP client patch sent for {}: tier={} mult={:g} patch_entries={} scan={:08X}-{:08X}",
tier, mult, patch_entry_count, scan_start, scan_end); bp_filename, tier, mult, patch_entry_count, scan_start, scan_end);
return promise; return promise;