Changeset - r7772:260dc421b905
[Not reviewed]
master
0 4 0
rubidium - 17 years ago 2007-10-20 21:39:50
rubidium@openttd.org
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
4 files changed with 47 insertions and 23 deletions:
0 comments (0 inline, 0 general)
src/gfxinit.cpp
Show inline comments
 
@@ -74,33 +74,38 @@ static uint LoadGrfFile(const char* file
 
}
 

	
 

	
 
void LoadSpritesIndexed(int file_index, uint *sprite_id, const SpriteID *index_tbl)
 
{
 
	uint start;
 
	while ((start = *index_tbl++) != END) {
 
		uint end = *index_tbl++;
 

	
 
		if (start == SKIP) { // skip sprites (amount in second var)
 
			SkipSprites(end);
 
			(*sprite_id) += end;
 
		} else { // load sprites and use indexes from start to end
 
			do {
 
			#ifdef NDEBUG
 
				LoadNextSprite(start, file_index, *sprite_id);
 
			#else
 
				bool b = LoadNextSprite(start, file_index, *sprite_id);
 
				assert(b);
 
			#endif
 
				(*sprite_id)++;
 
			} while (++start <= end);
 
		}
 
	}
 
}
 

	
 
static void LoadGrfIndexed(const char* filename, const SpriteID* index_tbl, int file_index)
 
{
 
	uint start;
 
	uint sprite_id = 0;
 

	
 
	FioOpenFile(file_index, filename);
 

	
 
	DEBUG(sprite, 2, "Reading indexed grf-file '%s'", filename);
 

	
 
	while ((start = *index_tbl++) != END) {
 
		uint end = *index_tbl++;
 

	
 
		if (start == SKIP) { // skip sprites (amount in second var)
 
			SkipSprites(end);
 
			sprite_id += end;
 
		} else { // load sprites and use indexes from start to end
 
			do {
 
			#ifdef NDEBUG
 
				LoadNextSprite(start, file_index, sprite_id);
 
			#else
 
				bool b = LoadNextSprite(start, file_index, sprite_id);
 
				assert(b);
 
			#endif
 
				sprite_id++;
 
			} while (++start <= end);
 
		}
 
	}
 
	LoadSpritesIndexed(file_index, &sprite_id, index_tbl);
 
}
 

	
 

	
src/gfxinit.h
Show inline comments
 
@@ -7,5 +7,6 @@
 

	
 
void CheckExternalFiles();
 
void GfxLoadSprites();
 
void LoadSpritesIndexed(int file_index, uint *sprite_id, const SpriteID *index_tbl);
 

	
 
#endif /* GFXINIT_H */
src/newgrf.cpp
Show inline comments
 
@@ -45,6 +45,8 @@
 
#include "newgrf_commons.h"
 
#include "newgrf_townname.h"
 
#include "newgrf_industries.h"
 
#include "table/landscape_sprite.h"
 
#include "gfxinit.h"
 

	
 
/* TTDPatch extended GRF format codec
 
 * (c) Petr Baudis 2004 (GPL'd)
 
@@ -3232,6 +3234,7 @@ static void GraphicsNew(byte *buf, int l
 
	/* TODO */
 

	
 
	SpriteID replace = 0;
 
	const SpriteID *index_tbl = NULL;
 

	
 
	if (!check_length(len, 2, "GraphicsNew")) return;
 
	buf++;
 
@@ -3256,11 +3259,13 @@ static void GraphicsNew(byte *buf, int l
 
			break;
 

	
 
		case 0x06: // Foundations
 
			if (num != 74) {
 
				grfmsg(1, "GraphicsNew: Foundation graphics sprite count must be 74, skipping");
 
				return;
 
			switch (num) {
 
				case 74: replace = SPR_SLOPES_BASE; break;
 
				case 90: index_tbl = _slopes_action05_90; break;
 
				default:
 
					grfmsg(1, "GraphicsNew: Foundation graphics sprite count must be 74 or 90, skipping");
 
					return;
 
			}
 
			replace = SPR_SLOPES_BASE;
 
			break;
 

	
 
		case 0x08: // Canal graphics
 
@@ -3326,6 +3331,12 @@ static void GraphicsNew(byte *buf, int l
 
			return;
 
	}
 

	
 
	if (index_tbl != NULL) {
 
		grfmsg(2, "GraphicsNew: Loading %u sprites of type 0x%02X at indexed SpriteIDs", num, type);
 
		LoadSpritesIndexed(_file_index, &_nfo_line, index_tbl);
 
		return;
 
	}
 

	
 
	if (replace == 0) {
 
		grfmsg(2, "GraphicsNew: Loading %u sprites of type 0x%02X at SpriteID 0x%04X", num, type, _cur_spriteid);
 
	} else {
src/table/landscape_sprite.h
Show inline comments
 
@@ -197,3 +197,10 @@ static const SpriteID _halftile_foundati
 
	SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
 
	END
 
};
 

	
 
/* Slope graphics indexes for Action 05 type 06, 90 sprites */
 
static const SpriteID _slopes_action05_90[] = {
 
	SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE,
 
	SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
 
	END
 
};
0 comments (0 inline, 0 general)