299. Definición de la entrada de sprite

Definir el modelo de datos básico de una entrada de sprite en OAM.

Lección 299 de 356 · tests/chapter_09_sprite_rendering/test_299_sprite_entry_definition.py

Archivo a crear

emulator/rendering/sprite_renderer.py

Por qué existe este paso

OAMDMA ya copia 256 bytes en PPU.oam. Antes de renderizar sprites, necesitamos un pequeño modelo de datos para una entrada de sprite.

¿Qué es OAM? OAM significa Object Attribute Memory. Es la memoria interna de sprites de la PPU:

64 sprites * 4 bytes = 256 bytes

Cada entrada de sprite usa cuatro bytes

byte 0: Y position
byte 1: tile index
byte 2: attributes
byte 3: X position

Este primer paso de renderizado de sprites solo crea las constantes y la dataclass SpriteEntry. Todavía no decodifica desde OAM ni renderiza píxeles.

Ejemplo de implementación sugerido

from dataclasses import dataclass


OAM_SPRITE_COUNT = 64
BYTES_PER_SPRITE = 4
OAM_SIZE = OAM_SPRITE_COUNT * BYTES_PER_SPRITE


@dataclass(frozen=True)
class SpriteEntry:
    y: int
    tile_index: int
    attributes: int
    x: int

Concepto erróneo habitual

"OAMDMA means sprites are visible."

No. OAMDMA solo rellena PPU.oam. Renderizar esas entradas como píxeles es un paso posterior del capítulo 09.

Fuera de alcance

  • decode_sprite_entry()
  • Decodificación de bits de atributos de sprite
  • Paletas de sprites
  • Renderizado de píxeles
  • Sprite 0 hit
  • Desbordamiento de sprites
  • pygame

Ejecutar esta lección

uv run pytest tests/chapter_09_sprite_rendering/test_299_sprite_entry_definition.py -v