This repository has been archived on 2026-04-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
original-mcpe-0.6.1/tools/guiblockgen.py
2026-04-01 23:13:15 +02:00

197 lines
4.4 KiB
Python

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]