handle unsealable items on BB

This commit is contained in:
Martin Michelsen
2023-06-23 17:32:10 -07:00
parent d6f8fb8917
commit 9602773021
3 changed files with 20 additions and 3 deletions
+10 -2
View File
@@ -262,9 +262,17 @@ void ItemData::add_mag_photon_blast(uint8_t pb_num) {
}
}
uint16_t ItemData::get_sealed_item_kill_count() const {
return ((this->data1[10] << 8) | this->data1[11]) & 0x7FFF;
}
void ItemData::set_sealed_item_kill_count(uint16_t v) {
this->data1[10] = (v >> 8) | 0x80;
this->data1[11] = v;
if (v > 0x7FFF) {
this->data1w[5] = 0xFFFF;
} else {
this->data1[10] = (v >> 8) | 0x80;
this->data1[11] = v;
}
}
uint8_t ItemData::get_tool_item_amount() const {
+1
View File
@@ -129,6 +129,7 @@ struct ItemData { // 0x14 bytes
bool mag_has_photon_blast_in_any_slot(uint8_t pb_num) const;
void add_mag_photon_blast(uint8_t pb_num);
uint16_t get_sealed_item_kill_count() const;
void set_sealed_item_kill_count(uint16_t v);
uint8_t get_tool_item_amount() const;
void set_tool_item_amount(uint8_t amount);
+9 -1
View File
@@ -1497,8 +1497,16 @@ static void on_enemy_killed_bb(shared_ptr<ServerState> s,
if (leveled_up) {
send_level_up(l, other_c);
}
}
}
// TODO: Update kill counts on unsealable items
// Update kill counts on unsealable items
auto& inventory = c->game_data.player()->inventory;
for (size_t z = 0; z < inventory.num_items; z++) {
auto& item = inventory.items[z];
if ((item.flags & 0x08) &&
s->item_parameter_table->is_unsealable_item(item.data)) {
item.data.set_sealed_item_kill_count(item.data.get_sealed_item_kill_count() + 1);
}
}
}