Skip to content

Commit

Permalink
jup checksum and decrypt anim strings
Browse files Browse the repository at this point in the history
  • Loading branch information
ate47 committed May 30, 2024
1 parent 0f8995f commit 8931c96
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 15 deletions.
6 changes: 3 additions & 3 deletions src/acts/tools/gsc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ void GSCOBJHandler::PatchCode(T8GSCOBJContext& ctx) {
for (size_t i = 0; i < anims_count; i++) {
const auto* unk2c = reinterpret_cast<GSC_USEANIMTREE_ITEM*>(unk2c_location);

auto* s = Ptr<char>(unk2c->address);
char* s = DecryptString(Ptr<char>(unk2c->address));

uint32_t ref = ctx.AddStringValue(s);
const auto* vars = reinterpret_cast<const uint32_t*>(&unk2c[1]);
Expand Down Expand Up @@ -421,8 +421,8 @@ void GSCOBJHandler::PatchCode(T8GSCOBJContext& ctx) {
for (size_t i = 0; i < anims_count; i++) {
const auto* animt = reinterpret_cast<GSC_ANIMTREE_ITEM*>(animt_location);

auto* s1 = Ptr<char>(animt->address_str1);
auto* s2 = Ptr<char>(animt->address_str2);
auto* s1 = DecryptString(Ptr<char>(animt->address_str1));
auto* s2 = DecryptString(Ptr<char>(animt->address_str2));

hashutils::Add(s1, true, true);
hashutils::Add(s2, true, true);
Expand Down
3 changes: 1 addition & 2 deletions src/acts/tools/gsc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -870,8 +870,7 @@ namespace tool::gsc {
uint16_t unk22;
uint16_t string_count;
uint16_t unk26;
uint16_t unk28;
uint16_t unk2A;
uint32_t checksum;
uint32_t animtree_use_offset;
uint32_t animtree_offset;
uint32_t cseg_offset;
Expand Down
18 changes: 10 additions & 8 deletions src/acts/tools/gsc_vm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -761,6 +761,7 @@ class MW23GSCOBJHandler : public GSCOBJHandler {
void DumpHeader(std::ostream& asmout, const GscInfoOption& opt) override {
auto* data = Ptr<GscObj23>();
asmout
<< "// crc: 0x" << std::hex << data->checksum << " (" << std::dec << data->checksum << ")\n"
<< std::left << std::setfill(' ')
<< "// size ...... " << std::dec << std::setw(3) << data->size1 << " (0x" << std::hex << data->size1 << ")" << "\n"
<< "// includes .. " << std::dec << std::setw(3) << data->includes_count << " (offset: 0x" << std::hex << data->include_table << ")\n"
Expand All @@ -781,8 +782,6 @@ class MW23GSCOBJHandler : public GSCOBJHandler {
<< "unk1C :" << std::dec << std::setw(3) << (int)data->unk1C << " (0x" << std::hex << data->unk1C << ")\n"
<< "unk22 :" << std::dec << std::setw(3) << (int)data->unk22 << " (0x" << std::hex << data->unk22 << ")\n"
<< "unk26 :" << std::dec << std::setw(3) << (int)data->unk26 << " (0x" << std::hex << data->unk26 << ")\n"
<< "unk28 :" << std::dec << std::setw(3) << (int)data->unk28 << " (0x" << std::hex << data->unk28 << ")\n"
<< "unk2A :" << std::dec << std::setw(3) << (int)data->unk2A << " (0x" << std::hex << data->unk2A << ")\n"
<< "unk3C :" << std::dec << std::setw(3) << (int)data->unk3C << " (0x" << std::hex << data->unk3C << ")\n"
<< "unk48 :" << std::dec << std::setw(3) << (int)data->size1 << " (0x" << std::hex << data->size1 << ")\n"
<< "unk54 :" << std::dec << std::setw(3) << (int)data->size2 << " (0x" << std::hex << data->size2 << ")\n"
Expand Down Expand Up @@ -1089,9 +1088,11 @@ class MW23GSCOBJHandler : public GSCOBJHandler {
int64_t GetDefaultChecksum(bool client) override {
return 0; // no checksum
}
void SetChecksum(uint64_t val) override { }
void SetChecksum(uint64_t val) override {
Ptr<GscObj23>()->checksum = (uint32_t)val;
}
uint32_t GetChecksum() override {
return 0;
return Ptr<GscObj23>()->checksum;
}
const char* GetDefaultName(bool client) override {
return ""; // idc
Expand All @@ -1111,6 +1112,7 @@ class MW23BGSCOBJHandler : public GSCOBJHandler {
void DumpHeader(std::ostream& asmout, const GscInfoOption& opt) override {
auto* data = Ptr<GscObj23>();
asmout
<< "// crc: 0x" << std::hex << data->checksum << " (" << std::dec << data->checksum << ")\n"
<< std::left << std::setfill(' ')
<< "// size ...... " << std::dec << std::setw(3) << data->size1 << " (0x" << std::hex << data->size1 << ")" << "\n"
<< "// includes .. " << std::dec << std::setw(3) << data->includes_count << " (offset: 0x" << std::hex << data->include_table << ")\n"
Expand All @@ -1131,8 +1133,6 @@ class MW23BGSCOBJHandler : public GSCOBJHandler {
<< "unk1C :" << std::dec << std::setw(3) << (int)data->unk1C << " (0x" << std::hex << data->unk1C << ")\n"
<< "unk22 :" << std::dec << std::setw(3) << (int)data->unk22 << " (0x" << std::hex << data->unk22 << ")\n"
<< "unk26 :" << std::dec << std::setw(3) << (int)data->unk26 << " (0x" << std::hex << data->unk26 << ")\n"
<< "unk28 :" << std::dec << std::setw(3) << (int)data->unk28 << " (0x" << std::hex << data->unk28 << ")\n"
<< "unk2A :" << std::dec << std::setw(3) << (int)data->unk2A << " (0x" << std::hex << data->unk2A << ")\n"
<< "unk3C :" << std::dec << std::setw(3) << (int)data->unk3C << " (0x" << std::hex << data->unk3C << ")\n"
<< "unk48 :" << std::dec << std::setw(3) << (int)data->size1 << " (0x" << std::hex << data->size1 << ")\n"
<< "unk54 :" << std::dec << std::setw(3) << (int)data->size2 << " (0x" << std::hex << data->size2 << ")\n"
Expand Down Expand Up @@ -1439,9 +1439,11 @@ class MW23BGSCOBJHandler : public GSCOBJHandler {
int64_t GetDefaultChecksum(bool client) override {
return 0; // no checksum
}
void SetChecksum(uint64_t val) override { }
void SetChecksum(uint64_t val) override {
Ptr<GscObj23>()->checksum = (uint32_t)val;
}
uint32_t GetChecksum() override {
return 0;
return Ptr<GscObj23>()->checksum;
}
const char* GetDefaultName(bool client) override {
return ""; // idc
Expand Down
36 changes: 34 additions & 2 deletions src/acts/tools/sp23/sp23.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -394,12 +394,44 @@ namespace {

return tool::OK;
}

int strbytestest(Process& _, int argc, const char* argv[]) {
for (size_t i = 2; i < argc; i++) {
const char* arg{ argv[i] };

size_t al{ strlen(arg) };
std::cout << arg << " (" << std::dec << al << "):";


for (size_t j = 0; j <= al; j++) {
std::cout << " " << std::hex << std::setfill('0') << std::setw(2) << (uint32_t)arg[j];
}
std::cout << "\n";
if (al >= 7) {
std::cout << "int64: 0x" << std::hex << *reinterpret_cast<const int64_t*>(arg) << "\n";
std::cout << "uint64: 0x" << std::hex << *reinterpret_cast<const uint64_t*>(arg) << "\n";
}
if (al >= 3) {
std::cout << "int32: 0x" << std::hex << *reinterpret_cast<const int32_t*>(arg) << "\n";
std::cout << "uint32: 0x" << std::hex << *reinterpret_cast<const uint32_t*>(arg) << "\n";
}

try {
uint64_t v{ std::strtoull(arg, nullptr, 10) };
std::cout << "v: " << std::dec << v << std::hex << "(0x" << v << ")\n";
}
catch (std::exception& e) {
std::cerr << e.what() << "\n";
}
}

return tool::OK;
}
}
#ifndef CI_BUILD
ADD_TOOL("local23", "mwiii", " [file]", "decrypt local dump 23", nullptr, decryptlocalize);
ADD_TOOL("hash23search", "mwiii", " [file]", "", nullptr, hash23search);
ADD_TOOL("vmtest", "mwiii", "", "test vm opcodes", nullptr, vmtest);
ADD_TOOL("vmtest", "mwiii", "", "test vm opcodes", nullptr, vmtest);;
ADD_TOOL("strbytestest", "mwiii", "", "test strings", nullptr, strbytestest);

#endif
ADD_TOOL("hash23", "mwiii", " [str]", "hash using iw values", nullptr, hash23);

0 comments on commit 8931c96

Please sign in to comment.