This commit is contained in:
2026-04-01 23:13:15 +02:00
commit 78c2d9c659
2100 changed files with 610164 additions and 0 deletions

197
tools/guiblockgen.py Normal file
View File

@@ -0,0 +1,197 @@
rl = """1, 0, 273, 0, 81
1, 1, 274, 0, 97
1, 2, 275, 0, 113
1, 3, 359, 0, 93
1, 4, 272, 0, 65
1, 5, 65, 0, 83
1, 6, 50, 0, 80
1, 7, 324, 0, 43
0, 8, 85, 0, 0
0, 9, 107, 0, 0
0, 10, 4, 0, 0
0, 11, 17, 1, 0
0, 12, 17, 2, 0
0, 13, 5, 0, 0
0, 14, 45, 0, 0
0, 15, 3, 0, 0
0, 16, 24, 0, 0
0, 17, 13, 0, 0
0, 18, 1, 0, 0
0, 19, 67, 0, 0
0, 20, 53, 0, 0
0, 21, 108, 0, 0
0, 22, 44, 0, 0
0, 23, 44, 2, 0
0, 24, 44, 4, 0
0, 25, 12, 0, 0
0, 26, 35, 7, 0
0, 27, 35, 6, 0
0, 28, 35, 5, 0
0, 29, 35, 4, 0
0, 30, 35, 3, 0
0, 31, 35, 2, 0
0, 32, 35, 1, 0
0, 33, 35, 15, 0
0, 34, 35, 14, 0
0, 35, 35, 13, 0
0, 36, 35, 12, 0
0, 37, 35, 11, 0
0, 38, 35, 10, 0
0, 39, 35, 9, 0
0, 40, 35, 8, 0
0, 41, 20, 0, 0
0, 42, 18, 0, 0
0, 43, 41, 0, 0
0, 44, 42, 0, 0
0, 45, 57, 0, 0
0, 46, 49, 0, 0
0, 47, 47, 0, 0
0, 48, 58, 0, 0
0, 49, 61, 0, 0
1, 50, 37, 0, 13
1, 51, 38, 0, 12
1, 52, 39, 0, 29
1, 53, 40, 0, 28
1, 54, 81, 0, 70
1, 55, 83, 0, 73
0, 56, 15, 0, 0
0, 57, 14, 0, 0
0, 58, 56, 0, 0
0, 59, 21, 0, 0
1, 60, 266, 0, 39
1, 61, 265, 0, 23
0, 62, 17, 0, 0
1, 63, 263, 1, 7
1, 64, 264, 0, 55
1, 65, 351, 2, 110
1, 66, 337, 0, 57
1, 67, 336, 0, 22
1, 68, 270, 0, 96
1, 69, 280, 0, 53
1, 70, 269, 0, 80
1, 71, 271, 0, 112
1, 72, 257, 0, 98
1, 73, 256, 0, 82
1, 74, 258, 0, 114
1, 75, 278, 0, 99
1, 76, 277, 0, 83
1, 77, 279, 0, 115
1, 78, 285, 0, 100
1, 79, 284, 0, 84
1, 80, 286, 0, 116
1, 81, 268, 0, 64
1, 82, 267, 0, 66
1, 83, 276, 0, 67
1, 84, 283, 0, 68
0, 85, 22, 0, 0
1, 86, 351, 4, 142
1, 87, 102, 0, 49
0, 88, 35, 0, 0
1, 89, 351, 11, 12
1, 90, 339, 0, 58
1, 91, 338, 0, 27
1, 92, 340, 0, 59
0, 93, 80, 0, 0
1, 94, 332, 0, 14
0, 95, 82, 0, 0
0, 96, 44, 3, 0
1, 97, 353, 0, 13
1, 98, 263, 0, 7
1, 99, 281, 0, 71
1, 100, 6, 2, 79
1, 101, 6, 1, 63
1, 102, 6, 0, 15"""
class T:
def __init__(self):
self.t = {}
def set(self, i, id, data):
if not id in self.t: self.t[id] = []
self.t[id].append((i,data))
def _getType(self, id):
return len(self.t.get(id, []))
def isAvailable(self, id):
return 0 != self._getType(id)
def isUnique(self, id):
return 1 == self._getType(id)
def isMultiple(self, id):
return 2 <= self._getType(id)
def hasDataFor(self, id, data):
if not self.isAvailable(id): return False
return data in self.t.get(id, [(0,0)])
def getIndexFor(self, id, data):
for (i, d) in self.t[id]:
if data == d:
return i
return -1
def getCArrayFormat(l):
#if len(l) < 20:
return "{" + ", ".join(map(str,l)) + "};"
s = "{\n"
n = 0
for x in l:
if n == 0: s += " ";
s += "%3d,"%x
n += 1
if n == 10:
s+= "\n"
n = 0
s += "};"
return s
if __name__ == "__main__":
def emitDefinition(id, data):
typeId = "static const signed short"
return "%s _%s[] = %s\n"%(typeId,id,getCArrayFormat(data))
ll = [map(int, k.split(", ")) for k in [x.strip() for x in rl.split("\n") if x.strip()]]
import blockplacer
blockplacer.run(ll, "blocks.png")
types = {}
ts = [T(), T()]
index = [-1, 128-1]
maxId = 0
for (type, i, id, data, i2) in ll:
index[type] += 1
ts[type].set(index[type], id, data)
if id > maxId: maxId = id
NumItems = maxId + 1
handled = {}
l = [-1] * NumItems # -1 is HAS_NOT, -2 is RE-QUERY, 0 <= x < 128 is
# block index, x >= 128 is icon index
q = []
for (type, i, id, data, i2) in ll:
# type == 0: Rendered Tile. Top left 480 * 432 pixels are allocated for those.
# type == 1: Icon. Index start on 128
if id >= NumItems: continue
t = ts[type]
if id == 38:
print type, i, id, data, i2,
if t.isUnique(id):
l[id] = t.getIndexFor(id, data)
if t.isMultiple(id) and id not in handled:
l[id] = -2
handled[id] = True
m = []
for data in range(16): # data
index = t.getIndexFor(id, data)
m.append(index)
q.append( (id, emitDefinition(id, m)))
import sys
f = file("def.cpp", 'w')
sys.stdout = f
for (id, datalist) in q:
print datalist
print emitDefinition("mapper", l)
#print l[45]