make generated mag colors random

This commit is contained in:
Martin Michelsen
2024-01-01 12:08:32 -08:00
parent c6ce39623e
commit efe2515a44
3 changed files with 21 additions and 22 deletions
+11 -1
View File
@@ -701,10 +701,20 @@ uint8_t ItemCreator::generate_tech_disk_level(uint32_t tech_num, uint32_t area_n
return range.min; 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) { if (item.data1[0] == 0x02) {
item.data1[1] = 0x00; item.data1[1] = 0x00;
item.assign_mag_stats(ItemMagStats()); 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;
}
} }
} }
+1 -1
View File
@@ -121,7 +121,7 @@ private:
void generate_common_armor_or_shield_type_and_variances(char area_norm, ItemData& item); 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); 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); 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_variances(uint8_t area_norm, ItemData& item);
void generate_common_weapon_grind(ItemData& item, uint8_t offset_within_subtype_range); void generate_common_weapon_grind(ItemData& item, uint8_t offset_within_subtype_range);
void generate_common_weapon_bonuses(ItemData& item, uint8_t area_norm); void generate_common_weapon_bonuses(ItemData& item, uint8_t area_norm);
+9 -20
View File
@@ -29,26 +29,15 @@ enum class EquipSlot {
}; };
struct ItemMagStats { struct ItemMagStats {
uint16_t iq; uint16_t iq = 0;
uint16_t synchro; uint16_t synchro = 40;
uint16_t def; uint16_t def = 500;
uint16_t pow; uint16_t pow = 0;
uint16_t dex; uint16_t dex = 0;
uint16_t mind; uint16_t mind = 0;
uint8_t flags; uint8_t flags = 0;
uint8_t photon_blasts; uint8_t photon_blasts = 0;
uint8_t color; uint8_t color = 14;
ItemMagStats()
: iq(0),
synchro(40),
def(500),
pow(0),
dex(0),
mind(0),
flags(0),
photon_blasts(0),
color(14) {}
inline uint16_t def_level() const { inline uint16_t def_level() const {
return this->def / 100; return this->def / 100;