/* * _gfx_heal_sprite — лин-ядро heal СПРАЙТА (≤ 64×64, см. sprite.h): как * _gfx_heal_full, но БЕЗ split'а на полосы >256 и с 8-битными w/h. Один * вызов _bgi_heal_rows_raw. БЕЗ _bgi_begin/_bgi_end и смены банка — * вызывающий (sprite_update) держит скобку и банк 0x50. Проверок * размера НЕТ (контракт ≤64 — в доке). Клип по экрану остаётся. */ #include "../_bgi.h" void _gfx_heal_sprite(int x, int y, uint8_t w, uint8_t h) { uint8_t *scr; int cw = w, ch = h; if (x < 0 || y < 0 || x + cw > _bgi_maxx + 1 || y + ch > _bgi_maxy + 1) { if (x < 0) { cw += x; x = 0; } if (y < 0) { ch += y; y = 0; } if (x + cw > _bgi_maxx + 1) cw = _bgi_maxx + 1 - x; if (y + ch > _bgi_maxy + 1) ch = _bgi_maxy + 1 - y; if (cw <= 0 || ch <= 0) return; } scr = (uint8_t *)(_gfx_addr_base + x); _bgi_heal_rows_raw(scr, y, (uint8_t)cw, (uint8_t)ch); }