/*
 * _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);
}
