/** Draw a (transparent) sprite at given coordinates with a given bounding box.
* The bounding box extends from (x + bb_offset_x, y + bb_offset_y, z + bb_offset_z) to (x + w - 1, y + h - 1, z + dz - 1), both corners included.
* Bounding boxes with bb_offset_x == w or bb_offset_y == h or bb_offset_z == dz are allowed and produce thin slices.
*
* @note Bounding boxes are normally specified with bb_offset_x = bb_offset_y = bb_offset_z = 0. The extent of the bounding box in negative direction is
* defined by the sprite offset in the grf file.
* However if modifying the sprite offsets is not suitable (e.g. when using existing graphics), the bounding box can be tuned by bb_offset.
*
* @pre w > bb_offset_x, h > bb_offset_y, dz > bb_offset_z. Else w, h or dz are ignored.
* @pre w >= bb_offset_x, h >= bb_offset_y, dz >= bb_offset_z. Else w, h or dz are ignored.
*
* @param image the image to combine and draw,
* @param pal the provided palette,
* @param x position X (world) of the sprite,
* @param y position Y (world) of the sprite,
* @param w bounding box extent towards positive X (world),
* @param h bounding box extent towards positive Y (world),
* @param dz bounding box extent towards positive Z (world),
* @param z position Z (world) of the sprite,
* @param transparent if true, switch the palette between the provided palette and the transparent palette,
* @param bb_offset_x bounding box extent towards negative X (world),
* @param bb_offset_y bounding box extent towards negative Y (world),
@@ -566,31 +567,31 @@ void AddSortableSpriteToDraw(SpriteID im
if (ps->left >= vd->dpi.left + vd->dpi.width ||
right <= vd->dpi.left ||
ps->top >= vd->dpi.top + vd->dpi.height ||
bottom <= vd->dpi.top) {
return;
}
vd->spritelist_mem += sizeof(ParentSpriteToDraw);
ps->image = image;
ps->pal = pal;
ps->xmin = x + bb_offset_x;
ps->xmax = x + max(bb_offset_x, w - 1);
ps->xmax = x + max(bb_offset_x, w) - 1;
ps->ymin = y + bb_offset_y;
ps->ymax = y + max(bb_offset_y, h - 1);
ps->ymax = y + max(bb_offset_y, h) - 1;
ps->zmin = z + bb_offset_z;
ps->zmax = z + max(bb_offset_z, dz - 1);
ps->zmax = z + max(bb_offset_z, dz) - 1;
ps->comparison_done = false;
ps->child = NULL;
vd->last_child = &ps->child;
*vd->parent_list++ = ps;
if (vd->combine_sprites == 1) vd->combine_sprites = 2;