-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathembed.py
141 lines (103 loc) · 3.8 KB
/
embed.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import glob
import json
import os
def embed_encounters():
file = "Resources/Encounters/nests.json"
with open(file, "r") as f:
j = json.loads(f.read())
name = os.path.basename(f.name).replace(".json", "")
size = 0
data = ""
for table in j["Tables"]:
for raid in table["ShieldEntries"]:
data += f"{raid['Ability']},"
data += f"{raid['AltForm']},"
data += f"{raid['FlawlessIVs']},"
data += f"{raid['Gender']},"
data += f"{1 if raid['IsGigantamax'] else 0},"
data += f"{raid['Species'] >> 8},"
data += f"{raid['Species'] & 0xff},"
for star in raid["Stars"]:
data += f"{1 if star else 0},"
size += 12
for raid in table["SwordEntries"]:
data += f"{raid['Ability']},"
data += f"{raid['AltForm']},"
data += f"{raid['FlawlessIVs']},"
data += f"{raid['Gender']},"
data += f"{1 if raid['IsGigantamax'] else 0},"
data += f"{raid['Species'] >> 8},"
data += f"{raid['Species'] & 0xff},"
for star in raid["Stars"]:
data += f"{1 if star else 0},"
size += 12
table_id = int(table["TableID"], 16)
for i in range(8):
num = (table_id >> ((7 - i) * 8)) & 0xff
data += f"{num},"
size += 8
string = f"constexpr std::array<u8, {size}> {name} = "
string += " { "
string += data.removesuffix(",")
string += " };"
return string
def embed_personal():
file = "Resources/Personal/personal_swsh"
with open(file, "rb") as f:
data = f.read()
name = os.path.basename(f.name)
string = f"constexpr std::array<u8, {len(data)}> {name} = "
string += " { "
for i in range(len(data)):
string += str(data[i])
if i != len(data) - 1:
string += ","
string += " };"
return string
def write_data(arrays):
f = open("Core\Resources.hpp", "w")
f.write("#include <Core/Util/Global.hpp>\n")
f.write("#include <array>\n\n")
for array in arrays:
f.write(f"{array}\n\n")
def embed_i18n(paths):
arrays = []
for path in paths:
mapping = {}
files = glob.glob(f"{path}/*.txt")
for file in files:
with open(file, "r", encoding="utf-8") as f:
data = f.read().split("\n")
name = os.path.basename(f.name).replace(".txt", "")
string_data = []
for line in data:
line = line.replace('\r', '').replace('\n', '')
for x in [int(y) for y in bytearray(line, encoding="utf-8")]:
string_data.append(x)
string_data.append(0)
string = f"constexpr std::array<u8, {len(string_data)}> {name} = "
string += " { "
for i in range(len(string_data)):
string += str(string_data[i])
if i != len(string_data) - 1:
string += ", "
string += " };"
mapping[name] = string
arrays.append(mapping)
return arrays
def write_i18n(maps):
f = open("Core\I18n.hpp", "w", encoding="utf-8")
f.write("#include <Core/Util/Global.hpp>\n")
f.write("#include <array>\n\n")
for map in maps:
for string in map.values():
f.write(f"{string}\n\n")
def main():
encounters = embed_encounters()
personal = embed_personal()
write_data([encounters, personal])
maps = embed_i18n(["Resources\Text\de", "Resources\Text\en", "Resources\Text\es", "Resources\Text\\fr", "Resources\Text\it",
"Resources\Text\ja", "Resources\Text\ko", "Resources\Text\pt", "Resources\Text\\tw", "Resources\Text\zh", ])
write_i18n(maps)
if __name__ == "__main__":
main()