diff --git a/src/SendCommands.cc b/src/SendCommands.cc index b41880be..b7281f29 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -802,6 +802,33 @@ static std::vectorenemy_hp_multiplier : 1.0; + const double atp_mult = [&]() -> double { + switch (tier) { + case 1: + return 1.01; + case 2: + return 1.02; + case 3: + return 1.03; + case 4: + return 1.04; + case 5: + return 1.05; + case 6: + return 1.06; + case 7: + return 1.07; + case 8: + return 1.08; + case 9: + return 1.09; + case 10: + case 11: + return 1.10; + default: + return 1.00; + } + }(); std::vector bp_filenames; auto l = c->lobby.lock(); @@ -834,7 +861,9 @@ static std::vector((v >> 24) & 0xFF)); }; - auto scale_u16 = [mult](uint32_t v) -> uint16_t { + auto scale_u16 = +[](uint32_t v, double scale) -> uint16_t { if (v == 0) { return 0; } - uint32_t scaled = static_cast((static_cast(v) * mult) + 0.5); + uint32_t scaled = static_cast((static_cast(v) * scale) + 0.5); if (scaled < 1) { scaled = 1; } @@ -889,7 +918,7 @@ static std::vectorsize < (ultimate_hp_base_offset + ((num_bp_rows - 1) * stats_row_size) + 2)) { - c->log.warning_f("Skipping Brutal Peeps HP client patch: {} too small for Ultimate HP table", bp_filename); + c->log.warning_f("Skipping Brutal Peeps HP/ATP client patch: {} too small for Ultimate stats table", bp_filename); continue; } @@ -902,10 +931,23 @@ static std::vector(vanilla_data[atp_offset]) | + (static_cast(static_cast(vanilla_data[atp_offset + 1])) << 8); + uint16_t new_atp = scale_u16(old_atp, atp_mult); + + append_u32l(suffix, atp_offset); + suffix.push_back(static_cast(new_atp & 0xFF)); + patch_entry_count++; + + append_u32l(suffix, atp_offset + 1); + suffix.push_back(static_cast((new_atp >> 8) & 0xFF)); + patch_entry_count++; + uint32_t hp_offset = ultimate_hp_base_offset + (z * stats_row_size); uint16_t old_hp = static_cast(vanilla_data[hp_offset]) | (static_cast(static_cast(vanilla_data[hp_offset + 1])) << 8); - uint16_t new_hp = scale_u16(old_hp); + uint16_t new_hp = scale_u16(old_hp, mult); append_u32l(suffix, hp_offset); suffix.push_back(static_cast(new_hp & 0xFF)); @@ -935,8 +977,8 @@ static std::vectorenabled_flags |= fn->client_flag; promises.emplace_back(bp_filename, promise); - c->log.info_f("Brutal Peeps HP client patch sent for {}: tier={} mult={:g} patch_entries={} scan={:08X}-{:08X}", - bp_filename, tier, mult, patch_entry_count, scan_start, scan_end); + c->log.info_f("Brutal Peeps HP/ATP client patch sent for {}: tier={} hp_mult={:g} atp_mult={:g} patch_entries={} scan={:08X}-{:08X}", + bp_filename, tier, mult, atp_mult, patch_entry_count, scan_start, scan_end); } return promises; @@ -957,7 +999,7 @@ asio::awaitable send_brutal_peeps_hp_patch_bb(std::shared_ptr c, i auto& promise = it.second; if (promise && c->channel->connected()) { auto result = co_await promise->get(); - c->log.info_f("Brutal Peeps HP client patch result for {}: tier={} return_value={:08X} checksum={:08X}", + c->log.info_f("Brutal Peeps HP/ATP client patch result for {}: tier={} return_value={:08X} checksum={:08X}", filename, tier, static_cast(result.return_value),