describe how extension data works
This commit is contained in:
+7
-3
@@ -79,7 +79,7 @@ PlayerDispDataBB PlayerDispDataDCPCV3::to_bb() const {
|
|||||||
bb.visual.name = " 0";
|
bb.visual.name = " 0";
|
||||||
bb.name = add_language_marker(this->visual.name, 'J');
|
bb.name = add_language_marker(this->visual.name, 'J');
|
||||||
bb.config = this->config;
|
bb.config = this->config;
|
||||||
bb.technique_levels = this->technique_levels;
|
bb.technique_levels = this->v1_technique_levels;
|
||||||
return bb;
|
return bb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ PlayerDispDataDCPCV3 PlayerDispDataBB::to_dcpcv3() const {
|
|||||||
ret.visual = this->visual;
|
ret.visual = this->visual;
|
||||||
ret.visual.name = remove_language_marker(this->name);
|
ret.visual.name = remove_language_marker(this->name);
|
||||||
ret.config = this->config;
|
ret.config = this->config;
|
||||||
ret.technique_levels = this->technique_levels;
|
ret.v1_technique_levels = this->technique_levels;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,11 +496,15 @@ PlayerInventoryItem::PlayerInventoryItem() {
|
|||||||
|
|
||||||
PlayerInventoryItem::PlayerInventoryItem(const PlayerBankItem& src)
|
PlayerInventoryItem::PlayerInventoryItem(const PlayerBankItem& src)
|
||||||
: present(1),
|
: present(1),
|
||||||
|
extension_data1(0),
|
||||||
|
extension_data2(0),
|
||||||
flags(0),
|
flags(0),
|
||||||
data(src.data) {}
|
data(src.data) {}
|
||||||
|
|
||||||
void PlayerInventoryItem::clear() {
|
void PlayerInventoryItem::clear() {
|
||||||
this->present = 0x00000000;
|
this->present = 0x0000;
|
||||||
|
this->extension_data1 = 0x00;
|
||||||
|
this->extension_data2 = 0x00;
|
||||||
this->flags = 0x00000000;
|
this->flags = 0x00000000;
|
||||||
this->data.clear();
|
this->data.clear();
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-2
@@ -17,8 +17,35 @@
|
|||||||
|
|
||||||
struct PlayerBankItem;
|
struct PlayerBankItem;
|
||||||
|
|
||||||
|
// PSO V2 stored some extra data in the character structs in a format that I'm
|
||||||
|
// sure Sega thought was very clever for backward compatibility, but for us is
|
||||||
|
// just plain annoying. Specifically, they used the third and fourth bytes of
|
||||||
|
// the InventoryItem struct to store some things not present in V1. The game
|
||||||
|
// stores arrays of bytes striped across these structures. In newserv, we call
|
||||||
|
// those fields extension_data. They contain:
|
||||||
|
// items[0].extension_data1 through items[19].extension_data1:
|
||||||
|
// Extended technique levels. The values in the v1_technique_levels array
|
||||||
|
// only go up to 14 (tech level 15); if the player has a technique above
|
||||||
|
// level 15, the corresponding extension_data1 field holds the remaining
|
||||||
|
// levels (so a level 20 tech would have 14 in v1_technique_levels and 5
|
||||||
|
// in the corresponding item's extension_data1 field).
|
||||||
|
// items[0].extension_data2 through items[3].extension_data2:
|
||||||
|
// The value known as unknown_a1 in the PSOGCCharacterFile::Character
|
||||||
|
// struct. See SaveFileFormats.hh.
|
||||||
|
// items[4].extension_data2 through items[7].extension_data2:
|
||||||
|
// The timestamp when the character was last saved, in seconds since
|
||||||
|
// January 1, 2000. Stored little-endian, so items[4] contains the LSB.
|
||||||
|
// items[8].extension_data2 through items[12].extension_data2:
|
||||||
|
// Number of power materials, mind materials, evade materials, def
|
||||||
|
// materials, and luck materials (respectively) used by the player.
|
||||||
|
// items[13].extension_data2 through items[15].extension_data2:
|
||||||
|
// Unknown. These are not an array, but do appear to be related.
|
||||||
|
|
||||||
struct PlayerInventoryItem { // 0x1C bytes
|
struct PlayerInventoryItem { // 0x1C bytes
|
||||||
le_uint32_t present;
|
le_uint16_t present;
|
||||||
|
// See note above about these fields
|
||||||
|
uint8_t extension_data1;
|
||||||
|
uint8_t extension_data2;
|
||||||
le_uint32_t flags; // 8 = equipped
|
le_uint32_t flags; // 8 = equipped
|
||||||
ItemData data;
|
ItemData data;
|
||||||
|
|
||||||
@@ -125,7 +152,7 @@ struct PlayerDispDataDCPCV3 {
|
|||||||
/* 00 */ PlayerStats stats;
|
/* 00 */ PlayerStats stats;
|
||||||
/* 24 */ PlayerVisualConfig visual;
|
/* 24 */ PlayerVisualConfig visual;
|
||||||
/* 74 */ parray<uint8_t, 0x48> config;
|
/* 74 */ parray<uint8_t, 0x48> config;
|
||||||
/* BC */ parray<uint8_t, 0x14> technique_levels;
|
/* BC */ parray<uint8_t, 0x14> v1_technique_levels;
|
||||||
/* D0 */
|
/* D0 */
|
||||||
|
|
||||||
// Note: This struct has a default constructor because it's used in a command
|
// Note: This struct has a default constructor because it's used in a command
|
||||||
|
|||||||
Reference in New Issue
Block a user