yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
room_census_vanilla_fingerprints.cc
Go to the documentation of this file.
2
3#include "absl/strings/str_format.h"
4
5namespace yaze::zelda3 {
6
7namespace {
8// Defines kVanillaFingerprintHashes[], kVanillaFingerprintOffsets[0x129] and
9// kHasVanillaFingerprints.
11} // namespace
12
14 return kHasVanillaFingerprints;
15}
16
17std::vector<uint16_t> BuiltinVanillaRoomFingerprint(int room_id) {
18 if (!kHasVanillaFingerprints || room_id < 0 || room_id >= 0x128) {
19 return {};
20 }
21 const int begin = kVanillaFingerprintOffsets[room_id];
22 const int end = kVanillaFingerprintOffsets[room_id + 1];
23 return std::vector<uint16_t>(kVanillaFingerprintHashes + begin,
24 kVanillaFingerprintHashes + end);
25}
26
28 const std::vector<std::vector<uint16_t>>& fingerprints,
29 const std::string& source_note) {
30 std::string out;
31 out +=
32 "// Generated by z3ed dungeon-room-census --emit-vanilla-fingerprints.\n";
33 out += "// Source: " + source_note + "\n";
34 out +=
35 "// One-way 16-bit object hashes; see "
36 "room_census_vanilla_fingerprints.h.\n";
37 out += "// clang-format off\n";
38 out += "constexpr bool kHasVanillaFingerprints = true;\n";
39 out += "constexpr uint16_t kVanillaFingerprintHashes[] = {\n";
40 int total = 0;
41 std::vector<int> offsets;
42 for (const auto& room : fingerprints) {
43 offsets.push_back(total);
44 for (size_t i = 0; i < room.size(); ++i) {
45 if (total % 12 == 0) {
46 out += " ";
47 }
48 out += absl::StrFormat(" 0x%04X,", room[i]);
49 ++total;
50 if (total % 12 == 0) {
51 out += "\n";
52 }
53 }
54 }
55 offsets.push_back(total);
56 if (total % 12 != 0) {
57 out += "\n";
58 }
59 if (total == 0) {
60 out += " 0,\n";
61 }
62 out += "};\n";
63 out += absl::StrFormat("constexpr int kVanillaFingerprintOffsets[%d] = {\n",
64 static_cast<int>(offsets.size()));
65 for (size_t i = 0; i < offsets.size(); ++i) {
66 if (i % 12 == 0) {
67 out += " ";
68 }
69 out += absl::StrFormat(" %d,", offsets[i]);
70 if (i % 12 == 11) {
71 out += "\n";
72 }
73 }
74 if (offsets.size() % 12 != 0) {
75 out += "\n";
76 }
77 out += "};\n// clang-format on\n";
78 return out;
79}
80
81} // namespace yaze::zelda3
Zelda 3 specific classes and functions.
std::vector< uint16_t > BuiltinVanillaRoomFingerprint(int room_id)
std::string FormatVanillaFingerprintTable(const std::vector< std::vector< uint16_t > > &fingerprints, const std::string &source_note)