Changeset - r6541:639dad125026
[Not reviewed]
master
0 3 0
maedhros - 17 years ago 2007-04-27 21:35:02
maedhros@openttd.org
(svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
3 files changed with 38 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/newgrf.cpp
Show inline comments
 
@@ -3764,7 +3764,7 @@ static void ParamSet(byte *buf, int len)
 
		case 0x9E: // Miscellaneous GRF features
 
			_misc_grf_features = res;
 
			/* Set train list engine width */
 
			_traininfo_vehicle_width = HASBIT(res, 3) ? 32 : 29;
 
			_traininfo_vehicle_width = HasGrfMiscBit(GMB_TRAIN_WIDTH_32_PIXELS) ? 32 : 29;
 
			break;
 

	
 
		default:
 
@@ -4811,3 +4811,8 @@ void LoadNewGRF(uint load_index, uint fi
 
	/* Call any functions that should be run after GRFs have been loaded. */
 
	AfterLoadGRFs();
 
}
 

	
 
bool HasGrfMiscBit(GrfMiscBit bit)
 
{
 
	return HASBIT(_misc_grf_features, bit);
 
}
src/newgrf.h
Show inline comments
 
@@ -23,6 +23,14 @@ enum GrfLoadingStage {
 

	
 
DECLARE_POSTFIX_INCREMENT(GrfLoadingStage);
 

	
 
enum GrfMiscBit {
 
	GMB_DESERT_TREES_FIELDS    = 0, // Unsupported.
 
	GMB_DESERT_PAVED_ROADS     = 1,
 
	GMB_FIELD_BOUNDING_BOX     = 2, // Unsupported.
 
	GMB_TRAIN_WIDTH_32_PIXELS  = 3,
 
	GMB_AMBIENT_SOUND_CALLBACK = 4, // Unsupported.
 
	GMB_CATENARY_ON_3RD_TRACK  = 5, // Unsupported.
 
};
 

	
 
struct GRFLabel {
 
	byte label;
 
@@ -85,4 +93,6 @@ void ReloadNewGRFData(); // in openttd.c
 

	
 
void CDECL grfmsg(int severity, const char *str, ...);
 

	
 
bool HasGrfMiscBit(GrfMiscBit bit);
 

	
 
#endif /* NEWGRF_H */
src/road_cmd.cpp
Show inline comments
 
@@ -26,6 +26,7 @@
 
#include "sound.h"
 
#include "yapf/yapf.h"
 
#include "depot.h"
 
#include "newgrf.h"
 

	
 

	
 
static uint CountRoadBits(RoadBits r)
 
@@ -662,6 +663,23 @@ const byte _road_sloped_sprites[14] = {
 
};
 

	
 
/**
 
 * Whether to draw unpaved roads regardless of the town zone.
 
 * By default, OpenTTD always draws roads as unpaved if they are on a desert
 
 * tile or above the snowline. Newgrf files, however, can set a bit that allows
 
 * paved roads to be built on desert tiles as they would be on grassy tiles.
 
 *
 
 * @param tile The tile the road is on
 
 * @param roadside What sort of road this is
 
 * @return True if the road should be drawn unpaved regardless of the roadside.
 
 */
 
static bool AlwaysDrawUnpavedRoads(TileIndex tile, Roadside roadside)
 
{
 
	return (IsOnSnow(tile) &&
 
			!(_opt.landscape == LT_TROPIC && HasGrfMiscBit(GMB_DESERT_PAVED_ROADS) &&
 
				roadside != ROADSIDE_BARREN && roadside != ROADSIDE_GRASS && roadside != ROADSIDE_GRASS_ROAD_WORKS));
 
}
 

	
 
/**
 
 * Draw ground sprite and road pieces
 
 * @param ti TileInfo
 
 */
 
@@ -687,7 +705,7 @@ static void DrawRoadBits(TileInfo* ti)
 

	
 
	roadside = GetRoadside(ti->tile);
 

	
 
	if (IsOnSnow(ti->tile)) {
 
	if (AlwaysDrawUnpavedRoads(ti->tile, roadside)) {
 
		image += 19;
 
	} else {
 
		switch (roadside) {
 
@@ -729,6 +747,7 @@ static void DrawTile_Road(TileInfo *ti)
 
		case ROAD_TILE_CROSSING: {
 
			SpriteID image;
 
			SpriteID pal = PAL_NONE;
 
			Roadside roadside = GetRoadside(ti->tile);
 

	
 
			if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, ti->tileh);
 

	
 
@@ -737,10 +756,10 @@ static void DrawTile_Road(TileInfo *ti)
 
			if (GetCrossingRoadAxis(ti->tile) == AXIS_X) image++;
 
			if (IsCrossingBarred(ti->tile)) image += 2;
 

	
 
			if (IsOnSnow(ti->tile)) {
 
			if (AlwaysDrawUnpavedRoads(ti->tile, roadside)) {
 
				image += 8;
 
			} else {
 
				switch (GetRoadside(ti->tile)) {
 
				switch (roadside) {
 
					case ROADSIDE_BARREN: pal = PALETTE_TO_BARE_LAND; break;
 
					case ROADSIDE_GRASS:  break;
 
					default:              image += 4; break; // Paved
0 comments (0 inline, 0 general)