From efe2515a4412739cabf017f86fb2aa1655fd2d0b Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Mon, 1 Jan 2024 12:08:32 -0800 Subject: [PATCH] make generated mag colors random --- src/ItemCreator.cc | 12 +++++++++++- src/ItemCreator.hh | 2 +- src/ItemData.hh | 29 +++++++++-------------------- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/ItemCreator.cc b/src/ItemCreator.cc index 63c5000a..17f17dff 100644 --- a/src/ItemCreator.cc +++ b/src/ItemCreator.cc @@ -701,10 +701,20 @@ uint8_t ItemCreator::generate_tech_disk_level(uint32_t tech_num, uint32_t area_n return range.min; } -void ItemCreator::generate_common_mag_variances(ItemData& item) const { +void ItemCreator::generate_common_mag_variances(ItemData& item) { if (item.data1[0] == 0x02) { item.data1[1] = 0x00; item.assign_mag_stats(ItemMagStats()); + + // The original code (on PSO GC) assigns the mag color as 0x0E. We assign + // a random color instead. + if (this->version == Version::DC_NTE) { + item.data2[3] = 0x00; + } else if (is_v1_or_v2(this->version)) { + item.data2[3] = this->random_crypt.next() % 0x0E; + } else { + item.data2[3] = this->random_crypt.next() % 0x12; + } } } diff --git a/src/ItemCreator.hh b/src/ItemCreator.hh index e1d6c1cf..5f2be0c6 100644 --- a/src/ItemCreator.hh +++ b/src/ItemCreator.hh @@ -121,7 +121,7 @@ private: void generate_common_armor_or_shield_type_and_variances(char area_norm, ItemData& item); void generate_common_tool_variances(uint32_t area_norm, ItemData& item); uint8_t generate_tech_disk_level(uint32_t tech_num, uint32_t area_norm); - void generate_common_mag_variances(ItemData& item) const; + void generate_common_mag_variances(ItemData& item); void generate_common_weapon_variances(uint8_t area_norm, ItemData& item); void generate_common_weapon_grind(ItemData& item, uint8_t offset_within_subtype_range); void generate_common_weapon_bonuses(ItemData& item, uint8_t area_norm); diff --git a/src/ItemData.hh b/src/ItemData.hh index 002466b5..ffe6c75e 100644 --- a/src/ItemData.hh +++ b/src/ItemData.hh @@ -29,26 +29,15 @@ enum class EquipSlot { }; struct ItemMagStats { - uint16_t iq; - uint16_t synchro; - uint16_t def; - uint16_t pow; - uint16_t dex; - uint16_t mind; - uint8_t flags; - uint8_t photon_blasts; - uint8_t color; - - ItemMagStats() - : iq(0), - synchro(40), - def(500), - pow(0), - dex(0), - mind(0), - flags(0), - photon_blasts(0), - color(14) {} + uint16_t iq = 0; + uint16_t synchro = 40; + uint16_t def = 500; + uint16_t pow = 0; + uint16_t dex = 0; + uint16_t mind = 0; + uint8_t flags = 0; + uint8_t photon_blasts = 0; + uint8_t color = 14; inline uint16_t def_level() const { return this->def / 100;