From fc9ebd257f4f5d033dd52f54e8560b3f03ffd34e Mon Sep 17 00:00:00 2001 From: rubidium Date: Sat, 20 Oct 2007 20:06:55 +0000 Subject: [PATCH] (svn r11316) -Codechange: add support for the half-tile (selection) graphics. --- bin/data/halffndw.grf | Bin 0 -> 21613 bytes bin/data/halfselw.grf | Bin 0 -> 2844 bytes src/gfxinit.cpp | 18 ++++++++++----- src/landscape.cpp | 41 ++++++++++++++++++----------------- src/table/files.h | 2 ++ src/table/landscape_sprite.h | 40 ++++++++++++++++++++++++++++++---- src/table/sprites.h | 17 ++++++++++++--- 7 files changed, 86 insertions(+), 32 deletions(-) create mode 100644 bin/data/halffndw.grf create mode 100644 bin/data/halfselw.grf diff --git a/bin/data/halffndw.grf b/bin/data/halffndw.grf new file mode 100644 index 0000000000000000000000000000000000000000..8fe4ad447aa25c5acba4a18e7bfb31d92763298f GIT binary patch literal 21613 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 literal 0 HcmV?d00001 diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index cba9c54616..f5263aad48 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -28,11 +28,6 @@ struct FileList { MD5File landscape[3]; ///< landscape specific grf files }; -enum { - SKIP = 0xFFFE, - END = 0xFFFF -}; - #include "table/files.h" #include "table/landscape_sprite.h" @@ -49,6 +44,13 @@ static const SpriteID * const _slopes_spriteindexes[] = { _slopes_spriteindexes_3, }; +static const SpriteID * const _halftile_foundation_spriteindexes[] = { + _halftile_foundation_spriteindexes_0, + _halftile_foundation_spriteindexes_1, + _halftile_foundation_spriteindexes_2, + _halftile_foundation_spriteindexes_3, +}; + static uint LoadGrfFile(const char* filename, uint load_index, int file_index) { @@ -386,6 +388,12 @@ static void LoadSpriteTables() load_index++; // SPR_EMPTY_BOUNDING_BOX + assert(load_index == SPR_HALFTILE_FOUNDATION_BASE); + LoadGrfIndexed("halffndw.grf", _halftile_foundation_spriteindexes[_opt.landscape], i++); + + load_index = SPR_HALFTILE_SELECTION_BASE; + load_index += LoadGrfFile("halfselw.grf", load_index, i++); + assert(load_index == SPR_FLAGS_BASE); load_index += LoadGrfFile("flags.grf", load_index, i++); diff --git a/src/landscape.cpp b/src/landscape.cpp index d4e25e7034..ddb1d73a86 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -308,23 +308,28 @@ void DrawFoundation(TileInfo *ti, Foundation f) { if (!IsFoundation(f)) return; - SpriteID sprite_base = SPR_SLOPES_VIRTUAL_BASE; + uint sprite_block = 0; uint z; Slope slope = GetFoundationSlope(ti->tile, &z); - if (!HasFoundationNW(ti->tile, slope, z)) sprite_base += SPR_SLOPES_NO_FOUNDATION_NW_OFFSET; - if (!HasFoundationNE(ti->tile, slope, z)) sprite_base += SPR_SLOPES_NO_FOUNDATION_NE_OFFSET; + /* Select the needed block of foundations sprites + * Block 0: Walls at NW and NE edge + * Block 1: Wall at NE edge + * Block 2: Wall at NW edge + * Block 3: No walls at NW or NE edge + */ + if (!HasFoundationNW(ti->tile, slope, z)) sprite_block += 1; + if (!HasFoundationNE(ti->tile, slope, z)) sprite_block += 2; + + /* Use the original slope sprites if NW and NE borders should be visible */ + SpriteID leveled_base = (sprite_block == 0 ? (int)SPR_FOUNDATION_BASE : (SPR_SLOPES_VIRTUAL_BASE + sprite_block * SPR_TRKFOUND_BLOCK_SIZE)); + SpriteID inclined_base = SPR_SLOPES_VIRTUAL_BASE + SPR_SLOPES_INCLINED_OFFSET + sprite_block * SPR_TRKFOUND_BLOCK_SIZE; + //SpriteID halftile_base = SPR_HALFTILE_FOUNDATION_BASE + sprite_block * SPR_HALFTILE_BLOCK_SIZE; if (IsSteepSlope(ti->tileh)) { - SpriteID lower_base; - - /* Lower part of foundation - * Use the original slope sprites if NW and NE borders should be visible - */ - lower_base = sprite_base; - if (lower_base == SPR_SLOPES_VIRTUAL_BASE) lower_base = SPR_FOUNDATION_BASE; + /* Lower part of foundation */ AddSortableSpriteToDraw( - lower_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z + leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z ); Corner highest_corner = GetHighestSlopeCorner(ti->tileh); @@ -334,13 +339,13 @@ void DrawFoundation(TileInfo *ti, Foundation f) /* inclined foundation */ byte inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); - AddSortableSpriteToDraw(sprite_base + SPR_SLOPES_INCLINED_OFFSET + inclined, PAL_NONE, ti->x, ti->y, 16, 16, 1, ti->z); + AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y, 16, 16, 1, ti->z); OffsetGroundSprite(31, 9); } else if (f >= FOUNDATION_STEEP_HIGHER) { /* three corners raised: * Draw inclined foundations for both axes, that results in the needed image. */ - SpriteID upper = sprite_base + SPR_SLOPES_INCLINED_OFFSET + highest_corner * 2; + SpriteID upper = inclined_base + highest_corner * 2; AddSortableSpriteToDraw(upper, PAL_NONE, ti->x, ti->y, 16, 16, 1, ti->z); AddChildSpriteScreen(upper + 1, PAL_NONE, 31, 9); @@ -351,18 +356,14 @@ void DrawFoundation(TileInfo *ti, Foundation f) } } else { if (IsLeveledFoundation(f)) { - /* leveled foundation - * Use the original slope sprites if NW and NE borders should be visible - */ - if (sprite_base == SPR_SLOPES_VIRTUAL_BASE) sprite_base = SPR_FOUNDATION_BASE; - - AddSortableSpriteToDraw(sprite_base + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z); + /* leveled foundation */ + AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z); OffsetGroundSprite(31, 1); } else { /* inclined foundation */ byte inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); - AddSortableSpriteToDraw(sprite_base + SPR_SLOPES_INCLINED_OFFSET + inclined, PAL_NONE, ti->x, ti->y, 16, 16, 1, ti->z); + AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y, 16, 16, 1, ti->z); OffsetGroundSprite(31, 9); } ti->z += ApplyFoundationToSlope(f, &ti->tileh); diff --git a/src/table/files.h b/src/table/files.h index 98888c8d34..3deba561ae 100644 --- a/src/table/files.h +++ b/src/table/files.h @@ -65,5 +65,7 @@ static MD5File files_openttd[] = { { "group.grf", { 0xe8, 0x52, 0x5f, 0x1c, 0x3e, 0xf9, 0x91, 0x9d, 0x0f, 0x70, 0x8c, 0x8a, 0x21, 0xa4, 0xc7, 0x02 } }, { "tramtrkw.grf", { 0x83, 0x0a, 0xf4, 0x9f, 0x29, 0x10, 0x48, 0xfd, 0x76, 0xe9, 0xda, 0xac, 0x5d, 0xa2, 0x30, 0x45 } }, { "oneway.grf", { 0xbb, 0xc6, 0xa3, 0xb2, 0xb3, 0xa0, 0xc9, 0x3c, 0xc9, 0xee, 0x24, 0x7c, 0xb6, 0x51, 0x74, 0x63 } }, + { "halffndw.grf", { 0xf2, 0x10, 0xe0, 0xc1, 0xa1, 0xdc, 0xb3, 0x6e, 0x3f, 0xce, 0xb8, 0x98, 0x1a, 0x08, 0xb0, 0x67 } }, + { "halfselw.grf", { 0xf2, 0x12, 0x2e, 0x88, 0x58, 0x08, 0xc4, 0xa5, 0xbd, 0x91, 0xb3, 0xc2, 0x5b, 0x5a, 0xb9, 0xf4 } }, { "flags.grf", { 0xa1, 0xd7, 0x72, 0x75, 0x0e, 0x81, 0x86, 0x0e, 0xc9, 0xcd, 0xc2, 0x57, 0xb2, 0x19, 0xe1, 0x0c } }, }; diff --git a/src/table/landscape_sprite.h b/src/table/landscape_sprite.h index 88f5f48b1b..49b650e47b 100644 --- a/src/table/landscape_sprite.h +++ b/src/table/landscape_sprite.h @@ -1,5 +1,10 @@ /* $Id$ */ +enum { + SKIP = 0xFFFE, + END = 0xFFFF +}; + static const SpriteID _landscape_spriteindexes_1[] = { 0xF67, 0xF9F, 0xAAD, 0xAB0, @@ -138,7 +143,7 @@ END Skip first 3 sprites and only load the proper set */ static const SpriteID _slopes_spriteindexes_0[] = { SKIP, 3, - SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73, + SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE, END }; @@ -146,7 +151,7 @@ static const SpriteID _slopes_spriteindexes_0[] = { Skip first 79 sprites and only load the proper set */ static const SpriteID _slopes_spriteindexes_1[] = { SKIP, 79, - SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73, + SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE, END }; @@ -154,7 +159,7 @@ static const SpriteID _slopes_spriteindexes_1[] = { Skip first 155 sprites and only load the proper set */ static const SpriteID _slopes_spriteindexes_2[] = { SKIP, 155, - SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73, + SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE, END }; @@ -162,6 +167,33 @@ static const SpriteID _slopes_spriteindexes_2[] = { Skip first 231 sprites and only load the proper set */ static const SpriteID _slopes_spriteindexes_3[] = { SKIP, 231, - SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73, + SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE, + END +}; + +/* Halftile foundation indexes for temperate climate */ +static const SpriteID _halftile_foundation_spriteindexes_0[] = { + SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1, + END +}; + +/* Halftile foundation indexes for arctic climate */ +static const SpriteID _halftile_foundation_spriteindexes_1[] = { + SKIP, 16, + SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1, + END +}; + +/* Halftile foundation indexes for tropic climate */ +static const SpriteID _halftile_foundation_spriteindexes_2[] = { + SKIP, 32, + SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1, + END +}; + +/* Halftile foundation indexes for toyland climate */ +static const SpriteID _halftile_foundation_spriteindexes_3[] = { + SKIP, 48, + SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1, END }; diff --git a/src/table/sprites.h b/src/table/sprites.h index 787edccd70..ee9b6fa3fe 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -54,8 +54,9 @@ enum Sprites { SPR_SLOPES_BASE = SPR_CANALS_BASE + 70, SPR_SLOPES_INCLINED_OFFSET = 15, SPR_SLOPES_VIRTUAL_BASE = SPR_SLOPES_BASE - SPR_SLOPES_INCLINED_OFFSET, // The original foundations (see SPR_FOUNDATION_BASE below) are mapped before the additional foundations. - SPR_SLOPES_NO_FOUNDATION_NW_OFFSET = 22, // no wall on the NW edge of the tile. - SPR_SLOPES_NO_FOUNDATION_NE_OFFSET = 44, // no wall on the NE edge of the tile. + SPR_TRKFOUND_BLOCK_SIZE = 22, // The sprites in trkfoundw.grf are organized in blocks of 22. + + /* between slopes and autorail are 4 unused sprites */ SPR_AUTORAIL_BASE = SPR_SLOPES_BASE + 78, SPR_ELRAIL_BASE = SPR_AUTORAIL_BASE + 55, @@ -179,8 +180,18 @@ enum Sprites { /* Not really a sprite, but an empty bounding box. Used to construct bounding boxes, that help sorting the sprites, but do not have a sprite associated. */ SPR_EMPTY_BOUNDING_BOX = SPR_ONEWAY_BASE + 6, + /* Halftile foundations */ + SPR_HALFTILE_FOUNDATION_BASE = SPR_EMPTY_BOUNDING_BOX + 1, + SPR_HALFTILE_BLOCK_SIZE = 4, // The sprites in halffndw.grf are organized in blocks of 4. + + /* Halftile-selection sprites */ + SPR_HALFTILE_SELECTION_BASE = SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE, + SPR_HALFTILE_SELECTION_FLAT = SPR_HALFTILE_SELECTION_BASE, + SPR_HALFTILE_SELECTION_DOWN = SPR_HALFTILE_SELECTION_BASE + 4, + SPR_HALFTILE_SELECTION_UP = SPR_HALFTILE_SELECTION_BASE + 8, + /* Flags sprites (in same order as enum NetworkLanguage) */ - SPR_FLAGS_BASE = SPR_EMPTY_BOUNDING_BOX + 1, + SPR_FLAGS_BASE = SPR_HALFTILE_SELECTION_BASE + 12, /* Manager face sprites */ SPR_GRADIENT = 874, // background gradient behind manager face