# HG changeset patch # User Peter Nelson # Date 2022-12-18 12:35:08 # Node ID e6b5eb3a99022926f0a3d9982740bbbac65fbba4 # Parent b1cb0e0a0887aed223a17d2fae12d6f7557ddbc2 Change: Separate ground sprite from foundation sprite offsets. diff --git a/src/landscape.cpp b/src/landscape.cpp --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -516,26 +516,27 @@ void DrawFoundation(TileInfo *ti, Founda f == FOUNDATION_INCLINED_Y ? 16 : 1, TILE_HEIGHT, ti->z ); - OffsetGroundSprite(31, 9); + OffsetGroundSprite(0, 0); } else if (IsLeveledFoundation(f)) { AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z - TILE_HEIGHT); - OffsetGroundSprite(31, 1); + OffsetGroundSprite(0, -8); } else if (f == FOUNDATION_STEEP_LOWER) { /* one corner raised */ - OffsetGroundSprite(31, 1); + OffsetGroundSprite(0, -8); } else { /* halftile foundation */ int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? 8 : 0); int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? 8 : 0); AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, 8, 8, 7, ti->z + TILE_HEIGHT); - OffsetGroundSprite(31, 9); + Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb}; + OffsetGroundSprite(-pt.x, -pt.y); } } else { if (IsLeveledFoundation(f)) { /* leveled foundation */ AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z); - OffsetGroundSprite(31, 1); + OffsetGroundSprite(0, -8); } else if (IsNonContinuousFoundation(f)) { /* halftile foundation */ Corner halftile_corner = GetHalftileFoundationCorner(f); @@ -543,7 +544,8 @@ void DrawFoundation(TileInfo *ti, Founda int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? 8 : 0); AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, 8, 8, 7, ti->z); - OffsetGroundSprite(31, 9); + Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb}; + OffsetGroundSprite(-pt.x, -pt.y); } else if (IsSpecialRailFoundation(f)) { /* anti-zig-zag foundation */ SpriteID spr; @@ -555,7 +557,7 @@ void DrawFoundation(TileInfo *ti, Founda spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0); } AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z); - OffsetGroundSprite(31, 9); + OffsetGroundSprite(0, 0); } else { /* inclined foundation */ byte inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); @@ -565,7 +567,7 @@ void DrawFoundation(TileInfo *ti, Founda f == FOUNDATION_INCLINED_Y ? 16 : 1, TILE_HEIGHT, ti->z ); - OffsetGroundSprite(31, 9); + OffsetGroundSprite(0, 0); } ti->z += ApplyPixelFoundationToSlope(f, &ti->tileh); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2921,7 +2921,7 @@ static void DrawTile_Station(TileInfo *t EndSpriteCombine(); } - OffsetGroundSprite(31, 1); + OffsetGroundSprite(0, -8); ti->z += ApplyPixelFoundationToSlope(FOUNDATION_LEVELED, &ti->tileh); } else { draw_default_foundation: diff --git a/src/viewport.cpp b/src/viewport.cpp --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -538,7 +538,7 @@ static void AddChildSpriteToFoundation(S int *old_child = _vd.last_child; _vd.last_child = _vd.last_foundation_child[foundation_part]; - AddChildSpriteScreen(image, pal, offs.x + extra_offs_x, offs.y + extra_offs_y, false, sub, false); + AddChildSpriteScreen(image, pal, offs.x + extra_offs_x, offs.y + extra_offs_y, false, sub, false, false); /* Switch back to last ChildSprite list */ _vd.last_child = old_child; @@ -876,16 +876,18 @@ static void AddStringToDraw(int x, int y * @param ti TileInfo Tile that is being drawn * @param z_offset Z offset relative to the groundsprite. Only used for the sprite position, not for sprite sorting. * @param foundation_part Foundation part the sprite belongs to. + * @param extra_offs_x Pixel X offset for the sprite position. + * @param extra_offs_y Pixel Y offset for the sprite position. */ -static void DrawSelectionSprite(SpriteID image, PaletteID pal, const TileInfo *ti, int z_offset, FoundationPart foundation_part) +static void DrawSelectionSprite(SpriteID image, PaletteID pal, const TileInfo *ti, int z_offset, FoundationPart foundation_part, int extra_offs_x = 0, int extra_offs_y = 0) { /* FIXME: This is not totally valid for some autorail highlights that extend over the edges of the tile. */ if (_vd.foundation[foundation_part] == -1) { /* draw on real ground */ - AddTileSpriteToDraw(image, pal, ti->x, ti->y, ti->z + z_offset); + AddTileSpriteToDraw(image, pal, ti->x, ti->y, ti->z + z_offset, nullptr, extra_offs_x, extra_offs_y); } else { /* draw on top of foundation */ - AddChildSpriteToFoundation(image, pal, nullptr, foundation_part, 0, -z_offset * ZOOM_LVL_BASE); + AddChildSpriteToFoundation(image, pal, nullptr, foundation_part, extra_offs_x, extra_offs_y - z_offset * ZOOM_LVL_BASE); } }