/* * atlas_sprite_init — инициализировать спрайт лентой idx W0-атласа. * Аналог sprite_init, но img/размер КАДРА берутся из каталога атласа * (заголовок ленты трогать нельзя — он в невидимой сейчас странице), * а page = страница атласа (sprite_update подключит её сам). * Кадр (0,0); кадр (i,j) ленты — sprite_frame(s, i*fw, j*fh). */ #include #include #include "../_bgi.h" void atlas_sprite_init(sprite_t *s, const atlas_t *a, uint8_t idx) { uint8_t saved = _io_page_w3; const uint8_t *e; sprinter_page_w3(a->page); e = (const uint8_t *)(0xC000 + _ATL_DIR_OFF) + (uint16_t)idx * 8; s->img = (const void *)(e[0] | (uint16_t)(e[1] << 8)); s->w = e[2]; /* fw — размер КАДРА */ s->h = e[3]; /* fh */ sprinter_page_w3(saved); s->x = 0; s->y = 0; s->sx = 0; s->sy = 0; s->flags = 0; s->page = a->page; s->an_flags = 0; /* авто-анимации выключены */ s->an_frame = 0; s->drawn[0].on = 0; s->drawn[1].on = 0; }