Changeset - r4000:702cb45b8eab
[Not reviewed]
master
0 44 0
tron - 18 years ago 2006-06-10 08:37:41
tron@openttd.org
(svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
44 files changed with 440 insertions and 450 deletions:
0 comments (0 inline, 0 general)
ai/ai.c
Show inline comments
 
@@ -97,7 +97,7 @@ int32 AI_DoCommandCc(TileIndex tile, uin
 
	/* First, do a test-run to see if we can do this */
 
	res = DoCommand(tile, p1, p2, flags & ~DC_EXEC, procc);
 
	/* The command failed, or you didn't want to execute, or you are quering, return */
 
	if ((CmdFailed(res)) || !(flags & DC_EXEC) || (flags & DC_QUERY_COST)) {
 
	if (CmdFailed(res) || !(flags & DC_EXEC) || (flags & DC_QUERY_COST)) {
 
		return res;
 
	}
 

	
 
@@ -105,25 +105,28 @@ int32 AI_DoCommandCc(TileIndex tile, uin
 
	_cmd_text = tmp_cmdtext;
 

	
 
	/* If we did a DC_EXEC, and the command did not return an error, execute it
 
	    over the network */
 
	if (flags & DC_AUTO)                  procc |= CMD_AUTO;
 
	if (flags & DC_NO_WATER)              procc |= CMD_NO_WATER;
 
	 * over the network */
 
	if (flags & DC_AUTO)     procc |= CMD_AUTO;
 
	if (flags & DC_NO_WATER) procc |= CMD_NO_WATER;
 

	
 
	/* NetworkSend_Command needs _local_player to be set correctly, so
 
	    adjust it, and put it back right after the function */
 
	 * adjust it, and put it back right after the function */
 
	old_lp = _local_player;
 
	_local_player = _current_player;
 

	
 
#ifdef ENABLE_NETWORK
 
	/* Send the command */
 
	if (_networking)
 
	if (_networking) {
 
		/* Network is easy, send it to his handler */
 
		NetworkSend_Command(tile, p1, p2, procc, callback);
 
	else
 
	} else {
 
#else
 
	{
 
#endif
 
		/* If we execute BuildCommands directly in SP, we have a big problem with events
 
		 *  so we need to delay is for 1 tick */
 
		AI_PutCommandInQueue(_current_player, tile, p1, p2, procc, callback);
 
	}
 

	
 
	/* Set _local_player back */
 
	_local_player = old_lp;
 
@@ -173,16 +176,14 @@ void AI_RunGameLoop(void)
 
	 *   them.. this avoids that, while loading a network game in singleplayer, does make
 
	 *   the AIs to continue ;))
 
	 */
 
	if (_networking && !_network_server && !_ai.network_client)
 
		return;
 
	if (_networking && !_network_server && !_ai.network_client) return;
 

	
 
	/* New tick */
 
	_ai.tick++;
 

	
 
	/* Make sure the AI follows the difficulty rule.. */
 
	assert(_opt.diff.competitor_speed <= 4);
 
	if ((_ai.tick & ((1 << (4 - _opt.diff.competitor_speed)) - 1)) != 0)
 
		return;
 
	if ((_ai.tick & ((1 << (4 - _opt.diff.competitor_speed)) - 1)) != 0) return;
 

	
 
	/* Check for AI-client (so joining a network with an AI) */
 
	if (_ai.network_client && _ai_player[_ai.network_playas].active) {
 
@@ -191,7 +192,7 @@ void AI_RunGameLoop(void)
 
		AI_RunTick(_ai.network_playas);
 
	} else if (!_networking || _network_server) {
 
		/* Check if we want to run AIs (server or SP only) */
 
		Player *p;
 
		const Player* p;
 

	
 
		FOR_ALL_PLAYERS(p) {
 
			if (p->is_active && p->is_ai) {
 
@@ -224,8 +225,9 @@ void AI_StartNewAI(PlayerID player)
 
 */
 
void AI_PlayerDied(PlayerID player)
 
{
 
	if (_ai.network_client && _ai.network_playas == player)
 
	if (_ai.network_client && _ai.network_playas == player) {
 
		_ai.network_playas = OWNER_SPECTATOR;
 
	}
 

	
 
	/* Called if this AI died */
 
	_ai_player[player].active = false;
 
@@ -254,7 +256,7 @@ void AI_Initialize(void)
 
 */
 
void AI_Uninitialize(void)
 
{
 
	Player* p;
 
	const Player* p;
 

	
 
	FOR_ALL_PLAYERS(p) {
 
		if (p->is_active && p->is_ai) AI_PlayerDied(p->index);
ai/default/default.c
Show inline comments
 
@@ -348,11 +348,11 @@ static void AiHandleReplaceRoadVeh(Playe
 
		tile = v->tile;
 

	
 
		if (!CmdFailed(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH)) &&
 
			  !CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH)) ) {
 
			  !CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH))) {
 
			VehicleID veh = _new_vehicle_id;
 

	
 
			AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
 
			DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
 

	
 
			DoCommand(0, veh, _ai_service_interval, DC_EXEC, CMD_CHANGE_SERVICE_INT);
 
		}
 
	}
 
@@ -1608,8 +1608,7 @@ clear_town_stuff:;
 
			}
 
		} else if (p->mode == 3) {
 
			//Clear stuff and then build single rail.
 
			if (GetTileSlope(c, NULL) != SLOPE_FLAT)
 
				return CMD_ERROR;
 
			if (GetTileSlope(c, NULL) != SLOPE_FLAT) return CMD_ERROR;
 
			ret = DoCommand(c, 0, 0, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_LANDSCAPE_CLEAR);
 
			if (CmdFailed(ret)) return CMD_ERROR;
 
			total_cost += ret + _price.build_rail;
 
@@ -1927,7 +1926,6 @@ static bool AiCheckRailPathBetter(AiRail
 

	
 
static inline void AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex tile, const byte *p)
 
{
 
	TileIndex tile_new;
 
	Slope tileh;
 
	uint z;
 
	bool flag;
 
@@ -1936,7 +1934,8 @@ static inline void AiCheckBuildRailBridg
 

	
 
	tileh = GetTileSlope(tile, &z);
 
	if (tileh == _dir_table_1[dir2] || (tileh == SLOPE_FLAT && z != 0)) {
 
		tile_new = tile;
 
		TileIndex tile_new = tile;
 

	
 
		// Allow bridges directly over bottom tiles
 
		flag = z == 0;
 
		for (;;) {
 
@@ -1977,9 +1976,7 @@ static inline void AiCheckBuildRailTunne
 

	
 
		if (!CmdFailed(cost) && cost <= (arf->player->player_money>>4)) {
 
			AiBuildRailRecursive(arf, _build_tunnel_endtile, p[0]&3);
 
			if (arf->depth == 1) {
 
				AiCheckRailPathBetter(arf, p);
 
			}
 
			if (arf->depth == 1) AiCheckRailPathBetter(arf, p);
 
		}
 
	}
 
}
 
@@ -2009,6 +2006,7 @@ static void AiBuildRailRecursive(AiRailF
 
	// Depth too deep?
 
	if (arf->depth >= 4) {
 
		uint dist = DistanceMaxPlusManhattan(tile, arf->final_tile);
 

	
 
		if (dist < arf->cur_best_dist) {
 
			// Store the tile that is closest to the final position.
 
			arf->cur_best_depth = arf->depth;
 
@@ -2037,9 +2035,7 @@ static void AiBuildRailRecursive(AiRailF
 
			}
 

	
 
			// At the bottom depth?
 
			if (arf->depth == 1) {
 
				AiCheckRailPathBetter(arf, p);
 
			}
 
			if (arf->depth == 1) AiCheckRailPathBetter(arf, p);
 

	
 
			p += 2;
 
		} while (!(p[0]&0x80));
 
@@ -2093,8 +2089,9 @@ static void AiBuildRailConstruct(Player 
 
	// Didn't find anything to build?
 
	if (arf.best_ptr == NULL) {
 
		// Terraform some
 
		for (i=0; i!=5; i++)
 
		for (i = 0; i != 5; i++) {
 
			AiDoTerraformLand(p->ai.cur_tile_a, p->ai.cur_dir_a, 3, 0);
 
		}
 

	
 
		if (++p->ai.state_counter == 21) {
 
			p->ai.state_counter = 40;
 
@@ -2112,16 +2109,16 @@ static void AiBuildRailConstruct(Player 
 
		int i;
 
		int32 bridge_len = GetBridgeLength(arf.bridge_end_tile, p->ai.cur_tile_a);
 

	
 
		/*	Figure out what (rail)bridge type to build
 
				start with best bridge, then go down to worse and worse bridges
 
				unnecessary to check for worse bridge (i=0), since AI will always build that.
 
				AI is so fucked up that fixing this small thing will probably not solve a thing
 
		*/
 
		/* Figure out which (rail)bridge type to build
 
		 * start with best bridge, then go down to worse and worse bridges
 
		 * unnecessary to check for worst bridge (i=0), since AI will always build
 
		 * that. AI is so fucked up that fixing this small thing will probably not
 
		 * solve a thing
 
		 */
 
		for (i = MAX_BRIDGES - 1; i != 0; i--) {
 
			if (CheckBridge_Stuff(i, bridge_len)) {
 
				int32 cost = DoCommand(arf.bridge_end_tile, p->ai.cur_tile_a, i | (p->ai.railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
 
				if (!CmdFailed(cost) && cost < (p->player_money >> 5))
 
					break;
 
				if (!CmdFailed(cost) && cost < (p->player_money >> 5)) break;
 
			}
 
		}
 

	
 
@@ -2130,7 +2127,7 @@ static void AiBuildRailConstruct(Player 
 

	
 
		p->ai.cur_tile_a = arf.bridge_end_tile;
 
		p->ai.state_counter = 0;
 
	} else if (arf.best_ptr[0]&0x40) {
 
	} else if (arf.best_ptr[0] & 0x40) {
 
		// tunnel
 
		DoCommand(p->ai.cur_tile_a, p->ai.railtype_to_use, 0, DC_AUTO | DC_EXEC, CMD_BUILD_TUNNEL);
 
		p->ai.cur_tile_a = _build_tunnel_endtile;
 
@@ -2348,9 +2345,7 @@ static EngineID AiFindBestWagon(CargoID 
 
			continue;
 
		}
 

	
 
		if (rvi->cargo_type != cargo) {
 
			continue;
 
		}
 
		if (rvi->cargo_type != cargo) continue;
 

	
 
		/* max_speed of 0 indicates no speed limit */
 
		speed = rvi->max_speed == 0 ? 0xFFFF : rvi->max_speed;
 
@@ -2374,7 +2369,7 @@ static void AiStateBuildRailVeh(Player *
 
	CargoID cargo;
 
	int32 cost;
 
	Vehicle *v;
 
	uint loco_id;
 
	VehicleID loco_id;
 

	
 
	ptr = _default_rail_track_data[p->ai.src.cur_building_rule]->data;
 
	while (ptr->mode != 0) ptr++;
 
@@ -2395,14 +2390,12 @@ static void AiStateBuildRailVeh(Player *
 
			p->ai.wagon_list[i + 1] = INVALID_VEHICLE;
 
			return;
 
		}
 
		if (cargo == CT_MAIL)
 
			cargo = CT_PASSENGERS;
 
		if (++i == p->ai.num_wagons * 2 - 1)
 
			break;
 
		if (cargo == CT_MAIL) cargo = CT_PASSENGERS;
 
		if (++i == p->ai.num_wagons * 2 - 1) break;
 
	}
 

	
 
	// Which locomotive to build?
 
	veh = AiChooseTrainToBuild(p->ai.railtype_to_use, p->player_money, (cargo!=CT_PASSENGERS)?1:0, tile);
 
	veh = AiChooseTrainToBuild(p->ai.railtype_to_use, p->player_money, cargo != CT_PASSENGERS ? 1 : 0, tile);
 
	if (veh == INVALID_ENGINE) {
 
handle_nocash:
 
		// after a while, if AI still doesn't have cash, get out of this block by selling the wagons.
 
@@ -2435,7 +2428,7 @@ handle_nocash:
 
	}
 

	
 
	for (i = 0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 
		AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
 
		const AiBuildRec* aib = &p->ai.src + p->ai.order_list_blocks[i];
 
		bool is_pass = (
 
			p->ai.cargo_type == CT_PASSENGERS ||
 
			p->ai.cargo_type == CT_MAIL ||
 
@@ -2615,11 +2608,8 @@ clear_town_stuff:;
 
// Make sure the blocks are not too close to each other
 
static bool AiCheckBlockDistances(Player *p, TileIndex tile)
 
{
 
	AiBuildRec *aib;
 
	int num;
 

	
 
	num = p->ai.num_build_rec;
 
	aib = &p->ai.src;
 
	const AiBuildRec* aib = &p->ai.src;
 
	uint num = p->ai.num_build_rec;
 

	
 
	do {
 
		if (aib->cur_building_rule != 255) {
 
@@ -2835,7 +2825,6 @@ static bool AiBuildRoadHelper(TileIndex 
 

	
 
static inline void AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
 
{
 
	TileIndex tile_new;
 
	Slope tileh;
 
	uint z;
 
	bool flag;
 
@@ -2844,7 +2833,8 @@ static inline void AiCheckBuildRoadBridg
 

	
 
	tileh = GetTileSlope(tile, &z);
 
	if (tileh == _dir_table_1[dir2] || (tileh == SLOPE_FLAT && z != 0)) {
 
		tile_new = tile;
 
		TileIndex tile_new = tile;
 

	
 
		// Allow bridges directly over bottom tiles
 
		flag = z == 0;
 
		for (;;) {
 
@@ -2885,9 +2875,7 @@ static inline void AiCheckBuildRoadTunne
 

	
 
		if (!CmdFailed(cost) && cost <= (arf->player->player_money>>4)) {
 
			AiBuildRoadRecursive(arf, _build_tunnel_endtile, p[0]&3);
 
			if (arf->depth == 1) {
 
				AiCheckRoadPathBetter(arf, p);
 
			}
 
			if (arf->depth == 1)  AiCheckRoadPathBetter(arf, p);
 
		}
 
	}
 
}
 
@@ -3032,7 +3020,6 @@ do_some_terraform:
 
		p->ai.cur_tile_a = _build_tunnel_endtile;
 
		p->ai.state_counter = 0;
 
	} else {
 

	
 
		// road
 
		if (!AiBuildRoadHelper(tile, DC_EXEC | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, arf.best_ptr[0]))
 
			goto do_some_terraform;
 
@@ -3062,8 +3049,9 @@ static void AiBuildRoad(Player *p)
 
		uint i;
 

	
 
		// Terraform some and then try building again.
 
		for (i = 0; i != 4; i++)
 
		for (i = 0; i != 4; i++) {
 
			AiDoTerraformLand(p->ai.cur_tile_a, p->ai.cur_dir_a, 3, 0);
 
		}
 

	
 
		if (++p->ai.state_counter == 4) {
 
			p->ai.state_counter = 0;
 
@@ -3156,7 +3144,7 @@ static void AiStateBuildRoadVehicles(Pla
 
{
 
	const AiDefaultBlockData *ptr;
 
	TileIndex tile;
 
	uint loco_id;
 
	VehicleID loco_id;
 
	EngineID veh;
 
	uint i;
 

	
 
@@ -3227,7 +3215,7 @@ static void AiStateDeleteRoadBlocks(Play
 

	
 
static void AiStateAirportStuff(Player *p)
 
{
 
	Station *st;
 
	const Station* st;
 
	byte acc_planes;
 
	int i;
 
	AiBuildRec *aib;
 
@@ -3449,10 +3437,10 @@ static void AiStateBuildAircraftVehicles
 
	TileIndex tile;
 
	EngineID veh;
 
	int i;
 
	uint loco_id;
 
	VehicleID loco_id;
 

	
 
	ptr = _airport_default_block_data[p->ai.src.cur_building_rule];
 
	for (;ptr->mode!=0;ptr++) {}
 
	for (; ptr->mode != 0; ptr++) {}
 

	
 
	tile = TILE_ADD(p->ai.src.use_tile, ToTileIndexDiff(ptr->tileoffs));
 

	
 
@@ -3465,7 +3453,7 @@ static void AiStateBuildAircraftVehicles
 
	if (CmdFailed(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) return;
 
	loco_id = _new_vehicle_id;
 

	
 
	for (i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 
	for (i = 0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 
		AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
 
		bool is_pass = (p->ai.cargo_type == CT_PASSENGERS || p->ai.cargo_type == CT_MAIL);
 
		Order order;
 
@@ -3664,27 +3652,20 @@ pos_3:
 

	
 
		if (GetRoadTileType(tile) == ROAD_TILE_DEPOT) {
 
			DiagDirection dir;
 
			TileIndex t;
 

	
 
			// Check if there are any stations around.
 
			if (IsTileType(tile + TileDiffXY(-1, 0), MP_STATION) &&
 
					IsTileOwner(tile + TileDiffXY(-1, 0), _current_player)) {
 
				return;
 
			}
 

	
 
			if (IsTileType(tile + TileDiffXY(1, 0), MP_STATION) &&
 
					IsTileOwner(tile + TileDiffXY(1, 0), _current_player)) {
 
				return;
 
			}
 

	
 
			if (IsTileType(tile + TileDiffXY(0, -1), MP_STATION) &&
 
					IsTileOwner(tile + TileDiffXY(0, -1), _current_player)) {
 
				return;
 
			}
 

	
 
			if (IsTileType(tile + TileDiffXY(0, 1), MP_STATION) &&
 
					IsTileOwner(tile + TileDiffXY(0, 1), _current_player)) {
 
				return;
 
			}
 
			t = tile + TileDiffXY(-1, 0);
 
			if (IsTileType(t, MP_STATION) && IsTileOwner(t, _current_player)) return;
 

	
 
			t = tile + TileDiffXY(1, 0);
 
			if (IsTileType(t, MP_STATION) && IsTileOwner(t, _current_player)) return;
 

	
 
			t = tile + TileDiffXY(0, -1);
 
			if (IsTileType(t, MP_STATION) && IsTileOwner(t, _current_player)) return;
 

	
 
			t = tile + TileDiffXY(0, 1);
 
			if (IsTileType(t, MP_STATION) && IsTileOwner(t, _current_player)) return;
 

	
 
			dir = GetRoadDepotDirection(tile);
 

	
 
@@ -3881,8 +3862,7 @@ void AiDoGameLoop(Player *p)
 
	//  or in %
 
	_ai_service_interval = _patches.servint_ispercent?80:180;
 

	
 
	if (IS_HUMAN_PLAYER(_current_player))
 
		return;
 
	if (IS_HUMAN_PLAYER(_current_player)) return;
 

	
 
	AiAdjustLoan(p);
 
	AiBuildCompanyHQ(p);
ai/trolly/build.c
Show inline comments
 
@@ -68,14 +68,15 @@ int AiNew_Build_Bridge(Player *p, TileIn
 
			if (type2 != 0) break;
 
		}
 
	}
 
	// There is only one bridge that can be build..
 
	// There is only one bridge that can be built
 
	if (type2 == 0 && type != 0) type2 = type;
 

	
 
	// Now, simply, build the bridge!
 
	if (p->ainew.tbt == AI_TRAIN)
 
		return AI_DoCommand(tile_a, tile_b, (0<<8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
 

	
 
	return AI_DoCommand(tile_a, tile_b, (0x80 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
 
	if (p->ainew.tbt == AI_TRAIN) {
 
		return AI_DoCommand(tile_a, tile_b, (0x00 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
 
	} else {
 
		return AI_DoCommand(tile_a, tile_b, (0x80 << 8) + type2, flag | DC_AUTO, CMD_BUILD_BRIDGE);
 
	}
 
}
 

	
 

	
 
@@ -102,7 +103,10 @@ int AiNew_Build_RoutePart(Player *p, Ai_
 
	//  the first pieces and the last piece
 
	if (part < 1) part = 1;
 
	// When we are done, stop it
 
	if (part >= PathFinderInfo->route_length - 1) { PathFinderInfo->position = -2; return 0; }
 
	if (part >= PathFinderInfo->route_length - 1) {
 
		PathFinderInfo->position = -2;
 
		return 0;
 
	}
 

	
 

	
 
	if (PathFinderInfo->rail_or_road) {
 
@@ -112,7 +116,7 @@ int AiNew_Build_RoutePart(Player *p, Ai_
 
			PathFinderInfo->position++;
 
			// TODO: problems!
 
			if (CmdFailed(cost)) {
 
				DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: tunnel could not be build!");
 
				DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: tunnel could not be built!");
 
				return 0;
 
			}
 
			return cost;
 
@@ -123,7 +127,7 @@ int AiNew_Build_RoutePart(Player *p, Ai_
 
			PathFinderInfo->position++;
 
			// TODO: problems!
 
			if (CmdFailed(cost)) {
 
				DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: bridge could not be build!");
 
				DEBUG(ai,0)("[AiNew - BuildPath] We have a serious problem: bridge could not be built!");
 
				return 0;
 
			}
 
			return cost;
 
@@ -131,7 +135,7 @@ int AiNew_Build_RoutePart(Player *p, Ai_
 

	
 
		// Build normal rail
 
		// Keep it doing till we go an other way
 
		if (route_extra[part-1] == 0 && route_extra[part] == 0) {
 
		if (route_extra[part - 1] == 0 && route_extra[part] == 0) {
 
			while (route_extra[part] == 0) {
 
				// Get the current direction
 
				dir = AiNew_GetRailDirection(route[part-1], route[part], route[part+1]);
ai/trolly/pathfinder.c
Show inline comments
 
@@ -57,7 +57,8 @@ static bool IsRoad(TileIndex tile)
 
// Check if the current tile is in our end-area
 
static int32 AyStar_AiPathFinder_EndNodeCheck(AyStar *aystar, OpenListNode *current)
 
{
 
	Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
 
	const Ai_PathFinderInfo* PathFinderInfo = aystar->user_target;
 

	
 
	// It is not allowed to have a station on the end of a bridge or tunnel ;)
 
	if (current->path.node.user_data[0] != 0) return AYSTAR_DONE;
 
	if (TILES_BETWEEN(current->path.node.tile, PathFinderInfo->end_tile_tl, PathFinderInfo->end_tile_br))
 
@@ -155,9 +156,11 @@ void clean_AyStar_AiPathFinder(AyStar *a
 
	// Now we add all the starting tiles
 
	for (x = TileX(PathFinderInfo->start_tile_tl); x <= TileX(PathFinderInfo->start_tile_br); x++) {
 
		for (y = TileY(PathFinderInfo->start_tile_tl); y <= TileY(PathFinderInfo->start_tile_br); y++) {
 
			if (!(IsTileType(TileXY(x, y), MP_CLEAR) || IsTileType(TileXY(x, y), MP_TREES))) continue;
 
			if (!TestCanBuildStationHere(TileXY(x, y), TEST_STATION_NO_DIR)) continue;
 
			start_node.node.tile = TileXY(x, y);
 
			TileIndex tile = TileXY(x, y);
 

	
 
			if (!IsTileType(tile, MP_CLEAR) && !IsTileType(tile, MP_TREES)) continue;
 
			if (!TestCanBuildStationHere(tile, TEST_STATION_NO_DIR)) continue;
 
			start_node.node.tile = tile;
 
			aystar->addstart(aystar, &start_node.node, 0);
 
		}
 
	}
 
@@ -167,8 +170,9 @@ void clean_AyStar_AiPathFinder(AyStar *a
 
// The h-value, simple calculation
 
static int32 AyStar_AiPathFinder_CalculateH(AyStar *aystar, AyStarNode *current, OpenListNode *parent)
 
{
 
	Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
 
	const Ai_PathFinderInfo* PathFinderInfo = aystar->user_target;
 
	int r, r2;
 

	
 
	if (PathFinderInfo->end_direction != AI_PATHFINDER_NO_DIRECTION) {
 
		// The station is pointing to a direction, add a tile towards that direction, so the H-value is more accurate
 
		r = DistanceManhattan(current->tile, PathFinderInfo->end_tile_tl + TileOffsByDir(PathFinderInfo->end_direction));
 
@@ -447,13 +451,15 @@ static int32 AyStar_AiPathFinder_Calcula
 
		// Check if we are going up or down, first for the starting point
 
		// In user_data[0] is at the 8th bit the direction
 
		if (!HASBIT(BRIDGE_NO_FOUNDATION, parent_tileh)) {
 
			if (GetBridgeFoundation(parent_tileh, (current->user_data[0] >> 8) & 1) < 15)
 
			if (GetBridgeFoundation(parent_tileh, (current->user_data[0] >> 8) & 1) < 15) {
 
				res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
 
			}
 
		}
 
		// Second for the end point
 
		if (!HASBIT(BRIDGE_NO_FOUNDATION, tileh)) {
 
			if (GetBridgeFoundation(tileh, (current->user_data[0] >> 8) & 1) < 15)
 
			if (GetBridgeFoundation(tileh, (current->user_data[0] >> 8) & 1) < 15) {
 
				res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
 
			}
 
		}
 
		if (parent_tileh == SLOPE_FLAT) res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
 
		if (tileh == SLOPE_FLAT) res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
 
@@ -466,10 +472,11 @@ static int32 AyStar_AiPathFinder_Calcula
 
		if (parent->path.parent != NULL &&
 
				AiNew_GetDirection(current->tile, parent->path.node.tile) != AiNew_GetDirection(parent->path.node.tile, parent->path.parent->node.tile)) {
 
			// When road exists, we don't like turning, but its free, so don't be to piggy about it
 
			if (IsRoad(parent->path.node.tile))
 
			if (IsRoad(parent->path.node.tile)) {
 
				res += AI_PATHFINDER_DIRECTION_CHANGE_ON_EXISTING_ROAD_PENALTY;
 
			else
 
			} else {
 
				res += AI_PATHFINDER_DIRECTION_CHANGE_PENALTY;
 
			}
 
		}
 
	} else {
 
		// For rail we have 1 exeption: diagonal rail..
ai/trolly/trolly.c
Show inline comments
 
@@ -128,16 +128,19 @@ static void AiNew_State_WakeUp(Player *p
 
		} else if (c < 100 && !_patches.ai_disable_veh_roadveh) {
 
			// Do we have any spots for road-vehicles left open?
 
			if (GetFreeUnitNumber(VEH_Road) <= _patches.max_roadveh) {
 
				if (c < 85)
 
				if (c < 85) {
 
					p->ainew.action = AI_ACTION_TRUCK_ROUTE;
 
				else
 
				} else {
 
					p->ainew.action = AI_ACTION_BUS_ROUTE;
 
				}
 
			}
 
		}/* else if (c < 200 && !_patches.ai_disable_veh_train) {
 
#if 0
 
		} else if (c < 200 && !_patches.ai_disable_veh_train) {
 
			if (GetFreeUnitNumber(VEH_Train) <= _patches.max_trains) {
 
				p->ainew.action = AI_ACTION_TRAIN_ROUTE;
 
			}
 
		}*/
 
#endif
 
		}
 

	
 
		p->ainew.counter = 0;
 
	}
 
@@ -208,8 +211,8 @@ static void AiNew_State_ActionDone(Playe
 
static bool AiNew_Check_City_or_Industry(Player *p, int ic, byte type)
 
{
 
	if (type == AI_CITY) {
 
		Town *t = GetTown(ic);
 
		Station *st;
 
		const Town* t = GetTown(ic);
 
		const Station* st;
 
		uint count = 0;
 
		int j = 0;
 

	
 
@@ -270,8 +273,8 @@ static bool AiNew_Check_City_or_Industry
 
		return true;
 
	}
 
	if (type == AI_INDUSTRY) {
 
		Industry *i = GetIndustry(ic);
 
		Station *st;
 
		const Industry* i = GetIndustry(ic);
 
		const Station* st;
 
		int count = 0;
 
		int j = 0;
 

	
 
@@ -379,10 +382,11 @@ static void AiNew_State_LocateRoute(Play
 
	if (p->ainew.from_ic == -1) {
 
		if (p->ainew.temp == -1) {
 
			// First, we pick a random spot to search from
 
			if (p->ainew.from_type == AI_CITY)
 
			if (p->ainew.from_type == AI_CITY) {
 
				p->ainew.temp = AI_RandomRange(_total_towns);
 
			else
 
			} else {
 
				p->ainew.temp = AI_RandomRange(_total_industries);
 
			}
 
		}
 

	
 
		if (!AiNew_Check_City_or_Industry(p, p->ainew.temp, p->ainew.from_type)) {
 
@@ -414,10 +418,11 @@ static void AiNew_State_LocateRoute(Play
 
	// Find a to-city
 
	if (p->ainew.temp == -1) {
 
		// First, we pick a random spot to search to
 
		if (p->ainew.to_type == AI_CITY)
 
		if (p->ainew.to_type == AI_CITY) {
 
			p->ainew.temp = AI_RandomRange(_total_towns);
 
		else
 
		} else {
 
			p->ainew.temp = AI_RandomRange(_total_industries);
 
		}
 
	}
 

	
 
	// The same city is not allowed
 
@@ -425,9 +430,10 @@ static void AiNew_State_LocateRoute(Play
 
	if (p->ainew.temp != p->ainew.from_ic && AiNew_Check_City_or_Industry(p, p->ainew.temp, p->ainew.to_type)) {
 
		// Maybe it is valid..
 

	
 
		// We need to know if they are not to far apart from eachother..
 
		// We do that by checking how much cargo we have to move and how long the route
 
		//   is.
 
		/* We need to know if they are not to far apart from eachother..
 
		 * We do that by checking how much cargo we have to move and how long the
 
		 * route is.
 
		 */
 

	
 
		if (p->ainew.from_type == AI_CITY && p->ainew.tbt == AI_BUS) {
 
			const Town* town_from = GetTown(p->ainew.from_ic);
 
@@ -470,7 +476,7 @@ static void AiNew_State_LocateRoute(Play
 
				for (i = 0; i < lengthof(ind_temp->accepts_cargo); i++) {
 
					if (ind_temp->accepts_cargo[i] == CT_INVALID) break;
 
					if (ind_from->produced_cargo[0] == ind_temp->accepts_cargo[i]) {
 
						// Found a compatbiel industry
 
						// Found a compatible industry
 
						max_cargo = ind_from->total_production[0] - ind_from->total_transported[0];
 
						found = true;
 
						p->ainew.from_deliver = true;
 
@@ -672,7 +678,7 @@ static void AiNew_State_FindStation(Play
 
			}
 
		}
 

	
 
		// If i is still zero, we did not found anything :(
 
		// If i is still zero, we did not find anything
 
		if (i == 0) {
 
			p->ainew.state = AI_STATE_NOTHING;
 
			return;
 
@@ -682,7 +688,7 @@ static void AiNew_State_FindStation(Play
 
		best = 0;
 
		new_tile = 0;
 

	
 
		for (x=0;x<i;x++) {
 
		for (x = 0; x < i; x++) {
 
			if (found_best[x] > best ||
 
					(found_best[x] == best && DistanceManhattan(tile, new_tile) > DistanceManhattan(tile, found_spot[x]))) {
 
				new_tile = found_spot[x];
 
@@ -753,10 +759,7 @@ static void AiNew_State_FindPath(Player 
 
			p->ainew.path_info.end_direction = p->ainew.to_direction;
 
		}
 

	
 
		if (p->ainew.tbt == AI_TRAIN)
 
			p->ainew.path_info.rail_or_road = true;
 
		else
 
			p->ainew.path_info.rail_or_road = false;
 
		p->ainew.path_info.rail_or_road = (p->ainew.tbt == AI_TRAIN);
 

	
 
		// First, clean the pathfinder with our new begin and endpoints
 
		clean_AyStar_AiPathFinder(p->ainew.pathfinder, &p->ainew.path_info);
 
@@ -766,20 +769,21 @@ static void AiNew_State_FindPath(Player 
 

	
 
	// Start the pathfinder
 
	r = p->ainew.pathfinder->main(p->ainew.pathfinder);
 
	// If it return: no match, stop it...
 
	if (r == AYSTAR_NO_PATH) {
 
		DEBUG(ai,1)("[AiNew] PathFinder found no route!");
 
		// Start all over again...
 
		p->ainew.state = AI_STATE_NOTHING;
 
		return;
 
	switch (r) {
 
		case AYSTAR_NO_PATH:
 
			DEBUG(ai,1)("[AiNew] PathFinder found no route!");
 
			// Start all over again
 
			p->ainew.state = AI_STATE_NOTHING;
 
			break;
 

	
 
		case AYSTAR_FOUND_END_NODE: // We found the end-point
 
			p->ainew.temp = -1;
 
			p->ainew.state = AI_STATE_FIND_DEPOT;
 
			break;
 

	
 
		// In any other case, we are still busy finding the route
 
		default: break;
 
	}
 
	if (r == AYSTAR_FOUND_END_NODE) {
 
		// We found the end-point
 
		p->ainew.temp = -1;
 
		p->ainew.state = AI_STATE_FIND_DEPOT;
 
		return;
 
	}
 
	// In any other case, we are still busy finding the route...
 
}
 

	
 

	
 
@@ -900,10 +904,11 @@ static int AiNew_HowManyVehicles(Player 
 
		length = p->ainew.path_info.route_length;
 
		// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
 
		tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
 
		if (p->ainew.from_deliver)
 
		if (p->ainew.from_deliver) {
 
			max_cargo = GetIndustry(p->ainew.from_ic)->total_production[0];
 
		else
 
		} else {
 
			max_cargo = GetIndustry(p->ainew.to_ic)->total_production[0];
 
		}
 

	
 
		// This is because moving 60% is more than we can dream of!
 
		max_cargo *= 0.6;
 
@@ -1109,7 +1114,7 @@ static void AiNew_State_BuildDepot(Playe
 

	
 
	if (IsTileType(p->ainew.depot_tile, MP_STREET) && GetRoadTileType(p->ainew.depot_tile) == ROAD_TILE_DEPOT) {
 
		if (IsTileOwner(p->ainew.depot_tile, _current_player)) {
 
			// The depot is already builded!
 
			// The depot is already built
 
			p->ainew.state = AI_STATE_BUILD_VEHICLE;
 
			return;
 
		} else {
aystar.c
Show inline comments
 
@@ -25,24 +25,24 @@ int _aystar_stats_closed_size;
 

	
 
// This looks in the Hash if a node exists in ClosedList
 
//  If so, it returns the PathNode, else NULL
 
static PathNode *AyStarMain_ClosedList_IsInList(AyStar *aystar, AyStarNode *node)
 
static PathNode* AyStarMain_ClosedList_IsInList(AyStar* aystar, const AyStarNode* node)
 
{
 
	return (PathNode*)Hash_Get(&aystar->ClosedListHash, node->tile, node->direction);
 
}
 

	
 
// This adds a node to the ClosedList
 
//  It makes a copy of the data
 
static void AyStarMain_ClosedList_Add(AyStar *aystar, PathNode *node)
 
static void AyStarMain_ClosedList_Add(AyStar* aystar, const PathNode* node)
 
{
 
	// Add a node to the ClosedList
 
	PathNode *new_node = malloc(sizeof(PathNode));
 
	PathNode* new_node = malloc(sizeof(*new_node));
 
	*new_node = *node;
 
	Hash_Set(&aystar->ClosedListHash, node->node.tile, node->node.direction, new_node);
 
}
 

	
 
// Checks if a node is in the OpenList
 
//   If so, it returns the OpenListNode, else NULL
 
static OpenListNode *AyStarMain_OpenList_IsInList(AyStar *aystar, AyStarNode *node)
 
static OpenListNode* AyStarMain_OpenList_IsInList(AyStar* aystar, const AyStarNode* node)
 
{
 
	return (OpenListNode*)Hash_Get(&aystar->OpenListHash, node->tile, node->direction);
 
}
 
@@ -54,18 +54,19 @@ static OpenListNode *AyStarMain_OpenList
 
{
 
	// Return the item the Queue returns.. the best next OpenList item.
 
	OpenListNode* res = (OpenListNode*)aystar->OpenListQueue.pop(&aystar->OpenListQueue);
 
	if (res != NULL)
 
	if (res != NULL) {
 
		Hash_Delete(&aystar->OpenListHash, res->path.node.tile, res->path.node.direction);
 
	}
 

	
 
	return res;
 
}
 

	
 
// Adds a node to the OpenList
 
//  It makes a copy of node, and puts the pointer of parent in the struct
 
static void AyStarMain_OpenList_Add(AyStar *aystar, PathNode *parent, AyStarNode *node, int f, int g)
 
static void AyStarMain_OpenList_Add(AyStar* aystar, PathNode* parent, const AyStarNode* node, int f, int g)
 
{
 
	// Add a new Node to the OpenList
 
	OpenListNode* new_node = malloc(sizeof(OpenListNode));
 
	OpenListNode* new_node = malloc(sizeof(*new_node));
 
	new_node->g = g;
 
	new_node->path.parent = parent;
 
	new_node->path.node = *node;
 
@@ -80,7 +81,8 @@ static void AyStarMain_OpenList_Add(AySt
 
 *  return values:
 
 *	AYSTAR_DONE : indicates we are done
 
 */
 
int AyStarMain_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNode *parent) {
 
int AyStarMain_CheckTile(AyStar* aystar, AyStarNode* current, OpenListNode* parent)
 
{
 
	int new_f, new_g, new_h;
 
	PathNode *closedlist_parent;
 
	OpenListNode *check;
 
@@ -111,7 +113,8 @@ int AyStarMain_CheckTile(AyStar *aystar,
 
	closedlist_parent = AyStarMain_ClosedList_IsInList(aystar, &parent->path.node);
 

	
 
	// Check if this item is already in the OpenList
 
	if ((check = AyStarMain_OpenList_IsInList(aystar, current)) != NULL) {
 
	check = AyStarMain_OpenList_IsInList(aystar, current);
 
	if (check != NULL) {
 
		uint i;
 
		// Yes, check if this g value is lower..
 
		if (new_g > check->g) return AYSTAR_DONE;
 
@@ -120,8 +123,9 @@ int AyStarMain_CheckTile(AyStar *aystar,
 
		check->g = new_g;
 
		check->path.parent = closedlist_parent;
 
		/* Copy user data, will probably have changed */
 
		for (i=0;i<lengthof(current->user_data);i++)
 
		for (i = 0; i < lengthof(current->user_data); i++) {
 
			check->path.node.user_data[i] = current->user_data[i];
 
		}
 
		// Readd him in the OpenListQueue
 
		aystar->OpenListQueue.push(&aystar->OpenListQueue, check, new_f);
 
	} else {
 
@@ -143,15 +147,14 @@ int AyStarMain_CheckTile(AyStar *aystar,
 
 *	AYSTAR_FOUND_END_NODE : indicates we found the end. Path_found now is true, and in path is the path found.
 
 *	AYSTAR_STILL_BUSY : indicates we have done this tile, did not found the path yet, and have items left to try.
 
 */
 
int AyStarMain_Loop(AyStar *aystar) {
 
int AyStarMain_Loop(AyStar* aystar)
 
{
 
	int i, r;
 

	
 
	// Get the best node from OpenList
 
	OpenListNode *current = AyStarMain_OpenList_Pop(aystar);
 
	// If empty, drop an error
 
	if (current == NULL) {
 
		return AYSTAR_EMPTY_OPENLIST;
 
	}
 
	if (current == NULL) return AYSTAR_EMPTY_OPENLIST;
 

	
 
	// Check for end node and if found, return that code
 
	if (aystar->EndNodeCheck(aystar, current) == AYSTAR_FOUND_END_NODE) {
 
@@ -168,7 +171,7 @@ int AyStarMain_Loop(AyStar *aystar) {
 
	aystar->GetNeighbours(aystar, current);
 

	
 
	// Go through all neighbours
 
	for (i=0;i<aystar->num_neighbours;i++) {
 
	for (i = 0; i < aystar->num_neighbours; i++) {
 
		// Check and add them to the OpenList if needed
 
		r = aystar->checktile(aystar, &aystar->neighbours[i], current);
 
	}
 
@@ -188,7 +191,8 @@ int AyStarMain_Loop(AyStar *aystar) {
 
/*
 
 * This function frees the memory it allocated
 
 */
 
void AyStarMain_Free(AyStar *aystar) {
 
void AyStarMain_Free(AyStar* aystar)
 
{
 
	aystar->OpenListQueue.free(&aystar->OpenListQueue, false);
 
	/* 2nd argument above is false, below is true, to free the values only
 
	 * once */
 
@@ -203,7 +207,8 @@ void AyStarMain_Free(AyStar *aystar) {
 
 * This function make the memory go back to zero
 
 *  This function should be called when you are using the same instance again.
 
 */
 
void AyStarMain_Clear(AyStar *aystar) {
 
void AyStarMain_Clear(AyStar* aystar)
 
{
 
	// Clean the Queue, but not the elements within. That will be done by
 
	// the hash.
 
	aystar->OpenListQueue.clear(&aystar->OpenListQueue, false);
 
@@ -232,12 +237,12 @@ int AyStarMain_Main(AyStar *aystar) {
 
	//  Quit if result is no AYSTAR_STILL_BUSY or is more than loops_per_tick
 
	while ((r = aystar->loop(aystar)) == AYSTAR_STILL_BUSY && (aystar->loops_per_tick == 0 || ++i < aystar->loops_per_tick)) { }
 
#ifdef AYSTAR_DEBUG
 
	if (r == AYSTAR_FOUND_END_NODE)
 
		printf("[AyStar] Found path!\n");
 
	else if (r == AYSTAR_EMPTY_OPENLIST)
 
		printf("[AyStar] OpenList run dry, no path found\n");
 
	else if (r == AYSTAR_LIMIT_REACHED)
 
		printf("[AyStar] Exceeded search_nodes, no path found\n");
 
	switch (r) {
 
		case AYSTAR_FOUND_END_NODE: printf("[AyStar] Found path!\n"); break;
 
		case AYSTAR_EMPTY_OPENLIST: printf("[AyStar] OpenList run dry, no path found\n"); break;
 
		case AYSTAR_LIMIT_REACHED:  printf("[AyStar] Exceeded search_nodes, no path found\n"); break;
 
		default: break;
 
	}
 
#endif
 
	if (r != AYSTAR_STILL_BUSY) {
 
		/* We're done, clean up */
 
@@ -246,13 +251,12 @@ int AyStarMain_Main(AyStar *aystar) {
 
		aystar->clear(aystar);
 
	}
 

	
 
	// Check result-value
 
	if (r == AYSTAR_FOUND_END_NODE) return AYSTAR_FOUND_END_NODE;
 
	// Check if we have some left in the OpenList
 
	if (r == AYSTAR_EMPTY_OPENLIST || r == AYSTAR_LIMIT_REACHED) return AYSTAR_NO_PATH;
 

	
 
	// Return we are still busy
 
	return AYSTAR_STILL_BUSY;
 
	switch (r) {
 
		case AYSTAR_FOUND_END_NODE: return AYSTAR_FOUND_END_NODE;
 
		case AYSTAR_EMPTY_OPENLIST:
 
		case AYSTAR_LIMIT_REACHED:  return AYSTAR_NO_PATH;
 
		default:                    return AYSTAR_STILL_BUSY;
 
	}
 
}
 

	
 
/*
 
@@ -262,7 +266,8 @@ int AyStarMain_Main(AyStar *aystar) {
 
 * clear() automatically when the algorithm finishes
 
 * g is the cost for starting with this node.
 
 */
 
void AyStarMain_AddStartNode(AyStar *aystar, AyStarNode *start_node, uint g) {
 
void AyStarMain_AddStartNode(AyStar* aystar, AyStarNode* start_node, uint g)
 
{
 
#ifdef AYSTAR_DEBUG
 
	printf("[AyStar] Starting A* Algorithm from node (%d, %d, %d)\n",
 
		TileX(start_node->tile), TileY(start_node->tile), start_node->direction);
 
@@ -270,7 +275,8 @@ void AyStarMain_AddStartNode(AyStar *ays
 
	AyStarMain_OpenList_Add(aystar, NULL, start_node, 0, g);
 
}
 

	
 
void init_AyStar(AyStar* aystar, Hash_HashProc hash, uint num_buckets) {
 
void init_AyStar(AyStar* aystar, Hash_HashProc hash, uint num_buckets)
 
{
 
	// Allocated the Hash for the OpenList and ClosedList
 
	init_Hash(&aystar->OpenListHash, hash, num_buckets);
 
	init_Hash(&aystar->ClosedListHash, hash, num_buckets);
clear_cmd.c
Show inline comments
 
@@ -142,8 +142,7 @@ static bool TerraformTileHeight(Terrafor
 

	
 
	for (;;) {
 
		if (count == 0) {
 
			if (ts->modheight_count >= 576)
 
				return false;
 
			if (ts->modheight_count >= 576) return false;
 
			ts->modheight_count++;
 
			break;
 
		}
 
@@ -190,6 +189,7 @@ static bool TerraformTileHeight(Terrafor
 
int32 CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 
{
 
	TerraformerState ts;
 
	TileIndex t;
 
	int direction;
 

	
 
	TerraformerHeightMod modheight_data[576];
 
@@ -210,27 +210,31 @@ int32 CmdTerraformLand(TileIndex tile, u
 
	if (tile + TileDiffXY(1, 1) >= MapSize()) return CMD_ERROR;
 

	
 
	if (p1 & 1) {
 
		if (!TerraformTileHeight(&ts, tile + TileDiffXY(1, 0),
 
				TileHeight(tile + TileDiffXY(1, 0)) + direction))
 
					return CMD_ERROR;
 
		t = tile + TileDiffXY(1, 0);
 
		if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
 
			return CMD_ERROR;
 
		}
 
	}
 

	
 
	if (p1 & 2) {
 
		if (!TerraformTileHeight(&ts, tile + TileDiffXY(1, 1),
 
				TileHeight(tile + TileDiffXY(1, 1)) + direction))
 
					return CMD_ERROR;
 
		t = tile + TileDiffXY(1, 1);
 
		if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
 
			return CMD_ERROR;
 
		}
 
	}
 

	
 
	if (p1 & 4) {
 
		if (!TerraformTileHeight(&ts, tile + TileDiffXY(0, 1),
 
				TileHeight(tile + TileDiffXY(0, 1)) + direction))
 
					return CMD_ERROR;
 
		t = tile + TileDiffXY(0, 1);
 
		if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
 
			return CMD_ERROR;
 
		}
 
	}
 

	
 
	if (p1 & 8) {
 
		if (!TerraformTileHeight(&ts, tile + TileDiffXY(0, 0),
 
				TileHeight(tile + TileDiffXY(0, 0)) + direction))
 
					return CMD_ERROR;
 
		t = tile + TileDiffXY(0, 0);
 
		if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
 
			return CMD_ERROR;
 
		}
 
	}
 

	
 
	{ /* Check if tunnel or track would take damage */
 
@@ -430,8 +434,7 @@ int32 CmdSellLandArea(TileIndex tile, ui
 

	
 
	if (!EnsureNoVehicle(tile)) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC)
 
		DoClearSquare(tile);
 
	if (flags & DC_EXEC) DoClearSquare(tile);
 

	
 
	return - _price.purchase_land * 2;
 
}
command.c
Show inline comments
 
@@ -314,7 +314,10 @@ bool IsValidCommand(uint cmd)
 
		_command_proc_table[cmd].proc != NULL;
 
}
 

	
 
byte GetCommandFlags(uint cmd) {return _command_proc_table[cmd & 0xFF].flags;}
 
byte GetCommandFlags(uint cmd)
 
{
 
	return _command_proc_table[cmd & 0xFF].flags;
 
}
 

	
 

	
 
static int _docommand_recursive;
 
@@ -344,9 +347,11 @@ int32 DoCommand(TileIndex tile, uint32 p
 
			goto error;
 
		}
 

	
 
		if (_docommand_recursive == 1) {
 
			if (!(flags&DC_QUERY_COST) && res != 0 && !CheckPlayerHasMoney(res))
 
				goto error;
 
		if (_docommand_recursive == 1 &&
 
				!(flags & DC_QUERY_COST) &&
 
				res != 0 &&
 
				!CheckPlayerHasMoney(res)) {
 
			goto error;
 
		}
 

	
 
		if (!(flags & DC_EXEC)) {
 
@@ -496,12 +501,14 @@ bool DoCommandP(TileIndex tile, uint32 p
 
#endif /* ENABLE_NETWORK */
 

	
 
	// update last build coordinate of player.
 
	if ( tile != 0 && _current_player < MAX_PLAYERS) GetPlayer(_current_player)->last_build_coordinate = tile;
 
	if (tile != 0 && _current_player < MAX_PLAYERS) {
 
		GetPlayer(_current_player)->last_build_coordinate = tile;
 
	}
 

	
 
	/* Actually try and execute the command. If no cost-type is given
 
	 * use the construction one */
 
	_yearly_expenses_type = EXPENSES_CONSTRUCTION;
 
	res2 = proc(tile, flags|DC_EXEC, p1, p2);
 
	res2 = proc(tile, flags | DC_EXEC, p1, p2);
 

	
 
	// If notest is on, it means the result of the test can be different than
 
	//   the real command.. so ignore the test
 
@@ -517,8 +524,7 @@ bool DoCommandP(TileIndex tile, uint32 p
 
	SubtractMoneyFromPlayer(res2);
 

	
 
	if (IsLocalPlayer() && _game_mode != GM_EDITOR) {
 
		if (res2 != 0)
 
			ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2);
 
		if (res2 != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2);
 
		if (_additional_cash_required) {
 
			SetDParam(0, _additional_cash_required);
 
			ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x,y);
depot.h
Show inline comments
 
@@ -72,8 +72,7 @@ static inline bool IsValidDepot(const De
 
 */
 
static inline bool IsTileDepotType(TileIndex tile, TransportType type)
 
{
 
	switch (type)
 
	{
 
	switch (type) {
 
		case TRANSPORT_RAIL:
 
			return IsTileType(tile, MP_RAILWAY) && (_m[tile].m5 & 0xFC) == 0xC0;
 

	
elrail.c
Show inline comments
 
@@ -194,8 +194,9 @@ static void DrawCatenaryRailway(const Ti
 
			/* Next to us, we have a bridge head, don't worry about that one, if it shows away from us */
 
			if (TrackSourceTile[i][k] == TS_NEIGHBOUR &&
 
			    IsBridgeTile(neighbour) && IsBridgeRamp(neighbour) &&
 
			    GetBridgeRampDirection(neighbour) == ReverseDiagDir(i)
 
			   ) continue;
 
			    GetBridgeRampDirection(neighbour) == ReverseDiagDir(i)) {
 
				continue;
 
			}
 

	
 
			/* We check whether the track in question (k) is present in the tile
 
			   (TrackSourceTile) */
functions.h
Show inline comments
 
@@ -205,7 +205,7 @@ bool CheckIfAuthorityAllows(TileIndex ti
 
Town *ClosestTownFromTile(TileIndex tile, uint threshold);
 
void ChangeTownRating(Town *t, int add, int max);
 

	
 
int GetTownRadiusGroup(const Town *t, TileIndex tile);
 
uint GetTownRadiusGroup(const Town* t, TileIndex tile);
 
void ShowNetworkChatQueryWindow(byte desttype, byte dest);
 
void ShowNetworkGiveMoneyWindow(byte player);
 
void ShowNetworkNeedGamePassword(void);
landscape.c
Show inline comments
 
@@ -395,7 +395,7 @@ void InitializeLandscape(void)
 

	
 
void ConvertGroundTilesIntoWaterTiles(void)
 
{
 
	TileIndex tile = 0;
 
	TileIndex tile;
 

	
 
	for (tile = 0; tile < MapSize(); ++tile) {
 
		if (IsTileType(tile, MP_CLEAR) && GetTileMaxZ(tile) == 0) {
map.h
Show inline comments
 
@@ -67,11 +67,11 @@ static inline TileIndex TileVirtXY(uint 
 
	return (y >> 4 << MapLogX()) + (x >> 4);
 
}
 

	
 
typedef enum {
 
	OWNER_TOWN			= 0xf,	// a town owns the tile
 
	OWNER_NONE			= 0x10,	// nobody owns the tile
 
	OWNER_WATER			= 0x11,	// "water" owns the tile
 
	OWNER_SPECTATOR	= 0xff,	// spectator in MP or in scenario editor
 
typedef enum Owner {
 
	OWNER_TOWN      = 0x0F, // a town owns the tile
 
	OWNER_NONE      = 0x10, // nobody owns the tile
 
	OWNER_WATER     = 0x11, // "water" owns the tile
 
	OWNER_SPECTATOR = 0xFF, // spectator in MP or in scenario editor
 
} Owner;
 

	
 
enum {
misc_gui.c
Show inline comments
 
@@ -159,20 +159,20 @@ static void Place_LandInfo(TileIndex til
 
	GetAcceptedCargo(tile, lid.ac);
 
	GetTileDesc(tile, &lid.td);
 

	
 
		#if defined(_DEBUG)
 
		# define LANDINFOD_LEVEL 0
 
		#else
 
		# define LANDINFOD_LEVEL 1
 
		#endif
 
		DEBUG(misc, LANDINFOD_LEVEL) ("TILE: %#x (%i,%i)", tile, TileX(tile), TileY(tile));
 
		DEBUG(misc, LANDINFOD_LEVEL) ("type_height  = %#x", _m[tile].type_height);
 
		DEBUG(misc, LANDINFOD_LEVEL) ("m1           = %#x", _m[tile].m1);
 
		DEBUG(misc, LANDINFOD_LEVEL) ("m2           = %#x", _m[tile].m2);
 
		DEBUG(misc, LANDINFOD_LEVEL) ("m3           = %#x", _m[tile].m3);
 
		DEBUG(misc, LANDINFOD_LEVEL) ("m4           = %#x", _m[tile].m4);
 
		DEBUG(misc, LANDINFOD_LEVEL) ("m5           = %#x", _m[tile].m5);
 
		DEBUG(misc, LANDINFOD_LEVEL) ("extra        = %#x", _m[tile].extra);
 
		#undef LANDINFOD_LEVEL
 
#if defined(_DEBUG)
 
#	define LANDINFOD_LEVEL 0
 
#else
 
#	define LANDINFOD_LEVEL 1
 
#endif
 
	DEBUG(misc, LANDINFOD_LEVEL) ("TILE: %#x (%i,%i)", tile, TileX(tile), TileY(tile));
 
	DEBUG(misc, LANDINFOD_LEVEL) ("type_height  = %#x", _m[tile].type_height);
 
	DEBUG(misc, LANDINFOD_LEVEL) ("m1           = %#x", _m[tile].m1);
 
	DEBUG(misc, LANDINFOD_LEVEL) ("m2           = %#x", _m[tile].m2);
 
	DEBUG(misc, LANDINFOD_LEVEL) ("m3           = %#x", _m[tile].m3);
 
	DEBUG(misc, LANDINFOD_LEVEL) ("m4           = %#x", _m[tile].m4);
 
	DEBUG(misc, LANDINFOD_LEVEL) ("m5           = %#x", _m[tile].m5);
 
	DEBUG(misc, LANDINFOD_LEVEL) ("extra        = %#x", _m[tile].extra);
 
#undef LANDINFOD_LEVEL
 
}
 

	
 
void PlaceLandBlockInfo(void)
 
@@ -730,7 +730,8 @@ void CheckRedrawStationCoverage(const Wi
 
void UnclickSomeWindowButtons(Window *w, uint32 mask)
 
{
 
	uint32 x = w->click_state & mask;
 
	int i = 0;
 
	uint i = 0;
 

	
 
	w->click_state ^= x;
 
	do {
 
		if (x & 1) InvalidateWidget(w, i);
 
@@ -1251,8 +1252,8 @@ static void SaveLoadDlgWndProc(Window *w
 
		}
 

	
 
	case WE_PAINT: {
 
		int y,pos;
 
		const FiosItem *item;
 
		int pos;
 
		int y;
 

	
 
		SetVScrollCount(w, _fios_num);
 
		DrawWindowWidgets(w);
 
@@ -1271,11 +1272,10 @@ static void SaveLoadDlgWndProc(Window *w
 
		);
 

	
 
		y = w->widget[7].top + 1;
 
		pos = w->vscroll.pos;
 
		while (pos < _fios_num) {
 
			item = _fios_list + pos;
 
		for (pos = w->vscroll.pos; pos < _fios_num; pos++) {
 
			const FiosItem* item = _fios_list + pos;
 

	
 
			DoDrawStringTruncated(item->title, 4, y, _fios_colors[item->type], w->width - 18);
 
			pos++;
 
			y += 10;
 
			if (y >= w->vscroll.cap * 10 + w->widget[7].top + 1) break;
 
		}
 
@@ -1285,6 +1285,7 @@ static void SaveLoadDlgWndProc(Window *w
 
		}
 
		break;
 
	}
 

	
 
	case WE_CLICK:
 
		switch (e->click.widget) {
 
		case 2: /* Sort save names by name */
music/qtmidi.c
Show inline comments
 
@@ -66,14 +66,12 @@ enum {
 
static bool PathToFSSpec(const char *path, FSSpec *spec)
 
{
 
	FSRef ref;
 
	assert(spec);
 
	assert(path);
 
	assert(spec != NULL);
 
	assert(path != NULL);
 

	
 
	if (noErr != FSPathMakeRef((UInt8*) path, &ref, NULL))
 
		return false;
 

	
 
	return (noErr ==
 
			FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, NULL, spec, NULL));
 
	return
 
		FSPathMakeRef((UInt8*)path, &ref, NULL) == noErr &&
 
		FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, NULL, spec, NULL) == noErr;
 
}
 

	
 

	
 
@@ -91,7 +89,7 @@ static void SetMIDITypeIfNeeded(const FS
 
	if (noErr != FSpGetFInfo(spec, &info)) return;
 

	
 
	/* Set file type to 'Midi' if the file is _not_ an alias. */
 
	if ((info.fdType != midiType) && !(info.fdFlags & kIsAlias)) {
 
	if (info.fdType != midiType && !(info.fdFlags & kIsAlias)) {
 
		info.fdType = midiType;
 
		FSpSetFInfo(spec, &info);
 
		DEBUG(driver, 3) ("qtmidi: changed filetype to 'Midi'");
 
@@ -115,8 +113,8 @@ static bool LoadMovieForMIDIFile(const c
 
	short refnum = 0;
 
	short resid  = 0;
 

	
 
	assert(path);
 
	assert(moov);
 
	assert(path != NULL);
 
	assert(moov != NULL);
 

	
 
	DEBUG(driver, 2) ("qtmidi: begin loading '%s'...", path);
 

	
 
@@ -126,23 +124,20 @@ static bool LoadMovieForMIDIFile(const c
 
	 * a MIDI file and setting the OSType of the file to the 'Midi' value.
 
	 * Perhahaps ugly, but it seems that it does the Right Thing(tm).
 
	 */
 
	if ((fd = open(path, O_RDONLY, 0)) == -1)
 
		return false;
 
	fd = open(path, O_RDONLY, 0);
 
	if (fd == -1) return false;
 
	ret = read(fd, magic, 4);
 
	close(fd);
 
	if (ret < 4) return false;
 

	
 
	DEBUG(driver, 3) ("qtmidi: header is '%c%c%c%c'",
 
			magic[0], magic[1], magic[2], magic[3]);
 
	DEBUG(driver, 3) ("qtmidi: header is '%.4s'", magic);
 
	if (magic[0] != 'M' || magic[1] != 'T' || magic[2] != 'h' || magic[3] != 'd')
 
		return false;
 

	
 
	if (!PathToFSSpec(path, &fsspec))
 
		return false;
 
	if (!PathToFSSpec(path, &fsspec)) return false;
 
	SetMIDITypeIfNeeded(&fsspec);
 

	
 
	if (noErr != OpenMovieFile(&fsspec, &refnum, fsRdPerm))
 
		return false;
 
	if (OpenMovieFile(&fsspec, &refnum, fsRdPerm) != noErr) return false;
 
	DEBUG(driver, 1) ("qtmidi: '%s' successfully opened", path);
 

	
 
	if (noErr != NewMovieFromFile(moov, refnum, &resid, NULL,
 
@@ -182,13 +177,13 @@ static void InitQuickTimeIfNeeded(void)
 
		(noErr == Gestalt(gestaltQuickTime, &dummy)) &&
 
		(noErr == EnterMovies());
 
	DEBUG(driver, 1) ("qtmidi: Quicktime was %s initialized",
 
			_quicktime_started ? "successfully" : "NOT");
 
		_quicktime_started ? "successfully" : "NOT"
 
	);
 
}
 

	
 

	
 
/** Possible states of the QuickTime music driver. */
 
enum
 
{
 
enum {
 
	QT_STATE_IDLE, /**< No file loaded. */
 
	QT_STATE_PLAY, /**< File loaded, playing. */
 
	QT_STATE_STOP, /**< File loaded, stopped. */
 
@@ -247,7 +242,7 @@ static bool SongIsPlaying(void)
 
				_quicktime_state = QT_STATE_STOP;
 
	}
 

	
 
	return (_quicktime_state == QT_STATE_PLAY);
 
	return _quicktime_state == QT_STATE_PLAY;
 
}
 

	
 

	
network.c
Show inline comments
 
@@ -1242,11 +1242,9 @@ void NetworkUDPGameLoop(void)
 
		if (_udp_master_socket != INVALID_SOCKET) {
 
			NetworkUDPReceive(_udp_master_socket);
 
		}
 
	}
 
	else if (_udp_client_socket != INVALID_SOCKET) {
 
	} else if (_udp_client_socket != INVALID_SOCKET) {
 
		NetworkUDPReceive(_udp_client_socket);
 
		if (_network_udp_broadcast > 0)
 
			_network_udp_broadcast--;
 
		if (_network_udp_broadcast > 0) _network_udp_broadcast--;
 
	}
 
}
 

	
news_gui.c
Show inline comments
 
@@ -221,11 +221,9 @@ static void NewsWindowProc(Window *w, Wi
 
// (to deal with overflows)
 
static byte increaseIndex(byte i)
 
{
 
	if (i == INVALID_NEWS)
 
		return 0;
 
	if (i == INVALID_NEWS) return 0;
 
	i++;
 
	if (i >= MAX_NEWS)
 
		i = i % MAX_NEWS;
 
	if (i >= MAX_NEWS) i = i % MAX_NEWS;
 
	return i;
 
}
 

	
 
@@ -234,8 +232,7 @@ void AddNewsItem(StringID string, uint32
 
	NewsItem *ni;
 
	Window *w;
 

	
 
	if (_game_mode == GM_MENU)
 
		return;
 
	if (_game_mode == GM_MENU) return;
 

	
 
	// check the rare case that the oldest (to be overwritten) news item is open
 
	if (_total_news==MAX_NEWS && (_oldest_news == _current_news || _oldest_news == _forced_news))
npf.c
Show inline comments
 
@@ -277,8 +277,7 @@ static int32 NPFRoadPathCost(AyStar* as,
 
		case MP_STREET:
 
			cost = NPF_TILE_LENGTH;
 
			/* Increase the cost for level crossings */
 
			if (IsLevelCrossing(tile))
 
				cost += _patches.npf_crossing_penalty;
 
			if (IsLevelCrossing(tile)) cost += _patches.npf_crossing_penalty;
 
			break;
 

	
 
		default:
 
@@ -407,15 +406,10 @@ static int32 NPFRailPathCost(AyStar* as,
 
/* Will find any depot */
 
static int32 NPFFindDepot(AyStar* as, OpenListNode *current)
 
{
 
	TileIndex tile = current->path.node.tile;
 

	
 
	/* It's not worth caching the result with NPF_FLAG_IS_TARGET here as below,
 
	 * since checking the cache not that much faster than the actual check */
 
	if (IsTileDepotType(tile, as->user_data[NPF_TYPE])) {
 
		return AYSTAR_FOUND_END_NODE;
 
	} else {
 
		return AYSTAR_DONE;
 
	}
 
	return IsTileDepotType(current->path.node.tile, as->user_data[NPF_TYPE]) ?
 
		AYSTAR_FOUND_END_NODE : AYSTAR_DONE;
 
}
 

	
 
/* Will find a station identified using the NPFFindStationOrTileData */
 
@@ -682,14 +676,12 @@ static NPFFoundTargetData NPFRouteIntern
 
	_npf_aystar.EndNodeCheck = target_proc;
 
	_npf_aystar.FoundEndNode = NPFSaveTargetData;
 
	_npf_aystar.GetNeighbours = NPFFollowTrack;
 
	if (type == TRANSPORT_RAIL)
 
		_npf_aystar.CalculateG = NPFRailPathCost;
 
	else if (type == TRANSPORT_ROAD)
 
		_npf_aystar.CalculateG = NPFRoadPathCost;
 
	else if (type == TRANSPORT_WATER)
 
		_npf_aystar.CalculateG = NPFWaterPathCost;
 
	else
 
		assert(0);
 
	switch (type) {
 
		default: NOT_REACHED();
 
		case TRANSPORT_RAIL:  _npf_aystar.CalculateG = NPFRailPathCost;  break;
 
		case TRANSPORT_ROAD:  _npf_aystar.CalculateG = NPFRoadPathCost;  break;
 
		case TRANSPORT_WATER: _npf_aystar.CalculateG = NPFWaterPathCost; break;
 
	}
 

	
 
	/* Initialize Start Node(s) */
 
	start1->user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR;
oldloader.c
Show inline comments
 
@@ -188,12 +188,11 @@ static inline uint32 ReadUint32(Loadgame
 
static bool LoadChunk(LoadgameState *ls, void *base, const OldChunks *chunks)
 
{
 
	const OldChunks *chunk = chunks;
 
	byte *ptr;
 
	byte *base_ptr = base;
 
	uint i;
 

	
 
	while (chunk->type != OC_END) {
 
		ptr = chunk->ptr;
 
		byte* ptr = chunk->ptr;
 
		uint i;
 

	
 
		for (i = 0; i < chunk->amount; i++) {
 
			if (ls->failed) return false;
openttd.c
Show inline comments
 
@@ -1013,14 +1013,18 @@ static void ConvertTownOwner(void)
 
	TileIndex tile;
 

	
 
	for (tile = 0; tile != MapSize(); tile++) {
 
		if (IsTileType(tile, MP_STREET)) {
 
			if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) & 0x80) {
 
				SetCrossingRoadOwner(tile, OWNER_TOWN);
 
			}
 
		switch (GetTileType(tile)) {
 
			case MP_STREET:
 
				if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) & 0x80) {
 
					SetCrossingRoadOwner(tile, OWNER_TOWN);
 
				}
 
				/* FALLTHROUGH */
 

	
 
			if (GetTileOwner(tile) & 0x80) SetTileOwner(tile, OWNER_TOWN);
 
		} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
 
			if (GetTileOwner(tile) & 0x80) SetTileOwner(tile, OWNER_TOWN);
 
			case MP_TUNNELBRIDGE:
 
				if (GetTileOwner(tile) & 0x80) SetTileOwner(tile, OWNER_TOWN);
 
				break;
 

	
 
			default: break;
 
		}
 
	}
 
}
order_cmd.c
Show inline comments
 
@@ -189,7 +189,7 @@ int32 CmdInsertOrder(TileIndex tile, uin
 
			st = GetStation(new_order.station);
 

	
 
			if (!IsValidStation(st) ||
 
					(st->airport_type != AT_OILRIG && !(IsBuoy(st)) && !CheckOwnership(st->owner))) {
 
					(st->airport_type != AT_OILRIG && !IsBuoy(st) && !CheckOwnership(st->owner))) {
 
				return CMD_ERROR;
 
			}
 

	
order_gui.c
Show inline comments
 
@@ -468,9 +468,7 @@ static void OrdersWndProc(Window *w, Win
 
			if (e->keypress.keycode == _order_keycodes[i]) {
 
				e->keypress.cont = false;
 
				//see if the button is disabled
 
				if (!(HASBIT(w->disabled_state, (i + 4)))) {
 
					_order_button_proc[i](w, v);
 
				}
 
				if (!HASBIT(w->disabled_state, i + 4)) _order_button_proc[i](w, v);
 
				break;
 
			}
 
		}
pathfind.c
Show inline comments
 
@@ -180,7 +180,7 @@ static void TPFMode2(TrackPathFinder* tp
 
		}
 

	
 
continue_here:;
 
		tpf->the_dir = HASBIT(_otherdir_mask[direction],i) ? (i+8) : i;
 
		tpf->the_dir = i + (HASBIT(_otherdir_mask[direction], i) ? 8 : 0);
 

	
 
		if (!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, NULL)) {
 
			TPFMode2(tpf, tile, _tpf_new_direction[tpf->the_dir]);
 
@@ -754,8 +754,7 @@ start_at:
 
				// Check that the tile contains exactly one track
 
				if (bits == 0 || KILL_FIRST_BIT(bits) != 0) break;
 

	
 
				/* Check the rail type only if the train is *NOT* on top of
 
				 * a bridge. */
 
				/* Check the rail type only if the train is *NOT* on top of a bridge. */
 
				if (!(IsBridgeTile(tile) && IsBridgeMiddle(tile) && GetBridgeAxis(tile) == DiagDirToAxis(direction))) {
 
					if (IsTileType(tile, MP_STREET) ? !HASBIT(tpf->railtypes, GetRailTypeCrossing(tile)) : !HASBIT(tpf->railtypes, GetRailType(tile))) {
 
						bits = 0;
pathfind.h
Show inline comments
 
@@ -37,7 +37,6 @@ typedef struct RememberData {
 
} RememberData;
 

	
 
struct TrackPathFinder {
 

	
 
	int num_links_left;
 
	TrackPathFinderLink *new_link;
 

	
player_gui.c
Show inline comments
 
@@ -271,7 +271,7 @@ static void SelectPlayerColorWndProc(Win
 
		for (i = 0; i != 16; i++) {
 
			if (!(used_colors & 1) && --pos < 0 && pos >= -8) {
 
				DrawString(x + 30, y, STR_00D1_DARK_BLUE + i, 2);
 
				DrawSprite(((GENERAL_SPRITE_COLOR(i) | PALETTE_MODIFIER_COLOR) | SPR_VEH_BUS_SIDE_VIEW), x + 14, y + 4);
 
				DrawSprite(GENERAL_SPRITE_COLOR(i) | PALETTE_MODIFIER_COLOR | SPR_VEH_BUS_SIDE_VIEW, x + 14, y + 4);
 
				y += 14;
 
			}
 
			used_colors >>= 1;
players.c
Show inline comments
 
@@ -266,7 +266,7 @@ void GetNameOfOwner(PlayerID owner, Tile
 
		if (owner >= 8)
 
			SetDParam(0, STR_0150_SOMEONE);
 
		else {
 
			Player *p = GetPlayer(owner);
 
			const Player* p = GetPlayer(owner);
 
			SetDParam(0, p->name_1);
 
			SetDParam(1, p->name_2);
 
		}
 
@@ -479,8 +479,7 @@ Player *DoStartupNewPlayer(bool is_ai)
 
	Player *p;
 

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

	
 
	// Make a color
 
	p->player_color = GeneratePlayerColor();
 
@@ -531,15 +530,19 @@ static void MaybeStartNewPlayer(void)
 
	// count number of competitors
 
	n = 0;
 
	FOR_ALL_PLAYERS(p) {
 
		if (p->is_active && p->is_ai)
 
			n++;
 
		if (p->is_active && p->is_ai) n++;
 
	}
 

	
 
	// 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)
 
		if (n < (_network_server ? InteractiveRandomRange(_opt.diff.max_no_competitors + 2) : RandomRange(_opt.diff.max_no_competitors + 2)) )
 
			/* Send a command to all clients to start  up a new AI. Works fine for Multiplayer and Singleplayer */
 
			DoCommandP(0, 1, 0, NULL, CMD_PLAYER_CTRL);
 
	if (n < (uint)_opt.diff.max_no_competitors &&
 
			n < (_network_server ?
 
				InteractiveRandomRange(_opt.diff.max_no_competitors + 2) :
 
				RandomRange(_opt.diff.max_no_competitors + 2)
 
			)) {
 
		/* Send a command to all clients to start up a new AI.
 
		 * Works fine for Multiplayer and Singleplayer */
 
		DoCommandP(0, 1, 0, NULL, CMD_PLAYER_CTRL);
 
	}
 

	
 
	// The next AI starts like the difficulty setting said, with +2 month max
 
	_next_competitor_start = _opt.diff.competitor_start_time * 90 * DAY_TICKS + 1;
 
@@ -548,10 +551,10 @@ static void MaybeStartNewPlayer(void)
 

	
 
void InitializePlayers(void)
 
{
 
	int i;
 
	uint i;
 

	
 
	memset(_players, 0, sizeof(_players));
 
	for (i = 0; i != MAX_PLAYERS; i++)
 
		_players[i].index=i;
 
	for (i = 0; i != MAX_PLAYERS; i++) _players[i].index = i;
 
	_cur_player_tick_index = 0;
 
}
 

	
 
@@ -559,8 +562,7 @@ void OnTick_Players(void)
 
{
 
	Player *p;
 

	
 
	if (_game_mode == GM_EDITOR)
 
		return;
 
	if (_game_mode == GM_EDITOR) return;
 

	
 
	p = GetPlayer(_cur_player_tick_index);
 
	_cur_player_tick_index = (_cur_player_tick_index + 1) % MAX_PLAYERS;
 
@@ -816,15 +818,20 @@ int32 CmdPlayerCtrl(TileIndex tile, uint
 
		p = DoStartupNewPlayer(false);
 

	
 
#ifdef ENABLE_NETWORK
 
		if (_networking && !_network_server && _local_player == OWNER_SPECTATOR)
 
		if (_networking && !_network_server && _local_player == OWNER_SPECTATOR) {
 
			/* In case we are a client joining a server... */
 
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
 
		}
 
#endif /* ENABLE_NETWORK */
 

	
 
		if (p != NULL) {
 
			if (_local_player == OWNER_SPECTATOR && (!_ai.network_client || _ai.network_playas == OWNER_SPECTATOR)) {
 
			if (_local_player == OWNER_SPECTATOR &&
 
					(!_ai.network_client || _ai.network_playas == OWNER_SPECTATOR)) {
 
				/* Check if we do not want to be a spectator in network */
 
				if (!_networking || (_network_server && !_network_dedicated) || _network_playas != OWNER_SPECTATOR || _ai.network_client) {
 
				if (!_networking ||
 
						(_network_server && !_network_dedicated) ||
 
						_network_playas != OWNER_SPECTATOR ||
 
						_ai.network_client) {
 
					if (_ai.network_client) {
 
						/* As ai-network-client, we have our own rulez (disable GUI and stuff) */
 
						_ai.network_playas = p->index;
 
@@ -982,8 +989,7 @@ int8 SaveHighScoreValue(const Player *p)
 
	uint16 score = p->old_economy[0].performance_history;
 

	
 
	/* Exclude cheaters from the honour of being in the highscore table */
 
	if (CheatHasBeenUsed())
 
		return -1;
 
	if (CheatHasBeenUsed()) return -1;
 

	
 
	for (i = 0; i < lengthof(_highscore_table[0]); i++) {
 
		/* You are in the TOP5. Move all values one down and save us there */
 
@@ -1247,8 +1253,9 @@ static void SaveLoad_PLYR(Player* p)
 
	// Write AI?
 
	if (!IS_HUMAN_PLAYER(p->index)) {
 
		SlObject(&p->ai, _player_ai_desc);
 
		for (i = 0; i != p->ai.num_build_rec; i++)
 
		for (i = 0; i != p->ai.num_build_rec; i++) {
 
			SlObject(&p->ai.src + i, _player_ai_build_rec_desc);
 
		}
 
	}
 

	
 
	// Write economy
rail_cmd.c
Show inline comments
 
@@ -725,7 +725,7 @@ static int32 CmdSignalTrackHelper(TileIn
 
	int mode = p2 & 0x1;
 
	Track track = GB(p2, 4, 3);
 
	Trackdir trackdir = TrackToTrackdir(track);
 
	byte semaphores = (HASBIT(p2, 3)) ? 8 : 0;
 
	byte semaphores = (HASBIT(p2, 3) ? 8 : 0);
 
	byte signal_density = (p2 >> 24);
 

	
 
	if (p1 >= MapSize()) return CMD_ERROR;
road_cmd.c
Show inline comments
 
@@ -741,20 +741,19 @@ static void DrawRoadBits(TileInfo* ti, R
 

	
 
static void DrawTile_Road(TileInfo *ti)
 
{
 
	PalSpriteID image;
 

	
 
	switch (GetRoadTileType(ti->tile)) {
 
		case ROAD_TILE_NORMAL:
 
			DrawRoadBits(ti, GetRoadBits(ti->tile));
 
			break;
 

	
 
		case ROAD_TILE_CROSSING: {
 
			PalSpriteID image;
 

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

	
 
			image = GetRailTypeInfo(GetRailTypeCrossing(ti->tile))->base_sprites.crossing;
 

	
 
			if (GetCrossingRoadAxis(ti->tile) == AXIS_X) image++;
 

	
 
			if (IsCrossingBarred(ti->tile)) image += 2;
 

	
 
			if (IsOnSnow(ti->tile)) {
 
@@ -802,12 +801,8 @@ static void DrawTile_Road(TileInfo *ti)
 

	
 
void DrawRoadDepotSprite(int x, int y, int image)
 
{
 
	uint32 ormod;
 
	const DrawRoadSeqStruct *dtss;
 

	
 
	ormod = PLAYER_SPRITE_COLOR(_local_player);
 

	
 
	dtss = _road_display_datas[image];
 
	const DrawRoadSeqStruct* dtss = _road_display_datas[image];
 
	uint32 ormod = PLAYER_SPRITE_COLOR(_local_player);
 

	
 
	x += 33;
 
	y += 17;
 
@@ -1064,7 +1059,7 @@ static void ChangeTileOwner_Road(TileInd
 

	
 
	if (new_player != OWNER_SPECTATOR) {
 
		SetTileOwner(tile, new_player);
 
	}	else {
 
	} else {
 
		switch (GetRoadTileType(tile)) {
 
			case ROAD_TILE_NORMAL:
 
				SetTileOwner(tile, OWNER_NONE);
road_gui.c
Show inline comments
 
@@ -271,7 +271,7 @@ static void BuildRoadToolbWndProc(Window
 
		TileIndex tile = e->place.tile;
 

	
 
		DoCommand(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
 
		VpSetPresizeRange(tile, _build_tunnel_endtile==0?tile:_build_tunnel_endtile);
 
		VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile);
 
		break;
 
	}
 

	
road_map.h
Show inline comments
 
@@ -18,7 +18,7 @@ typedef enum RoadTileType {
 
static inline RoadTileType GetRoadTileType(TileIndex t)
 
{
 
	assert(IsTileType(t, MP_STREET));
 
	return (RoadTileType)(GB(_m[t].m5, 4, 4));
 
	return (RoadTileType)GB(_m[t].m5, 4, 4);
 
}
 

	
 
static inline bool IsLevelCrossing(TileIndex t)
 
@@ -34,7 +34,7 @@ static inline bool IsLevelCrossingTile(T
 
static inline RoadBits GetRoadBits(TileIndex t)
 
{
 
	assert(GetRoadTileType(t) == ROAD_TILE_NORMAL);
 
	return (RoadBits)(GB(_m[t].m5, 0, 4));
 
	return (RoadBits)GB(_m[t].m5, 0, 4);
 
}
 

	
 
static inline void SetRoadBits(TileIndex t, RoadBits r)
roadveh_gui.c
Show inline comments
 
@@ -415,10 +415,9 @@ static void RoadVehViewWndProc(Window *w
 

	
 
	case WE_MOUSELOOP:
 
		{
 
			Vehicle *v;
 
			uint32 h;
 
			v = GetVehicle(w->window_number);
 
			h = IsRoadVehInDepotStopped(v) ? (1 << 7) | (1 << 8) : (1 << 11) | (1 << 12);
 
			const Vehicle* v = GetVehicle(w->window_number);
 
			uint32 h = IsRoadVehInDepotStopped(v) ? 1 << 7 | 1 << 8 : 1 << 11 | 1 << 12;
 

	
 
			if (h != w->hidden_state) {
 
				w->hidden_state = h;
 
				SetWindowDirty(w);
 
@@ -1007,10 +1006,11 @@ static void PlayerRoadVehWndProc(Window 
 
			DrawVehicleProfitButton(v, x, y + 13);
 

	
 
			SetDParam(0, v->unitnumber);
 
			if (IsRoadVehInDepot(v))
 
			if (IsRoadVehInDepot(v)) {
 
				str = STR_021F;
 
			else
 
			} else {
 
				str = v->age > v->max_age - 366 ? STR_00E3 : STR_00E2;
 
			}
 
			DrawString(x, y + 2, str, 0);
 

	
 
			SetDParam(0, v->profit_this_year);
settings.c
Show inline comments
 
@@ -712,9 +712,11 @@ static void ini_load_settings(IniFile *i
 
 * @param sd read-only SettingDesc structure which contains the unmodified,
 
 *        loaded values of the configuration file and various information about it
 
 * @param grpname holds the name of the group (eg. [network]) where these will be saved
 
 * The function works as follows: for each item in the SettingDesc structure we have
 
 * a look if the value has changed since we started the game (the original values
 
 * are reloaded when saving). If settings indeed have changed, we get these and save them.*/
 
 * The function works as follows: for each item in the SettingDesc structure we
 
 * have a look if the value has changed since we started the game (the original
 
 * values are reloaded when saving). If settings indeed have changed, we get
 
 * these and save them.
 
 */
 
static void ini_save_settings(IniFile *ini, const SettingDesc *sd, const char *grpname, void *object)
 
{
 
	IniGroup *group_def = NULL, *group;
 
@@ -894,28 +896,28 @@ static void ini_save_setting_list(IniFil
 
 * We have two types of list:
 
 * 1. SDTG_something
 
 * 2. SDT_something
 
 * The 'G' stands for global, so this is the one you will use for a SettingDescGlobVarList
 
 * section meaning global variables. The other uses a Base/Offset and runtime variable
 
 * selection mechanism, known from the saveload convention (it also has global so it
 
 * should not be hard).
 
 * Of each type there are again two versions, the normal one and one prefixed with 'COND'.
 
 * COND means that the setting is only valid in certain savegame versions (since patches
 
 * are saved to the savegame, this bookkeeping is necessary.
 
 * The 'G' stands for global, so this is the one you will use for a
 
 * SettingDescGlobVarList section meaning global variables. The other uses a
 
 * Base/Offset and runtime variable selection mechanism, known from the saveload * convention (it also has global so it should not be hard).
 
 * Of each type there are again two versions, the normal one and one prefixed
 
 * with 'COND'.
 
 * COND means that the setting is only valid in certain savegame versions
 
 * (since patches are saved to the savegame, this bookkeeping is necessary.
 
 * Now there are a lot of types. Easy ones are:
 
 * - VAR:  any number type, 'type' field specifies what number. eg int8 or uint32
 
 * - BOOL: a boolean number type
 
 * - STR:  a string or character. 'type' field specifies what string. Normal, string, or quoted
 
 * A bit more difficult to use are MMANY (meaning ManyOfMany) and OMANY (OneOfMany)
 
 * These are actually normal numbers, only bitmasked. In MMANY several bits can be
 
 * set, in the other only one.
 
 * These are actually normal numbers, only bitmasked. In MMANY several bits can
 
 * be set, in the other only one.
 
 * The most complex type is INTLIST. This is basically an array of numbers. If
 
 * the intlist is only valid in certain savegame versions because for example
 
 * it has grown in size its length cannot be automatically be calculated so
 
 * use SDT(G)_CONDLISTO() meaning Old.
 
 * If nothing fits you, you can use the GENERAL macros, but it exposes the internal
 
 * structure somewhat so it needs a little looking. There are _NULL() macros as
 
 * well, these fill up space so you can add more patches there (in place) and you
 
 * DON'T have to increase the savegame version. */
 
 * If nothing fits you, you can use the GENERAL macros, but it exposes the
 
 * internal structure somewhat so it needs a little looking. There are _NULL()
 
 * macros as well, these fill up space so you can add more patches there (in
 
 * place) and you DON'T have to increase the savegame version. */
 

	
 
#define NSD_GENERAL(name, def, cmd, guiflags, min, max, many, str, proc)\
 
	{name, (const void*)(def), cmd, guiflags, min, max, many, str, proc}
 
@@ -1218,11 +1220,11 @@ static const SettingDesc _gameopt_settin
 
 * These include for example the GUI settings and will not be saved with the
 
 * savegame.
 
 * It is also a bit tricky since you would think that service_interval
 
 * for example doesn't need to be synched. Every client assigns the service_interval
 
 * value to the v->service_interval, meaning that every client assigns his value. If
 
 * the setting was player-based, that would mean that vehicles could decide on
 
 * different moments that they are heading back to a service depot, causing desyncs
 
 * on a massive scale. */
 
 * for example doesn't need to be synched. Every client assigns the
 
 * service_interval value to the v->service_interval, meaning that every client
 
 * assigns his value. If the setting was player-based, that would mean that
 
 * vehicles could decide on different moments that they are heading back to a
 
 * service depot, causing desyncs on a massive scale. */
 
const SettingDesc _patch_settings[] = {
 
	/***************************************************************************/
 
	/* User-interface section of the GUI-configure patches window */
 
@@ -1336,20 +1338,20 @@ const SettingDesc _patch_settings[] = {
 
	SDT_VAR(Patches, npf_max_search_nodes,SLE_UINT, 0, 0,10000,500,100000, STR_NULL, NULL),
 

	
 
	/* When a red signal is encountered, a small detour can be made around
 
	* it. This specifically occurs when a track is doubled, in which case
 
	* the detour is typically 2 tiles. It is also often used at station
 
	* entrances, when there is a choice of multiple platforms. If we take
 
	* a typical 4 platform station, the detour is 4 tiles. To properly
 
	* support larger stations we increase this value.
 
	* We want to prevent that trains that want to leave at one side of a
 
	* station, leave through the other side, turn around, enter the
 
	* station on another platform and exit the station on the right side
 
	* again, just because the sign at the right side was red. If we take
 
	* a typical 5 length station, this detour is 10 or 11 tiles (not
 
	* sure), so we set the default penalty at 10 (the station tile
 
	* penalty will further prevent this.
 
	* We give presignal exits (and combo's) a different (larger) penalty, because we really
 
	* don't want trains waiting in front of a presignal exit. */
 
	 * it. This specifically occurs when a track is doubled, in which case
 
	 * the detour is typically 2 tiles. It is also often used at station
 
	 * entrances, when there is a choice of multiple platforms. If we take
 
	 * a typical 4 platform station, the detour is 4 tiles. To properly
 
	 * support larger stations we increase this value.
 
	 * We want to prevent that trains that want to leave at one side of a
 
	 * station, leave through the other side, turn around, enter the
 
	 * station on another platform and exit the station on the right side
 
	 * again, just because the sign at the right side was red. If we take
 
	 * a typical 5 length station, this detour is 10 or 11 tiles (not
 
	 * sure), so we set the default penalty at 10 (the station tile
 
	 * penalty will further prevent this.
 
	 * We give presignal exits (and combo's) a different (larger) penalty, because
 
	 * we really don't want trains waiting in front of a presignal exit. */
 
	SDT_VAR(Patches, npf_rail_firstred_penalty,     SLE_UINT, 0, 0, (10 * NPF_TILE_LENGTH), 0, 100000, STR_NULL, NULL),
 
	SDT_VAR(Patches, npf_rail_firstred_exit_penalty,SLE_UINT, 0, 0, (100 * NPF_TILE_LENGTH),0, 100000, STR_NULL, NULL),
 
	/* This penalty is for when the last signal before the target is red.
ship_gui.c
Show inline comments
 
@@ -564,10 +564,9 @@ static void ShipViewWndProc(Window *w, W
 

	
 
		case WE_MOUSELOOP:
 
		{
 
			Vehicle *v;
 
			uint32 h;
 
			v = GetVehicle(w->window_number);
 
			h = IsShipInDepot(v) ? 1 << 7 : 1 << 11;
 
			const Vehicle* v = GetVehicle(w->window_number);
 
			uint32 h = IsShipInDepot(v) ? 1 << 7 : 1 << 11;
 

	
 
			if (h != w->hidden_state) {
 
				w->hidden_state = h;
 
				SetWindowDirty(w);
 
@@ -1012,10 +1011,11 @@ static void PlayerShipsWndProc(Window *w
 
			DrawVehicleProfitButton(v, x, y + 13);
 

	
 
			SetDParam(0, v->unitnumber);
 
			if (IsShipInDepot(v))
 
			if (IsShipInDepot(v)) {
 
				str = STR_021F;
 
			else
 
			} else {
 
				str = v->age > v->max_age - 366 ? STR_00E3 : STR_00E2;
 
			}
 
			DrawString(x, y + 2, str, 0);
 

	
 
			SetDParam(0, v->profit_this_year);
smallmap_gui.c
Show inline comments
 
@@ -938,22 +938,20 @@ static void ExtraViewPortWndProc(Window 
 
	case WE_CREATE: /* Disable zoom in button */
 
		w->disabled_state = (1 << 5);
 
		break;
 

	
 
	case WE_PAINT:
 
		// set the number in the title bar
 
		SetDParam(0, (w->window_number+1));
 
		SetDParam(0, w->window_number + 1);
 

	
 
		DrawWindowWidgets(w);
 
		DrawWindowViewport(w);
 
		break;
 

	
 
	case WE_CLICK: {
 
	case WE_CLICK:
 
		switch (e->click.widget) {
 
		case 5: /* zoom in */
 
			DoZoomInOutWindow(ZOOM_IN, w);
 
			break;
 
		case 6: /* zoom out */
 
			DoZoomInOutWindow(ZOOM_OUT, w);
 
			break;
 
			case 5: DoZoomInOutWindow(ZOOM_IN,  w); break;
 
			case 6: DoZoomInOutWindow(ZOOM_OUT, w); break;
 

	
 
		case 7: { /* location button (move main view to same spot as this view) 'Paste Location' */
 
			Window *w2 = FindWindowById(WC_MAIN_WINDOW, 0);
 
			int x = WP(w, vp_d).scrollpos_x; // Where is the main looking at
 
@@ -963,6 +961,7 @@ static void ExtraViewPortWndProc(Window 
 
			WP(w2, vp_d).scrollpos_x =  x - (w2->viewport->virtual_width -  w->viewport->virtual_width) / 2;
 
			WP(w2, vp_d).scrollpos_y =  y - (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
 
		} break;
 

	
 
		case 8: { /* inverse location button (move this view to same spot as main view) 'Copy Location' */
 
			const Window* w2 = FindWindowById(WC_MAIN_WINDOW, 0);
 
			int x = WP(w2, const vp_d).scrollpos_x;
 
@@ -972,12 +971,11 @@ static void ExtraViewPortWndProc(Window 
 
			WP(w, vp_d).scrollpos_y =  y + (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
 
		} break;
 
		}
 
	} break;
 
		break;
 

	
 
	case WE_RESIZE:
 
		w->viewport->width  += e->sizing.diff.x;
 
		w->viewport->height += e->sizing.diff.y;
 

	
 
		w->viewport->virtual_width  += e->sizing.diff.x;
 
		w->viewport->virtual_height += e->sizing.diff.y;
 
		break;
station_cmd.c
Show inline comments
 
@@ -1914,7 +1914,7 @@ int32 CmdBuildDock(TileIndex tile, uint3
 
	cost = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
	if (CmdFailed(cost)) return CMD_ERROR;
 

	
 
	tile_cur = tile_cur + TileOffsByDir(direction);
 
	tile_cur += TileOffsByDir(direction);
 
	if (!IsTileType(tile_cur, MP_WATER) || GetTileSlope(tile_cur, NULL) != SLOPE_FLAT) {
 
		return_cmd_error(STR_304B_SITE_UNSUITABLE);
 
	}
stdafx.h
Show inline comments
 
@@ -69,11 +69,9 @@
 

	
 
// Stuff for GCC
 
#if defined(__GNUC__)
 
# define NORETURN              __attribute((noreturn))
 
# define NORETURN __attribute__ ((noreturn))
 
# define FORCEINLINE inline
 
# define CDECL
 
//#include <alloca.h>
 
//#include <malloc.h>
 
# define __int64 long long
 
# define NOT_REACHED() assert(0)
 
# define GCC_PACK __attribute__((packed))
town_cmd.c
Show inline comments
 
@@ -1063,17 +1063,20 @@ bool GenerateTowns(void)
 
	uint n = ScaleByMapSize(_num_initial_towns[_opt.diff.number_towns] + (Random() & 7));
 

	
 
	do {
 
		if (CreateRandomTown(20, 0) != NULL) 	//try 20 times to create a random-sized town for the first loop.
 
			num++;
 
		// try 20 times to create a random-sized town for the first loop.
 
		if (CreateRandomTown(20, 0) != NULL) num++;
 
	} while (--n);
 

	
 
	// give it a last try, but now more aggressive
 
	if (num == 0 && CreateRandomTown(10000, 0) == NULL) {
 
		Town *t;
 
		FOR_ALL_TOWNS(t) { if (IsValidTown(t)) {num = 1; break;}}
 
		const Town* t;
 

	
 
		FOR_ALL_TOWNS(t) if (IsValidTown(t)) return true;
 

	
 
		//XXX can we handle that more gracefully?
 
		if (num == 0 && _game_mode != GM_EDITOR) error("Could not generate any town");
 
		if (num == 0 && _game_mode != GM_EDITOR) {
 
			error("Could not generate any town");
 
		}
 
		return false;
 
	}
 

	
 
@@ -1102,19 +1105,18 @@ static bool CheckBuildHouseMode(TileInde
 
	return !CmdFailed(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
 
}
 

	
 
int GetTownRadiusGroup(const Town *t, TileIndex tile)
 

	
 
uint GetTownRadiusGroup(const Town* t, TileIndex tile)
 
{
 
	uint dist;
 
	int i,smallest;
 
	uint dist = DistanceSquare(tile, t->xy);
 
	uint smallest;
 
	uint i;
 

	
 
	dist = DistanceSquare(tile, t->xy);
 
	if (t->fund_buildings_months && dist <= 25)
 
		return 4;
 
	if (t->fund_buildings_months && dist <= 25) return 4;
 

	
 
	smallest = 0;
 
	for (i = 0; i != lengthof(t->radius); i++) {
 
		if (dist < t->radius[i])
 
			smallest = i;
 
		if (dist < t->radius[i]) smallest = i;
 
	}
 

	
 
	return smallest;
 
@@ -1160,8 +1162,7 @@ static void DoBuildTownHouse(Town *t, Ti
 
		uint rad = GetTownRadiusGroup(t, tile);
 

	
 
		int land = _opt.landscape;
 
		if (land == LT_HILLY && z >= _opt.snow_line)
 
			land = -1;
 
		if (land == LT_HILLY && z >= _opt.snow_line) land = -1;
 

	
 
		bitmask = (1 << rad) + (1 << (land + 12));
 
	}
 
@@ -1259,8 +1260,6 @@ static void DoBuildTownHouse(Town *t, Ti
 
		size_flags = GB(_housetype_extra_flags[house], 2, 3);
 
		MakeTownHouse(tile, t->index, construction_counter, construction_stage, size_flags, house);
 
	}
 

	
 
	// ENDING
 
}
 

	
 
static bool BuildTownHouse(Town *t, TileIndex tile)
 
@@ -1710,11 +1709,10 @@ static void UpdateTownAmounts(Town *t)
 

	
 
static void UpdateTownUnwanted(Town *t)
 
{
 
	Player *p;
 
	const Player* p;
 

	
 
	FOR_ALL_PLAYERS(p) {
 
		if (t->unwanted[p->index] > 0)
 
			t->unwanted[p->index]--;
 
		if (t->unwanted[p->index] > 0) t->unwanted[p->index]--;
 
	}
 
}
 

	
 
@@ -1722,15 +1720,12 @@ bool CheckIfAuthorityAllows(TileIndex ti
 
{
 
	Town *t;
 

	
 
	if (_current_player >= MAX_PLAYERS)
 
		return true;
 
	if (_current_player >= MAX_PLAYERS) return true;
 

	
 
	t = ClosestTownFromTile(tile, _patches.dist_local_authority);
 
	if (t == NULL)
 
		return true;
 
	if (t == NULL) return true;
 

	
 
	if (t->ratings[_current_player] > -200)
 
		return true;
 
	if (t->ratings[_current_player] > -200) return true;
 

	
 
	_error_message = STR_2009_LOCAL_AUTHORITY_REFUSES;
 
	SetDParam(0, t->index);
 
@@ -1837,12 +1832,10 @@ void TownsMonthlyLoop(void)
 
	Town *t;
 

	
 
	FOR_ALL_TOWNS(t) if (t->xy != 0) {
 
		if (t->road_build_months != 0)
 
			t->road_build_months--;
 
		if (t->road_build_months != 0) t->road_build_months--;
 

	
 
		if (t->exclusive_counter != 0)
 
			if (--t->exclusive_counter == 0)
 
				t->exclusivity = (byte)-1;
 
			if (--t->exclusive_counter == 0) t->exclusivity = (byte)-1;
 

	
 
		UpdateTownGrowRate(t);
 
		UpdateTownAmounts(t);
train_gui.c
Show inline comments
 
@@ -340,7 +340,7 @@ static void ShowBuildTrainWindow(TileInd
 
	w->widget[2].unkA = (w->vscroll.cap << 8) + 1;
 

	
 
	w->resize.step_height = 14;
 
	w->resize.height = w->height - 14 * 4; /* Minimum of 4 vehicles in the display */
 
	w->resize.height = w->height - 14 * 4; // Minimum of 4 vehicles in the display
 

	
 
	if (tile != 0) {
 
		w->caption_color = GetTileOwner(tile);
 
@@ -1049,10 +1049,9 @@ static void TrainViewWndProc(Window *w, 
 
		break;
 

	
 
	case WE_MOUSELOOP: {
 
		Vehicle *v;
 
		const Vehicle* v = GetVehicle(w->window_number);
 
		uint32 h;
 

	
 
		v = GetVehicle(w->window_number);
 
		assert(v->type == VEH_Train);
 
		h = CheckTrainStoppedInDepot(v) >= 0 ? (1 << 9)| (1 << 7) : (1 << 12) | (1 << 13);
 
		if (h != w->hidden_state) {
tunnelbridge_cmd.c
Show inline comments
 
@@ -238,13 +238,15 @@ int32 CmdBuildBridge(TileIndex end_tile,
 
	}
 

	
 
	/* set and test bridge length, availability */
 
	bridge_len = (sx + sy - x - y) - 1;
 
	bridge_len = sx + sy - x - y - 1;
 
	if (!CheckBridge_Stuff(bridge_type, bridge_len)) return_cmd_error(STR_5015_CAN_T_BUILD_BRIDGE_HERE);
 

	
 
	/* retrieve landscape height and ensure it's on land */
 
	tile_start = TileXY(x, y);
 
	tile_end = TileXY(sx, sy);
 
	if (IsClearWaterTile(tile_start) || IsClearWaterTile(tile_end)) return_cmd_error(STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH);
 
	if (IsClearWaterTile(tile_start) || IsClearWaterTile(tile_end)) {
 
		return_cmd_error(STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH);
 
	}
 

	
 
	tileh_start = GetTileSlope(tile_start, &z_start);
 
	tileh_end = GetTileSlope(tile_end, &z_end);
 
@@ -325,7 +327,7 @@ int32 CmdBuildBridge(TileIndex end_tile,
 
		switch (GetTileType(tile)) {
 
			case MP_WATER:
 
				if (!EnsureNoVehicle(tile)) return_cmd_error(STR_980E_SHIP_IN_THE_WAY);
 
				if (!(IsWater(tile) || IsCoast(tile))) goto not_valid_below;
 
				if (!IsWater(tile) && !IsCoast(tile)) goto not_valid_below;
 
				transport_under = TRANSPORT_WATER;
 
				owner_under = GetTileOwner(tile);
 
				break;
 
@@ -508,7 +510,6 @@ int32 CmdBuildTunnel(TileIndex start_til
 
			MakeRoadTunnel(start_tile, _current_player, direction);
 
			MakeRoadTunnel(end_tile,   _current_player, ReverseDiagDir(direction));
 
		}
 

	
 
	}
 

	
 
	return cost;
 
@@ -660,10 +661,11 @@ static int32 DoClearBridge(TileIndex til
 
	direction = GetBridgeRampDirection(tile);
 
	delta = TileOffsByDir(direction);
 

	
 
	/*	Make sure there's no vehicle on the bridge
 
			Omit tile and endtile, since these are already checked, thus solving the problem
 
			of bridges over water, or higher bridges, where z is not increased, eg level bridge
 
	*/
 
	/* Make sure there's no vehicle on the bridge
 
	 * Omit tile and endtile, since these are already checked, thus solving the
 
	 * problem of bridges over water, or higher bridges, where z is not increased,
 
	 * eg level bridge
 
	 */
 
	/* Bridges on slopes might have their Z-value offset..correct this */
 
	v = FindVehicleBetween(
 
		tile    + delta,
 
@@ -737,10 +739,10 @@ static int32 ClearTile_TunnelBridge(Tile
 
int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
 
{
 
	TileIndex endtile;
 
	uint length;
 
	Vehicle *v;
 

	
 
	if (IsTunnel(tile) && GetTunnelTransportType(tile) == TRANSPORT_RAIL) {
 
		uint length;
 

	
 
		if (!CheckTileOwnership(tile)) return CMD_ERROR;
 

	
 
		if (GetRailType(tile) == totype) return CMD_ERROR;
 
@@ -783,11 +785,10 @@ int32 DoConvertTunnelBridgeRail(TileInde
 
		}
 
		return _price.build_rail >> 1;
 
	} else if (IsBridge(tile) && IsBridgeRamp(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
 
		uint z = TilePixelHeight(tile) + TILE_HEIGHT;
 
		const Vehicle* v;
 
		TileIndexDiff delta;
 
		int32 cost;
 
		uint z = TilePixelHeight(tile);
 

	
 
		z += TILE_HEIGHT;
 

	
 
		if (!CheckTileOwnership(tile)) return CMD_ERROR;
 

	
 
@@ -828,8 +829,9 @@ int32 DoConvertTunnelBridgeRail(TileInde
 
		}
 

	
 
		return cost;
 
	} else
 
	} else {
 
		return CMD_ERROR;
 
	}
 
}
 

	
 

	
 
@@ -876,7 +878,7 @@ static void DrawBridgePillars(PalSpriteI
 

	
 
		for (; z >= front_height || z >= back_height; z -= TILE_HEIGHT) {
 
			if (z >= front_height) { // front facing pillar
 
				AddSortableSpriteToDraw(image, x,y, p[4], p[5], 0x28, z);
 
				AddSortableSpriteToDraw(image, x, y, p[4], p[5], 0x28, z);
 
			}
 

	
 
			if (drawfarpillar && z >= back_height && z < i - TILE_HEIGHT) { // back facing pillar
video/cocoa_v.m
Show inline comments
 
@@ -664,8 +664,6 @@ static bool QZ_PollEvent(void)
 
}
 

	
 

	
 

	
 

	
 
static void QZ_GameLoop(void)
 
{
 
	uint32 next_tick = GetTick() + 30;
video/win32_v.c
Show inline comments
 
@@ -649,13 +649,15 @@ static const uint16 default_resolutions[
 

	
 
static void FindResolutions(void)
 
{
 
	int i = 0, n = 0;
 
	uint n = 0;
 
	uint i;
 
	DEVMODE dm;
 

	
 
	while (EnumDisplaySettings(NULL, i++, &dm) != 0) {
 
	for (i = 0; EnumDisplaySettings(NULL, i, &dm) != 0; i++) {
 
		if (dm.dmBitsPerPel == 8 && IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH + 1) &&
 
				IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT + 1)){
 
			int j;
 
				IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT + 1)) {
 
			uint j;
 

	
 
			for (j = 0; j < n; j++) {
 
				if (_resolutions[j][0] == dm.dmPelsWidth && _resolutions[j][1] == dm.dmPelsHeight) break;
 
			}
viewport.c
Show inline comments
 
@@ -546,6 +546,7 @@ void *AddStringToDraw(int x, int y, Stri
 
	return ss;
 
}
 

	
 

	
 
static void DrawSelectionSprite(uint32 image, const TileInfo *ti)
 
{
 
	if (_added_tile_sprite && !(_thd.drawstyle & HT_LINE)) { // draw on real ground
waypoint.c
Show inline comments
 
@@ -217,8 +217,9 @@ int32 CmdBuildTrainWaypoint(TileIndex ti
 
		MakeRailWaypoint(tile, GetTileOwner(tile), axis, GetRailType(tile), wp->index);
 
		MarkTileDirtyByTile(tile);
 

	
 
		if (GB(p1, 0, 8) < GetNumCustomStations(STAT_CLASS_WAYP))
 
		if (GB(p1, 0, 8) < GetNumCustomStations(STAT_CLASS_WAYP)) {
 
			statspec = GetCustomStationSpec(STAT_CLASS_WAYP, GB(p1, 0, 8));
 
		}
 

	
 
		if (statspec != NULL) {
 
			SetCustomWaypointSprite(tile);
 
@@ -237,8 +238,7 @@ int32 CmdBuildTrainWaypoint(TileIndex ti
 
		wp->xy = tile;
 
		wp->build_date = _date;
 

	
 
		if (wp->town_index == 0)
 
			MakeDefaultWaypointName(wp);
 
		if (wp->town_index == 0) MakeDefaultWaypointName(wp);
 

	
 
		UpdateWaypointSign(wp);
 
		RedrawWaypointSign(wp);
window.c
Show inline comments
 
@@ -1456,9 +1456,9 @@ void InputLoop(void)
 
	_current_player = _local_player;
 

	
 
	// Handle pressed keys
 
	if (_pressed_key) {
 
		uint32 key = _pressed_key; _pressed_key = 0;
 
		HandleKeypress(key);
 
	if (_pressed_key != 0) {
 
		HandleKeypress(_pressed_key);
 
		_pressed_key = 0;
 
	}
 

	
 
	// Mouse event?
0 comments (0 inline, 0 general)