diff options
-rw-r--r-- | data/trkfoundw.grf | bin | 0 -> 91558 bytes | |||
-rw-r--r-- | landscape.c | 18 | ||||
-rw-r--r-- | readme.txt | 4 | ||||
-rw-r--r-- | spritecache.c | 38 | ||||
-rw-r--r-- | table/landscape_sprite.h | 28 | ||||
-rw-r--r-- | ttd.h | 5 |
6 files changed, 81 insertions, 12 deletions
diff --git a/data/trkfoundw.grf b/data/trkfoundw.grf Binary files differnew file mode 100644 index 000000000..5fbfa36e9 --- /dev/null +++ b/data/trkfoundw.grf diff --git a/landscape.c b/landscape.c index 7f953d96d..7863b0e1f 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 ed78af3a5..0c63b8561 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 3bcc68d4b..21524a2e6 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 dfd9e84c8..2a4cf13b2 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, +}; + @@ -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 { |