static int tospritexdiw (int diw)
{
- return coord_window_to_hw_x (diw - (DIW_DDF_OFFSET << lores_shift)) << sprite_buffer_res;
+ int v = (coord_window_to_hw_x (diw) - DIW_DDF_OFFSET) << sprite_buffer_res;
+ v -= (1 << sprite_buffer_res) - 1;
+ return v;
}
static int tospritexddf (int ddf)
{
// if sprite is at the very edge of right border
point = hpos * 2;
if (hpos >= maxhpos)
- point += ((9 - 2) * 2) * sprite_buffer_res;
+ point += (9 - 2) * 2;
if (nodraw () || hpos < 0x14 || nr_armed == 0 || point == last_sprite_point)
return;
// Sprite hpos don't include DIW_DDF_OFFSET and can appear 1 lores pixel
// before first bitplane pixel appears.
// This means "bordersprite" condition is possible under OCS/ECS too. Argh!
+
if (dip_for_drawing->nr_sprites) {
if (!ce_is_borderblank(colors_for_drawing.extra)) {
/* bordersprite off or not supported: sprites are visible until diw_end */
stbuf -= epos;
stfmbuf -= epos;
- spr_pos = epos + ((DIW_DDF_OFFSET - DISPLAY_LEFT_SHIFT) << sprite_buffer_res);
+ spr_pos = epos - ((DISPLAY_LEFT_SHIFT - DIW_DDF_OFFSET) << sprite_buffer_res);
if (spr_pos < sprite_first_x)
sprite_first_x = spr_pos;