grf.py: Don't write pseudo sprites for EZ sprites

This commit is contained in:
dP
2021-11-05 01:40:35 +03:00
parent 8037167cc9
commit 6d21087be9
2 changed files with 17 additions and 15 deletions

View File

@@ -12,16 +12,14 @@ gen.add_sprite(grf.FileSprite(toolbar_png, 0, 0, 20, 14, yofs=4),
grf.FileSprite(toolbar_png, 32, 0, 40, 40, zoom=grf.ZOOM_2X)) grf.FileSprite(toolbar_png, 32, 0, 40, 40, zoom=grf.ZOOM_2X))
sprite = lambda *args, **kw: gen.add_sprite(grf.FileSprite(toolbar_png, *args, **kw)) sprite = lambda *args, **kw: gen.add_sprite(grf.FileSprite(toolbar_png, *args, **kw))
sprite2 = lambda x, y, w, h, x2, y2: gen.add_sprite(grf.FileSprite(toolbar_png, x, y, w, h), grf.FileSprite(toolbar_png, x2, y2, w * 2, h * 2, zoom=grf.ZOOM_2X))
sprite( 0, 44, 12, 10) # hq button icon sprite( 0, 44, 12, 10) # hq button icon
for i in range(3): for i in range(3):
for j in range(4): for j in range(4):
sprite(66 + 20 * j, 44 + 11 * i, 10, 10) sprite(66 + 20 * j, 44 + 11 * i, 10, 10)
sprite( 0, 82, 11, 11) sprite2( 0, 82, 11, 11, 0, 94)
sprite(12, 82, 11, 11) sprite2(12, 82, 11, 11, 23, 94)
sprite(24, 82, 11, 11) sprite2(24, 82, 11, 11, 47, 94)
# sprite( 0, 67, 11, 11)
# sprite(12, 67, 11, 11)
# sprite(24, 67, 11, 11)
innerhl_png = grf.ImageFile('sprites/innerhighlight00.png') innerhl_png = grf.ImageFile('sprites/innerhighlight00.png')
sprite = lambda *args, **kw: gen.add_sprite(grf.FileSprite(innerhl_png, *args, **kw)) sprite = lambda *args, **kw: gen.add_sprite(grf.FileSprite(innerhl_png, *args, **kw))

View File

@@ -242,21 +242,26 @@ class DescriptionSprite(BaseSprite):
class NewGRF: class NewGRF:
def __init__(self, grfid, name, description): def __init__(self, grfid, name, description):
self.sprites = [] self.sprites = []
self.sprites.append(DescriptionSprite(grfid, name, description)) self.pseudo_sprites = []
self.pseudo_sprites.append(DescriptionSprite(grfid, name, description))
self._next_sprite_id = 1 self._next_sprite_id = 1
def add_sprite(self, *sprites): def add_sprite(self, *sprites):
if len(sprites) > 1: assert(len(sprites) > 0)
if isinstance(sprites[0], RealSprite):
assert(all(isinstance(s, RealSprite) for s in sprites)) assert(all(isinstance(s, RealSprite) for s in sprites))
assert(len(set(s.zoom for s in sprites)) == len(sprites)) assert(len(set(s.zoom for s in sprites)) == len(sprites))
if isinstance(sprites[0], RealSprite):
for s in sprites: for s in sprites:
s.sprite_id = self._next_sprite_id s.sprite_id = self._next_sprite_id
self._next_sprite_id += 1 self._next_sprite_id += 1
for s in sprites: for s in sprites:
self.sprites.append(s) self.sprites.append(s)
self.pseudo_sprites.append(sprites[0])
else:
assert(len(sprites) == 1)
self.pseudo_sprites.append(sprites[0])
def _write_pseudo_sprite(self, f, data, grf_type=0xff): def _write_pseudo_sprite(self, f, data, grf_type=0xff):
f.write(struct.pack('<IB', len(data), grf_type)) f.write(struct.pack('<IB', len(data), grf_type))
@@ -264,7 +269,7 @@ class NewGRF:
def write(self, filename): def write(self, filename):
data_offset = 14 data_offset = 14
for s in self.sprites: for s in self.pseudo_sprites:
data_offset += s.get_data_size() + 5 data_offset += s.get_data_size() + 5
with open(filename, 'wb') as f: with open(filename, 'wb') as f:
@@ -276,11 +281,10 @@ class NewGRF:
# f.write(b'\xb0\x01\x00\x00') # num + 0xff -> recoloursprites() (257 each) # f.write(b'\xb0\x01\x00\x00') # num + 0xff -> recoloursprites() (257 each)
self._write_pseudo_sprite(f, b'\x02\x00\x00\x00') self._write_pseudo_sprite(f, b'\x02\x00\x00\x00')
for s in self.sprites: for s in self.pseudo_sprites:
self._write_pseudo_sprite(f, s.get_data(), grf_type=0xfd if isinstance(s, RealSprite) else 0xff) self._write_pseudo_sprite(f, s.get_data(), grf_type=0xfd if isinstance(s, RealSprite) else 0xff)
f.write(b'\x00\x00\x00\x00') f.write(b'\x00\x00\x00\x00')
for s in self.sprites: for s in self.sprites:
if not isinstance(s, RealSprite): continue
f.write(s.get_real_data()) f.write(s.get_real_data())
f.write(b'\x00\x00\x00\x00') f.write(b'\x00\x00\x00\x00')