/*
 * movesprite — переместить спрайт (кадр ≤ 64×64): восстановить фон под
 * старой позицией (heal по размерам img из заголовка) и вывести спрайт в
 * новой (putsprite).  Порядок heal→draw делает перекрытие старой и новой
 * позиций безопасным: heal читает фон из ОЗУ-копии, которую спрайт
 * (банк 0x5C) никогда не трогал.
 *
 * Идёт через лин-ядро _gfx_heal_sprite (без split'а, 8-бит w/h) — банк
 * на время heal форсится 0x50 (иначе heal бессмыслен), затем putsprite.
 * Спрайтовая программа не тянет общие *_full.
 *
 * Канонический цикл анимации — docs/sprite-api-design.md §6:
 *   putsprite(x, y, hero); ...
 *   gfx_wait_vsync(); movesprite(x, y, nx, ny, hero);
 */
#include "../_bgi.h"

void movesprite(int oldx, int oldy, int x, int y, const void *img)
{
    const uint8_t *p = (const uint8_t *)img;
    uint8_t saved = gfx_get_bank();

    gfx_set_bank(GFX_BANK_NORMAL);
    _bgi_begin();
    (*_gfx_heal_fn)(oldx, oldy, p[0], p[2]);
    _bgi_end();
    gfx_set_bank(saved);

    putsprite(x, y, img);
}
