(svn r202) -Codechange: I missed some files with trailing spaces.. this should be

all ;)
This commit is contained in:
truelight 2004-09-11 09:55:19 +00:00
parent 4ccd84f94b
commit 7aa0bdf48b
10 changed files with 283 additions and 283 deletions

View File

@ -194,7 +194,7 @@ static void IndustryDrawTileProc1(TileInfo *ti)
if (!(_map_owner[ti->tile] & 0x80)) if (!(_map_owner[ti->tile] & 0x80))
return; return;
d = &_draw_industry_spec1[_map3_lo[ti->tile]]; d = &_draw_industry_spec1[_map3_lo[ti->tile]];
AddChildSpriteScreen(0x12A7 + d->image_1, d->x, 0); AddChildSpriteScreen(0x12A7 + d->image_1, d->x, 0);
@ -203,14 +203,14 @@ static void IndustryDrawTileProc1(TileInfo *ti)
AddChildSpriteScreen(0x12B0 + image - 1, 8, 41); AddChildSpriteScreen(0x12B0 + image - 1, 8, 41);
if ( (image = d->image_3) != 0) if ( (image = d->image_3) != 0)
AddChildSpriteScreen(0x12AC + image - 1, AddChildSpriteScreen(0x12AC + image - 1,
_drawtile_proc1_x[image-1], _drawtile_proc1_y[image-1]); _drawtile_proc1_x[image-1], _drawtile_proc1_y[image-1]);
} }
static void IndustryDrawTileProc2(TileInfo *ti) static void IndustryDrawTileProc2(TileInfo *ti)
{ {
int x = 0; int x = 0;
if (_map_owner[ti->tile] & 0x80) { if (_map_owner[ti->tile] & 0x80) {
x = _industry_anim_offs[_map3_lo[ti->tile]]; x = _industry_anim_offs[_map3_lo[ti->tile]];
if ( (byte)x == 0xFF) if ( (byte)x == 0xFF)
@ -224,7 +224,7 @@ static void IndustryDrawTileProc2(TileInfo *ti)
static void IndustryDrawTileProc3(TileInfo *ti) static void IndustryDrawTileProc3(TileInfo *ti)
{ {
if (_map_owner[ti->tile] & 0x80) { if (_map_owner[ti->tile] & 0x80) {
AddChildSpriteScreen(0x128B, 5, AddChildSpriteScreen(0x128B, 5,
_industry_anim_offs_2[_map3_lo[ti->tile]]); _industry_anim_offs_2[_map3_lo[ti->tile]]);
} }
AddChildSpriteScreen(0x30B928A, 3, 67); AddChildSpriteScreen(0x30B928A, 3, 67);
@ -254,7 +254,7 @@ static void DrawCoalPlantSparkles(TileInfo *ti)
if (image & 0x80) { if (image & 0x80) {
image = (image >> 2) & 0x1F; image = (image >> 2) & 0x1F;
if (image != 0 && image < 7) { if (image != 0 && image < 7) {
AddChildSpriteScreen(image + 0x806, AddChildSpriteScreen(image + 0x806,
_coal_plant_sparkles_x[image-1], _coal_plant_sparkles_x[image-1],
_coal_plant_sparkles_y[image-1] _coal_plant_sparkles_y[image-1]
); );
@ -305,11 +305,11 @@ static void DrawTile_Industry(TileInfo *ti)
if (image&0x8000 && (image & 0xFFFF0000) == 0) if (image&0x8000 && (image & 0xFFFF0000) == 0)
image |= ormod; image |= ormod;
if (!(_display_opt & DO_TRANS_BUILDINGS)) if (!(_display_opt & DO_TRANS_BUILDINGS))
image = (image & 0x3FFF) | 0x3224000; image = (image & 0x3FFF) | 0x3224000;
AddSortableSpriteToDraw(image, AddSortableSpriteToDraw(image,
ti->x | (dits->subtile_xy>>4), ti->x | (dits->subtile_xy>>4),
ti->y | (dits->subtile_xy&0xF), ti->y | (dits->subtile_xy&0xF),
(dits->width_height>>4)+1, (dits->width_height>>4)+1,
@ -321,7 +321,7 @@ static void DrawTile_Industry(TileInfo *ti)
return; return;
} }
/* TTDBUG: strange code here, return if AddSortableSpriteToDraw failed? */ /* TTDBUG: strange code here, return if AddSortableSpriteToDraw failed? */
{ {
int proc; int proc;
if ((proc=dits->proc-1) >= 0 ) if ((proc=dits->proc-1) >= 0 )
@ -406,15 +406,15 @@ int32 CmdDestroyIndustry(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// check if you're allowed to remove the industry. Minimum amount // check if you're allowed to remove the industry. Minimum amount
// of ratings to remove the industry depends on difficulty setting // 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; return CMD_ERROR;
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
DeleteIndustry(i); DeleteIndustry(i);
CreateEffectVehicleAbove(x + 8,y + 8, 2, EV_DEMOLISH); CreateEffectVehicleAbove(x + 8,y + 8, 2, EV_DEMOLISH);
ChangeTownRating(t, -1500, -1000); // penalty is 1500 ChangeTownRating(t, -1500, -1000); // penalty is 1500
} }
return (_price.build_industry >> 5) * _industry_type_costs[i->type]*2; return (_price.build_industry >> 5) * _industry_type_costs[i->type]*2;
} }
*/ */
@ -435,7 +435,7 @@ void TransportIndustryGoods(uint tile)
byte m5; byte m5;
i = DEREF_INDUSTRY(_map2[tile]); i = DEREF_INDUSTRY(_map2[tile]);
type = i->type; type = i->type;
cw = min(i->cargo_waiting[0], 255); cw = min(i->cargo_waiting[0], 255);
if (cw > _industry_min_cargo[type]/* && i->produced_cargo[0] != 0xFF*/) { 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); cw = min(i->cargo_waiting[1], 255);
if (cw > _industry_min_cargo[type]) { if (cw > _industry_min_cargo[type]) {
i->cargo_waiting[1] -= cw; i->cargo_waiting[1] -= cw;
if (_economy.fluct <= 0) cw = (cw + 1) >> 1; if (_economy.fluct <= 0) cw = (cw + 1) >> 1;
i->last_mo_production[1] += cw; i->last_mo_production[1] += cw;
am = MoveGoodsToStation(i->xy, i->width, i->height, i->produced_cargo[1], cw); am = MoveGoodsToStation(i->xy, i->width, i->height, i->produced_cargo[1], cw);
@ -478,7 +478,7 @@ static void AnimateTile_Industry(uint tile)
case 174: case 174:
if ((_tick_counter & 1) == 0) { if ((_tick_counter & 1) == 0) {
m = _map3_lo[tile] + 1; m = _map3_lo[tile] + 1;
switch(m & 7) { switch(m & 7) {
case 2: SndPlayTileFx(45, tile); break; case 2: SndPlayTileFx(45, tile); break;
case 6: SndPlayTileFx(41, tile); break; case 6: SndPlayTileFx(41, tile); break;
@ -497,7 +497,7 @@ static void AnimateTile_Industry(uint tile)
case 165: case 165:
if ((_tick_counter & 3) == 0) { if ((_tick_counter & 3) == 0) {
m = _map3_lo[tile]; m = _map3_lo[tile];
if (_industry_anim_offs[m] == 0xFF) { if (_industry_anim_offs[m] == 0xFF) {
SndPlayTileFx(48, tile); SndPlayTileFx(48, tile);
} }
@ -556,7 +556,7 @@ static void AnimateTile_Industry(uint tile)
_map3_hi[tile] = 0; _map3_hi[tile] = 0;
DeleteAnimatedTile(tile); DeleteAnimatedTile(tile);
} }
_map3_lo[tile] = m; _map3_lo[tile] = m;
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }
break; break;
@ -581,7 +581,7 @@ static void AnimateTile_Industry(uint tile)
if (m == 4 && (m=0,++n) == 32+1 && (n=30,b)) { if (m == 4 && (m=0,++n) == 32+1 && (n=30,b)) {
_map_owner[tile] = 0x83; _map_owner[tile] = 0x83;
_map5[tile] = 29; _map5[tile] = 29;
DeleteAnimatedTile(tile); DeleteAnimatedTile(tile);
} else { } else {
_map5[tile] = n; _map5[tile] = n;
_map_owner[tile] = (_map_owner[tile] & ~3) | m; _map_owner[tile] = (_map_owner[tile] & ~3) | m;
@ -648,7 +648,7 @@ static void MakeIndustryTileBigger(uint tile, byte size)
size = (size + 1) & 3; size = (size + 1) & 3;
if (size == 3) size |= 0x80; if (size == 3) size |= 0x80;
_map_owner[tile] = size | b; _map_owner[tile] = size | b;
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
if (!(_map_owner[tile] & 0x80)) if (!(_map_owner[tile] & 0x80))
@ -692,7 +692,7 @@ static void TileLoopIndustryCase161(uint tile)
}; };
SndPlayTileFx(46, tile); SndPlayTileFx(46, tile);
dir = Random() & 3; dir = Random() & 3;
v = CreateEffectVehicleAbove( v = CreateEffectVehicleAbove(
@ -783,7 +783,7 @@ static void TileLoop_Industry(uint tile)
break; break;
case 49: { 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; } break;
@ -800,8 +800,8 @@ static void TileLoop_Industry(uint tile)
case 161: case 161:
TileLoopIndustryCase161(tile); TileLoopIndustryCase161(tile);
break; break;
case 165: case 165:
AddAnimatedTile(tile); AddAnimatedTile(tile);
break; break;
@ -840,7 +840,7 @@ static void ChangeTileOwner_Industry(uint tile, byte old_player, byte new_player
void DeleteIndustry(Industry *i) void DeleteIndustry(Industry *i)
{ {
int index = i - _industries; int index = i - _industries;
BEGIN_TILE_LOOP(tile_cur, i->width, i->height, i->xy); BEGIN_TILE_LOOP(tile_cur, i->width, i->height, i->xy);
if (IS_TILETYPE(tile_cur, MP_INDUSTRY)) { if (IS_TILETYPE(tile_cur, MP_INDUSTRY)) {
if (_map2[tile_cur] == (byte)index) { if (_map2[tile_cur] == (byte)index) {
@ -850,7 +850,7 @@ void DeleteIndustry(Industry *i)
DeleteOilRig(tile_cur); DeleteOilRig(tile_cur);
} }
END_TILE_LOOP(tile_cur, i->width, i->height, i->xy); END_TILE_LOOP(tile_cur, i->width, i->height, i->xy);
i->xy = 0; i->xy = 0;
_industry_sort_dirty = true; _industry_sort_dirty = true;
DeleteSubsidyWithIndustry(index); DeleteSubsidyWithIndustry(index);
@ -894,9 +894,9 @@ static void SetupFarmFieldFence(uint tile, int size, byte type, int direction)
do { do {
tile = TILE_MASK(tile); tile = TILE_MASK(tile);
if (IS_TILETYPE(tile, MP_CLEAR) || IS_TILETYPE(tile, MP_TREES)) { if (IS_TILETYPE(tile, MP_CLEAR) || IS_TILETYPE(tile, MP_TREES)) {
or = type; or = type;
if (or == 1 && (uint16)Random() <= 9362) or = 2; if (or == 1 && (uint16)Random() <= 9362) or = 2;
@ -908,7 +908,7 @@ static void SetupFarmFieldFence(uint tile, int size, byte type, int direction)
} }
_map3_hi[tile] = (_map3_hi[tile] & and) | or; _map3_hi[tile] = (_map3_hi[tile] & and) | or;
} }
tile += direction ? TILE_XY(0,1) : TILE_XY(1,0); tile += direction ? TILE_XY(0,1) : TILE_XY(1,0);
} while (--size); } while (--size);
} }
@ -933,7 +933,7 @@ static void PlantFarmField(uint tile)
/* offset tile to match size */ /* offset tile to match size */
tile = tile - TILE_XY(size_x>>1, size_y>>1); tile = tile - TILE_XY(size_x>>1, size_y>>1);
/* check the amount of bad tiles */ /* check the amount of bad tiles */
count = 0; count = 0;
BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile) 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) BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile)
cur_tile = TILE_MASK(cur_tile); cur_tile = TILE_MASK(cur_tile);
if (!IsBadFarmFieldTile2(cur_tile)) { if (!IsBadFarmFieldTile2(cur_tile)) {
ModifyTile(cur_tile, ModifyTile(cur_tile,
MP_SETTYPE(MP_CLEAR) | MP_SETTYPE(MP_CLEAR) |
MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAPOWNER | MP_MAP5, MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAPOWNER | MP_MAP5,
type2, /* map3_lo */ type2, /* map3_lo */
OWNER_NONE, /* map_owner */ OWNER_NONE, /* map_owner */
type); /* map5 */ type); /* map5 */
} }
END_TILE_LOOP(cur_tile, size_x, size_y, tile) END_TILE_LOOP(cur_tile, size_x, size_y, tile)
type = 3; type = 3;
if (_opt.landscape != LT_HILLY && _opt.landscape != LT_DESERT) { if (_opt.landscape != LT_HILLY && _opt.landscape != LT_DESERT) {
type = _plantfarmfield_type[Random() & 0xF]; type = _plantfarmfield_type[Random() & 0xF];
@ -979,13 +979,13 @@ static void MaybePlantFarmField(Industry *i)
tile = TileAddWrap(i->xy, ((i->width>>1) + Random() % 31 - 16), ((i->height>>1) + Random() % 31 - 16)); tile = TileAddWrap(i->xy, ((i->width>>1) + Random() % 31 - 16), ((i->height>>1) + Random() % 31 - 16));
if (tile != TILE_WRAPPED) if (tile != TILE_WRAPPED)
PlantFarmField(tile); PlantFarmField(tile);
} }
} }
static void ChopLumberMillTrees(Industry *i) 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) }; 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; uint tile = i->xy;
int dir, a, j; int dir, a, j;
@ -1096,9 +1096,9 @@ void OnTick_Industry()
_industry_sound_ctr++; _industry_sound_ctr++;
if (_industry_sound_ctr == 75) { if (_industry_sound_ctr == 75) {
SndPlayTileFx(55, _industry_sound_tile); SndPlayTileFx(55, _industry_sound_tile);
} else if (_industry_sound_ctr == 160) { } else if (_industry_sound_ctr == 160) {
_industry_sound_ctr = 0; _industry_sound_ctr = 0;
SndPlayTileFx(54, _industry_sound_tile); SndPlayTileFx(54, _industry_sound_tile);
} }
} }
@ -1134,7 +1134,7 @@ extern bool _ignore_restrictions;
static bool CheckNewIndustry_Oilwell(uint tile, int type) static bool CheckNewIndustry_Oilwell(uint tile, int type)
{ {
int x,y; int x,y;
if(_ignore_restrictions && _game_mode == GM_EDITOR) if(_ignore_restrictions && _game_mode == GM_EDITOR)
return true; return true;
@ -1230,7 +1230,7 @@ static Town *CheckMultipleIndustryInTown(uint tile, int type)
Industry *i; Industry *i;
t = ClosestTownFromTile(tile, (uint)-1); t = ClosestTownFromTile(tile, (uint)-1);
if (_patches.multiple_industry_per_town) if (_patches.multiple_industry_per_town)
return t; return t;
@ -1285,9 +1285,9 @@ static bool CheckIfIndustryTilesAreFree(uint tile, const IndustryTileTable *it,
continue; continue;
return false; return false;
} }
FindLandscapeHeightByTile(&ti, cur_tile); FindLandscapeHeightByTile(&ti, cur_tile);
if (it->map5 == 0xFF) { if (it->map5 == 0xFF) {
if (ti.type != MP_WATER || ti.tileh != 0) if (ti.type != MP_WATER || ti.tileh != 0)
return false; return false;
@ -1310,7 +1310,7 @@ static bool CheckIfIndustryTilesAreFree(uint tile, const IndustryTileTable *it,
if (bits & 0x10) if (bits & 0x10)
return false; return false;
t = ~ti.tileh; t = ~ti.tileh;
if (bits & 1 && (t & (1+8))) if (bits & 1 && (t & (1+8)))
@ -1344,7 +1344,7 @@ static bool CheckIfIndustryTilesAreFree(uint tile, const IndustryTileTable *it,
if (ti.type != MP_HOUSE) { if (ti.type != MP_HOUSE) {
_error_message = STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS; _error_message = STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS;
return false; return false;
} }
} else { } else {
do_clear: do_clear:
if (DoCommandByTile(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR) == CMD_ERROR) if (DoCommandByTile(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR) == CMD_ERROR)
@ -1366,7 +1366,7 @@ static bool CheckIfTooCloseToIndustry(uint tile, int type)
// accepting industries won't be close, not even with patch // accepting industries won't be close, not even with patch
if (_patches.same_industry_close && (spec->accepts_cargo[0] == 0xFF) ) if (_patches.same_industry_close && (spec->accepts_cargo[0] == 0xFF) )
return true; return true;
for(i=_industries; i != endof(_industries); i++) { for(i=_industries; i != endof(_industries); i++) {
// check if an industry that accepts the same goods is nearby // check if an industry that accepts the same goods is nearby
if (i->xy != 0 && if (i->xy != 0 &&
@ -1451,7 +1451,7 @@ static void DoCreateNewIndustry(Industry *i, uint tile, int type, const Industry
if (_generating_world == 0) if (_generating_world == 0)
i->total_production[0] = i->total_production[1] = 0; i->total_production[0] = i->total_production[1] = 0;
i->prod_level = 0x10; i->prod_level = 0x10;
do { do {
@ -1512,7 +1512,7 @@ int32 CmdBuildIndustry(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if ((t=CheckMultipleIndustryInTown(tile, p1)) == NULL) if ((t=CheckMultipleIndustryInTown(tile, p1)) == NULL)
return CMD_ERROR; return CMD_ERROR;
num = spec->num_table; num = spec->num_table;
itt = spec->table; itt = spec->table;
@ -1530,7 +1530,7 @@ int32 CmdBuildIndustry(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) if (flags & DC_EXEC)
DoCreateNewIndustry(i, tile, p1, it, t, 0x10); DoCreateNewIndustry(i, tile, p1, it, t, 0x10);
return (_price.build_industry >> 5) * _industry_type_costs[p1]; return (_price.build_industry >> 5) * _industry_type_costs[p1];
} }
@ -1567,7 +1567,7 @@ Industry *CreateNewIndustry(uint tile, int type)
return NULL; return NULL;
DoCreateNewIndustry(i, tile, type, it, t, 0x10); DoCreateNewIndustry(i, tile, type, it, t, 0x10);
return i; return i;
} }
@ -1590,7 +1590,7 @@ static void PlaceInitialIndustry(byte type, int amount)
int i = 2000; int i = 2000;
do { do {
if (CreateNewIndustry(TILE_MASK(Random()), type) != NULL) if (CreateNewIndustry(TILE_MASK(Random()), type) != NULL)
break; break;
} while (--i != 0); } while (--i != 0);
} while (--num); } while (--num);
} }
@ -1627,7 +1627,7 @@ static void ExtChangeIndustryProduction(Industry *i)
change = old = i->production_rate[j]; change = old = i->production_rate[j];
if (CHANCE16R(20,1024,r))change -= ((RandomRange(50) + 10)*old) >> 8; 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; 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 // make sure it doesn't exceed 255 or goes below 0
change = clamp(change, 0, 255); change = clamp(change, 0, 255);
if (change == old) { if (change == old) {
@ -1640,14 +1640,14 @@ static void ExtChangeIndustryProduction(Industry *i)
if (change >= _industry_spec[i->type].production_rate[j]/4) if (change >= _industry_spec[i->type].production_rate[j]/4)
closeit = false; closeit = false;
mag = abs(percent); mag = abs(percent);
if (mag >= 10) { if (mag >= 10) {
SET_DPARAM16(3, mag); SET_DPARAM16(3, mag);
SET_DPARAM16(0,_cargoc.names_s[i->produced_cargo[j]]); SET_DPARAM16(0,_cargoc.names_s[i->produced_cargo[j]]);
SET_DPARAM16(1, i->town->index); SET_DPARAM16(1, i->town->index);
SET_DPARAM16(2, i->type + STR_4802_COAL_MINE); 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), NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ECONOMY, 0),
i->xy + TILE_XY(1,1), 0); i->xy + TILE_XY(1,1), 0);
} }
@ -1666,13 +1666,13 @@ static void ExtChangeIndustryProduction(Industry *i)
static void UpdateIndustryStatistics(Industry *i) static void UpdateIndustryStatistics(Industry *i)
{ {
byte pct; byte pct;
if (i->produced_cargo[0] != 0xFF) { if (i->produced_cargo[0] != 0xFF) {
pct = 0; pct = 0;
if (i->last_mo_production[0] != 0) { if (i->last_mo_production[0] != 0) {
i->last_prod_year = _cur_year; i->last_prod_year = _cur_year;
pct = min(i->last_mo_transported[0] * 256 / i->last_mo_production[0],255); pct = min(i->last_mo_transported[0] * 256 / i->last_mo_production[0],255);
} }
i->pct_transported[0] = pct; i->pct_transported[0] = pct;
i->total_production[0] = i->last_mo_production[0]; i->total_production[0] = i->last_mo_production[0];
@ -1687,7 +1687,7 @@ static void UpdateIndustryStatistics(Industry *i)
if (i->last_mo_production[1] != 0) { if (i->last_mo_production[1] != 0) {
i->last_prod_year = _cur_year; i->last_prod_year = _cur_year;
pct = min(i->last_mo_transported[1] * 256 / i->last_mo_production[1],255); pct = min(i->last_mo_transported[1] * 256 / i->last_mo_production[1],255);
} }
i->pct_transported[1] = pct; i->pct_transported[1] = pct;
i->total_production[1] = i->last_mo_production[1]; i->total_production[1] = i->last_mo_production[1];
@ -1747,7 +1747,7 @@ static void MaybeCloseIndustry(Industry *i)
uint32 r; uint32 r;
StringID str; StringID str;
int type = i->type; int type = i->type;
if (_industry_close_mode[type] == 1) { if (_industry_close_mode[type] == 1) {
/* decrease or increase */ /* decrease or increase */
if (type == IT_OIL_WELL && _opt.landscape == LT_NORMAL) goto decrease_production; if (type == IT_OIL_WELL && _opt.landscape == LT_NORMAL) goto decrease_production;
@ -1759,14 +1759,14 @@ static void MaybeCloseIndustry(Industry *i)
byte b; byte b;
i->prod_level <<= 1; i->prod_level <<= 1;
b = i->production_rate[0]*2; b = i->production_rate[0]*2;
if (i->production_rate[0] >= 128) b=255; if (i->production_rate[0] >= 128) b=255;
i->production_rate[0] = b; i->production_rate[0] = b;
b = i->production_rate[1]*2; b = i->production_rate[1]*2;
if (i->production_rate[1] >= 128) b=255; if (i->production_rate[1] >= 128) b=255;
i->production_rate[1] = b; i->production_rate[1] = b;
str = _industry_prod_up_strings[type]; str = _industry_prod_up_strings[type];
goto add_news; goto add_news;
} }
@ -1782,7 +1782,7 @@ decrease_production:
str = _industry_prod_down_strings[type]; str = _industry_prod_down_strings[type];
goto add_news; goto add_news;
} }
} }
} else if (_industry_close_mode[type] > 1) { } else if (_industry_close_mode[type] > 1) {
/* maybe close */ /* maybe close */
if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1,2)) { if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1,2)) {

36
misc.c
View File

@ -95,7 +95,7 @@ void InitializeGame()
_date_fract = 0; _date_fract = 0;
_cur_tileloop_tile = 0; _cur_tileloop_tile = 0;
_vehicle_id_ctr_day = 0; _vehicle_id_ctr_day = 0;
{ {
uint starting = ConvertIntDate(_patches.starting_date); uint starting = ConvertIntDate(_patches.starting_date);
if ( starting == (uint)-1) starting = 10958; if ( starting == (uint)-1) starting = 10958;
@ -119,7 +119,7 @@ void InitializeGame()
InitializeTrees(); InitializeTrees();
InitializeStations(); InitializeStations();
InitializeIndustries(); InitializeIndustries();
InitializeNameMgr(); InitializeNameMgr();
InitializeVehiclesGuiList(); InitializeVehiclesGuiList();
InitializeTrains(); InitializeTrains();
@ -153,7 +153,7 @@ void GenerateWorld(int mode)
} else { } else {
GenerateLandscape(); GenerateLandscape();
GenerateClearTile(); GenerateClearTile();
// only generate towns, tree and industries in newgame mode. // only generate towns, tree and industries in newgame mode.
if (mode == 0) { if (mode == 0) {
GenerateTowns(); 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(); StartupPlayers();
StartupEngines(); StartupEngines();
StartupDisasters(); StartupDisasters();
@ -211,7 +211,7 @@ byte *GetName(int id, byte *buff)
void InitializeCheats() void InitializeCheats()
{ {
memset(&_cheats, 0, sizeof(Cheats)); memset(&_cheats, 0, sizeof(Cheats));
} }
@ -250,7 +250,7 @@ StringID AllocateName(const byte *name, byte skip)
for(i=0; (dst[i] = name[i]) != 0 && ++i != 32; ) {} for(i=0; (dst[i] = name[i]) != 0 && ++i != 32; ) {}
dst[31] = 0; dst[31] = 0;
return free_item | 0x7800 | (skip << 8); return free_item | 0x7800 | (skip << 8);
} }
@ -319,7 +319,7 @@ void ConvertDayToYMD(YearMonthDay *ymd, uint16 date)
} }
ymd->year = yr; ymd->year = yr;
x = _month_date_from_year_day[rem]; x = _month_date_from_year_day[rem];
ymd->month = x >> 5; ymd->month = x >> 5;
ymd->day = x & 0x1F; ymd->day = x & 0x1F;
@ -331,7 +331,7 @@ void ConvertDayToYMD(YearMonthDay *ymd, uint16 date)
uint ConvertYMDToDay(uint year, uint month, uint day) uint ConvertYMDToDay(uint year, uint month, uint day)
{ {
uint rem; uint rem;
// day in the year // day in the year
rem = _accum_days_for_month[month] + day - 1; rem = _accum_days_for_month[month] + day - 1;
@ -355,11 +355,11 @@ uint ConvertIntDate(uint date)
if (IS_INT_INSIDE(date, 1920, 2090 + 1)) { if (IS_INT_INSIDE(date, 1920, 2090 + 1)) {
year = date - 1920; year = date - 1920;
} else if (IS_INT_INSIDE(date, 192001, 209012+1)) { } else if (IS_INT_INSIDE(date, 192001, 209012+1)) {
month = date % 100 - 1; month = date % 100 - 1;
year = date / 100 - 1920; year = date / 100 - 1920;
} else if (IS_INT_INSIDE(date, 19200101, 20901231+1)) { } else if (IS_INT_INSIDE(date, 19200101, 20901231+1)) {
day = date % 100; date /= 100; day = date % 100; date /= 100;
month = date % 100 - 1; month = date % 100 - 1;
year = date / 100 - 1920; year = date / 100 - 1920;
} else if (IS_INT_INSIDE(date, 2091, 65536)) } else if (IS_INT_INSIDE(date, 2091, 65536))
return date; return date;
@ -405,7 +405,7 @@ void InitializeLandscapeVariables(bool only_constants)
for(i=0; i!=NUM_CARGO; i++) { for(i=0; i!=NUM_CARGO; i++) {
_cargoc.sprites[i] = lpd->sprites[i]; _cargoc.sprites[i] = lpd->sprites[i];
str = lpd->names[i]; str = lpd->names[i];
_cargoc.names_s[i] = str; _cargoc.names_s[i] = str;
_cargoc.names_p[i] = (str += 0x20); _cargoc.names_p[i] = (str += 0x20);
@ -413,7 +413,7 @@ void InitializeLandscapeVariables(bool only_constants)
_cargoc.names_long_p[i] = (str += 0x20); _cargoc.names_long_p[i] = (str += 0x20);
_cargoc.names_short[i] = (str += 0x20); _cargoc.names_short[i] = (str += 0x20);
_cargoc.weights[i] = lpd->weights[i]; _cargoc.weights[i] = lpd->weights[i];
if (!only_constants) { if (!only_constants) {
_cargo_payment_rates[i] = lpd->initial_cargo_payment[i]; _cargo_payment_rates[i] = lpd->initial_cargo_payment[i];
_cargo_payment_rates_frac[i] = 0; _cargo_payment_rates_frac[i] = 0;
@ -427,7 +427,7 @@ void InitializeLandscapeVariables(bool only_constants)
// distance in Manhattan metric // distance in Manhattan metric
uint GetTileDist(TileIndex xy1, TileIndex xy2) 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)); 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? */ /* increase day, and check if a new day is there? */
_tick_counter++; _tick_counter++;
if ( (_date_fract += 885) >= 885) if ( (_date_fract += 885) >= 885)
return; return;
@ -582,7 +582,7 @@ void IncreaseDate()
return; return;
_cur_year = ymd.year; _cur_year = ymd.year;
/* yes, call various yearly loops */ /* yes, call various yearly loops */
PlayersYearlyLoop(); PlayersYearlyLoop();
TrainsYearlyLoop(); TrainsYearlyLoop();
@ -648,14 +648,14 @@ static void Save_NAME()
if (*b) { if (*b) {
SlSetArrayIndex(i); SlSetArrayIndex(i);
SlArray(b, strlen(b), SLE_UINT8); SlArray(b, strlen(b), SLE_UINT8);
} }
} }
} }
static void Load_NAME() static void Load_NAME()
{ {
int index; int index;
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8); SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8);
} }
@ -679,7 +679,7 @@ static const byte _game_opt_desc[] = {
// Save load game options // Save load game options
static void SaveLoad_OPTS() static void SaveLoad_OPTS()
{ {
SlObject(&_opt, _game_opt_desc); SlObject(&_opt, _game_opt_desc);
} }

View File

@ -36,7 +36,7 @@ struct TrackPathFinder {
TPFEnumProc *enum_proc; TPFEnumProc *enum_proc;
void *userdata; void *userdata;
RememberData rd; RememberData rd;
int the_dir; int the_dir;

View File

@ -13,7 +13,7 @@
extern void StartupEconomy(); extern void StartupEconomy();
static const SpriteID cheeks_table[4] = { static const SpriteID cheeks_table[4] = {
0x325, 0x326, 0x325, 0x326,
0x390, 0x3B0, 0x390, 0x3B0,
}; };
@ -60,10 +60,10 @@ void DrawPlayerFace(uint32 face, int color, int x, int y)
if (!(flag & 2)) { if (!(flag & 2)) {
if (!(flag & 1)) { if (!(flag & 1)) {
DrawSprite(high+((val1 * 12 >> 4) + 0x832B), x, y); DrawSprite(high+((val1 * 12 >> 4) + 0x832B), x, y);
} else { } else {
DrawSprite(high+(val1 + 0x8337), x, y); DrawSprite(high+(val1 + 0x8337), x, y);
} }
} else { } else {
if (!(flag & 1)) { if (!(flag & 1)) {
DrawSprite(high+((val1 * 11 >> 4) + 0x839A), x, y); DrawSprite(high+((val1 * 11 >> 4) + 0x839A), x, y);
@ -80,11 +80,11 @@ void DrawPlayerFace(uint32 face, int color, int x, int y)
if (!(flag&1)) { if (!(flag&1)) {
val2 = ((val&0xF) * 15 >> 4); val2 = ((val&0xF) * 15 >> 4);
if (val2 < 3) { if (val2 < 3) {
DrawSprite((flag&2 ? 0x397 : 0x367) + val2, x, y); DrawSprite((flag&2 ? 0x397 : 0x367) + val2, x, y);
/* skip the rest */ /* skip the rest */
goto skip_mouth; goto skip_mouth;
} }
val2 -= 3; val2 -= 3;
@ -148,7 +148,7 @@ void DrawPlayerFace(uint32 face, int color, int x, int y)
} else { } else {
DrawSprite(0x378 + ((val&3)*3>>2), x, y); DrawSprite(0x378 + ((val&3)*3>>2), x, y);
DrawSprite(0x37B + ((val>>2)&3), x, y); DrawSprite(0x37B + ((val>>2)&3), x, y);
val >>= 4; val >>= 4;
if (val < 3) { if (val < 3) {
DrawSprite((flag&2 ? 0x3D1 : 0x37F) + val, x, y); DrawSprite((flag&2 ? 0x3D1 : 0x37F) + val, x, y);
@ -198,14 +198,14 @@ static void SubtractMoneyFromAnyPlayer(Player *p, int32 cost)
{ {
p->money64 -= cost; p->money64 -= cost;
UpdatePlayerMoney32(p); UpdatePlayerMoney32(p);
p->yearly_expenses[0][_yearly_expenses_type] += cost; p->yearly_expenses[0][_yearly_expenses_type] += cost;
if ( ( 1 << _yearly_expenses_type ) & (1<<7|1<<8|1<<9|1<<10)) if ( ( 1 << _yearly_expenses_type ) & (1<<7|1<<8|1<<9|1<<10))
p->cur_economy.income -= cost; p->cur_economy.income -= cost;
else if (( 1 << _yearly_expenses_type ) & (1<<2|1<<3|1<<4|1<<5|1<<6|1<<11)) else if (( 1 << _yearly_expenses_type ) & (1<<2|1<<3|1<<4|1<<5|1<<6|1<<11))
p->cur_economy.expenses -= cost; p->cur_economy.expenses -= cost;
InvalidatePlayerWindows(p); InvalidatePlayerWindows(p);
} }
@ -236,13 +236,13 @@ void UpdatePlayerMoney32(Player *p)
else if (p->money64 > 2000000000) else if (p->money64 > 2000000000)
p->player_money = 2000000000; p->player_money = 2000000000;
else else
p->player_money = (int32)p->money64; p->player_money = (int32)p->money64;
} }
void GetNameOfOwner(byte owner, uint tile) void GetNameOfOwner(byte owner, uint tile)
{ {
SET_DPARAM8(2, owner); SET_DPARAM8(2, owner);
if (owner != OWNER_TOWN) { if (owner != OWNER_TOWN) {
if (owner >= 8) if (owner >= 8)
SET_DPARAM16(0, STR_0150_SOMEONE); SET_DPARAM16(0, STR_0150_SOMEONE);
@ -274,10 +274,10 @@ bool CheckTileOwnership(uint tile)
{ {
byte owner = _map_owner[tile]; byte owner = _map_owner[tile];
assert(owner <= OWNER_WATER); assert(owner <= OWNER_WATER);
if (owner == _current_player) if (owner == _current_player)
return true; return true;
_error_message = STR_013B_OWNED_BY; _error_message = STR_013B_OWNED_BY;
// no need to get the name of the owner unless we're the local player (saves some time) // no need to get the name of the owner unless we're the local player (saves some time)
if (_current_player == _local_player) if (_current_player == _local_player)
GetNameOfOwner(owner, tile); GetNameOfOwner(owner, tile);
@ -330,11 +330,11 @@ set_name:;
return; return;
} }
bad_town_name:; bad_town_name:;
if (p->president_name_1 == SPECSTR_PRESIDENT_NAME) { if (p->president_name_1 == SPECSTR_PRESIDENT_NAME) {
str = SPECSTR_ANDCO_NAME; str = SPECSTR_ANDCO_NAME;
strp = p->president_name_2; strp = p->president_name_2;
goto set_name; goto set_name;
} else { } else {
str = SPECSTR_ANDCO_NAME; str = SPECSTR_ANDCO_NAME;
strp = Random(); strp = Random();
@ -371,7 +371,7 @@ static byte GeneratePlayerColor()
do { do {
for(j=0; j!=15; j++) { for(j=0; j!=15; j++) {
if (_color_sort[colors[j]] < _color_sort[colors[j+1]]) { if (_color_sort[colors[j]] < _color_sort[colors[j+1]]) {
COLOR_SWAP(j,j+1); COLOR_SWAP(j,j+1);
} }
} }
} while (--i); } while (--i);
@ -382,7 +382,7 @@ static byte GeneratePlayerColor()
for(i=0; i!=16; i++) if (colors[i] == pcolor) { for(i=0; i!=16; i++) if (colors[i] == pcolor) {
colors[i] = 0xFF; colors[i] = 0xFF;
t2 = _color_similar_1[pcolor]; t2 = _color_similar_1[pcolor];
if (t2 == 0xFF) break; if (t2 == 0xFF) break;
for(i=0; i!=15; i++) { for(i=0; i!=15; i++) {
if (colors[i] == t2) { 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; if (t2 == 0xFF) break;
for(i=0; i!=15; i++) { for(i=0; i!=15; i++) {
if (colors[i] == t2) { if (colors[i] == t2) {
@ -422,7 +422,7 @@ restart:;
p->president_name_2 = Random(); p->president_name_2 = Random();
p->president_name_1 = SPECSTR_PRESIDENT_NAME; p->president_name_1 = SPECSTR_PRESIDENT_NAME;
SET_DPARAM32(0, p->president_name_2); SET_DPARAM32(0, p->president_name_2);
GetString(buffer, p->president_name_1); GetString(buffer, p->president_name_1);
if (strlen(buffer) >= 32 || GetStringWidth(buffer) >= 94) if (strlen(buffer) >= 32 || GetStringWidth(buffer) >= 94)
@ -464,7 +464,7 @@ Player *DoStartupNewPlayer(bool is_ai)
p = AllocatePlayer(); p = AllocatePlayer();
if (p == NULL) return NULL; if (p == NULL) return NULL;
index = p->index; index = p->index;
// Make a color // Make a color
@ -472,7 +472,7 @@ Player *DoStartupNewPlayer(bool is_ai)
_player_colors[index] = p->player_color; _player_colors[index] = p->player_color;
p->name_1 = STR_SV_UNNAMED; p->name_1 = STR_SV_UNNAMED;
p->is_active = true; p->is_active = true;
p->money64 = p->player_money = p->current_loan = 100000; p->money64 = p->player_money = p->current_loan = 100000;
p->is_ai = is_ai; p->is_ai = is_ai;
@ -501,7 +501,7 @@ static void MaybeStartNewPlayer()
{ {
uint n; uint n;
Player *p; Player *p;
// count number of competitors // count number of competitors
n = 0; n = 0;
for(p=_players; p!=endof(_players); p++) 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 // 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)) if (n < (uint)_opt.diff.max_no_competitors && n < RandomRange(_opt.diff.max_no_competitors + 2))
DoStartupNewPlayer(true); DoStartupNewPlayer(true);
// The next AI starts like the difficulty setting said, with +2 month max // 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; _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) if (_game_mode == GM_EDITOR)
return; return;
p = DEREF_PLAYER(_cur_player_tick_index); p = DEREF_PLAYER(_cur_player_tick_index);
_cur_player_tick_index = (_cur_player_tick_index + 1) % MAX_PLAYERS; _cur_player_tick_index = (_cur_player_tick_index + 1) % MAX_PLAYERS;
if (p->name_1 != 0) GenerateCompanyName(p); if (p->name_1 != 0) GenerateCompanyName(p);
if (_game_mode != GM_MENU && !--_next_competitor_start) { if (_game_mode != GM_MENU && !--_next_competitor_start) {
MaybeStartNewPlayer(); MaybeStartNewPlayer();
} }
} }
void RunOtherPlayersLoop() void RunOtherPlayersLoop()
{ {
Player *p; Player *p;
_is_ai_player = true; _is_ai_player = true;
FOR_ALL_PLAYERS(p) { FOR_ALL_PLAYERS(p) {
@ -634,7 +634,7 @@ int32 CmdPlayerCtrl(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!(flags & DC_EXEC)) if (!(flags & DC_EXEC))
return 0; return 0;
switch(p1 & 0xff) { switch(p1 & 0xff) {
case 0: // make new player case 0: // make new player
p = DoStartupNewPlayer(false); p = DoStartupNewPlayer(false);
@ -672,7 +672,7 @@ static const byte _player_desc[] = {
SLE_VAR(Player,president_name_2,SLE_UINT32), SLE_VAR(Player,president_name_2,SLE_UINT32),
SLE_VAR(Player,face, SLE_UINT32), SLE_VAR(Player,face, SLE_UINT32),
// money was changed to a 64 bit field in savegame version 1. // 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_VAR_I64 | SLE_FILE_I32, 0, 0),
SLE_CONDVAR(Player,money64, SLE_INT64, 1, 255), 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,delivered_cargo, SLE_INT32),
SLE_VAR(PlayerEconomyEntry,performance_history, SLE_INT32), SLE_VAR(PlayerEconomyEntry,performance_history, SLE_INT32),
SLE_END() SLE_END()
}; };
@ -817,7 +817,7 @@ static void Load_PLYR()
{ {
int index; int index;
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
Player *p = DEREF_PLAYER(index); Player *p = DEREF_PLAYER(index);
p->is_ai = (index != 0); p->is_ai = (index != 0);
SaveLoad_PLYR(p); SaveLoad_PLYR(p);
_player_colors[index] = p->player_color; _player_colors[index] = p->player_color;

View File

@ -150,7 +150,7 @@ void InsSort_Clear(Queue* q, bool free_values) {
prev = node; prev = node;
node = node->next; node = node->next;
free(prev); free(prev);
} }
q->data.inssort.first = NULL; q->data.inssort.first = NULL;
} }
@ -283,7 +283,7 @@ bool BinaryHeap_Push(Queue* q, void* item, int priority) {
if (q->data.binaryheap.size == q->data.binaryheap.max_size) if (q->data.binaryheap.size == q->data.binaryheap.max_size)
return false; return false;
assert(q->data.binaryheap.size < q->data.binaryheap.max_size); assert(q->data.binaryheap.size < q->data.binaryheap.max_size);
if (q->data.binaryheap.elements[q->data.binaryheap.size >> BINARY_HEAP_BLOCKSIZE_BITS] == NULL) { if (q->data.binaryheap.elements[q->data.binaryheap.size >> BINARY_HEAP_BLOCKSIZE_BITS] == NULL) {
/* The currently allocated blocks are full, allocate a new one */ /* The currently allocated blocks are full, allocate a new one */
assert((q->data.binaryheap.size & BINARY_HEAP_BLOCKSIZE_MASK) == 0); assert((q->data.binaryheap.size & BINARY_HEAP_BLOCKSIZE_MASK) == 0);
@ -466,14 +466,14 @@ void delete_Hash(Hash* h, bool free_values) {
if (h->buckets_in_use[i]) { if (h->buckets_in_use[i]) {
HashNode* node; HashNode* node;
/* Free the first value */ /* Free the first value */
if (free_values) if (free_values)
free(h->buckets[i].value); free(h->buckets[i].value);
node = h->buckets[i].next; node = h->buckets[i].next;
while (node != NULL) { while (node != NULL) {
HashNode* prev = node; HashNode* prev = node;
node = node->next; node = node->next;
/* Free the value */ /* Free the value */
if (free_values) if (free_values)
free(prev->value); free(prev->value);
/* Free the node */ /* Free the node */
free(prev); free(prev);

View File

@ -51,7 +51,7 @@ struct Queue{
Queue_ClearProc* clear; Queue_ClearProc* clear;
/* Frees the queue, by reclaiming all memory allocated by it. After /* Frees the queue, by reclaiming all memory allocated by it. After
* this it is no longer usable. If free_items is true, any remaining * 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; Queue_FreeProc* free;

View File

@ -42,7 +42,7 @@ enum { /* These values are bitmasks for the map5 byte */
* 11 ????dd => Depot * 11 ????dd => Depot
* *
* abcdef is a bitmask, which contains ones for all present tracks. Below the * 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 /* 4
@ -52,7 +52,7 @@ enum { /* These values are bitmasks for the map5 byte */
* | \ / | * | \ / |
* | \ / | * | \ / |
* 16| \ |32 * 16| \ |32
* | / \2 | * | / \2 |
* | / \ | * | / \ |
* | / \ | * | / \ |
* |/ \| * |/ \|
@ -62,7 +62,7 @@ enum { /* These values are bitmasks for the map5 byte */
// Constants for lower part of Map2 byte. // Constants for lower part of Map2 byte.
enum RailMap2Lower4 { enum RailMap2Lower4 {
RAIL_MAP2LO_GROUND_MASK = 0xF, RAIL_MAP2LO_GROUND_MASK = 0xF,
RAIL_GROUND_BROWN = 0, RAIL_GROUND_BROWN = 0,
RAIL_GROUND_GREEN = 1, RAIL_GROUND_GREEN = 1,
@ -81,7 +81,7 @@ enum RailMap2Lower4 {
/* MAP2 byte: abcd???? => Signal On? Same coding as map3lo /* 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, * a and b are for diagonals, upper and left,
* one for each direction. (ie a == NE->SW, b == * one for each direction. (ie a == NE->SW, b ==
* SW->NE, or v.v., I don't know. b and c are * SW->NE, or v.v., I don't know. b and c are
@ -91,7 +91,7 @@ enum RailMap2Lower4 {
* MAP5: 00abcdef => rail * MAP5: 00abcdef => rail
* 01abcdef => rail w/ signals * 01abcdef => rail w/ signals
* 10uuuuuu => unused * 10uuuuuu => unused
* 11uuuudd => rail depot * 11uuuudd => rail depot
*/ */
static bool CheckTrackCombination(byte map5, byte trackbits, byte flags) static bool CheckTrackCombination(byte map5, byte trackbits, byte flags)
@ -99,7 +99,7 @@ static bool CheckTrackCombination(byte map5, byte trackbits, byte flags)
_error_message = STR_1001_IMPOSSIBLE_TRACK_COMBINATION; _error_message = STR_1001_IMPOSSIBLE_TRACK_COMBINATION;
if ((map5&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) { if ((map5&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) {
if (map5 & trackbits) { if (map5 & trackbits) {
_error_message = STR_1007_ALREADY_BUILT; _error_message = STR_1007_ALREADY_BUILT;
return false; return false;
@ -112,11 +112,11 @@ static bool CheckTrackCombination(byte map5, byte trackbits, byte flags)
_error_message = STR_1007_ALREADY_BUILT; _error_message = STR_1007_ALREADY_BUILT;
if (map5 & trackbits) if (map5 & trackbits)
return false; return false;
// Computer players are not allowed to intersect pieces of rail. // Computer players are not allowed to intersect pieces of rail.
if (!(flags&DC_NO_RAIL_OVERLAP)) if (!(flags&DC_NO_RAIL_OVERLAP))
return true; return true;
map5 |= trackbits; map5 |= trackbits;
return (map5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER) || map5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT)); return (map5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER) || map5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT));
} else { } else {
@ -138,12 +138,12 @@ static const byte _valid_tileh_slopes[4][15] = {
0, 0,
RAIL_BIT_DIAG2, RAIL_BIT_DIAG2,
RAIL_BIT_LOWER, RAIL_BIT_LOWER,
RAIL_BIT_LOWER, RAIL_BIT_LOWER,
RAIL_BIT_DIAG2, RAIL_BIT_DIAG2,
0, 0,
RAIL_BIT_LEFT, RAIL_BIT_LEFT,
RAIL_BIT_DIAG1, RAIL_BIT_DIAG1,
RAIL_BIT_UPPER, RAIL_BIT_UPPER,
RAIL_BIT_RIGHT, RAIL_BIT_RIGHT,
@ -177,7 +177,7 @@ static const byte _valid_tileh_slopes[4][15] = {
RAIL_BIT_LEFT, RAIL_BIT_LEFT,
RAIL_BIT_LOWER, RAIL_BIT_LOWER,
RAIL_BIT_DIAG2|RAIL_BIT_LEFT|RAIL_BIT_LOWER, RAIL_BIT_DIAG2|RAIL_BIT_LEFT|RAIL_BIT_LOWER,
RAIL_BIT_RIGHT, 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_DIAG2|RAIL_BIT_UPPER|RAIL_BIT_LOWER|RAIL_BIT_LEFT|RAIL_BIT_RIGHT,
RAIL_BIT_DIAG1|RAIL_BIT_RIGHT|RAIL_BIT_LOWER, RAIL_BIT_DIAG1|RAIL_BIT_RIGHT|RAIL_BIT_LOWER,
@ -213,7 +213,7 @@ uint GetRailFoundation(uint tileh, uint bits)
if ((~_valid_tileh_slopes[1][tileh] & bits) == 0) if ((~_valid_tileh_slopes[1][tileh] & bits) == 0)
return tileh; 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 i + 15;
return 0; return 0;
@ -234,10 +234,10 @@ static uint32 CheckRailSlope(int tileh, uint rail_bits, uint existing, uint tile
// no special foundation // no special foundation
if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0) if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0)
return 0; return 0;
if (((~_valid_tileh_slopes[1][tileh] & rail_bits) == 0) || // whole tile is leveled up 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 ((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); return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@ -266,7 +266,7 @@ int32 CmdBuildSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
tile = ti.tile; tile = ti.tile;
// allow building rail under bridge // allow building rail under bridge
if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile)) if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))
return CMD_ERROR; return CMD_ERROR;
if (ti.type == MP_TUNNELBRIDGE) { if (ti.type == MP_TUNNELBRIDGE) {
@ -311,7 +311,7 @@ int32 CmdBuildSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return _price.build_rail; return _price.build_rail;
ModifyTile(tile, ModifyTile(tile,
MP_SETTYPE(MP_STREET) | MP_SETTYPE(MP_STREET) |
MP_MAP3LO | MP_MAP3HI | MP_MAPOWNER_CURRENT | MP_MAP5, MP_MAP3LO | MP_MAP3HI | MP_MAPOWNER_CURRENT | MP_MAP5,
_map_owner[tile], /* map3_lo */ _map_owner[tile], /* map3_lo */
p1, /* map3_hi */ p1, /* map3_hi */
@ -326,7 +326,7 @@ int32 CmdBuildSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
} else if (ti.type == MP_RAILWAY) { } else if (ti.type == MP_RAILWAY) {
/* BUILD ON RAILWAY CODE */ /* 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; goto need_clear;
if (!CheckTrackCombination(ti.map5, rail_bit, (byte)flags)) if (!CheckTrackCombination(ti.map5, rail_bit, (byte)flags))
return CMD_ERROR; return CMD_ERROR;
@ -396,7 +396,7 @@ static const byte _signals_table_other[] = {
}; };
static const byte _signals_table_both[] = { 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 0xC0, 0xC0, 0xC0, 0x30, 0xC0, 0x30, 0, 0
}; };
@ -426,7 +426,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return CMD_ERROR; return CMD_ERROR;
// allow building rail under bridge // allow building rail under bridge
if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile)) if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))
return CMD_ERROR; return CMD_ERROR;
if (ti.type == MP_TUNNELBRIDGE) { if (ti.type == MP_TUNNELBRIDGE) {
@ -441,7 +441,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!(flags & DC_EXEC)) if (!(flags & DC_EXEC))
return _price.remove_rail; return _price.remove_rail;
_map_owner[tile] = OWNER_NONE; _map_owner[tile] = OWNER_NONE;
_map5[tile] = ti.map5 & 0xC7; _map5[tile] = ti.map5 & 0xC7;
} else if (ti.type == MP_STREET) { } else if (ti.type == MP_STREET) {
@ -497,7 +497,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
skip_mark_dirty:; skip_mark_dirty:;
SetSignalsOnBothDir(tile, (byte)p2); SetSignalsOnBothDir(tile, (byte)p2);
return _price.remove_rail; return _price.remove_rail;
} }
@ -506,7 +506,7 @@ static const struct {
int8 yinc[16]; int8 yinc[16];
byte initial[16]; byte initial[16];
} _railbit = {{ } _railbit = {{
// 0 1 2 3 4 5 // 0 1 2 3 4 5
16, 0,-16, 0, 16, 0, 0, 0, 16, 0,-16, 0, 16, 0, 0, 0,
-16, 0, 0, 16, 0,-16, 0, 0, -16, 0, 0, 16, 0,-16, 0, 0,
},{ },{
@ -537,7 +537,7 @@ int32 CmdBuildRailroadTrack(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) if (flags & DC_EXEC)
SndPlayTileFx(0x1E, TILE_FROM_XY(x,y)); SndPlayTileFx(0x1E, TILE_FROM_XY(x,y));
/* unpack end point */ /* unpack end point */
sx = (p1 & 0xFFFF) & ~0xF; sx = (p1 & 0xFFFF) & ~0xF;
sy = (p1 >> 16) & ~0xF; sy = (p1 >> 16) & ~0xF;
@ -558,10 +558,10 @@ int32 CmdBuildRailroadTrack(int x, int y, uint32 flags, uint32 p1, uint32 p2)
x += _railbit.xinc[railbit]; x += _railbit.xinc[railbit];
y += _railbit.yinc[railbit]; y += _railbit.yinc[railbit];
// toggle railbit for the diagonal tiles // toggle railbit for the diagonal tiles
if (railbit & 0x6) railbit ^= 1; if (railbit & 0x6) railbit ^= 1;
} }
if (total_cost == 0) if (total_cost == 0)
return CMD_ERROR; return CMD_ERROR;
@ -587,7 +587,7 @@ int32 CmdRemoveRailroadTrack(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) if (flags & DC_EXEC)
SndPlayTileFx(0x1E, TILE_FROM_XY(x,y)); SndPlayTileFx(0x1E, TILE_FROM_XY(x,y));
/* unpack start point */ /* unpack start point */
sx = (p1 & 0xFFFF) & ~0xF; sx = (p1 & 0xFFFF) & ~0xF;
sy = (p1 >> 16) & ~0xF; sy = (p1 >> 16) & ~0xF;
@ -603,7 +603,7 @@ int32 CmdRemoveRailroadTrack(int x, int y, uint32 flags, uint32 p1, uint32 p2)
y += _railbit.yinc[railbit]; y += _railbit.yinc[railbit];
// toggle railbit for the diagonal tiles // toggle railbit for the diagonal tiles
if (railbit & 0x6) railbit ^= 1; if (railbit & 0x6) railbit ^= 1;
} }
if (total_cost == 0) if (total_cost == 0)
return CMD_ERROR; return CMD_ERROR;
@ -643,14 +643,14 @@ int32 CmdBuildTrainDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
if (_current_player == _local_player) if (_current_player == _local_player)
_last_built_train_depot_tile = (TileIndex)tile; _last_built_train_depot_tile = (TileIndex)tile;
ModifyTile(tile, ModifyTile(tile,
MP_SETTYPE(MP_RAILWAY) | MP_SETTYPE(MP_RAILWAY) |
MP_MAP3LO | MP_MAPOWNER_CURRENT | MP_MAP5, MP_MAP3LO | MP_MAPOWNER_CURRENT | MP_MAP5,
p1, /* map3_lo */ p1, /* map3_lo */
p2 | RAIL_TYPE_DEPOT /* map5 */ p2 | RAIL_TYPE_DEPOT /* map5 */
); );
dep->xy = tile; dep->xy = tile;
dep->town_index = ClosestTownFromTile(tile, (uint)-1)->index; dep->town_index = ClosestTownFromTile(tile, (uint)-1)->index;
@ -688,7 +688,7 @@ static Checkpoint *FindDeletedCheckpointCloseTo(uint tile)
for(cp = _checkpoints; cp != endof(_checkpoints); cp++) { for(cp = _checkpoints; cp != endof(_checkpoints); cp++) {
if (cp->deleted && cp->xy) { if (cp->deleted && cp->xy) {
cur_dist = GetTileDist(tile, cp->xy); cur_dist = GetTileDist(tile, cp->xy);
if (cur_dist < thres) { if (cur_dist < thres) {
thres = cur_dist; thres = cur_dist;
best = cp; best = cp;
@ -714,7 +714,7 @@ int32 CmdBuildTrainCheckpoint(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!CheckTileOwnership(tile)) if (!CheckTileOwnership(tile))
return CMD_ERROR; return CMD_ERROR;
if (!EnsureNoVehicle(tile)) return CMD_ERROR; if (!EnsureNoVehicle(tile)) return CMD_ERROR;
tileh = GetTileSlope(tile, NULL); tileh = GetTileSlope(tile, NULL);
@ -733,10 +733,10 @@ int32 CmdBuildTrainCheckpoint(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
ModifyTile(tile, MP_MAP5, RAIL_TYPE_CHECKPOINT | dir); ModifyTile(tile, MP_MAP5, RAIL_TYPE_CHECKPOINT | dir);
cp->deleted = 0; cp->deleted = 0;
cp->xy = tile; cp->xy = tile;
if (cp->town_or_string == 0) MakeDefaultCheckpointName(cp); else RedrawCheckpointSign(cp); if (cp->town_or_string == 0) MakeDefaultCheckpointName(cp); else RedrawCheckpointSign(cp);
UpdateCheckpointSign(cp); UpdateCheckpointSign(cp);
RedrawCheckpointSign(cp); RedrawCheckpointSign(cp);
@ -848,13 +848,13 @@ int32 CmdBuildSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
byte m5; byte m5;
int32 cost; int32 cost;
int track = p1 & 0x7; int track = p1 & 0x7;
assert(track >= 0 && track < 6); // only 6 possible track-combinations assert(track >= 0 && track < 6); // only 6 possible track-combinations
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
tile = TILE_FROM_XY(x,y); tile = TILE_FROM_XY(x,y);
if (!EnsureNoVehicle(tile)) if (!EnsureNoVehicle(tile))
return CMD_ERROR; return CMD_ERROR;
@ -867,7 +867,7 @@ int32 CmdBuildSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// check rail combination // check rail combination
{ {
byte m = m5 & RAIL_BIT_MASK; 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)) 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; return CMD_ERROR;
} }
@ -886,7 +886,7 @@ int32 CmdBuildSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
} }
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
if (!(m5 & RAIL_TYPE_SIGNALS)) { // if there are no signals yet present on the track if (!(m5 & RAIL_TYPE_SIGNALS)) { // if there are no signals yet present on the track
_map5[tile] |= RAIL_TYPE_SIGNALS; // change into signals _map5[tile] |= RAIL_TYPE_SIGNALS; // change into signals
@ -925,7 +925,7 @@ int32 CmdBuildSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// convert between signal<->semaphores when dragging // convert between signal<->semaphores when dragging
HASBIT(p1, 3) ? SETBIT(_map3_hi[tile], 2) : CLRBIT(_map3_hi[tile], 2); HASBIT(p1, 3) ? SETBIT(_map3_hi[tile], 2) : CLRBIT(_map3_hi[tile], 2);
} }
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
SetSignalsOnBothDir(tile, track); SetSignalsOnBothDir(tile, track);
} }
@ -972,13 +972,13 @@ int32 CmdBuildManySignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
* the other side alone */ * the other side alone */
switch (signals) { switch (signals) {
case 0x20: case 8: /* east corner (N-S), south corner (W-E) */ 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; signals = _map3_lo[tile]&0x30;
else else
signals = 0x30 | (_map3_lo[tile]&0xC0); signals = 0x30 | (_map3_lo[tile]&0xC0);
break; break;
case 0x10: case 4: /* west corner (N-S), north corner (W-E) */ 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; signals = _map3_lo[tile]&0xC0;
else else
signals = 0xC0 | (_map3_lo[tile]&0x30); signals = 0xC0 | (_map3_lo[tile]&0x30);
@ -1001,7 +1001,7 @@ int32 CmdBuildManySignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
********** **********
* railbit - direction of autorail * railbit - direction of autorail
* semaphores - semaphores or signals * 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 and convert all others to semaphore/signal
* mode - 1 remove signals, 0 build signals */ * mode - 1 remove signals, 0 build signals */
signal_ctr = total_cost = 0; signal_ctr = total_cost = 0;
@ -1026,9 +1026,9 @@ int32 CmdBuildManySignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
break; break;
x += _railbit.xinc[railbit]; x += _railbit.xinc[railbit];
y += _railbit.yinc[railbit]; y += _railbit.yinc[railbit];
signal_ctr++; signal_ctr++;
// toggle railbit for the diagonal tiles (|, -- tracks) // toggle railbit for the diagonal tiles (|, -- tracks)
if (railbit & 0x6) railbit ^= 1; if (railbit & 0x6) railbit ^= 1;
} }
@ -1050,7 +1050,7 @@ int32 CmdRemoveSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
FindLandscapeHeight(&ti, x, y); FindLandscapeHeight(&ti, x, y);
tile = ti.tile; tile = ti.tile;
/* No vehicle behind. */ /* No vehicle behind. */
if (!EnsureNoVehicle(tile)) if (!EnsureNoVehicle(tile))
return CMD_ERROR; return CMD_ERROR;
@ -1073,18 +1073,18 @@ int32 CmdRemoveSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_map5[tile] &= ~RAIL_TYPE_SIGNALS; _map5[tile] &= ~RAIL_TYPE_SIGNALS;
_map2[tile] &= ~0xF0; _map2[tile] &= ~0xF0;
CLRBIT(_map3_hi[tile], 2); // remove any possible semaphores CLRBIT(_map3_hi[tile], 2); // remove any possible semaphores
/* TTDBUG: this code contains a bug, if a tile contains 2 signals /* TTDBUG: this code contains a bug, if a tile contains 2 signals
* on separate tracks, it won't work properly for the 2nd track */ * on separate tracks, it won't work properly for the 2nd track */
SetSignalsOnBothDir(tile, FIND_FIRST_BIT(bits & RAIL_BIT_MASK)); SetSignalsOnBothDir(tile, FIND_FIRST_BIT(bits & RAIL_BIT_MASK));
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }
return _price.remove_signals; 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) static int32 DoConvertRail(uint tile, uint totype, bool exec)
{ {
@ -1120,7 +1120,7 @@ int32 CmdConvertRail(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
sy = GET_TILE_Y(p1)*16; sy = GET_TILE_Y(p1)*16;
if (ex < sx) intswap(ex, sx); if (ex < sx) intswap(ex, sx);
if (ey < sy) intswap(ey, sy); if (ey < sy) intswap(ey, sy);
money = GetAvailableMoneyForCommand(); money = GetAvailableMoneyForCommand();
ret = false; ret = false;
cost = 0; cost = 0;
@ -1128,13 +1128,13 @@ int32 CmdConvertRail(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
for(y=sy; y<=ey; y+=16) { for(y=sy; y<=ey; y+=16) {
uint tile = TILE_FROM_XY(x,y); uint tile = TILE_FROM_XY(x,y);
DoConvertRailProc *p; DoConvertRailProc *p;
if (IS_TILETYPE(tile, MP_RAILWAY)) p = DoConvertRail; if (IS_TILETYPE(tile, MP_RAILWAY)) p = DoConvertRail;
else if (IS_TILETYPE(tile, MP_STATION)) p = DoConvertStationRail; else if (IS_TILETYPE(tile, MP_STATION)) p = DoConvertStationRail;
else if (IS_TILETYPE(tile, MP_STREET)) p = DoConvertStreetRail; else if (IS_TILETYPE(tile, MP_STREET)) p = DoConvertStreetRail;
else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) p = DoConvertTunnelBridgeRail; else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) p = DoConvertTunnelBridgeRail;
else continue; else continue;
ret = p(tile, p2, false); ret = p(tile, p2, false);
if (ret == CMD_ERROR) continue; if (ret == CMD_ERROR) continue;
cost += ret; cost += ret;
@ -1185,7 +1185,7 @@ static int32 ClearTile_Track(uint tile, byte flags) {
} }
cost = 0; cost = 0;
if ( (m5 & RAIL_TYPE_MASK) == RAIL_TYPE_NORMAL) { if ( (m5 & RAIL_TYPE_MASK) == RAIL_TYPE_NORMAL) {
regular_track:; regular_track:;
@ -1245,7 +1245,7 @@ static const SpriteID _signal_base_sprites[16] = {
0x1323, 0x1323,
0x1333, 0x1333,
0x1343, 0x1343,
0x13C6, 0x13C6,
0x13D6, 0x13D6,
0x13E6, 0x13E6,
@ -1283,7 +1283,7 @@ static void DrawTrackFence_NW(TileInfo *ti)
image = 0x51B; image = 0x51B;
} }
} }
AddSortableSpriteToDraw(image | _drawtile_track_palette, AddSortableSpriteToDraw(image | _drawtile_track_palette,
ti->x, ti->y+1, 16, 1, 4, ti->z); ti->x, ti->y+1, 16, 1, 4, ti->z);
} }
@ -1296,7 +1296,7 @@ static void DrawTrackFence_SE(TileInfo *ti)
image = 0x51B; image = 0x51B;
} }
} }
AddSortableSpriteToDraw(image | _drawtile_track_palette, AddSortableSpriteToDraw(image | _drawtile_track_palette,
ti->x, ti->y+15, 16, 1, 4, ti->z); ti->x, ti->y+15, 16, 1, 4, ti->z);
} }
@ -1315,7 +1315,7 @@ static void DrawTrackFence_NE(TileInfo *ti)
image = 0x51C; image = 0x51C;
} }
} }
AddSortableSpriteToDraw(image | _drawtile_track_palette, AddSortableSpriteToDraw(image | _drawtile_track_palette,
ti->x+1, ti->y, 1, 16, 4, ti->z); ti->x+1, ti->y, 1, 16, 4, ti->z);
} }
@ -1328,7 +1328,7 @@ static void DrawTrackFence_SW(TileInfo *ti)
image = 0x51C; image = 0x51C;
} }
} }
AddSortableSpriteToDraw(image | _drawtile_track_palette, AddSortableSpriteToDraw(image | _drawtile_track_palette,
ti->x+15, ti->y, 1, 16, 4, ti->z); ti->x+15, ti->y, 1, 16, 4, ti->z);
} }
@ -1383,21 +1383,21 @@ typedef void DetailedTrackProc(TileInfo *ti);
DetailedTrackProc * const _detailed_track_proc[16] = { DetailedTrackProc * const _detailed_track_proc[16] = {
DetTrackDrawProc_Null, DetTrackDrawProc_Null,
DetTrackDrawProc_Null, DetTrackDrawProc_Null,
DrawTrackFence_NW, DrawTrackFence_NW,
DrawTrackFence_SE, DrawTrackFence_SE,
DrawTrackFence_NW_SE, DrawTrackFence_NW_SE,
DrawTrackFence_NE, DrawTrackFence_NE,
DrawTrackFence_SW, DrawTrackFence_SW,
DrawTrackFence_NE_SW, DrawTrackFence_NE_SW,
DrawTrackFence_NS_1, DrawTrackFence_NS_1,
DrawTrackFence_NS_2, DrawTrackFence_NS_2,
DrawTrackFence_WE_1, DrawTrackFence_WE_1,
DrawTrackFence_WE_2, DrawTrackFence_WE_2,
DetTrackDrawProc_Null, DetTrackDrawProc_Null,
DetTrackDrawProc_Null, DetTrackDrawProc_Null,
DetTrackDrawProc_Null, DetTrackDrawProc_Null,
@ -1418,7 +1418,7 @@ static void DrawTile_Track(TileInfo *ti)
bool special; bool special;
m5 &= RAIL_BIT_MASK; m5 &= RAIL_BIT_MASK;
special = false; special = false;
// select the sprite to use based on the map5 byte. // 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_RIGHT) ||
(image++, m5 == RAIL_BIT_LEFT) || (image++, m5 == RAIL_BIT_LEFT) ||
(image++, m5 == (RAIL_BIT_DIAG1|RAIL_BIT_DIAG2)) || (image++, m5 == (RAIL_BIT_DIAG1|RAIL_BIT_DIAG2)) ||
(image = 0x40B, m5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER)) || (image = 0x40B, m5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER)) ||
(image++, m5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT)) || (image++, m5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT)) ||
(special=true, false) || (special=true, false) ||
(image = 0x3FA, !(m5 & (RAIL_BIT_RIGHT|RAIL_BIT_UPPER|RAIL_BIT_DIAG1))) || (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) { if (ti->tileh != 0) {
int f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F); int f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F);
if (f) DrawFoundation(ti, f); if (f) DrawFoundation(ti, f);
// default sloped sprites.. // default sloped sprites..
if (ti->tileh != 0) image = _track_sloped_sprites[ti->tileh - 1] + 0x3F3; 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))) if (!(m5 & (RAIL_TYPE_MASK&~RAIL_TYPE_SPECIAL)))
return; return;
if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); } if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); }
s = _track_depot_layout_table[m5 & 0x3F]; s = _track_depot_layout_table[m5 & 0x3F];
@ -1541,9 +1541,9 @@ static void DrawTile_Track(TileInfo *ti)
if (image & 0x8000) if (image & 0x8000)
image |= _drawtile_track_palette; image |= _drawtile_track_palette;
image += tracktype_offs; image += tracktype_offs;
if (!(_display_opt & DO_TRANS_BUILDINGS)) if (!(_display_opt & DO_TRANS_BUILDINGS))
image = (image & 0x3FFF) | 0x3224000; 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); ti->y | drss->subcoord_y, drss->width, drss->height, 0x17, ti->z);
drss++; drss++;
} }
@ -1567,7 +1567,7 @@ void DrawTrainDepotSprite(int x, int y, int image, int railtype)
y+=17; y+=17;
img = *(uint16*)t; img = *(uint16*)t;
if (img & 0x8000) img = (img & 0x7FFF) + railtype; if (img & 0x8000) img = (img & 0x7FFF) + railtype;
DrawSprite(img, x, y); DrawSprite(img, x, y);
for(dtss = (DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) { for(dtss = (DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) {
@ -1586,7 +1586,7 @@ typedef struct SetSignalsData {
int cur_stack; int cur_stack;
bool stop; bool stop;
bool has_presignal; bool has_presignal;
// presignal info // presignal info
int presignal_exits; int presignal_exits;
int presignal_exits_free; int presignal_exits_free;
@ -1607,7 +1607,7 @@ static bool SetSignalsEnumProc(uint tile, SetSignalsData *ssd, int track, uint l
if (IS_TILETYPE(tile, MP_RAILWAY)) { if (IS_TILETYPE(tile, MP_RAILWAY)) {
if ((_map5[tile]&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) { if ((_map5[tile]&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) {
if ((_map3_lo[tile] & _signals_table_both[track]) != 0) { if ((_map3_lo[tile] & _signals_table_both[track]) != 0) {
// is the signal pointing in to the segment existing? // is the signal pointing in to the segment existing?
if ((_map3_lo[tile] & _signals_table[track]) != 0) { if ((_map3_lo[tile] & _signals_table[track]) != 0) {
// yes, add the signal to the list of signals // yes, add the signal to the list of signals
@ -1620,7 +1620,7 @@ static bool SetSignalsEnumProc(uint tile, SetSignalsData *ssd, int track, uint l
// remember if this block has a presignal. // remember if this block has a presignal.
ssd->has_presignal |= (_map3_hi[tile]&1); ssd->has_presignal |= (_map3_hi[tile]&1);
} }
// is this an exit signal that points out from the segment? // is this an exit signal that points out from the segment?
if ((_map3_hi[tile]&2) && _map3_lo[tile]&_signals_table_other[track]) { if ((_map3_hi[tile]&2) && _map3_lo[tile]&_signals_table_other[track]) {
ssd->presignal_exits++; ssd->presignal_exits++;
@ -1644,7 +1644,7 @@ static void SetSignalsAfterProc(TrackPathFinder *tpf)
TrackPathFinderLink *link; TrackPathFinderLink *link;
ssd->stop = false; ssd->stop = false;
// for each train, check if it is in the segment. // for each train, check if it is in the segment.
// then we know that the signal should be red. // then we know that the signal should be red.
FOR_ALL_VEHICLES(v) { FOR_ALL_VEHICLES(v) {
@ -1653,9 +1653,9 @@ static void SetSignalsAfterProc(TrackPathFinder *tpf)
tile = v->tile; tile = v->tile;
if (v->u.rail.track == 0x40) { tile = GetVehicleOutOfTunnelTile(v); } if (v->u.rail.track == 0x40) { tile = GetVehicleOutOfTunnelTile(v); }
hash = PATHFIND_HASH_TILE(tile); hash = PATHFIND_HASH_TILE(tile);
val = tpf->hash_head[hash]; val = tpf->hash_head[hash];
if (val == 0) if (val == 0)
continue; continue;
@ -1723,7 +1723,7 @@ static void ChangeSignalStates(SetSignalsData *ssd)
make_red: make_red:
// turn red // turn red
if ( (bit&m2) == 0 ) if ( (bit&m2) == 0 )
continue; continue;
} else { } else {
// turn green // turn green
if ( (bit&m2) != 0 ) if ( (bit&m2) != 0 )
@ -1741,7 +1741,7 @@ make_red:
printf("NUM_SSD_STACK too small\n"); printf("NUM_SSD_STACK too small\n");
} }
} }
// it changed, so toggle it // it changed, so toggle it
_map2[tile] = m2 ^ bit; _map2[tile] = m2 ^ bit;
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
@ -1767,7 +1767,7 @@ bool UpdateSignalsOnSegment(uint tile, byte direction)
// remember the result only for the first iteration. // remember the result only for the first iteration.
if (result < 0) result = ssd.stop; if (result < 0) result = ssd.stop;
// if any exit signals were changed, we need to keep going to modify the stuff behind those. // if any exit signals were changed, we need to keep going to modify the stuff behind those.
if(!ssd.cur_stack) if(!ssd.cur_stack)
break; break;
@ -1776,7 +1776,7 @@ bool UpdateSignalsOnSegment(uint tile, byte direction)
tile = ssd.next_tile[--ssd.cur_stack]; tile = ssd.next_tile[--ssd.cur_stack];
direction = ssd.next_dir[ssd.cur_stack]; direction = ssd.next_dir[ssd.cur_stack];
} }
return (bool)result; return (bool)result;
} }
@ -1789,7 +1789,7 @@ void SetSignalsOnBothDir(uint tile, byte track)
UpdateSignalsOnSegment(tile, _search_dir_2[track]); UpdateSignalsOnSegment(tile, _search_dir_2[track]);
} }
uint GetSlopeZ_Track(TileInfo *ti) uint GetSlopeZ_Track(TileInfo *ti)
{ {
uint z = ti->z; uint z = ti->z;
int th = ti->tileh; int th = ti->tileh;
@ -1815,7 +1815,7 @@ uint GetSlopeZ_Track(TileInfo *ti)
return z; return z;
} }
uint GetSlopeTileh_Track(TileInfo *ti) uint GetSlopeTileh_Track(TileInfo *ti)
{ {
// check if it's a foundation // check if it's a foundation
if (ti->tileh != 0) { if (ti->tileh != 0) {
@ -1882,7 +1882,7 @@ static void TileLoop_Track(uint tile)
if (m2 != RAIL_GROUND_BROWN) { /* wait until bottom is green */ if (m2 != RAIL_GROUND_BROWN) { /* wait until bottom is green */
/* determine direction of fence */ /* determine direction of fence */
rail = _map5[tile] & RAIL_BIT_MASK; rail = _map5[tile] & RAIL_BIT_MASK;
if (rail == RAIL_BIT_UPPER) { if (rail == RAIL_BIT_UPPER) {
a2 = RAIL_GROUND_FENCE_HORIZ1; a2 = RAIL_GROUND_FENCE_HORIZ1;
} else if (rail == RAIL_BIT_LOWER) { } 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) || if (!IS_TILETYPE(tile + TILE_XY(0,-1), MP_RAILWAY) ||
owner != _map_owner[tile + TILE_XY(0,-1)] || 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)) (_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)) { 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); ShowTrainDepotWindow(tile);
else if (IS_RAIL_CHECKPOINT(_map5[tile])) else if (IS_RAIL_CHECKPOINT(_map5[tile]))
ShowRenameCheckpointWindow(&_checkpoints[GetCheckpointByTile(tile)]); ShowRenameCheckpointWindow(&_checkpoints[GetCheckpointByTile(tile)]);
} }
static void GetTileDesc_Track(uint tile, TileDesc *td) static void GetTileDesc_Track(uint tile, TileDesc *td)
@ -2017,7 +2017,7 @@ static void ChangeTileOwner_Track(uint tile, byte old_player, byte new_player)
{ {
if (_map_owner[tile] != old_player) if (_map_owner[tile] != old_player)
return; return;
if (new_player != 255) { if (new_player != 255) {
_map_owner[tile] = new_player; _map_owner[tile] = new_player;
} else { } else {
@ -2036,14 +2036,14 @@ uint32 VehicleEnter_Track(Vehicle *v, uint tile, int x, int y)
{ {
byte fract_coord; byte fract_coord;
int dir; int dir;
// this routine applies only to trains in depot tiles // this routine applies only to trains in depot tiles
if (v->type != VEH_Train || !IS_RAIL_DEPOT(_map5[tile])) if (v->type != VEH_Train || !IS_RAIL_DEPOT(_map5[tile]))
return 0; return 0;
/* depot direction */ /* depot direction */
dir = _map5[tile] & RAIL_DEPOT_DIR; dir = _map5[tile] & RAIL_DEPOT_DIR;
fract_coord = (x & 0xF) + ((y & 0xF) << 4); fract_coord = (x & 0xF) + ((y & 0xF) << 4);
if (_fractcoords_behind[dir] == fract_coord) { if (_fractcoords_behind[dir] == fract_coord) {
/* make sure a train is not entering the tile from behind */ /* make sure a train is not entering the tile from behind */

View File

@ -34,8 +34,8 @@ static void CcPlaySound1E(bool success, uint tile, uint32 p1, uint32 p2)
static void GenericPlaceRail(uint tile, int cmd) static void GenericPlaceRail(uint tile, int cmd)
{ {
DoCommandP(tile, _cur_railtype, cmd, CcPlaySound1E, DoCommandP(tile, _cur_railtype, cmd, CcPlaySound1E,
_remove_button_clicked ? _remove_button_clicked ?
CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) | CMD_AUTO | CMD_NO_WATER : 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 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 tile, uint16 extra)
if (b & 0xC0 || !(b & (extra >> 8))) if (b & 0xC0 || !(b & (extra >> 8)))
return; 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] = { static const uint16 _place_depot_extra[12] = {
@ -101,12 +101,12 @@ static void CcDepot(bool success, uint tile, uint32 p1, uint32 p2)
PlaceExtraDepotRail(tile, _place_depot_extra[dir + 4]); PlaceExtraDepotRail(tile, _place_depot_extra[dir + 4]);
PlaceExtraDepotRail(tile, _place_depot_extra[dir + 8]); PlaceExtraDepotRail(tile, _place_depot_extra[dir + 8]);
} }
} }
} }
static void PlaceRail_Depot(uint tile) 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)); 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) 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) 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) static void BuildRailClick_AutoSignals(Window *w)
@ -281,10 +281,10 @@ static void BuildRailClick_Remove(Window *w)
return; return;
SetWindowDirty(w); SetWindowDirty(w);
SndPlayFx(0x13); SndPlayFx(0x13);
_thd.make_square_red = !!((w->click_state ^= (1 << 16)) & (1<<16)); _thd.make_square_red = !!((w->click_state ^= (1 << 16)) & (1<<16));
_remove_button_clicked = (w->click_state & (1 << 16)) != 0; _remove_button_clicked = (w->click_state & (1 << 16)) != 0;
// handle station builder // handle station builder
if( w->click_state & (1 << 12) ) if( w->click_state & (1 << 12) )
{ {
@ -313,8 +313,8 @@ static void BuildRailClick_Convert(Window *w)
static void DoRailroadTrack(int mode) 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, 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 ? _remove_button_clicked ?
CMD_REMOVE_RAILROAD_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) : 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) 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 {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 {1, M(3,2+8+32), M(1,2+4+16), 0}, // diag2 track
// one edge with rail // one edge with rail
{0, M(0,1), 0, 0}, // diag1 track {0, M(0,1), 0, 0}, // diag1 track
{0, M(2,1), 0, 0}, // diag1 track {0, M(2,1), 0, 0}, // diag1 track
{1, M(1,2), 0, 0}, // diag2 track {1, M(1,2), 0, 0}, // diag2 track
{1, M(3,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]; tile += _tile_inc[i];
m[i] = 0; 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; m[i] = _map5[tile]&0x3F;
// handle tracks under bridge // handle tracks under bridge
@ -449,7 +449,7 @@ static bool Check2x1AutoRail(int mode)
int sxpy = (thd->selend.x & 0xF) + (thd->selend.y & 0xF); int sxpy = (thd->selend.x & 0xF) + (thd->selend.y & 0xF);
int fxmy = _tile_fract_coords.x - _tile_fract_coords.y; int fxmy = _tile_fract_coords.x - _tile_fract_coords.y;
int sxmy = (thd->selend.x & 0xF) - (thd->selend.y & 0xF); int sxmy = (thd->selend.x & 0xF) - (thd->selend.y & 0xF);
switch(mode) { switch(mode) {
case 0: case 0:
if (fxpy >= 20 && sxpy <= 12) { SwapSelection(); DoRailroadTrack(0); return true; } if (fxpy >= 20 && sxpy <= 12) { SwapSelection(); DoRailroadTrack(0); return true; }
@ -459,7 +459,7 @@ static bool Check2x1AutoRail(int mode)
case 1: case 1:
if (fxmy > 3 && sxmy < -3) { SwapSelection(); DoRailroadTrack(0); return true; } if (fxmy > 3 && sxmy < -3) { SwapSelection(); DoRailroadTrack(0); return true; }
if (fxpy <= 12 && sxpy >= 20) { DoRailroadTrack(0); return true; } if (fxpy <= 12 && sxpy >= 20) { DoRailroadTrack(0); return true; }
break; break;
case 2: case 2:
if (fxmy > 3 && sxmy < -3) { DoRailroadTrack(3); return true; } if (fxmy > 3 && sxmy < -3) { DoRailroadTrack(3); return true; }
@ -484,7 +484,7 @@ static void HandleAutodirPlacement()
if (thd->drawstyle == HT_RECT) { if (thd->drawstyle == HT_RECT) {
int dx = thd->selstart.x - (thd->selend.x&~0xF); int dx = thd->selstart.x - (thd->selend.x&~0xF);
int dy = thd->selstart.y - (thd->selend.y&~0xF); int dy = thd->selstart.y - (thd->selend.y&~0xF);
if (dx == 0 && dy == 0 ) { if (dx == 0 && dy == 0 ) {
// 1x1 tile // 1x1 tile
bit = GetBestFit1x1(thd->selend.x, thd->selend.y); 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 dx = thd->selstart.x - (thd->selend.x&~0xF);
int dy = thd->selstart.y - (thd->selend.y&~0xF); int dy = thd->selstart.y - (thd->selend.y&~0xF);
if (dx == 0 && dy == 0 ) // 1x1 tile signals if (dx == 0 && dy == 0 ) // 1x1 tile signals
GenericPlaceSignals(TILE_FROM_XY(thd->selend.x, thd->selend.y)); GenericPlaceSignals(TILE_FROM_XY(thd->selend.x, thd->selend.y));
else { // signals have been dragged else { // signals have been dragged
if (thd->drawstyle == HT_RECT) { // X,Y direction if (thd->drawstyle == HT_RECT) { // X,Y direction
if (dx == 0) if (dx == 0)
mode = VPM_FIX_X; mode = VPM_FIX_X;
else if (dy == 0) else if (dy == 0)
mode = VPM_FIX_Y; 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 /* _patches.drag_signals_density is given as a parameter such that each user in a network
* game can specify his/her own signal density */ * 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), 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), (mode << 4) | (_remove_button_clicked + (_ctrl_pressed ? 8 : 0)) | (trackstat << 8) | (_patches.drag_signals_density << 24),
CcPlaySound1E, CcPlaySound1E,
(_remove_button_clicked ? CMD_BUILD_MANY_SIGNALS | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM) : (_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[] = { static OnButtonClick * const _build_railroad_button_proc[] = {
@ -805,7 +805,7 @@ void ShowBuildRailToolbar(int index, int button)
// don't recreate the window if we're clicking on a button and the window exists. // 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) { 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; _cur_railtype = (byte)index;
w = AllocateWindowDesc(_build_rr_desc[index]); w = AllocateWindowDesc(_build_rr_desc[index]);
} }
@ -848,7 +848,7 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) {
} }
bits |= (1<<20) << (_station_show_coverage); bits |= (1<<20) << (_station_show_coverage);
w->click_state = bits; w->click_state = bits;
if (_railstation.dragdrop) { if (_railstation.dragdrop) {
SetTileSelectSize(1, 1); SetTileSelectSize(1, 1);
} else { } else {
@ -858,12 +858,12 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) {
if(!_remove_button_clicked) if(!_remove_button_clicked)
SetTileSelectSize(x, y); SetTileSelectSize(x, y);
} }
if (_station_show_coverage) if (_station_show_coverage)
SetTileSelectBigSize(-4, -4, 8, 8); SetTileSelectBigSize(-4, -4, 8, 8);
DrawWindowWidgets(w); DrawWindowWidgets(w);
StationPickerDrawSprite(39, 42, _cur_railtype, 2); StationPickerDrawSprite(39, 42, _cur_railtype, 2);
StationPickerDrawSprite(107, 42, _cur_railtype, 3); StationPickerDrawSprite(107, 42, _cur_railtype, 3);
@ -874,7 +874,7 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) {
DrawStationCoverageAreaText(2, 166, (uint)-1); DrawStationCoverageAreaText(2, 166, (uint)-1);
} break; } break;
case WE_CLICK: { case WE_CLICK: {
switch(e->click.widget) { switch(e->click.widget) {
case 0: case 0:
@ -927,7 +927,7 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) {
break; break;
} }
} break; } break;
case WE_MOUSELOOP: { case WE_MOUSELOOP: {
if (WP(w,def_d).close) { if (WP(w,def_d).close) {
DeleteWindow(w); DeleteWindow(w);
@ -1013,7 +1013,7 @@ static void BuildTrainDepotWndProc(Window *w, WindowEvent *e)
break; break;
} }
} break; } break;
case WE_MOUSELOOP: case WE_MOUSELOOP:
if (WP(w,def_d).close) if (WP(w,def_d).close)
DeleteWindow(w); DeleteWindow(w);
@ -1047,7 +1047,7 @@ static void ShowBuildTrainDepotPicker()
void InitializeRailGui() void InitializeRailGui()
{ {
_build_depot_direction = 3; _build_depot_direction = 3;
_railstation.numtracks = 1; _railstation.numtracks = 1;
_railstation.platlength = 1; _railstation.platlength = 1;
_railstation.dragdrop = true; _railstation.dragdrop = true;

View File

@ -4,7 +4,7 @@
// //
// Next default values for new objects // Next default values for new objects
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 104 #define _APS_NEXT_RESOURCE_VALUE 104

View File

@ -25,7 +25,7 @@ bool HasTileRoadAt(uint tile, int i)
switch(GET_TILETYPE(tile)) { switch(GET_TILETYPE(tile)) {
case MP_STREET: case MP_STREET:
b = _map5[tile]; b = _map5[tile];
if ((b & 0xF0) == 0) { if ((b & 0xF0) == 0) {
} else if ((b & 0xF0) == 0x10) { } else if ((b & 0xF0) == 0x10) {
b = (b&8)?5:10; b = (b&8)?5:10;
@ -34,7 +34,7 @@ bool HasTileRoadAt(uint tile, int i)
} else } else
return false; return false;
break; break;
case MP_STATION: case MP_STATION:
b = _map5[tile]; b = _map5[tile];
if (!IS_BYTE_INSIDE(b, 0x43, 0x43+8)) if (!IS_BYTE_INSIDE(b, 0x43, 0x43+8))
@ -93,7 +93,7 @@ static bool CheckAllowRemoveRoad(uint tile, uint br, bool *edge_road)
if (blocks&0x2A && HasTileRoadAt(TILE_ADDXY(tile, 0, 1), 0)) n |= 4; 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&0x19 && HasTileRoadAt(TILE_ADDXY(tile, 1, 0), 3)) n |= 2;
if (blocks&0x16 && HasTileRoadAt(TILE_ADDXY(tile, 0,-1), 2)) n |= 1; 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, // If 0 or 1 bits are set in n, or if no bits that match the bits to remove,
// then allow it // then allow it
if ((n & (n-1)) != 0 && (n & br) != 0) { if ((n & (n-1)) != 0 && (n & br) != 0) {
@ -136,17 +136,17 @@ int32 CmdRemoveRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 cost; int32 cost;
uint tile; uint tile;
Town *t; 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 false if it was a center piece. Affects town ratings drop
*/ */
bool edge_road; bool edge_road;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
FindLandscapeHeight(&ti, x, y); FindLandscapeHeight(&ti, x, y);
tile = ti.tile; tile = ti.tile;
t = ClosestTownFromTile(tile, (uint)-1); // needed for town rating penalty t = ClosestTownFromTile(tile, (uint)-1); // needed for town rating penalty
// allow deleting road under bridge // allow deleting road under bridge
if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile)) if (ti.type != MP_TUNNELBRIDGE && !EnsureNoVehicle(tile))
return CMD_ERROR; return CMD_ERROR;
@ -190,26 +190,26 @@ int32 CmdRemoveRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// limit the bits to delete to the existing bits. // limit the bits to delete to the existing bits.
if ((c &= ti.map5) == 0) goto return_error; if ((c &= ti.map5) == 0) goto return_error;
// calculate the cost // calculate the cost
t2 = c; t2 = c;
cost = 0; cost = 0;
do { do {
if (t2&1) cost += _price.remove_road; if (t2&1) cost += _price.remove_road;
} while(t2>>=1); } while(t2>>=1);
// check if you're allowed to remove the street owned by a town // 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(_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; return CMD_ERROR;
} }
if (flags & DC_EXEC) { 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 // a "Poor" town rating
if(_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR) 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; _map5[tile] ^= c;
if ((_map5[tile]&0xF) == 0) if ((_map5[tile]&0xF) == 0)
@ -218,12 +218,12 @@ int32 CmdRemoveRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }
return cost; return cost;
} else if (!(ti.map5 & 0xE0)) { } else if (!(ti.map5 & 0xE0)) {
byte c; byte c;
if (!(ti.map5 & 8)) { if (!(ti.map5 & 8)) {
c = 2; c = 2;
if (p1 & 5) goto return_error; if (p1 & 5) goto return_error;
} else { } else {
c = 1; c = 1;
@ -232,7 +232,7 @@ int32 CmdRemoveRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
cost = _price.remove_road * 2; cost = _price.remove_road * 2;
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
ModifyTile(tile, ModifyTile(tile,
MP_SETTYPE(MP_RAILWAY) | MP_SETTYPE(MP_RAILWAY) |
MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5, MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5,
_map3_hi[tile] & 0xF, /* map3_lo */ _map3_hi[tile] & 0xF, /* map3_lo */
@ -257,7 +257,7 @@ enum {
ROAD_NE = 8, // NE road track ROAD_NE = 8, // NE road track
ROAD_ALL = (ROAD_NW | ROAD_SW | ROAD_SE | ROAD_NE) ROAD_ALL = (ROAD_NW | ROAD_SW | ROAD_SE | ROAD_NE)
}; };
static const byte _valid_tileh_slopes_road[3][15] = { static const byte _valid_tileh_slopes_road[3][15] = {
// set of normal ones // set of normal ones
{ {
@ -266,9 +266,9 @@ static const byte _valid_tileh_slopes_road[3][15] = {
ROAD_NW | ROAD_SE, 0, 0, ROAD_NW | ROAD_SE, 0, 0,
ROAD_NW | ROAD_SE, 0, 0, // 9, 10, 11 ROAD_NW | ROAD_SE, 0, 0, // 9, 10, 11
ROAD_SW | ROAD_NE, 0, 0 ROAD_SW | ROAD_NE, 0, 0
}, },
// allowed road for an evenly raised platform // allowed road for an evenly raised platform
{ {
0, 0,
ROAD_SW | ROAD_NW, ROAD_SW | ROAD_NW,
ROAD_SW | ROAD_SE, ROAD_SW | ROAD_SE,
@ -299,7 +299,7 @@ static const byte _valid_tileh_slopes_road[3][15] = {
}; };
static uint32 CheckRoadSlope(int tileh, byte *pieces, byte existing) static uint32 CheckRoadSlope(int tileh, byte *pieces, byte existing)
{ {
if (!(tileh & 0x10)) { if (!(tileh & 0x10)) {
byte road_bits = *pieces | existing; byte road_bits = *pieces | existing;
@ -310,10 +310,10 @@ static uint32 CheckRoadSlope(int tileh, byte *pieces, byte existing)
if (tileh != 0) *pieces |= _valid_tileh_slopes_road[0][tileh]; if (tileh != 0) *pieces |= _valid_tileh_slopes_road[0][tileh];
return 0; // no extra cost return 0; // no extra cost
} }
// foundation is used. Whole tile is leveled up // foundation is used. Whole tile is leveled up
if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) { 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 // partly leveled up tile, only if there's no road on that tile
@ -337,7 +337,7 @@ int32 CmdBuildRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 cost; int32 cost;
byte pieces = (byte)p1, existing = 0; byte pieces = (byte)p1, existing = 0;
uint tile; uint tile;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
FindLandscapeHeight(&ti, x, y); FindLandscapeHeight(&ti, x, y);
@ -557,7 +557,7 @@ int32 CmdRemoveLongRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
uint bits = (p2 & 4) ? ROAD_SE | ROAD_NW : ROAD_SW | ROAD_NE; 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 == end_tile && !(p2&2)) bits &= ROAD_NW | ROAD_NE;
if (tile == start_tile && (p2&1)) bits &= ROAD_SE | ROAD_SW; if (tile == start_tile && (p2&1)) bits &= ROAD_SE | ROAD_SW;
// try to remove the halves. // try to remove the halves.
if (bits) { if (bits) {
ret = DoCommandByTile(tile, bits, 0, flags, CMD_REMOVE_ROAD); ret = DoCommandByTile(tile, bits, 0, flags, CMD_REMOVE_ROAD);
@ -578,7 +578,7 @@ int32 CmdRemoveLongRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return cost; return cost;
} }
/* Build a road depot /* Build a road depot
* p1 - direction (0-3) * p1 - direction (0-3)
* p2 - unused * p2 - unused
*/ */
@ -612,7 +612,7 @@ int32 CmdBuildRoadDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (dep == NULL) if (dep == NULL)
return CMD_ERROR; return CMD_ERROR;
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
if (_current_player == _local_player) if (_current_player == _local_player)
_last_built_road_depot_tile = (TileIndex)tile; _last_built_road_depot_tile = (TileIndex)tile;
@ -665,10 +665,10 @@ static int32 ClearTile_Road(uint tile, byte flags) {
ret = DoCommandByTile(tile, (m5&8)?5:10, 0, flags, CMD_REMOVE_ROAD); ret = DoCommandByTile(tile, (m5&8)?5:10, 0, flags, CMD_REMOVE_ROAD);
if (ret == CMD_ERROR) if (ret == CMD_ERROR)
return CMD_ERROR; return CMD_ERROR;
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
DoCommandByTile(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); DoCommandByTile(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
} }
return ret; return ret;
} else { } else {
@ -703,7 +703,7 @@ uint GetRoadFoundation(uint tileh, uint bits) {
return tileh; return tileh;
// inclined sloped building // 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)))) ((bits == (ROAD_SW | ROAD_NE)) || (i++, bits == (ROAD_NW | ROAD_SE))))
return i + 15; return i + 15;
@ -723,7 +723,7 @@ const byte _road_sloped_sprites[14] = {
static void DrawTile_Road(TileInfo *ti) static void DrawTile_Road(TileInfo *ti)
{ {
uint32 image; uint32 image;
byte m2; byte m2;
const byte *s; const byte *s;
@ -733,7 +733,7 @@ static void DrawTile_Road(TileInfo *ti)
if (ti->tileh != 0) { if (ti->tileh != 0) {
int f = GetRoadFoundation(ti->tileh, ti->map5 & 0xF); int f = GetRoadFoundation(ti->tileh, ti->map5 & 0xF);
if (f) DrawFoundation(ti, f); if (f) DrawFoundation(ti, f);
// default sloped sprites.. // default sloped sprites..
if (ti->tileh != 0) { if (ti->tileh != 0) {
image = _road_sloped_sprites[ti->tileh - 1] + 0x53F; image = _road_sloped_sprites[ti->tileh - 1] + 0x53F;
@ -747,7 +747,7 @@ static void DrawTile_Road(TileInfo *ti)
m2 = _map2[ti->tile] & 7; m2 = _map2[ti->tile] & 7;
if (m2 == 0) image |= 0x3178000; if (m2 == 0) image |= 0x3178000;
if (_map3_hi[ti->tile] & 0x80) { if (_map3_hi[ti->tile] & 0x80) {
image += 19; image += 19;
} else if (m2 > 1 && m2 != 6) { } 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]; drts = (const DrawRoadTileStruct*)_road_display_table[m2][ti->map5 & 0xF];
while ((image = drts->image) != 0) { while ((image = drts->image) != 0) {
int x = ti->x | drts->subcoord_x; int x = ti->x | drts->subcoord_x;
int y = ti->y | drts->subcoord_y; int y = ti->y | drts->subcoord_y;
@ -800,7 +800,7 @@ static void DrawTile_Road(TileInfo *ti)
uint32 ormod; uint32 ormod;
int player; int player;
const DrawRoadSeqStruct *drss; const DrawRoadSeqStruct *drss;
if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); } if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); }
ormod = 0x315; ormod = 0x315;
@ -809,7 +809,7 @@ static void DrawTile_Road(TileInfo *ti)
ormod = PLAYER_SPRITE_COLOR(player); ormod = PLAYER_SPRITE_COLOR(player);
s = _road_display_datas[ti->map5 & 0xF]; s = _road_display_datas[ti->map5 & 0xF];
DrawGroundSprite(*(uint32*)s); DrawGroundSprite(*(uint32*)s);
s += sizeof(uint32); s += sizeof(uint32);
drss = (DrawRoadSeqStruct*)s; drss = (DrawRoadSeqStruct*)s;
@ -818,7 +818,7 @@ static void DrawTile_Road(TileInfo *ti)
if (image & 0x8000) if (image & 0x8000)
image |= ormod; 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); ti->y | drss->subcoord_y, drss->width, drss->height, 0x14, ti->z);
drss++; drss++;
} }
@ -843,7 +843,7 @@ void DrawRoadDepotSprite(int x, int y, int image)
for(dtss = (DrawRoadSeqStruct *)t; dtss->image != 0; dtss++) { for(dtss = (DrawRoadSeqStruct *)t; dtss->image != 0; dtss++) {
Point pt = RemapCoords(dtss->subcoord_x, dtss->subcoord_y, 0); Point pt = RemapCoords(dtss->subcoord_x, dtss->subcoord_y, 0);
image = dtss->image; image = dtss->image;
if (image & 0x8000) if (image & 0x8000)
image |= ormod; image |= ormod;
@ -933,7 +933,7 @@ static void TileLoop_Road(uint tile)
{ {
Town *t; Town *t;
int grp; int grp;
if (_opt.landscape == LT_HILLY) { if (_opt.landscape == LT_HILLY) {
// Fix snow style if the road is above the snowline // Fix snow style if the road is above the snowline
if ((_map3_hi[tile] & 0x80) != ((GetTileZ(tile) > _opt.snow_line) ? 0x80 : 0x00)) { 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); grp = GetTownRadiusGroup(t, tile);
// Show an animation to indicate road work // 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) && !(GetTileDist(t->xy, tile) >= 8 && grp==0) &&
(_map5[tile]==5 || _map5[tile]==10)) { (_map5[tile]==5 || _map5[tile]==10)) {
if (GetTileSlope(tile, NULL) == 0 && EnsureNoVehicle(tile) && CHANCE16(1,20)) { if (GetTileSlope(tile, NULL) == 0 && EnsureNoVehicle(tile) && CHANCE16(1,20)) {
_map2[tile] = ((_map2[tile]&7) <= 1) ? 6 : 7; _map2[tile] = ((_map2[tile]&7) <= 1) ? 6 : 7;
SndPlayTileFx(0x1F,tile); SndPlayTileFx(0x1F,tile);
CreateEffectVehicleAbove( CreateEffectVehicleAbove(
GET_TILE_X(tile) * 16 + 7, GET_TILE_X(tile) * 16 + 7,
@ -987,7 +987,7 @@ static void TileLoop_Road(uint tile)
if (b == p[0]) if (b == p[0])
return; return;
if (b == p[1]) { if (b == p[1]) {
b = p[0]; b = p[0];
} else if (b == 0) { } else if (b == 0) {
@ -1000,7 +1000,7 @@ static void TileLoop_Road(uint tile)
} }
} else { } else {
// Handle road work // Handle road work
byte b = _map2[tile]; byte b = _map2[tile];
if (b < 0x80) { if (b < 0x80) {
_map2[tile] = b + 8; _map2[tile] = b + 8;
@ -1040,10 +1040,10 @@ static uint32 GetTileTrackStatus_Road(uint tile, TransportType mode) {
/* Crossing */ /* Crossing */
uint32 r = 0x101; uint32 r = 0x101;
if (b&8) r <<= 1; if (b&8) r <<= 1;
if (b&4) { if (b&4) {
r *= 0x10001; r *= 0x10001;
} }
return r; return r;
} else if ((b&0xF0) == 0x20) { } else if ((b&0xF0) == 0x20) {
/* Depot */ /* Depot */