@@ -53,6 +53,74 @@ void GBASlot::Ratings(const uint16_t V) { GBASAVUtils::Write<uint16_t>(this->Off
5353std::string GBASlot::Name () const { return SAVUtils::ReadString (GBASAVUtils::SAV->GetData (), this ->Offs + 0xD , 0x8 ); };
5454void GBASlot::Name (const std::string &V) { SAVUtils::WriteString (GBASAVUtils::SAV->GetData (), this ->Offs + 0xD , 0x8 , V); };
5555
56+ /* Get and Set Hairstyle. */
57+ uint8_t GBASlot::Hairstyle () const { return GBASAVUtils::ReadBits (this ->Offs + 0x1D , false ) / 2 ; };
58+ void GBASlot::Hairstyle (const uint8_t V) {
59+ if (V > 7 ) return ;
60+
61+ GBASAVUtils::WriteBits (this ->Offs + 0x1D , false , (V * 2 ) + (this ->Shirtcolor3 () > 15 ? 0x1 : 0x0 ));
62+ };
63+
64+ /* Get and Set third Shirtcolor (Long Sleeves). */
65+ uint8_t GBASlot::Shirtcolor3 () const { return ((GBASAVUtils::ReadBits (this ->Offs + 0x1D , false ) % 2 == 1 ) ? 16 : 0 ) + GBASAVUtils::ReadBits (this ->Offs + 0x1D , true ); };
66+ void GBASlot::Shirtcolor3 (const uint8_t V) {
67+ GBASAVUtils::WriteBits (this ->Offs + 0x1D , true , ((V > 15 ) ? V - 16 : V));
68+ GBASAVUtils::WriteBits (this ->Offs + 0x1D , false , (this ->Hairstyle () * 2 ) + (V > 15 ? 0x1 : 0x0 )); // Refresh Hairstyle as well.
69+ };
70+
71+ /* Get and Set Tan / Skin color. */
72+ uint8_t GBASlot::Tan () const { return GBASAVUtils::ReadBits (this ->Offs + 0x1E , false ) / 2 ; };
73+ void GBASlot::Tan (const uint8_t V) {
74+ if (V > 5 ) return ;
75+
76+ GBASAVUtils::WriteBits (this ->Offs + 0x1E , false , (V * 2 ) + (this ->Shirtcolor2 () > 15 ? 0x1 : 0x0 ));
77+ };
78+
79+ /* Get and Set second Shirtcolor (Short Sleeves). */
80+ uint8_t GBASlot::Shirtcolor2 () const { return ((GBASAVUtils::ReadBits (this ->Offs + 0x1E , false ) % 2 == 1 ) ? 16 : 0 ) + GBASAVUtils::ReadBits (this ->Offs + 0x1E , true ); };
81+ void GBASlot::Shirtcolor2 (const uint8_t V) {
82+ GBASAVUtils::WriteBits (this ->Offs + 0x1E , true , ((V > 15 ) ? V - 16 : V));
83+ GBASAVUtils::WriteBits (this ->Offs + 0x1E , false , (GBASAVUtils::ReadBits (this ->Offs + 0x1E , false ) * 2 ) + (V > 15 ? 0x1 : 0x0 )); // Refresh Tan as well.
84+ };
85+
86+ /* Get and Set Haircolor. */
87+ uint8_t GBASlot::Haircolor () const { return GBASAVUtils::ReadBits (this ->Offs + 0x1F , false ); };
88+ void GBASlot::Haircolor (const uint8_t V) { GBASAVUtils::WriteBits (this ->Offs + 0x1F , false , V); };
89+
90+ /* Get the Hatcolor. NOTE: Is also shoe color. */
91+ uint8_t GBASlot::Hatcolor () const { return GBASAVUtils::ReadBits (this ->Offs + 0x1F , true ); };
92+ void GBASlot::Hatcolor (const uint8_t V) { GBASAVUtils::WriteBits (this ->Offs + 0x1F , true , V); };
93+
94+ /* Get and Set Shirt Type. */
95+ uint8_t GBASlot::Shirt () const { return GBASAVUtils::ReadBits (this ->Offs + 0x20 , false ) / 2 ; };
96+ void GBASlot::Shirt (const uint8_t V) {
97+ if (V > 5 ) return ;
98+
99+ GBASAVUtils::WriteBits (this ->Offs + 0x20 , false , (V * 2 ) + (this ->Shirtcolor1 () > 15 ? 0x1 : 0x0 ));
100+ };
101+
102+ /* Get and Set first Shirtcolor (Body). */
103+ uint8_t GBASlot::Shirtcolor1 () const { return ((GBASAVUtils::ReadBits (this ->Offs + 0x20 , false ) % 2 == 1 ) ? 16 : 0 ) + GBASAVUtils::ReadBits (this ->Offs + 0x20 , true ); };
104+ void GBASlot::Shirtcolor1 (const uint8_t V) {
105+ GBASAVUtils::WriteBits (this ->Offs + 0x20 , true , ((V > 15 ) ? V - 16 : V));
106+ GBASAVUtils::WriteBits (this ->Offs + 0x20 , false , (GBASAVUtils::ReadBits (this ->Offs + 0x20 , false ) * 2 ) + (V > 15 ? 0x1 : 0x0 )); // Refresh Shirt as well.
107+ };
108+
109+ /* Get and Set Pants. */
110+ uint8_t GBASlot::Pants () const { return GBASAVUtils::ReadBits (this ->Offs + 0x21 , false ) / 2 ; };
111+ void GBASlot::Pants (const uint8_t V) {
112+ if (V > 1 ) return ;
113+
114+ GBASAVUtils::WriteBits (this ->Offs + 0x21 , false , (V * 2 ) + (this ->Pantscolor () > 15 ? 0x1 : 0x0 ));
115+ };
116+
117+ /* Get and Set Pantscolor. */
118+ uint8_t GBASlot::Pantscolor () const { return ((GBASAVUtils::ReadBits (this ->Offs + 0x21 , false ) % 2 == 1 ) ? 16 : 0 ) + GBASAVUtils::ReadBits (this ->Offs + 0x21 , true ); };
119+ void GBASlot::Pantscolor (const uint8_t V) {
120+ GBASAVUtils::WriteBits (this ->Offs + 0x21 , true , ((V > 15 ) ? V - 16 : V));
121+ GBASAVUtils::WriteBits (this ->Offs + 0x21 , false , (this ->Pants () * 2 ) + (V > 15 ? 0x1 : 0x0 )); // Refresh Pants as well.
122+ };
123+
56124/* Get and Set the Confidence Skill Points. */
57125uint8_t GBASlot::Confidence () const { return GBASAVUtils::Read<uint8_t >(this ->Offs + 0x22 ); };
58126void GBASlot::Confidence (const uint8_t V) { GBASAVUtils::Write<uint8_t >(this ->Offs + 0x22 , std::min<uint8_t >(5 , V)); };
@@ -81,6 +149,10 @@ void GBASlot::Intellect(const uint8_t V) { GBASAVUtils::Write<uint8_t>(this->Off
81149uint8_t GBASlot::Sanity () const { return GBASAVUtils::Read<uint8_t >(this ->Offs + 0x32 ); };
82150void GBASlot::Sanity (const uint8_t V) { GBASAVUtils::Write<uint8_t >(this ->Offs + 0x32 , std::min<uint8_t >(100 , V)); };
83151
152+ /* Get and Set the Aspiration. */
153+ uint8_t GBASlot::Aspiration () const { return GBASAVUtils::Read<uint8_t >(this ->Offs + 0x4B ); };
154+ void GBASlot::Aspiration (const uint8_t V) { GBASAVUtils::Write<uint8_t >(this ->Offs + 0x4B , std::min<uint8_t >(2 , V)); };
155+
84156/* Return some Item Groups of 6 Items each group. */
85157std::unique_ptr<GBAItem> GBASlot::PawnShop () const { return std::make_unique<GBAItem>(this ->Offs + 0x4C ); };
86158std::unique_ptr<GBAItem> GBASlot::Saloon () const { return std::make_unique<GBAItem>(this ->Offs + 0x5F ); };
@@ -171,8 +243,12 @@ std::unique_ptr<GBASocialMove> GBASlot::SocialMove(const uint8_t Move) const {
171243bool GBASlot::FixChecksum () {
172244 if (this ->Slot < 1 || this ->Slot > 4 ) return false ;
173245
174- if (!Checksum::GBASlotChecksumValid (GBASAVUtils::SAV->GetData (), this ->Slot , GBASAVUtils::Read<uint16_t >((this ->Slot * 0x1000 ) + 0xFFE ))) {
175- GBASAVUtils::Write<uint16_t >((this ->Slot * 0x1000 ) + 0xFFE , Checksum::CalcGBASlot (GBASAVUtils::SAV->GetData (), this ->Slot ));
246+ const uint16_t CurCHKS = GBASAVUtils::Read<uint16_t >(this ->Offs + 0xFFE );
247+ const uint16_t Calced = Checksum::Calc (GBASAVUtils::SAV->GetData (), (this ->Offs / 2 ), ((this ->Offs + 0xFFE ) / 2 ));
248+
249+
250+ if (Calced != CurCHKS) { // If the calced result is NOT the current checksum.
251+ GBASAVUtils::Write<uint16_t >(this ->Offs + 0xFFE , Calced);
176252 return true ;
177253 }
178254
0 commit comments