(svn r38) Preliminary slopes graphics fix. Neighboring tile check not done yet
authordominik
Fri, 13 Aug 2004 11:28:59 +0000
changeset 37 61bf1df68d82
parent 36 c1b3b884584e
child 38 d20549a6ea13
(svn r38) Preliminary slopes graphics fix. Neighboring tile check not done yet
data/trkfoundw.grf
landscape.c
readme.txt
spritecache.c
table/landscape_sprite.h
ttd.h
Binary file data/trkfoundw.grf has changed
--- a/landscape.c	Thu Aug 12 22:43:11 2004 +0000
+++ b/landscape.c	Fri Aug 13 11:28:59 2004 +0000
@@ -241,19 +241,33 @@
 	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
 		);
 		
--- a/readme.txt	Thu Aug 12 22:43:11 2004 +0000
+++ b/readme.txt	Fri Aug 13 11:28:59 2004 +0000
@@ -211,9 +211,8 @@
   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 @@
   Michael Polnick - Some patches
   Michael Blunck - Nice graphics
   George - Canal graphics
+  Bug Reporters - Thanks for all bug reports.
   Chris Sawyer - For an amazing game.
   
--- a/spritecache.c	Thu Aug 12 22:43:11 2004 +0000
+++ b/spritecache.c	Fri Aug 13 11:28:59 2004 +0000
@@ -71,6 +71,13 @@
 	_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 @@
 	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 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 @@
 			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++);
--- a/table/landscape_sprite.h	Thu Aug 12 22:43:11 2004 +0000
+++ b/table/landscape_sprite.h	Fri Aug 13 11:28:59 2004 +0000
@@ -132,3 +132,31 @@
 };
 
 
+/* 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,
+};
+
--- a/ttd.h	Thu Aug 12 22:43:11 2004 +0000
+++ b/ttd.h	Fri Aug 13 11:28:59 2004 +0000
@@ -468,8 +468,9 @@
 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 {