Changeset - r201:9dbb80b71da5
[Not reviewed]
master
0 10 0
truelight - 20 years ago 2004-09-11 09:55:19
truelight@openttd.org
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
all ;)
10 files changed with 283 insertions and 283 deletions:
0 comments (0 inline, 0 general)
industry_cmd.c
Show inline comments
 
@@ -194,7 +194,7 @@ static void IndustryDrawTileProc1(TileIn
 

	
 
	if (!(_map_owner[ti->tile] & 0x80))
 
		return;
 
	
 

	
 
	d = &_draw_industry_spec1[_map3_lo[ti->tile]];
 

	
 
	AddChildSpriteScreen(0x12A7 + d->image_1, d->x, 0);
 
@@ -203,14 +203,14 @@ static void IndustryDrawTileProc1(TileIn
 
		AddChildSpriteScreen(0x12B0 + image - 1, 8, 41);
 

	
 
	if ( (image = d->image_3) != 0)
 
		AddChildSpriteScreen(0x12AC + image - 1, 
 
		AddChildSpriteScreen(0x12AC + image - 1,
 
			_drawtile_proc1_x[image-1], _drawtile_proc1_y[image-1]);
 
}
 

	
 
static void IndustryDrawTileProc2(TileInfo *ti)
 
{
 
	int x = 0;
 
	
 

	
 
	if (_map_owner[ti->tile] & 0x80) {
 
		x = _industry_anim_offs[_map3_lo[ti->tile]];
 
		if ( (byte)x == 0xFF)
 
@@ -224,7 +224,7 @@ static void IndustryDrawTileProc2(TileIn
 
static void IndustryDrawTileProc3(TileInfo *ti)
 
{
 
	if (_map_owner[ti->tile] & 0x80) {
 
		AddChildSpriteScreen(0x128B, 5, 
 
		AddChildSpriteScreen(0x128B, 5,
 
			_industry_anim_offs_2[_map3_lo[ti->tile]]);
 
	}
 
	AddChildSpriteScreen(0x30B928A, 3, 67);
 
@@ -254,7 +254,7 @@ static void DrawCoalPlantSparkles(TileIn
 
	if (image & 0x80) {
 
		image = (image >> 2) & 0x1F;
 
		if (image != 0 && image < 7) {
 
			AddChildSpriteScreen(image + 0x806, 
 
			AddChildSpriteScreen(image + 0x806,
 
				_coal_plant_sparkles_x[image-1],
 
				_coal_plant_sparkles_y[image-1]
 
			);
 
@@ -305,11 +305,11 @@ static void DrawTile_Industry(TileInfo *
 

	
 
		if (image&0x8000 && (image & 0xFFFF0000) == 0)
 
			image |= ormod;
 
			
 

	
 
		if (!(_display_opt & DO_TRANS_BUILDINGS))
 
			image = (image & 0x3FFF) | 0x3224000;
 
		
 
		AddSortableSpriteToDraw(image, 
 

	
 
		AddSortableSpriteToDraw(image,
 
			ti->x | (dits->subtile_xy>>4),
 
			ti->y | (dits->subtile_xy&0xF),
 
			(dits->width_height>>4)+1,
 
@@ -321,7 +321,7 @@ static void DrawTile_Industry(TileInfo *
 
			return;
 
	}
 

	
 
	/* TTDBUG: strange code here, return if AddSortableSpriteToDraw failed?  */	
 
	/* TTDBUG: strange code here, return if AddSortableSpriteToDraw failed?  */
 
		{
 
		int proc;
 
		if ((proc=dits->proc-1) >= 0 )
 
@@ -406,15 +406,15 @@ int32 CmdDestroyIndustry(int x, int y, u
 

	
 
	// check if you're allowed to remove the industry. Minimum amount
 
	// of ratings to remove the industry depends on difficulty setting
 
	if (!CheckforTownRating(tile, flags, t, INDUSTRY_REMOVE)) 
 
	if (!CheckforTownRating(tile, flags, t, INDUSTRY_REMOVE))
 
		return CMD_ERROR;
 
		
 

	
 
	if (flags & DC_EXEC) {
 
		DeleteIndustry(i);
 
		CreateEffectVehicleAbove(x + 8,y + 8, 2, EV_DEMOLISH);
 
		ChangeTownRating(t, -1500, -1000);	// penalty is 1500
 
	}
 
	
 

	
 
	return (_price.build_industry >> 5) * _industry_type_costs[i->type]*2;
 
}
 
*/
 
@@ -435,7 +435,7 @@ void TransportIndustryGoods(uint tile)
 
	byte m5;
 

	
 
	i = DEREF_INDUSTRY(_map2[tile]);
 
	
 

	
 
	type = i->type;
 
	cw = min(i->cargo_waiting[0], 255);
 
	if (cw > _industry_min_cargo[type]/* && i->produced_cargo[0] != 0xFF*/) {
 
@@ -459,9 +459,9 @@ void TransportIndustryGoods(uint tile)
 
	cw = min(i->cargo_waiting[1], 255);
 
	if (cw > _industry_min_cargo[type]) {
 
		i->cargo_waiting[1] -= cw;
 
		
 

	
 
		if (_economy.fluct <= 0) cw = (cw + 1) >> 1;
 
		
 

	
 
		i->last_mo_production[1] += cw;
 

	
 
		am = MoveGoodsToStation(i->xy, i->width, i->height, i->produced_cargo[1], cw);
 
@@ -478,7 +478,7 @@ static void AnimateTile_Industry(uint ti
 
	case 174:
 
		if ((_tick_counter & 1) == 0) {
 
			m = _map3_lo[tile] + 1;
 
			
 

	
 
			switch(m & 7) {
 
			case 2:	SndPlayTileFx(45, tile); break;
 
			case 6: SndPlayTileFx(41, tile); break;
 
@@ -497,7 +497,7 @@ static void AnimateTile_Industry(uint ti
 
	case 165:
 
		if ((_tick_counter & 3) == 0) {
 
			m = _map3_lo[tile];
 
			
 

	
 
			if (_industry_anim_offs[m] == 0xFF) {
 
				SndPlayTileFx(48, tile);
 
			}
 
@@ -556,7 +556,7 @@ static void AnimateTile_Industry(uint ti
 
				_map3_hi[tile] = 0;
 
				DeleteAnimatedTile(tile);
 
			}
 
			_map3_lo[tile] = m;			
 
			_map3_lo[tile] = m;
 
			MarkTileDirtyByTile(tile);
 
		}
 
		break;
 
@@ -581,7 +581,7 @@ static void AnimateTile_Industry(uint ti
 
			if (m == 4 && (m=0,++n) == 32+1 && (n=30,b)) {
 
				_map_owner[tile] = 0x83;
 
				_map5[tile] = 29;
 
				DeleteAnimatedTile(tile);	
 
				DeleteAnimatedTile(tile);
 
			} else {
 
				_map5[tile] = n;
 
				_map_owner[tile] = (_map_owner[tile] & ~3) | m;
 
@@ -648,7 +648,7 @@ static void MakeIndustryTileBigger(uint 
 
	size = (size + 1) & 3;
 
	if (size == 3) size |= 0x80;
 
	_map_owner[tile] = size | b;
 
	
 

	
 
	MarkTileDirtyByTile(tile);
 

	
 
	if (!(_map_owner[tile] & 0x80))
 
@@ -692,7 +692,7 @@ static void TileLoopIndustryCase161(uint
 
	};
 

	
 
	SndPlayTileFx(46, tile);
 
	
 

	
 
	dir = Random() & 3;
 

	
 
	v = CreateEffectVehicleAbove(
 
@@ -783,7 +783,7 @@ static void TileLoop_Industry(uint tile)
 
		break;
 

	
 
	case 49: {
 
		CreateEffectVehicleAbove(GET_TILE_X(tile)*16 + 6, GET_TILE_Y(tile)*16 + 6, 43, EV_SMOKE_3); 
 
		CreateEffectVehicleAbove(GET_TILE_X(tile)*16 + 6, GET_TILE_Y(tile)*16 + 6, 43, EV_SMOKE_3);
 
	} break;
 

	
 

	
 
@@ -800,8 +800,8 @@ static void TileLoop_Industry(uint tile)
 

	
 
	case 161:
 
		TileLoopIndustryCase161(tile);
 
		break;		
 
	
 
		break;
 

	
 
	case 165:
 
		AddAnimatedTile(tile);
 
		break;
 
@@ -840,7 +840,7 @@ static void ChangeTileOwner_Industry(uin
 
void DeleteIndustry(Industry *i)
 
{
 
	int index = i - _industries;
 
	
 

	
 
	BEGIN_TILE_LOOP(tile_cur,	i->width, i->height, i->xy);
 
		if (IS_TILETYPE(tile_cur, MP_INDUSTRY)) {
 
			if (_map2[tile_cur] == (byte)index) {
 
@@ -850,7 +850,7 @@ void DeleteIndustry(Industry *i)
 
			DeleteOilRig(tile_cur);
 
		}
 
	END_TILE_LOOP(tile_cur,	i->width, i->height, i->xy);
 
	
 

	
 
	i->xy = 0;
 
	_industry_sort_dirty = true;
 
	DeleteSubsidyWithIndustry(index);
 
@@ -894,9 +894,9 @@ static void SetupFarmFieldFence(uint til
 

	
 
	do {
 
		tile = TILE_MASK(tile);
 
		
 

	
 
		if (IS_TILETYPE(tile, MP_CLEAR) || IS_TILETYPE(tile, MP_TREES)) {
 
			
 

	
 
			or = type;
 
			if (or == 1 && (uint16)Random() <= 9362) or = 2;
 

	
 
@@ -908,7 +908,7 @@ static void SetupFarmFieldFence(uint til
 
			}
 
			_map3_hi[tile] = (_map3_hi[tile] & and) | or;
 
		}
 
		
 

	
 
		tile += direction ? TILE_XY(0,1) : TILE_XY(1,0);
 
	} while (--size);
 
}
 
@@ -933,7 +933,7 @@ static void PlantFarmField(uint tile)
 

	
 
	/* offset tile to match size */
 
	tile = tile - TILE_XY(size_x>>1, size_y>>1);
 
	
 

	
 
	/* check the amount of bad tiles */
 
	count = 0;
 
	BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile)
 
@@ -952,15 +952,15 @@ static void PlantFarmField(uint tile)
 
	BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile)
 
		cur_tile = TILE_MASK(cur_tile);
 
		if (!IsBadFarmFieldTile2(cur_tile)) {
 
			ModifyTile(cur_tile, 
 
				MP_SETTYPE(MP_CLEAR) | 
 
			ModifyTile(cur_tile,
 
				MP_SETTYPE(MP_CLEAR) |
 
				MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAPOWNER | MP_MAP5,
 
				type2,			/* map3_lo */
 
				OWNER_NONE,	/* map_owner */
 
				type);			/* map5 */
 
		}
 
	END_TILE_LOOP(cur_tile, size_x, size_y, tile)
 
	
 

	
 
	type = 3;
 
	if (_opt.landscape != LT_HILLY && _opt.landscape != LT_DESERT) {
 
		type = _plantfarmfield_type[Random() & 0xF];
 
@@ -979,13 +979,13 @@ static void MaybePlantFarmField(Industry
 
		tile = TileAddWrap(i->xy, ((i->width>>1) + Random() % 31 - 16), ((i->height>>1) + Random() % 31 - 16));
 
		if (tile != TILE_WRAPPED)
 
			PlantFarmField(tile);
 
	}	
 
	}
 
}
 

	
 
static void ChopLumberMillTrees(Industry *i)
 
{
 
	static const TileIndexDiff _chop_dir[4] = { TILE_XY(0,1), TILE_XY(1,0), TILE_XY(0,-1), TILE_XY(-1,0) };
 
	
 

	
 
	uint tile = i->xy;
 
	int dir, a, j;
 

	
 
@@ -1096,9 +1096,9 @@ void OnTick_Industry()
 
		_industry_sound_ctr++;
 

	
 
		if (_industry_sound_ctr == 75) {
 
			SndPlayTileFx(55, _industry_sound_tile); 
 
			SndPlayTileFx(55, _industry_sound_tile);
 
		} else if (_industry_sound_ctr == 160) {
 
			_industry_sound_ctr = 0;	
 
			_industry_sound_ctr = 0;
 
			SndPlayTileFx(54, _industry_sound_tile);
 
		}
 
	}
 
@@ -1134,7 +1134,7 @@ extern bool _ignore_restrictions;
 
static bool CheckNewIndustry_Oilwell(uint tile, int type)
 
{
 
	int x,y;
 
	
 

	
 
	if(_ignore_restrictions && _game_mode == GM_EDITOR)
 
		return true;
 

	
 
@@ -1230,7 +1230,7 @@ static Town *CheckMultipleIndustryInTown
 
	Industry *i;
 

	
 
	t = ClosestTownFromTile(tile, (uint)-1);
 
	
 

	
 
	if (_patches.multiple_industry_per_town)
 
		return t;
 

	
 
@@ -1285,9 +1285,9 @@ static bool CheckIfIndustryTilesAreFree(
 
				continue;
 
			return false;
 
		}
 
			
 

	
 
		FindLandscapeHeightByTile(&ti, cur_tile);
 
		
 

	
 
		if (it->map5 == 0xFF) {
 
			if (ti.type != MP_WATER || ti.tileh != 0)
 
				return false;
 
@@ -1310,7 +1310,7 @@ static bool CheckIfIndustryTilesAreFree(
 

	
 
					if (bits & 0x10)
 
						return false;
 
					
 

	
 
					t = ~ti.tileh;
 

	
 
					if (bits & 1 && (t & (1+8)))
 
@@ -1344,7 +1344,7 @@ static bool CheckIfIndustryTilesAreFree(
 
					if (ti.type != MP_HOUSE) {
 
						_error_message = STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS;
 
						return false;
 
					}					
 
					}
 
				} else {
 
do_clear:
 
					if (DoCommandByTile(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR) == CMD_ERROR)
 
@@ -1366,7 +1366,7 @@ static bool CheckIfTooCloseToIndustry(ui
 
	// accepting industries won't be close, not even with patch
 
	if (_patches.same_industry_close && (spec->accepts_cargo[0] == 0xFF) )
 
		return true;
 
	
 

	
 
	for(i=_industries; i != endof(_industries); i++) {
 
		// check if an industry that accepts the same goods is nearby
 
		if (i->xy != 0 &&
 
@@ -1451,7 +1451,7 @@ static void DoCreateNewIndustry(Industry
 

	
 
	if (_generating_world == 0)
 
		i->total_production[0] = i->total_production[1] = 0;
 
	
 

	
 
	i->prod_level = 0x10;
 

	
 
	do {
 
@@ -1512,7 +1512,7 @@ int32 CmdBuildIndustry(int x, int y, uin
 

	
 
	if ((t=CheckMultipleIndustryInTown(tile, p1)) == NULL)
 
		return CMD_ERROR;
 
	
 

	
 
	num = spec->num_table;
 
	itt = spec->table;
 

	
 
@@ -1530,7 +1530,7 @@ int32 CmdBuildIndustry(int x, int y, uin
 

	
 
	if (flags & DC_EXEC)
 
		DoCreateNewIndustry(i, tile, p1, it, t, 0x10);
 
	
 

	
 
	return (_price.build_industry >> 5) * _industry_type_costs[p1];
 
}
 

	
 
@@ -1567,7 +1567,7 @@ Industry *CreateNewIndustry(uint tile, i
 
		return NULL;
 

	
 
	DoCreateNewIndustry(i, tile, type, it, t, 0x10);
 
	
 

	
 
	return i;
 
}
 

	
 
@@ -1590,7 +1590,7 @@ static void PlaceInitialIndustry(byte ty
 
			int i = 2000;
 
			do {
 
				if (CreateNewIndustry(TILE_MASK(Random()), type) != NULL)
 
					break; 
 
					break;
 
			} while (--i != 0);
 
		} while (--num);
 
	}
 
@@ -1627,7 +1627,7 @@ static void ExtChangeIndustryProduction(
 
			change = old = i->production_rate[j];
 
			if (CHANCE16R(20,1024,r))change -= ((RandomRange(50) + 10)*old) >> 8;
 
			if (CHANCE16I(20+(i->pct_transported[j]*20>>8),1024,r>>16)) change += ((RandomRange(50) + 10)*old) >> 8;
 
			
 

	
 
			// make sure it doesn't exceed 255 or goes below 0
 
			change = clamp(change, 0, 255);
 
			if (change == old) {
 
@@ -1640,14 +1640,14 @@ static void ExtChangeIndustryProduction(
 

	
 
			if (change >= _industry_spec[i->type].production_rate[j]/4)
 
				closeit = false;
 
				
 

	
 
			mag = abs(percent);
 
			if (mag >= 10) {
 
				SET_DPARAM16(3, mag);
 
				SET_DPARAM16(0,_cargoc.names_s[i->produced_cargo[j]]);
 
				SET_DPARAM16(1, i->town->index);
 
				SET_DPARAM16(2, i->type + STR_4802_COAL_MINE);
 
				AddNewsItem(percent>=0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN, 
 
				AddNewsItem(percent>=0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
 
						NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ECONOMY, 0),
 
						i->xy + TILE_XY(1,1), 0);
 
			}
 
@@ -1666,13 +1666,13 @@ static void ExtChangeIndustryProduction(
 
static void UpdateIndustryStatistics(Industry *i)
 
{
 
	byte pct;
 
	
 
	if (i->produced_cargo[0] != 0xFF) {		
 

	
 
	if (i->produced_cargo[0] != 0xFF) {
 
		pct = 0;
 
		if (i->last_mo_production[0] != 0) {
 
			i->last_prod_year = _cur_year;
 
			pct = min(i->last_mo_transported[0] * 256 / i->last_mo_production[0],255);
 
		} 
 
		}
 
		i->pct_transported[0] = pct;
 

	
 
		i->total_production[0] = i->last_mo_production[0];
 
@@ -1687,7 +1687,7 @@ static void UpdateIndustryStatistics(Ind
 
		if (i->last_mo_production[1] != 0) {
 
			i->last_prod_year = _cur_year;
 
			pct = min(i->last_mo_transported[1] * 256 / i->last_mo_production[1],255);
 
		} 
 
		}
 
		i->pct_transported[1] = pct;
 

	
 
		i->total_production[1] = i->last_mo_production[1];
 
@@ -1747,7 +1747,7 @@ static void MaybeCloseIndustry(Industry 
 
	uint32 r;
 
	StringID str;
 
	int type = i->type;
 
			
 

	
 
	if (_industry_close_mode[type] == 1) {
 
		/* decrease or increase */
 
		if (type == IT_OIL_WELL && _opt.landscape == LT_NORMAL) goto decrease_production;
 
@@ -1759,14 +1759,14 @@ static void MaybeCloseIndustry(Industry 
 
					byte b;
 

	
 
					i->prod_level <<= 1;
 
					
 

	
 
					b = i->production_rate[0]*2;
 
					if (i->production_rate[0] >= 128) b=255;
 
					i->production_rate[0] = b;
 
					b = i->production_rate[1]*2;
 
					if (i->production_rate[1] >= 128) b=255;
 
					i->production_rate[1] = b;
 
					
 

	
 
					str = _industry_prod_up_strings[type];
 
					goto add_news;
 
				}
 
@@ -1782,7 +1782,7 @@ decrease_production:
 
				str = _industry_prod_down_strings[type];
 
				goto add_news;
 
			}
 
		} 
 
		}
 
	} else if (_industry_close_mode[type] > 1) {
 
		/* maybe close */
 
		if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1,2)) {
misc.c
Show inline comments
 
@@ -95,7 +95,7 @@ void InitializeGame()
 
	_date_fract = 0;
 
	_cur_tileloop_tile = 0;
 
	_vehicle_id_ctr_day = 0;
 
	
 

	
 
	{
 
		uint starting = ConvertIntDate(_patches.starting_date);
 
		if ( starting == (uint)-1) starting = 10958;
 
@@ -119,7 +119,7 @@ void InitializeGame()
 
	InitializeTrees();
 
	InitializeStations();
 
	InitializeIndustries();
 
	
 

	
 
	InitializeNameMgr();
 
	InitializeVehiclesGuiList();
 
	InitializeTrains();
 
@@ -153,7 +153,7 @@ void GenerateWorld(int mode)
 
	} else {
 
		GenerateLandscape();
 
		GenerateClearTile();
 
		
 

	
 
		// only generate towns, tree and industries in newgame mode.
 
		if (mode == 0) {
 
			GenerateTowns();
 
@@ -163,7 +163,7 @@ void GenerateWorld(int mode)
 
		}
 
	}
 

	
 
	// These are probably pointless when inside the scenario editor.	
 
	// These are probably pointless when inside the scenario editor.
 
	StartupPlayers();
 
	StartupEngines();
 
	StartupDisasters();
 
@@ -211,7 +211,7 @@ byte *GetName(int id, byte *buff)
 

	
 
void InitializeCheats()
 
{
 
	memset(&_cheats, 0, sizeof(Cheats)); 
 
	memset(&_cheats, 0, sizeof(Cheats));
 
}
 

	
 

	
 
@@ -250,7 +250,7 @@ StringID AllocateName(const byte *name, 
 

	
 
	for(i=0; (dst[i] = name[i]) != 0 && ++i != 32; ) {}
 
	dst[31] = 0;
 
		
 

	
 
	return free_item | 0x7800 | (skip << 8);
 
}
 

	
 
@@ -319,7 +319,7 @@ void ConvertDayToYMD(YearMonthDay *ymd, 
 
	}
 

	
 
	ymd->year = yr;
 
		
 

	
 
	x = _month_date_from_year_day[rem];
 
	ymd->month = x >> 5;
 
	ymd->day = x & 0x1F;
 
@@ -331,7 +331,7 @@ void ConvertDayToYMD(YearMonthDay *ymd, 
 
uint ConvertYMDToDay(uint year, uint month, uint day)
 
{
 
	uint rem;
 
	
 

	
 
	// day in the year
 
	rem = _accum_days_for_month[month] + day - 1;
 

	
 
@@ -355,11 +355,11 @@ uint ConvertIntDate(uint date)
 
	if (IS_INT_INSIDE(date, 1920, 2090 + 1)) {
 
		year = date - 1920;
 
	} else if (IS_INT_INSIDE(date, 192001, 209012+1)) {
 
		month = date % 100 - 1;	
 
		month = date % 100 - 1;
 
		year = date / 100 - 1920;
 
	} else if (IS_INT_INSIDE(date, 19200101, 20901231+1)) {
 
		day = date % 100; date /= 100;
 
		month = date % 100 - 1;	
 
		month = date % 100 - 1;
 
		year = date / 100 - 1920;
 
	} else if (IS_INT_INSIDE(date, 2091, 65536))
 
		return date;
 
@@ -405,7 +405,7 @@ void InitializeLandscapeVariables(bool o
 

	
 
	for(i=0; i!=NUM_CARGO; i++) {
 
		_cargoc.sprites[i] = lpd->sprites[i];
 
		
 

	
 
		str = lpd->names[i];
 
		_cargoc.names_s[i] = str;
 
		_cargoc.names_p[i] = (str += 0x20);
 
@@ -413,7 +413,7 @@ void InitializeLandscapeVariables(bool o
 
		_cargoc.names_long_p[i] = (str += 0x20);
 
		_cargoc.names_short[i] = (str += 0x20);
 
		_cargoc.weights[i] = lpd->weights[i];
 
		
 

	
 
		if (!only_constants) {
 
			_cargo_payment_rates[i] = lpd->initial_cargo_payment[i];
 
			_cargo_payment_rates_frac[i] = 0;
 
@@ -427,7 +427,7 @@ void InitializeLandscapeVariables(bool o
 
// distance in Manhattan metric
 
uint GetTileDist(TileIndex xy1, TileIndex xy2)
 
{
 
	return myabs(GET_TILE_X(xy1) - GET_TILE_X(xy2)) + 
 
	return myabs(GET_TILE_X(xy1) - GET_TILE_X(xy2)) +
 
				myabs(GET_TILE_Y(xy1) - GET_TILE_Y(xy2));
 
}
 

	
 
@@ -536,7 +536,7 @@ void IncreaseDate()
 

	
 
	/* increase day, and check if a new day is there? */
 
	_tick_counter++;
 
	
 

	
 
	if ( (_date_fract += 885) >= 885)
 
		return;
 

	
 
@@ -582,7 +582,7 @@ void IncreaseDate()
 
		return;
 
	_cur_year = ymd.year;
 

	
 
	/* yes, call various yearly loops */ 
 
	/* yes, call various yearly loops */
 

	
 
	PlayersYearlyLoop();
 
	TrainsYearlyLoop();
 
@@ -648,14 +648,14 @@ static void Save_NAME()
 
		if (*b) {
 
			SlSetArrayIndex(i);
 
			SlArray(b, strlen(b), SLE_UINT8);
 
		}	
 
		}
 
	}
 
}
 

	
 
static void Load_NAME()
 
{
 
	int index;
 
	
 

	
 
	while ((index = SlIterateArray()) != -1) {
 
		SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8);
 
	}
 
@@ -679,7 +679,7 @@ static const byte _game_opt_desc[] = {
 
// Save load game options
 
static void SaveLoad_OPTS()
 
{
 
	SlObject(&_opt, _game_opt_desc);	
 
	SlObject(&_opt, _game_opt_desc);
 
}
 

	
 

	
pathfind.h
Show inline comments
 
@@ -36,7 +36,7 @@ struct TrackPathFinder {
 
	TPFEnumProc *enum_proc;
 

	
 
	void *userdata;
 
	
 

	
 
	RememberData rd;
 

	
 
	int the_dir;
players.c
Show inline comments
 
@@ -13,7 +13,7 @@
 
extern void StartupEconomy();
 

	
 
static const SpriteID cheeks_table[4] = {
 
	0x325, 0x326, 
 
	0x325, 0x326,
 
	0x390, 0x3B0,
 
};
 

	
 
@@ -60,10 +60,10 @@ void DrawPlayerFace(uint32 face, int col
 

	
 
		if (!(flag & 2)) {
 
			if (!(flag & 1)) {
 
				DrawSprite(high+((val1 * 12 >> 4) + 0x832B), x, y); 			
 
				DrawSprite(high+((val1 * 12 >> 4) + 0x832B), x, y);
 
			} else {
 
				DrawSprite(high+(val1 + 0x8337), x, y);
 
			}	
 
			}
 
		} else {
 
			if (!(flag & 1)) {
 
				DrawSprite(high+((val1 * 11 >> 4) + 0x839A), x, y);
 
@@ -80,11 +80,11 @@ void DrawPlayerFace(uint32 face, int col
 

	
 
		if (!(flag&1)) {
 
			val2 = ((val&0xF) * 15 >> 4);
 
			
 

	
 
			if (val2 < 3) {
 
				DrawSprite((flag&2 ? 0x397 : 0x367) + val2, x, y);
 
				/* skip the rest */
 
				goto skip_mouth;				
 
				goto skip_mouth;
 
			}
 

	
 
			val2 -= 3;
 
@@ -148,7 +148,7 @@ void DrawPlayerFace(uint32 face, int col
 
		} else {
 
			DrawSprite(0x378 + ((val&3)*3>>2), x, y);
 
			DrawSprite(0x37B + ((val>>2)&3), x, y);
 
			
 

	
 
			val >>= 4;
 
			if (val < 3) {
 
				DrawSprite((flag&2 ? 0x3D1 : 0x37F) + val, x, y);
 
@@ -198,14 +198,14 @@ static void SubtractMoneyFromAnyPlayer(P
 
{
 
	p->money64 -= cost;
 
	UpdatePlayerMoney32(p);
 
	
 

	
 
	p->yearly_expenses[0][_yearly_expenses_type] += cost;
 

	
 
	if ( ( 1 << _yearly_expenses_type ) & (1<<7|1<<8|1<<9|1<<10))
 
		p->cur_economy.income -= cost;
 
	else if (( 1 << _yearly_expenses_type ) & (1<<2|1<<3|1<<4|1<<5|1<<6|1<<11))
 
		p->cur_economy.expenses -= cost;
 
		
 

	
 
	InvalidatePlayerWindows(p);
 
}
 

	
 
@@ -236,13 +236,13 @@ void UpdatePlayerMoney32(Player *p)
 
	else if (p->money64 > 2000000000)
 
		p->player_money = 2000000000;
 
	else
 
		p->player_money = (int32)p->money64; 
 
		p->player_money = (int32)p->money64;
 
}
 

	
 
void GetNameOfOwner(byte owner, uint tile)
 
{
 
	SET_DPARAM8(2, owner);
 
		
 

	
 
	if (owner != OWNER_TOWN) {
 
		if (owner >= 8)
 
			SET_DPARAM16(0, STR_0150_SOMEONE);
 
@@ -274,10 +274,10 @@ bool CheckTileOwnership(uint tile)
 
{
 
	byte owner = _map_owner[tile];
 
	assert(owner <= OWNER_WATER);
 
	if (owner == _current_player) 
 
	if (owner == _current_player)
 
		return true;
 
	_error_message = STR_013B_OWNED_BY;
 
	
 

	
 
	// no need to get the name of the owner unless we're the local player (saves some time)
 
	if (_current_player == _local_player)
 
		GetNameOfOwner(owner, tile);
 
@@ -330,11 +330,11 @@ set_name:;
 
		return;
 
	}
 
bad_town_name:;
 
	
 

	
 
	if (p->president_name_1 == SPECSTR_PRESIDENT_NAME) {
 
		str = SPECSTR_ANDCO_NAME;
 
		strp = p->president_name_2;
 
		goto set_name;	
 
		goto set_name;
 
	} else {
 
		str = SPECSTR_ANDCO_NAME;
 
		strp = Random();
 
@@ -371,7 +371,7 @@ static byte GeneratePlayerColor()
 
	do {
 
		for(j=0; j!=15; j++) {
 
			if (_color_sort[colors[j]] < _color_sort[colors[j+1]]) {
 
				COLOR_SWAP(j,j+1);	
 
				COLOR_SWAP(j,j+1);
 
			}
 
		}
 
	} while (--i);
 
@@ -382,7 +382,7 @@ static byte GeneratePlayerColor()
 
		for(i=0; i!=16; i++) if (colors[i] == pcolor) {
 
			colors[i] = 0xFF;
 

	
 
			t2 = _color_similar_1[pcolor]; 
 
			t2 = _color_similar_1[pcolor];
 
			if (t2 == 0xFF) break;
 
			for(i=0; i!=15; i++) {
 
				if (colors[i] == t2) {
 
@@ -391,7 +391,7 @@ static byte GeneratePlayerColor()
 
				}
 
			}
 

	
 
			t2 = _color_similar_2[pcolor]; 
 
			t2 = _color_similar_2[pcolor];
 
			if (t2 == 0xFF) break;
 
			for(i=0; i!=15; i++) {
 
				if (colors[i] == t2) {
 
@@ -422,7 +422,7 @@ restart:;
 

	
 
		p->president_name_2 = Random();
 
		p->president_name_1 = SPECSTR_PRESIDENT_NAME;
 
		
 

	
 
		SET_DPARAM32(0, p->president_name_2);
 
		GetString(buffer, p->president_name_1);
 
		if (strlen(buffer) >= 32 || GetStringWidth(buffer) >= 94)
 
@@ -464,7 +464,7 @@ Player *DoStartupNewPlayer(bool is_ai)
 

	
 
	p = AllocatePlayer();
 
	if (p == NULL) return NULL;
 
		
 

	
 
	index = p->index;
 

	
 
	// Make a color
 
@@ -472,7 +472,7 @@ Player *DoStartupNewPlayer(bool is_ai)
 
	_player_colors[index] = p->player_color;
 
	p->name_1 = STR_SV_UNNAMED;
 
	p->is_active = true;
 
	
 

	
 
	p->money64 = p->player_money = p->current_loan = 100000;
 

	
 
	p->is_ai = is_ai;
 
@@ -501,7 +501,7 @@ static void MaybeStartNewPlayer()
 
{
 
	uint n;
 
	Player *p;
 
	
 

	
 
	// count number of competitors
 
	n = 0;
 
	for(p=_players; p!=endof(_players); p++)
 
@@ -511,7 +511,7 @@ static void MaybeStartNewPlayer()
 
	// when there's a lot of computers in game, the probability that a new one starts is lower
 
	if (n < (uint)_opt.diff.max_no_competitors && n < RandomRange(_opt.diff.max_no_competitors + 2))
 
		DoStartupNewPlayer(true);
 
	
 

	
 
	// The next AI starts like the difficulty setting said, with +2 month max
 
	_next_competitor_start = _opt.diff.competitor_start_time * 90 * DAY_TICKS + RandomRange(60 * DAY_TICKS) + 1;
 
}
 
@@ -531,20 +531,20 @@ void OnTick_Players()
 

	
 
	if (_game_mode == GM_EDITOR)
 
		return;
 
	
 

	
 
	p = DEREF_PLAYER(_cur_player_tick_index);
 
	_cur_player_tick_index = (_cur_player_tick_index + 1) % MAX_PLAYERS;
 
	if (p->name_1 != 0) GenerateCompanyName(p);
 

	
 
	if (_game_mode != GM_MENU && !--_next_competitor_start) {
 
		MaybeStartNewPlayer();		
 
		MaybeStartNewPlayer();
 
	}
 
}
 

	
 
void RunOtherPlayersLoop()
 
{
 
	Player *p;
 
	
 

	
 
	_is_ai_player = true;
 

	
 
	FOR_ALL_PLAYERS(p) {
 
@@ -634,7 +634,7 @@ int32 CmdPlayerCtrl(int x, int y, uint32
 

	
 
	if (!(flags & DC_EXEC))
 
		return 0;
 
	
 

	
 
	switch(p1 & 0xff) {
 
	case 0: // make new player
 
		p = DoStartupNewPlayer(false);
 
@@ -672,7 +672,7 @@ static const byte _player_desc[] = {
 
	SLE_VAR(Player,president_name_2,SLE_UINT32),
 

	
 
	SLE_VAR(Player,face,						SLE_UINT32),
 
	
 

	
 
	// money was changed to a 64 bit field in savegame version 1.
 
	SLE_CONDVAR(Player,money64,			SLE_VAR_I64 | SLE_FILE_I32, 0, 0),
 
	SLE_CONDVAR(Player,money64,			SLE_INT64, 1, 255),
 
@@ -722,7 +722,7 @@ static const byte _player_economy_desc[]
 

	
 
	SLE_VAR(PlayerEconomyEntry,delivered_cargo,			SLE_INT32),
 
	SLE_VAR(PlayerEconomyEntry,performance_history,	SLE_INT32),
 
	
 

	
 
	SLE_END()
 
};
 

	
 
@@ -817,7 +817,7 @@ static void Load_PLYR()
 
{
 
	int index;
 
	while ((index = SlIterateArray()) != -1) {
 
		Player *p = DEREF_PLAYER(index);		
 
		Player *p = DEREF_PLAYER(index);
 
		p->is_ai = (index != 0);
 
		SaveLoad_PLYR(p);
 
		_player_colors[index] = p->player_color;
queue.c
Show inline comments
 
@@ -150,7 +150,7 @@ void InsSort_Clear(Queue* q, bool free_v
 
		prev = node;
 
		node = node->next;
 
		free(prev);
 
		
 

	
 
	}
 
	q->data.inssort.first = NULL;
 
}
 
@@ -283,7 +283,7 @@ bool BinaryHeap_Push(Queue* q, void* ite
 
	if (q->data.binaryheap.size == q->data.binaryheap.max_size)
 
		return false;
 
	assert(q->data.binaryheap.size < q->data.binaryheap.max_size);
 
	
 

	
 
	if (q->data.binaryheap.elements[q->data.binaryheap.size >> BINARY_HEAP_BLOCKSIZE_BITS] == NULL) {
 
		/* The currently allocated blocks are full, allocate a new one */
 
		assert((q->data.binaryheap.size & BINARY_HEAP_BLOCKSIZE_MASK) == 0);
 
@@ -466,14 +466,14 @@ void delete_Hash(Hash* h, bool free_valu
 
		if (h->buckets_in_use[i]) {
 
			HashNode* node;
 
			/* Free the first value */
 
			if (free_values) 
 
			if (free_values)
 
				free(h->buckets[i].value);
 
			node = h->buckets[i].next;
 
			while (node != NULL) {
 
				HashNode* prev = node;
 
				node = node->next;
 
				/* Free the value */
 
				if (free_values) 
 
				if (free_values)
 
					free(prev->value);
 
				/* Free the node */
 
				free(prev);
queue.h
Show inline comments
 
@@ -51,7 +51,7 @@ struct Queue{
 
	Queue_ClearProc* clear;
 
	/* Frees the queue, by reclaiming all memory allocated by it. After
 
	 * this it is no longer usable. If free_items is true, any remaining
 
	 * items are free()'d too. 
 
	 * items are free()'d too.
 
	 */
 
	Queue_FreeProc* free;
 

	
rail_cmd.c
Show inline comments
 
@@ -42,7 +42,7 @@ enum { /* These values are bitmasks for 
 
 * 11 ????dd  => Depot
 
 *
 
 * abcdef is a bitmask, which contains ones for all present tracks. Below the
 
 * value for each track is given. 
 
 * value for each track is given.
 
 */
 

	
 
/*         4
 
@@ -52,7 +52,7 @@ enum { /* These values are bitmasks for 
 
 *    |  \   /  |
 
 *    |   \ /   |
 
 *  16|    \    |32
 
 *    |   / \2  | 
 
 *    |   / \2  |
 
 *    |  /   \  |
 
 *    | /     \ |
 
 *    |/       \|
 
@@ -62,7 +62,7 @@ enum { /* These values are bitmasks for 
 

	
 

	
 
// Constants for lower part of Map2 byte.
 
enum RailMap2Lower4 { 
 
enum RailMap2Lower4 {
 
	RAIL_MAP2LO_GROUND_MASK = 0xF,
 
	RAIL_GROUND_BROWN = 0,
 
	RAIL_GROUND_GREEN = 1,
 
@@ -81,7 +81,7 @@ enum RailMap2Lower4 {
 

	
 

	
 
/* MAP2 byte:    abcd???? => Signal On? Same coding as map3lo
 
 * MAP3LO byte:  abcd???? => Signal Exists? 
 
 * MAP3LO byte:  abcd???? => Signal Exists?
 
 *				 a and b are for diagonals, upper and left,
 
 *				 one for each direction. (ie a == NE->SW, b ==
 
 *				 SW->NE, or v.v., I don't know. b and c are
 
@@ -91,7 +91,7 @@ enum RailMap2Lower4 {
 
 * MAP5:         00abcdef => rail
 
 *               01abcdef => rail w/ signals
 
 *               10uuuuuu => unused
 
 *               11uuuudd => rail depot   
 
 *               11uuuudd => rail depot
 
 */
 

	
 
static bool CheckTrackCombination(byte map5, byte trackbits, byte flags)
 
@@ -99,7 +99,7 @@ static bool CheckTrackCombination(byte m
 
	_error_message = STR_1001_IMPOSSIBLE_TRACK_COMBINATION;
 

	
 
	if ((map5&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) {
 
		
 

	
 
		if (map5 & trackbits) {
 
			_error_message = STR_1007_ALREADY_BUILT;
 
			return false;
 
@@ -112,11 +112,11 @@ static bool CheckTrackCombination(byte m
 
		_error_message = STR_1007_ALREADY_BUILT;
 
		if (map5 & trackbits)
 
			return false;
 
		
 

	
 
		// Computer players are not allowed to intersect pieces of rail.
 
		if (!(flags&DC_NO_RAIL_OVERLAP))
 
			return true;
 
		
 

	
 
		map5 |= trackbits;
 
		return (map5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER) || map5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT));
 
	} else {
 
@@ -138,12 +138,12 @@ static const byte _valid_tileh_slopes[4]
 
	0,
 
	RAIL_BIT_DIAG2,
 
	RAIL_BIT_LOWER,
 
	
 

	
 
	RAIL_BIT_LOWER,
 
	RAIL_BIT_DIAG2,
 
	0,
 
	RAIL_BIT_LEFT,
 
	
 

	
 
	RAIL_BIT_DIAG1,
 
	RAIL_BIT_UPPER,
 
	RAIL_BIT_RIGHT,
 
@@ -177,7 +177,7 @@ static const byte _valid_tileh_slopes[4]
 
	RAIL_BIT_LEFT,
 
	RAIL_BIT_LOWER,
 
	RAIL_BIT_DIAG2|RAIL_BIT_LEFT|RAIL_BIT_LOWER,
 
 
 

	
 
	RAIL_BIT_RIGHT,
 
	RAIL_BIT_DIAG1|RAIL_BIT_DIAG2|RAIL_BIT_UPPER|RAIL_BIT_LOWER|RAIL_BIT_LEFT|RAIL_BIT_RIGHT,
 
	RAIL_BIT_DIAG1|RAIL_BIT_RIGHT|RAIL_BIT_LOWER,
 
@@ -213,7 +213,7 @@ uint GetRailFoundation(uint tileh, uint 
 
	if ((~_valid_tileh_slopes[1][tileh] & bits) == 0)
 
		return tileh;
 

	
 
	if ( ((i=0, tileh == 1) || (i+=2, tileh == 2) || (i+=2, tileh == 4) || (i+=2, tileh == 8)) && (bits == RAIL_BIT_DIAG1 || (i++, bits == RAIL_BIT_DIAG2))) 
 
	if ( ((i=0, tileh == 1) || (i+=2, tileh == 2) || (i+=2, tileh == 4) || (i+=2, tileh == 8)) && (bits == RAIL_BIT_DIAG1 || (i++, bits == RAIL_BIT_DIAG2)))
 
		return i + 15;
 

	
 
	return 0;
 
@@ -234,10 +234,10 @@ static uint32 CheckRailSlope(int tileh, 
 
		// no special foundation
 
		if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0)
 
			return 0;
 
	
 

	
 
		if (((~_valid_tileh_slopes[1][tileh] & rail_bits) == 0) || // whole tile is leveled up
 
			((rail_bits == RAIL_BIT_DIAG1 || rail_bits == RAIL_BIT_DIAG2) && (tileh == 1 || tileh == 2 || tileh == 4 || tileh == 8))) { // partly up
 
			return existing ? 0 : _price.terraform;	
 
			return existing ? 0 : _price.terraform;
 
		}
 
	}
 
	return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
 
@@ -266,7 +266,7 @@ int32 CmdBuildSingleRail(int x, int y, u
 
	tile = ti.tile;
 

	
 
	// allow building rail under bridge
 
	if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))	
 
	if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))
 
		return CMD_ERROR;
 

	
 
	if (ti.type == MP_TUNNELBRIDGE) {
 
@@ -311,7 +311,7 @@ int32 CmdBuildSingleRail(int x, int y, u
 
				return _price.build_rail;
 

	
 
			ModifyTile(tile,
 
				MP_SETTYPE(MP_STREET) | 
 
				MP_SETTYPE(MP_STREET) |
 
				MP_MAP3LO | MP_MAP3HI | MP_MAPOWNER_CURRENT | MP_MAP5,
 
				_map_owner[tile], /* map3_lo */
 
				p1, /* map3_hi */
 
@@ -326,7 +326,7 @@ int32 CmdBuildSingleRail(int x, int y, u
 
	} else if (ti.type == MP_RAILWAY) {
 

	
 
/* BUILD ON RAILWAY CODE */
 
		if (_map_owner[tile] != _current_player || (byte)(_map3_lo[tile]&0xF) != rail_type) 
 
		if (_map_owner[tile] != _current_player || (byte)(_map3_lo[tile]&0xF) != rail_type)
 
			goto need_clear;
 
		if (!CheckTrackCombination(ti.map5, rail_bit, (byte)flags))
 
			return CMD_ERROR;
 
@@ -396,7 +396,7 @@ static const byte _signals_table_other[]
 
};
 

	
 
static const byte _signals_table_both[] = {
 
	0xC0, 0xC0, 0xC0, 0x30, 0xC0, 0x30, 0, 0,	// both directions combined 
 
	0xC0, 0xC0, 0xC0, 0x30, 0xC0, 0x30, 0, 0,	// both directions combined
 
	0xC0, 0xC0, 0xC0, 0x30, 0xC0, 0x30, 0, 0
 
};
 

	
 
@@ -426,7 +426,7 @@ int32 CmdRemoveSingleRail(int x, int y, 
 
		return CMD_ERROR;
 

	
 
	// allow building rail under bridge
 
	if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))	
 
	if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))
 
		return CMD_ERROR;
 

	
 
	if (ti.type == MP_TUNNELBRIDGE) {
 
@@ -441,7 +441,7 @@ int32 CmdRemoveSingleRail(int x, int y, 
 

	
 
		if (!(flags & DC_EXEC))
 
			return _price.remove_rail;
 
		
 

	
 
		_map_owner[tile] = OWNER_NONE;
 
		_map5[tile] = ti.map5 & 0xC7;
 
	} else if (ti.type == MP_STREET) {
 
@@ -497,7 +497,7 @@ int32 CmdRemoveSingleRail(int x, int y, 
 
skip_mark_dirty:;
 

	
 
	SetSignalsOnBothDir(tile, (byte)p2);
 
	
 

	
 
	return _price.remove_rail;
 
}
 

	
 
@@ -506,7 +506,7 @@ static const struct {
 
	int8 yinc[16];
 
	byte initial[16];
 
} _railbit = {{
 
//  0   1   2    3   4   5 
 
//  0   1   2    3   4   5
 
	 16,  0,-16,   0, 16,  0,    0,  0,
 
	-16,  0,  0,  16,  0,-16,    0,  0,
 
},{
 
@@ -537,7 +537,7 @@ int32 CmdBuildRailroadTrack(int x, int y
 

	
 
	if (flags & DC_EXEC)
 
		SndPlayTileFx(0x1E, TILE_FROM_XY(x,y));
 
	
 

	
 
	/* unpack end point */
 
	sx = (p1 & 0xFFFF) & ~0xF;
 
	sy = (p1 >> 16) & ~0xF;
 
@@ -558,10 +558,10 @@ int32 CmdBuildRailroadTrack(int x, int y
 

	
 
		x += _railbit.xinc[railbit];
 
		y += _railbit.yinc[railbit];
 
		
 

	
 
		// toggle railbit for the diagonal tiles
 
		if (railbit & 0x6) railbit ^= 1;
 
	}			
 
	}
 

	
 
	if (total_cost == 0)
 
		return CMD_ERROR;
 
@@ -587,7 +587,7 @@ int32 CmdRemoveRailroadTrack(int x, int 
 

	
 
	if (flags & DC_EXEC)
 
		SndPlayTileFx(0x1E, TILE_FROM_XY(x,y));
 
	
 

	
 
	/* unpack start point */
 
	sx = (p1 & 0xFFFF) & ~0xF;
 
	sy = (p1 >> 16) & ~0xF;
 
@@ -603,7 +603,7 @@ int32 CmdRemoveRailroadTrack(int x, int 
 
		y += _railbit.yinc[railbit];
 
		// toggle railbit for the diagonal tiles
 
		if (railbit & 0x6) railbit ^= 1;
 
	}			
 
	}
 

	
 
	if (total_cost == 0)
 
		return CMD_ERROR;
 
@@ -643,14 +643,14 @@ int32 CmdBuildTrainDepot(int x, int y, u
 
	if (flags & DC_EXEC) {
 
		if (_current_player == _local_player)
 
			_last_built_train_depot_tile = (TileIndex)tile;
 
		
 
		ModifyTile(tile, 
 

	
 
		ModifyTile(tile,
 
			MP_SETTYPE(MP_RAILWAY) |
 
			MP_MAP3LO | MP_MAPOWNER_CURRENT | MP_MAP5,
 
			p1, /* map3_lo */
 
			p2 | RAIL_TYPE_DEPOT /* map5 */
 
		);
 
		
 

	
 
		dep->xy = tile;
 
		dep->town_index = ClosestTownFromTile(tile, (uint)-1)->index;
 

	
 
@@ -688,7 +688,7 @@ static Checkpoint *FindDeletedCheckpoint
 

	
 
	for(cp = _checkpoints; cp != endof(_checkpoints); cp++) {
 
		if (cp->deleted && cp->xy) {
 
			cur_dist = GetTileDist(tile, cp->xy);	
 
			cur_dist = GetTileDist(tile, cp->xy);
 
			if (cur_dist < thres) {
 
				thres = cur_dist;
 
				best = cp;
 
@@ -714,7 +714,7 @@ int32 CmdBuildTrainCheckpoint(int x, int
 

	
 
	if (!CheckTileOwnership(tile))
 
		return CMD_ERROR;
 
	
 

	
 
	if (!EnsureNoVehicle(tile)) return CMD_ERROR;
 

	
 
	tileh = GetTileSlope(tile, NULL);
 
@@ -733,10 +733,10 @@ int32 CmdBuildTrainCheckpoint(int x, int
 

	
 
	if (flags & DC_EXEC) {
 
		ModifyTile(tile, MP_MAP5, RAIL_TYPE_CHECKPOINT | dir);
 
		
 

	
 
		cp->deleted = 0;
 
		cp->xy = tile;
 
		
 

	
 
		if (cp->town_or_string == 0) MakeDefaultCheckpointName(cp); else RedrawCheckpointSign(cp);
 
		UpdateCheckpointSign(cp);
 
		RedrawCheckpointSign(cp);
 
@@ -848,13 +848,13 @@ int32 CmdBuildSignals(int x, int y, uint
 
	byte m5;
 
	int32 cost;
 
	int track = p1 & 0x7;
 
	
 

	
 
	assert(track >= 0 && track < 6); // only 6 possible track-combinations
 
	
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	tile = TILE_FROM_XY(x,y);
 
	
 

	
 
	if (!EnsureNoVehicle(tile))
 
		return CMD_ERROR;
 

	
 
@@ -867,7 +867,7 @@ int32 CmdBuildSignals(int x, int y, uint
 
	// check rail combination
 
	{
 
		byte m = m5 & RAIL_BIT_MASK;
 
		if (m != RAIL_BIT_DIAG1 && m != RAIL_BIT_DIAG2 && m != RAIL_BIT_UPPER && m != RAIL_BIT_LOWER && 
 
		if (m != RAIL_BIT_DIAG1 && m != RAIL_BIT_DIAG2 && m != RAIL_BIT_UPPER && m != RAIL_BIT_LOWER &&
 
				m != RAIL_BIT_LEFT && m != RAIL_BIT_RIGHT && m != (RAIL_BIT_UPPER|RAIL_BIT_LOWER) && m != (RAIL_BIT_LEFT|RAIL_BIT_RIGHT))
 
			return CMD_ERROR;
 
	}
 
@@ -886,7 +886,7 @@ int32 CmdBuildSignals(int x, int y, uint
 
	}
 

	
 
	if (flags & DC_EXEC) {
 
		
 

	
 

	
 
		if (!(m5 & RAIL_TYPE_SIGNALS)) {		// if there are no signals yet present on the track
 
			_map5[tile] |= RAIL_TYPE_SIGNALS; // change into signals
 
@@ -925,7 +925,7 @@ int32 CmdBuildSignals(int x, int y, uint
 
			// convert between signal<->semaphores when dragging
 
			HASBIT(p1, 3) ? SETBIT(_map3_hi[tile], 2) : CLRBIT(_map3_hi[tile], 2);
 
		}
 
		
 

	
 
		MarkTileDirtyByTile(tile);
 
		SetSignalsOnBothDir(tile, track);
 
	}
 
@@ -972,13 +972,13 @@ int32 CmdBuildManySignals(int x, int y, 
 
			 * the other side alone */
 
			switch (signals) {
 
				case 0x20: case 8: /* east corner (N-S), south corner (W-E) */
 
					if (_map3_lo[tile]&0x30) 
 
					if (_map3_lo[tile]&0x30)
 
						signals = _map3_lo[tile]&0x30;
 
					else
 
						signals = 0x30 | (_map3_lo[tile]&0xC0);
 
					break;
 
				case 0x10: case 4: /* west corner (N-S), north corner (W-E) */
 
					if (_map3_lo[tile]&0xC0) 
 
					if (_map3_lo[tile]&0xC0)
 
						signals = _map3_lo[tile]&0xC0;
 
					else
 
						signals = 0xC0 | (_map3_lo[tile]&0x30);
 
@@ -1001,7 +1001,7 @@ int32 CmdBuildManySignals(int x, int y, 
 
	 **********
 
	 * railbit		- direction of autorail
 
	 * semaphores	- semaphores or signals
 
	 * signals		- is there a signal/semaphore on the first tile, copy its style (two-way/single-way) 
 
	 * signals		- is there a signal/semaphore on the first tile, copy its style (two-way/single-way)
 
									and convert all others to semaphore/signal
 
	 * mode				- 1 remove signals, 0 build signals */
 
	signal_ctr = total_cost = 0;
 
@@ -1026,9 +1026,9 @@ int32 CmdBuildManySignals(int x, int y, 
 
			break;
 

	
 
		x += _railbit.xinc[railbit];
 
		y += _railbit.yinc[railbit];	
 
		y += _railbit.yinc[railbit];
 
		signal_ctr++;
 
		
 

	
 
		// toggle railbit for the diagonal tiles (|, -- tracks)
 
		if (railbit & 0x6) railbit ^= 1;
 
	}
 
@@ -1050,7 +1050,7 @@ int32 CmdRemoveSignals(int x, int y, uin
 

	
 
	FindLandscapeHeight(&ti, x, y);
 
	tile = ti.tile;
 
	
 

	
 
	/* No vehicle behind. */
 
	if (!EnsureNoVehicle(tile))
 
		return CMD_ERROR;
 
@@ -1073,18 +1073,18 @@ int32 CmdRemoveSignals(int x, int y, uin
 
		_map5[tile] &= ~RAIL_TYPE_SIGNALS;
 
		_map2[tile] &= ~0xF0;
 
		CLRBIT(_map3_hi[tile], 2); // remove any possible semaphores
 
		
 

	
 
		/* TTDBUG: this code contains a bug, if a tile contains 2 signals
 
		 * on separate tracks, it won't work properly for the 2nd track */		
 
		SetSignalsOnBothDir(tile, FIND_FIRST_BIT(bits & RAIL_BIT_MASK)); 
 
		 * on separate tracks, it won't work properly for the 2nd track */
 
		SetSignalsOnBothDir(tile, FIND_FIRST_BIT(bits & RAIL_BIT_MASK));
 

	
 
		MarkTileDirtyByTile(tile);
 
	}
 
	
 

	
 
	return _price.remove_signals;
 
}
 

	
 
typedef int32 DoConvertRailProc(uint tile, uint totype, bool exec); 
 
typedef int32 DoConvertRailProc(uint tile, uint totype, bool exec);
 

	
 
static int32 DoConvertRail(uint tile, uint totype, bool exec)
 
{
 
@@ -1120,7 +1120,7 @@ int32 CmdConvertRail(int ex, int ey, uin
 
	sy = GET_TILE_Y(p1)*16;
 
	if (ex < sx) intswap(ex, sx);
 
	if (ey < sy) intswap(ey, sy);
 
	
 

	
 
	money = GetAvailableMoneyForCommand();
 
	ret = false;
 
	cost = 0;
 
@@ -1128,13 +1128,13 @@ int32 CmdConvertRail(int ex, int ey, uin
 
		for(y=sy; y<=ey; y+=16) {
 
			uint tile = TILE_FROM_XY(x,y);
 
			DoConvertRailProc *p;
 
			
 

	
 
			if (IS_TILETYPE(tile, MP_RAILWAY)) p = DoConvertRail;
 
			else if (IS_TILETYPE(tile, MP_STATION)) p = DoConvertStationRail;
 
			else if (IS_TILETYPE(tile, MP_STREET)) p = DoConvertStreetRail;
 
			else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) p = DoConvertTunnelBridgeRail;
 
			else continue;
 
			
 

	
 
			ret = p(tile, p2, false);
 
			if (ret == CMD_ERROR) continue;
 
			cost += ret;
 
@@ -1185,7 +1185,7 @@ static int32 ClearTile_Track(uint tile, 
 
	}
 

	
 
	cost = 0;
 
	
 

	
 

	
 
	if ( (m5 & RAIL_TYPE_MASK) == RAIL_TYPE_NORMAL) {
 
regular_track:;
 
@@ -1245,7 +1245,7 @@ static const SpriteID _signal_base_sprit
 
	0x1323,
 
	0x1333,
 
	0x1343,
 
	
 

	
 
	0x13C6,
 
	0x13D6,
 
	0x13E6,
 
@@ -1283,7 +1283,7 @@ static void DrawTrackFence_NW(TileInfo *
 
			image = 0x51B;
 
		}
 
	}
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette, 
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette,
 
		ti->x, ti->y+1, 16, 1, 4, ti->z);
 
}
 

	
 
@@ -1296,7 +1296,7 @@ static void DrawTrackFence_SE(TileInfo *
 
			image = 0x51B;
 
		}
 
	}
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette, 
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette,
 
		ti->x, ti->y+15, 16, 1, 4, ti->z);
 
}
 

	
 
@@ -1315,7 +1315,7 @@ static void DrawTrackFence_NE(TileInfo *
 
			image = 0x51C;
 
		}
 
	}
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette, 
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette,
 
		ti->x+1, ti->y, 1, 16, 4, ti->z);
 
}
 

	
 
@@ -1328,7 +1328,7 @@ static void DrawTrackFence_SW(TileInfo *
 
			image = 0x51C;
 
		}
 
	}
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette, 
 
	AddSortableSpriteToDraw(image | _drawtile_track_palette,
 
		ti->x+15, ti->y, 1, 16, 4, ti->z);
 
}
 

	
 
@@ -1383,21 +1383,21 @@ typedef void DetailedTrackProc(TileInfo 
 
DetailedTrackProc * const _detailed_track_proc[16] = {
 
	DetTrackDrawProc_Null,
 
	DetTrackDrawProc_Null,
 
	
 

	
 
	DrawTrackFence_NW,
 
	DrawTrackFence_SE,
 
	DrawTrackFence_NW_SE,
 
	
 

	
 
	DrawTrackFence_NE,
 
	DrawTrackFence_SW,
 
	DrawTrackFence_NE_SW,
 
	
 

	
 
	DrawTrackFence_NS_1,
 
	DrawTrackFence_NS_2,
 
	
 

	
 
	DrawTrackFence_WE_1,
 
	DrawTrackFence_WE_2,
 
	
 

	
 
	DetTrackDrawProc_Null,
 
	DetTrackDrawProc_Null,
 
	DetTrackDrawProc_Null,
 
@@ -1418,7 +1418,7 @@ static void DrawTile_Track(TileInfo *ti)
 
		bool special;
 

	
 
		m5 &= RAIL_BIT_MASK;
 
		
 

	
 
		special = false;
 

	
 
		// select the sprite to use based on the map5 byte.
 
@@ -1429,10 +1429,10 @@ static void DrawTile_Track(TileInfo *ti)
 
		(image++,				m5 == RAIL_BIT_RIGHT) ||
 
		(image++,				m5 == RAIL_BIT_LEFT) ||
 
		(image++,				m5 == (RAIL_BIT_DIAG1|RAIL_BIT_DIAG2)) ||
 
		
 

	
 
		(image = 0x40B, m5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER)) ||
 
		(image++,				m5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT)) ||
 
		
 

	
 
		(special=true, false) ||
 

	
 
		(image = 0x3FA, !(m5 & (RAIL_BIT_RIGHT|RAIL_BIT_UPPER|RAIL_BIT_DIAG1))) ||
 
@@ -1444,7 +1444,7 @@ static void DrawTile_Track(TileInfo *ti)
 
		if (ti->tileh != 0) {
 
			int f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F);
 
			if (f) DrawFoundation(ti, f);
 
			
 

	
 
			// default sloped sprites..
 
			if (ti->tileh != 0) image = _track_sloped_sprites[ti->tileh - 1] + 0x3F3;
 
		}
 
@@ -1515,7 +1515,7 @@ static void DrawTile_Track(TileInfo *ti)
 

	
 
		if (!(m5 & (RAIL_TYPE_MASK&~RAIL_TYPE_SPECIAL)))
 
			return;
 
		
 

	
 
		if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); }
 

	
 
		s = _track_depot_layout_table[m5 & 0x3F];
 
@@ -1541,9 +1541,9 @@ static void DrawTile_Track(TileInfo *ti)
 
			if (image & 0x8000)
 
				image |= _drawtile_track_palette;
 
			image += tracktype_offs;
 
			if (!(_display_opt & DO_TRANS_BUILDINGS)) 
 
			if (!(_display_opt & DO_TRANS_BUILDINGS))
 
				image = (image & 0x3FFF) | 0x3224000;
 
			AddSortableSpriteToDraw(image, ti->x | drss->subcoord_x, 
 
			AddSortableSpriteToDraw(image, ti->x | drss->subcoord_x,
 
				ti->y | drss->subcoord_y, drss->width, drss->height, 0x17, ti->z);
 
			drss++;
 
		}
 
@@ -1567,7 +1567,7 @@ void DrawTrainDepotSprite(int x, int y, 
 
	y+=17;
 

	
 
	img = *(uint16*)t;
 
	if (img & 0x8000) img = (img & 0x7FFF) + railtype; 
 
	if (img & 0x8000) img = (img & 0x7FFF) + railtype;
 
	DrawSprite(img, x, y);
 

	
 
	for(dtss = (DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) {
 
@@ -1586,7 +1586,7 @@ typedef struct SetSignalsData {
 
	int cur_stack;
 
	bool stop;
 
	bool has_presignal;
 
	
 

	
 
	// presignal info
 
	int presignal_exits;
 
	int presignal_exits_free;
 
@@ -1607,7 +1607,7 @@ static bool SetSignalsEnumProc(uint tile
 
	if (IS_TILETYPE(tile, MP_RAILWAY)) {
 
		if ((_map5[tile]&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) {
 
			if ((_map3_lo[tile] & _signals_table_both[track]) != 0) {
 
				
 

	
 
				// is the signal pointing in to the segment existing?
 
				if ((_map3_lo[tile] & _signals_table[track]) != 0) {
 
					// yes, add the signal to the list of signals
 
@@ -1620,7 +1620,7 @@ static bool SetSignalsEnumProc(uint tile
 
					// remember if this block has a presignal.
 
					ssd->has_presignal |= (_map3_hi[tile]&1);
 
				}
 
				
 

	
 
				// is this an exit signal that points out from the segment?
 
				if ((_map3_hi[tile]&2) && _map3_lo[tile]&_signals_table_other[track]) {
 
					ssd->presignal_exits++;
 
@@ -1644,7 +1644,7 @@ static void SetSignalsAfterProc(TrackPat
 
	TrackPathFinderLink *link;
 

	
 
	ssd->stop = false;
 
	
 

	
 
	// for each train, check if it is in the segment.
 
	// then we know that the signal should be red.
 
	FOR_ALL_VEHICLES(v) {
 
@@ -1653,9 +1653,9 @@ static void SetSignalsAfterProc(TrackPat
 

	
 
		tile = v->tile;
 
		if (v->u.rail.track == 0x40) { tile = GetVehicleOutOfTunnelTile(v); }
 
		
 

	
 
		hash = PATHFIND_HASH_TILE(tile);
 
	
 

	
 
		val = tpf->hash_head[hash];
 
		if (val == 0)
 
			continue;
 
@@ -1723,7 +1723,7 @@ static void ChangeSignalStates(SetSignal
 
make_red:
 
			// turn red
 
			if ( (bit&m2) == 0 )
 
				continue;	
 
				continue;
 
		} else {
 
			// turn green
 
			if ( (bit&m2) != 0 )
 
@@ -1741,7 +1741,7 @@ make_red:
 
				printf("NUM_SSD_STACK too small\n");
 
			}
 
		}
 
		
 

	
 
		// it changed, so toggle it
 
		_map2[tile] = m2 ^ bit;
 
		MarkTileDirtyByTile(tile);
 
@@ -1767,7 +1767,7 @@ bool UpdateSignalsOnSegment(uint tile, b
 

	
 
		// remember the result only for the first iteration.
 
		if (result < 0) result = ssd.stop;
 
		
 

	
 
		// if any exit signals were changed, we need to keep going to modify the stuff behind those.
 
		if(!ssd.cur_stack)
 
			break;
 
@@ -1776,7 +1776,7 @@ bool UpdateSignalsOnSegment(uint tile, b
 
		tile = ssd.next_tile[--ssd.cur_stack];
 
		direction = ssd.next_dir[ssd.cur_stack];
 
	}
 
	
 

	
 
	return (bool)result;
 
}
 

	
 
@@ -1789,7 +1789,7 @@ void SetSignalsOnBothDir(uint tile, byte
 
	UpdateSignalsOnSegment(tile, _search_dir_2[track]);
 
}
 

	
 
uint GetSlopeZ_Track(TileInfo *ti) 
 
uint GetSlopeZ_Track(TileInfo *ti)
 
{
 
	uint z = ti->z;
 
	int th = ti->tileh;
 
@@ -1815,7 +1815,7 @@ uint GetSlopeZ_Track(TileInfo *ti)
 
	return z;
 
}
 

	
 
uint GetSlopeTileh_Track(TileInfo *ti) 
 
uint GetSlopeTileh_Track(TileInfo *ti)
 
{
 
	// check if it's a foundation
 
	if (ti->tileh != 0) {
 
@@ -1882,7 +1882,7 @@ static void TileLoop_Track(uint tile)
 
	if (m2 != RAIL_GROUND_BROWN) { /* wait until bottom is green */
 
		/* determine direction of fence */
 
		rail = _map5[tile] & RAIL_BIT_MASK;
 
		
 

	
 
		if (rail == RAIL_BIT_UPPER) {
 
			a2 = RAIL_GROUND_FENCE_HORIZ1;
 
		} else if (rail == RAIL_BIT_LOWER) {
 
@@ -1898,7 +1898,7 @@ static void TileLoop_Track(uint tile)
 
				if (!IS_TILETYPE(tile + TILE_XY(0,-1), MP_RAILWAY) ||
 
						owner != _map_owner[tile + TILE_XY(0,-1)] ||
 
						(_map5[tile + TILE_XY(0,-1)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(0,-1)]==RAIL_BIT_LEFT))
 
							a2 = RAIL_GROUND_FENCE_NW;					
 
							a2 = RAIL_GROUND_FENCE_NW;
 
			}
 

	
 
			if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_LEFT)) {
 
@@ -1984,7 +1984,7 @@ static void ClickTile_Track(uint tile)
 
		ShowTrainDepotWindow(tile);
 
	else if (IS_RAIL_CHECKPOINT(_map5[tile]))
 
		ShowRenameCheckpointWindow(&_checkpoints[GetCheckpointByTile(tile)]);
 
		
 

	
 
}
 

	
 
static void GetTileDesc_Track(uint tile, TileDesc *td)
 
@@ -2017,7 +2017,7 @@ static void ChangeTileOwner_Track(uint t
 
{
 
	if (_map_owner[tile] != old_player)
 
		return;
 
	
 

	
 
	if (new_player != 255) {
 
		_map_owner[tile] = new_player;
 
	}	else {
 
@@ -2036,14 +2036,14 @@ uint32 VehicleEnter_Track(Vehicle *v, ui
 
{
 
	byte fract_coord;
 
	int dir;
 
	
 

	
 
	// this routine applies only to trains in depot tiles
 
	if (v->type != VEH_Train || !IS_RAIL_DEPOT(_map5[tile]))
 
		return 0;
 

	
 
	/* depot direction */
 
	dir = _map5[tile] & RAIL_DEPOT_DIR;
 
	
 

	
 
	fract_coord = (x & 0xF) + ((y & 0xF) << 4);
 
	if (_fractcoords_behind[dir] == fract_coord) {
 
		/* make sure a train is not entering the tile from behind */
rail_gui.c
Show inline comments
 
@@ -34,8 +34,8 @@ static void CcPlaySound1E(bool success, 
 
static void GenericPlaceRail(uint tile, int cmd)
 
{
 
	DoCommandP(tile, _cur_railtype, cmd, CcPlaySound1E,
 
		_remove_button_clicked ? 
 
		CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) | CMD_AUTO | CMD_NO_WATER : 
 
		_remove_button_clicked ?
 
		CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) | CMD_AUTO | CMD_NO_WATER :
 
		CMD_BUILD_SINGLE_RAIL | CMD_MSG(STR_1011_CAN_T_BUILD_RAILROAD_TRACK) | CMD_AUTO | CMD_NO_WATER
 
		);
 
}
 
@@ -76,7 +76,7 @@ static void PlaceExtraDepotRail(uint til
 
	if (b & 0xC0 || !(b & (extra >> 8)))
 
		return;
 

	
 
	DoCommandP(tile, _cur_railtype, extra & 0xFF, NULL, CMD_BUILD_SINGLE_RAIL | CMD_AUTO | CMD_NO_WATER); 
 
	DoCommandP(tile, _cur_railtype, extra & 0xFF, NULL, CMD_BUILD_SINGLE_RAIL | CMD_AUTO | CMD_NO_WATER);
 
}
 

	
 
static const uint16 _place_depot_extra[12] = {
 
@@ -101,12 +101,12 @@ static void CcDepot(bool success, uint t
 
			PlaceExtraDepotRail(tile, _place_depot_extra[dir + 4]);
 
			PlaceExtraDepotRail(tile, _place_depot_extra[dir + 8]);
 
		}
 
	}	
 
	}
 
}
 

	
 
static void PlaceRail_Depot(uint tile)
 
{
 
	DoCommandP(tile, _cur_railtype, _build_depot_direction, CcDepot, 
 
	DoCommandP(tile, _cur_railtype, _build_depot_direction, CcDepot,
 
		CMD_BUILD_TRAIN_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_100E_CAN_T_BUILD_TRAIN_DEPOT));
 
}
 

	
 
@@ -252,12 +252,12 @@ static const SpriteID _depot_cursors[] =
 

	
 
static void BuildRailClick_Depot(Window *w)
 
{
 
	if (HandlePlacePushButton(w, 11, _depot_cursors[_cur_railtype], 1, PlaceRail_Depot)) ShowBuildTrainDepotPicker();	
 
	if (HandlePlacePushButton(w, 11, _depot_cursors[_cur_railtype], 1, PlaceRail_Depot)) ShowBuildTrainDepotPicker();
 
}
 

	
 
static void BuildRailClick_Station(Window *w)
 
{
 
	if (HandlePlacePushButton(w, 12, 0x514, 1, PlaceRail_Station)) ShowStationBuilder();	
 
	if (HandlePlacePushButton(w, 12, 0x514, 1, PlaceRail_Station)) ShowStationBuilder();
 
}
 

	
 
static void BuildRailClick_AutoSignals(Window *w)
 
@@ -281,10 +281,10 @@ static void BuildRailClick_Remove(Window
 
		return;
 
	SetWindowDirty(w);
 
	SndPlayFx(0x13);
 
	
 

	
 
	_thd.make_square_red = !!((w->click_state ^= (1 << 16)) & (1<<16));
 
	_remove_button_clicked = (w->click_state & (1 << 16)) != 0;
 
	
 

	
 
	// handle station builder
 
	if( w->click_state & (1 << 12) )
 
	{
 
@@ -313,8 +313,8 @@ static void BuildRailClick_Convert(Windo
 

	
 
static void DoRailroadTrack(int mode)
 
{
 
	DoCommandP(TILE_FROM_XY(_thd.selstart.x, _thd.selstart.y), PACK_POINT(_thd.selend.x, _thd.selend.y), (mode << 4) | _cur_railtype, NULL, 
 
		_remove_button_clicked ? 
 
	DoCommandP(TILE_FROM_XY(_thd.selstart.x, _thd.selstart.y), PACK_POINT(_thd.selend.x, _thd.selend.y), (mode << 4) | _cur_railtype, NULL,
 
		_remove_button_clicked ?
 
		CMD_REMOVE_RAILROAD_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) :
 
		CMD_BUILD_RAILROAD_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1011_CAN_T_BUILD_RAILROAD_TRACK)
 
	);
 
@@ -335,11 +335,11 @@ static const BestFitStruct _bestfit[] = 
 

	
 
	{0, M(0,1+8+16), M(2,1+4+32), 0}, // diag1 track
 
	{1, M(3,2+8+32), M(1,2+4+16), 0}, // diag2 track
 
	
 

	
 
	// one edge with rail
 
	{0, M(0,1), 0, 0}, // diag1 track
 
	{0, M(2,1), 0, 0}, // diag1 track
 
	
 

	
 
	{1, M(1,2), 0, 0}, // diag2 track
 
	{1, M(3,2), 0, 0}, // diag2 track
 

	
 
@@ -394,7 +394,7 @@ int GetBestFit1x1(int x, int y)
 
		};
 
		tile += _tile_inc[i];
 
		m[i] = 0;
 
		if (IS_TILETYPE(tile, MP_RAILWAY) && _map5[tile] < 0x80) 
 
		if (IS_TILETYPE(tile, MP_RAILWAY) && _map5[tile] < 0x80)
 
			m[i] = _map5[tile]&0x3F;
 

	
 
		// handle tracks under bridge
 
@@ -449,7 +449,7 @@ static bool Check2x1AutoRail(int mode)
 
	int sxpy = (thd->selend.x & 0xF) + (thd->selend.y & 0xF);
 
	int fxmy = _tile_fract_coords.x - _tile_fract_coords.y;
 
	int sxmy = (thd->selend.x & 0xF) - (thd->selend.y & 0xF);
 
	
 

	
 
	switch(mode) {
 
	case 0:
 
		if (fxpy >= 20 && sxpy <= 12) { SwapSelection(); DoRailroadTrack(0); return true; }
 
@@ -459,7 +459,7 @@ static bool Check2x1AutoRail(int mode)
 
	case 1:
 
		if (fxmy > 3 && sxmy < -3) { SwapSelection(); DoRailroadTrack(0); return true; }
 
		if (fxpy <= 12 && sxpy >= 20) { DoRailroadTrack(0); return true; }
 
		break;	
 
		break;
 

	
 
	case 2:
 
		if (fxmy > 3 && sxmy < -3) { DoRailroadTrack(3); return true; }
 
@@ -484,7 +484,7 @@ static void HandleAutodirPlacement()
 
	if (thd->drawstyle == HT_RECT) {
 
		int dx = thd->selstart.x - (thd->selend.x&~0xF);
 
		int dy = thd->selstart.y - (thd->selend.y&~0xF);
 
		
 

	
 
		if (dx == 0 && dy == 0 ) {
 
			// 1x1 tile
 
			bit = GetBestFit1x1(thd->selend.x, thd->selend.y);
 
@@ -521,12 +521,12 @@ static void HandleAutoSignalPlacement()
 

	
 
	int dx = thd->selstart.x - (thd->selend.x&~0xF);
 
	int dy = thd->selstart.y - (thd->selend.y&~0xF);
 
	
 

	
 
	if (dx == 0 && dy == 0 ) // 1x1 tile signals
 
		GenericPlaceSignals(TILE_FROM_XY(thd->selend.x, thd->selend.y));
 
	else { // signals have been dragged
 
		if (thd->drawstyle == HT_RECT) { // X,Y direction
 
			if (dx == 0) 
 
			if (dx == 0)
 
				mode = VPM_FIX_X;
 
			else if (dy == 0)
 
				mode = VPM_FIX_Y;
 
@@ -543,12 +543,12 @@ static void HandleAutoSignalPlacement()
 

	
 
		/* _patches.drag_signals_density is given as a parameter such that each user in a network
 
		 * game can specify his/her own signal density */
 
		DoCommandP(TILE_FROM_XY(thd->selstart.x, thd->selstart.y), TILE_FROM_XY(thd->selend.x, thd->selend.y), 
 
		(mode << 4) | (_remove_button_clicked + (_ctrl_pressed ? 8 : 0)) | (trackstat << 8) | (_patches.drag_signals_density << 24), 
 
		CcPlaySound1E, 
 
		DoCommandP(TILE_FROM_XY(thd->selstart.x, thd->selstart.y), TILE_FROM_XY(thd->selend.x, thd->selend.y),
 
		(mode << 4) | (_remove_button_clicked + (_ctrl_pressed ? 8 : 0)) | (trackstat << 8) | (_patches.drag_signals_density << 24),
 
		CcPlaySound1E,
 
		(_remove_button_clicked ?	CMD_BUILD_MANY_SIGNALS | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM) :
 
															CMD_BUILD_MANY_SIGNALS | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE) ) );									
 
	}	
 
															CMD_BUILD_MANY_SIGNALS | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE) ) );
 
	}
 
}
 

	
 
static OnButtonClick * const _build_railroad_button_proc[] = {
 
@@ -805,7 +805,7 @@ void ShowBuildRailToolbar(int index, int
 

	
 
	// don't recreate the window if we're clicking on a button and the window exists.
 
	if (button < 0 || !(w = FindWindowById(WC_BUILD_TOOLBAR, 0)) || w->wndproc != BuildRailToolbWndProc) {
 
		DeleteWindowById(WC_BUILD_TOOLBAR, 0);	
 
		DeleteWindowById(WC_BUILD_TOOLBAR, 0);
 
		_cur_railtype = (byte)index;
 
		w = AllocateWindowDesc(_build_rr_desc[index]);
 
	}
 
@@ -848,7 +848,7 @@ static void StationBuildWndProc(Window *
 
		}
 
		bits |= (1<<20) << (_station_show_coverage);
 
		w->click_state = bits;
 
		
 

	
 
		if (_railstation.dragdrop) {
 
			SetTileSelectSize(1, 1);
 
		} else {
 
@@ -858,12 +858,12 @@ static void StationBuildWndProc(Window *
 
			if(!_remove_button_clicked)
 
				SetTileSelectSize(x, y);
 
		}
 
				
 

	
 
		if (_station_show_coverage)
 
			SetTileSelectBigSize(-4, -4, 8, 8);
 

	
 
		DrawWindowWidgets(w);
 
		
 

	
 
		StationPickerDrawSprite(39, 42, _cur_railtype, 2);
 
		StationPickerDrawSprite(107, 42, _cur_railtype, 3);
 

	
 
@@ -874,7 +874,7 @@ static void StationBuildWndProc(Window *
 

	
 
		DrawStationCoverageAreaText(2, 166, (uint)-1);
 
	} break;
 
		
 

	
 
	case WE_CLICK: {
 
		switch(e->click.widget) {
 
		case 0:
 
@@ -927,7 +927,7 @@ static void StationBuildWndProc(Window *
 
			break;
 
		}
 
	} break;
 
	
 

	
 
	case WE_MOUSELOOP: {
 
		if (WP(w,def_d).close) {
 
			DeleteWindow(w);
 
@@ -1013,7 +1013,7 @@ static void BuildTrainDepotWndProc(Windo
 
			break;
 
		}
 
	} break;
 
	
 

	
 
	case WE_MOUSELOOP:
 
		if (WP(w,def_d).close)
 
			DeleteWindow(w);
 
@@ -1047,7 +1047,7 @@ static void ShowBuildTrainDepotPicker()
 

	
 
void InitializeRailGui()
 
{
 
	_build_depot_direction = 3;	
 
	_build_depot_direction = 3;
 
	_railstation.numtracks = 1;
 
	_railstation.platlength = 1;
 
	_railstation.dragdrop = true;
resource.h
Show inline comments
 
@@ -4,7 +4,7 @@
 
//
 

	
 
// Next default values for new objects
 
// 
 
//
 
#ifdef APSTUDIO_INVOKED
 
#ifndef APSTUDIO_READONLY_SYMBOLS
 
#define _APS_NEXT_RESOURCE_VALUE        104
road_cmd.c
Show inline comments
 
@@ -25,7 +25,7 @@ bool HasTileRoadAt(uint tile, int i)
 
	switch(GET_TILETYPE(tile)) {
 
	case MP_STREET:
 
		b = _map5[tile];
 
		
 

	
 
		if ((b & 0xF0) == 0) {
 
		} else if ((b & 0xF0) == 0x10) {
 
			b = (b&8)?5:10;
 
@@ -34,7 +34,7 @@ bool HasTileRoadAt(uint tile, int i)
 
		} else
 
			return false;
 
		break;
 
						
 

	
 
	case MP_STATION:
 
		b = _map5[tile];
 
		if (!IS_BYTE_INSIDE(b, 0x43, 0x43+8))
 
@@ -93,7 +93,7 @@ static bool CheckAllowRemoveRoad(uint ti
 
	if (blocks&0x2A && HasTileRoadAt(TILE_ADDXY(tile, 0, 1), 0)) n |= 4;
 
	if (blocks&0x19 && HasTileRoadAt(TILE_ADDXY(tile, 1, 0), 3)) n |= 2;
 
	if (blocks&0x16 && HasTileRoadAt(TILE_ADDXY(tile, 0,-1), 2)) n |= 1;
 
	
 

	
 
	// If 0 or 1 bits are set in n, or if no bits that match the bits to remove,
 
	// then allow it
 
	if ((n & (n-1)) != 0 && (n & br) != 0) {
 
@@ -136,17 +136,17 @@ int32 CmdRemoveRoad(int x, int y, uint32
 
	int32 cost;
 
	uint tile;
 
	Town *t;
 
	/*	true if the roadpiece was always removeable, 
 
	/*	true if the roadpiece was always removeable,
 
			false if it was a center piece. Affects town ratings drop
 
	*/
 
	bool edge_road;
 
	
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	FindLandscapeHeight(&ti, x, y);
 
	tile = ti.tile;
 
	t = ClosestTownFromTile(tile, (uint)-1); // needed for town rating penalty
 
	
 

	
 
	// allow deleting road under bridge
 
	if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))
 
		return CMD_ERROR;
 
@@ -190,26 +190,26 @@ int32 CmdRemoveRoad(int x, int y, uint32
 

	
 
			// limit the bits to delete to the existing bits.
 
			if ((c &= ti.map5) == 0) goto return_error;
 
			
 

	
 
			// calculate the cost
 
			t2 = c;
 
			cost = 0;
 
			do {
 
				if (t2&1) cost += _price.remove_road;			
 
				if (t2&1) cost += _price.remove_road;
 
			} while(t2>>=1);
 
			
 

	
 
			// check if you're allowed to remove the street owned by a town
 
			// removal allowance depends on difficulty setting			
 
			// removal allowance depends on difficulty setting
 
			if(_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR) {
 
				if (!CheckforTownRating(tile, flags, t, ROAD_REMOVE)) 
 
				if (!CheckforTownRating(tile, flags, t, ROAD_REMOVE))
 
					return CMD_ERROR;
 
			}
 
			
 

	
 
			if (flags & DC_EXEC) {
 
				// checks if the owner is town than decrease town rating by 50 until you have 
 
				// checks if the owner is town than decrease town rating by 50 until you have
 
				// a "Poor" town rating
 
				if(_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR)
 
					ChangeTownRating(t, -_road_remove_cost[(byte)edge_road], -100); 
 
					ChangeTownRating(t, -_road_remove_cost[(byte)edge_road], -100);
 

	
 
				_map5[tile] ^= c;
 
				if ((_map5[tile]&0xF) == 0)
 
@@ -218,12 +218,12 @@ int32 CmdRemoveRoad(int x, int y, uint32
 
					MarkTileDirtyByTile(tile);
 

	
 
			}
 
			return cost;			
 
			return cost;
 
		} else if (!(ti.map5 & 0xE0)) {
 
			byte c;
 

	
 
			if (!(ti.map5 & 8)) {
 
				c = 2;	
 
				c = 2;
 
				if (p1 & 5) goto return_error;
 
			} else {
 
				c = 1;
 
@@ -232,7 +232,7 @@ int32 CmdRemoveRoad(int x, int y, uint32
 

	
 
			cost = _price.remove_road * 2;
 
			if (flags & DC_EXEC) {
 
				ModifyTile(tile, 
 
				ModifyTile(tile,
 
					MP_SETTYPE(MP_RAILWAY) |
 
					MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5,
 
					_map3_hi[tile] & 0xF, /* map3_lo */
 
@@ -257,7 +257,7 @@ enum {
 
	ROAD_NE = 8, // NE road track
 
	ROAD_ALL = (ROAD_NW | ROAD_SW | ROAD_SE | ROAD_NE)
 
};
 
 
 

	
 
static const byte _valid_tileh_slopes_road[3][15] = {
 
	// set of normal ones
 
	{
 
@@ -266,9 +266,9 @@ static const byte _valid_tileh_slopes_ro
 
		ROAD_NW | ROAD_SE, 0, 0,
 
		ROAD_NW | ROAD_SE, 0, 0,  // 9, 10, 11
 
		ROAD_SW | ROAD_NE, 0, 0
 
	},  
 
	},
 
	// allowed road for an evenly raised platform
 
	{ 
 
	{
 
		0,
 
		ROAD_SW | ROAD_NW,
 
		ROAD_SW | ROAD_SE,
 
@@ -299,7 +299,7 @@ static const byte _valid_tileh_slopes_ro
 
};
 

	
 

	
 
static uint32 CheckRoadSlope(int tileh, byte *pieces, byte existing)	
 
static uint32 CheckRoadSlope(int tileh, byte *pieces, byte existing)
 
{
 
	if (!(tileh & 0x10)) {
 
		byte road_bits = *pieces | existing;
 
@@ -310,10 +310,10 @@ static uint32 CheckRoadSlope(int tileh, 
 
			if (tileh != 0) *pieces |= _valid_tileh_slopes_road[0][tileh];
 
			return 0; // no extra cost
 
		}
 
		
 

	
 
		// foundation is used. Whole tile is leveled up
 
		if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) {
 
			return existing ? 0 : _price.terraform;	
 
			return existing ? 0 : _price.terraform;
 
		}
 

	
 
		// partly leveled up tile, only if there's no road on that tile
 
@@ -337,7 +337,7 @@ int32 CmdBuildRoad(int x, int y, uint32 
 
	int32 cost;
 
	byte pieces = (byte)p1, existing = 0;
 
	uint tile;
 
	
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	FindLandscapeHeight(&ti, x, y);
 
@@ -557,7 +557,7 @@ int32 CmdRemoveLongRoad(int x, int y, ui
 
		uint bits = (p2 & 4) ? ROAD_SE | ROAD_NW : ROAD_SW | ROAD_NE;
 
		if (tile == end_tile && !(p2&2)) bits &= ROAD_NW | ROAD_NE;
 
		if (tile == start_tile && (p2&1)) bits &= ROAD_SE | ROAD_SW;
 
		
 

	
 
		// try to remove the halves.
 
		if (bits) {
 
			ret = DoCommandByTile(tile, bits, 0, flags, CMD_REMOVE_ROAD);
 
@@ -578,7 +578,7 @@ int32 CmdRemoveLongRoad(int x, int y, ui
 
	return cost;
 
}
 

	
 
/* Build a road depot 
 
/* Build a road depot
 
 * p1 - direction (0-3)
 
 * p2 - unused
 
 */
 
@@ -612,7 +612,7 @@ int32 CmdBuildRoadDepot(int x, int y, ui
 
	if (dep == NULL)
 
		return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {	
 
	if (flags & DC_EXEC) {
 
		if (_current_player == _local_player)
 
			_last_built_road_depot_tile = (TileIndex)tile;
 

	
 
@@ -665,10 +665,10 @@ static int32 ClearTile_Road(uint tile, b
 
		ret = DoCommandByTile(tile, (m5&8)?5:10, 0, flags, CMD_REMOVE_ROAD);
 
		if (ret == CMD_ERROR)
 
			return CMD_ERROR;
 
		
 

	
 
		if (flags & DC_EXEC) {
 
			DoCommandByTile(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
		}	
 
		}
 

	
 
		return ret;
 
	} else {
 
@@ -703,7 +703,7 @@ uint GetRoadFoundation(uint tileh, uint 
 
		return tileh;
 

	
 
	// inclined sloped building
 
	if ( ((i=0, tileh == 1) || (i+=2, tileh == 2) || (i+=2, tileh == 4) || (i+=2, tileh == 8)) && 
 
	if ( ((i=0, tileh == 1) || (i+=2, tileh == 2) || (i+=2, tileh == 4) || (i+=2, tileh == 8)) &&
 
		((bits == (ROAD_SW | ROAD_NE)) || (i++, bits == (ROAD_NW | ROAD_SE))))
 
		return i + 15;
 

	
 
@@ -723,7 +723,7 @@ const byte _road_sloped_sprites[14] = {
 

	
 
static void DrawTile_Road(TileInfo *ti)
 
{
 
	uint32 image;	
 
	uint32 image;
 
	byte m2;
 
	const byte *s;
 

	
 
@@ -733,7 +733,7 @@ static void DrawTile_Road(TileInfo *ti)
 
		if (ti->tileh != 0) {
 
			int f = GetRoadFoundation(ti->tileh, ti->map5 & 0xF);
 
			if (f) DrawFoundation(ti, f);
 
			
 

	
 
			// default sloped sprites..
 
			if (ti->tileh != 0) {
 
				image = _road_sloped_sprites[ti->tileh - 1] + 0x53F;
 
@@ -747,7 +747,7 @@ static void DrawTile_Road(TileInfo *ti)
 
		m2 = _map2[ti->tile] & 7;
 

	
 
		if (m2 == 0) image |= 0x3178000;
 
		
 

	
 
		if (_map3_hi[ti->tile] & 0x80) {
 
			image += 19;
 
		} else if (m2 > 1 && m2 != 6) {
 
@@ -766,7 +766,7 @@ static void DrawTile_Road(TileInfo *ti)
 
		}
 

	
 
		drts = (const DrawRoadTileStruct*)_road_display_table[m2][ti->map5 & 0xF];
 
		
 

	
 
		while ((image = drts->image) != 0) {
 
			int x = ti->x | drts->subcoord_x;
 
			int y = ti->y | drts->subcoord_y;
 
@@ -800,7 +800,7 @@ static void DrawTile_Road(TileInfo *ti)
 
		uint32 ormod;
 
		int player;
 
		const DrawRoadSeqStruct *drss;
 
		
 

	
 
		if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); }
 

	
 
		ormod = 0x315;
 
@@ -809,7 +809,7 @@ static void DrawTile_Road(TileInfo *ti)
 
			ormod = PLAYER_SPRITE_COLOR(player);
 

	
 
		s = _road_display_datas[ti->map5 & 0xF];
 
		
 

	
 
		DrawGroundSprite(*(uint32*)s);
 
		s += sizeof(uint32);
 
		drss = (DrawRoadSeqStruct*)s;
 
@@ -818,7 +818,7 @@ static void DrawTile_Road(TileInfo *ti)
 
			if (image & 0x8000)
 
				image |= ormod;
 

	
 
			AddSortableSpriteToDraw(image, ti->x | drss->subcoord_x, 
 
			AddSortableSpriteToDraw(image, ti->x | drss->subcoord_x,
 
				ti->y | drss->subcoord_y, drss->width, drss->height, 0x14, ti->z);
 
			drss++;
 
		}
 
@@ -843,7 +843,7 @@ void DrawRoadDepotSprite(int x, int y, i
 

	
 
	for(dtss = (DrawRoadSeqStruct *)t; dtss->image != 0; dtss++) {
 
		Point pt = RemapCoords(dtss->subcoord_x, dtss->subcoord_y, 0);
 
		
 

	
 
		image = dtss->image;
 
		if (image & 0x8000)
 
			image |= ormod;
 
@@ -933,7 +933,7 @@ static void TileLoop_Road(uint tile)
 
{
 
	Town *t;
 
	int grp;
 
	
 

	
 
	if (_opt.landscape == LT_HILLY) {
 
		// Fix snow style if the road is above the snowline
 
		if ((_map3_hi[tile] & 0x80) != ((GetTileZ(tile) > _opt.snow_line) ? 0x80 : 0x00)) {
 
@@ -961,14 +961,14 @@ static void TileLoop_Road(uint tile)
 
			}
 

	
 
			grp = GetTownRadiusGroup(t, tile);
 
			
 

	
 
			// Show an animation to indicate road work
 
			if (t->road_build_months != 0 && 
 
			if (t->road_build_months != 0 &&
 
					!(GetTileDist(t->xy, tile) >= 8 && grp==0) &&
 
					(_map5[tile]==5 || _map5[tile]==10)) {
 
				if (GetTileSlope(tile, NULL) == 0 && EnsureNoVehicle(tile) && CHANCE16(1,20)) {
 
					_map2[tile] = ((_map2[tile]&7) <= 1) ? 6 : 7;
 
					
 

	
 
					SndPlayTileFx(0x1F,tile);
 
					CreateEffectVehicleAbove(
 
						GET_TILE_X(tile) * 16 + 7,
 
@@ -987,7 +987,7 @@ static void TileLoop_Road(uint tile)
 

	
 
			if (b == p[0])
 
				return;
 
			
 

	
 
			if (b == p[1]) {
 
				b = p[0];
 
			} else if (b == 0) {
 
@@ -1000,7 +1000,7 @@ static void TileLoop_Road(uint tile)
 
		}
 
	} else {
 
		// Handle road work
 
		
 

	
 
		byte b = _map2[tile];
 
		if (b < 0x80) {
 
			_map2[tile] = b + 8;
 
@@ -1040,10 +1040,10 @@ static uint32 GetTileTrackStatus_Road(ui
 
			/* Crossing */
 
			uint32 r = 0x101;
 
			if (b&8) r <<= 1;
 
				
 

	
 
			if (b&4) {
 
				r *= 0x10001;
 
			}			
 
			}
 
			return r;
 
		} else if ((b&0xF0) == 0x20) {
 
			/* Depot */
0 comments (0 inline, 0 general)