From 0c25a4b10ce61dad50f4e0c353fc582669d4f85f Mon Sep 17 00:00:00 2001 From: dominik Date: Fri, 13 Aug 2004 11:28:59 +0000 Subject: [PATCH] (svn r38) Preliminary slopes graphics fix. Neighboring tile check not done yet --- data/trkfoundw.grf | Bin 0 -> 91558 bytes landscape.c | 18 ++++++++++++++++-- readme.txt | 4 ++-- spritecache.c | 38 ++++++++++++++++++++++++++++++++------ table/landscape_sprite.h | 28 ++++++++++++++++++++++++++++ ttd.h | 5 +++-- 6 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 data/trkfoundw.grf diff --git a/data/trkfoundw.grf b/data/trkfoundw.grf new file mode 100644 index 0000000000000000000000000000000000000000..5fbfa36e98d44fedded8bc1b5ebc5e356d007084 GIT binary patch literal 91558 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 C{9Gph literal 0 HcmV?d00001 diff --git a/landscape.c b/landscape.c index 7f953d96df..7863b0e1fc 100644 --- a/landscape.c +++ b/landscape.c @@ -241,19 +241,33 @@ uint GetSlopeZ(int x, int y) return _tile_type_procs[ti.type]->get_slope_z_proc(&ti); } +/* TODO: add check if this tile has a foundation or not. Since this can't be done easily with the + current landscape arrays, we might have to add a new TileTypeProc. */ +bool hasFoundation(uint tile) +{ + return true; +} + void DrawFoundation(TileInfo *ti, uint f) { + uint32 sprite_base = SPR_SLOPES_BASE-14; + if(hasFoundation( TILE_FROM_XY(ti->x, ti->y-1) )) sprite_base += 22; // foundation in NW direction + if(hasFoundation( TILE_FROM_XY(ti->x-1, ti->y) )) sprite_base += 22*2; // foundation in NE direction + if (f < 15) { // leveled foundation - AddSortableSpriteToDraw(f + 0x3DE - 1, ti->x, ti->y, 16, 16, 7, ti->z); + if( sprite_base < SPR_SLOPES_BASE ) sprite_base = 990; // use original slope sprites + + AddSortableSpriteToDraw(f-1 + sprite_base, ti->x, ti->y, 16, 16, 7, ti->z); ti->z += 8; ti->tileh = 0; OffsetGroundSprite(31, 1); } else { // inclined foundation + sprite_base += 14; AddSortableSpriteToDraw( - HASBIT( (1<<1) | (1<<2) | (1<<4) | (1<<8), ti->tileh) ? (SPR_OPENTTD_BASE+17) + (f - 15) : ti->tileh + 0x3DE - 1, + HASBIT( (1<<1) | (1<<2) | (1<<4) | (1<<8), ti->tileh) ? sprite_base + (f - 15) : ti->tileh + 0x3DE - 1, ti->x, ti->y, 1, 1, 1, ti->z ); diff --git a/readme.txt b/readme.txt index ed78af3a57..0c63b85610 100644 --- a/readme.txt +++ b/readme.txt @@ -211,9 +211,8 @@ The OpenTTD team: Viktor Strigeus (wiggo) - Web hosting services Thanks to: - Bug Reporters - Thanks for all bug reports. Josef Drexler - For his great work on TTDPatch. - Marcin Grzegorczyk - For his TTDPatch work and documentation of TTD internals and graphics. + Marcin Grzegorczyk - For his TTDPatch work and documentation of TTD internals and graphics (signals and track foundations). Mike Ragsdale - OpenTTD installer pasky - Many patches, newgrf support, etc. truesatan - Some patches @@ -221,5 +220,6 @@ Thanks to: Michael Polnick - Some patches Michael Blunck - Nice graphics George - Canal graphics + Bug Reporters - Thanks for all bug reports. Chris Sawyer - For an amazing game. diff --git a/spritecache.c b/spritecache.c index 3bcc68d4b4..21524a2e6f 100644 --- a/spritecache.c +++ b/spritecache.c @@ -71,6 +71,13 @@ static const uint16 * const _landscape_spriteindexes[] = { _landscape_spriteindexes_3, }; +static const uint16 * const _slopes_spriteindexes[] = { + _slopes_spriteindexes_0, + _slopes_spriteindexes_1, + _slopes_spriteindexes_2, + _slopes_spriteindexes_3, +}; + static void CompactSpriteCache(); void DecodeSpecialSprite(const char *filename, int num, int load_index); @@ -210,6 +217,19 @@ static bool LoadNextSprite(int load_index, byte file_index) return true; } +static void SkipSprites(int count) +{ + while(count>0) + { + uint16 size; + if ( (size = FioReadWord()) == 0) + return; + + ReadSpriteHeaderSkipData(size, NUM_SPRITES-1); + count--; + } +} + // Checks, if trg1r.grf is the Windows version static bool CheckGrfFile() { @@ -246,16 +266,20 @@ static int LoadGrfFile(const char *filename, int load_index, int file_index) static void LoadGrfIndexed(const char *filename, const uint16 *index_tbl, int file_index) { - int start, end; + int start; FioOpenFile(file_index, filename); for(;(start=*index_tbl++) != 0xffff;) { - end = *index_tbl++; - do { - bool b = LoadNextSprite(start, file_index); - assert(b); - } while (++start <= end); + int end = *index_tbl++; + if(start==0xfffe) { // skip sprites (amount in second var) + SkipSprites(end); + } else { // load sprites and use indexes from start to end + do { + bool b = LoadNextSprite(start, file_index); + assert(b); + } while (++start <= end); + } } } @@ -669,6 +693,8 @@ static void LoadSpriteTables() if ((l=_sprite_page_to_load) != 0) LoadGrfIndexed(_landscape_filenames[l-1], _landscape_spriteindexes[l-1], i++); } + + LoadGrfIndexed("trkfoundw.grf", _slopes_spriteindexes[_opt.landscape], i++); load_index = SPR_CANALS_BASE; load_index += LoadGrfFile("canalsw.grf", load_index, i++); diff --git a/table/landscape_sprite.h b/table/landscape_sprite.h index dfd9e84c85..2a4cf13b2e 100644 --- a/table/landscape_sprite.h +++ b/table/landscape_sprite.h @@ -132,3 +132,31 @@ static const SpriteID _landscape_spriteindexes_3[] = { }; +/* Slope graphics indexes temperate climate */ +static const SpriteID _slopes_spriteindexes_0[] = { + 0xfffe, 3, + SPR_SLOPES_BASE, SPR_SLOPES_BASE+73, + 0xffff, +}; + +/* Slope graphics indexes arctic climate */ +static const SpriteID _slopes_spriteindexes_1[] = { + 0xfffe, 79, + SPR_SLOPES_BASE, SPR_SLOPES_BASE+73, + 0xffff, +}; + +/* Slope graphics indexes tropical climate */ +static const SpriteID _slopes_spriteindexes_2[] = { + 0xfffe, 155, + SPR_SLOPES_BASE, SPR_SLOPES_BASE+73, + 0xffff, +}; + +/* Slope graphics indexes toyland climate */ +static const SpriteID _slopes_spriteindexes_3[] = { + 0xfffe, 231, + SPR_SLOPES_BASE, SPR_SLOPES_BASE+73, + 0xffff, +}; + diff --git a/ttd.h b/ttd.h index 9d4b296342..6395c5c8cd 100644 --- a/ttd.h +++ b/ttd.h @@ -468,8 +468,9 @@ enum SpecialStrings { typedef void PlaceProc(uint tile); enum Sprites { - SPR_OPENTTD_BASE = 0x1406, - SPR_CANALS_BASE = SPR_OPENTTD_BASE + 80, + SPR_CANALS_BASE = 0x1406, + SPR_SLOPES_BASE = SPR_CANALS_BASE + 70, + SPR_OPENTTD_BASE = SPR_SLOPES_BASE + 74, }; enum MAP_OWNERS {