Changeset - r37:ead8cba1b6f2
[Not reviewed]
master
0 5 1
dominik - 20 years ago 2004-08-13 11:28:59
dominik@openttd.org
(svn r38) Preliminary slopes graphics fix. Neighboring tile check not done yet
6 files changed with 81 insertions and 12 deletions:
0 comments (0 inline, 0 general)
data/trkfoundw.grf
Show inline comments
 
new file 100644
 
binary diff not shown
landscape.c
Show inline comments
 
@@ -238,25 +238,39 @@ uint GetSlopeZ(int x,  int y)
 
	assert(z < 256);
 
*/
 

	
 
	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
 
		);
 
		
 
		ti->tileh = _inclined_tileh[f - 15];
 
		OffsetGroundSprite(31, 9);
 
	}
readme.txt
Show inline comments
 
@@ -208,18 +208,18 @@ The OpenTTD team:
 
  Bjarni Corfitzen (Bjarni)      - MacOS port
 
  Cian Duffy (MYOB)              - BeOS port / manual writing
 
  Christian Rosentreter (tokaiz) - MorphOS/AmigaOS port
 
  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
 
  TrueLight - Some patches
 
  Michael Polnick - Some patches
 
  Michael Blunck - Nice graphics
 
  George - Canal graphics
 
  Bug Reporters - Thanks for all bug reports.
 
  Chris Sawyer - For an amazing game.
 
  
spritecache.c
Show inline comments
 
@@ -68,12 +68,19 @@ static const char * const _landscape_fil
 
static const uint16 * const _landscape_spriteindexes[] = {
 
	_landscape_spriteindexes_1,
 
	_landscape_spriteindexes_2,
 
	_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);
 

	
 
static void ReadSpriteHeaderSkipData(int num, int load_index)
 
{
 
@@ -207,12 +214,25 @@ static bool LoadNextSprite(int load_inde
 
	_sprite_lru_cur[load_index] = 0;
 
#endif
 

	
 
	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()
 
{
 
	byte check;
 
	FioSeekToFile(38); // Byte 38 has the value 0x21 in Windows version, 0x07 in DOS
 
	check = FioReadWord();
 
@@ -243,22 +263,26 @@ static int LoadGrfFile(const char *filen
 

	
 
	return load_index - load_index_org;
 
}
 

	
 
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);
 
		}
 
	}
 
}	
 

	
 
typedef size_t CDECL fread_t(void*,size_t,size_t,FILE*);
 

	
 
static bool HandleCachedSpriteHeaders(const char *filename, bool read)
 
@@ -666,12 +690,14 @@ static void LoadSpriteTables()
 

	
 
		{
 
			int l;
 
			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++);
 
		/* XXX: Only for debugging. Will be more generic. */
 
		
 
		for(j=0; j!=lengthof(_newgrf_files) && _newgrf_files[j]; j++)
table/landscape_sprite.h
Show inline comments
 
@@ -129,6 +129,34 @@ 0x10E4, 0x1133,
 
 0x511,  0x511,
 
 0x322,  0x322,
 
 0xffff,
 
};
 

	
 

	
 
/* 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,
 
};
 

	
ttd.h
Show inline comments
 
@@ -465,14 +465,15 @@ enum SpecialStrings {
 
	STR_SPEC_USERSTRING = 0xF801,
 
};
 

	
 
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 {
 
	OWNER_TOWN			= 0xf, // a town owns the tile
 
	OWNER_NONE			= 0x10,// nobody owns the tile
 
	OWNER_WATER			= 0x11,// "water" owns the tile
0 comments (0 inline, 0 general)