HUD-Kopf pixelig mit schwarzem Umriss, echte Tuergrafik (DOORS.BOB)
- Charakter-Icon im HUD: nearest-skalierter WECH-Kopf + schwarzer 1px- Umriss (Original-Look, Stefans Feedback). Eigene Mini-Kopf-Assets gibt es nicht (GAMEBAR.BOB[16] leer). - DOORS.BOB entschluesselt: Frame 0 (Tuer mit Kopf-Schild) wird jetzt auf die Tuerposition geblittet; Frames 1-4 sind die Schluessel-Tueren mit farbigen Knaeufen (fuer die spaetere Schluessel-Logik), Frame 5 das Schild einzeln. Szene deckungsgleich mit Stefans Original-Screenshot (Tuer mit Schild und Punkten, pixeliger HUD-Kopf). --once exit 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+22
-5
@@ -439,10 +439,23 @@ class Hud:
|
||||
self.bar = assets.pcc_surface('GAMEBAR').convert()
|
||||
self.item_icons = {n: intro.make_border_bg_transparent(assets.pcc_surface(n))
|
||||
for n in ('ITE0', 'ITE1', 'ITE2', 'ITE3')}
|
||||
# Kleine Charakter-Koepfe: WECH-Koepfe pixelig (nearest) verkleinert
|
||||
# + schwarzer 1px-Umriss -- Stefans Feedback: das Original-Icon ist
|
||||
# ein klarer Pixel-Kopf mit schwarzem Rand (kein weichgezeichnetes
|
||||
# Bild). Gleicher Stil wie das Tuerschild in DOORS.BOB.
|
||||
self.heads_small = []
|
||||
for i in range(1, 5):
|
||||
head = intro.make_border_bg_transparent(assets.pcc_surface(f'WECH_{i}'))
|
||||
self.heads_small.append(pygame.transform.smoothscale(head, (17, 16)))
|
||||
small = pygame.transform.scale(head, (15, 14))
|
||||
outlined = pygame.Surface((17, 16), pygame.SRCALPHA)
|
||||
mask = small.copy()
|
||||
tint = pygame.Surface(mask.get_size(), pygame.SRCALPHA)
|
||||
tint.fill((0, 0, 0, 255))
|
||||
mask.blit(tint, (0, 0), special_flags=pygame.BLEND_RGBA_MULT)
|
||||
for dx, dy in ((0, 1), (2, 1), (1, 0), (1, 2)):
|
||||
outlined.blit(mask, (dx, dy))
|
||||
outlined.blit(small, (1, 1))
|
||||
self.heads_small.append(outlined)
|
||||
|
||||
def _number(self, canvas, x, y, value, width):
|
||||
s = str(max(0, int(value))).rjust(width, '0')[-width:]
|
||||
@@ -532,8 +545,12 @@ def run_level(clock, assets, audio_paths, map_name='W1L1'):
|
||||
player = Player(assets, info['chars'][0], spawn_px)
|
||||
hud = Hud(assets)
|
||||
door = pygame.Rect(info['door_px']) if info.get('door_px') else None
|
||||
door_head = pygame.transform.smoothscale(
|
||||
intro.make_border_bg_transparent(assets.pcc_surface('WECH_1')), (16, 15))
|
||||
# Echte Tuergrafik: DOORS.BOB Frame 0 = Tuer MIT Kopf-Schild (32x48,
|
||||
# exakt Tuergroesse; Frames 1-4 sind die Schluessel-Tueren mit farbigen
|
||||
# Knaeufen -- fuer spaeter).
|
||||
door_frames = parse_bob(assets.container.entries['DOORS.BOB'])
|
||||
door_pal = get_bob_palette(assets.container.entries, 'DOORS')
|
||||
door_sprite = _frames_to_surfaces(door_frames, door_pal)[0]
|
||||
|
||||
if pygame.mixer.get_init():
|
||||
path = audio_paths.get(('ONGAME2', None))
|
||||
@@ -597,9 +614,9 @@ def run_level(clock, assets, audio_paths, map_name='W1L1'):
|
||||
cam_y = max(0, min(int(player.y) - VIEW_H * 2 // 3, map_h_px - VIEW_H))
|
||||
|
||||
canvas.blit(level.surface, (0, 0), (cam_x, cam_y, VIEW_W, VIEW_H))
|
||||
# Tuer-Symbol (Kopf ueber dem Tuerfenster -- Charakterwechsel-Hinweis)
|
||||
# Tuer mit Kopf-Schild (DOORS.BOB Frame 0) ueber der Tile-Tuer
|
||||
if door:
|
||||
canvas.blit(door_head, (door.x + door.w // 2 - 8 - cam_x, door.y - cam_y))
|
||||
canvas.blit(door_sprite, (door.x - cam_x, door.y - cam_y))
|
||||
player.draw(canvas, cam_x, cam_y)
|
||||
# Wasser: dunkles Overlay unterhalb der Wasserlinie (im Original ein
|
||||
# VGA-Palette-Effekt, nur bei machine=vgaonly sichtbar -- Stefans Fund)
|
||||
|
||||
Reference in New Issue
Block a user