1
0
Fork 0

(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!

release/0.4.5
truelight 2004-09-10 19:02:27 +00:00
parent 1c1a5b91c9
commit eb49a19460
82 changed files with 1857 additions and 1857 deletions

196
ai.c
View File

@ -68,7 +68,7 @@ static void AiCase1(Player *p)
static void AiStateVehLoop(Player *p)
{
Vehicle *v;
v = p->ai.cur_veh == NULL ? _vehicles : p->ai.cur_veh+1;
for (;v != endof(_vehicles); v++) {
@ -79,7 +79,7 @@ static void AiStateVehLoop(Player *p)
v->type == VEH_Road ||
(v->type == VEH_Aircraft && v->subtype <= 2) ||
v->type == VEH_Ship) {
/* replace engine? */
if (v->type == VEH_Train && v->engine_type < 3 &&
(_price.build_railvehicle >> 3) < p->player_money) {
@ -115,7 +115,7 @@ static void AiStateVehLoop(Player *p)
// XXX
static const byte _rail_locos_count[3] = {
27, 3, 5
27, 3, 5
};
extern const byte _rail_engines_start[3];
@ -130,14 +130,14 @@ static int AiChooseTrainToBuild(byte railtype, int32 money, byte flag)
Engine *e = &_engines[i];
do {
assert(!(_rail_vehicle_info[i].flags & RVI_WAGON));
if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D)
continue;
r = DoCommandByTile(0, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
if (r != CMD_ERROR &&
(!(_cmd_build_rail_veh_var1&1) || !(flag&1)) &&
r <= money &&
if (r != CMD_ERROR &&
(!(_cmd_build_rail_veh_var1&1) || !(flag&1)) &&
r <= money &&
_cmd_build_rail_veh_score >= best_veh_score) {
best_veh_score = _cmd_build_rail_veh_score;
best_veh_index = i;
@ -206,7 +206,7 @@ static int32 AiGetBasePrice(Player *p)
// adjust base price when more expensive vehicles are available
if (p->ai.railtype_to_use == 1) base = (base * 3) >> 1;
else if (p->ai.railtype_to_use == 2) base *= 2;
return base;
}
@ -266,7 +266,7 @@ static void AiHandleGotoDepot(Player *p, int cmd)
p->ai.cur_veh->next_order = OT_DUMMY;
InvalidateWindow(WC_VEHICLE_VIEW, p->ai.cur_veh->index);
}
}
}
static void AiRestoreVehicleOrders(Vehicle *v, BackuppedOrders *bak)
{
@ -296,7 +296,7 @@ static void AiHandleReplaceTrain(Player *p)
if (veh != -1) {
BackupVehicleOrders(v, orderbak);
tile = v->tile;
if (DoCommandByTile(0, v->index, 2, DC_EXEC, CMD_SELL_RAIL_WAGON) != CMD_ERROR &&
DoCommandByTile(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE) != CMD_ERROR) {
veh = _new_train_id;
@ -324,7 +324,7 @@ static void AiHandleReplaceRoadVeh(Player *p)
if (veh != -1) {
BackupVehicleOrders(v, orderbak);
tile = v->tile;
if (DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH) != CMD_ERROR &&
DoCommandByTile(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH) != CMD_ERROR) {
veh = _new_roadveh_id;
@ -437,7 +437,7 @@ static void AiFindSubsidyIndustryRoute(FoundRoute *fr)
// initially error
fr->distance = -1;
// Randomize subsidy index..
// Randomize subsidy index..
i = RandomRange(lengthof(_subsidies) * 3);
if (i >= lengthof(_subsidies))
return;
@ -476,7 +476,7 @@ static void AiFindSubsidyPassengerRoute(FoundRoute *fr)
// initially error
fr->distance = -1;
// Randomize subsidy index..
// Randomize subsidy index..
i = RandomRange(lengthof(_subsidies) * 3);
if (i >= lengthof(_subsidies))
return;
@ -512,7 +512,7 @@ static void AiFindRandomIndustryRoute(FoundRoute *fr)
// pick a source
fr->from = i = AiFindRandomIndustry();
if (i == NULL)
if (i == NULL)
return;
// pick a random produced cargo
@ -539,7 +539,7 @@ static void AiFindRandomIndustryRoute(FoundRoute *fr)
t = AiFindRandomTown();
if (t == NULL || t->population < (uint32)(cargo == CT_FOOD ? 200 : 900))
return;
fr->to = t;
fr->distance = GetTileDist(i->xy, t->xy);
}
@ -558,7 +558,7 @@ static void AiFindRandomPassengerRoute(FoundRoute *fr)
fr->from = source = AiFindRandomTown();
if (source == NULL || source->population < 400)
return;
fr->to = dest = AiFindRandomTown();
if (dest == NULL || source == dest || dest->population < 400)
return;
@ -589,7 +589,7 @@ static bool AiCheckIfRouteIsGood(Player *p, FoundRoute *fr, byte bitmask)
if (to_tile == from_tile && st->xy == to_tile)
same_station++;
}
// To prevent the AI from building ten busstations in the same town, do some calculations
// For each road or airport station, we want 350 of population!
if ((bitmask == 2 || bitmask == 4) && same_station > 2 && ((Town *)(fr->from))->population < same_station * 350)
@ -612,8 +612,8 @@ static bool AiCheckIfRouteIsGood(Player *p, FoundRoute *fr, byte bitmask)
return false;
} else {
Industry *i = (Industry*)fr->from;
if (i->pct_transported[fr->cargo != i->produced_cargo[0]] > 0x99 ||
if (i->pct_transported[fr->cargo != i->produced_cargo[0]] > 0x99 ||
i->total_production[fr->cargo != i->produced_cargo[0]] == 0)
return false;
}
@ -680,7 +680,7 @@ static void AiWantLongIndustryRoute(Player *p)
p->ai.src.cargo = fr.cargo | 0x80;
// Fill the dest field
p->ai.dst.use_tile = 0;
p->ai.dst.rand_rng = 9;
p->ai.dst.cur_building_rule = 0xFF;
@ -751,7 +751,7 @@ static void AiWantMediumIndustryRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyIndustryRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 40, 60+1))
@ -824,7 +824,7 @@ static void AiWantShortIndustryRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyIndustryRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 15, 40+1))
@ -897,7 +897,7 @@ static void AiWantMailRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyPassengerRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 60, 110+1))
@ -1003,7 +1003,7 @@ static void AiWantPassengerRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyPassengerRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 0, 55+1))
@ -1075,7 +1075,7 @@ static void AiWantTrainRoute(Player *p)
uint16 r;
p->ai.railtype_to_use = p->max_railtype - 1;
r = (uint16)Random();
if (r > 0xD000) {
AiWantLongIndustryRoute(p);
} else if (r > 0x6000) {
@ -1096,7 +1096,7 @@ static void AiWantLongRoadIndustryRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyIndustryRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 35, 55+1))
@ -1157,7 +1157,7 @@ static void AiWantMediumRoadIndustryRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyIndustryRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 15, 40+1))
@ -1218,7 +1218,7 @@ static void AiWantLongRoadPassengerRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyPassengerRoute(&fr);
if (IS_INT_INSIDE(fr.distance, 55, 180+1))
@ -1356,7 +1356,7 @@ static void AiWantPassengerAircraftRoute(Player *p)
i = 60;
for(;;) {
// look for one from the subsidy list
AiFindSubsidyPassengerRoute(&fr);
if (IS_INT_INSIDE(fr.distance,0,95+1))
@ -1401,7 +1401,7 @@ static void AiWantPassengerAircraftRoute(Player *p)
p->ai.order_list_blocks[0] = 0;
p->ai.order_list_blocks[1] = 1;
p->ai.order_list_blocks[2] = 255;
p->ai.state = AIS_AIRPORT_STUFF;
p->ai.timeout_counter = 0;
}
@ -1498,11 +1498,11 @@ static void AiStateWantNewRoute(Player *p)
i = 200;
for(;;) {
r = (uint16)Random();
if (_patches.ai_disable_veh_train && _patches.ai_disable_veh_roadveh &&
_patches.ai_disable_veh_aircraft && _patches.ai_disable_veh_ship)
return;
if (r < 0x7626) {
if (_patches.ai_disable_veh_train) continue;
AiWantTrainRoute(p);
@ -1516,7 +1516,7 @@ static void AiStateWantNewRoute(Player *p)
if (_patches.ai_disable_veh_ship) continue;
AiWantShipRoute(p);
}
// got a route?
if (p->ai.state != AIS_WANT_NEW_ROUTE)
break;
@ -1598,7 +1598,7 @@ clear_town_stuff:;
j = p->attr;
k = 0;
// Build the rail
for(i=0; i!=6; i++,j>>=1) {
if (j&1) {
@ -1608,7 +1608,7 @@ clear_town_stuff:;
total_cost += r;
}
}
/* signals too? */
if (j&3) {
// Can't build signals on a road.
@ -1643,7 +1643,7 @@ clear_town_stuff:;
// Unk
break;
}
p++;
}
@ -1663,7 +1663,7 @@ static int AiBuildDefaultRailTrack(TileIndex tile, byte p0, byte p1, byte p2, by
const AiDefaultRailBlock *p;
for(i=0; (p = _default_rail_track_data[i]) != NULL; i++) {
if (p->p0 == p0 && p->p1 == p1 && p->p2 == p2 && p->p3 == p3 &&
if (p->p0 == p0 && p->p1 == p1 && p->p2 == p2 && p->p3 == p3 &&
(p->dir == 0xFF || p->dir == dir || ((p->dir-1)&3) == dir)) {
*cost = AiDoBuildDefaultRailTrack(tile, p->data, DC_NO_TOWN_RATING);
if (*cost != CMD_ERROR && AiCheckTrackResources(tile, p->data, cargo))
@ -1723,7 +1723,7 @@ static void AiDoTerraformLand(TileIndex tile, int dir, int unk, int mode)
} while (--unk >= 0);
slope = GetTileSlope(tile, &h);
if (slope != 0) {
if (mode > 0 || (mode == 0 && !(r&0xC))) {
// Terraform up
@ -1731,9 +1731,9 @@ static void AiDoTerraformLand(TileIndex tile, int dir, int unk, int mode)
DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
} else if (h != 0) {
// Terraform down
DoCommandByTile(tile, _terraform_down_flags[slope-1], 0,
DoCommandByTile(tile, _terraform_down_flags[slope-1], 0,
DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
}
}
}
_current_player = old_player;
@ -1850,7 +1850,7 @@ static bool AiDoFollowTrack(Player *p)
arpfd.tile2 = p->ai.cur_tile_a;
arpfd.flag = false;
arpfd.count = 0;
FollowTrack(p->ai.cur_tile_a + _tileoffs_by_dir[p->ai.cur_dir_a], 0x2000 | TRANSPORT_RAIL, p->ai.cur_dir_a^2,
FollowTrack(p->ai.cur_tile_a + _tileoffs_by_dir[p->ai.cur_dir_a], 0x2000 | TRANSPORT_RAIL, p->ai.cur_dir_a^2,
(TPFEnumProc*)AiEnumFollowTrack, NULL, &arpfd);
return arpfd.count > 8;
}
@ -1888,7 +1888,7 @@ static bool AiIsTileBanned(Player *p, TileIndex tile, byte val) {
int i;
for(i=0; i!=p->ai.banned_tile_count; i++)
if (p->ai.banned_tiles[i] == tile &&
if (p->ai.banned_tiles[i] == tile &&
p->ai.banned_val[i] == val)
return true;
return false;
@ -1924,7 +1924,7 @@ static bool AiCheckRailPathBetter(AiRailFinder *arf, const byte *p)
arf->best_ptr = p;
arf->best_tile = arf->cur_best_tile;
better = true;
}
}
} else if (arf->recursive_mode > 1) {
// Mode is 2.
if (arf->best_dist != 0 || arf->cur_best_depth < arf->best_depth) {
@ -1948,7 +1948,7 @@ static void FORCEINLINE AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex
bool flag;
int dir2 = p[0] & 3;
FindLandscapeHeightByTile(&arf->ti, tile);
if (arf->ti.tileh == _dir_table_1[dir2] || (arf->ti.tileh==0 && arf->ti.z!=0)) {
@ -1969,11 +1969,11 @@ static void FORCEINLINE AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex
}
// Is building a (rail)bridge possible at this place (type doesn't matter)?
if (DoCommandByTile(tile_new, tile, arf->player->ai.railtype_to_use<<8,
if (DoCommandByTile(tile_new, tile, arf->player->ai.railtype_to_use<<8,
DC_AUTO, CMD_BUILD_BRIDGE) == CMD_ERROR)
return;
AiBuildRailRecursive(arf, tile_new, dir2);
// At the bottom depth, check if the new path is better than the old one.
if (arf->depth == 1) {
if (AiCheckRailPathBetter(arf, p))
@ -1986,7 +1986,7 @@ static void FORCEINLINE AiCheckBuildRailTunnelHere(AiRailFinder *arf, TileIndex
{
FindLandscapeHeightByTile(&arf->ti, tile);
if (arf->ti.tileh == _dir_table_2[p[0]&3] && arf->ti.z!=0) {
if (arf->ti.tileh == _dir_table_2[p[0]&3] && arf->ti.z!=0) {
int32 cost = DoCommandByTile(tile, arf->player->ai.railtype_to_use, 0, DC_AUTO, CMD_BUILD_TUNNEL);
if (cost != CMD_ERROR && cost <= (arf->player->player_money>>4)) {
@ -2004,7 +2004,7 @@ static void AiBuildRailRecursive(AiRailFinder *arf, TileIndex tile, int dir)
const byte *p;
tile = TILE_MASK(tile + _tileoffs_by_dir[dir]);
// Reached destination?
if (tile == arf->final_tile) {
if (arf->final_dir != (dir^2)) {
@ -2067,7 +2067,7 @@ static void AiBuildRailRecursive(AiRailFinder *arf, TileIndex tile, int dir)
}
static const byte _dir_table_3[]= {0x25, 0x2A, 0x19, 0x16};
static const byte _dir_table_3[]= {0x25, 0x2A, 0x19, 0x16};
static void AiBuildRailConstruct(Player *p)
{
@ -2078,7 +2078,7 @@ static void AiBuildRailConstruct(Player *p)
if (AiDoFollowTrack(p)) {
p->ai.state_counter = (Random()&0xE)+6; // Destruct this amount of blocks
p->ai.state_mode = 1; // Start destruct
// Ban this tile and don't reach it for a while.
AiBanTile(p, p->ai.cur_tile_a, FindFirstBit(GetRailTrackStatus(p->ai.cur_tile_a)));
return;
@ -2097,7 +2097,7 @@ static void AiBuildRailConstruct(Player *p)
arf.best_depth = 0xff;
arf.cur_best_tile = 0;
arf.best_tile = 0;
AiBuildRailRecursive(&arf, p->ai.cur_tile_a, p->ai.cur_dir_a);
AiBuildRailRecursive(&arf, p->ai.cur_tile_a, p->ai.cur_dir_a);
// Reached destination?
if (arf.recursive_mode == 2 && arf.cur_best_depth == 0) {
@ -2114,19 +2114,19 @@ static void AiBuildRailConstruct(Player *p)
if (++p->ai.state_counter == 21) {
p->ai.state_counter = 40;
p->ai.state_mode = 1;
// Ban this tile
AiBanTile(p, p->ai.cur_tile_a, FindFirstBit(GetRailTrackStatus(p->ai.cur_tile_a)));
}
return;
}
p->ai.cur_tile_a += _tileoffs_by_dir[p->ai.cur_dir_a];
if (arf.best_ptr[0]&0x80) {
int i;
int32 bridge_len = GetBridgeLength(arf.bridge_end_tile, p->ai.cur_tile_a);
/* Figure out what (rail)bridge type to build
start with best bridge, then go down to worse and worse bridges
unnecessary to check for worse bridge (i=0), since AI will always build that.
@ -2153,7 +2153,7 @@ static void AiBuildRailConstruct(Player *p)
} else {
// rail
p->ai.cur_dir_a = arf.best_ptr[1];
DoCommandByTile(p->ai.cur_tile_a, p->ai.railtype_to_use, arf.best_ptr[0],
DoCommandByTile(p->ai.cur_tile_a, p->ai.railtype_to_use, arf.best_ptr[0],
DC_EXEC | DC_AUTO | DC_NO_WATER | DC_NO_RAIL_OVERLAP, CMD_BUILD_SINGLE_RAIL);
p->ai.state_counter = 0;
}
@ -2183,7 +2183,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
}
if (!(_map5[tile] & 0x40)) {
// Check if the bridge points in the right direction.
// This is not really needed the first place AiRemoveTileAndGoForward is called.
if ((_map5[tile]&1) != (p->ai.cur_dir_a&1))
@ -2194,7 +2194,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
do {
tile = TILE_MASK(tile - offs);
} while (_map5[tile] & 0x40);
tilenew = TILE_MASK(tile - offs);
// And clear the bridge.
if (DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR) == CMD_ERROR)
@ -2217,7 +2217,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
(_map5[tile]&0xC0) == 0x40) {
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_REMOVE_SIGNALS);
}
// And also remove the rail.
if (DoCommandByTile(tile, 0, bit, DC_EXEC, CMD_REMOVE_SINGLE_RAIL) == CMD_ERROR)
return false;
@ -2226,7 +2226,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
ptr = _ai_table_15[p->ai.cur_dir_a^2];
while (ptr[0] != bit) ptr+=2;
p->ai.cur_dir_a = ptr[1] ^ 2;
// And then also switch tile.
p->ai.cur_tile_a = TILE_MASK(p->ai.cur_tile_a - _tileoffs_by_dir[p->ai.cur_dir_a]);
@ -2246,7 +2246,7 @@ static void AiBuildRailDestruct(Player *p)
if (p->ai.cur_tile_a == p->ai.start_tile_a)
return;
AiRemoveTileAndGoForward(p);
AiRemoveTileAndGoForward(p);
}
@ -2256,9 +2256,9 @@ static void AiBuildRail(Player *p)
if (p->ai.state_mode < 1) {
// Construct mode, build new rail.
AiBuildRailConstruct(p);
AiBuildRailConstruct(p);
} else if (p->ai.state_mode == 1) {
// Destruct mode, destroy the rail currently built.
AiBuildRailDestruct(p);
} else if (p->ai.state_mode == 2) {
@ -2291,7 +2291,7 @@ static void AiStateBuildRail(Player *p)
// Currently building a rail between two points?
if (p->ai.state_mode != 255) {
AiBuildRail(p);
// Alternate between edges
swap_tile(&p->ai.start_tile_a, &p->ai.start_tile_b);
swap_tile(&p->ai.cur_tile_a, &p->ai.cur_tile_b);
@ -2425,7 +2425,7 @@ handle_nocash:
bool is_pass = (p->ai.cargo_type == CT_PASSENGERS ||
p->ai.cargo_type == CT_MAIL ||
(_opt.landscape==LT_NORMAL && p->ai.cargo_type == CT_VALUABLES));
if (!is_pass && i == 1) flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
@ -2453,7 +2453,7 @@ static void AiStateDeleteRailBlocks(Player *p)
AiBuildRec *aib;
const AiDefaultBlockData *b;
num = p->ai.num_build_rec;
num = p->ai.num_build_rec;
aib = &p->ai.src;
do {
if (aib->cur_building_rule != 255) {
@ -2521,13 +2521,13 @@ static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData
uint c = TILE_MASK(tile+ p->tileoffs);
_cleared_town = NULL;
if (p->mode == 2) {
if (IS_TILETYPE(c, MP_STREET) &&
(_map5[c]&0xF0)==0 &&
(_map5[c]&p->attr)!=0) {
roadflag |= 2;
// all bits are already built?
if ((_map5[c]&p->attr)==p->attr)
continue;
@ -2575,7 +2575,7 @@ clear_town_stuff:;
r = DoCommandByTile(c, 0, 0, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_LANDSCAPE_CLEAR);
if (r == CMD_ERROR) return CMD_ERROR;
}
}
}
@ -2595,9 +2595,9 @@ static bool AiCheckBlockDistances(Player *p, TileIndex tile)
{
AiBuildRec *aib;
int num;
num = p->ai.num_build_rec;
aib = &p->ai.src;
aib = &p->ai.src;
do {
if (aib->cur_building_rule != 255) {
@ -2720,7 +2720,7 @@ static bool AiCheckRoadPathBetter(AiRoadFinder *arf, const byte *p)
if (arf->recursive_mode < 1) {
// Mode is 0. This means destination has not been found yet.
// If the found path is shorter than the current one, remember it.
if (arf->cur_best_dist < arf->best_dist ||
if (arf->cur_best_dist < arf->best_dist ||
(arf->cur_best_dist == arf->best_dist && arf->cur_best_depth < arf->best_depth)) {
arf->best_depth = arf->cur_best_depth;
arf->best_dist = arf->cur_best_dist;
@ -2728,7 +2728,7 @@ static bool AiCheckRoadPathBetter(AiRoadFinder *arf, const byte *p)
arf->best_ptr = p;
arf->best_tile = arf->cur_best_tile;
better = true;
}
}
} else if (arf->recursive_mode > 1) {
// Mode is 2.
if (arf->best_dist != 0 || arf->cur_best_depth < arf->best_depth) {
@ -2825,14 +2825,14 @@ static void FORCEINLINE AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex
bool flag;
int dir2 = p[0] & 3;
FindLandscapeHeightByTile(&arf->ti, tile);
if (arf->ti.tileh == _dir_table_1[dir2] || (arf->ti.tileh==0 && arf->ti.z!=0)) {
tile_new = tile;
// Allow bridges directly over bottom tiles
flag = arf->ti.z == 0;
for(;;) {
if (tile_new < -_tileoffs_by_dir[dir2]) return; // Wraping around map, no bridge possible!
if (tile_new < -_tileoffs_by_dir[dir2]) return; // Wraping around map, no bridge possible!
tile_new = TILE_MASK(tile_new + _tileoffs_by_dir[dir2]);
FindLandscapeHeightByTile(&arf->ti, tile_new);
if (arf->ti.tileh != 0 || arf->ti.type == MP_CLEAR || arf->ti.type == MP_TREES) {
@ -2850,7 +2850,7 @@ static void FORCEINLINE AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex
if (DoCommandByTile(tile_new, tile, 0x8000, DC_AUTO, CMD_BUILD_BRIDGE) == CMD_ERROR)
return;
AiBuildRoadRecursive(arf, tile_new, dir2);
// At the bottom depth, check if the new path is better than the old one.
if (arf->depth == 1) {
if (AiCheckRoadPathBetter(arf, p))
@ -2863,7 +2863,7 @@ static void FORCEINLINE AiCheckBuildRoadTunnelHere(AiRoadFinder *arf, TileIndex
{
FindLandscapeHeightByTile(&arf->ti, tile);
if (arf->ti.tileh == _dir_table_2[p[0]&3] && arf->ti.z!=0) {
if (arf->ti.tileh == _dir_table_2[p[0]&3] && arf->ti.z!=0) {
int32 cost = DoCommandByTile(tile, 0x200, 0, DC_AUTO, CMD_BUILD_TUNNEL);
if (cost != CMD_ERROR && cost <= (arf->player->player_money>>4)) {
@ -2882,13 +2882,13 @@ static void AiBuildRoadRecursive(AiRoadFinder *arf, TileIndex tile, int dir)
const byte *p;
tile = TILE_MASK(tile + _tileoffs_by_dir[dir]);
// Reached destination?
if (tile == arf->final_tile) {
if ((arf->final_dir^2) == dir) {
arf->recursive_mode = 2;
arf->cur_best_depth = arf->depth;
}
}
return;
}
@ -2965,7 +2965,7 @@ static void AiBuildRoadConstruct(Player *p)
arf.best_depth = 0xff;
arf.cur_best_tile = 0;
arf.best_tile = 0;
AiBuildRoadRecursive(&arf, p->ai.cur_tile_a, p->ai.cur_dir_a);
AiBuildRoadRecursive(&arf, p->ai.cur_tile_a, p->ai.cur_dir_a);
// Reached destination?
if (arf.recursive_mode == 2 && arf.cur_best_depth == 0) {
@ -3003,7 +3003,7 @@ do_some_terraform:
unnecessary to check for worse bridge (i=0), since AI will always build that.
AI is so fucked up that fixing this small thing will probably not solve a thing
*/
for(i = 10; i != 0; i--) {
for(i = 10; i != 0; i--) {
if (CheckBridge_Stuff(i, bridge_len)) {
int32 cost = DoCommandByTile(tile, p->ai.cur_tile_a, i + (0x80 << 8), DC_AUTO, CMD_BUILD_BRIDGE);
if (cost != CMD_ERROR && cost < (p->player_money >> 5))
@ -3021,7 +3021,7 @@ do_some_terraform:
p->ai.cur_tile_a = _build_tunnel_endtile;
p->ai.state_counter = 0;
} else {
// road
if (!AiBuildRoadHelper(tile, DC_EXEC | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, arf.best_ptr[0]))
goto do_some_terraform;
@ -3044,7 +3044,7 @@ static void AiBuildRoad(Player *p)
if (p->ai.state_mode < 1) {
// Construct mode, build new road.
AiBuildRoadConstruct(p);
AiBuildRoadConstruct(p);
} else if (p->ai.state_mode == 1) {
// Destruct mode, not implemented for roads.
p->ai.state_mode = 2;
@ -3088,7 +3088,7 @@ static void AiStateBuildRoad(Player *p)
// Currently building a road between two points?
if (p->ai.state_mode != 255) {
AiBuildRoad(p);
// Alternate between edges
swap_tile(&p->ai.start_tile_a, &p->ai.start_tile_b);
swap_tile(&p->ai.cur_tile_a, &p->ai.cur_tile_b);
@ -3149,7 +3149,7 @@ static void AiStateBuildRoadVehicles(Player *p)
uint tile,loco_id;
int veh, i;
int32 cost;
ptr = _road_default_block_data[p->ai.src.cur_building_rule]->data;
for(;ptr->mode != 0;ptr++) {}
tile = TILE_ADD(p->ai.src.use_tile, ptr->tileoffs);
@ -3197,7 +3197,7 @@ static void AiStateDeleteRoadBlocks(Player *p)
AiBuildRec *aib;
const AiDefaultBlockData *b;
num = p->ai.num_build_rec;
num = p->ai.num_build_rec;
aib = &p->ai.src;
do {
if (aib->cur_building_rule != 255) {
@ -3379,7 +3379,7 @@ static void AiStateBuildDefaultAirportBlocks(Player *p)
// do the following 8 times
i = 8;
do {
// check if we can build the default
// check if we can build the default
aib = &p->ai.src;
j = p->ai.num_build_rec;
do {
@ -3399,7 +3399,7 @@ static void AiStateBuildDefaultAirportBlocks(Player *p)
!IS_TILETYPE(aib->use_tile, MP_RAILWAY) &&
!IS_TILETYPE(aib->use_tile, MP_STATION)
) {
_map_type_and_height[aib->use_tile] = 0xa1;
_map5[aib->use_tile] = 0x80;
MarkTileDirtyByTile(aib->use_tile);
@ -3460,7 +3460,7 @@ static void AiStateBuildAircraftVehicles(Player *p)
int32 cost;
int i;
uint loco_id;
ptr = _airport_default_block_data[p->ai.src.cur_building_rule];
for(;ptr->mode!=0;ptr++) {}
@ -3523,7 +3523,7 @@ static void AiStateSellVeh(Player *p)
if (v->owner == _current_player) {
if (v->type == VEH_Train) {
if (!IsTrainDepotTile(v->tile) || v->u.rail.track != 0x80 || !(v->vehstatus&VS_STOPPED)) {
if ((v->next_order & OT_MASK) != OT_GOTO_DEPOT)
DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_TRAIN_GOTO_DEPOT);
@ -3532,7 +3532,7 @@ static void AiStateSellVeh(Player *p)
// Sell whole train
DoCommandByTile(v->tile, v->index, 1, DC_EXEC, CMD_SELL_RAIL_WAGON);
} else if (v->type == VEH_Road) {
if (!IsRoadDepotTile(v->tile) || v->u.road.state != 254 || !(v->vehstatus&VS_STOPPED)) {
if ((v->next_order & OT_MASK) != OT_GOTO_DEPOT)
@ -3613,7 +3613,7 @@ static void AiRemovePlayerRailOrRoad(Player *p, uint tile)
if ((m5&~0x3) != 0xC0) {
is_rail_crossing:;
m5 = GetRailTrackStatus(tile);
if (m5 == 0xC || m5 == 0x30)
return;
@ -3662,7 +3662,7 @@ pos_3:
m5 &= 3;
if (GetRailTrackStatus(tile + _tileoffs_by_dir[m5]) & _depot_bits[m5])
return;
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
}
} else if (IS_TILETYPE(tile, MP_STREET)) {
@ -3707,7 +3707,7 @@ pos_3:
if (_map_owner[tile] != _current_player || (_map5[tile] & 0xC6) != 0x80)
return;
m5 = 0;
b = _map5[tile] & 0x21;
@ -3721,7 +3721,7 @@ pos_3:
static void AiStateRemoveTrack(Player *p)
{
int num = 1000;
do {
uint tile = ++p->ai.state_counter;
@ -3775,7 +3775,7 @@ static AiStateAction * const _ai_actions[] = {
AiStateSellVeh,
AiStateRemoveStation,
AiStateRemoveTrack,
AiStateRemoveSingleRailTile
};
@ -3875,10 +3875,10 @@ static void AiBuildCompanyHQ(Player *p)
}
void AiDoGameLoop(Player *p)
void AiDoGameLoop(Player *p)
{
_cur_ai_player = p;
if (p->bankrupt_asked != 0) {
AiHandleTakeover(p);
return;
@ -3913,7 +3913,7 @@ void AiDoGameLoop(Player *p)
return;
}
}
}
}
#if 0
{
static byte old_state = 99;

View File

@ -85,8 +85,8 @@ int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte fla
if (part < 1) part = 1;
// When we are done, stop it
if (part >= PathFinderInfo->route_length - 1) { PathFinderInfo->position = -2; return 0; }
if (PathFinderInfo->rail_or_road) {
// Tunnel code
if ((AI_PATHFINDER_FLAG_TUNNEL & route_extra[part]) != 0) {
@ -198,7 +198,7 @@ int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte fla
if (!EnsureNoVehicle(route[part]) && flag == DC_EXEC) part--;
PathFinderInfo->position = part;
}
return cost;
}
@ -232,7 +232,7 @@ int AiNew_PickVehicle(Player *p) {
int AiNew_Build_Vehicle(Player *p, uint tile, byte flag) {
int i = AiNew_PickVehicle(p);
if (i == -1) return CMD_ERROR;
if (p->ainew.tbt == AI_TRAIN) {
return CMD_ERROR;
} else {

View File

@ -38,7 +38,7 @@ int32 AyStar_AiPathFinder_EndNodeCheck(AyStar *aystar, OpenListNode *current) {
if (IS_TILETYPE(current->path.node.tile, MP_CLEAR) || IS_TILETYPE(current->path.node.tile, MP_TREES))
if (current->path.parent == NULL || TestCanBuildStationHere(current->path.node.tile,AiNew_GetDirection(current->path.parent->node.tile, current->path.node.tile)))
return AYSTAR_FOUND_END_NODE;
return AYSTAR_DONE;
}
@ -103,7 +103,7 @@ AyStar *new_AyStar_AiPathFinder(int max_tiles_around, Ai_PathFinderInfo *PathFin
void clean_AyStar_AiPathFinder(AyStar *aystar, Ai_PathFinderInfo *PathFinderInfo) {
PathNode start_node;
uint x,y;
aystar->clear(aystar);
// Set the user_data to the PathFinderInfo
@ -149,7 +149,7 @@ static void AyStar_AiPathFinder_FoundEndNode(AyStar *aystar, OpenListNode *curre
Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
int i = 0;
PathNode *parent = &current->path;
do {
PathFinderInfo->route_extra[i] = parent->node.user_data[0];
PathFinderInfo->route[i++] = parent->node.tile;
@ -169,16 +169,16 @@ static void AyStar_AiPathFinder_FoundEndNode(AyStar *aystar, OpenListNode *curre
static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *current) {
int i, r, dir;
Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
aystar->num_neighbours = 0;
// Go through all surrounding tiles and check if they are within the limits
for (i=0;i<4;i++) {
if (GET_TILE_X(_tiles_around[i] + current->path.node.tile) > 1 && GET_TILE_X(_tiles_around[i] + current->path.node.tile) < TILE_X_MAX - 1 &&
GET_TILE_Y(_tiles_around[i] + current->path.node.tile) > 1 && GET_TILE_Y(_tiles_around[i] + current->path.node.tile) < TILE_Y_MAX - 1) {
// We also directly test if the current tile can connect to this tile..
// We do this simply by just building the tile!
// If the next step is a bridge, we have to enter it the right way
if (!PathFinderInfo->rail_or_road && AI_PATHFINDER_IS_ROAD(current->path.node.tile + _tiles_around[i])) {
if (IS_TILETYPE(current->path.node.tile + _tiles_around[i], MP_TUNNELBRIDGE)) {
@ -198,7 +198,7 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
if ((_map5[current->path.node.tile] & 1) != (i & 1)) continue;
}
}
if ((AI_PATHFINDER_FLAG_BRIDGE & current->path.node.user_data[0]) != 0 ||
(AI_PATHFINDER_FLAG_TUNNEL & current->path.node.user_data[0]) != 0) {
// We are a bridge/tunnel, how cool!!
@ -206,7 +206,7 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
if (i != (current->path.node.user_data[0] >> 8)) continue;
}
dir = 0;
// First, check if we have a parent
if (current->path.parent == NULL && current->path.node.user_data[0] == 0) {
// If not, this means we are at the starting station
@ -254,16 +254,16 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
if (r == CMD_ERROR) continue;
}
}
}
// The tile can be connected
aystar->neighbours[aystar->num_neighbours].tile = _tiles_around[i] + current->path.node.tile;
aystar->neighbours[aystar->num_neighbours].user_data[0] = 0;
aystar->neighbours[aystar->num_neighbours++].direction = 0;
}
}
// Next step, check for bridges and tunnels
if (current->path.parent != NULL && current->path.node.user_data[0] == 0) {
@ -273,9 +273,9 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// It means we can only walk with the track, so the bridge has to be in the same direction
TileIndex tile = current->path.node.tile;
TileIndex new_tile = tile;
FindLandscapeHeightByTile(&ti, tile);
// Bridges can only be build on land that is not flat
// And if there is a road or rail blocking
if (ti.tileh != 0 ||
@ -284,10 +284,10 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
for (;;) {
new_tile += _tiles_around[dir];
// Precheck, is the length allowed?
if (!CheckBridge_Stuff(0,GetBridgeLength(tile, new_tile))) break;
// Check if we hit the station-tile.. we don't like that!
if (TILES_BETWEEN(new_tile,PathFinderInfo->end_tile_tl,PathFinderInfo->end_tile_br)) break;
@ -302,7 +302,7 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
if (aystar->num_neighbours == 11) break;
}
}
// Next, check for tunnels!
// Tunnels can only be build with tileh of 3, 6, 9 or 12, depending on the direction
// For now, we check both sides for this tile.. terraforming gives fuzzy result
@ -334,11 +334,11 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
int r, res = 0;
TileInfo ti, parent_ti;
// Gather some information about the tile..
FindLandscapeHeightByTile(&ti, current->tile);
FindLandscapeHeightByTile(&parent_ti, parent->path.node.tile);
// Check if we hit the end-tile
if (TILES_BETWEEN(current->tile,PathFinderInfo->end_tile_tl,PathFinderInfo->end_tile_br)) {
// We are at the end-tile, check if we had a direction or something...
@ -348,7 +348,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
// If it was valid, drop out.. we don't build on the endtile
return 0;
}
// Give everything a small penalty
res += AI_PATHFINDER_PENALTY;
@ -359,7 +359,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
res -= AI_PATHFINDER_ROAD_ALREADY_EXISTS_BONUS;
}
}
// We should give a penalty when the tile is going up or down.. this is one way to do so!
// Too bad we have to count it from the parent.. but that is not so bad
if (parent_ti.tileh != 0 && parent->path.parent != NULL) {
@ -380,7 +380,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
}
}
}
// Are we part of a tunnel?
if ((AI_PATHFINDER_FLAG_TUNNEL & current->user_data[0]) != 0) {
// Tunnels are very expensive when build on long routes..
@ -409,7 +409,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
if (ti.tileh == 0)
res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
}
// To prevent the AI from taking the fastest way in tiles, but not the fastest way
// in speed, we have to give a good penalty to direction changing
// This way, we get almost the fastest way in tiles, and a very good speed on the track
@ -448,7 +448,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
}
}
}
// Res should never be below zero.. if so, make it zero!
if (res < 0) { res = 0; }

View File

@ -275,8 +275,8 @@ int32 CmdBuildAircraft(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// On hold for NewAI
v->u.air.pos = (!_patches.ainew_active && _is_ai_player) ? 0:MAX_ELEMENTS;
/* When we click on hangar we know the tile (it is in var 'tile')it is on. By that we know
its position in the array of depots the airport has.....we can search
/* When we click on hangar we know the tile (it is in var 'tile')it is on. By that we know
its position in the array of depots the airport has.....we can search
->layout for #th position of depot. Since layout must start with depots, it is simple
*/
{
@ -542,7 +542,7 @@ static void CheckIfAircraftNeedsService(Vehicle *v)
if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
return;
st = DEREF_STATION(v->next_order_param);
// only goto depot if the target airport has terminals (eg. it is airport)
if (st->xy != 0 && st->airport_tile != 0 && GetAirport(st->airport_type)->nofterminals != 0) {
@ -621,7 +621,7 @@ static void HelicopterTickHandler(Vehicle *v)
if (u->vehstatus & VS_HIDDEN)
return;
// if true, helicopter rotors do not rotate. This should only be the case if a helicopter is
// if true, helicopter rotors do not rotate. This should only be the case if a helicopter is
// loading/unloading at a terminal or stopped
if ((v->next_order&OT_MASK) == OT_LOADING || (v->vehstatus&VS_STOPPED)) {
if (u->cur_speed != 0) {
@ -735,7 +735,7 @@ static bool UpdateAircraftSpeed(Vehicle *v)
v->subspeed = (t=v->subspeed) + (byte)spd;
spd = min( v->cur_speed + (spd >> 8) + (v->subspeed < t), v->max_speed);
// adjust speed for broken vehicles
if(v->vehstatus&VS_AIRCRAFT_BROKEN) spd = min(spd, 27);
@ -875,7 +875,7 @@ static bool Aircraft_5(Vehicle *v)
// Change direction smoothly to final direction.
dirdiff = amd->direction - v->direction;
// if distance is 0, and plane points in right direction, no point in calling
// if distance is 0, and plane points in right direction, no point in calling
// UpdateAircraftSpeed(). So do it only afterwards
if (dirdiff == 0) {
v->cur_speed = 0;
@ -1061,7 +1061,7 @@ static void ProcessAircraftOrder(Vehicle *v)
if ((v->next_order & (OT_MASK|OF_UNLOAD)) != (OT_GOTO_DEPOT|OF_UNLOAD))
return;
}
if ((v->next_order & (OT_MASK|OF_UNLOAD|OF_FULL_LOAD)) == (OT_GOTO_DEPOT|OF_UNLOAD|OF_FULL_LOAD) &&
SERVICE_INTERVAL) {
v->cur_order_index++;
@ -1217,7 +1217,7 @@ static void AircraftEnterHangar(Vehicle *v)
byte old_order;
ServiceAircraft(v);
MaybeRenewVehicle(v, EstimateAircraftCost(v->engine_type));
if ((v->next_order & OT_MASK) == OT_GOTO_DEPOT) {
@ -1227,7 +1227,7 @@ static void AircraftEnterHangar(Vehicle *v)
v->next_order = OT_NOTHING;
if (old_order & OF_UNLOAD) { v->cur_order_index++; }
else if (old_order & OF_FULL_LOAD) { // force depot visit
v->vehstatus |= VS_STOPPED;
@ -1692,7 +1692,7 @@ static bool FreeTerminal(Vehicle *v, byte i, byte last_terminal)
return false;
}
static bool AirportFindFreeTerminal(Vehicle *v, const AirportFTAClass *Airport)
static bool AirportFindFreeTerminal(Vehicle *v, const AirportFTAClass *Airport)
{
byte nofterminalspergroup, i;
AirportFTA *temp;
@ -1703,9 +1703,9 @@ static bool AirportFindFreeTerminal(Vehicle *v, const AirportFTAClass *Airport)
Heading 255 denotes a group. We see 2 groups here:
1. group 0 -- TERM_GROUP1_block (check block)
2. group 1 -- TERM_GROUP2_ENTER_block (check block)
First in line is checked first, group 0. If the block (TERM_GROUP1_block) is free, it
looks at the corresponding terminals of that group. If no free ones are found, other
possible groups are checked (in this case group 1, since that is after group 0). If that
First in line is checked first, group 0. If the block (TERM_GROUP1_block) is free, it
looks at the corresponding terminals of that group. If no free ones are found, other
possible groups are checked (in this case group 1, since that is after group 0). If that
fails, then attempt fails and plane waits
*/
if (Airport->nofterminalgroups > 1) {
@ -1731,7 +1731,7 @@ static bool AirportFindFreeTerminal(Vehicle *v, const AirportFTAClass *Airport)
return FreeTerminal(v, 0, Airport->nofterminals);
}
static bool AirportFindFreeHelipad(Vehicle *v, const AirportFTAClass *Airport)
static bool AirportFindFreeHelipad(Vehicle *v, const AirportFTAClass *Airport)
{
Station *st;
byte nofhelipadspergroup, i;
@ -1847,7 +1847,7 @@ void UpdateOldAircraft()
AircraftNextAirportPos_and_Order(v_oldstyle); // move it to the entry point of the airport
GetNewVehiclePos(v_oldstyle, &gp); // get the position of the plane (to be used for setting)
v_oldstyle->tile = 0; // aircraft in air is tile=0
// correct speed of helicopter-rotors
if (v_oldstyle->subtype == 0) {v_oldstyle->next->next->cur_speed = 32;}
@ -1857,7 +1857,7 @@ void UpdateOldAircraft()
}
}
void UpdateAirplanesOnNewStation(Station *st)
void UpdateAirplanesOnNewStation(Station *st)
{
GetNewVehiclePosResult gp;
Vehicle *v;

View File

@ -891,7 +891,7 @@ static void MakeSortedAircraftList(byte owner)
// aircraft are stored as a cummulative index, eg 25, 41, 43. This means
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2
for (i = &_num_aircraft_sort[1]; i != endof(_num_aircraft_sort); i++) {*i += *(i-1);}
// sort by owner, then only subsort the requested owner-vehicles
qsort(_aircraft_sort, n, sizeof(_aircraft_sort[0]), GeneralOwnerSorter);
@ -936,7 +936,7 @@ static void PlayerAircraftWndProc(Window *w, WindowEvent *e)
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2 aircraft
i = (window_number == 0) ? 0 : _num_aircraft_sort[window_number-1];
SetVScrollCount(w, _num_aircraft_sort[window_number] - i);
/* draw the widgets */
{
Player *p = DEREF_PLAYER(window_number);
@ -980,7 +980,7 @@ static void PlayerAircraftWndProc(Window *w, WindowEvent *e)
SET_DPARAM32(0, v->profit_this_year);
SET_DPARAM32(1, v->profit_last_year);
DrawString(x+19, y + 28, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
if (v->string_id != STR_SV_AIRCRAFT_NAME) {
SET_DPARAM16(0, v->string_id);
DrawString(x+19, y, STR_01AB, 0);
@ -1007,7 +1007,7 @@ static void PlayerAircraftWndProc(Window *w, WindowEvent *e)
return;
case 6: { /* Matrix to show vehicles */
uint32 id_v = (e->click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / PLY_WND_PRC__SIZE_OF_ROW_BIG;
if (id_v >= w->vscroll.cap) { return;} // click out of bounds
id_v += w->vscroll.pos;

View File

@ -77,12 +77,12 @@ static void BuildAirToolbWndProc(Window *w, WindowEvent *e)
case WE_CLICK:
if (e->click.widget-2 >= 0)
_build_air_button_proc[e->click.widget - 2](w);
_build_air_button_proc[e->click.widget - 2](w);
break;
case WE_PLACE_OBJ:
_place_proc(e->place.tile);
break;
break;
case WE_PLACE_DRAG: {
VpSelectTilesWithMethod(e->place.pt.x, e->place.pt.y, e->place.userdata);
@ -160,7 +160,7 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
// strings such as 'Size' and 'Coverage Area'
DrawStringCentered(74, 16, STR_305B_SIZE, 0);
DrawStringCentered(74, 78, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
DrawStationCoverageAreaText(2, 104, (uint)-1);
DrawStationCoverageAreaText(2, 104, (uint)-1);
break;
}

View File

@ -5,7 +5,7 @@
* For more information about AyStar (A* Algorithm), you can look at
* http://en.wikipedia.org/wiki/A-star_search_algorithm
*/
/*
* Friendly reminder:
* Call (AyStar).free() when you are done with Aystar. It reserves a lot of memory
@ -46,7 +46,7 @@ OpenListNode *AyStarMain_OpenList_Pop(AyStar *aystar) {
OpenListNode* res = (OpenListNode*)aystar->OpenListQueue.pop(&aystar->OpenListQueue);
if (res != NULL)
Hash_Delete(&aystar->OpenListHash, res->path.node.tile, res->path.node.direction);
return res;
}
@ -76,29 +76,29 @@ int AyStarMain_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNode *pare
// Check the new node against the ClosedList
if (AyStarMain_ClosedList_IsInList(aystar, current) != NULL) return AYSTAR_DONE;
// Calculate the G-value for this node
new_g = aystar->CalculateG(aystar, current, parent);
// If the value was INVALID_NODE, we don't do anything with this node
if (new_g == AYSTAR_INVALID_NODE) return AYSTAR_DONE;
// There should not be given any other error-code..
assert(new_g >= 0);
// Add the parent g-value to the new g-value
new_g += parent->g;
if (aystar->max_path_cost != 0 && (uint)new_g > aystar->max_path_cost) return AYSTAR_DONE;
// Calculate the h-value
new_h = aystar->CalculateH(aystar, current, parent);
// There should not be given any error-code..
assert(new_h >= 0);
// The f-value if g + h
new_f = new_g + new_h;
// Get the pointer to the parent in the ClosedList (the currentone is to a copy of the one in the OpenList)
closedlist_parent = AyStarMain_ClosedList_IsInList(aystar, &parent->path.node);
// Check if this item is already in the OpenList
if ((check = AyStarMain_OpenList_IsInList(aystar, current)) != NULL) {
int i;
@ -117,7 +117,7 @@ int AyStarMain_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNode *pare
// A new node, add him to the OpenList
AyStarMain_OpenList_Add(aystar, closedlist_parent, current, new_f, new_g, 0);
}
return AYSTAR_DONE;
}
@ -134,12 +134,12 @@ int AyStarMain_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNode *pare
*/
int AyStarMain_Loop(AyStar *aystar) {
int i, r;
// Get the best node from OpenList
OpenListNode *current = AyStarMain_OpenList_Pop(aystar);
// If empty, drop an error
if (current == NULL) return AYSTAR_EMPTY_OPENLIST;
// Check for end node and if found, return that code
if (aystar->EndNodeCheck(aystar, current) == AYSTAR_FOUND_END_NODE) {
if (aystar->FoundEndNode != NULL)
@ -147,22 +147,22 @@ int AyStarMain_Loop(AyStar *aystar) {
free(current);
return AYSTAR_FOUND_END_NODE;
}
// Add the node to the ClosedList
AyStarMain_ClosedList_Add(aystar, &current->path);
// Load the neighbours
aystar->GetNeighbours(aystar, current);
// Go through all neighbours
for (i=0;i<aystar->num_neighbours;i++) {
// Check and add them to the OpenList if needed
r = aystar->checktile(aystar, &aystar->neighbours[i], current);
}
// Free the node
free(current);
if (aystar->max_search_nodes != 0 && Hash_Size(&aystar->ClosedListHash) >= aystar->max_search_nodes)
/* We've expanded enough nodes */
return AYSTAR_LIMIT_REACHED;
@ -228,7 +228,7 @@ int AyStarMain_Main(AyStar *aystar) {
if (r != AYSTAR_STILL_BUSY)
/* We're done, clean up */
aystar->clear(aystar);
// Check result-value
if (r == AYSTAR_FOUND_END_NODE) return AYSTAR_FOUND_END_NODE;
// Check if we have some left in the OpenList
@ -242,7 +242,7 @@ int AyStarMain_Main(AyStar *aystar) {
* Adds a node from where to start an algorithm. Multiple nodes can be added
* if wanted. You should make sure that clear() is called before adding nodes
* if the AyStar has been used before (though the normal main loop calls
* clear() automatically when the algorithm finishes
* clear() automatically when the algorithm finishes
*/
void AyStarMain_AddStartNode(AyStar *aystar, AyStarNode *start_node) {
#ifdef AYSTAR_DEBUG

View File

@ -107,7 +107,7 @@ struct AyStar {
AyStar_GetNeighbours* GetNeighbours;
AyStar_EndNodeCheck* EndNodeCheck;
AyStar_FoundEndNode* FoundEndNode;
/* These are completely untouched by AyStar, they can be accesed by
* the application specific routines to input and output data.
* user_path should typically contain data about the resulting path
@ -117,7 +117,7 @@ struct AyStar {
void *user_path;
void *user_target;
uint user_data[10];
/* How many loops are there called before AyStarMain_Main gives
* control back to the caller. 0 = until done */
byte loops_per_tick;
@ -125,7 +125,7 @@ struct AyStar {
* 0 = infinite */
uint max_path_cost;
/* The maximum amount of nodes that will be expanded, 0 = infinite */
uint max_search_nodes;
uint max_search_nodes;
/* These should be filled with the neighbours of a tile by
* GetNeighbours */
@ -140,7 +140,7 @@ struct AyStar {
AyStar_Free* free;
AyStar_Clear* clear;
AyStar_CheckTile* checktile;
/* These will contain the open and closed lists */
/* The actual closed list */
@ -164,6 +164,6 @@ void AyStarMain_Clear(AyStar *aystar);
* callling init_AyStar (see the declaration of AyStar for which fields are
* internal */
void init_AyStar(AyStar* aystar, Hash_HashProc hash, uint num_buckets);
#endif

View File

@ -30,7 +30,7 @@ static void CcBuildBridge(bool success, uint tile, uint32 p1, uint32 p2)
static void BuildBridge(Window *w, int i)
{
DeleteWindow(w);
DoCommandP(_bridge.end_tile, _bridge.start_tile, _bridge.indexes[i] | (_bridge.type << 8), CcBuildBridge,
DoCommandP(_bridge.end_tile, _bridge.start_tile, _bridge.indexes[i] | (_bridge.type << 8), CcBuildBridge,
CMD_BUILD_BRIDGE | CMD_AUTO | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE));
}
@ -60,11 +60,11 @@ static void BuildBridgeWndProc(Window *w, WindowEvent *e)
e->keypress.cont = false;
BuildBridge(w, i);
}
break;
}
case WE_CLICK:
case WE_CLICK:
if (e->click.widget == 2) {
uint ind = ((int)e->click.pt.y - 14) / 22;
if (ind < 4 && (ind += w->vscroll.pos) < (uint)_bridge.count)
@ -136,7 +136,7 @@ void ShowBuildBridgeWindow(uint start, uint end, byte bridge_type)
// get absolute bridge length
bridge_len = GetBridgeLength(start, end);
tot_bridge_len = bridge_len + 2;
tot_bridge_len = bridge_len + 2;
tot_bridge_len = CalcBridgeLenCostFactor(tot_bridge_len);
@ -155,7 +155,7 @@ void ShowBuildBridgeWindow(uint start, uint end, byte bridge_type)
_bridge.count = j;
if (j != 0) {
Window *w = AllocateWindowDesc((_bridge.type & 0x80) ? &_build_road_bridge_desc : &_build_bridge_desc);
Window *w = AllocateWindowDesc((_bridge.type & 0x80) ? &_build_road_bridge_desc : &_build_bridge_desc);
w->vscroll.cap = 4;
w->vscroll.count = (byte)j;
} else {

View File

@ -15,7 +15,7 @@ typedef struct TerraformerState {
int direction;
int modheight_count;
int tile_table_count;
int32 cost;
TileIndex *tile_table;
@ -44,7 +44,7 @@ static int TerraformGetHeightOfTile(TerraformerState *ts, TileIndex tile)
{
TerraformerHeightMod *mod = ts->modheight;
int count;
for(count = ts->modheight_count; count != 0; count--, mod++) {
if (mod->tile == tile)
return mod->height;
@ -85,10 +85,10 @@ static int TerraformProc(TerraformerState *ts, uint tile, int mode)
int32 ret;
assert(tile < TILES_X * TILES_Y);
if ((r=TerraformAllowTileProcess(ts, tile)) <= 0)
return r;
if ((_map_type_and_height[tile] >> 4) == MP_RAILWAY) {
static const byte _railway_modes[4] = {8, 0x10, 4, 0x20};
static const byte _railway_dangslopes[4] = {0xd, 0xe, 7, 0xb};
@ -128,7 +128,7 @@ static bool TerraformTileHeight(TerraformerState *ts, uint tile, int height)
int nh;
TerraformerHeightMod *mod;
int count;
assert(tile < TILES_X * TILES_Y);
if (height < 0) {
@ -140,11 +140,11 @@ static bool TerraformTileHeight(TerraformerState *ts, uint tile, int height)
if (height > 0xF)
return false;
nh = TerraformGetHeightOfTile(ts, tile);
if (nh < 0 || height == nh)
return false;
return false;
if (TerraformProc(ts, tile, 0)<0)
return false;
@ -227,7 +227,7 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
tile = TILE_FROM_XY(x,y);
if (p1 & 1) {
if (!TerraformTileHeight(&ts, tile+TILE_XY(1,0),
if (!TerraformTileHeight(&ts, tile+TILE_XY(1,0),
(_map_type_and_height[tile+TILE_XY(1,0)]&0xF) + direction))
return CMD_ERROR;
}
@ -254,7 +254,7 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
/* Check if tunnel would take damage */
int count;
TileIndex *ti = ts.tile_table;
for(count = ts.tile_table_count; count != 0; count--, ti++) {
uint z, t;
uint tile = *ti;
@ -280,7 +280,7 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
for(count = ts.tile_table_count; count != 0; count--, ti++) {
DoCommandByTile(*ti, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
}
}
/* change the height */
{
@ -291,10 +291,10 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
mod = ts.modheight;
for(count = ts.modheight_count; count != 0; count--, mod++) {
til = mod->tile;
// Change tile height
_map_type_and_height[til] = (_map_type_and_height[til]&~0x0F)|mod->height;
TerraformAddDirtyTileAround(&ts, til);
}
}
@ -306,7 +306,7 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
for(count = ts.tile_table_count; count != 0; count--, ti++) {
MarkTileDirtyByTile(*ti);
}
}
}
}
return ts.cost;
}
@ -374,9 +374,9 @@ int32 CmdPurchaseLandArea(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
uint tile;
int32 cost;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
tile = TILE_FROM_XY(x,y);
if (!EnsureNoVehicle(tile))
@ -426,7 +426,7 @@ int32 ClearTile_Clear(uint tile, byte flags) {
int32 CmdSellLandArea(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
uint tile;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
tile = TILE_FROM_XY(x,y);
@ -464,7 +464,7 @@ void DrawHillyLandTile(TileInfo *ti)
void DrawClearLandFence(TileInfo *ti, byte img)
{
byte z = ti->z;
if (ti->tileh & 2) {
z += 8;
if (ti->tileh == 0x17)
@ -508,7 +508,7 @@ static void DrawTile_Clear(TileInfo *ti)
DrawGroundSprite( _clear_land_sprites_3[ti->map5&3] + _tileh_to_sprite[ti->tileh]);
break;
}
DrawClearLandFence(ti, _map3_hi[ti->tile] >> 2);
}
@ -521,7 +521,7 @@ uint GetSlopeTileh_Clear(TileInfo *ti)
static void GetAcceptedCargo_Clear(uint tile, AcceptedCargo *ac)
{
/* unused */
/* unused */
}
static void AnimateTile_Clear(uint tile)
@ -553,7 +553,7 @@ void TileLoopClearHelper(uint tile)
if ( (img_1&2) != (img_2&2) ) {
_map3_hi[tile] |= 3 << 5;
dirty = tile;
}
}
} else {
if (img_1 == 1 && img_2 == 1) {
_map3_hi[tile] &= ~(3 << 5);
@ -572,7 +572,7 @@ void TileLoopClearHelper(uint tile)
if ( (img_1&2) != (img_2&2) ) {
_map3_hi[tile] |= 3 << 2;
dirty = tile;
}
}
} else {
if (img_1 == 1 && img_2 == 1) {
_map3_hi[tile] &= ~(3 << 2);
@ -596,7 +596,7 @@ static void TileLoopClearAlps(uint tile)
m5 = _map5[tile] & 0x1C;
tmp = _map5[tile] & 3;
if (k < -8) {
/* snow_m2_down */
if (m5 != 0x10)
@ -671,7 +671,7 @@ static void TileLoop_Clear(uint tile)
byte m5,m3;
TileLoopClearHelper(tile);
if (_opt.landscape == LT_DESERT) {
TileLoopClearDesert(tile);
} else if (_opt.landscape == LT_HILLY) {
@ -685,7 +685,7 @@ static void TileLoop_Clear(uint tile)
if ( (m5 & 0x1C) != 0xC) {
if ( (m5 & 3) == 3)
return;
if (_game_mode != GM_EDITOR) {
m5 += 0x20;
if (m5 >= 0x20) {
@ -727,7 +727,7 @@ void GenerateClearTile()
/* add hills */
i = (Random() & 0x3FF) | 0x400;
do {
tile = TILE_MASK(Random());
tile = TILE_MASK(Random());
if (IS_TILETYPE(tile, MP_CLEAR))
_map5[tile] = (byte)((_map5[tile] & ~(3<<2)) | (1<<2));
} while (--i);
@ -736,7 +736,7 @@ void GenerateClearTile()
i = (Random() & 0x7F) | 0x80;
do {
r = Random();
tile = TILE_MASK(r);
tile = TILE_MASK(r);
if (IS_TILETYPE(tile, MP_CLEAR)) {
j = ((r >> 16) & 0xF) + 5;
for(;;) {

View File

@ -305,7 +305,7 @@ static CommandProc * const _command_proc_table[] = {
int32 DoCommandByTile(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
{
return DoCommand(GET_TILE_X(tile)*16, GET_TILE_Y(tile)*16, p1, p2, flags, procc);
}
}
//extern void _stdcall Sleep(int s);
@ -314,7 +314,7 @@ int32 DoCommand(int x, int y, uint32 p1, uint32 p2, uint32 flags, uint procc)
{
int32 res;
CommandProc *proc;
proc = _command_proc_table[procc];
if (_docommand_recursive == 0) {
@ -383,7 +383,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
int x = GET_TILE_X(tile)*16;
int y = GET_TILE_Y(tile)*16;
assert(_docommand_recursive == 0);
assert(_docommand_recursive == 0);
_error_message = INVALID_STRING_ID;
_error_message_2 = cmd >> 16;
@ -404,9 +404,9 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
proc = _command_proc_table[cmd & 0xFF];
// this command is a notest command?
notest =
(cmd & 0xFF) == CMD_CLEAR_AREA ||
(cmd & 0xFF) == CMD_CONVERT_RAIL ||
notest =
(cmd & 0xFF) == CMD_CLEAR_AREA ||
(cmd & 0xFF) == CMD_CONVERT_RAIL ||
(cmd & 0xFF) == CMD_LEVEL_LAND ||
(cmd & 0xFF) == CMD_TRAIN_GOTO_DEPOT;
@ -429,7 +429,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
return false;
}
// unless the command is a notest command, check if it can be executed.
if (!notest) {
@ -456,7 +456,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
// actually try and execute the command.
_yearly_expenses_type = 0;
res2 = proc(x,y, flags|DC_EXEC, p1, p2);
if (!notest) {
assert(res == res2); // sanity check
} else {
@ -479,7 +479,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
}
_docommand_recursive = 0;
if (callback) callback(true, tile, p1, p2);
return true;
@ -490,7 +490,7 @@ show_error:
callb_err:
_docommand_recursive = 0;
if (callback) callback(false, tile, p1, p2);
return false;
}

View File

@ -140,7 +140,7 @@ enum {
CMD_REFIT_RAIL_VEHICLE = 106,
CMD_RESTORE_ORDER_INDEX = 107,
CMD_BUILD_LOCK = 108,
CMD_START_SCENARIO = 109,
CMD_BUILD_MANY_SIGNALS = 110,
@ -157,7 +157,7 @@ enum {
DC_AI_BUILDING = 0x20, // special building rules for AI
DC_NO_TOWN_RATING = 0x40, // town rating does not disallow you from building
DC_FORCETEST = 0x80, // force test too.
CMD_ERROR = ((int32)0x80000000),
};

View File

@ -44,7 +44,7 @@ static const WindowDesc _iconsole_window_desc = {
static _iconsole_cmd * _iconsole_cmds; // list of registred commands
static _iconsole_var * _iconsole_vars; // list of registred vars
// ** console std lib ** //
// ** console std lib ** //
static byte _stdlib_developer=1;
static bool _stdlib_con_developer=false;
static void IConsoleStdLibRegister();
@ -96,7 +96,7 @@ static void IConsoleWndProc(Window *w, WindowEvent *e)
GfxFillRect(posx,posy,posx+5,posy+1,color);
_video_driver->make_dirty(posx,posy,5,1);
}
_icursor_counter=0;
_icursor_counter=0;
}
break;
@ -157,14 +157,14 @@ static void IConsoleWndProc(Window *w, WindowEvent *e)
{
IConsoleSwitch();
} else
if (e->keypress.keycode == WKC_RETURN)
if (e->keypress.keycode == WKC_RETURN)
{
IConsolePrintF(_iconsole_color_commands, "] %s", _iconsole_cmdline);
IConsoleCmdBufferAdd(_iconsole_cmdline);
IConsoleCmdExec((byte *) _iconsole_cmdline);
IConsoleClearCommand();
} else
if (e->keypress.keycode == WKC_BACKSPACE)
if (e->keypress.keycode == WKC_BACKSPACE)
{
if (_iconsole_cmdpos!=0) _iconsole_cmdpos--;
_iconsole_cmdline[_iconsole_cmdpos]=0;
@ -175,10 +175,10 @@ static void IConsoleWndProc(Window *w, WindowEvent *e)
{
_iconsole_scroll=79;
_iconsole_cmdline[_iconsole_cmdpos]=e->keypress.ascii;
if (_iconsole_cmdpos!=255) _iconsole_cmdpos++;
if (_iconsole_cmdpos!=255) _iconsole_cmdpos++;
SetWindowDirty(w);
_iconsole_cmdbufferpos=19;
} else e->keypress.cont=true;
} else e->keypress.cont=true;
break;
}
@ -211,9 +211,9 @@ for (i=0;i<80;i++) {
}
IConsoleStdLibRegister();
#if defined(WITH_REV)
IConsolePrintF(13,"OpenTTD Game Console Revision 3 - %s",_openttd_revision);
IConsolePrintF(13,"OpenTTD Game Console Revision 3 - %s",_openttd_revision);
#else
IConsolePrint(13,"OpenTTD Game Console Revision 3");
IConsolePrint(13,"OpenTTD Game Console Revision 3");
#endif
IConsolePrint(12,"---------------------------------");
IConsolePrint(12,"use \"help\" for more info");
@ -386,7 +386,7 @@ void* IConsoleCmdGetAddr(byte * name) {
_iconsole_cmd * item;
item = _iconsole_cmds;
while (item != NULL) {
while (item != NULL) {
if (strcmp(item->name,name)==0) return item->addr;
item = item->_next;
}
@ -455,7 +455,7 @@ _iconsole_var * IConsoleVarGet(byte * name) {
_iconsole_var * item;
item = _iconsole_vars;
while (item != NULL) {
while (item != NULL) {
if (strcmp(item->name,name)==0) return item;
item = item->_next;
}
@ -733,7 +733,7 @@ tokenstream--;
if (!(*tokenstream==0)) {
c++;
tokenstream++;
*tokenstream = 0;
*tokenstream = 0;
}
//** interpreting **//
@ -790,7 +790,7 @@ if (function != NULL) {
//** executing **//
if (_stdlib_con_developer) IConsolePrintF(_iconsole_color_debug,"CONDEBUG: execution_mode: %i",execution_mode);
switch (execution_mode) {
case 0:
case 0:
{
// not found
IConsoleError("command or variable not found");
@ -830,7 +830,7 @@ case 2:
else if (strcmp(tokens[1],"--")==0) {
*(bool *)var->addr=!*(bool *)var->addr;
IConsoleVarDump(var,NULL);
}
}
else { IConsoleError("operation not supported"); }
}
break;
@ -852,7 +852,7 @@ case 2:
else if (strcmp(tokens[1],"--")==0) {
(*(byte *)var->addr)--;
IConsoleVarDump(var,NULL);
}
}
else { IConsoleError("operation not supported"); }
}
break;
@ -1083,7 +1083,7 @@ case 4:
result = NULL;
}
}
}
break;
default:
@ -1129,7 +1129,7 @@ static _iconsole_var * IConsoleStdLibPrintFC(byte argc, byte* argv[], byte argt[
}
static _iconsole_var * IConsoleStdLibScreenShot(byte argc, byte* argv[], byte argt[]) {
if (argc<2) {
_make_screenshot=1;
} else {
@ -1201,7 +1201,7 @@ int l = 0;
if (argv[1]!=NULL) l = strlen((char *) argv[1]);
item = _iconsole_cmds;
while (item != NULL) {
while (item != NULL) {
if (argv[1]!=NULL) {
if (memcmp((void *) item->name, (void *) argv[1],l)==0)
@ -1225,7 +1225,7 @@ int l = 0;
if (argv[1]!=NULL) l = strlen((char *) argv[1]);
item = _iconsole_vars;
while (item != NULL) {
while (item != NULL) {
if (argv[1]!=NULL) {
if (memcmp((void *) item->name, (void *) argv[1],l)==0)
@ -1249,7 +1249,7 @@ int l = 0;
if (argv[1]!=NULL) l = strlen((char *) argv[1]);
item = _iconsole_vars;
while (item != NULL) {
while (item != NULL) {
if (argv[1]!=NULL) {
if (memcmp((void *) item->name, (void *) argv[1],l)==0)

View File

@ -13,7 +13,7 @@
static void DisasterClearSquare(uint tile)
{
int type;
if (!EnsureNoVehicle(tile))
return;
@ -107,7 +107,7 @@ static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z)
if ( (u=v->next) != NULL) {
BeginVehicleMove(u);
u->x_pos = x;
u->y_pos = yt = y - 1 - (max(z - GetSlopeZ(x, y-1), 0) >> 3);
u->z_pos = GetSlopeZ(x,yt);
@ -144,7 +144,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
return;
GetNewVehiclePos(v, &gp);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
if (v->next_order == 1) {
@ -162,7 +162,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
if (IS_TILETYPE(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
v->next_order = 1;
v->age = 0;
@ -176,12 +176,12 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
if (v->y_pos >= (TILES_Y+9) * 16 - 1)
DeleteDisasterVeh(v);
return;
}
}
if (v->next_order > 2) {
if (++v->age <= 13320)
return;
tile = v->tile; /**/
if (IS_TILETYPE(tile, MP_STATION) &&
@ -245,9 +245,9 @@ static void DisasterTick_UFO(Vehicle *v)
byte z;
v->u.disaster.image_override = (++v->tick_counter & 8) ? 0xF45 : 0xF44;
if (v->next_order == 0) {
// fly around randomly
// fly around randomly
int x = GET_TILE_X(v->dest_tile)*16;
int y = GET_TILE_Y(v->dest_tile)*16;
if (abs(x - v->x_pos) + abs(y - v->y_pos) >= 16) {
@ -288,11 +288,11 @@ static void DisasterTick_UFO(Vehicle *v)
v->direction = GetDirectionTowards(v, u->x_pos, u->y_pos);
GetNewVehiclePos(v, &gp);
z = v->z_pos;
if (dist <= 16 && z > u->z_pos) z--;
SetDisasterVehiclePos(v, gp.x, gp.y, z);
if (z <= u->z_pos && (u->vehstatus&VS_HIDDEN)==0) {
v->age++;
if (u->u.road.crashed_ctr == 0) {
@ -332,10 +332,10 @@ static void DestructIndustry(Industry *i)
static void DisasterTick_2(Vehicle *v)
{
GetNewVehiclePosResult gp;
v->tick_counter++;
v->u.disaster.image_override = (v->next_order == 1 && v->tick_counter&4) ? 0xF4F : 0;
GetNewVehiclePos(v, &gp);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
@ -386,7 +386,7 @@ static void DisasterTick_2(Vehicle *v)
return;
tile = TILE_FROM_XY(x,y);
if (!IS_TILETYPE(tile, MP_INDUSTRY))
if (!IS_TILETYPE(tile, MP_INDUSTRY))
return;
v->dest_tile = ind = _map2[tile];
@ -456,7 +456,7 @@ static void DisasterTick_3(Vehicle *v)
return;
tile = TILE_FROM_XY(x,y);
if (!IS_TILETYPE(tile, MP_INDUSTRY))
if (!IS_TILETYPE(tile, MP_INDUSTRY))
return;
v->dest_tile = ind = _map2[tile];
@ -546,7 +546,7 @@ static void DisasterTick_4(Vehicle *v)
InitializeDisasterVehicle(w, -6*16, v->y_pos, 0, 5, 12);
w->vehstatus |= VS_DISASTER;
} else if (v->next_order < 1) {
int x = GET_TILE_X(v->dest_tile)*16;
int y = GET_TILE_Y(v->dest_tile)*16;
if (abs(x - v->x_pos) + abs(y - v->y_pos) >= 16) {
@ -593,7 +593,7 @@ static void DisasterTick_4b(Vehicle *v)
}
if (v->next_order == 0) {
u = &_vehicles[v->u.disaster.unk2];
u = &_vehicles[v->u.disaster.unk2];
if (abs(v->x_pos - u->x_pos) > 16)
return;
v->next_order = 1;
@ -685,7 +685,7 @@ void OnNewDay_DisasterVehicle(Vehicle *v)
typedef void DisasterInitProc();
// Zeppeliner which crashes on a small airport
static void Disaster0_Init()
static void Disaster0_Init()
{
Vehicle *v = ForceAllocateSpecialVehicle(), *u;
Station *st;
@ -695,7 +695,7 @@ static void Disaster0_Init()
return;
for(st=_stations;;) {
if (st->xy && st->airport_tile != 0 &&
if (st->xy && st->airport_tile != 0 &&
st->airport_type <= 1 &&
IS_HUMAN_PLAYER(st->owner)) {
x = (GET_TILE_X(st->xy) + 2) * 16;
@ -714,12 +714,12 @@ static void Disaster0_Init()
u = ForceAllocateSpecialVehicle();
if (u != NULL) {
v->next = u;
InitializeDisasterVehicle(u,x,0,0,3,1);
InitializeDisasterVehicle(u,x,0,0,3,1);
u->vehstatus |= VS_DISASTER;
}
}
static void Disaster1_Init()
static void Disaster1_Init()
{
Vehicle *v = ForceAllocateSpecialVehicle(), *u;
int x;
@ -737,12 +737,12 @@ static void Disaster1_Init()
u = ForceAllocateSpecialVehicle();
if (u != NULL) {
v->next = u;
InitializeDisasterVehicle(u,x,0,0,3,3);
InitializeDisasterVehicle(u,x,0,0,3,3);
u->vehstatus |= VS_DISASTER;
}
}
static void Disaster2_Init()
static void Disaster2_Init()
{
Industry *i, *found;
Vehicle *v,*u;
@ -750,7 +750,7 @@ static void Disaster2_Init()
for(found=NULL,i=_industries; i != endof(_industries); i++) {
if (i->xy != 0 &&
i->type == IT_OIL_REFINERY &&
i->type == IT_OIL_REFINERY &&
(found==NULL || CHANCE16(1,2))) {
found = i;
}
@ -771,12 +771,12 @@ static void Disaster2_Init()
u = ForceAllocateSpecialVehicle();
if (u != NULL) {
v->next = u;
InitializeDisasterVehicle(u,x,y,0,3,5);
InitializeDisasterVehicle(u,x,y,0,3,5);
u->vehstatus |= VS_DISASTER;
}
}
static void Disaster3_Init()
static void Disaster3_Init()
{
Industry *i, *found;
Vehicle *v,*u,*w;
@ -784,7 +784,7 @@ static void Disaster3_Init()
for(found=NULL,i=_industries; i != endof(_industries); i++) {
if (i->xy != 0 &&
i->type == IT_FACTORY &&
i->type == IT_FACTORY &&
(found==NULL || CHANCE16(1,2))) {
found = i;
}
@ -805,18 +805,18 @@ static void Disaster3_Init()
u = ForceAllocateSpecialVehicle();
if (u != NULL) {
v->next = u;
InitializeDisasterVehicle(u,x,y,0,5,7);
InitializeDisasterVehicle(u,x,y,0,5,7);
u->vehstatus |= VS_DISASTER;
w = ForceAllocateSpecialVehicle();
if (w != NULL) {
u->next = w;
InitializeDisasterVehicle(w,x,y,140,5,8);
InitializeDisasterVehicle(w,x,y,140,5,8);
}
}
}
static void Disaster4_Init()
static void Disaster4_Init()
{
Vehicle *v = ForceAllocateSpecialVehicle(), *u;
int x,y;
@ -835,13 +835,13 @@ static void Disaster4_Init()
u = ForceAllocateSpecialVehicle();
if (u != NULL) {
v->next = u;
InitializeDisasterVehicle(u,x,y,0,7,10);
InitializeDisasterVehicle(u,x,y,0,7,10);
u->vehstatus |= VS_DISASTER;
}
}
// Submarine type 1
static void Disaster5_Init()
static void Disaster5_Init()
{
Vehicle *v = ForceAllocateSpecialVehicle();
int x,y;
@ -862,7 +862,7 @@ static void Disaster5_Init()
}
// Submarine type 2
static void Disaster6_Init()
static void Disaster6_Init()
{
Vehicle *v = ForceAllocateSpecialVehicle();
int x,y;
@ -882,20 +882,20 @@ static void Disaster6_Init()
v->age = 0;
}
static void Disaster7_Init()
static void Disaster7_Init()
{
Industry *i;
int maxloop = 15;
int index = Random() & 0xF;
do {
for(i=_industries; i != endof(_industries); i++) {
if (i->xy != 0 && i->type == IT_COAL_MINE && --index < 0) {
SET_DPARAM16(0, i->town->index);
AddNewsItem(STR_B005_COAL_MINE_SUBSIDENCE_LEAVES,
AddNewsItem(STR_B005_COAL_MINE_SUBSIDENCE_LEAVES,
NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy + TILE_XY(1,1), 0);
{
uint tile = i->xy;
int step = _tileoffs_by_dir[Random() & 3];

View File

@ -129,7 +129,7 @@ static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
case WE_PLACE_OBJ:
_place_proc(e->place.tile);
break;
break;
case WE_PLACE_DRAG: {
VpSelectTilesWithMethod(e->place.pt.x, e->place.pt.y, e->place.userdata);
@ -155,7 +155,7 @@ static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
w = FindWindowById(WC_BUILD_DEPOT, 0);
if (w != NULL) WP(w,def_d).close=true;
break;
case WE_PLACE_PRESIZE: {
uint tile_from, tile_to;
@ -225,7 +225,7 @@ static void BuildDockStationWndProc(Window *w, WindowEvent *e)
CheckRedrawStationCoverage(w);
break;
}
}
}
}
static const Widget _build_dock_station_widgets[] = {

View File

@ -44,11 +44,11 @@ void UpdatePlayerHouse(Player *p, uint score)
uint32 CalculateCompanyValue(Player *p) {
byte owner = p->index;
uint32 value;
{
Station *st;
uint num = 0;
FOR_ALL_STATIONS(st) {
if (st->xy != 0 && st->owner == owner) {
uint facil = st->facilities;
@ -194,7 +194,7 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
{
_score_part[owner][SCORE_LOAN] = score_info[SCORE_LOAN].needed - p->current_loan;
}
// Now we calculate the score for each item..
{
int i;
@ -210,9 +210,9 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
score += s;
total_score += score_info[i].score;
}
_score_part[owner][SCORE_TOTAL] = score;
// We always want the score scaled to SCORE_MAX (1000)
if (total_score != SCORE_MAX)
score = score * SCORE_MAX / total_score;
@ -223,7 +223,7 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
UpdatePlayerHouse(p, score);
p->old_economy[0].company_value = CalculateCompanyValue(p);
}
InvalidateWindow(WC_PERFORMANCE_DETAIL, 0);
return score;
}
@ -236,7 +236,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
if (new_player == 255) {
Subsidy *s;
for(s=_subsidies; s != endof(_subsidies); s++) {
if (s->cargo_type != 0xff && s->age >= 12) {
Station *st = DEREF_STATION(s->to);
@ -249,7 +249,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
// take care of rating in towns
{
Town *t;
// if a player takes over, give the ratings to that player.
if (new_player != 255) {
FOR_ALL_TOWNS(t) if (t->xy && HASBIT(t->have_ratings, old_player)) {
@ -269,7 +269,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
CLRBIT(t->have_ratings, old_player);
}
}
{
int num_train = 0;
int num_road = 0;
@ -353,7 +353,7 @@ static void PlayersCheckBankrupt(Player *p)
if (p->quarters_of_bankrupcy == 2) {
year_2:
AddNewsItem( (StringID)(owner + 16),
AddNewsItem( (StringID)(owner + 16),
NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
} else if (p->quarters_of_bankrupcy == 3) {
@ -396,7 +396,7 @@ void DrawNewsBankrupcy(Window *w)
{
Player *p;
DrawNewsBorder(w);
DrawNewsBorder(w);
p = DEREF_PLAYER(WP(w,news_d).ni->string_id & 15);
DrawPlayerFace(p->face, p->player_color, 2, 23);
@ -446,7 +446,7 @@ void DrawNewsBankrupcy(Window *w)
90,
STR_705D_HAS_BEEN_CLOSED_DOWN_BY,
w->width - 101);
break;
break;
case 4:
DrawStringCentered(w->width>>1, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, 0);
@ -499,7 +499,7 @@ StringID GetNewsStringBankrupcy(NewsItem *ni)
default:
NOT_REACHED();
}
/* useless, but avoids compiler warning this way */
return 0;
}
@ -563,13 +563,13 @@ static void AddInflation()
}
_economy.max_loan_unround += BIGMULUS(_economy.max_loan_unround, inf, 16);
if (_economy.max_loan + 50000 <= _economy.max_loan_unround)
_economy.max_loan += 50000;
inf = _economy.infl_amount_pr * 54;
for(i=0; i!=NUM_CARGO; i++) {
AddSingleInflation(
AddSingleInflation(
_cargo_payment_rates + i,
_cargo_payment_rates_frac + i,
inf
@ -592,7 +592,7 @@ static void PlayersPayInterest()
_current_player = p->index;
SET_EXPENSES_TYPE(EXPENSES_LOAN_INT);
SubtractMoneyFromPlayer(BIGMULUS(p->current_loan, interest, 16));
SET_EXPENSES_TYPE(EXPENSES_OTHER);
@ -767,28 +767,28 @@ Pair SetupSubsidyDecodeParam(Subsidy *s, bool mode)
void DeleteSubsidyWithIndustry(byte index)
{
Subsidy *s;
for(s=_subsidies; s != endof(_subsidies); s++) {
if (s->cargo_type != 0xFF && s->age < 12 &&
s->cargo_type != CT_PASSENGERS && s->cargo_type != CT_MAIL &&
(index == s->from || (s->cargo_type!=CT_GOODS && s->cargo_type!=CT_FOOD && index==s->to))) {
s->cargo_type = 0xFF;
}
}
}
}
void DeleteSubsidyWithStation(byte index)
void DeleteSubsidyWithStation(byte index)
{
Subsidy *s;
bool dirty = false;
for(s=_subsidies; s != endof(_subsidies); s++) {
if (s->cargo_type != 0xFF && s->age >= 12 &&
(s->from == index || s->to == index)) {
s->cargo_type = 0xFF;
dirty = true;
}
}
}
if (dirty)
InvalidateWindow(WC_SUBSIDIES_LIST, 0);
@ -852,7 +852,7 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
if (cargo == CT_GOODS || cargo == CT_FOOD) {
// The destination is a town
Town *t = DEREF_TOWN(RandomRange(_total_towns));
// Only want big towns
if (t->xy == 0 || t->population < 900)
return;
@ -861,9 +861,9 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
} else {
// The destination is an industry
Industry *i2 = DEREF_INDUSTRY(RandomRange(_total_industries));
// The industry must accept the cargo
if (i == i2 || i2->xy == 0 ||
if (i == i2 || i2->xy == 0 ||
(cargo != i2->accepts_cargo[0] &&
cargo != i2->accepts_cargo[1] &&
cargo != i2->accepts_cargo[2]))
@ -873,15 +873,15 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
}
}
static bool CheckSubsidyDuplicate(Subsidy *s)
static bool CheckSubsidyDuplicate(Subsidy *s)
{
Subsidy *ss;
for(ss=_subsidies; ss != endof(_subsidies); ss++) {
if (s != ss &&
// ss->age < 12 &&
ss->from == s->from &&
ss->to == s->to &&
if (s != ss &&
// ss->age < 12 &&
ss->from == s->from &&
ss->to == s->to &&
ss->cargo_type == s->cargo_type) {
s->cargo_type = 0xFF;
return true;
@ -929,7 +929,7 @@ static void SubsidyMonthlyHandler()
if (++s == endof(_subsidies))
goto no_add;
}
n = 1000;
do {
FindSubsidyPassengerRoute(&fr);
@ -1002,7 +1002,7 @@ int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, b
if (transit_days > _cargoc.transit_days_1[cargo]) {
transit_days -= _cargoc.transit_days_1[cargo];
f -= transit_days;
if (transit_days > _cargoc.transit_days_2[cargo]) {
transit_days -= _cargoc.transit_days_2[cargo];
@ -1019,7 +1019,7 @@ int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, b
static void DeliverGoodsToIndustry(TileIndex xy, byte cargo_type, int num_pieces)
{
Industry *ind, *best;
Industry *ind, *best;
int t, u;
/* Check if there's an industry close to the station that accepts
@ -1031,7 +1031,7 @@ static void DeliverGoodsToIndustry(TileIndex xy, byte cargo_type, int num_pieces
== ind->accepts_cargo[1] || cargo_type == ind->accepts_cargo[2]) &&
ind->produced_cargo[0] != 0xFF &&
ind->produced_cargo[0] != cargo_type &&
(t=GetTileDist(ind->xy, xy)) < u) {
(t=GetTileDist(ind->xy, xy)) < u) {
u = t;
best = ind;
}
@ -1063,7 +1063,7 @@ static bool CheckSubsidised(Station *from, Station *to, byte cargo_type)
/* check if there's a new subsidy that applies.. */
for(s=_subsidies; s != endof(_subsidies); s++) {
if (s->cargo_type == cargo_type && s->age < 12) {
/* Check distance from source */
if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL) {
xy = DEREF_TOWN(s->from)->xy;
@ -1072,7 +1072,7 @@ static bool CheckSubsidised(Station *from, Station *to, byte cargo_type)
}
if (GetTileDist1D(xy, from->xy) > 9)
continue;
/* Check distance from dest */
if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL || cargo_type == CT_GOODS || cargo_type == CT_FOOD) {
xy = DEREF_TOWN(s->to)->xy;
@ -1096,7 +1096,7 @@ static bool CheckSubsidised(Station *from, Station *to, byte cargo_type)
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
AddNewsItem(
STR_2031_SERVICE_SUBSIDY_AWARDED + _opt.diff.subsidy_multiplier,
STR_2031_SERVICE_SUBSIDY_AWARDED + _opt.diff.subsidy_multiplier,
NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0),
pair.a, pair.b);
@ -1138,7 +1138,7 @@ static int32 DeliverGoods(int num_pieces, byte cargo_type, byte source, byte des
// Give the goods to the industry.
DeliverGoodsToIndustry(s_to->xy, cargo_type, num_pieces);
// Determine profit
{
int t = GetTileDist(s_from->xy, s_to->xy);
@ -1197,7 +1197,7 @@ int LoadUnloadVehicle(Vehicle *v)
for(;;) {
if (v->cargo_cap == 0)
goto next_vehicle;
ge = &st->goods[v->cargo_type];
/* unload? */
@ -1211,7 +1211,7 @@ int LoadUnloadVehicle(Vehicle *v)
} else if (u->next_order & OF_UNLOAD) {
/* unload goods and let it wait at the station */
st->time_since_unload = 0;
if ((t=ge->waiting_acceptance & 0xFFF) == 0) {
// No goods waiting at station
ge->enroute_time = v->cargo_days;
@ -1229,7 +1229,7 @@ int LoadUnloadVehicle(Vehicle *v)
v->cargo_count = 0;
}
}
/* don't pick up goods that we unloaded */
if (u->next_order & OF_UNLOAD)
goto next_vehicle;
@ -1238,7 +1238,7 @@ int LoadUnloadVehicle(Vehicle *v)
ge->days_since_pickup = 0;
t = u->max_speed;
if (u->type == VEH_Road) t >>=1;
// if last speed is 0, we treat that as if no vehicle has ever visited the station.
ge->last_speed = t < 255 ? t : 255;
ge->last_age = _cur_year - v->build_year;
@ -1252,7 +1252,7 @@ int LoadUnloadVehicle(Vehicle *v)
ge->waiting_acceptance -= cap;
unloading_time += cap;
st->time_since_load = 0;
// And record the source of the cargo, and the days in travel.
v->cargo_source = ge->enroute_from;
v->cargo_days = ge->enroute_time;

View File

@ -36,7 +36,7 @@ enum {
SCORE_TOTAL = 9, // This must always be the last entry
NUM_SCORE = 10, // How many scores are there..
SCORE_MAX = 1000, // The max score that can be in the performance history
// the scores together of score_info is allowed to be more!
};

View File

@ -124,7 +124,7 @@ void StartupEngines()
e->railtype = ei->railtype_climates >> 4;
e->flags = 0;
e->player_avail = 0;
r = Random();
e->intro_date = (uint16)((r & 0x1FF) + ei->base_intro);
if (e->intro_date <= _date) {
@ -191,7 +191,7 @@ void SetWagonOverrideSprites(byte engine, struct SpriteSuperSet *superset,
wos->overrides_count++;
wos->overrides = realloc(wos->overrides,
wos->overrides_count * sizeof(struct WagonOverride));
wo = &wos->overrides[wos->overrides_count - 1];
wo->superset = *superset;
wo->trains = trains;
@ -246,7 +246,7 @@ int GetCustomEngineSprite(byte engine, uint16 overriding_engine, byte cargo,
overset = GetWagonOverrideSpriteSet(engine, overriding_engine);
if (overset) superset = overset;
}
if (!superset->sprites_per_set && cargo != 29) {
// This superset is empty but perhaps there'll be a default one.
superset = &_engine_custom_sprites[engine][29];
@ -307,7 +307,7 @@ void AcceptEnginePreview(Engine *e, int player)
SETBIT(e->player_avail, player);
p = DEREF_PLAYER(player);
UPDATE_PLAYER_RAILTYPE(e,p);
e->preview_player = 0xFF;
@ -333,7 +333,7 @@ void EnginesDailyLoop()
e->flags &= ~ENGINE_PREVIEWING;
DeleteWindowById(WC_ENGINE_PREVIEW, i);
e->preview_player++;
}
}
} else if (e->preview_player != 0xFF) {
num = e->preview_player;
mask = 0;
@ -341,7 +341,7 @@ void EnginesDailyLoop()
best_hist = -1;
best_player = -1;
FOR_ALL_PLAYERS(p) {
if (p->is_active && p->block_preview == 0 && !HASBIT(mask,p->index) &&
if (p->is_active && p->block_preview == 0 && !HASBIT(mask,p->index) &&
p->old_economy[0].performance_history > best_hist) {
best_hist = p->old_economy[0].performance_history;
best_player = p->index;
@ -353,7 +353,7 @@ void EnginesDailyLoop()
}
mask |= (1 << best_player);
} while (--num != 0);
if (!IS_HUMAN_PLAYER(best_player)) {
/* TTDBUG: TTD has a bug here */
AcceptEnginePreview(e, best_player);
@ -361,7 +361,7 @@ void EnginesDailyLoop()
e->flags |= ENGINE_PREVIEWING;
e->preview_wait = 20;
if (IS_INTERACTIVE_PLAYER(best_player)) {
ShowEnginePreviewWindow(i);
ShowEnginePreviewWindow(i);
}
}
}
@ -390,7 +390,7 @@ void NewVehicleAvailable(Engine *e)
FOR_ALL_PLAYERS(p) {
if (!HASBIT(e->player_avail,p->index))
continue;
for(v=_vehicles;;) {
if (v->type == VEH_Train || v->type == VEH_Road || v->type == VEH_Ship ||
(v->type == VEH_Aircraft && v->subtype <= 2)) {
@ -466,7 +466,7 @@ int32 CmdRenameEngine(int x, int y, uint32 flags, uint32 p1, uint32 p2)
str = AllocateName((byte*)_decode_parameters, 0);
if (str == 0)
return CMD_ERROR;
if (flags & DC_EXEC) {
StringID old_str = _engine_name_strings[p1];
_engine_name_strings[p1] = str;

View File

@ -88,7 +88,7 @@ static void EnginePreviewWndProc(Window *w, WindowEvent *e)
case WE_CLICK:
switch(e->click.widget) {
case 3: DeleteWindow(w); break;
case 4:
case 4:
DoCommandP(0, w->window_number, 0, NULL, CMD_WANT_ENGINE_PREVIEW);
DeleteWindow(w);
break;
@ -150,7 +150,7 @@ void DrawNewsNewAircraftAvail(Window *w)
DrawNewsBorder(w);
engine = WP(w,news_d).ni->string_id;
DrawStringMultiCenter(w->width >> 1, 20, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE, w->width - 2);
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
@ -203,7 +203,7 @@ void DrawNewsNewShipAvail(Window *w)
DrawNewsBorder(w);
engine = WP(w,news_d).ni->string_id;
DrawStringMultiCenter(w->width >> 1, 20, STR_982C_NEW_SHIP_NOW_AVAILABLE, w->width - 2);
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);

View File

@ -101,7 +101,7 @@ void FioOpenFile(int slot, const char *filename)
char buf[MAX_PATH];
sprintf(buf, "%s%s", _path.data_dir, filename);
f = fopen(buf, "rb");
#if !defined(WIN32)
if (f == NULL) {
@ -115,7 +115,7 @@ void FioOpenFile(int slot, const char *filename)
if (f == NULL)
error("Cannot open file '%s'", buf);
_fio.handles[slot] = f;
FioSeekToFile(slot << 24);
}

18
gfx.c
View File

@ -242,17 +242,17 @@ void GfxDrawLine(int x, int y, int x2, int y2, int color)
// 0 - end of string
// 1 - SETX <BYTE>
// 2 - SETXY <BYTE> <BYTE>
// 3-7 -
// 3-7 -
// 8 - TINYFONT
// 9 - BIGFONT
// 10 - newline
// 11-14 -
// 11-14 -
// 15-31 - 17 colors
enum {
ASCII_LETTERSTART = 32,
ASCII_SETX = 1,
ASCII_SETXY = 2,
@ -510,7 +510,7 @@ check_bounds:
skip_char:;
for(;;) {
c = *string++;
if (c < ASCII_LETTERSTART) goto skip_cont;
if (c < ASCII_LETTERSTART) goto skip_cont;
}
}
@ -586,7 +586,7 @@ static void GfxBlitTileZoomIn(BlitterParams *bp)
if (bp->mode & 1) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
do {
do {
done = src_o[0];
@ -1351,7 +1351,7 @@ static void GfxMainBlitter(byte *sprite, int x, int y, int mode)
if (dpi->zoom > 0) {
start_y += bp.height &~ zoom_mask;
bp.height &= zoom_mask;
bp.height &= zoom_mask;
if (bp.height == 0) return;
y&=zoom_mask;
}
@ -1622,7 +1622,7 @@ void UndrawMouseCursor()
_screen.dst_ptr + _cursor.draw_pos.x + _cursor.draw_pos.y * _screen.pitch,
_cursor_backup,
_cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x, _screen.pitch);
_video_driver->make_dirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
}
}
@ -1920,9 +1920,9 @@ void SetAnimatedMouseCursor(const uint16 *table)
}
bool ChangeResInGame(int w, int h)
{
{
if ((_screen.width != w || _screen.height != h) && !_video_driver->change_resolution(w, h))
return false;
return false;
_cur_resolution[0] = w;
_cur_resolution[1] = h;

6
gfx.h
View File

@ -13,7 +13,7 @@ struct DrawPixelInfo {
byte *dst_ptr;
int left, top, width, height;
int pitch;
uint16 zoom;
uint16 zoom;
};
@ -47,8 +47,8 @@ int DrawString(int x, int y, uint16 str, byte color);
void DrawStringCenterUnderline(int x, int y, uint16 str, byte color);
int DoDrawString(const byte *string, int x, int y, byte color);
void DrawStringRightAligned(int x, int y, uint16 str, byte color);
void GfxFillRect(int left, int top, int right, int bottom, int color);
void GfxDrawLine(int left, int top, int right, int bottom, int color);
void GfxFillRect(int left, int top, int right, int bottom, int color);
void GfxDrawLine(int left, int top, int right, int bottom, int color);
void DrawFrameRect(int left, int top, int right, int bottom, int color, int flags);
int GetStringWidth(const byte *str);

View File

@ -33,7 +33,7 @@ typedef struct GraphDrawer {
void DrawGraph(GraphDrawer *gw)
{
int i,j,k;
int x,y,old_x,old_y;
int color;
@ -57,7 +57,7 @@ void DrawGraph(GraphDrawer *gw)
GfxFillRect(x, gw->top, x, bottom, color);
x += 22;
} while (--i);
/* draw the horizontal lines */
i = 9;
x = gw->left + 44;
@ -95,7 +95,7 @@ void DrawGraph(GraphDrawer *gw)
}
} while (col_ptr++, --num_x);
} while (row_ptr+=24, --num_dataset);
/* setup scaling */
y_scaling = 0x80000000;
value = adj_height * 2;
@ -271,10 +271,10 @@ static void SetupGraphDrawerForPlayers(GraphDrawer *gd)
int nums;
int mo,yr;
// Exclude the players which aren't valid
// Exclude the players which aren't valid
FOR_ALL_PLAYERS(p) {
if (!p->is_active) CLRBIT(showbits,p->index);
}
}
gd->sel = showbits;
gd->num_vert_lines = 24;
@ -305,7 +305,7 @@ static void OperatingProfitWndProc(Window *w, WindowEvent *e)
int numd;
DrawWindowWidgets(w);
gd.left = 2;
gd.top = 18;
gd.height = 136;
@ -314,7 +314,7 @@ static void OperatingProfitWndProc(Window *w, WindowEvent *e)
gd.color_3 = 0x10;
gd.color_2 = 0xD7;
gd.bg_line_color = 0xE;
SetupGraphDrawerForPlayers(&gd);
numd = 0;
@ -528,13 +528,13 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
uint16 y=14;
int total_score = 0;
int color_done, color_notdone;
// Draw standard stuff
DrawWindowWidgets(w);
// The player of which we check the detail performance rating
owner = FindFirstBit(w->click_state) - 13;
// Paint the player icons
for (i=0;i<MAX_PLAYERS;i++) {
if (!DEREF_PLAYER(i)->is_active) {
@ -550,7 +550,7 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
}
continue;
}
// Check if we have the player marked as inactive
if ((w->disabled_state & (1 << (i+13)))) {
// New player! Yippie :p
@ -558,11 +558,11 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
// We need a repaint
SetWindowDirty(w);
}
if (i == owner) x = 1; else x = 0;
DrawPlayerIcon(i, i*33+11+x, 16+x);
}
// The colors used to show how the progress is going
color_done = _color_list[6].window_color_1b;
color_notdone = _color_list[4].window_color_1b;
@ -579,44 +579,44 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
score = SCORE_MAX;
} else
total_score += score;
DrawString(7, y, STR_PERFORMANCE_DETAIL_VEHICLES + i, 0);
// Draw the score
SET_DPARAM32(0, score);
DrawStringRightAligned(107, y, SET_PERFORMANCE_DETAIL_INT, 0);
// Calculate the %-bar
if (val > needed) x = 50;
else if (val == 0) x = 0;
else x = ((val * 50) / needed);
// SCORE_LOAN is inversed
if (val < 0 && i == SCORE_LOAN)
x = 0;
// Draw the bar
if (x != 0)
GfxFillRect(112, y-2, x + 112, y+10, color_done);
if (x != 50)
GfxFillRect(x + 112, y-2, 50 + 112, y+10, color_notdone);
// Calculate the %
if (val > needed) x = 100;
else x = ((val * 100) / needed);
// SCORE_LOAN is inversed
if (val < 0 && i == SCORE_LOAN)
x = 0;
// Draw it
SET_DPARAM32(0, x);
DrawStringCentered(137, y, STR_PERFORMANCE_DETAIL_PERCENT, 0);
// SCORE_LOAN is inversed
if (i == SCORE_LOAN)
val = needed - val;
// Draw the amount we have against what is needed
// For some of them it is in currency format
SET_DPARAM32(0, val);
@ -666,12 +666,12 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
FOR_ALL_PLAYERS(p2)
if (p2->is_active)
UpdateCompanyRatingAndValue(p2, false);
w->custom[0] = DAY_TICKS;
w->custom[1] = 5;
w->click_state = 1 << 13;
SetWindowDirty(w);
}
break;
@ -927,7 +927,7 @@ static void CargoPaymentRatesWndProc(Window *w, WindowEvent *e)
gd.month = 0xFF;
gd.unk61A = 10;
gd.unk61C = 10;
for(i=0; i!=NUM_CARGO; i++) {
gd.colors[i] = _cargo_legend_colors[i];
for(j=0; j!=20; j++) {
@ -1031,14 +1031,14 @@ static void CompanyLeagueWndProc(Window *w, WindowEvent *e)
size_t pl_num, i;
DrawWindowWidgets(w);
pl_num=0;
FOR_ALL_PLAYERS(p) {
if (p->is_active)
plist[pl_num++] = p;
}
assert(pl_num > 0);
qsort(plist, pl_num, sizeof(Player*), _perf_hist_comp);
i = 0;
@ -1047,12 +1047,12 @@ static void CompanyLeagueWndProc(Window *w, WindowEvent *e)
p = plist[i];
SET_DPARAM16(1, p->name_1);
SET_DPARAM32(2, p->name_2);
SET_DPARAM16(3, GetPlayerNameString(p->index, 4));
/* WARNING ugly hack!
GetPlayerNameString sets up (Player #) if the player is human in an extra DPARAM16
It seems that if player is non-human, nothing is set up, so param is 0. GetString doesn't like
that because there is another param after it.
that because there is another param after it.
So we'll just shift the rating one back if player is AI and all is fine
*/
SET_DPARAM16((IS_HUMAN_PLAYER(p->index) ? 5 : 4), GetPerformanceTitleFromValue(p->old_economy[1].performance_history));

View File

@ -465,20 +465,20 @@ static void VehicleChangeInfo(byte *buf, int len)
uint8 prop = grf_load_byte(&buf);
switch (prop) {
case 0x00: {
case 0x00: {
/* Introduction date */
foreach_engine {
uint16 date = grf_load_word(&buf);
ei[i].base_intro = date;
}
break;
}
case 0x02: {
case 0x02: {
/* Decay speed */
foreach_engine {
uint8 decay = grf_load_byte(&buf);
ei[i].unk2 &= 0x80;
ei[i].unk2 |= decay & 0x7f;
}
@ -493,7 +493,7 @@ static void VehicleChangeInfo(byte *buf, int len)
}
break;
}
case 0x04: {
case 0x04: {
/* Model life */
foreach_engine {
uint8 life = grf_load_byte(&buf);
@ -512,7 +512,7 @@ static void VehicleChangeInfo(byte *buf, int len)
}
break;
}
case 0x07: {
case 0x07: {
/* Loading speed */
/* Hyronymus explained me what does
* this mean and insists on having a
@ -636,7 +636,7 @@ static void SpriteNewSuperset(byte *buf, int len)
uint8 nvar = buf[7];
//uint32 val;
uint16 def;
grfmsg(GMS_WARN, "SpriteNewSuperset(0x81): Unsupported variable %x. Using default cid.", var);
//val = (0xff << shiftnum) & andmask;

2
hal.h
View File

@ -65,7 +65,7 @@ extern const HalVideoDriver _sdl_video_driver;
#if defined(UNIX)
extern const HalMusicDriver _extmidi_music_driver;
#endif
#endif
#if defined(__BEOS__)
extern const HalMusicDriver _bemidi_music_driver;

View File

@ -42,7 +42,7 @@ static void BuildIndustryWndProc(Window *w, WindowEvent *e)
if (DoCommandP(e->place.tile, _build_industry_types[_opt.landscape][WP(w,def_d).data_1], 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY)))
ResetObjectToPlace();
break;
case WE_ABORT_PLACE_OBJ:
w->click_state = 0;
SetWindowDirty(w);
@ -259,7 +259,7 @@ static const WindowDesc * const _industry_window_desc[2][4] = {
};
void ShowBuildIndustryWindow()
{
{
AllocateWindowDescFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt.landscape],0);
}
@ -291,20 +291,20 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e)
}
DrawString(2, 107, str, 0);
}
if (i->produced_cargo[0] != 0xFF) {
DrawString(2, 117, STR_482A_PRODUCTION_LAST_MONTH, 0);
SET_DPARAM16(1, i->total_production[0]);
SET_DPARAM16(0, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
SET_DPARAM16(0, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
SET_DPARAM16(2, i->pct_transported[0] * 100 >> 8);
DrawString(4, 127, STR_482B_TRANSPORTED, 0);
if (i->produced_cargo[1] != 0xFF) {
SET_DPARAM16(1, i->total_production[1]);
SET_DPARAM16(0, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
SET_DPARAM16(0, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
SET_DPARAM16(2, i->pct_transported[1] * 100 >> 8);
DrawString(4, 137, STR_482B_TRANSPORTED, 0);
DrawString(4, 137, STR_482B_TRANSPORTED, 0);
}
}
@ -323,7 +323,7 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e)
/* passing only i->xy is not safe if industry has a weird shape like:
_ X X
X X X
_ <--- grass, no industry, but i->xy points there (first top-left tile)!,
_ <--- grass, no industry, but i->xy points there (first top-left tile)!,
so passing i->xy to destroy industry will fail in called procedure
*/
//DoCommandP(i->xy, w->window_number, 0, CcPlaySound10, CMD_DESTROY_INDUSTRY | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA));
@ -399,7 +399,7 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
switch (_industry_sort_order >> 1) {
/* case 0: Sort by Name (handled later) */
case 1: /* Sort by Type */
r = i->type - j->type;
r = i->type - j->type;
break;
// FIXME - Production & Transported sort need to be inversed...but, WTF it does not wanna!
// FIXME - And no simple --> "if (!(_industry_sort_order & 1)) r = -r;" hack at the bottom!!
@ -407,7 +407,7 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
if (i->produced_cargo[0] != 0xFF && j->produced_cargo[0] != 0xFF) { // both industries produce cargo?
if (i->produced_cargo[1] == 0xFF) // producing one or two things?
r = j->total_production[0] - i->total_production[0];
else
else
r = (j->total_production[0] + j->total_production[1]) / 2 - (i->total_production[0] + i->total_production[1]) / 2;
} else if (i->produced_cargo[0] == 0xFF && j->produced_cargo[0] == 0xFF) // none of them producing anything, let them go to the name-sorting
r = 0;
@ -421,7 +421,7 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
if (i->produced_cargo[0] != 0xFF && j->produced_cargo[0] != 0xFF) { // both industries produce cargo?
if (i->produced_cargo[1] == 0xFF) // producing one or two things?
r = (j->pct_transported[0] * 100 >> 8) - (i->pct_transported[0] * 100 >> 8);
else
else
r = ((j->pct_transported[0] * 100 >> 8) + (j->pct_transported[1] * 100 >> 8)) / 2 - ((i->pct_transported[0] * 100 >> 8) + (i->pct_transported[1] * 100 >> 8)) / 2;
} else if (i->produced_cargo[0] == 0xFF && j->produced_cargo[0] == 0xFF) // none of them producing anything, let them go to the name-sorting
r = 0;
@ -444,8 +444,8 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
}
r = strcmp(buf1, _bufcache);
}
if (_industry_sort_order & 1) r = -r;
if (_industry_sort_order & 1) r = -r;
return r;
}
@ -496,7 +496,7 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
if (i->produced_cargo[0] != 0xFF) {
SET_DPARAM16(3, i->total_production[0] * 100 >> 8);
SET_DPARAM16(2, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
if (i->produced_cargo[1] != 0xFF) {
SET_DPARAM16(5, i->total_production[1] * 100 >> 8);
SET_DPARAM16(4, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
@ -541,7 +541,7 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
_industry_sort_dirty = true;
SetWindowDirty(w);
} break;
case 7: {
int y = (e->click.pt.y - 28) / 10;
byte p;
@ -561,7 +561,7 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
case WE_4:
SetWindowDirty(w);
break;
}
}
}

View File

@ -54,7 +54,7 @@ static void SelectGameWndProc(Window *w, WindowEvent *e) {
case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
case 4: ShowPatchesSelection(); break;
case 5: DoCommandP(0, InteractiveRandom(), 0, NULL, CMD_CREATE_SCENARIO); break;
case 6:
case 6:
if (_networking)
DoCommandP(0, 0, 0, NULL, CMD_SET_SINGLE_PLAYER);
break;
@ -113,7 +113,7 @@ int32 CmdStartNewGame(int x, int y, uint32 flags, uint32 p1, uint32 p2)
DeleteWindowById(WC_SAVELOAD, 0);
break;
}
return 0;
}
@ -216,7 +216,7 @@ static void AskAbandonGameWndProc(Window *w, WindowEvent *e) {
case WE_KEYPRESS: /* Exit game on pressing 'Enter' */
if (e->keypress.keycode == WKC_RETURN)
_exit_game = true;
break;
break;
}
}
@ -247,9 +247,9 @@ static void AskQuitGameWndProc(Window *w, WindowEvent *e) {
switch(e->event) {
case WE_PAINT:
DrawWindowWidgets(w);
DrawStringMultiCenter(0x5A, 0x26,
_game_mode != GM_EDITOR ? STR_0160_ARE_YOU_SURE_YOU_WANT_TO :
STR_029B_ARE_YOU_SURE_YOU_WANT_TO,
DrawStringMultiCenter(0x5A, 0x26,
_game_mode != GM_EDITOR ? STR_0160_ARE_YOU_SURE_YOU_WANT_TO :
STR_029B_ARE_YOU_SURE_YOU_WANT_TO,
178);
return;

View File

@ -3,7 +3,7 @@
#define MAX_INT 0x7FFFFFFF
#ifdef min
#ifdef min
#undef min
#endif
@ -35,7 +35,7 @@ static INLINE bool str_eq(const byte *a, const byte *b)
}
// Will crash if strings are equal
static INLINE bool str_is_below(byte *a, byte *b) {
static INLINE bool str_is_below(byte *a, byte *b) {
while (*a <= *b) {
if (*a < *b) return true;
a++;
@ -152,7 +152,7 @@ static INLINE int FindFirstBit2x64(int value)
#if TILE_X_BITS + TILE_Y_BITS <= 16
typedef uint16 TileIndex;
typedef uint16 TileIndex;
typedef int16 TileIndexDiff;
#else
typedef uint32 TileIndex;
@ -210,7 +210,7 @@ static INLINE void swap_tile(TileIndex *a, TileIndex *b) { TileIndex t = *a; *a
static INLINE uint16 READ_LE_UINT16(const void *b) {
return ((byte*)b)[0] + (((byte*)b)[1] << 8);
}
# define ADD_WORD(x) ((x) >> 8)&0xFF, (x)&0xFF
# define ADD_WORD(x) ((x) >> 8)&0xFF, (x)&0xFF
# define ADD_DWORD(x) ((x) >> 24)&0xFF, ((x) >> 16)&0xFF, ((x) >> 8)&0xFF, (x)&0xFF
#endif

View File

@ -36,7 +36,7 @@ static void HandleOnEditText(WindowEvent *e) {
memcpy(_decode_parameters, b, 32);
id = _rename_id;
switch(_rename_what) {
case 0:
// for empty string send "remove sign" parameter
@ -188,7 +188,7 @@ void MenuClickCompany(int index)
{
ShowPlayerCompany(index);
}
void MenuClickGraphs(int index)
{
@ -403,11 +403,11 @@ static void MenuWndProc(Window *w, WindowEvent *e)
SetWindowDirty(v);
return;
}
case WE_POPUPMENU_SELECT: {
int index = GetMenuItemIndex(w, e->popupmenu.pt.x, e->popupmenu.pt.y);
int action_id;
if (index < 0) {
Window *w2 = FindWindowById(WC_MAIN_TOOLBAR,0);
@ -417,10 +417,10 @@ static void MenuWndProc(Window *w, WindowEvent *e)
action_id = WP(w,menu_d).action_id;
DeleteWindow(w);
if (index >= 0)
_menu_clicked_procs[action_id](index);
break;
}
case WE_POPUPMENU_OVER: {
@ -458,7 +458,7 @@ static int GetPlayerIndexFromMenu(int index)
if (--index < 0)
return p->index;
}
}
}
}
return -1;
}
@ -472,7 +472,7 @@ static void UpdatePlayerMenuHeight(Window *w)
if (p->is_active)
num++;
}
if (WP(w,menu_d).item_count != num) {
WP(w,menu_d).item_count = num;
SetWindowDirty(w);
@ -499,25 +499,25 @@ static void PlayerMenuWndProc(Window *w, WindowEvent *e)
y = 1;
sel = WP(w,menu_d).sel_index;
chk = WP(w,menu_d).checked_items; // let this mean gray items.
FOR_ALL_PLAYERS(p) {
if (p->is_active) {
if (p->index == sel) {
GfxFillRect(x, y, x + 0xEE, y + 9, 0);
}
DrawSprite( ((p->player_color + 0x307)<<16)+0x82EB, x+2, y+1);
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
SET_DPARAM16(2, GetPlayerNameString(p->index, 3));
color = (byte)((p->index==sel) ? 0xC : 0x10);
if (chk&1) color = 14;
DrawString(x+0x13, y, STR_7021, color);
y += 10;
}
chk >>= 1;
}
chk >>= 1;
}
break;
}
@ -528,7 +528,7 @@ static void PlayerMenuWndProc(Window *w, WindowEvent *e)
SetWindowDirty(v);
return;
}
case WE_POPUPMENU_SELECT: {
int index = GetPlayerIndexFromMenu(GetMenuItemIndex(w, e->popupmenu.pt.x, e->popupmenu.pt.y));
int action_id = WP(w,menu_d).action_id;
@ -540,7 +540,7 @@ static void PlayerMenuWndProc(Window *w, WindowEvent *e)
}
DeleteWindow(w);
if (index >= 0) {
assert(index >= 0 && index < 30);
_menu_clicked_procs[action_id](index);
@ -576,7 +576,7 @@ static Window *PopupMainToolbMenu(Window *w, int x, int main_button, StringID ba
_menu_widgets[0].bottom = h = item_count * 10 + 1;
w = AllocateWindow(x, 0x16, 0xA0, h+1, MenuWndProc, WC_TOOLBAR_MENU, _menu_widgets);
w->flags4 &= ~WF_WHITE_BORDER_MASK;
WP(w,menu_d).item_count = item_count;
WP(w,menu_d).sel_index = 0;
WP(w,menu_d).main_button = main_button;
@ -585,7 +585,7 @@ static Window *PopupMainToolbMenu(Window *w, int x, int main_button, StringID ba
WP(w,menu_d).checked_items = 0;
_popup_menu_active = true;
SndPlayFx(0x13);
return w;
@ -594,7 +594,7 @@ static Window *PopupMainToolbMenu(Window *w, int x, int main_button, StringID ba
static Window *PopupMainPlayerToolbMenu(Window *w, int x, int main_button, int gray)
{
x += w->left;
SETBIT(w->click_state, main_button);
InvalidateWidget(w, main_button);
@ -703,7 +703,7 @@ bool DoZoomInOutWindow(int how, Window *w)
{
ViewPort *vp;
int button;
switch(_game_mode) {
case GM_EDITOR: button = 9; break;
case GM_NORMAL: button = 17; break;
@ -758,7 +758,7 @@ bool DoZoomInOutWindow(int how, Window *w)
else if (vp->zoom == 2) SETBIT(wt->disabled_state, button + 1);
SetWindowDirty(wt);
}
return true;
}
@ -855,7 +855,7 @@ static void ToolbarScenDateBackward(Window *w)
if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) {
HandleButtonClick(w, 6);
InvalidateWidget(w, 5);
if (_date > 0x2ACE) {
SetDate(ConvertYMDToDay(_cur_year - 1, 0, 1));
}
@ -898,7 +898,7 @@ static void ToolbarScenZoomOut(Window *w)
}
}
void ZoomInOrOutToCursorWindow(bool in, Window *w)
void ZoomInOrOutToCursorWindow(bool in, Window *w)
{
ViewPort * vp;
Point pt;
@ -924,10 +924,10 @@ void ResetLandscape()
{
_random_seed_1 = InteractiveRandom();
_random_seed_2 = InteractiveRandom();
GenerateWorld(1);
MarkWholeScreenDirty();
}
}
static const Widget _ask_reset_landscape_widgets[] = {
{ WWT_TEXTBTN, 4, 0, 10, 0, 13, STR_00C5, STR_NULL},
@ -961,7 +961,7 @@ static void AskResetLandscapeWndProc(Window *w, WindowEvent *e)
SndPlayFx(0x13);
_switch_mode = SM_GENRANDLAND;
}
break;
}
}
@ -1131,7 +1131,7 @@ static void ScenEditLandGenWndProc(Window *w, WindowEvent *e)
case WE_PAINT:
// XXX: only show reset button when nothing was built
DrawWindowWidgets(w);
{
int n = _terraform_size * _terraform_size;
const int8 *coords = &_multi_terraform_coords[0][0];
@ -1190,7 +1190,7 @@ terraform_size_common:;
case 10: /* place rocky areas */
HandlePlacePushButton(w, 10, 0xFF7, 1, PlaceProc_RockyArea);
break;
case 11: /* place lighthouse */
HandlePlacePushButton(w, 11, 0xFF8, 1, _opt.landscape == LT_DESERT ? PlaceProc_Desert : PlaceProc_LightHouse);
break;
@ -1493,7 +1493,7 @@ static void ScenEditIndustryWndProc(Window *w, WindowEvent *e)
break;
case WE_CLICK:
if ((button=e->click.widget) == 3) {
if ((button=e->click.widget) == 3) {
HandleButtonClick(w, 3);
if (!AnyTownExists()) {
@ -1505,7 +1505,7 @@ static void ScenEditIndustryWndProc(Window *w, WindowEvent *e)
GenerateIndustries();
_generating_world = false;
}
if ((button=e->click.widget) >= 4) {
if (HandlePlacePushButton(w, button, 0xFF1, 1, NULL))
_industry_type_to_place = _industry_type_list[_opt.landscape][button - 4];
@ -1705,7 +1705,7 @@ static void MainToolbarWndProc(Window *w, WindowEvent *e)
case WKC_CTRL | WKC_ALT | 'C': if(!_networking) ShowCheatWindow(); break;
}
} break;
case WE_PLACE_OBJ: {
_place_proc(e->place.tile);
} break;
@ -1718,12 +1718,12 @@ static void MainToolbarWndProc(Window *w, WindowEvent *e)
case WE_ON_EDIT_TEXT: HandleOnEditText(e); break;
case WE_MOUSELOOP:
if (((w->click_state) & 1) != (uint)!!_pause) {
w->click_state ^= (1 << 0);
SetWindowDirty(w);
}
if (((w->click_state >> 1) & 1) != (uint)!!_fast_forward) {
w->click_state ^= (1 << 1);
SetWindowDirty(w);
@ -1900,7 +1900,7 @@ static void ScenEditToolbarWndProc(Window *w, WindowEvent *e)
}
break;
}
case WE_PLACE_OBJ: {
_place_proc(e->place.tile);
} break;
@ -1950,7 +1950,7 @@ static bool DrawScrollingStatusText(NewsItem *ni, int pos)
str = _get_news_string_callback[ni->callback](ni);
} else {
COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
str = ni->string_id;
str = ni->string_id;
}
GetString(str_buffr, str);
@ -1992,7 +1992,7 @@ void StatusBarWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
SET_DPARAM16(0, _date);
DrawStringCentered(70, 1, ((_pause||_patches.status_long_date)?STR_00AF:STR_00AE), 0);
p = _local_player == OWNER_SPECTATOR ? NULL : DEREF_PLAYER(_local_player);
if (p) {
@ -2092,7 +2092,7 @@ static void MainWindowWndProc(Window *w, WindowEvent *e) {
DrawSprite(0x12EA, off_x+275,50); // o
DrawSprite(0x12E5, off_x+307,50); // r
DrawSprite(0x12E4, off_x+337,50); // t
DrawSprite(0x12E4, off_x+390,50); // t
DrawSprite(0x12EB, off_x+417,50); // y
DrawSprite(0x12EC, off_x+447,50); // c
@ -2146,7 +2146,7 @@ static void MainWindowWndProc(Window *w, WindowEvent *e) {
}
break;
}
case WKC_ESC: ResetObjectToPlace(); break;
case WKC_DELETE: DeleteNonVitalWindows(); break;
case 'Q' | WKC_CTRL: AskExitGame(); break;
@ -2185,7 +2185,7 @@ static void MainWindowWndProc(Window *w, WindowEvent *e) {
}
e->keypress.cont = false;
break;
}
}
@ -2224,7 +2224,7 @@ void SetupColorsAndInitialWindow()
w = AllocateWindowDesc(&_toolb_normal_desc);
w->disabled_state = 1 << 17;
w->flags4 &= ~WF_WHITE_BORDER_MASK;
PositionMainToolbar(w); // already WC_MAIN_TOOLBAR passed (&_toolb_normal_desc)
_main_status_desc.top = height - 12;
@ -2241,7 +2241,7 @@ void SetupColorsAndInitialWindow()
w = AllocateWindowDesc(&_toolb_scen_desc);
w->disabled_state = 1 << 9;
w->flags4 &= ~WF_WHITE_BORDER_MASK;
PositionMainToolbar(w); // already WC_MAIN_TOOLBAR passed (&_toolb_scen_desc)
break;
default:

View File

@ -39,7 +39,7 @@ int32 CmdSetPlayerColor(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (pp->is_active && pp != p && pp->player_color == (byte)p2)
return CMD_ERROR;
}
if (flags & DC_EXEC) {
_player_colors[p1] = (byte)p2;
p->player_color = (byte)p2;
@ -126,7 +126,7 @@ int32 CmdChangeCompanyName(int x, int y, uint32 flags, uint32 p1, uint32 p2)
str = AllocateName((byte*)_decode_parameters, 4);
if (str == 0)
return CMD_ERROR;
if (flags & DC_EXEC) {
p = DEREF_PLAYER(p1);
old_str = p->name_1;
@ -148,7 +148,7 @@ int32 CmdChangePresidentName(int x, int y, uint32 flags, uint32 p1, uint32 p2)
str = AllocateName((byte*)_decode_parameters, 4);
if (str == 0)
return CMD_ERROR;
if (flags & DC_EXEC) {
p = DEREF_PLAYER(p1);
old_str = p->president_name_1;
@ -161,13 +161,13 @@ int32 CmdChangePresidentName(int x, int y, uint32 flags, uint32 p1, uint32 p2)
d--; do d++; while (*d);
do *d++ = b = *s++; while(d != (byte*)endof(_decode_parameters) && b != 0);
DoCommandByTile(0, p1, 0, DC_EXEC, CMD_CHANGE_COMPANY_NAME);
}
}
MarkWholeScreenDirty();
} else {
DeleteName(str);
}
return 0;
return 0;
}
static void UpdateSignVirtCoords(SignStruct *ss)
@ -200,7 +200,7 @@ static void MarkSignDirty(SignStruct *ss)
int32 CmdPlaceSign(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
SignStruct *ss;
for(ss=_sign_list; ss != endof(_sign_list); ss++) {
if (ss->str == 0) {
if (flags & DC_EXEC) {
@ -213,7 +213,7 @@ int32 CmdPlaceSign(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_new_sign_struct = ss;
}
return 0;
}
}
}
return_cmd_error(STR_2808_TOO_MANY_SIGNS);
@ -275,7 +275,7 @@ int32 CmdResume(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 CmdMoneyCheat(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
SET_EXPENSES_TYPE(EXPENSES_OTHER);
SET_EXPENSES_TYPE(EXPENSES_OTHER);
return (int32)p1;
}
@ -290,7 +290,7 @@ int32 CmdChangeDifficultyLevel(int x, int y, uint32 flags, uint32 p1, uint32 p2)
}
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
return 0;
return 0;
}
static const byte _sign_desc[] = {

View File

@ -45,7 +45,7 @@ static void LandInfoWndProc(Window *w, WindowEvent *e)
str = STR_01A4_COST_TO_CLEAR_N_A;
if (lid->costclear != CMD_ERROR) {
SET_DPARAM32(0, lid->costclear);
SET_DPARAM32(0, lid->costclear);
str = STR_01A5_COST_TO_CLEAR;
}
DrawStringCentered(140, 38, str, 0);
@ -102,7 +102,7 @@ static void LandInfoWndProc(Window *w, WindowEvent *e)
if (str != (STR_01CE_CARGO_ACCEPTED - 1))
DrawStringMultiCenter(140, 76, str, 276);
if (lid->td.build_date != 0) {
SET_DPARAM16(0,lid->td.build_date);
DrawStringCentered(140,71, STR_BUILD_DATE, 0);
@ -136,7 +136,7 @@ static void Place_LandInfo(uint tile)
w = AllocateWindowDesc(&_land_info_desc);
WP(w,void_d).data = &lid;
lid.tile = tile;
lid.town = ClosestTownFromTile(tile, _patches.dist_local_authority);
@ -150,13 +150,13 @@ static void Place_LandInfo(uint tile)
lid.costclear = DoCommandByTile(tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR);
p->money64 = old_money;
UpdatePlayerMoney32(p);
// Becuase build_date is not set yet in every TileDesc, we make sure it is empty
lid.td.build_date = 0;
GetAcceptedCargo(tile, &lid.ac);
GetTileDesc(tile, &lid.td);
#if defined(_DEBUG)
DEBUG(misc, 0) ("TILE: %#x (%i,%i)", tile, GET_TILE_X(tile), GET_TILE_Y(tile));
DEBUG(misc, 0) ("TILE: %d ", tile);
@ -273,7 +273,7 @@ static void BuildTreesWndProc(Window *w, WindowEvent *e)
case 11:case 12: case 13: case 14:
if ( (uint)(wid-3) >= (uint)WP(w,tree_d).count)
return;
if (HandlePlacePushButton(w, wid, 0x7DA, 1, NULL))
_tree_to_plant = WP(w,tree_d).base + wid - 3;
break;
@ -292,7 +292,7 @@ static void BuildTreesWndProc(Window *w, WindowEvent *e)
break;
}
} break;
case WE_PLACE_OBJ:
VpStartPlaceSizing(e->place.tile, VPM_X_AND_Y_LIMITED);
VpSetPlaceSizingLimit(20);
@ -304,7 +304,7 @@ static void BuildTreesWndProc(Window *w, WindowEvent *e)
case WE_PLACE_MOUSEUP:
if (e->click.pt.x != -1) {
DoCommandP(e->place.tile, _tree_to_plant, e->place.starttile, NULL,
DoCommandP(e->place.tile, _tree_to_plant, e->place.starttile, NULL,
CMD_PLANT_TREE | CMD_AUTO | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
}
break;
@ -377,7 +377,7 @@ static const WindowDesc _build_trees_scen_desc = {
BuildTreesWndProc
};
void ShowBuildTreesToolbar()
{
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
@ -418,7 +418,7 @@ static void ErrmsgWndProc(Window *w, WindowEvent *e)
if (w->widget != _errmsg_face_widgets) {
DrawStringMultiCenter(
120,
(_errmsg_message_1 == INVALID_STRING_ID ? 25 : 15),
(_errmsg_message_1 == INVALID_STRING_ID ? 25 : 15),
_errmsg_message_2,
238);
if (_errmsg_message_1 != INVALID_STRING_ID)
@ -433,7 +433,7 @@ static void ErrmsgWndProc(Window *w, WindowEvent *e)
DrawStringMultiCenter(
214,
(_errmsg_message_1 == INVALID_STRING_ID ? 65 : 45),
(_errmsg_message_1 == INVALID_STRING_ID ? 65 : 45),
_errmsg_message_2,
238);
if (_errmsg_message_1 != INVALID_STRING_ID)
@ -490,7 +490,7 @@ void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y)
_errmsg_duration = _patches.errmsg_duration;
if (!_errmsg_duration)
return;
if (_errmsg_message_1 != STR_013B_OWNED_BY || GET_DPARAMX8(_errmsg_decode_params,2) >= 8) {
if ( (x|y) != 0) {
@ -501,11 +501,11 @@ void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y)
// move x pos to opposite corner
pt.x = ((pt.x - vp->virtual_left) >> vp->zoom) + vp->left;
pt.x = (pt.x < (_screen.width >> 1)) ? _screen.width - 260 : 20;
// move y pos to opposite corner
pt.y = ((pt.y - vp->virtual_top) >> vp->zoom) + vp->top;
pt.y = (pt.y < (_screen.height >> 1)) ? _screen.height - 80 : 100;
} else {
pt.x = (_screen.width - 240) >> 1;
pt.y = (_screen.height - 46) >> 1;
@ -566,7 +566,7 @@ static void TooltipsWndProc(Window *w, WindowEvent *e)
switch(e->event) {
case WE_PAINT: {
GfxFillRect(0, 0, w->width - 1, w->height - 1, 0);
GfxFillRect(0, 0, w->width - 1, w->height - 1, 0);
GfxFillRect(1, 1, w->width - 2, w->height - 2, 0x44);
DrawStringMultiCenter((w->width>>1), (w->height>>1)-5, WP(w,tooltips_d).string_id, 197);
break;
@ -583,7 +583,7 @@ void GuiShowTooltips(StringID string_id)
Window *w;
int right,bottom;
int x,y;
if (string_id == 0)
return;
@ -628,7 +628,7 @@ static void DrawStationCoverageText(const uint *accepts, int str_x, int str_y, u
{
int i;
byte *b;
b = _userstring;
b[0] = 0x81;
b[1] = STR_000D_ACCEPTS;
@ -734,7 +734,7 @@ int HandleEditBoxKey(Window *w, int wid, WindowEvent *we)
count++;
width += _stringwidth_table[*p - 32];
} while (1);
if (we->keypress.keycode == WKC_BACKSPACE) {
if (count != 0) {
WP(w,querystr_d).buf[count-1] = 0;
@ -1067,7 +1067,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
return;
file = _fios_list + y;
if ((name = FiosBrowseTo(file)) != NULL) {
if (_saveload_mode == SLD_LOAD_GAME) {
_switch_mode = SM_LOAD;
@ -1120,7 +1120,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
_query_string_active = false;
FiosFreeSavegameList();
break;
}
}
}
static const WindowDesc _load_dialog_desc = {
@ -1226,7 +1226,7 @@ static void SelectScenarioWndProc(Window *w, WindowEvent *e) {
_savegame_sort_dirty = false;
MakeSortedSaveGameList();
}
SetVScrollCount(w, _fios_num);
DrawWindowWidgets(w);
@ -1272,7 +1272,7 @@ static void SelectScenarioWndProc(Window *w, WindowEvent *e) {
return;
file = _fios_list + y;
if ((name = FiosBrowseTo(file)) != NULL) {
SetFiosType(file->type);
strcpy(_file_to_saveload.name, name);
@ -1410,7 +1410,7 @@ static int32 ReadCE(const CheatEntry*ce)
default:
NOT_REACHED();
}
/* useless, but avoids compiler warning this way */
return 0;
}
@ -1490,7 +1490,7 @@ static void CheatsWndProc(Window *w, WindowEvent *e)
DrawFrameRect(x+30, y+1, x+30+9, y+9, 3, clk == i*2+2 ? 0x20 : 0);
DrawStringCentered(x+25, y+1, STR_6819, 0);
DrawStringCentered(x+35, y+1, STR_681A, 0);
val = ReadCE(ce);
// set correct string for switch climate cheat
@ -1502,7 +1502,7 @@ static void CheatsWndProc(Window *w, WindowEvent *e)
// display date for change date cheat
if(ce->str==STR_CHEAT_CHANGE_DATE)
SET_DPARAM16(0, _date);
// draw colored flag for change player cheat
if(ce->str==STR_CHEAT_CHANGE_PLAYER)
DrawPlayerIcon(_current_player, 156, y+2);
@ -1579,7 +1579,7 @@ static void CheatsWndProc(Window *w, WindowEvent *e)
WP(w,def_d).data_1 = 0;
SetWindowDirty(w);
break;
}
}
}
static const WindowDesc _cheats_desc = {
240, 22, 400, 148,
@ -1593,7 +1593,7 @@ static const WindowDesc _cheats_desc = {
void ShowCheatWindow()
{
Window *w;
DeleteWindowById(WC_CHEATS, 0);
w = AllocateWindowDesc(&_cheats_desc);

View File

@ -44,7 +44,7 @@ static void SkipToPrevSong()
// empty playlist
if (b[0] == 0)
return;
// find the end
do p++; while (p[0] != 0);
@ -132,7 +132,7 @@ static void PlayPlaylistSong()
_music_wnd_cursong = _cur_playlist[0];
DoPlaySong();
_song_is_active = true;
InvalidateWindowWidget(WC_MUSIC_WINDOW, 0, 9);
}
@ -190,7 +190,7 @@ static void MusicTrackSelectionWndProc(Window *w, WindowEvent *e)
DrawStringCentered(216, 45 + i*8, STR_01D5_ALL + i, (i==msf.playlist) ? 0xC : 0x10);
}
DrawStringCentered(216, 45+8*6+16, STR_01F0_CLEAR, 0);
DrawStringCentered(216, 45+8*6+16, STR_01F0_CLEAR, 0);
DrawStringCentered(216, 45+8*6+16*2, STR_01F1_SAVE, 0);
y = 23;
@ -203,7 +203,7 @@ static void MusicTrackSelectionWndProc(Window *w, WindowEvent *e)
}
break;
}
case WE_CLICK:
switch(e->click.widget) {
case 3: { /* add to playlist */
@ -321,7 +321,7 @@ static void MusicWindowWndProc(Window *w, WindowEvent *e)
DrawString(60, 38, STR_01E8_TRACK_XTITLE, 0);
for(i=0; i!=6; i++) {
DrawStringCentered(25+i*50, 59, STR_01D5_ALL+i, msf.playlist == i ? 0xC : 0x10);
}
@ -336,14 +336,14 @@ static void MusicWindowWndProc(Window *w, WindowEvent *e)
DrawFrameRect(108, 23, 174, 26, 14, 0x20);
DrawFrameRect(214, 23, 280, 26, 14, 0x20);
DrawFrameRect(108 + (msf.music_vol>>1),
DrawFrameRect(108 + (msf.music_vol>>1),
22,
111 + (msf.music_vol>>1),
28,
14,
0);
DrawFrameRect(214 + (msf.effect_vol>>1),
DrawFrameRect(214 + (msf.effect_vol>>1),
22,
217 + (msf.effect_vol>>1),
28,
@ -371,7 +371,7 @@ static void MusicWindowWndProc(Window *w, WindowEvent *e)
break;
case 6:{ // volume sliders
byte *vol,new_vol;
int x = e->click.pt.x - 88;
int x = e->click.pt.x - 88;
if (x < 0)
return;

View File

@ -11,7 +11,7 @@ static void AppendPart(byte **buf, int num, const char *names)
while (--num>=0) {
do names++; while (names[-1]);
}
for(s=*buf; (*s++ = *names++) != 0;) {}
*buf = s - 1;
}
@ -19,14 +19,14 @@ static void AppendPart(byte **buf, int num, const char *names)
#define MK(x) x "\x0"
#define NUM_ENGLISH_1 4
static const char english_1[] =
static const char english_1[] =
MK("Great ")
MK("Little ")
MK("New ")
MK("Fort ")
;
#define NUM_ENGLISH_2 26
#define NUM_ENGLISH_2 26
static const char english_2[] =
MK("Wr")
MK("B")
@ -57,7 +57,7 @@ static const char english_2[] =
;
#define NUM_ENGLISH_3 8
static const char english_3[] =
static const char english_3[] =
MK("ar")
MK("a")
MK("e")
@ -69,7 +69,7 @@ static const char english_3[] =
;
#define NUM_ENGLISH_4 7
static const char english_4[] =
static const char english_4[] =
MK("n")
MK("ning")
MK("ding")
@ -80,7 +80,7 @@ static const char english_4[] =
;
#define NUM_ENGLISH_5 23
static const char english_5[] =
static const char english_5[] =
MK("ville")
MK("ham")
MK("field")
@ -107,7 +107,7 @@ static const char english_5[] =
;
#define NUM_ENGLISH_6 9
static const char english_6[] =
static const char english_6[] =
MK("-on-sea")
MK(" Bay")
MK(" Market")
@ -130,7 +130,7 @@ static byte MakeEnglishTownName(byte *buf, uint32 seed)
i = GETNUM(0, 54) - 50;
if (i >= 0)
AppendPart(&buf, i, english_1);
start = buf;
AppendPart(&buf, GETNUM(4, NUM_ENGLISH_2), english_2);
@ -141,14 +141,14 @@ static byte MakeEnglishTownName(byte *buf, uint32 seed)
i = GETNUM(15, NUM_ENGLISH_6 + 60) - 60;
result = 0;
if (i >= 0) {
if (i <= 1) result = NG_EDGE;
AppendPart(&buf, i, english_6);
}
if (start[0]=='C' && (start[1] == 'e' || start[1] == 'i'))
start[0] = 'K';
start[0] = 'K';
/* Replace certain words (routine identical to TTD now) */
@ -167,7 +167,7 @@ static byte MakeEnglishTownName(byte *buf, uint32 seed)
}
#define NUM_AUSTRIAN_A1 6
static const char austrian_a1[] =
static const char austrian_a1[] =
MK("Bad ")
MK("Deutsch ")
MK("Gross ")
@ -177,7 +177,7 @@ static const char austrian_a1[] =
;
#define NUM_AUSTRIAN_A2 42
static const char austrian_a2[] =
static const char austrian_a2[] =
MK("Aus")
MK("Alten")
MK("Braun")
@ -223,7 +223,7 @@ static const char austrian_a2[] =
;
#define NUM_AUSTRIAN_A3 16
static const char austrian_a3[] =
static const char austrian_a3[] =
MK("see")
MK("bach")
MK("dorf")
@ -371,8 +371,8 @@ static byte MakeAustrianTownName(byte *buf, uint32 seed)
}
#define NUM_GERMAN_1 114
#define NUM_GERMAN_1_HARDCODED 21
static const char german_1[] =
#define NUM_GERMAN_1_HARDCODED 21
static const char german_1[] =
/* hardcoded names */
MK("Berlin")
MK("Bonn")
@ -531,14 +531,14 @@ static const char german_4[] =
MK("Elbe")
/* use "am" */
MK("Main")
;
static byte MakeGermanTownName(byte *buf, uint32 seed)
{
int i;
int ext;
ext=GETNUM(7, 28); /* Extension - Prefix / Suffix */
if ((ext==12) || (ext==19)) {
@ -571,7 +571,7 @@ static byte MakeGermanTownName(byte *buf, uint32 seed)
}
#define NUM_SPANISH_1 86
static const char spanish_1[] =
static const char spanish_1[] =
MK("Caracas")
MK("Maracay")
MK("Maracaibo")
@ -662,11 +662,11 @@ static const char spanish_1[] =
static byte MakeSpanishTownName(byte *buf, uint32 seed)
{
AppendPart(&buf, GETNUM(0, NUM_SPANISH_1), spanish_1);
return 0;
return 0;
}
#define NUM_FRENCH_1 70
static const char french_1[] =
static const char french_1[] =
MK("Agincourt")
MK("Lille")
MK("Dinan")
@ -684,7 +684,7 @@ static const char french_1[] =
MK("St. Tropez")
MK("Marseilles")
MK("Narbonne")
MK("Sète")
MK("Sète")
MK("Aurillac")
MK("Gueret")
MK("Le Creusot")
@ -751,7 +751,7 @@ static byte MakeAmericanTownName(byte *buf, uint32 seed)
}
#define NUM_SILLY_1 88
static const char silly_1[] =
static const char silly_1[] =
MK("Binky")
MK("Blubber")
MK("Bumble")
@ -851,7 +851,7 @@ static const char silly_1[] =
;
#define NUM_SILLY_2 15
static const char silly_2[] =
static const char silly_2[] =
MK("ton")
MK("bury")
MK("bottom")
@ -862,7 +862,7 @@ static const char silly_2[] =
MK("wig")
MK("wick")
MK("wood")
MK("pool")
MK("head")
MK("burg")
@ -872,7 +872,7 @@ static const char silly_2[] =
static byte MakeSillyTownName(byte *buf, uint32 seed)
{
{
AppendPart(&buf, GETNUM(0, NUM_SILLY_1), silly_1);
AppendPart(&buf, GETNUM(16, NUM_SILLY_2),silly_2);
return 0;
@ -1081,7 +1081,7 @@ static const char dutch_1[] =
MK("Klein ");
#define NUM_DUTCH_2 57
static const char dutch_2[] =
static const char dutch_2[] =
MK("Hoog")
MK("Laag")
MK("Klein")
@ -1141,7 +1141,7 @@ static const char dutch_2[] =
MK("Hil");
#define NUM_DUTCH_3 20
static const char dutch_3[] =
static const char dutch_3[] =
MK("Drog")
MK("Nat")
MK("Valk")
@ -1162,10 +1162,10 @@ static const char dutch_3[] =
MK("Wams")
MK("Heerhug")
MK("Koning");
#define NUM_DUTCH_4 6
static const char dutch_4[] =
static const char dutch_4[] =
MK("e")
MK("er")
MK("el")
@ -1174,7 +1174,7 @@ static const char dutch_4[] =
MK("s");
#define NUM_DUTCH_5 56
static const char dutch_5[] =
static const char dutch_5[] =
MK("stad")
MK("vorst")
MK("dorp")
@ -1231,13 +1231,13 @@ static const char dutch_5[] =
MK("schede")
MK("mere")
MK("end");
static byte MakeDutchTownName(byte *buf, uint32 seed)
{
int i;
i = GETNUM(0, 50 + NUM_DUTCH_1) - 50;
if (i >= 0)
if (i >= 0)
AppendPart(&buf, i, dutch_1);
i = GETNUM(6, 9);
@ -1253,7 +1253,7 @@ static byte MakeDutchTownName(byte *buf, uint32 seed)
}
#define NUM_FINNISH_1 25
static const char finnish_1[] =
static const char finnish_1[] =
MK("Aijala")
MK("Kisko")
MK("Espoo")
@ -1279,9 +1279,9 @@ static const char finnish_1[] =
MK("Imatra")
MK("Tapanila")
MK("Pasila");
#define NUM_FINNISH_2a 26
static const char finnish_2a[] =
static const char finnish_2a[] =
MK("Hiekka")
MK("Haapa")
MK("Mylly")
@ -1310,7 +1310,7 @@ static const char finnish_2a[] =
MK("Koivu");
#define NUM_FINNISH_2b 18
static const char finnish_2b[] =
static const char finnish_2b[] =
MK("harju")
MK("linna")
MK("järvi")
@ -1576,7 +1576,7 @@ MK(" Malopolski")
MK(" Podlaski")
MK(" Lesny")
;
static const char polish_3_f[] =
static const char polish_3_f[] =
MK(" Wybudowanie")
MK(" Swietokrzyska")
MK(" Gorska")
@ -1692,7 +1692,7 @@ static byte MakePolishTownName(byte *buf, uint32 seed)
}
#define NUM_CZECH_1 82
static const char czech_1[] =
static const char czech_1[] =
MK("As")
MK("Benesov")
MK("Beroun")
@ -1780,7 +1780,7 @@ MK("Znojmo")
static byte MakeCzechTownName(byte *buf, uint32 seed)
{
AppendPart(&buf, GETNUM(0, NUM_CZECH_1), czech_1);
return 0;
return 0;
}
@ -1879,12 +1879,12 @@ MK("Zvolen")
static byte MakeSlovakishTownName(byte *buf, uint32 seed)
{
AppendPart(&buf, GETNUM(0, NUM_SLOVAKISH_1), slovakish_1);
return 0;
return 0;
}
// Modifiers
#define NUM_HUNGARIAN_1 5
static const char hungarian_1[] =
static const char hungarian_1[] =
MK("Nagy-")
MK("Kis-")
MK("Felsõ-")
@ -1893,7 +1893,7 @@ static const char hungarian_1[] =
;
#define NUM_HUNGARIAN_2 54
static const char hungarian_2[] =
static const char hungarian_2[] =
// River modifiers
// 1 - 10
MK("Bodrog")
@ -1971,7 +1971,7 @@ static const char hungarian_2[] =
;
#define NUM_HUNGARIAN_3 16
static const char hungarian_3[] =
static const char hungarian_3[] =
MK("apáti")
MK("bába")
MK("bikk")
@ -1991,7 +1991,7 @@ static const char hungarian_3[] =
;
#define NUM_HUNGARIAN_4 5
static const char hungarian_4[] =
static const char hungarian_4[] =
MK("alja")
MK("egyháza")
MK("háza")
@ -2054,7 +2054,7 @@ static byte MakeHungarianTownName(byte *buf, uint32 seed)
AppendPart(&buf, GETNUM(3, NUM_HUNGARIAN_2), hungarian_2);
AppendPart(&buf, GETNUM(6, NUM_HUNGARIAN_3), hungarian_3);
i = GETNUM(10, NUM_HUNGARIAN_4 * 3);
if (i < NUM_HUNGARIAN_4) AppendPart(&buf, i, hungarian_4);
}

View File

@ -232,7 +232,7 @@ static size_t _transmit_file_size;
static FILE *_recv_file;
typedef struct NetworkGameInfo {
typedef struct NetworkGameInfo {
char server_name[40]; // name of the game
char server_revision[8]; // server game version
byte server_lang; // langid
@ -263,17 +263,17 @@ void CSleep(int milliseconds) {
Sleep(milliseconds);
#endif
#if defined(UNIX)
#if !defined(__BEOS__) && !defined(__MORPHOS__) && !defined(__AMIGAOS__)
#if !defined(__BEOS__) && !defined(__MORPHOS__) && !defined(__AMIGAOS__)
usleep(milliseconds*1000);
#endif
#ifdef __BEOS__
snooze(milliseconds*1000);
#endif
#if defined(__MORPHOS__)
#if defined(__MORPHOS__)
usleep(milliseconds*1000);
#endif
#if defined(__AMIGAOS__) && !defined(__MORPHOS__)
{
#if defined(__AMIGAOS__) && !defined(__MORPHOS__)
{
ULONG signals;
ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
@ -826,7 +826,7 @@ void NetworkSendReadyPacket()
rp->packet_type = 5;
rp->packet_length = sizeof(rp);
SendBytes(c, rp, sizeof(rp));
_network_ready_sent = true;
_network_ready_sent = true;
}
}
@ -955,7 +955,7 @@ bool NetworkConnect(const char *hostname, int port)
b = 1;
setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (const char*)&b, sizeof(b));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = NetworkResolveHost(hostname);
sin.sin_port = htons(port);
@ -980,7 +980,7 @@ bool NetworkConnect(const char *hostname, int port)
void NetworkListen()
{
SOCKET ls;
struct sockaddr_in sin;
int port;
@ -992,7 +992,7 @@ void NetworkListen()
ls = socket(AF_INET, SOCK_STREAM, 0);
if (ls == INVALID_SOCKET)
error("socket() on listen socket failed");
// reuse the socket
{
int reuse = 1; if (setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuse, sizeof(reuse)) == -1)
@ -1021,7 +1021,7 @@ void NetworkReceive()
int n;
fd_set read_fd, write_fd;
struct timeval tv;
FD_ZERO(&read_fd);
FD_ZERO(&write_fd);
@ -1119,13 +1119,13 @@ void NetworkSend()
CSleep(5);
}
}
_not_packet = 0;
new_max = max(_frame_counter + (int)_network_ahead_frames, _frame_counter_max);
DEBUG(net,3) ("net: serv: sync max=%i, seed1=%i, seed2=%i",new_max,_sync_seed_1,_sync_seed_2);
sp.packet_length = sizeof(sp);
sp.packet_type = 1;
sp.frames = new_max - _frame_counter_max;
@ -1196,7 +1196,7 @@ void NetworkClose(bool client) {
void NetworkShutdown()
{
_networking_server = false;
_networking_server = false;
_networking = false;
_networking_sync = false;
_frame_counter = 0;
@ -1255,10 +1255,10 @@ void NetworkUDPListen(bool client)
DEBUG(net, 1) ("[NET][UDP] listening on port %i", port);
udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// this disables network
_network_available = !(udp == INVALID_SOCKET);
// set nonblocking mode for socket
{ unsigned long blocking = 1; ioctlsocket(udp, FIONBIO, &blocking); }
@ -1268,7 +1268,7 @@ void NetworkUDPListen(bool client)
if (bind(udp, (struct sockaddr*)&sin, sizeof(sin)) != 0)
DEBUG(net, 1) ("[NET][UDP] error: bind failed on port %i", port);
// enable broadcasting
{ unsigned long val=1; setsockopt(udp, SOL_SOCKET, SO_BROADCAST, (char *) &val , sizeof(val)); }
@ -1280,7 +1280,7 @@ void NetworkUDPListen(bool client)
}
void NetworkUDPClose(bool client) {
if (client) {
if (client) {
DEBUG(net, 1) ("[NET][UDP] closed listener on port %i", _network_client_port);
closesocket(_udp_client_socket);
_udp_client_socket = INVALID_SOCKET;
@ -1301,17 +1301,17 @@ void NetworkUDPReceive(bool client) {
int nbytes;
struct UDPPacket packet;
int packet_len;
SOCKET udp;
if (client) udp=_udp_client_socket; else udp=_udp_server_socket;
packet_len = sizeof(packet);
client_len = sizeof(client_addr);
client_len = sizeof(client_addr);
nbytes = recvfrom(udp, (char *) &packet, packet_len , 0, (struct sockaddr *) &client_addr, &client_len);
if (nbytes>0) {
if (packet.command_code==packet.command_check) switch (packet.command_code) {
case NET_UDPCMD_SERVERSEARCH:
if (!client) {
packet.command_check=packet.command_code=NET_UDPCMD_SERVERINFO;
@ -1335,7 +1335,7 @@ void NetworkUDPReceive(bool client) {
item = (NetworkGameList *) NetworkGameListAdd();
item -> ip = inet_addr(inet_ntoa(client_addr.sin_addr));
item -> port = ntohs(client_addr.sin_port);
memcpy(item,&packet.data,packet.data_len);
}
break;
@ -1365,14 +1365,14 @@ void NetworkUDPBroadCast(bool client, struct UDPPacket packet) {
if (res==-1) DEBUG(net, 1)("udp: broadcast error: %i",GET_LAST_ERROR());
i++;
}
}
void NetworkUDPSend(bool client, struct sockaddr_in recv,struct UDPPacket packet) {
SOCKET udp;
if (client) udp=_udp_client_socket; else udp=_udp_server_socket;
sendto(udp,(char *) &packet,sizeof(packet),0,(struct sockaddr *) &recv,sizeof(recv));
}
@ -1380,13 +1380,13 @@ void NetworkUDPSend(bool client, struct sockaddr_in recv,struct UDPPacket packet
bool NetworkUDPSearchGame(const byte ** _network_detected_serverip, unsigned short * _network_detected_serverport) {
struct UDPPacket packet;
int timeout=3000;
NetworkGameListClear();
DEBUG(net, 0) ("[NET][UDP] searching server");
*_network_detected_serverip = "255.255.255.255";
*_network_detected_serverport = 0;
packet.command_check=packet.command_code=NET_UDPCMD_SERVERSEARCH;
packet.data_len=0;
NetworkUDPBroadCast(true, packet);
@ -1403,11 +1403,11 @@ bool NetworkUDPSearchGame(const byte ** _network_detected_serverip, unsigned sho
timeout=-1;
DEBUG(net, 0) ("[NET][UDP] server found on %s", *_network_detected_serverip);
}
}
return (*_network_detected_serverport>0);
}
@ -1420,7 +1420,7 @@ void NetworkIPListInit() {
char hostname[250];
uint32 bcaddr;
int i=0;
gethostname(hostname,250);
DEBUG(net, 2) ("[NET][IP] init for host %s", hostname);
he=gethostbyname((char *) hostname);
@ -1428,7 +1428,7 @@ void NetworkIPListInit() {
if (he == NULL) {
he = gethostbyname("localhost");
}
if (he == NULL) {
bcaddr = inet_addr("127.0.0.1");
he = gethostbyaddr(inet_ntoa(*(struct in_addr *) &bcaddr), sizeof(bcaddr), AF_INET);
@ -1437,7 +1437,7 @@ void NetworkIPListInit() {
if (he == NULL) {
DEBUG(net, 2) ("[NET][IP] cannot resolve %s", hostname);
} else {
while(he->h_addr_list[i]) {
while(he->h_addr_list[i]) {
bcaddr = inet_addr(inet_ntoa(*(struct in_addr *) he->h_addr_list[i]));
_network_ip_list[i]=bcaddr;
DEBUG(net, 2) ("[NET][IP] add %s",inet_ntoa(*(struct in_addr *) he->h_addr_list[i]));
@ -1446,7 +1446,7 @@ void NetworkIPListInit() {
}
_network_ip_list[i]=0;
}
/* *************************************************** */
@ -1468,7 +1468,7 @@ _network_client_timeout=3000;
_network_available=false;
}
}
#else
#else
// [morphos/amigaos] bsd-socket startup
@ -1486,14 +1486,14 @@ _network_client_timeout=3000;
if ( (TimerRequest = (struct timerequest *) CreateIORequest(TimerPort, sizeof(struct timerequest))) ) {
if ( OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest *) TimerRequest, 0) == 0 ) {
if ( !(TimerBase = TimerRequest->tr_node.io_Device) ) {
// free ressources...
// free ressources...
DEBUG(net, 3) ("[NET][Core] Couldn't initialize timer.");
_network_available=false;
}
}
}
}
#endif
#endif
}
#else
@ -1527,9 +1527,9 @@ void NetworkCoreShutdown() {
DEBUG(net, 3) ("[NET][Core] shutdown()");
#if defined(__MORPHOS__) || defined(__AMIGA__)
{
{
// free allocated ressources
#if !defined(__MORPHOS__)
#if !defined(__MORPHOS__)
if (TimerBase) { CloseDevice((struct IORequest *) TimerRequest); }
if (TimerRequest) { DeleteIORequest(TimerRequest); }
if (TimerPort) { DeleteMsgPort(TimerPort); }
@ -1574,9 +1574,9 @@ bool NetworkCoreConnectGame(const byte* b, unsigned short port)
if (_networking) {
NetworkLobbyShutdown();
} else {
if (_networking_override)
if (_networking_override)
NetworkLobbyShutdown();
ShowErrorMessage(-1, STR_NETWORK_ERR_NOCONNECTION,0,0);
_switch_mode_errorstr = STR_NETWORK_ERR_NOCONNECTION;
}
@ -1607,13 +1607,13 @@ void NetworkCoreDisconnect()
if (_networking_server) {
NetworkUDPClose(false);
NetworkClose(false);
}
}
/* terminate client connection */
else if (_networking) {
NetworkClose(true);
}
NetworkShutdown();
}
@ -1670,7 +1670,7 @@ void NetworkLobbyShutdown() {
void NetworkGameListClear() {
NetworkGameList * item;
NetworkGameList * next;
NetworkGameList * next;
DEBUG(net, 4) ("[NET][G-List] cleared server list");
@ -1686,7 +1686,7 @@ _network_game_count=0;
char * NetworkGameListAdd() {
NetworkGameList * item;
NetworkGameList * before;
NetworkGameList * before;
DEBUG(net, 4) ("[NET][G-List] added server to list");
@ -1726,7 +1726,7 @@ void NetworkGameListFromInternet() {
char * NetworkGameListItem(uint16 index) {
NetworkGameList * item;
NetworkGameList * next;
NetworkGameList * next;
uint16 cnt = 0;
item = _network_game_list;
@ -1749,7 +1749,7 @@ void NetworkGameFillDefaults() {
#if defined(WITH_REV)
extern char _openttd_revision[];
#endif
DEBUG(net, 4) ("[NET][G-Info] setting defaults");
ttd_strlcpy(game->server_name,"OpenTTD Game",13);
@ -1768,7 +1768,7 @@ void NetworkGameFillDefaults() {
game->players_max=8;
game->players_on=0;
game->server_lang=_dynlang.curr;
}

View File

@ -23,12 +23,12 @@ static const StringID _connection_types_dropdown[] = {
};
/* Should be _network_game->players_max but since network is not yet really done
* we'll just use some dummy here
* we'll just use some dummy here
* network.c -->> static NetworkGameInfo _network_game;
*/
static byte _players_max;
/* Should be ??????????? (something) but since network is not yet really done
* we'll just use some dummy here
* we'll just use some dummy here
*/
static byte _network_connection;
@ -36,20 +36,20 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
case WE_PAINT: {
SET_DPARAM16(0, 0x00);
SET_DPARAM16(2, STR_NETWORK_LAN + _network_connection);
DrawWindowWidgets(w);
DrawEditBox(w, 6);
DrawString(9, 43, STR_NETWORK_PLAYER_NAME, 2);
DrawString(9, 63, STR_NETWORK_SELECT_CONNECTION, 2);
DrawString(15, 82, STR_NETWORK_GAME_NAME, 2);
DrawString(238, 82, STR_NETWORK_PLAYERS, 2);
DrawString(288, 82, STR_NETWORK_MAP_SIZE, 2);
} break;
case WE_CLICK:
@ -65,7 +65,7 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
case 4: { /* Connect via direct ip */
StringID str;
str = AllocateName((byte*)_decode_parameters, 0);
ShowQueryString(
str,
STR_NETWORK_ENTER_IP,
@ -93,7 +93,7 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
case WE_MOUSELOOP:
if (_selected_field == 6)
HandleEditBox(w, 6);
break;
case WE_KEYPRESS:
@ -160,11 +160,11 @@ void ShowNetworkGameWindow()
DeleteWindowById(WC_NETWORK_WINDOW, 0);
NetworkLobbyInit();
w = AllocateWindowDesc(&_network_game_window_desc);
strcpy(_edit_str_buf, "Your name");
WP(w,querystr_d).caret = 1;
WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN;
WP(w,querystr_d).maxwidth = 240;
@ -186,7 +186,7 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
case WE_PAINT: {
SET_DPARAM16(7, STR_NETWORK_2_PLAYERS + _players_max);
DrawWindowWidgets(w);
@ -194,13 +194,13 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
DrawEditBox(w, 3);
DrawEditBox(w, 4);
DrawString(10, 22, STR_NETWORK_NEW_GAME_NAME, 2);
DrawString(210, 22, STR_NETWORK_PASSWORD, 2);
DrawString(10, 43, STR_NETWORK_SELECT_MAP, 2);
DrawString(260, 63, STR_NETWORK_NUMBER_OF_PLAYERS, 2);
} break;
case WE_CLICK:
@ -251,7 +251,7 @@ static void NetworkStartServerWindowWndProc(Window *w, WindowEvent *e)
break;
}
break;
}
}
@ -288,10 +288,10 @@ static void ShowNetworkStartServerWindow()
{
Window *w;
DeleteWindowById(WC_NETWORK_WINDOW, 0);
w = AllocateWindowDesc(&_network_start_server_window_desc);
strcpy(_edit_str_buf, "");
WP(w,querystr_d).caret = 1;
WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN;
WP(w,querystr_d).maxwidth = 240;
@ -303,7 +303,7 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
case WE_PAINT: {
SET_DPARAM16(7, STR_NETWORK_2_PLAYERS + _opt_mod_ptr->road_side);
DrawWindowWidgets(w);
@ -312,7 +312,7 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
DrawEditBox(w, 5);
DrawEditBox(w, 7);
DrawString(10, 255, STR_NETWORK_COMPANY_NAME, 2);
break;
@ -340,7 +340,7 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
HandleEditBox(w, 7);
break;
}
break;
case WE_KEYPRESS:
@ -352,7 +352,7 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
break;
}
break;
}
}
@ -398,11 +398,11 @@ static void ShowNetworkLobbyWindow()
{
Window *w;
DeleteWindowById(WC_NETWORK_WINDOW, 0);
w = AllocateWindowDesc(&_network_lobby_window_desc);
strcpy(_edit_str_buf, "");
WP(w,querystr_d).caret = 1;
WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN;
WP(w,querystr_d).maxwidth = 240;

View File

@ -12,7 +12,7 @@
News system is realized as a FIFO queue (in an array)
The positions in the queue can't be rearranged, we only access
the array elements through pointers to the elements. Once the
array is full, the oldest entry (_oldest_news) is being overwritten
array is full, the oldest entry (_oldest_news) is being overwritten
by the newest (_latest news).
oldest current lastest
@ -28,7 +28,7 @@ static NewsItem _news_items[MAX_NEWS];
static byte _current_news = 255; // points to news item that should be shown next
static byte _oldest_news = 0; // points to first item in fifo queue
static byte _latest_news = 255; // points to last item in fifo queue
static byte _forced_news = 255; // if the message being shown was forced by the user, its index is stored in _forced_news.
static byte _forced_news = 255; // if the message being shown was forced by the user, its index is stored in _forced_news.
//forced_news is 255 otherwise. (Users can force messages through history or "last message")
static byte _total_news = 0; // total news count
@ -80,13 +80,13 @@ void DrawNewsBorder(Window *w)
int bottom = w->height - 1;
GfxFillRect(left, top, right, bottom, 0xF);
GfxFillRect(left, top, left, bottom, 0xD7);
GfxFillRect(right, top, right, bottom, 0xD7);
GfxFillRect(left, top, right, top, 0xD7);
GfxFillRect(left, bottom, right, bottom, 0xD7);
DrawString(left + 2, top + 1, STR_00C6, 0);
DrawString(left + 2, top + 1, STR_00C6, 0);
}
static void NewsWindowProc(Window *w, WindowEvent *e)
@ -115,7 +115,7 @@ static void NewsWindowProc(Window *w, WindowEvent *e)
/* Shade the viewport into gray, or color*/
vp = w->viewport;
GfxFillRect(vp->left - w->left, vp->top - w->top, vp->left - w->left + vp->width - 1, vp->top - w->top + vp->height - 1,
GfxFillRect(vp->left - w->left, vp->top - w->top, vp->left - w->left + vp->width - 1, vp->top - w->top + vp->height - 1,
ni->flags & NF_INCOLOR ? 0x4322:0x4323
);
@ -208,7 +208,7 @@ void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b)
_forced_news = 255;
if(_total_news < MAX_NEWS) _total_news++;
// make sure our pointer isn't overflowing
_latest_news = increaseIndex(_latest_news);
@ -431,7 +431,7 @@ void ShowLastNewsMessage()
else if(_forced_news!=0)
ShowNewsMessage(_forced_news-1);
else {
if(_total_news != MAX_NEWS)
if(_total_news != MAX_NEWS)
ShowNewsMessage(_latest_news);
else
ShowNewsMessage(MAX_NEWS-1);
@ -443,7 +443,7 @@ void ShowLastNewsMessage()
recent news. Returns 255 if end of queue reached. */
static byte getNews(byte i)
{
if(i>=_total_news)
if(i>=_total_news)
return 255;
if(_latest_news < i)
@ -459,17 +459,17 @@ static void GetNewsString(NewsItem *ni, byte *buffer)
{
StringID str;
byte *s, *d;
if (ni->display_mode == 3) {
str = _get_news_string_callback[ni->callback](ni);
} else {
COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
str = ni->string_id;
str = ni->string_id;
}
GetString(str_buffr, str);
assert(strlen(str_buffr) < sizeof(str_buffr) - 1);
s = str_buffr;
d = buffer;
@ -611,7 +611,7 @@ static void MessageOptionsWndProc(Window *w, WindowEvent *e)
for(i=STR_0206_ARRIVAL_OF_FIRST_VEHICLE; i <= STR_020F_GENERAL_INFORMATION; i++) {
DrawString(124, y, i, 0);
y += 12;
}
}
break;
}

View File

@ -314,7 +314,7 @@ typedef struct {
byte owner;
uint16 tile;
uint16 cur_image;
int16 left_coord, right_coord, top_coord, bottom_coord; // NOLOAD, calculated automatically.
uint16 vehstatus;
uint16 cur_speed;
@ -420,21 +420,21 @@ typedef struct {
uint16 age_cargo_skip_counter;
uint16 tick_counter;
uint16 cur_tileloop_tile;
OldPrice prices[49];
OldPaymentRate cargo_payment_rates[12];
byte map_owner[256*256];
byte map2[256*256];
uint16 map3[256*256];
byte map_extra[256*256/4];
OldStation stations[250];
OldIndustry industries[90];
OldPlayer players[8];
OldVehicle vehicles[850];
OldName names[500];
uint16 vehicle_position_hash[0x1000]; // NOLOAD, calculated automatically.
OldSign signs[40];
@ -455,7 +455,7 @@ typedef struct {
uint16 cargo_sprites[12];
uint16 engine_name_strings[256];
//NOLOAD. These are calculated from InitializeLandscapeVariables
uint16 railveh_by_cargo_1[12], railveh_by_cargo_2[12], railveh_by_cargo_3[12];
uint16 roadveh_by_cargo_start[12];
@ -486,9 +486,9 @@ typedef struct {
byte snow_line_height;
byte new_industry_randtable[32]; // NOLOAD. Not needed due to different code design.
//NOLOAD. Initialized by InitializeLandscapeVariables
byte cargo_weights[12];
byte cargo_weights[12];
byte transit_days_table_1[12];
byte transit_days_table_2[12];
@ -557,7 +557,7 @@ static byte DecodeSavegameByte()
return GetSavegameByteFromBuffer();
}
}
x = GetSavegameByteFromBuffer();
if (x >= 0) {
lss->count = x;
@ -568,7 +568,7 @@ static byte DecodeSavegameByte()
lss->count = -x;
lss->rep_char = GetSavegameByteFromBuffer();
return lss->rep_char;
}
}
}
static void LoadSavegameBytes(void *p, size_t count)
@ -642,7 +642,7 @@ static void FixIndustry(Industry *i, OldIndustry *o, int num)
i->prod_level = o->prod_level;
i->last_mo_production[0] = o->last_mo_production[0];
i->last_mo_production[1] = o->last_mo_production[1];
i->last_mo_transported[0] = o->last_mo_transported[0];
i->last_mo_transported[1] = o->last_mo_transported[1];
i->last_mo_transported[2] = o->last_mo_transported[2];
@ -652,7 +652,7 @@ static void FixIndustry(Industry *i, OldIndustry *o, int num)
i->total_production[0] = o->total_production[0];
i->total_production[1] = o->total_production[1];
i->total_transported[0] = i->total_transported[0];
i->total_transported[1] = i->total_transported[1];
@ -688,7 +688,7 @@ static void FixStation(Station *s, OldStation *o, int num)
s->train_tile = o->train_tile;
s->airport_tile = o->airport_tile;
s->dock_tile = o->dock_tile;
if (o->train_tile) {
int w = (o->platforms >> 3) & 0x7;
int h = (o->platforms & 0x7);
@ -696,7 +696,7 @@ static void FixStation(Station *s, OldStation *o, int num)
s->trainst_w = w;
s->trainst_h = h;
}
s->string_id = RemapOldStringID(o->string_id);
s->had_vehicle_of_type = o->had_vehicle_of_type;
FixGoodsEntry(s->goods, o->goods, lengthof(o->goods));
@ -727,7 +727,7 @@ static void FixVehicle(Vehicle *n, OldVehicle *o, int num)
do {
n->type = o->type;
n->subtype = o->subtype;
if (o->schedule_ptr == 0xFFFFFFFF || o->schedule_ptr == 0) {
n->schedule_ptr = NULL;
} else {
@ -758,7 +758,7 @@ static void FixVehicle(Vehicle *n, OldVehicle *o, int num)
n->owner = o->owner;
n->tile = o->tile;
n->cur_image = o->cur_image;
n->vehstatus = o->vehstatus;
n->cur_speed = o->cur_speed;
n->subspeed = o->subspeed;
@ -787,7 +787,7 @@ static void FixVehicle(Vehicle *n, OldVehicle *o, int num)
n->next = o->next_in_chain == 0xffff ? NULL : &_vehicles[o->next_in_chain];
n->value = o->value;
n->string_id = RemapOldStringID(o->string_id);
switch(o->type) {
case VEH_Train:
n->u.rail.track = o->u.rail.track;
@ -864,7 +864,7 @@ static void FixPlayer(Player *n, OldPlayer *o, int num, byte town_name_type)
{
int i, j;
int x = 0;
do {
n->name_1 = RemapOldStringID(o->name_1);
n->name_2 = o->name_2;
@ -882,15 +882,15 @@ static void FixPlayer(Player *n, OldPlayer *o, int num, byte town_name_type)
if (o->name_1 != 0)
n->is_active = true;
n->face = o->face;
n->president_name_1 = o->pres_name_1;
n->president_name_2 = o->pres_name_2;
n->money64 = n->player_money = o->money;
n->current_loan = o->loan;
// Correct money for scenario loading.
// Correct money for scenario loading.
// It's always 893288 pounds (and no loan), if not corrected
if(o->money==0xda168)
n->money64 = n->player_money = n->current_loan =100000;
@ -905,7 +905,7 @@ static void FixPlayer(Player *n, OldPlayer *o, int num, byte town_name_type)
n->bankrupt_value = o->bankrupt_value;
n->bankrupt_timeout = o->bankrupt_timeout;
n->cargo_types = o->cargo_types;
for(i=0; i!=3; i++)
for(j=0; j!=13; j++)
n->yearly_expenses[i][j] = o->expenses[i].cost[j];
@ -916,7 +916,7 @@ static void FixPlayer(Player *n, OldPlayer *o, int num, byte town_name_type)
n->last_build_coordinate = o->last_build_coordinate;
n->num_valid_stat_ent = o->num_valid_stat_ent;
/* Not good, since AI doesn't have a vehicle assigned as
/* Not good, since AI doesn't have a vehicle assigned as
* in p->ai.cur_veh and thus will crash on certain actions.
* Best is to set state to AiStateVehLoop (2)
* n->ai.state = o->ai_state;
@ -927,18 +927,18 @@ static void FixPlayer(Player *n, OldPlayer *o, int num, byte town_name_type)
n->ai.timeout_counter = o->ai_timeout_counter;
n->ai.banned_tile_count = o->ai_banned_tile_count;
n->ai.railtype_to_use = o->ai_railtype_to_use;
FixAiBuildRec(&n->ai.src, &o->ai_src);
FixAiBuildRec(&n->ai.dst, &o->ai_dst);
FixAiBuildRec(&n->ai.mid1, &o->ai_mid1);
FixAiBuildRec(&n->ai.mid2, &o->ai_mid2);
n->ai.cargo_type = o->ai_cargo_type;
n->ai.num_wagons = o->ai_num_wagons;
n->ai.num_build_rec = o->ai_num_build_rec;
n->ai.num_loco_to_build = o->ai_num_loco_to_build;
n->ai.num_want_fullload = o->ai_num_want_fullload;
for(i=0; i!=9; i++) n->ai.wagon_list[i] = o->ai_wagonlist[i];
memcpy(n->ai.order_list_blocks, o->ai_order_list_blocks, 20);
n->ai.start_tile_a = o->ai_start_tile_a;
@ -949,7 +949,7 @@ static void FixPlayer(Player *n, OldPlayer *o, int num, byte town_name_type)
n->ai.start_dir_b = o->ai_start_dir_b;
n->ai.cur_dir_a = o->ai_cur_dir_a;
n->ai.cur_dir_b = o->ai_cur_dir_b;
for(i=0; i!=16; i++) {
n->ai.banned_tiles[i] = o->banned_tiles[i].tile;
n->ai.banned_val[i] = o->banned_tiles[i].data;
@ -1081,7 +1081,7 @@ bool LoadOldSaveGame(const char *file)
for(i=0; i!=256*256; i++) {
if (IS_TILETYPE(i, MP_RAILWAY) && (_map5[i] & 0xC0) == 0x40) {
// this byte is always zero in real ttd.
if (_map3_hi[i]) {
if (_map3_hi[i]) {
// convert ttdpatch presignal format to openttd presignal format.
_map3_hi[i] = (_map3_hi[i] >> 1) & 7;
}
@ -1098,7 +1098,7 @@ bool LoadOldSaveGame(const char *file)
FixDepot(_depots, m->depots, lengthof(m->depots));
FixVehicle(_vehicles, m->vehicles, lengthof(m->vehicles));
FixSubsidy(_subsidies, m->subsidies, lengthof(m->subsidies));
FixPlayer(_players, m->players, lengthof(m->players), m->town_name_type);
FixName(m->names, lengthof(m->names));
FixSign(_sign_list, m->signs, lengthof(m->signs));
@ -1154,7 +1154,7 @@ bool LoadOldSaveGame(const char *file)
_cargo_payment_rates[i] = -(int32)m->cargo_payment_rates[i].price;
_cargo_payment_rates_frac[i] = m->cargo_payment_rates[i].frac;
}
free(m);
fclose(lss.fin);
return true;

View File

@ -23,7 +23,7 @@ int32 CmdInsertOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// for ships, make sure that the station is not too far away from the previous destination.
if (v->type == VEH_Ship && IS_HUMAN_PLAYER(v->owner) &&
sel != 0 && ((t=v->schedule_ptr[sel-1])&OT_MASK) == OT_GOTO_STATION) {
int dist = GetTileDist(DEREF_STATION(t >> 8)->xy, DEREF_STATION(p2 >> 8)->xy);
if (dist >= 130)
return_cmd_error(STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO);
@ -39,7 +39,7 @@ int32 CmdInsertOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
s1[0] = (uint16)p2;
s1 = v->schedule_ptr;
FOR_ALL_VEHICLES(u) {
if (u->type != 0 && u->schedule_ptr != NULL) {
if (s1 < u->schedule_ptr) {
@ -69,10 +69,10 @@ static int32 DecloneOrder(Vehicle *dst, uint32 flags)
if (flags & DC_EXEC) {
DeleteVehicleSchedule(dst);
dst->num_orders = 0;
*(dst->schedule_ptr = _ptr_to_next_order++) = 0;
InvalidateWindow(WC_VEHICLE_ORDERS, dst->index);
}
return 0;
@ -92,7 +92,7 @@ int32 CmdDeleteOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) {
uint16 *s1;
s1 = &v->schedule_ptr[sel];
// copy all orders to get rid of the hole
@ -119,7 +119,7 @@ int32 CmdDeleteOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
}
}
}
return 0;
}
@ -133,7 +133,7 @@ int32 CmdSkipOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
byte b = v->cur_order_index + 1;
if (b >= v->num_orders) b = 0;
v->cur_order_index = b;
if (v->type == VEH_Train)
v->u.rail.days_since_order_progr = 0;
}
@ -160,7 +160,7 @@ int32 CmdModifyOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return CMD_ERROR;
sched = &v->schedule_ptr[sel];
if (!((*sched & OT_MASK) == OT_GOTO_STATION ||
if (!((*sched & OT_MASK) == OT_GOTO_STATION ||
((*sched & OT_MASK) == OT_GOTO_DEPOT && (p2>>8) != 1)))
return CMD_ERROR;
@ -185,9 +185,9 @@ int32 CmdModifyOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (v->schedule_ptr == sched)
InvalidateWindow(WC_VEHICLE_ORDERS, v->index);
}
}
return 0;
}
@ -204,12 +204,12 @@ int32 CmdModifyOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 CmdCloneOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *dst = &_vehicles[p1 & 0xFFFF];
if (!(dst->type && dst->owner == _current_player))
return CMD_ERROR;
switch(p2) {
// share vehicle orders?
case 0: {
Vehicle *src = &_vehicles[p1 >> 16];
@ -217,7 +217,7 @@ int32 CmdCloneOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// sanity checks
if (!(src->owner == _current_player && dst->type == src->type && dst != src))
return CMD_ERROR;
// let's see what happens with road vehicles
if (src->type == VEH_Road) {
if (src->cargo_type != dst->cargo_type && (src->cargo_type == CT_PASSENGERS || dst->cargo_type == CT_PASSENGERS))
@ -243,14 +243,14 @@ int32 CmdCloneOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// sanity checks
if (!(src->owner == _current_player && dst->type == src->type && dst != src))
return CMD_ERROR;
// let's see what happens with road vehicles
if (src->type == VEH_Road) {
uint16 ord;
int i;
Station *st;
TileIndex required_dst;
for (i=0; (ord = src->schedule_ptr[i]) != 0; i++) {
if ( ( ord & OT_MASK ) == OT_GOTO_STATION ) {
st = DEREF_STATION(ord >> 8);
@ -292,7 +292,7 @@ void BackupVehicleOrders(Vehicle *v, BackuppedOrders *bak)
bak->orderindex = v->cur_order_index;
bak->service_interval = v->service_interval;
if ((v->string_id & 0xF800) != 0x7800) {
bak->name[0] = 0;
} else {
@ -306,7 +306,7 @@ void BackupVehicleOrders(Vehicle *v, BackuppedOrders *bak)
os[1] = u->index;
return;
}
sched = v->schedule_ptr;
do {
ord = *sched++;
@ -325,7 +325,7 @@ void RestoreVehicleOrders(Vehicle *v, BackuppedOrders *bak)
}
DoCommandP(0, v->index, bak->orderindex|(bak->service_interval<<16) , NULL, CMD_RESTORE_ORDER_INDEX | CMD_ASYNC);
os = bak->order;
if (os[0] == 0xFFFF) {
DoCommandP(0, v->index | os[1]<<16, 0, NULL, CMD_CLONE_ORDER);
@ -359,7 +359,7 @@ int CheckOrders(Vehicle *v)
{
if (!_patches.order_review_system) //User doesn't want things to be checked
return 0;
if ( (_patches.order_review_system == 1) && (v->vehstatus & VS_STOPPED) )
return 0;
@ -401,17 +401,17 @@ int CheckOrders(Vehicle *v)
if ( (v->schedule_ptr[0] == v->schedule_ptr[i-2]) && ( i-2 != 0 ) ) {
problem_type = 2;
}
if (n_st < 2) problem_type = 0;
if (!required_tile) problem_type = 3;
SET_DPARAM16(0, v->unitnumber);
message = (STR_TRAIN_HAS_TOO_FEW_ORDERS) + (((v->type) - VEH_Train) << 2) + problem_type;
if (problem_type < 0) return 0;
AddNewsItem(
message,
NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),

View File

@ -58,7 +58,7 @@ static void DrawOrdersWindow(Window *w)
SetVScrollCount(w, num+1);
sel = OrderGetSel(w);
SET_DPARAM16(2,STR_8827_FULL_LOAD);
switch(v->schedule_ptr[sel] & 0x1F) {
case OT_GOTO_STATION:
@ -70,7 +70,7 @@ static void DrawOrdersWindow(Window *w)
default:
SETBIT(w->disabled_state, 6); /* nonstop */
SETBIT(w->disabled_state, 8); /* full load */
SETBIT(w->disabled_state, 9); /* unload */
SETBIT(w->disabled_state, 9); /* unload */
}
SET_DPARAM16(0, v->string_id);
@ -82,11 +82,11 @@ static void DrawOrdersWindow(Window *w)
i = 0;
for(;;) {
str = ((byte)v->cur_order_index == i) ? STR_8805 : STR_8804;
ord = v->schedule_ptr[i];
if ( (uint)(i - w->vscroll.pos) < 6) {
if (ord == 0) {
str = shared_schedule ? STR_END_OF_SHARED_ORDERS : STR_882A_END_OF_ORDERS;
} else {
@ -149,7 +149,7 @@ static void *FindVehicleCallb(Vehicle *v, FindVehS *f)
{
if (v->tile != f->tile || v->owner != f->owner || v->vehstatus & VS_HIDDEN ) return NULL;
return v;
}
}
Vehicle *GetVehicleOnTile(TileIndex tile, byte owner)
{
@ -231,7 +231,7 @@ static bool HandleOrderVehClick(Vehicle *v, Vehicle *u, Window *w)
// v is vehicle getting orders. Only copy/clone orders if vehicle doesn't have any orders yet
// obviously if you press CTRL on a non-empty orders vehicle you know what you are doing
if (v->num_orders != 0 && _ctrl_pressed == 0) {return false;}
if (DoCommandP(v->tile, v->index | (u->index << 16), _ctrl_pressed ? 0 : 1, NULL,
_ctrl_pressed ? CMD_CLONE_ORDER | CMD_MSG(STR_CANT_SHARE_ORDER_LIST) : CMD_CLONE_ORDER | CMD_MSG(STR_CANT_COPY_ORDER_LIST))) {
WP(w,order_d).sel = -1;
@ -245,7 +245,7 @@ static void OrdersPlaceObj(Vehicle *v, uint tile, Window *w)
{
uint cmd;
Vehicle *u;
// check if we're clicking on a vehicle first.. clone orders in that case.
u = CheckMouseOverVehicle();
if (u && HandleOrderVehClick(v, u, w))
@ -273,7 +273,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
Vehicle *v = &_vehicles[w->window_number];
int mode;
switch(e->click.widget) {
case 2: {/* orders list */
case 2: {/* orders list */
int sel;
sel = (e->click.pt.y - 15) / 10;
@ -298,7 +298,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
if (xy)
ScrollMainWindowToTile(xy);
return;
}
@ -383,7 +383,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
HandleOrderVehClick(&_vehicles[w->window_number], v, w);
}
} break;
}
}
@ -556,7 +556,7 @@ void ShowOrdersWindow(Vehicle *v)
DeleteWindowById(WC_VEHICLE_ORDERS, veh);
DeleteWindowById(WC_VEHICLE_DETAILS, veh);
_alloc_wnd_parent_num = veh;
w = AllocateWindowDesc(
_order_window_desc[(v->type - VEH_Train)*2 + (v->owner != _local_player)]);

View File

@ -37,7 +37,7 @@ static bool TPFSetTileBit(TrackPathFinder *tpf, uint tile, int dir)
return true;
} else {
/* two tiles with the same hash, need to make a link */
/* allocate a link. if out of links, handle this by returning
* that a tile was already visisted. */
if (tpf->num_links_left == 0)
@ -51,7 +51,7 @@ static bool TPFSetTileBit(TrackPathFinder *tpf, uint tile, int dir)
tpf->hash_tile[hash] = PATHFIND_GET_LINK_OFFS(tpf, link);
link->flags = tpf->hash_head[hash];
tpf->hash_head[hash] = 0xFFFF; /* multi link */
tpf->hash_head[hash] = 0xFFFF; /* multi link */
link->next = 0xFFFF;
}
@ -59,7 +59,7 @@ static bool TPFSetTileBit(TrackPathFinder *tpf, uint tile, int dir)
/* a linked list of many tiles,
* find the one corresponding to the tile, if it exists.
* otherwise make a new link */
offs = tpf->hash_tile[hash];
do {
link = PATHFIND_GET_LINK_PTR(tpf, offs);
@ -74,7 +74,7 @@ static bool TPFSetTileBit(TrackPathFinder *tpf, uint tile, int dir)
}
} while ((offs=link->next) != 0xFFFF);
}
/* get here if we need to add a new link to link,
* first, allocate a new link, in the same way as before */
if (tpf->num_links_left == 0)
@ -130,12 +130,12 @@ void TPFMode2(TrackPathFinder *tpf, uint tile, int direction)
// This addition will sometimes overflow by a single tile.
// The use of TILE_MASK here makes sure that we still point at a valid
// tile, and then this tile will be in the sentinel row/col, so GetTileTrackStatus will fail.
// tile, and then this tile will be in the sentinel row/col, so GetTileTrackStatus will fail.
tile = TILE_MASK(tile + _tileoffs_by_dir[direction]);
if (++tpf->rd.cur_length > 50)
return;
bits = GetTileTrackStatus(tile, tpf->tracktype);
bits = (byte)((bits | (bits >> 8)) & _bits_mask[direction]);
if (bits == 0)
@ -161,7 +161,7 @@ void TPFMode2(TrackPathFinder *tpf, uint tile, int direction)
// Change direction 4 times only
if ((byte)i != tpf->rd.pft_var6) {
if(++tpf->rd.depth > 4) {
tpf->rd = rd;
tpf->rd = rd;
return;
}
tpf->rd.pft_var6 = (byte)i;
@ -169,7 +169,7 @@ void TPFMode2(TrackPathFinder *tpf, uint tile, int direction)
continue_here:;
tpf->the_dir = HASBIT(_otherdir_mask[direction],i) ? (i+8) : i;
#ifdef DEBUG_TILE_PUSH
dbg_push_tile(tile, tpf->the_dir);
#endif
@ -265,7 +265,7 @@ void TPFMode1(TrackPathFinder *tpf, uint tile, int direction)
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xF0)==0) {
if ((_map5[tile] & 3) != direction || ((_map5[tile]>>1)&6) != tpf->tracktype)
return;
tile = SkipToEndOfTunnel(tpf, tile, direction);
tile = SkipToEndOfTunnel(tpf, tile, direction);
}
tile += _tileoffs_by_dir[direction];
tpf->rd.cur_length++;
@ -286,7 +286,7 @@ void TPFMode1(TrackPathFinder *tpf, uint tile, int direction)
tpf->the_dir = (_otherdir_mask[direction] & (byte)(1 << i)) ? (i+8) : i;
rd = tpf->rd;
#ifdef DEBUG_TILE_PUSH
dbg_push_tile(tile, tpf->the_dir);
#endif
@ -304,12 +304,12 @@ void TPFMode1(TrackPathFinder *tpf, uint tile, int direction)
/* the next is only used when signals are checked.
* seems to go in 2 directions simultaneously */
/* if i can get rid of this, tail end recursion can be used to minimize
* stack space dramatically. */
* stack space dramatically. */
if (tpf->hasbit_13)
return;
tile = tile_org;
direction ^= 2;
@ -327,7 +327,7 @@ void TPFMode1(TrackPathFinder *tpf, uint tile, int direction)
do {
i = FIND_FIRST_BIT(bits);
bits = KILL_FIRST_BIT(bits);
tpf->the_dir = (_otherdir_mask[direction] & (byte)(1 << i)) ? (i+8) : i;
rd = tpf->rd;
if (TPFSetTileBit(tpf, tile, tpf->the_dir) &&
@ -344,16 +344,16 @@ void FollowTrack(uint tile, uint16 flags, byte direction, TPFEnumProc *enum_proc
assert(direction < 4);
/* initialize path finder variables */
/* initialize path finder variables */
tpf->userdata = data;
tpf->enum_proc = enum_proc;
tpf->enum_proc = enum_proc;
tpf->new_link = tpf->links;
tpf->num_links_left = 0x400;
tpf->rd.cur_length = 0;
tpf->rd.depth = 0;
tpf->rd.pft_var6 = 0;
tpf->var2 = HASBIT(flags, 15) ? 0x43 : 0xFF; /* 0x8000 */
tpf->disable_tile_hash = HASBIT(flags, 12) != 0; /* 0x1000 */
@ -362,10 +362,10 @@ void FollowTrack(uint tile, uint16 flags, byte direction, TPFEnumProc *enum_proc
tpf->tracktype = (byte)flags;
if (HASBIT(flags, 11)) {
if (HASBIT(flags, 11)) {
tpf->rd.pft_var6 = 0xFF;
tpf->enum_proc(tile, data, 0, 0, 0);
TPFMode2(tpf, tile, direction);
TPFMode2(tpf, tile, direction);
} else {
/* clear the hash_heads */
memset(tpf->hash_head, 0, sizeof(tpf->hash_head));
@ -373,7 +373,7 @@ void FollowTrack(uint tile, uint16 flags, byte direction, TPFEnumProc *enum_proc
}
if (after_proc != NULL)
after_proc(tpf);
after_proc(tpf);
}
typedef struct {
@ -439,10 +439,10 @@ static void INLINE HeapifyUp(NewTrackPathFinder *tpf)
{
StackedItem si;
int i = ++tpf->nstack;
while (i != 1 && ARR(i).cur_length < ARR(i>>1).cur_length) {
// the child element is larger than the parent item.
// swap the child item and the parent item.
// swap the child item and the parent item.
si = ARR(i); ARR(i) = ARR(i>>1); ARR(i>>1) = si;
i>>=1;
}
@ -462,13 +462,13 @@ static void INLINE HeapifyDown(NewTrackPathFinder *tpf)
while ((j=i*2) <= n) {
// figure out which is smaller of the children.
if (j != n && ARR(j).cur_length > ARR(j+1).cur_length)
if (j != n && ARR(j).cur_length > ARR(j+1).cur_length)
j++; // right item is smaller
assert(i <= n && j <= n);
if (ARR(i).cur_length <= ARR(j).cur_length)
break; // base elem smaller than smallest, done!
// swap parent with the child
si = ARR(i); ARR(i) = ARR(j); ARR(j) = si;
i = j;
@ -484,7 +484,7 @@ static bool NtpVisit(NewTrackPathFinder *tpf, uint tile, uint dir, uint length)
HashLink *link, *new_link;
assert(length < 1024);
hash = PATHFIND_HASH_TILE(tile);
// never visited before?
@ -496,10 +496,10 @@ static bool NtpVisit(NewTrackPathFinder *tpf, uint tile, uint dir, uint length)
if (head != 0xffff) {
if ( (TileIndex)tile == tpf->hash_tile[hash] && (head & 0x3) == dir ) {
// longer length
if (length >= (head >> 2)) return false;
tpf->hash_head[hash] = dir | (length << 2);
return true;
}
@ -517,13 +517,13 @@ static bool NtpVisit(NewTrackPathFinder *tpf, uint tile, uint dir, uint length)
tpf->hash_tile[hash] = NTP_GET_LINK_OFFS(tpf, link);
link->typelength = tpf->hash_head[hash];
tpf->hash_head[hash] = 0xFFFF; /* multi link */
tpf->hash_head[hash] = 0xFFFF; /* multi link */
link->next = 0xFFFF;
} else {
// a linked list of many tiles,
// find the one corresponding to the tile, if it exists.
// otherwise make a new link
uint offs = tpf->hash_tile[hash];
do {
link = NTP_GET_LINK_PTR(tpf, offs);
@ -534,7 +534,7 @@ static bool NtpVisit(NewTrackPathFinder *tpf, uint tile, uint dir, uint length)
}
} while ((offs=link->next) != 0xFFFF);
}
/* get here if we need to add a new link to link,
* first, allocate a new link, in the same way as before */
if (tpf->num_links_left == 0)
@ -613,7 +613,7 @@ restart:
for(;;) {
tile += _tileoffs_by_dir[direction];
// too long search length? bail out.
if (++si.cur_length >= tpf->maxlength)
goto popnext;
@ -628,7 +628,7 @@ restart:
// regular rail tile, determine the tracks that are actually reachable.
bits &= _bits_mask[direction];
if (bits == 0) goto popnext; // no tracks there? stop searching.
// complex tile?, let the generic handler handle that..
if (KILL_FIRST_BIT(bits) != 0) break;
@ -656,16 +656,16 @@ restart:
// too high recursion depth.. bail out..
if (si.depth >= _patches.pf_maxdepth)
goto popnext;
si.depth++; // increase recursion depth.
// see if this tile was already visited..?
if (NtpVisit(tpf, tile, direction, si.cur_length)) {
// push all possible alternatives
// push all possible alternatives
si.tile = tile;
do {
si.track = _new_track[FIND_FIRST_BIT(bits)][direction];
// out of stack items, bail out?
if (tpf->nstack >= lengthof(tpf->stack))
break;
@ -678,11 +678,11 @@ restart:
// also randomize the order in which we search through them.
if (si.depth == 1) {
uint32 r = Random();
assert(tpf->nstack == 2 || tpf->nstack == 3);
if (r&1) swap_byte(&tpf->stack[0].track, &tpf->stack[1].track);
assert(tpf->nstack == 2 || tpf->nstack == 3);
if (r&1) swap_byte(&tpf->stack[0].track, &tpf->stack[1].track);
if (tpf->nstack != 2) {
byte t = tpf->stack[2].track;
if (r&2) swap_byte(&tpf->stack[0].track, &t);
if (r&2) swap_byte(&tpf->stack[0].track, &t);
if (r&4) swap_byte(&tpf->stack[1].track, &t);
tpf->stack[2].first_track = tpf->stack[2].track = t;
}
@ -702,7 +702,7 @@ popnext:
!NtpCheck(tpf, tile, _tpf_prev_direction[si.track], si.cur_length) || // already have better path to that tile?
tpf->enum_proc(tile, tpf->userdata, si.track, si.cur_length, &si.state)
);
direction = _tpf_new_direction[si.track];
goto restart;
}
@ -718,7 +718,7 @@ void NewTrainPathfind(uint tile, byte direction, TPFEnumProc *enum_proc, void *d
tpf = alloca(sizeof(NewTrackPathFinder));
tpf->userdata = data;
tpf->enum_proc = enum_proc;
tpf->enum_proc = enum_proc;
tpf->tracktype = 0;
tpf->maxlength = _patches.pf_maxlength;
tpf->nstack = 0;

View File

@ -128,17 +128,17 @@ static void BuildRoadClick_Raise(Window *w)
static void BuildRoadClick_Depot(Window *w)
{
if (HandlePlacePushButton(w, 7, 0x511, 1, PlaceRoad_Depot)) ShowRoadDepotPicker();
if (HandlePlacePushButton(w, 7, 0x511, 1, PlaceRoad_Depot)) ShowRoadDepotPicker();
}
static void BuildRoadClick_BusStation(Window *w)
{
if (HandlePlacePushButton(w, 8, 0xAA5, 1, PlaceRoad_BusStation)) ShowBusStationPicker();
if (HandlePlacePushButton(w, 8, 0xAA5, 1, PlaceRoad_BusStation)) ShowBusStationPicker();
}
static void BuildRoadClick_TruckStation(Window *w)
{
if (HandlePlacePushButton(w, 9, 0xAA6, 1, PlaceRoad_TruckStation)) ShowTruckStationPicker();
if (HandlePlacePushButton(w, 9, 0xAA6, 1, PlaceRoad_TruckStation)) ShowTruckStationPicker();
}
static void BuildRoadClick_Bridge(Window *w)
@ -244,7 +244,7 @@ static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) {
} else {
sel_method = VPM_X_OR_Y;
}
VpSelectTilesWithMethod(e->place.pt.x, e->place.pt.y, sel_method);
return;
}
@ -257,8 +257,8 @@ static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) {
ResetObjectToPlace();
ShowBuildBridgeWindow(start_tile, end_tile, 0x80);
} else if (e->place.userdata != 4) {
DoCommandP(end_tile, start_tile, _place_road_flag, CcPlaySound1D,
_remove_button_clicked ?
DoCommandP(end_tile, start_tile, _place_road_flag, CcPlaySound1D,
_remove_button_clicked ?
CMD_REMOVE_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1805_CAN_T_REMOVE_ROAD_FROM) :
CMD_BUILD_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1804_CAN_T_BUILD_ROAD_HERE));
} else {
@ -363,9 +363,9 @@ static void BuildRoadDepotWndProc(Window *w, WindowEvent *e) {
SndPlayFx(0x13);
SetWindowDirty(w);
break;
}
}
} break;
case WE_MOUSELOOP:
if (WP(w,def_d).close)
DeleteWindow(w);
@ -445,7 +445,7 @@ static void RoadStationPickerWndProc(Window *w, WindowEvent *e) {
break;
}
} break;
case WE_MOUSELOOP: {
if (WP(w,def_d).close) {
DeleteWindow(w);
@ -454,7 +454,7 @@ static void RoadStationPickerWndProc(Window *w, WindowEvent *e) {
CheckRedrawStationCoverage(w);
} break;
}
}
}
static const Widget _bus_station_picker_widgets[] = {

View File

@ -38,7 +38,7 @@ static const byte _roadveh_spritenum[88] = {
0, 17, 17, 34, 51, 51, 51, 1,
18, 35, 2, 19, 36, 57, 57, 57,
3, 20, 37, 4, 21, 38, 5, 22,
39, 6, 23, 40, 7, 24, 41, 8,
25, 42, 9, 26, 43, 10, 27, 44,
11, 28, 45, 12, 29, 46, 13, 30,
@ -47,7 +47,7 @@ static const byte _roadveh_spritenum[88] = {
33, 50, 52, 52, 52, 53, 53, 53,
54, 54, 54, 55, 55, 55, 56, 56,
56, 58, 58, 58, 59, 59, 59, 60,
60, 60, 61, 61, 61, 62, 62, 62,
60, 60, 61, 61, 61, 62, 62, 62,
};
const byte _roadveh_speed[88] = {
@ -164,7 +164,7 @@ int GetRoadVehImage(Vehicle *v, byte direction)
img = _engine_original_sprites[v->engine_type];
}
#endif
image = direction + _roadveh_images[img];
if (v->cargo_count >= (v->cargo_cap >> 1))
image += _roadveh_full_adder[img];
@ -186,7 +186,7 @@ void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw)
SET_DPARAM16(4, _roadveh_capacity[engine]);
SET_DPARAM16(3, _cargoc.names_long_p[_roadveh_cargo_type[engine]]);
DrawStringMultiCenter(x, y, STR_902A_COST_SPEED_RUNNING_COST, maxw);
}
@ -202,7 +202,7 @@ int32 CmdBuildRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2)
byte unit_num;
uint tile = TILE_FROM_XY(x,y);
Engine *e;
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
cost = EstimateRoadVehCost(p1);
@ -256,7 +256,7 @@ int32 CmdBuildRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->reliability_spd_dec = e->reliability_spd_dec;
v->max_age = e->lifelength * 366;
_new_roadveh_id = v->index;
v->string_id = STR_SV_ROADVEH_NAME;
*(v->schedule_ptr = _ptr_to_next_order++) = 0;
@ -303,7 +303,7 @@ int32 CmdSellRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2)
Vehicle *v;
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
v = &_vehicles[p1];
if (v->type != VEH_Road || !CheckOwnership(v->owner))
@ -311,7 +311,7 @@ int32 CmdSellRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!IsRoadDepotTile(v->tile) || v->u.road.state != 254 || !(v->vehstatus&VS_STOPPED))
return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
if (flags & DC_EXEC) {
// Invalidate depot
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
@ -321,7 +321,7 @@ int32 CmdSellRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2)
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
DeleteVehicle(v);
}
return -(int32)v->value;
}
@ -351,7 +351,7 @@ static bool EnumRoadSignalFindDepot(uint tile, RoadFindDepotData *rfdd, int trac
if (IS_TILETYPE(tile, MP_STREET) &&
(_map5[tile] & 0xF0) == 0x20 &&
_map_owner[tile] == rfdd->owner) {
if (length < rfdd->best_length) {
rfdd->best_length = length;
rfdd->tile = tile;
@ -365,7 +365,7 @@ static int FindClosestRoadDepot(Vehicle *v)
uint tile = v->tile;
int i;
RoadFindDepotData rfdd;
if (v->u.road.state == 255) { tile = GetVehicleOutOfTunnelTile(v); }
rfdd.owner = v->owner;
@ -409,7 +409,7 @@ int32 CmdSendRoadVehToDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->dest_tile = _depots[depot].xy;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
return 0;
}
@ -430,10 +430,10 @@ int32 CmdTurnRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_error_message = STR_EMPTY;
return CMD_ERROR;
}
if (flags & DC_EXEC) {
v->u.road.reverse_ctr = 180;
}
}
return 0;
}
@ -495,10 +495,10 @@ static void ClearCrashedStation(Vehicle *v)
// mark station as not busy
bb &= ~0x80;
// free parking bay
bb |= (v->u.road.state&0x02)?2:1;
*b = bb;
}
@ -506,17 +506,17 @@ static void RoadVehDelete(Vehicle *v)
{
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
_vehicle_sort_dirty[VEHROAD] = true; // delete bus/truck (eg. crash for example)
InvalidateWindow(WC_ROADVEH_LIST, v->owner);
InvalidateWindow(WC_COMPANY, v->owner);
if(IS_TILETYPE(v->tile, MP_STATION))
ClearCrashedStation(v);
BeginVehicleMove(v);
EndVehicleMove(v);
DeleteVehicle(v);
}
@ -531,7 +531,7 @@ static byte SetRoadVehPosition(Vehicle *v, int x, int y)
old_z = v->z_pos;
v->z_pos = new_z;
VehiclePositionChanged(v);
EndVehicleMove(v);
return old_z;
@ -621,10 +621,10 @@ static void HandleBrokenRoadVeh(Vehicle *v)
if (v->breakdowns_since_last_service != 255)
v->breakdowns_since_last_service++;
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
SndPlayVehicleFx((_opt.landscape != LT_CANDY) ? 0xD : 0x34, v);
if (!(v->vehstatus & VS_HIDDEN)) {
@ -693,7 +693,7 @@ static void HandleRoadVehLoading(Vehicle *v)
{
if (v->next_order == OT_NOTHING)
return;
if (v->next_order != OT_DUMMY) {
if ((v->next_order&OT_MASK) != OT_LOADING)
return;
@ -709,7 +709,7 @@ static void HandleRoadVehLoading(Vehicle *v)
}
return;
}
{
byte b = v->next_order;
v->next_order = OT_LEAVESTATION;
@ -737,16 +737,16 @@ typedef struct RoadVehFindData {
void *EnumCheckRoadVehClose(Vehicle *v, RoadVehFindData *rvf)
{
static const short _dists[] = {
static const short _dists[] = {
-4, -8, -4, -1, 4, 8, 4, 1,
-4, -1, 4, 8, 4, 1, -4, -8,
};
short x_diff = v->x_pos - rvf->x;
short y_diff = v->y_pos - rvf->y;
if (rvf->veh == v ||
v->type != VEH_Road ||
if (rvf->veh == v ||
v->type != VEH_Road ||
v->u.road.state == 254 ||
myabs(v->z_pos - rvf->veh->z_pos) > 6 ||
v->direction != rvf->dir ||
@ -766,13 +766,13 @@ static Vehicle *RoadVehFindCloseTo(Vehicle *v, int x, int y, byte dir)
if (v->u.road.reverse_ctr != 0)
return NULL;
rvf.x = x;
rvf.y = y;
rvf.dir = dir;
rvf.veh = v;
u = VehicleFromPos(TILE_FROM_XY(x,y), &rvf, (VehicleFromPosProc*)EnumCheckRoadVehClose);
// This code protects a roadvehicle from being blocked for ever
// If more then 1480 / 74 days a road vehicle is blocked, it will
// drive just through it. The ultimate backup-code of TTD.
@ -784,7 +784,7 @@ static Vehicle *RoadVehFindCloseTo(Vehicle *v, int x, int y, byte dir)
if (++v->u.road.unk2 > 1480)
return NULL;
return u;
}
@ -825,13 +825,13 @@ static bool RoadVehAccelerate(Vehicle *v)
{
uint spd = v->cur_speed + 1 + ((v->u.road.overtaking != 0)?1:0);
byte t;
// Clamp
spd = min(spd, v->max_speed);
//updates statusbar only if speed have changed to save CPU time
if (spd != v->cur_speed) {
v->cur_speed = spd;
v->cur_speed = spd;
if (_patches.vehicle_speed)
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
@ -858,7 +858,7 @@ static byte RoadVehGetNewDirection(Vehicle *v, int x, int y)
1, 0, 5, 0,
2, 3, 4
};
x = x - v->x_pos + 1;
y = y - v->y_pos + 1;
@ -878,7 +878,7 @@ static byte RoadVehGetSlidingDirection(Vehicle *v, int x, int y)
if (b==d) return d;
if (b==((d-1)&7)) return d;
if (b==((d-2)&7)) return d;
return (d+2)&7;
return (d+2)&7;
}
typedef struct OvertakeData {
@ -890,11 +890,11 @@ typedef struct OvertakeData {
void *EnumFindVehToOvertake(Vehicle *v, OvertakeData *od)
{
if (v->tile != (TileIndex)od->tile ||
v->type != VEH_Road ||
v == od->u ||
v->type != VEH_Road ||
v == od->u ||
v == od->v)
return NULL;
return v;
return v;
}
static bool FindRoadVehToOvertake(OvertakeData *od)
@ -1078,7 +1078,7 @@ do_it:;
if (desttile == tile && bitmask&_road_pf_table_3[m5&3]) {
return_track(FindFirstBit2x64(bitmask&_road_pf_table_3[m5&3]));
}
}
}
}
// do pathfind
frd.dest = desttile;
@ -1107,7 +1107,7 @@ found_best_track:;
if (HASBIT(signal, best_track))
return -1;
return best_track;
return best_track;
}
typedef struct RoadDriveEntry {
@ -1173,13 +1173,13 @@ static void RoadVehEventHandler(Vehicle *v)
byte rd2;
v->cur_speed = 0;
dir = _map5[v->tile]&3;
v->direction = dir*2+1;
rd2 = _roadveh_data_2[dir];
rdp = _road_drive_data[(_opt.road_side<<4) + rd2];
x = GET_TILE_X(v->tile)*16 + (rdp[6].x&0xF);
y = GET_TILE_Y(v->tile)*16 + (rdp[6].y&0xF);
@ -1193,7 +1193,7 @@ static void RoadVehEventHandler(Vehicle *v)
v->vehstatus &= ~VS_HIDDEN;
v->u.road.state = rd2;
v->u.road.frame = 6;
v->cur_image = GetRoadVehImage(v, v->direction);
UpdateRoadVehDeltaXY(v);
SetRoadVehPosition(v,x,y);
@ -1223,7 +1223,7 @@ static void RoadVehEventHandler(Vehicle *v)
if (IS_TILETYPE(gp.new_tile, MP_TUNNELBRIDGE) &&
(_map5[gp.new_tile]&0xF0) == 0 &&
(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y)&4)) {
//new_dir = RoadGetNewDirection(v, gp.x, gp.y)
v->cur_image = GetRoadVehImage(v, v->direction);
UpdateRoadVehDeltaXY(v);
@ -1353,7 +1353,7 @@ again:
x = (v->x_pos&~15)+(rd.x&15);
y = (v->y_pos&~15)+(rd.y&15);
new_dir = RoadVehGetSlidingDirection(v, x, y);
if (!IS_BYTE_INSIDE(v->u.road.state, 0x20, 0x30) && (u=RoadVehFindCloseTo(v, x, y, new_dir)) != NULL) {
@ -1383,7 +1383,7 @@ again:
if ( (v->next_order&OT_MASK) != OT_LEAVESTATION &&
(v->next_order&OT_MASK) != OT_GOTO_DEPOT) {
*b &= ~0x80;
v->last_station_visited = _map2[v->tile];
@ -1393,7 +1393,7 @@ again:
old_order = v->next_order;
v->next_order = OT_LOADING;
if ((old_order & OT_MASK) == OT_GOTO_STATION &&
if ((old_order & OT_MASK) == OT_GOTO_STATION &&
v->next_order_param == v->last_station_visited) {
v->next_order = OT_LOADING | OF_NON_STOP | (old_order & (OF_FULL_LOAD|OF_UNLOAD));
}
@ -1449,10 +1449,10 @@ void RoadVehEnterDepot(Vehicle *v)
MaybeRenewVehicle(v, EstimateRoadVehCost(v->engine_type));
if ((v->next_order&OT_MASK) == OT_GOTO_DEPOT) {
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
t = v->next_order;
v->next_order = OT_DUMMY;
@ -1504,7 +1504,7 @@ static void CheckIfRoadVehNeedsService(Vehicle *v)
if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
return;
// Don't interfere with a depot visit scheduled by the user, or a
// depot visit by the order list.
if ((v->next_order & OT_MASK) == OT_GOTO_DEPOT &&
@ -1527,7 +1527,7 @@ static void CheckIfRoadVehNeedsService(Vehicle *v)
v->next_order = OT_GOTO_DEPOT | OF_NON_STOP;
v->next_order_param = (byte)i;
v->dest_tile = (&_depots[i])->xy;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
void OnNewDay_RoadVeh(Vehicle *v)

View File

@ -51,7 +51,7 @@ static void RoadVehDetailsWndProc(Window *w, WindowEvent *e)
StringID str;
SET_DPARAM16(1, year);
str = STR_0199_YEAR;
if (year != 1) {
str++;
@ -97,7 +97,7 @@ static void RoadVehDetailsWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(1, 1920 + v->build_year);
SET_DPARAM32(2, v->value);
DrawString(34, 57, STR_9011_BUILT_VALUE, 0);
SET_DPARAM16(0, _cargoc.names_long_p[v->cargo_type]);
SET_DPARAM16(1, v->cargo_cap);
DrawString(34, 67, STR_9012_CAPACITY, 0);
@ -180,7 +180,7 @@ static void ShowRoadVehDetailsWindow(Vehicle *v)
VehicleID veh = v->index;
DeleteWindowById(WC_VEHICLE_ORDERS, veh);
DeleteWindowById(WC_VEHICLE_DETAILS, veh);
_alloc_wnd_parent_num = veh;
_alloc_wnd_parent_num = veh;
w = AllocateWindowDesc(&_roadveh_details_desc);
w->window_number = veh;
w->caption_color = v->owner;
@ -242,13 +242,13 @@ static void RoadVehViewWndProc(Window *w, WindowEvent *e)
DrawStringCentered(125, 105, str, 0);
DrawWindowViewport(w);
} break;
case WE_CLICK: {
Vehicle *v = &_vehicles[w->window_number];
switch(e->click.widget) {
case 4: /* start stop */
DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_ROADVEH | CMD_MSG(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE));
DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_ROADVEH | CMD_MSG(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE));
break;
case 5: /* center main view */
ScrollMainWindowTo(v->x_pos, v->y_pos);
@ -267,11 +267,11 @@ static void RoadVehViewWndProc(Window *w, WindowEvent *e)
break;
}
} break;
case WE_DESTROY:
DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
break;
break;
}
}
@ -348,7 +348,7 @@ static void DrawNewRoadVehWindow(Window *w)
DrawRoadVehEngine(x+29, y+6, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player)));
y += 14;
}
sel--;
sel--;
}
} while (++engine_id, ++e,--num);
@ -362,12 +362,12 @@ static void DrawNewRoadVehWindow(Window *w)
SET_DPARAM16(4, _roadveh_capacity[selected_id - ROAD_ENGINES_INDEX]);
SET_DPARAM16(3, _cargoc.names_long_p[_roadveh_cargo_type[selected_id - ROAD_ENGINES_INDEX]]);
e = &_engines[selected_id];
e = &_engines[selected_id];
SET_DPARAM16(6, e->lifelength);
SET_DPARAM8(7, e->reliability * 100 >> 16);
ConvertDayToYMD(&ymd, e->intro_date);
SET_DPARAM16(5, ymd.year + 1920);
DrawString(2, 127, STR_9008_COST_SPEED_RUNNING_COST, 0);
}
}
@ -419,7 +419,7 @@ static void NewRoadVehWndProc(Window *w, WindowEvent *e)
160,
w->window_class,
w->window_number);
break;
break;
}
break;
@ -436,8 +436,8 @@ static void NewRoadVehWndProc(Window *w, WindowEvent *e)
memcpy(_decode_parameters, b, 32);
DoCommandP(0, WP(w,buildtrain_d).rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(STR_9037_CAN_T_RENAME_ROAD_VEHICLE));
} break;
}
}
}
static const Widget _new_road_veh_widgets[] = {
@ -468,7 +468,7 @@ static void ShowBuildRoadVehWindow(TileIndex tile)
w = AllocateWindowDesc(&_new_road_veh_desc);
w->window_number = tile;
w->vscroll.cap = 8;
if (tile != 0) {
w->caption_color = _map_owner[tile];
} else {
@ -509,17 +509,17 @@ static void DrawRoadDepotWindow(Window *w)
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Road &&
v->u.road.state == 254 &&
v->u.road.state == 254 &&
v->tile == (TileIndex)tile &&
--num < 0 && num >= -15) {
DrawRoadVehImage(v, x+24, y, WP(w,traindepot_d).sel);
SET_DPARAM16(0, v->unitnumber);
DrawString(x, y+2, (uint16)(v->max_age-366) >= v->age ? STR_00E2 : STR_00E3, 0);
DrawSprite( (v->vehstatus & VS_STOPPED) ? 0xC12 : 0xC13, x + 16, y);
if ((x+=56) == 2+56*5) {
x = 2;
y += 14;
@ -534,7 +534,7 @@ static int GetVehicleFromRoadDepotWndPt(Window *w, int x, int y, Vehicle **veh)
TileIndex tile;
Vehicle *v;
int pos;
xt = x / 56;
xm = x % 56;
if (xt >= 5)
@ -549,7 +549,7 @@ static int GetVehicleFromRoadDepotWndPt(Window *w, int x, int y, Vehicle **veh)
tile = w->window_number;
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Road &&
v->u.road.state == 254 &&
v->u.road.state == 254 &&
v->tile == (TileIndex)tile &&
--pos < 0) {
*veh = v;
@ -611,7 +611,7 @@ static void RoadDepotWndProc(Window *w, WindowEvent *e)
case 2:
RoadDepotClickVeh(w, e->click.pt.x, e->click.pt.y);
break;
case 5:
ShowBuildRoadVehWindow(w->window_number);
break;
@ -621,7 +621,7 @@ static void RoadDepotWndProc(Window *w, WindowEvent *e)
break;
}
} break;
case WE_DESTROY:
DeleteWindowById(WC_BUILD_VEHICLE, w->window_number);
break;
@ -641,12 +641,12 @@ static void RoadDepotWndProc(Window *w, WindowEvent *e)
ShowRoadVehViewWindow(v);
}
} break;
case 3:
if (!HASBIT(w->disabled_state, 3) &&
WP(w,traindepot_d).sel != INVALID_VEHICLE) {
Vehicle *v;
HandleButtonClick(w, 3);
v = &_vehicles[WP(w,traindepot_d).sel];
@ -654,7 +654,7 @@ static void RoadDepotWndProc(Window *w, WindowEvent *e)
_backup_orders_tile = v->tile;
BackupVehicleOrders(v, _backup_orders_data);
if (!DoCommandP(v->tile, v->index, 0, NULL, CMD_SELL_ROAD_VEH | CMD_MSG(STR_9014_CAN_T_SELL_ROAD_VEHICLE)))
_backup_orders_tile = 0;
}
@ -693,7 +693,7 @@ static const WindowDesc _road_depot_desc = {
void ShowRoadDepotWindow(uint tile)
{
Window *w;
w = AllocateWindowDescFront(&_road_depot_desc, tile);
if (w) {
w->caption_color = _map_owner[w->window_number];
@ -730,7 +730,7 @@ static void MakeSortedRoadList(byte owner)
// roads are stored as a cummulative index, eg 25, 41, 43. This means
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2
for (i = &_num_road_sort[1]; i != endof(_num_road_sort); i++) {*i += *(i-1);}
// sort by owner, then only subsort the requested owner-vehicles
qsort(_road_sort, n, sizeof(_road_sort[0]), GeneralOwnerSorter);
@ -775,7 +775,7 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2 roads
i = (window_number == 0) ? 0 : _num_road_sort[window_number-1];
SetVScrollCount(w, _num_road_sort[window_number] - i);
/* draw the widgets */
{
Player *p = DEREF_PLAYER(window_number);
@ -818,7 +818,7 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
SET_DPARAM32(0, v->profit_this_year);
SET_DPARAM32(1, v->profit_last_year);
DrawString(x + 24, y + 18, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
if (v->string_id != STR_SV_ROADVEH_NAME) {
SET_DPARAM16(0, v->string_id);
DrawString(x+24, y, STR_01AB, 0);
@ -843,7 +843,7 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
return;
case 6: { /* Matrix to show vehicles */
uint32 id_v = (e->click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / PLY_WND_PRC__SIZE_OF_ROW_SMALL;
if (id_v >= w->vscroll.cap) { return;} // click out of bounds
id_v += w->vscroll.pos;
@ -868,15 +868,15 @@ static void PlayerRoadVehWndProc(Window *w, WindowEvent *e)
tile = _last_built_road_depot_tile;
do {
if (_map_owner[tile] == _local_player && IsRoadDepotTile(tile)) {
if (_map_owner[tile] == _local_player && IsRoadDepotTile(tile)) {
ShowRoadDepotWindow(tile);
ShowBuildRoadVehWindow(tile);
return;
}
tile = TILE_MASK(tile + 1);
} while(tile != _last_built_road_depot_tile);
ShowBuildRoadVehWindow(0);
} break;
}

View File

@ -88,7 +88,7 @@ static void SlWriteFill()
_sl.offs_base += len;
if (len) _sl.write_bytes(len);
}
// setup next buffer
_sl.bufp = _sl.buf;
_sl.bufe = _sl.buf + _sl.bufsize;
@ -203,7 +203,7 @@ int SlIterateArray()
{
int ind;
static uint32 next_offs;
// Must be at end of current block.
assert(next_offs == 0 || SlGetOffs() == next_offs);
@ -224,7 +224,7 @@ int SlIterateArray()
DEBUG(misc, 0) ("SlIterateArray: error\n");
return -1; // error
}
if (len != 0)
return ind;
}
@ -300,7 +300,7 @@ uint SlGetFieldLength()
static void SlSaveLoadConv(void *ptr, uint conv)
{
int64 x = 0;
if (_sl.save) {
// Read a value from the struct. These ARE endian safe.
switch((conv >> 4)&0xf) {
@ -310,7 +310,7 @@ static void SlSaveLoadConv(void *ptr, uint conv)
case SLE_VAR_U16>>4: x = *(uint16*)ptr; break;
case SLE_VAR_I32>>4: x = *(int32*)ptr; break;
case SLE_VAR_U32>>4: x = *(uint32*)ptr; break;
case SLE_VAR_I64>>4: x = *(int64*)ptr; break;
case SLE_VAR_I64>>4: x = *(int64*)ptr; break;
case SLE_VAR_U64>>4: x = *(uint64*)ptr; break;
case SLE_VAR_NULL>>4: x = 0; break;
default:
@ -333,7 +333,7 @@ static void SlSaveLoadConv(void *ptr, uint conv)
NOT_REACHED();
}
} else {
// Read a value from the file
switch(conv & 0xF) {
case SLE_FILE_I8: x = (int8)SlReadByte(); break;
@ -441,7 +441,7 @@ static size_t SlCalcObjLength(void *object, const void *desc)
switch(cmd&3) {
// Normal variable
case 0: length += SlCalcConvLen(conv, NULL);break;
case 0: length += SlCalcConvLen(conv, NULL);break;
// Reference
case 1: length += 2; break;
// Array
@ -509,7 +509,7 @@ void SlObject(void *object, const void *desc)
case 2: SlArray(ptr, *d++, conv); break;
default:NOT_REACHED();
}
// Write byte.
} else if (cmd == 8) {
if (_sl.save) {
@ -592,7 +592,7 @@ static void SlLoadChunk(const ChunkHandler *ch)
_sl.block_mode = m;
_sl.obj_len = 0;
switch(m) {
case CH_ARRAY:
_sl.array_index = 0;
@ -641,7 +641,7 @@ static void SlSaveChunk(const ChunkHandler *ch)
_tmp_proc_1 = proc;
proc = SlStubSaveProc;
}
_sl.block_mode = ch->flags & CH_TYPE_MASK;
switch(ch->flags & CH_TYPE_MASK) {
case CH_RIFF:
@ -674,7 +674,7 @@ void SlSaveChunks()
for(chsc=_sl.chs;(ch=*chsc++) != NULL;) {
while(true) {
if (((ch->flags >> CH_PRI_SHL) & (CH_NUM_PRI_LEVELS - 1)) == p)
SlSaveChunk(ch);
SlSaveChunk(ch);
if (ch->flags & CH_LAST)
break;
ch++;
@ -741,7 +741,7 @@ static uint ReadLZO()
// Check if size is bad
((uint32*)out)[0] = size = tmp[1];
if (_sl.version != 0) {
tmp[0] = TO_BE32(tmp[0]);
size = TO_BE32(size);
@ -754,7 +754,7 @@ static uint ReadLZO()
// Verify checksum
if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError("bad checksum");
// Decompress
lzo1x_decompress(out + sizeof(uint32)*1, size, _sl.buf, &len, NULL);
return len;
@ -767,7 +767,7 @@ static void WriteLZO(uint size)
byte out[LZO_SIZE + LZO_SIZE / 64 + 16 + 3 + 8];
byte wrkmem[sizeof(byte*)*4096];
uint outlen;
lzo1x_1_compress(_sl.buf, size, out + sizeof(uint32)*2, &outlen, wrkmem);
((uint32*)out)[1] = TO_BE32(outlen);
((uint32*)out)[0] = TO_BE32(lzo_adler32(0, out + sizeof(uint32), outlen + sizeof(uint32)));
@ -821,7 +821,7 @@ static bool InitReadZlib()
{
memset(&_z, 0, sizeof(_z));
if (inflateInit(&_z) != Z_OK) return false;
_sl.bufsize = 4096;
_sl.buf = (byte*)malloc(4096 + 4096); // also contains fread buffer
return true;
@ -845,7 +845,7 @@ static uint ReadZlib()
if (r == Z_STREAM_END)
break;
if (r != Z_OK)
if (r != Z_OK)
SlError("inflate() failed");
} while (_z.avail_out);
@ -1020,7 +1020,7 @@ int SaveOrLoad(const char *filename, int mode)
uint32 hdr[2];
const SaveLoadFormat *fmt;
uint version;
// old style load
if (mode == SL_OLD_LOAD) {
InitializeGame();
@ -1028,11 +1028,11 @@ int SaveOrLoad(const char *filename, int mode)
AfterLoadGame(0);
return SL_OK;
}
_sl.fh = fopen(filename, mode?"wb":"rb");
if (_sl.fh == NULL)
return SL_ERROR;
_sl.bufe = _sl.bufp = NULL;
_sl.offs_base = 0;
_sl.int_to_ref_proc = IntToReference;
@ -1060,23 +1060,23 @@ int SaveOrLoad(const char *filename, int mode)
}
}
// we first initialize here to avoid: "warning: variable `version' might
// we first initialize here to avoid: "warning: variable `version' might
// be clobbered by `longjmp' or `vfork'"
version = 0;
if (mode != SL_LOAD) {
fmt = GetSavegameFormat(_savegame_format);
_sl.write_bytes = fmt->writer;
_sl.excpt_uninit = fmt->uninit_write;
if (!fmt->init_write()) goto init_err;
hdr[0] = fmt->tag;
hdr[1] = TO_BE32((SAVEGAME_MAJOR_VERSION<<16) + (SAVEGAME_MINOR_VERSION << 8));
if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError("file write failed");
_sl.version = SAVEGAME_MAJOR_VERSION;
BeforeSaveGame();
SlSaveChunks();
SlWriteFill(); // flush the save buffer
@ -1104,7 +1104,7 @@ init_err:
if (fmt->tag == hdr[0]) {
// check version number
version = TO_BE32(hdr[1]) >> 8;
// incompatible version?
if (version > SAVEGAME_LOADABLE_VERSION) goto read_err;
_sl.version = (version>>8);

View File

@ -23,7 +23,7 @@ typedef struct {
#pragma pack(push, 1)
#endif
typedef struct BitmapFileHeader {
typedef struct BitmapFileHeader {
uint16 type;
uint32 size;
uint32 reserved;
@ -113,12 +113,12 @@ static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *user
// determine # lines
n = min(h, maxlines);
h -= n;
// render the pixels
callb(userdata, buff, h, padw, n);
// write each line
while (n)
// write each line
while (n)
fwrite(buff + (--n) * padw, 1, padw, f);
} while (h);
@ -182,10 +182,10 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
}
png_init_io(png_ptr, f);
png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
png_set_IHDR(png_ptr, info_ptr, w, h, pixelformat, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
png_set_IHDR(png_ptr, info_ptr, w, h, pixelformat, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
// convert the palette to the .PNG format.
@ -215,7 +215,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
do {
// determine # lines to write
n = min(h - y, maxlines);
// render the pixels into the buffer
callb(userdata, buff, y, w, n);
y += n;
@ -272,7 +272,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
if (f == NULL) return false;
memset(&pcx, 0, sizeof(pcx));
// setup pcx header
pcx.manufacturer = 10;
pcx.version = 5;
@ -287,7 +287,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
pcx.cpal = TO_LE16(1);
pcx.width = pcx.pitch = TO_LE16(w);
pcx.height = TO_LE16(h);
// write pcx header
fwrite(&pcx, sizeof(pcx), 1, f);
@ -302,7 +302,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
do {
// determine # lines to write
uint n = min(h - y, maxlines), i;
// render the pixels into the buffer
callb(userdata, buff, y, w, n);
y += n;
@ -314,7 +314,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
byte runchar = buff[0];
uint left = w - 1;
// for each pixel...
// for each pixel...
while (left) {
byte ch = *bufp++;
if (ch != runchar || runcount >= 0x3f) {
@ -334,7 +334,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
} while (y != h);
// write 8-bit color palette
fputc(12, f);
fputc(12, f);
fwrite(palette, 256*3, 1, f);
fclose(f);
@ -404,8 +404,8 @@ void LargeWorldCallback(void *userdata, byte *buf, uint y, uint pitch, uint n)
while (vp->width - left != 0) {
wx = min(vp->width - left, 1600);
left += wx;
ViewportDoDraw(vp,
ViewportDoDraw(vp,
((left - wx - vp->left) << vp->zoom) + vp->virtual_left,
((y - vp->top) << vp->zoom) + vp->virtual_top,
((left - vp->left) << vp->zoom) + vp->virtual_left,
@ -437,7 +437,7 @@ static char *MakeScreenshotName(const char *ext)
serial = 0;
for(;;) {
snprintf(filename, sizeof(filename), "%s%s", _path.personal_dir, _screenshot_name);
snprintf(filename, sizeof(filename), "%s%s", _path.personal_dir, _screenshot_name);
if (!FileExists(filename))
break;
sprintf(base, " #%d.%s", ++serial, ext);
@ -451,7 +451,7 @@ extern byte _cur_palette[768];
bool MakeScreenshot()
{
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
return sf->proc(MakeScreenshotName(sf->extension), CurrentScreenCallback, NULL, _screen.width, _screen.height, 8, _cur_palette);
return sf->proc(MakeScreenshotName(sf->extension), CurrentScreenCallback, NULL, _screen.width, _screen.height, 8, _cur_palette);
}
bool MakeWorldScreenshot(int left, int top, int width, int height, int zoom)

38
sdl.c
View File

@ -23,7 +23,7 @@ static bool _all_modes;
static SDL_Rect _dirty_rects[MAX_DIRTY_RECTS];
static int _num_dirty_rects;
#define SDL_CALL
#define SDL_CALL
#if defined(DYNAMICALLY_LOADED_SDL) && defined(WIN32)
@ -60,7 +60,7 @@ typedef struct {
} SDLProcs;
#define M(x) x "\0"
static const char sdl_files[] =
static const char sdl_files[] =
M("sdl.dll")
M("SDL_Init")
M("SDL_InitSubSystem")
@ -97,7 +97,7 @@ static SDLProcs _proc;
static char *LoadSdlDLL()
{
if (_proc.SDL_Init != NULL)
if (_proc.SDL_Init != NULL)
return NULL;
if (!LoadLibraryList((void**)&_proc, sdl_files))
return "Unable to load sdl.dll";
@ -247,7 +247,7 @@ static void GetVideoModes(void) {
for(i = 0; modes[i]; i++) {
int w = modes[i]->w;
int h = modes[i]->h;
if (IS_INT_INSIDE(w, 640, MAX_SCREEN_WIDTH+1) &&
if (IS_INT_INSIDE(w, 640, MAX_SCREEN_WIDTH+1) &&
IS_INT_INSIDE(h, 480, MAX_SCREEN_HEIGHT+1) &&
w%8 == 0 && h%8 == 0) { // disable screen resolutions which are not multiples of 8
int j;
@ -363,7 +363,7 @@ static const VkMapping _vk_mapping[] = {
AS(SDLK_KP_PLUS, WKC_NUM_PLUS),
AS(SDLK_KP_ENTER, WKC_NUM_ENTER),
AS(SDLK_KP_PERIOD, WKC_NUM_DECIMAL),
{0, 0, 0}
{0, 0, 0}
};
static uint32 ConvertSdlKeyIntoMy(SDL_keysym *sym)
@ -376,7 +376,7 @@ static uint32 ConvertSdlKeyIntoMy(SDL_keysym *sym)
from = map->vk_from;
if (from == 0) {
key = 0;
break;
break;
}
if ((uint)(key - from) <= map->vk_count) {
key = key - from + map->map_to;
@ -444,7 +444,7 @@ static int PollEvent() {
_right_button_down = true;
_right_button_clicked = true;
}
#if !defined(WIN32)
#if !defined(WIN32)
else if (ev.button.button == SDL_BUTTON_WHEELUP) {
_cursor.wheel--;
} else if (ev.button.button == SDL_BUTTON_WHEELDOWN) {
@ -479,17 +479,17 @@ static int PollEvent() {
_pressed_key = ConvertSdlKeyIntoMy(&ev.key.keysym);
}
break;
case SDL_VIDEORESIZE: {
int w, h;
w = ev.resize.w;
h = ev.resize.h;
w = clamp(w & ~0x7, 64, MAX_SCREEN_WIDTH);
h = clamp(h & ~0x7, 64, MAX_SCREEN_HEIGHT);
ChangeResInGame(w, h);
break;
}
}
@ -529,14 +529,14 @@ static int SdlVideoMainLoop()
while (true) {
InteractiveRandom(); // randomness
while ((i=PollEvent()) == -1) {}
if (i>=0) return i;
if (_exit_game) return ML_QUIT;
mod = SDL_CALL SDL_GetModState();
keys = SDL_CALL SDL_GetKeyState(&numkeys);
keys = SDL_CALL SDL_GetKeyState(&numkeys);
#if defined(_DEBUG)
if (_shift_pressed) {
#else
@ -556,12 +556,12 @@ static int SdlVideoMainLoop()
_ctrl_pressed = !!(mod & (KMOD_LCTRL | KMOD_RCTRL));
_shift_pressed = !!(mod & (KMOD_LSHIFT | KMOD_RSHIFT));
// determine which directional keys are down
_dirkeys =
(keys[SDLK_LEFT] ? 1 : 0) +
(keys[SDLK_UP] ? 2 : 0) +
(keys[SDLK_RIGHT] ? 4 : 0) +
_dirkeys =
(keys[SDLK_LEFT] ? 1 : 0) +
(keys[SDLK_UP] ? 2 : 0) +
(keys[SDLK_RIGHT] ? 4 : 0) +
(keys[SDLK_DOWN] ? 8 : 0);
GameLoop();
@ -607,7 +607,7 @@ static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len)
static char *SdlSoundStart(char **parm)
{
SDL_AudioSpec spec;
{char *s;if ((s = SdlOpen(SDL_INIT_AUDIO)) != NULL) return s;}
spec.freq = GetDriverParamInt(parm, "hz", 11025);
spec.format = AUDIO_S16SYS;

View File

@ -50,7 +50,7 @@ static MemoryPool *pool_new(uint minsize)
{
MemoryPool *p;
if (minsize < 4096 - 12) minsize = 4096 - 12;
p = malloc(sizeof(MemoryPool) - 1 + minsize);
p->pos = 0;
p->size = minsize;
@ -78,7 +78,7 @@ static void *pool_alloc(MemoryPool **pool, uint size)
MemoryPool *n = pool_new(size);
*pool = n;
n->next = p;
p = n;
p = n;
}
pos = p->pos;
@ -188,7 +188,7 @@ static IniFile *ini_load(const char *filename)
// for each line in the file
while (fgets(buffer, sizeof(buffer), in)) {
// trim whitespace from the left side
for(s=buffer; *s == ' ' || *s == '\t'; s++);
@ -230,7 +230,7 @@ static IniFile *ini_load(const char *filename)
} else if (group) {
// find end of keyname
for(t=s; *t != 0 && *t != '=' && *t != '\t' && *t != ' '; t++) {}
// it's an item in an existing group
item = ini_item_alloc(group, s, t-s);
if (comment_size) {
@ -285,7 +285,7 @@ static IniItem *ini_getitem(IniGroup *group, const char *name, bool create)
for(item = group->item; item; item = item->next)
if (!strcmp(item->name, name))
return item;
if (!create) return NULL;
// otherwise make a new one
@ -299,7 +299,7 @@ static bool ini_save(const char *filename, IniFile *ini)
FILE *f;
IniGroup *group;
IniItem *item;
f = fopen(filename, "w");
if (f == NULL) return false;
@ -328,7 +328,7 @@ struct SettingDesc {
void *def;
void *ptr;
void *b;
};
static int lookup_oneofmany(const char *many, const char *one, int onelen)
@ -341,7 +341,7 @@ static int lookup_oneofmany(const char *many, const char *one, int onelen)
// check if it's an integer
if (*one >= '0' && *one <= '9')
return strtoul(one, NULL, 0);
idx = 0;
for(;;) {
// find end of item
@ -400,7 +400,7 @@ static bool load_intlist(const char *str, void *array, int nelems, int type)
{
int items[64];
int i,nitems;
if (str == NULL) {
memset(items, 0, sizeof(items));
nitems = nelems;
@ -522,7 +522,7 @@ static void *string_to_val(const SettingDesc *desc, const char *str)
return (void*)false;
ShowInfoF("ini: invalid setting value '%s' for '%s'", str, desc->name);
break;
case SDT_STRING:
case SDT_STRINGBUF:
case SDT_INTLIST:
@ -549,14 +549,14 @@ static void load_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpna
s = desc->name;
group = group_def;
}
item = ini_getitem(group, s, false);
if (!item) {
p = desc->def;
} else {
p = string_to_val(desc, item->value);
}
// get ptr to array
ptr = desc->ptr;
if ( (uint32)ptr < 0x10000)
@ -600,7 +600,7 @@ static void load_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpna
default:
NOT_REACHED();
}
}
}
}
static void save_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpname, void *base)
@ -615,7 +615,7 @@ static void save_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpna
for (;desc->name;desc++) {
if (desc->flags & SDT_NOSAVE)
continue;
// group override?
s = strchr(desc->name, '.');
if (s) {
@ -627,16 +627,16 @@ static void save_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpna
s = desc->name;
group = group_def;
}
item = ini_getitem(group, s, true);
// get ptr to array
ptr = desc->ptr;
if ( (uint32)ptr < 0x10000)
ptr = (byte*)base + (uint32)ptr;
if (item->value != NULL) {
// check if the value is the same as the old value
// check if the value is the same as the old value
p = string_to_val(desc, item->value);
switch(desc->flags & 0xF) {
@ -658,7 +658,7 @@ static void save_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpna
case SDT_INT32 >> 4:
case SDT_UINT32 >> 4:
if (*(uint32*)ptr == (uint32)p)
continue;
continue;
break;
default:
NOT_REACHED();
@ -717,7 +717,7 @@ static void save_setting_desc(IniFile *ini, const SettingDesc *desc, void *grpna
}
// the value is different, that means we have to write it to the ini
item->value = pool_strdup(&ini->pool, buf, strlen(buf));
}
}
}
//***************************
@ -826,7 +826,7 @@ static const SettingDesc patch_settings[] = {
{"nonuniform_stations", SDT_BOOL, (void*)false, (void*)offsetof(Patches, nonuniform_stations), NULL},
{"always_small_airport",SDT_BOOL, (void*)false, (void*)offsetof(Patches, always_small_airport), NULL},
{"realistic_acceleration",SDT_BOOL, (void*)false, (void*)offsetof(Patches, realistic_acceleration), NULL},
{"toolbar_pos", SDT_UINT8, (void*)0, (void*)offsetof(Patches, toolbar_pos), NULL},
{"max_trains", SDT_UINT8, (void*)80, (void*)offsetof(Patches, max_trains), NULL},
@ -848,7 +848,7 @@ static const SettingDesc patch_settings[] = {
{"pf_maxlength", SDT_UINT16, (void*)512, (void*)offsetof(Patches, pf_maxlength), NULL},
{"pf_maxdepth", SDT_UINT8, (void*)16, (void*)offsetof(Patches, pf_maxdepth), NULL},
{"ai_disable_veh_train",SDT_BOOL, (void*)false, (void*)offsetof(Patches, ai_disable_veh_train), NULL},
{"ai_disable_veh_roadveh",SDT_BOOL, (void*)false, (void*)offsetof(Patches, ai_disable_veh_roadveh), NULL},
{"ai_disable_veh_aircraft",SDT_BOOL,(void*)false, (void*)offsetof(Patches, ai_disable_veh_aircraft),NULL},
@ -875,7 +875,7 @@ static const SettingDesc patch_settings[] = {
{"wait_oneway_signal", SDT_UINT8, (void*)15, (void*)offsetof(Patches, wait_oneway_signal), NULL},
{"wait_twoway_signal", SDT_UINT8, (void*)41, (void*)offsetof(Patches, wait_twoway_signal), NULL},
{"ainew_active", SDT_BOOL, (void*)false, (void*)offsetof(Patches, ainew_active), NULL},
{"drag_signals_density",SDT_UINT8, (void*)4, (void*)offsetof(Patches, drag_signals_density), NULL},

View File

@ -117,11 +117,11 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
// setup screenshot format dropdown
ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, e->click.widget, 0);
return;
}
break;
case WE_DROPDOWN_SELECT:
case WE_DROPDOWN_SELECT:
switch(e->dropdown.button) {
case 20:
if (e->dropdown.index == 0) {
@ -220,7 +220,7 @@ static const Widget _game_options_widgets[] = {
{ WWT_CLOSEBOX, 14, 130, 349, 202, 213, STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK, STR_02C2_SAVE_CUSTOMIZED_VEHICLE},
{ WWT_FRAME, 14, 190, 359, 104, 139, STR_OPTIONS_LANG, STR_NULL},
{ WWT_6, 14, 200, 349, 118, 129, STR_OPTIONS_LANG_CBO, STR_OPTIONS_LANG_TIP},
{ WWT_6, 14, 200, 349, 118, 129, STR_OPTIONS_LANG_CBO, STR_OPTIONS_LANG_TIP},
{ WWT_CLOSEBOX, 14, 338, 348, 119, 128, STR_0225, STR_OPTIONS_LANG_TIP},
{ WWT_FRAME, 14, 10, 179, 146, 181, STR_OPTIONS_RES, STR_NULL},
{ WWT_6, 14, 20, 169, 160, 171, STR_OPTIONS_RES_CBO, STR_OPTIONS_RES_TIP},
@ -354,7 +354,7 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
uint btn, dis;
int val;
const GameSettingData *info;
x = e->click.pt.x - 5;
if (!IS_INT_INSIDE(x, 0, 21))
return;
@ -470,7 +470,7 @@ void ShowGameDifficulty()
*/
memcpy(&_opt_mod_temp, _opt_mod_ptr, sizeof(GameOptions));
AllocateWindowDesc(&_game_difficulty_desc);
}
}
void ShowHighscoreTable(int tbl)
{
@ -490,7 +490,7 @@ int32 AiNew_PatchActive_Warning(int32 p1)
{
if (p1 == 1)
ShowErrorMessage(-1, TEMP_AI_ACTIVATED, 0, 0);
return 0;
}
@ -511,14 +511,14 @@ int32 CheckInterval(int32 p1)
{
bool warning;
if (p1) {
warning = ( (IS_INT_INSIDE(_patches.servint_trains, 5, 90+1) || _patches.servint_trains == 0) &&
warning = ( (IS_INT_INSIDE(_patches.servint_trains, 5, 90+1) || _patches.servint_trains == 0) &&
(IS_INT_INSIDE(_patches.servint_roadveh, 5, 90+1) || _patches.servint_roadveh == 0) &&
(IS_INT_INSIDE(_patches.servint_aircraft, 5, 90+1) || _patches.servint_aircraft == 0) &&
(IS_INT_INSIDE(_patches.servint_aircraft, 5, 90+1) || _patches.servint_aircraft == 0) &&
(IS_INT_INSIDE(_patches.servint_ships, 5, 90+1) || _patches.servint_ships == 0) );
} else {
warning = ( (IS_INT_INSIDE(_patches.servint_trains, 30, 800+1) || _patches.servint_trains == 0) &&
warning = ( (IS_INT_INSIDE(_patches.servint_trains, 30, 800+1) || _patches.servint_trains == 0) &&
(IS_INT_INSIDE(_patches.servint_roadveh, 30, 800+1) || _patches.servint_roadveh == 0) &&
(IS_INT_INSIDE(_patches.servint_aircraft, 30, 800+1) || _patches.servint_aircraft == 0) &&
(IS_INT_INSIDE(_patches.servint_aircraft, 30, 800+1) || _patches.servint_aircraft == 0) &&
(IS_INT_INSIDE(_patches.servint_ships, 30, 800+1) || _patches.servint_ships == 0) );
}
@ -560,7 +560,7 @@ static const PatchEntry _patches_ui[] = {
{PE_BOOL, 0, STR_CONFIG_PATCHES_AUTOSCROLL, &_patches.autoscroll, 0, 0, 0, NULL},
{PE_UINT8, 0, STR_CONFIG_PATCHES_ERRMSG_DURATION, &_patches.errmsg_duration, 0, 20, 1, NULL},
{PE_UINT8, PF_MULTISTRING, STR_CONFIG_PATCHES_TOOLBAR_POS, &_patches.toolbar_pos, 0, 2, 1, &v_PositionMainToolbar},
{PE_BOOL, 0, STR_CONFIG_PATCHES_INVISIBLE_TREES, &_patches.invisible_trees, 0, 1, 1, &InvisibleTreesActive},
};
@ -570,7 +570,7 @@ static const PatchEntry _patches_construction[] = {
{PE_BOOL, 0, STR_CONFIG_PATCHES_EXTRADYNAMITE, &_patches.extra_dynamite, 0, 0, 0, NULL},
{PE_BOOL, 0, STR_CONFIG_PATCHES_LONGBRIDGES, &_patches.longbridges, 0, 0, 0, NULL},
{PE_BOOL, 0, STR_CONFIG_PATCHES_SIGNALSIDE, &_patches.signal_side, 0, 0, 0, NULL},
{PE_BOOL, 0, STR_CONFIG_PATCHES_SMALL_AIRPORTS, &_patches.always_small_airport, 0, 0, 0, NULL},
{PE_UINT8, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY, &_patches.drag_signals_density, 1, 20, 1, NULL},
@ -622,7 +622,7 @@ static const PatchEntry _patches_economy[] = {
{PE_BOOL, 0, STR_CONFIG_PATCHES_SAMEINDCLOSE, &_patches.same_industry_close, 0, 0, 0, NULL},
{PE_BOOL, 0, STR_CONFIG_PATCHES_BRIBE, &_patches.bribe, 0, 0, 0, NULL},
{PE_UINT8, 0, STR_CONFIG_PATCHES_SNOWLINE_HEIGHT, &_patches.snow_line_height, 2, 13, 1, NULL},
{PE_INT32, PF_NOCOMMA, STR_CONFIG_PATCHES_COLORED_NEWS_DATE, &_patches.colored_news_date, 1900, 2200, 5, NULL},
{PE_INT32, PF_NOCOMMA, STR_CONFIG_PATCHES_STARTING_DATE, &_patches.starting_date, 1920,2100, 1, NULL},
@ -666,7 +666,7 @@ static int32 ReadPE(const PatchEntry*pe)
default:
NOT_REACHED();
}
/* useless, but avoids compiler warning this way */
return 0;
}
@ -682,36 +682,36 @@ static void WritePE(const PatchEntry *pe, int32 val)
switch(pe->type) {
case PE_BOOL: *(bool*)pe->variable = (bool)val; break;
case PE_UINT8: if ((uint8)val > (uint8)pe->max)
case PE_UINT8: if ((uint8)val > (uint8)pe->max)
*(uint8*)pe->variable = (uint8)pe->max;
else if ((uint8)val < (uint8)pe->min)
*(uint8*)pe->variable = (uint8)pe->min;
else
*(uint8*)pe->variable = (uint8)val;
*(uint8*)pe->variable = (uint8)val;
break;
case PE_INT16: if ((int16)val > (int16)pe->max)
case PE_INT16: if ((int16)val > (int16)pe->max)
*(int16*)pe->variable = (int16)pe->max;
else if ((int16)val < (int16)pe->min)
*(int16*)pe->variable = (int16)pe->min;
else
*(int16*)pe->variable = (int16)val;
*(int16*)pe->variable = (int16)val;
break;
case PE_UINT16: if ((uint16)val > (uint16)pe->max)
case PE_UINT16: if ((uint16)val > (uint16)pe->max)
*(uint16*)pe->variable = (uint16)pe->max;
else if ((uint16)val < (uint16)pe->min)
*(uint16*)pe->variable = (uint16)pe->min;
else
*(uint16*)pe->variable = (uint16)val;
*(uint16*)pe->variable = (uint16)val;
break;
case PE_INT32: if ((int32)val > (int32)pe->max)
case PE_INT32: if ((int32)val > (int32)pe->max)
*(int32*)pe->variable = (int32)pe->max;
else if ((int32)val < (int32)pe->min)
*(int32*)pe->variable = (int32)pe->min;
else
*(int32*)pe->variable = val;
*(int32*)pe->variable = val;
break;
case PE_CURRENCY: val /= GetCurrentCurrencyRate();
@ -791,7 +791,7 @@ static void PatchesSelectionWndProc(Window *w, WindowEvent *e)
y = e->click.pt.y - 46 - 1;
if (y < 0) return;
btn = y / 11;
if (y % 11 > 9) return;
@ -836,13 +836,13 @@ static void PatchesSelectionWndProc(Window *w, WindowEvent *e)
if (val < pe->min) val = pe->min;
}
}
if (val != oval) {
WP(w,def_d).data_2 = btn * 2 + 1 + ((x>=10) ? 1 : 0);
w->flags4 |= 5 << WF_TIMEOUT_SHL;
_left_button_clicked = false;
}
break;
break;
}
if (val != oval) {
WritePE(pe, val);
@ -858,7 +858,7 @@ static void PatchesSelectionWndProc(Window *w, WindowEvent *e)
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_CONFIG_PATCHES_QUERY_CAPT, 10, 100, WC_GAME_OPTIONS, 0);
}
}
break;
}
case 4: case 5: case 6: case 7: case 8: case 9:
@ -878,7 +878,7 @@ static void PatchesSelectionWndProc(Window *w, WindowEvent *e)
if (*e->edittext.str) {
const PatchPage *page = &_patches_page[WP(w,def_d).data_1];
const PatchEntry *pe = &page->entries[WP(w,def_d).data_3];
WritePE(pe, atoi(e->edittext.str));
WritePE(pe, atoi(e->edittext.str));
SetWindowDirty(w);
if (pe->click_proc != NULL) // call callback function

View File

@ -93,7 +93,7 @@ static void CheckIfShipNeedsService(Vehicle *v)
if (v->vehstatus & VS_STOPPED)
return;
if ((v->next_order & (OT_MASK | OF_FULL_LOAD)) == (OT_GOTO_DEPOT | OF_FULL_LOAD))
return;
@ -113,7 +113,7 @@ static void CheckIfShipNeedsService(Vehicle *v)
v->next_order = OT_GOTO_DEPOT | OF_NON_STOP;
v->next_order_param = (byte)i;
v->dest_tile = (&_depots[i])->xy;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
void OnNewDay_Ship(Vehicle *v)
@ -128,11 +128,11 @@ void OnNewDay_Ship(Vehicle *v)
CheckIfShipNeedsService(v);
CheckOrders(v);
if (v->vehstatus & VS_STOPPED)
return;
cost = ship_vehicle_info(v->engine_type).running_cost * _price.ship_running / 364;
v->profit_this_year -= cost >> 8;
@ -152,10 +152,10 @@ static void HandleBrokenShip(Vehicle *v)
if (v->breakdowns_since_last_service != 255)
v->breakdowns_since_last_service++;
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
SndPlayVehicleFx((_opt.landscape != LT_CANDY) ? 0xE : 0x3A, v);
if (!(v->vehstatus & VS_HIDDEN)) {
@ -231,7 +231,7 @@ static void ProcessShipOrder(Vehicle *v)
if ((order & OT_MASK) == OT_GOTO_STATION) {
if ( (byte)(order >> 8) == v->last_station_visited)
v->last_station_visited = 0xFF;
st = DEREF_STATION(order >> 8);
if (st->dock_tile != 0) {
v->dest_tile = TILE_ADD(st->dock_tile, _dock_offs[_map5[st->dock_tile]-0x4B]);
@ -248,7 +248,7 @@ static void HandleShipLoading(Vehicle *v)
{
if (v->next_order == OT_NOTHING)
return;
if (v->next_order != OT_DUMMY) {
if ((v->next_order&OT_MASK) != OT_LOADING)
return;
@ -265,7 +265,7 @@ static void HandleShipLoading(Vehicle *v)
return;
}
PlayShipSound(v);
{
byte b = v->next_order;
v->next_order = OT_LEAVESTATION;
@ -352,7 +352,7 @@ static bool ShipAccelerate(Vehicle *v)
//updates statusbar only if speed have changed to save CPU time
if (spd != v->cur_speed) {
v->cur_speed = spd;
v->cur_speed = spd;
if (_patches.vehicle_speed)
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
@ -384,7 +384,7 @@ static void ShipEnterDepot(Vehicle *v)
v->vehstatus |= VS_HIDDEN;
v->cur_speed = 0;
RecalcShipStuff(v);
v->date_of_last_service = _date;
v->breakdowns_since_last_service = 0;
v->reliability = _engines[v->engine_type].reliability;
@ -394,7 +394,7 @@ static void ShipEnterDepot(Vehicle *v)
if ((v->next_order&OT_MASK) == OT_GOTO_DEPOT) {
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
t = v->next_order;
v->next_order = OT_DUMMY;
@ -444,7 +444,7 @@ static bool ShipTrackFollower(uint tile, PathFindShip *pfs, int track, uint leng
// Found dest?
if (tile == pfs->dest_coords) {
pfs->best_bird_dist = 0;
// if (length < pfs->best_length)
// dbg_store_path();
@ -456,7 +456,7 @@ static bool ShipTrackFollower(uint tile, PathFindShip *pfs, int track, uint leng
if (tile != pfs->skiptile) {
pfs->best_bird_dist = minu(pfs->best_bird_dist, GetTileDist1Db(pfs->dest_coords, tile));
}
return false;
}
@ -488,12 +488,12 @@ static uint FindShipTrack(Vehicle *v, uint tile, int dir, uint bits, uint skipti
do {
i = FIND_FIRST_BIT(bits);
bits = KILL_FIRST_BIT(bits);
pfs.best_bird_dist = (uint)-1;
pfs.best_length = (uint)-1;
FollowTrack(tile, 0x3800 | TRANSPORT_WATER, _ship_search_directions[i][dir], (TPFEnumProc*)ShipTrackFollower, NULL, &pfs);
if (best_track >= 0) {
if (pfs.best_bird_dist != 0) {
/* neither reached the destination, pick the one with the smallest bird dist */
@ -503,8 +503,8 @@ static uint FindShipTrack(Vehicle *v, uint tile, int dir, uint bits, uint skipti
if (pfs.best_length > best_length) goto bad;
if (pfs.best_length < best_length) goto good;
}
/* if we reach this position, there's two paths of equal value so far.
/* if we reach this position, there's two paths of equal value so far.
* pick one randomly. */
r = (byte)Random();
if (_pick_shiptrack_table[i] == ship_dir) r += 80;
@ -554,7 +554,7 @@ static const byte _new_vehicle_direction_table[11] = {
static int ShipGetNewDirectionFromTiles(uint new_tile, uint old_tile)
{
uint offs = (GET_TILE_Y(new_tile) - GET_TILE_Y(old_tile) + 1) * 4 +
uint offs = (GET_TILE_Y(new_tile) - GET_TILE_Y(old_tile) + 1) * 4 +
GET_TILE_X(new_tile) - GET_TILE_X(old_tile) + 1;
assert(offs < 11 && offs != 3 && offs != 7);
return _new_vehicle_direction_table[offs];
@ -707,7 +707,7 @@ static void ShipController(Vehicle *v)
goto reverse_direction;
b = _ship_subcoord[dir][track];
gp.x = (gp.x&~0xF) | b[0];
gp.y = (gp.y&~0xF) | b[1];
@ -794,7 +794,7 @@ int32 CmdBuildShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
uint unit_num;
uint tile = TILE_FROM_XY(x,y);
Engine *e;
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
value = EstimateShipCost(p1);
@ -802,10 +802,10 @@ int32 CmdBuildShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return value;
v = AllocateVehicle();
if (v == NULL || _ptr_to_next_order >= endof(_order_array) ||
if (v == NULL || _ptr_to_next_order >= endof(_order_array) ||
(unit_num = GetFreeUnitNumber(VEH_Ship)) > _patches.max_ships)
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
if (flags & DC_EXEC) {
v->unitnumber = unit_num;
@ -823,12 +823,12 @@ int32 CmdBuildShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->x_offs = -3;
v->y_offs = -3;
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
v->spritenum = ship_vehicle_info(p1).image_index;
v->cargo_type = ship_vehicle_info(p1).cargo_type;
v->cargo_cap = ship_vehicle_info(p1).capacity;
v->value = value;
v->last_station_visited = 255;
v->max_speed = ship_vehicle_info(p1).max_speed;
v->engine_type = (byte)p1;
@ -856,7 +856,7 @@ int32 CmdBuildShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
InvalidateWindow(WC_SHIPS_LIST, v->owner);
InvalidateWindow(WC_COMPANY, v->owner);
}
return value;
}
@ -865,7 +865,7 @@ int32 CmdSellShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
Vehicle *v;
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
v = &_vehicles[p1];
if (!CheckOwnership(v->owner))
@ -873,7 +873,7 @@ int32 CmdSellShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!IsShipDepotTile(v->tile) || v->u.road.state != 0x80 || !(v->vehstatus&VS_STOPPED))
return_cmd_error(STR_980B_SHIP_MUST_BE_STOPPED_IN);
if (flags & DC_EXEC) {
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
_vehicle_sort_dirty[VEHSHIP] = true; // sell a ship
@ -882,7 +882,7 @@ int32 CmdSellShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
DeleteVehicle(v);
}
return -(int32)v->value;
}
@ -919,7 +919,7 @@ int32 CmdSendShipToDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) {
if (v->next_order&OF_UNLOAD) {v->cur_order_index++;}
v->next_order = OT_DUMMY;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
} else {
depot = FindClosestShipDepot(v);
@ -963,7 +963,7 @@ int32 CmdRefitShip(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 cost;
SET_EXPENSES_TYPE(EXPENSES_SHIP_RUN);
v = &_vehicles[p1];
if (!CheckOwnership(v->owner))
return CMD_ERROR;

View File

@ -26,7 +26,7 @@ static void ShipRefitWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
case WE_PAINT: {
Vehicle *v = &_vehicles[w->window_number];
Vehicle *v = &_vehicles[w->window_number];
const byte *b;
int sel;
int x,y;
@ -38,7 +38,7 @@ static void ShipRefitWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
DrawString(1, 15, STR_983F_SELECT_CARGO_TYPE_TO_CARRY, 0);
cargo = -1;
x = 6;
y = 25;
@ -103,7 +103,7 @@ static void ShipRefitWndProc(Window *w, WindowEvent *e)
} break;
case 4: /* refit button */
if (WP(w,refit_d).cargo != 0xFF) {
Vehicle *v = &_vehicles[w->window_number];
Vehicle *v = &_vehicles[w->window_number];
if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo, NULL, CMD_REFIT_SHIP | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP)))
DeleteWindow(w);
}
@ -136,8 +136,8 @@ static void ShowShipRefitWindow(Vehicle *v)
Window *w;
DeleteWindowById(WC_VEHICLE_REFIT, v->index);
_alloc_wnd_parent_num = v->index;
_alloc_wnd_parent_num = v->index;
w = AllocateWindowDesc(&_ship_refit_desc);
w->window_number = v->index;
w->caption_color = v->owner;
@ -166,7 +166,7 @@ static void ShipDetailsWndProc(Window *w, WindowEvent *e)
StringID str;
SET_DPARAM16(1, year);
str = STR_0199_YEAR;
if (year != 1) {
str++;
@ -212,7 +212,7 @@ static void ShipDetailsWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(0, GetCustomEngineName(v->engine_type));
SET_DPARAM32(2, v->value);
DrawString(74, 57, STR_9816_BUILT_VALUE, 0);
SET_DPARAM16(0, _cargoc.names_long_p[v->cargo_type]);
SET_DPARAM16(1, v->cargo_cap);
DrawString(74, 67, STR_9817_CAPACITY, 0);
@ -295,7 +295,7 @@ static void ShowShipDetailsWindow(Vehicle *v)
VehicleID veh = v->index;
DeleteWindowById(WC_VEHICLE_ORDERS, veh);
DeleteWindowById(WC_VEHICLE_DETAILS, veh);
_alloc_wnd_parent_num = veh;
_alloc_wnd_parent_num = veh;
w = AllocateWindowDesc(&_ship_details_desc);
w->window_number = veh;
w->caption_color = v->owner;
@ -314,7 +314,7 @@ static void CcBuildShip(bool success, uint tile, uint32 p1, uint32 p2)
ShowShipViewWindow(v);
}
static void NewShipWndProc(Window *w, WindowEvent *e)
static void NewShipWndProc(Window *w, WindowEvent *e)
{
YearMonthDay ymd;
switch(e->event) {
@ -354,7 +354,7 @@ static void NewShipWndProc(Window *w, WindowEvent *e)
DrawShipEngine(x+35, y+10, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player)));
y += 24;
}
sel--;
sel--;
}
} while (++engine_id, ++e,--num);
@ -370,12 +370,12 @@ static void NewShipWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(4, ship_vehicle_info(selected_id).refittable ? STR_9842_REFITTABLE : STR_EMPTY);
SET_DPARAM32(5, ship_vehicle_info(selected_id).running_cost * _price.ship_running >> 8);
e = &_engines[selected_id];
e = &_engines[selected_id];
SET_DPARAM16(7, e->lifelength);
SET_DPARAM8(8, e->reliability * 100 >> 16);
ConvertDayToYMD(&ymd, e->intro_date);
SET_DPARAM16(6, ymd.year + 1920);
DrawString(2, 111, STR_980A_COST_SPEED_CAPACITY_RUNNING, 0);
}
}
@ -456,13 +456,13 @@ static void ShowBuildShipWindow(TileIndex tile)
w = AllocateWindowDesc(&_new_ship_desc);
w->window_number = tile;
w->vscroll.cap = 4;
if (tile != 0) {
w->caption_color = _map_owner[tile];
} else {
w->caption_color = _local_player;
}
}
@ -479,7 +479,7 @@ static void ShipViewWndProc(Window *w, WindowEvent *e) {
v->u.ship.state == 0x80 &&
IsShipDepotTile(v->tile))
disabled = 0;
if (v->owner != _local_player)
disabled |= 1<<7 | 1<<6;
w->disabled_state = disabled;
@ -535,13 +535,13 @@ static void ShipViewWndProc(Window *w, WindowEvent *e) {
switch(e->click.widget) {
case 4: /* start stop */
DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_SHIP | CMD_MSG(STR_9818_CAN_T_STOP_START_SHIP));
DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_SHIP | CMD_MSG(STR_9818_CAN_T_STOP_START_SHIP));
break;
case 5: /* center main view */
ScrollMainWindowTo(v->x_pos, v->y_pos);
break;
case 6: /* goto hangar */
DoCommandP(v->tile, v->index, 0, NULL, CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT));
DoCommandP(v->tile, v->index, 0, NULL, CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT));
break;
case 7: /* refit */
ShowShipRefitWindow(v);
@ -557,7 +557,7 @@ static void ShipViewWndProc(Window *w, WindowEvent *e) {
case WE_DESTROY:
DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
break;
}
@ -641,17 +641,17 @@ static void DrawShipDepotWindow(Window *w)
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Ship &&
v->u.ship.state == 0x80 &&
v->u.ship.state == 0x80 &&
v->tile == (TileIndex)tile &&
--num < 0 && num >= -6) {
DrawShipImage(v, x+19, y, WP(w,traindepot_d).sel);
SET_DPARAM16(0, v->unitnumber);
DrawString(x, y, (uint16)(v->max_age-366) >= v->age ? STR_00E2 : STR_00E3, 0);
DrawSprite( (v->vehstatus & VS_STOPPED) ? 0xC12 : 0xC13, x, y + 9);
if ((x+=90) == 2+90*3) {
x = 2;
y += 24;
@ -666,7 +666,7 @@ static int GetVehicleFromShipDepotWndPt(Window *w, int x, int y, Vehicle **veh)
TileIndex tile;
Vehicle *v;
int pos;
xt = x / 90;
xm = x % 90;
if (xt >= 5)
@ -682,7 +682,7 @@ static int GetVehicleFromShipDepotWndPt(Window *w, int x, int y, Vehicle **veh)
tile = w->window_number;
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Ship &&
v->vehstatus&VS_HIDDEN &&
v->vehstatus&VS_HIDDEN &&
v->tile == (TileIndex)tile &&
--pos < 0) {
*veh = v;
@ -695,7 +695,7 @@ static int GetVehicleFromShipDepotWndPt(Window *w, int x, int y, Vehicle **veh)
}
return 1; /* outside */
}
static void ShipDepotClick(Window *w, int x, int y)
@ -714,7 +714,7 @@ static void ShipDepotClick(Window *w, int x, int y)
if (v != NULL) {
WP(w,traindepot_d).sel = v->index;
SetWindowDirty(w);
SetObjectToPlaceWnd( SPRITE_PALETTE(PLAYER_SPRITE_COLOR(v->owner)) +
SetObjectToPlaceWnd( SPRITE_PALETTE(PLAYER_SPRITE_COLOR(v->owner)) +
GetShipImage(v, 6), 4, w);
}
break;
@ -743,7 +743,7 @@ static void ShipDepotWndProc(Window *w, WindowEvent *e) {
case 2:
ShipDepotClick(w, e->click.pt.x, e->click.pt.y);
break;
case 5:
ShowBuildShipWindow(w->window_number);
break;
@ -773,12 +773,12 @@ static void ShipDepotWndProc(Window *w, WindowEvent *e) {
ShowShipViewWindow(v);
}
} break;
case 3:
if (!HASBIT(w->disabled_state, 3) &&
WP(w,traindepot_d).sel != INVALID_VEHICLE) {
Vehicle *v;
HandleButtonClick(w, 3);
v = &_vehicles[WP(w,traindepot_d).sel];
@ -786,7 +786,7 @@ static void ShipDepotWndProc(Window *w, WindowEvent *e) {
_backup_orders_tile = v->tile;
BackupVehicleOrders(v, _backup_orders_data);
if (!DoCommandP(v->tile, v->index, 0, NULL, CMD_SELL_SHIP | CMD_MSG(STR_980C_CAN_T_SELL_SHIP)))
_backup_orders_tile = 0;
}
@ -854,7 +854,7 @@ static void DrawSmallShipSchedule(Vehicle *v, int x, int y) {
if ((ord & OT_MASK) == OT_GOTO_STATION) {
st = DEREF_STATION(ord >> 8);
if (!(st->had_vehicle_of_type & HVOT_BUOY)) {
SET_DPARAM16(0, ord >> 8);
DrawString(x, y, STR_A036, 0);
@ -894,7 +894,7 @@ static void MakeSortedShiptList(byte owner)
// ships are stored as a cummulative index, eg 25, 41, 43. This means
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2
for (i = &_num_ship_sort[1]; i != endof(_num_ship_sort); i++) {*i += *(i-1);}
// sort by owner, then only subsort the requested owner-vehicles
qsort(_ship_sort, n, sizeof(_ship_sort[0]), GeneralOwnerSorter);
@ -939,7 +939,7 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2 ships
i = (window_number == 0) ? 0 : _num_ship_sort[window_number-1];
SetVScrollCount(w, _num_ship_sort[window_number] - i);
/* draw the widgets */
{
Player *p = DEREF_PLAYER(window_number);
@ -982,7 +982,7 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
SET_DPARAM32(0, v->profit_this_year);
SET_DPARAM32(1, v->profit_last_year);
DrawString(x + 12, y + 28, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
if (v->string_id != STR_SV_SHIP_NAME) {
SET_DPARAM16(0, v->string_id);
DrawString(x+12, y, STR_01AB, 0);
@ -1010,7 +1010,7 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
return;
case 6: { /* Matrix to show vehicles */
uint32 id_v = (e->click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / PLY_WND_PRC__SIZE_OF_ROW_BIG;
if (id_v >= w->vscroll.cap) { return;} // click out of bounds
id_v += w->vscroll.pos;
@ -1035,15 +1035,15 @@ static void PlayerShipsWndProc(Window *w, WindowEvent *e)
tile = _last_built_ship_depot_tile;
do {
if (_map_owner[tile] == _local_player && IsShipDepotTile(tile)) {
if (_map_owner[tile] == _local_player && IsShipDepotTile(tile)) {
ShowShipDepotWindow(tile);
ShowBuildShipWindow(tile);
return;
}
tile = TILE_MASK(tile + 1);
} while(tile != _last_built_ship_depot_tile);
ShowBuildShipWindow(0);
} break;
}

View File

@ -78,7 +78,7 @@ static const uint16 _legend_land_contours[] = {
MK(0x5E,STR_00F2_300M),
MK(0x1F,STR_00F3_400M),
MK(0x27,STR_00F4_500M),
MS(0xD7,STR_00EB_ROADS),
MK(0x0A,STR_00EC_RAILROADS),
MK(0x98,STR_00ED_STATIONS_AIRPORTS_DOCKS),
@ -509,7 +509,7 @@ static uint32 INLINE GetSmallMapVegetationPixels(uint tile)
if (i >= 0) i = (i >> 2);
bits = _vegetation_clear_bits[i + 4];
} else if (t == MP_INDUSTRY) {
bits = IS_BYTE_INSIDE(_map5[tile], 0x10, 0x12) ? MKCOLOR(0xD0D0D0D0) : MKCOLOR(0xB5B5B5B5);
bits = IS_BYTE_INSIDE(_map5[tile], 0x10, 0x12) ? MKCOLOR(0xD0D0D0D0) : MKCOLOR(0xB5B5B5B5);
} else if (t == MP_TREES) {
bits = MKCOLOR(0x54575754);
if ((_map2[tile] & 0x30) == 0x20)
@ -550,7 +550,7 @@ static uint32 INLINE GetSmallMapOwnerPixels(uint tile)
t = GET_TILETYPE(tile);
if (t == MP_HOUSE || _map_owner[tile] == OWNER_TOWN) {
t = 0x80;
t = 0x80;
} else if (t == MP_INDUSTRY) {
t = 0xff;
} else {
@ -641,10 +641,10 @@ static void DrawSmallMap(DrawPixelInfo *dpi, Window *w, int type, bool show_town
/* setup owners ptr */
_owner_colors = tbl = alloca(256 * sizeof(*_owner_colors));
/* clear the town colors */
memset(tbl + 128, 0xB4, 128 * sizeof(*_owner_colors));
/* fill with some special colors */
tbl[0x10] = MKCOLOR(0x54545454);
tbl[0x11] = MKCOLOR(0xCACACACA);
@ -655,7 +655,7 @@ static void DrawSmallMap(DrawPixelInfo *dpi, Window *w, int type, bool show_town
if (p->is_active) {
tbl[p->index] = dup_byte32(GetSpritePtr(0x307 + p->player_color)[0xCB]);
}
}
}
}
tile_x = (int)WP(w,smallmap_d).scroll_x >> 4;
@ -712,7 +712,7 @@ static void DrawSmallMap(DrawPixelInfo *dpi, Window *w, int type, bool show_town
proc(ptr, tile_x, tile_y, dpi->pitch*2, reps, mask);
}
skip_column:
skip_column:
if (y == 0) {
tile_y++;
y++;
@ -736,7 +736,7 @@ skip_column:
if (v->type != 0 && v->type != 0x14 && (v->vehstatus & (VS_HIDDEN|VS_UNCLICKABLE)) == 0) {
// Remap into flat coordinates.
Point pt = RemapCoords(
(int)(v->x_pos - WP(w,smallmap_d).scroll_x) >> 4,
(int)(v->x_pos - WP(w,smallmap_d).scroll_x) >> 4,
(int)(v->y_pos - WP(w,smallmap_d).scroll_y) >> 4,
0);
x = pt.x;
@ -765,11 +765,11 @@ skip_column:
continue;
skip = true;
}
// Calculate pointer to pixel and the color
ptr = dpi->dst_ptr + y * dpi->pitch + x;
color = (type == 1) ? _vehicle_type_colors[v->type-0x10] : 0xF;
// And draw either one or two pixels depending on clipping
ptr[0] = color;
if (!skip)
@ -789,11 +789,11 @@ skip_column:
0);
x = pt.x - WP(w,smallmap_d).subscroll + 3 - (t->sign.width_2 >> 1);
y = pt.y;
// Check if the town sign is within bounds
if (x + t->sign.width_2 > dpi->left &&
x < dpi->left + dpi->width &&
y + 6 > dpi->top &&
y + 6 > dpi->top &&
y < dpi->top + dpi->height) {
// And draw it.
SET_DPARAM16(0, t->index);
@ -801,7 +801,7 @@ skip_column:
}
}
}
}
}
// Draw map indicators
{
@ -809,7 +809,7 @@ skip_column:
// Find main viewport.
vp = FindWindowById(WC_MAIN_WINDOW,0)->viewport;
pt = RemapCoords(
WP(w,smallmap_d).scroll_x,
WP(w,smallmap_d).scroll_y,
@ -846,7 +846,7 @@ static void SmallMapWindowProc(Window *w, WindowEvent *e)
/* draw the window */
SET_DPARAM16(0, STR_00E5_CONTOURS + _smallmap_type);
DrawWindowWidgets(w);
/* draw the legend */
tbl = _legend_table[(_smallmap_type != 2) ? _smallmap_type : (_opt.landscape + IND_OFFS)];
x = 4;
@ -877,7 +877,7 @@ static void SmallMapWindowProc(Window *w, WindowEvent *e)
case WE_CLICK:
switch(e->click.widget) {
case 2: {/* big/small size */
// const Widget *wi = w->widget;
// const Widget *wi = w->widget;
DeleteWindow(w);
SndPlayFx(0x13);
{
@ -903,7 +903,7 @@ static void SmallMapWindowProc(Window *w, WindowEvent *e)
case 5: /* show land contours */
case 6: /* show vehicles */
case 7: /* show industries */
case 8: /* show transport routes */
case 8: /* show transport routes */
case 9: /* show vegetation */
case 10: /* show land owners */
w->click_state &= ~(1<<5|1<<6|1<<7|1<<8|1<<9|1<<10);
@ -978,7 +978,7 @@ static void DoShowSmallMap(int big)
int x,y;
_smallmap_size = big;
w = AllocateWindowDescFront(_smallmap_descs[big], 0);
if (w) {
w->click_state = (1<<5) << _smallmap_type | _smallmap_show_towns << 11;
@ -1039,7 +1039,7 @@ static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
// set this view to same location. Based on the center, adjusting for zoom
WP(w2,vp_d).scrollpos_x = x - (w2->viewport->virtual_width - (294 <<vp->zoom) )/2;
WP(w2,vp_d).scrollpos_y = y - (w2->viewport->virtual_height - (214 << vp->zoom) )/2;
WP(w2,vp_d).scrollpos_y = y - (w2->viewport->virtual_height - (214 << vp->zoom) )/2;
} break;
case 7: { /* inverse location button (move this view to same spot as main view) */
Window * w2 = FindWindowById(WC_MAIN_WINDOW, 0);
@ -1047,9 +1047,9 @@ static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
int y = WP(w2,vp_d).scrollpos_y;
WP(w,vp_d).scrollpos_x = x + (w2->viewport->virtual_width - (294 <<vp->zoom) )/2;
WP(w,vp_d).scrollpos_y = y + (w2->viewport->virtual_height - (214 << vp->zoom) )/2;
WP(w,vp_d).scrollpos_y = y + (w2->viewport->virtual_height - (214 << vp->zoom) )/2;
} break;
}
}
} break;
}
}
@ -1066,7 +1066,7 @@ void ShowExtraViewPortWindow()
{
Window *w, *v;
int i = 0;
// find next free window number for extra viewport
while (FindWindowById(WC_EXTRA_VIEW_PORT,i) ) {
i++;
@ -1078,8 +1078,8 @@ void ShowExtraViewPortWindow()
// disable zoom in button
w->disabled_state = 1 << 4;
// the main window with the main view
v = FindWindowById(WC_MAIN_WINDOW, 0);
// New viewport start ats (zero,zero)
v = FindWindowById(WC_MAIN_WINDOW, 0);
// New viewport start ats (zero,zero)
AssignWindowViewport(w, 3, 17, 294, 214, 0 , 0);
// center on same place as main window (zoom is maximum, no adjustment needed)

22
sound.c
View File

@ -73,7 +73,7 @@ static void mix_int8_to_int16(MixerChannel *sc, int16 *buffer, uint samples)
volume_left = sc->volume_left;
volume_right = sc->volume_right;
if (frac_speed == 0x10000) {
if (frac_speed == 0x10000) {
// Special case when frac_speed is 0x10000
do {
buffer[0]+= *b * volume_left >> 8;
@ -110,10 +110,10 @@ void MxMixSamples(Mixer *mx, void *buffer, uint samples)
{
int i;
MixerChannel *mc;
// Clear the buffer
memset(buffer, 0, sizeof(int16)*2*samples);
// Mix each channel
for(i=0,mc=mx->channels; i!=lengthof(mx->channels); i++,mc++) {
if (mc->active) {
@ -154,7 +154,7 @@ static void MxSetChannelRawSrc(MixerChannel *mc, void *mem, uint size, uint rate
// adjust the magnitude to prevent overflow
while (size & 0xFFFF0000)
size >>= 1, rate = (rate >> 1) + 1;
mc->samples_left = size * mc->mx->play_rate / rate;
}
@ -180,7 +180,7 @@ static void MxOpenBankFile(Mixer *mx, const char *filename)
fe->file_offset = FioReadDword();
fe->file_size = FioReadDword();
}
fe = mx->files;
for(i=0; i!=count; i++,fe++) {
FioSeekTo(fe->file_offset, SEEK_SET);
@ -221,7 +221,7 @@ static bool MxSetBankSource(MixerChannel *mc, uint bank)
if (fe->file_size == 0)
return false;
mem = malloc(fe->file_size);
FioSeekToFile(fe->file_offset);
FioReadBlock(mem, fe->file_size);
@ -229,7 +229,7 @@ static bool MxSetBankSource(MixerChannel *mc, uint bank)
for(i=0; i!=fe->file_size; i++) {
((byte*)mem)[i] ^= 0x80;
}
assert(fe->bits_per_sample == 8 && fe->channels == 1 && fe->file_size != 0 && fe->rate != 0);
MxSetChannelRawSrc(mc, mem, fe->file_size, fe->rate, MX_AUTOFREE | MX_UNSIGNED);
@ -302,10 +302,10 @@ void SndPlayScreenCoordFx(int sound, int x, int y)
if ((vp=w->viewport) &&
IS_INSIDE_1D(x, vp->virtual_left, vp->virtual_width) &&
IS_INSIDE_1D(y, vp->virtual_top, vp->virtual_height)) {
left = ((x - vp->virtual_left) >> vp->zoom) + vp->left;
StartSound(
_sound_idx[sound],
_sound_idx[sound],
clamp(left / 71, 0, 8),
(_sound_base_vol[sound] * msf.effect_vol * _vol_factor_by_zoom[vp->zoom]) >> 15
);
@ -334,8 +334,8 @@ void SndPlayVehicleFx(int sound, Vehicle *v)
void SndPlayFx(int sound)
{
StartSound(
_sound_idx[sound],
4,
_sound_idx[sound],
4,
(_sound_base_vol[sound] * msf.effect_vol) >> 7
);
}

View File

@ -28,7 +28,7 @@ struct Station {
ViewportSign sign;
uint16 had_vehicle_of_type;
byte time_since_load;
byte time_since_unload;
byte delete_ctr;

View File

@ -126,7 +126,7 @@ static Station *AllocateStation()
return NULL;
}
i = a_free->index;
i = a_free->index;
memset(a_free, 0, sizeof(Station));
a_free->index = i;
return a_free;
@ -143,7 +143,7 @@ static int CountMapSquareAround(uint tile, byte type, byte min, byte max) {
TILE_XY(-6,1), 1, 1, 1, 1, 1, 1,
TILE_XY(-6,1), 1, 1, 1, 1, 1, 1,
0,
};
};
int j;
const TileIndexDiff *p = _count_square_table;
int num = 0;
@ -189,9 +189,9 @@ static bool GenerateStationName(Station *st, uint tile, int flag)
CLRBIT(free_names, str);
}
}
}
}
}
/* check default names */
tmp = free_names & _gen_station_name_bits[flag];
if (tmp != 0) {
@ -255,9 +255,9 @@ static bool GenerateStationName(Station *st, uint tile, int flag)
~( (1<<M(STR_SV_STNAME_SOUTH)) | (1<<M(STR_SV_STNAME_EAST)) | (1<<M(STR_SV_STNAME_NORTH)) ),
~( (1<<M(STR_SV_STNAME_SOUTH)) | (1<<M(STR_SV_STNAME_WEST)) | (1<<M(STR_SV_STNAME_EAST)) ),
};
free_names &= _direction_and_table[
(GET_TILE_X(tile) < GET_TILE_X(t->xy)) +
free_names &= _direction_and_table[
(GET_TILE_X(tile) < GET_TILE_X(t->xy)) +
(GET_TILE_Y(tile) < GET_TILE_Y(t->xy))*2];
}
@ -335,7 +335,7 @@ void UpdateAllStationVirtCoord()
Station *st;
FOR_ALL_STATIONS(st) {
if (st->xy != 0)
UpdateStationVirtCoord(st);
UpdateStationVirtCoord(st);
}
}
@ -488,7 +488,7 @@ static void UpdateStationAcceptance(Station *st, bool show_msg)
}
span[4] = st->airport_tile;
if (st->airport_tile != 0) {
span[5] = st->airport_tile + TILE_XY(_airport_size_x[st->airport_type]-1, _airport_size_y[st->airport_type]-1);
span[5] = st->airport_tile + TILE_XY(_airport_size_x[st->airport_type]-1, _airport_size_y[st->airport_type]-1);
}
span[6] = st->dock_tile;
@ -529,7 +529,7 @@ static void UpdateStationAcceptance(Station *st, bool show_msg)
new_acc = GetAcceptanceMask(st);
if (old_acc == new_acc)
return;
// show a message to report that the acceptance was changed?
if (show_msg && st->owner == _local_player && st->facilities) {
uint32 accept=0, reject=0; /* these contain two string ids each */
@ -537,7 +537,7 @@ static void UpdateStationAcceptance(Station *st, bool show_msg)
do {
if (new_acc & 1) {
if (!(old_acc & 1)) accept = (accept << 16) | *str;
if (!(old_acc & 1)) accept = (accept << 16) | *str;
} else {
if (old_acc & 1) reject = (reject << 16) | *str;
}
@ -595,7 +595,7 @@ int32 CheckFlatLandBelow(uint tile, uint w, uint h, uint flags, uint invalid_dir
cost += _price.terraform;
flat_z += 8;
}
// get corresponding flat level and make sure that all parts of the station have the same level.
if (allowed_z == -1) {
// first tile
@ -605,7 +605,7 @@ int32 CheckFlatLandBelow(uint tile, uint w, uint h, uint flags, uint invalid_dir
return CMD_ERROR;
}
// if station is set, then we have special handling to allow building on top of already existing stations.
// if station is set, then we have special handling to allow building on top of already existing stations.
// so station points to -1 if we can build on any station. or it points to a station if we're only allowed to build
// on exactly that station.
if (station && IS_TILETYPE(tile_cur, MP_STATION)) {
@ -795,7 +795,7 @@ int32 CmdBuildRailroadStation(int x_org, int y_org, uint32 flags, uint32 p1, uin
st = AllocateStation();
if (st == NULL)
return CMD_ERROR;
st->town = ClosestTownFromTile(tile_org, (uint)-1);
if (_current_player < MAX_PLAYERS && flags&DC_EXEC)
SETBIT(st->town->have_ratings, _current_player);
@ -819,20 +819,20 @@ int32 CmdBuildRailroadStation(int x_org, int y_org, uint32 flags, uint32 p1, uin
st->trainst_w = finalvalues[1];
st->trainst_h = finalvalues[2];
st->build_date = _date;
tile_delta = direction ? TILE_XY(0,1) : TILE_XY(1,0);
layout_ptr = alloca(numtracks * plat_len);
GetStationLayout(layout_ptr, numtracks, plat_len);
do {
int tile = tile_org;
int w = plat_len;
do {
ModifyTile(tile,
ModifyTile(tile,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
MP_MAP2 | MP_MAP5 | MP_MAP3LO | MP_MAP3HI_CLEAR,
station_index, /* map2 parameter */
@ -866,7 +866,7 @@ static void MakeRailwayStationAreaSmaller(Station *st)
uint i;
restart:
// too small?
if (w != 0 && h != 0) {
// check the left side, x = constant, y changes
@ -966,7 +966,7 @@ static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
tile = st->train_tile;
w = st->trainst_w;
h = st->trainst_h;
assert(w != 0 && h != 0);
/* cost is area * constant */
@ -996,7 +996,7 @@ static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
UpdateStationVirtCoordDirty(st);
DeleteStationIfEmpty(st);
}
return cost;
}
@ -1056,7 +1056,7 @@ int32 CmdBuildBusStation(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (st != NULL) {
if (st->owner != OWNER_NONE && st->owner != _current_player)
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);
if (!CheckStationSpreadOut(st, tile, 1, 1))
return CMD_ERROR;
@ -1091,10 +1091,10 @@ int32 CmdBuildBusStation(int x, int y, uint32 flags, uint32 p1, uint32 p2)
st->facilities |= FACIL_BUS_STOP;
st->bus_stop_status = 3;
st->owner = _current_player;
st->build_date = _date;
ModifyTile(tile,
ModifyTile(tile,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
MP_MAP2 | MP_MAP5 | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR,
st->index, /* map2 parameter */
@ -1117,7 +1117,7 @@ static int32 RemoveBusStation(Station *st, uint32 flags)
return CMD_ERROR;
tile = st->bus_tile;
if (!EnsureNoVehicle(tile))
return CMD_ERROR;
@ -1131,7 +1131,7 @@ static int32 RemoveBusStation(Station *st, uint32 flags)
DeleteStationIfEmpty(st);
}
return _price.remove_bus_station;
return _price.remove_bus_station;
}
@ -1168,7 +1168,7 @@ int32 CmdBuildTruckStation(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (st != NULL) {
if (st->owner != OWNER_NONE && st->owner != _current_player)
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);
if (!CheckStationSpreadOut(st, tile, 1, 1))
return CMD_ERROR;
@ -1206,8 +1206,8 @@ int32 CmdBuildTruckStation(int x, int y, uint32 flags, uint32 p1, uint32 p2)
st->build_date = _date;
ModifyTile(tile,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
ModifyTile(tile,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
MP_MAP2 | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR | MP_MAP5,
st->index, /* map2 parameter */
p1 + 0x43 /* map5 parameter */
@ -1227,7 +1227,7 @@ static int32 RemoveTruckStation(Station *st, uint32 flags)
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner))
return CMD_ERROR;
tile = st->lorry_tile;
if (!EnsureNoVehicle(tile))
@ -1235,7 +1235,7 @@ static int32 RemoveTruckStation(Station *st, uint32 flags)
if (flags & DC_EXEC) {
DoClearSquare(tile);
st->lorry_tile = 0;
st->facilities &= ~FACIL_TRUCK_STOP;
@ -1243,7 +1243,7 @@ static int32 RemoveTruckStation(Station *st, uint32 flags)
DeleteStationIfEmpty(st);
}
return _price.remove_truck_station;
return _price.remove_truck_station;
}
// FIXME -- need to move to its corresponding Airport variable
@ -1294,7 +1294,7 @@ static const byte * const _airport_map5_tiles[] = {
_airport_map5_tiles_country, // Country Airfield (small)
_airport_map5_tiles_town, // City Airport (large)
_airport_map5_tiles_heliport, // Heliport
_airport_map5_tiles_metropolitan, // Metropolitain Airport (large)
_airport_map5_tiles_metropolitan, // Metropolitain Airport (large)
_airport_map5_tiles_international, // International Airport (xlarge)
};
@ -1309,12 +1309,12 @@ int32 CmdBuildAirport(int x, int y, uint32 flags, uint32 p1, uint32 p2)
Station *st;
int32 cost;
int w,h;
bool airport_upgrade = true;
bool airport_upgrade = true;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
tile = TILE_FROM_XY(x,y);
if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile))
return CMD_ERROR;
@ -1353,7 +1353,7 @@ int32 CmdBuildAirport(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (st != NULL) {
if (st->owner != OWNER_NONE && st->owner != _current_player)
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);
if (!CheckStationSpreadOut(st, tile, 1, 1))
return CMD_ERROR;
@ -1397,7 +1397,7 @@ int32 CmdBuildAirport(int x, int y, uint32 flags, uint32 p1, uint32 p2)
st->facilities |= FACIL_AIRPORT;
st->airport_type = (byte)p1;
st->airport_flags = 0;
st->build_date = _date;
/* if airport was demolished while planes were en-route to it, the positions can no longer
@ -1407,11 +1407,11 @@ int32 CmdBuildAirport(int x, int y, uint32 flags, uint32 p1, uint32 p2)
2. airport is added to existing station (unfortunately unavoideable)
*/
if (airport_upgrade) {UpdateAirplanesOnNewStation(st);}
{
const byte *b = _airport_map5_tiles[p1];
BEGIN_TILE_LOOP(tile_cur,w,h,tile)
ModifyTile(tile_cur,
ModifyTile(tile_cur,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
MP_MAP2 | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR | MP_MAP5,
st->index, *b++);
@ -1467,7 +1467,7 @@ END_TILE_LOOP(tile_cur, w,h,tile)
return cost;
}
/* Build a buoy
/* Build a buoy
* p1,p2 unused
*/
@ -1499,7 +1499,7 @@ int32 CmdBuildBuoy(int x, int y, uint32 flags, uint32 p1, uint32 p2)
st->facilities |= FACIL_DOCK;
st->had_vehicle_of_type |= HVOT_BUOY;
st->owner = OWNER_NONE;
st->build_date = _date;
ModifyTile(ti.tile,
@ -1511,7 +1511,7 @@ int32 CmdBuildBuoy(int x, int y, uint32 flags, uint32 p1, uint32 p2)
);
UpdateStationVirtCoordDirty(st);
UpdateStationAcceptance(st, false);
InvalidateWindow(WC_STATION_LIST, st->owner);
}
@ -1538,7 +1538,7 @@ static int32 RemoveBuoy(Station *st, uint32 flags)
st->facilities &= ~FACIL_DOCK;
st->had_vehicle_of_type &= ~HVOT_BUOY;
ModifyTile(tile,
ModifyTile(tile,
MP_SETTYPE(MP_WATER) |
MP_MAP2_CLEAR | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR | MP_MAPOWNER | MP_MAP5 | MP_MAP2_CLEAR,
OWNER_WATER, /* map_owner */
@ -1602,13 +1602,13 @@ int32 CmdBuildDock(int x, int y, uint32 flags, uint32 p1, uint32 p2)
FindLandscapeHeightByTile(&ti, tile_cur);
if (ti.tileh != 0 || ti.type != MP_WATER)
return_cmd_error(STR_304B_SITE_UNSUITABLE);
/* middle */
st = GetStationAround(tile + _dock_tileoffs_chkaround[direction],
st = GetStationAround(tile + _dock_tileoffs_chkaround[direction],
_dock_w_chk[direction], _dock_h_chk[direction], -1);
if (st == CHECK_STATIONS_ERR)
return CMD_ERROR;
/* Find a station close to us */
if (st == NULL) {
st = GetClosestStationFromTile(tile, 8, _current_player);
@ -1618,7 +1618,7 @@ int32 CmdBuildDock(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (st != NULL) {
if (st->owner != OWNER_NONE && st->owner != _current_player)
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);
if (!CheckStationSpreadOut(st, tile, 1, 1))
return CMD_ERROR;
@ -1650,23 +1650,23 @@ int32 CmdBuildDock(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!st->facilities) st->xy = tile;
st->facilities |= FACIL_DOCK;
st->owner = _current_player;
st->build_date = _date;
ModifyTile(tile,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
ModifyTile(tile,
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
MP_MAP2 | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR |
MP_MAP5,
st->index,
direction + 0x4C);
ModifyTile(tile + _tileoffs_by_dir[direction],
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
ModifyTile(tile + _tileoffs_by_dir[direction],
MP_SETTYPE(MP_STATION) | MP_MAPOWNER_CURRENT |
MP_MAP2 | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR |
MP_MAP5,
st->index,
(direction&1) + 0x50);
UpdateStationVirtCoordDirty(st);
UpdateStationAcceptance(st, false);
InvalidateWindow(WC_STATION_LIST, st->owner);
@ -1747,13 +1747,13 @@ static void DrawTile_Station(TileInfo *ti)
t += sizeof(uint32);
if (image & 0x8000)
image |= image_or_modificator;
DrawGroundSprite(image + base_img);
DrawGroundSprite(image + base_img);
for(dtss = (DrawTileSeqStruct *)t; (byte)dtss->delta_x != 0x80; dtss++) {
if ((byte)dtss->delta_z != 0x80) {
image = dtss->image + base_img;
if (_display_opt & DO_TRANS_BUILDINGS) {
if (image&0x8000) image |= image_or_modificator;
if (image&0x8000) image |= image_or_modificator;
} else {
image = (image & 0x3FFF) | 0x03224000;
}
@ -1763,7 +1763,7 @@ static void DrawTile_Station(TileInfo *ti)
image = *(uint32*)&dtss->height + base_img; /* endian ok */
if (_display_opt & DO_TRANS_BUILDINGS) {
if (image&0x8000) image |= image_or_modificator;
if (image&0x8000) image |= image_or_modificator;
} else {
image = (image & 0x3FFF) | 0x03224000;
}
@ -1852,7 +1852,7 @@ static uint32 GetTileTrackStatus_Station(uint tile, TransportType mode) {
(IS_BYTE_INSIDE(i, 0x47, 0x4B) && (_patches.roadveh_queue || st->bus_stop_status&3)) ) {
/* This is a bus/truck stop, and there is free space
* (or we allow queueing) */
/* We reverse the dir because it points out of the
* exit, and we want to get in. Maybe we should return
* both dirs here? */
@ -1878,7 +1878,7 @@ static void TileLoop_Station(uint tile)
// 0x3A - flag small airport (58)
if (_map5[tile] == 39 || _map5[tile] == 58 || _map5[tile] == 90 || _map5[tile] == 102)
AddAnimatedTile(tile);
// treat a bouy tile as water.
else if (_map5[tile] == 0x52)
TileLoop_Water(tile);
@ -1900,7 +1900,7 @@ static void AnimateTile_Station(uint tile)
if (m5 >= 39 && m5 <= 50) { // turning radar (39 - 50)
if (_tick_counter & 3)
return;
if (++m5 == 50+1)
m5 = 39;
@ -1910,14 +1910,14 @@ static void AnimateTile_Station(uint tile)
} else if (m5 >= 90 && m5 <= 113) { // turning radar with ground under it (different fences) (90 - 101 | 102 - 113)
if (_tick_counter & 3)
return;
m5++;
if (m5 == 101+1) {m5 = 90;} // radar with fences in south
else if (m5 == 113+1) {m5 = 102;} // radar with fences in north
_map5[tile] = m5;
MarkTileDirtyByTile(tile);
MarkTileDirtyByTile(tile);
//added - end
} else if (m5 >= 0x3A && m5 <= 0x3D) { // windsack (58 - 61)
if (_tick_counter & 1)
@ -1925,7 +1925,7 @@ static void AnimateTile_Station(uint tile)
if (++m5 == 0x3D+1)
m5 = 0x3A;
_map5[tile] = m5;
MarkTileDirtyByTile(tile);
}
@ -1957,17 +1957,17 @@ static uint32 VehicleEnter_Station(Vehicle *v, uint tile, int x, int y)
uint16 spd;
if (v->type == VEH_Train) {
if (IS_BYTE_INSIDE(_map5[tile], 0, 8) && v->subtype == 0 &&
if (IS_BYTE_INSIDE(_map5[tile], 0, 8) && v->subtype == 0 &&
!IsTrainStationTile(tile + _tileoffs_by_dir[v->direction >> 1])) {
station_id = _map2[tile];
if ((!(v->next_order & OF_NON_STOP) && !_patches.new_nonstop) ||
if ((!(v->next_order & OF_NON_STOP) && !_patches.new_nonstop) ||
(((v->next_order & OT_MASK) == OT_GOTO_STATION && v->next_order_param == station_id))) {
if (!(_patches.new_nonstop && (v->next_order & OF_NON_STOP)) && v->next_order != OT_LEAVESTATION && v->last_station_visited != station_id) {
x &= 0xF;
y &= 0xF;
dir = v->direction & 6;
if (dir & 2) intswap(x,y);
if (y == 8) {
@ -1983,7 +1983,7 @@ static uint32 VehicleEnter_Station(Vehicle *v, uint tile, int x, int y)
}
}
}
}
}
}
} else if (v->type == VEH_Road) {
if (v->u.road.state < 16 && (v->u.road.state&4)==0 && v->u.road.frame==0) {
@ -2015,7 +2015,7 @@ static uint32 VehicleEnter_Station(Vehicle *v, uint tile, int x, int y)
}
}
}
return 0;
}
@ -2041,7 +2041,7 @@ void DeleteAllPlayerStations()
FOR_ALL_STATIONS(st) {
if (st->xy && st->owner < MAX_PLAYERS)
DeleteStation(st);
DeleteStation(st);
}
}
@ -2111,7 +2111,7 @@ static void UpdateStationRating(Station *st)
(rating += 45, days > 3) ||
(rating += 35, true);
}
{
waiting = ge->waiting_acceptance & 0xFFF;
(rating -= 90, waiting > 1500) ||
@ -2127,7 +2127,7 @@ static void UpdateStationRating(Station *st)
// only modify rating in steps of -2, -1, 0, 1 or 2
ge->rating = rating = or + clamp(clamp(rating, 0, 255) - or, -2, 2);
// if rating is <= 64 and more than 200 items waiting, remove some random amount of goods from the station
if (rating <= 64 && waiting >= 200) {
int dec = Random() & 0x1F;
@ -2150,7 +2150,7 @@ static void UpdateStationRating(Station *st)
}
}
} while (++ge != endof(st->goods));
index = st->index;
if (waiting_changed)
@ -2223,8 +2223,8 @@ void ModifyStationRatingAround(TileIndex tile, byte owner, int amount, uint radi
static void UpdateStationWaiting(Station *st, int type, uint amount)
{
st->goods[type].waiting_acceptance =
(st->goods[type].waiting_acceptance & ~0xFFF) +
st->goods[type].waiting_acceptance =
(st->goods[type].waiting_acceptance & ~0xFFF) +
min(0xFFF, (st->goods[type].waiting_acceptance & 0xFFF) + amount);
st->goods[type].enroute_time = 0;
@ -2240,7 +2240,7 @@ int32 CmdRenameStation(int x, int y, uint32 flags, uint32 p1, uint32 p2)
str = AllocateName((byte*)_decode_parameters, 6);
if (str == 0)
return CMD_ERROR;
if (flags & DC_EXEC) {
st = DEREF_STATION(p1);
old_str = st->string_id;
@ -2282,11 +2282,11 @@ uint MoveGoodsToStation(uint tile, int w, int h, int type, uint amount)
st = DEREF_STATION(st_index);
if ((st->had_vehicle_of_type & HVOT_BUOY) == 0 &&
( !st->town->exclusive_counter || (st->town->exclusivity == st->owner) ) && // check exclusive transport rights
st->goods[type].rating != 0 &&
st->goods[type].rating != 0 &&
(!_patches.selectgoods || st->goods[type].last_speed) && // if last_speed is 0, no vehicle has been there.
((st->facilities & (byte)~FACIL_BUS_STOP)!=0 || type==CT_PASSENGERS) && // if we have other fac. than a bus stop, or the cargo is passengers
((st->facilities & (byte)~FACIL_TRUCK_STOP)!=0 || type!=CT_PASSENGERS)) { // if we have other fac. than a cargo bay or the cargo is not passengers
around[i] = st_index;
around_ptr[i] = st;
}
@ -2320,10 +2320,10 @@ uint MoveGoodsToStation(uint tile, int w, int h, int type, uint amount)
st1 = around_ptr[i];
} else if (around_ptr[i]->goods[type].rating >= best_rating2) {
best_rating2 = around_ptr[i]->goods[type].rating;
st2 = around_ptr[i];
st2 = around_ptr[i];
}
}
assert(st1 != NULL);
assert(st2 != NULL);
assert(best_rating != 0 || best_rating2 != 0);
@ -2338,7 +2338,7 @@ uint MoveGoodsToStation(uint tile, int w, int h, int type, uint amount)
if (t != 0) {
moved = (t * best_rating >> 8) + 1;
amount -= t;
UpdateStationWaiting(st1, type, moved);
UpdateStationWaiting(st1, type, moved);
}
assert(amount >= 0);
@ -2398,7 +2398,7 @@ void BuildOilRig(uint tile)
UpdateStationVirtCoordDirty(st);
UpdateStationAcceptance(st, false);
return;
return;
}
}
}
@ -2456,10 +2456,10 @@ static int32 ClearTile_Station(uint tile, byte flags) {
// original airports < 67, new airports between 83 - 114
if (m5 < 0x43 || ( m5 >= 83 && m5 <= 114) )
return RemoveAirport(st, flags);
if (m5 < 0x47)
return RemoveTruckStation(st, flags);
if (m5 < 0x4B)
return RemoveBusStation(st, flags);
@ -2527,7 +2527,7 @@ static const byte _station_desc[] = {
SLE_VAR(Station,airport_type, SLE_UINT8),
SLE_VAR(Station,truck_stop_status, SLE_UINT8),
SLE_VAR(Station,bus_stop_status, SLE_UINT8),
// blocked_months was stored here in savegame format 0 - 4.0
SLE_CONDVAR(Station,blocked_months_obsolete, SLE_UINT8, 0, 4),

View File

@ -16,7 +16,7 @@ static void StationsWndShowStationRating(int x, int y, int type, uint acceptance
if (acceptance > 575)
acceptance = 575;
acceptance = (acceptance + 7) >> 3;
/* draw cargo */
@ -31,12 +31,12 @@ static void StationsWndShowStationRating(int x, int y, int type, uint acceptance
}
x -= (acceptance>>3);
DrawString(x+1, y, _cargoc.names_short[type], 0x10);
/* draw green/red ratings bar */
GfxFillRect(x+1, y+8, x+7, y+8, 0xB8);
rating = (rating >> 5);
if (rating != 0) {
@ -110,7 +110,7 @@ static void MakeSortedStationList(byte owner)
}
qsort(firstelement, n, sizeof(_station_sort[0]), StationNameSorter);
DEBUG(misc, 1) ("Resorting Stations list...");
}
@ -151,7 +151,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e)
DrawString(xb, y, STR_304A_NONE, 0);
return;
}
i += w->vscroll.pos; // offset from sorted station list of current player
assert(i < _num_station_sort[window_number]); // at least one station must exist
@ -318,7 +318,7 @@ static void DrawStationViewWindow(Window *w)
uint waiting = (st->goods[i].waiting_acceptance & 0xFFF);
if (waiting == 0)
continue;
num = (waiting + 5) / 10;
if (num != 0) {
int cur_x = x;
@ -352,7 +352,7 @@ static void DrawStationViewWindow(Window *w)
}
}
} while (pos > -5 && ++i != 12);
if (w->widget == _station_view_widgets) {
b = _userstring;
b[0] = 0x81;
@ -368,7 +368,7 @@ static void DrawStationViewWindow(Window *w)
b += 5;
}
}
if (b == (byte*)&_userstring[3]) {
b[0] = 0x81;
b[1] = STR_00D0_NOTHING;
@ -380,7 +380,7 @@ static void DrawStationViewWindow(Window *w)
DrawStringMultiLine(2, 67, STR_SPEC_USERSTRING, 245);
} else {
DrawString(2, 67, STR_3034_LOCAL_RATING_OF_TRANSPORT, 0);
y = 77;
@ -412,7 +412,7 @@ static void StationViewWndProc(Window *w, WindowEvent *e)
case 7:
SetWindowDirty(w);
/* toggle height/widget set */
w->height ^= (210 ^ 110);
*(uint32*)&w->widget ^= (uint32)_station_view_expanded_widgets ^ (uint32)_station_view_widgets;
@ -438,7 +438,7 @@ static void StationViewWndProc(Window *w, WindowEvent *e)
st = DEREF_STATION(w->window_number);
DoCommandP(st->xy, w->window_number, 0, NULL, CMD_RENAME_STATION | CMD_MSG(STR_3031_CAN_T_RENAME_STATION));
} break;
} break;
}
}

View File

@ -119,7 +119,7 @@ static uint32 INLINE TO_LE32(uint32 x) { return BSWAP32(x); }
static uint16 INLINE TO_LE16(uint16 x) { return BSWAP16(x); }
# define TO_BE32(x) x
# define TO_BE16(x) x
#define TO_BE32X(x) x
#define TO_BE32X(x) x
#else
# define TO_LE32(x) x
# define TO_LE16(x) x

View File

@ -68,7 +68,7 @@ static const CurrencySpec _currency_specs[] = {
{ 3, ',', CF_TOEURO_2002, "NLG ", "" },
{ 2730,',', CF_TOEURO_2002, "ITL ", "" },
{ 13, '.', 0, "", " kr" },
{ 5, ' ', 0, "", " rur" },
{ 5, ' ', 0, "", " rur" },
{ 50, ',', 0, "", " Kc" },
{ 130, '.', 0, "", " kr" },
{ 11, '.', 0, "", " kr" },
@ -171,9 +171,9 @@ byte *GetString(byte *buffr, uint16 string)
return DecodeString(buffr, GetStringPtr(string));
}
void InjectDparam(int amount)
void InjectDparam(int amount)
{
memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint32));
memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint32));
}
@ -301,7 +301,7 @@ static byte *FormatYmdString(byte *buff, uint16 number)
ConvertDayToYMD(&ymd, number);
for(src = GetStringPtr(ymd.day+STR_01AC_1ST-1); (*buff++=*src++) != 0;) {}
buff[-1] = ' ';
memcpy(buff, GetStringPtr(STR_0162_JAN + ymd.month), 4);
buff[3] = ' ';
@ -338,7 +338,7 @@ static byte *FormatGenericCurrency(byte *buff, const CurrencySpec *spec, int64 n
// convert from negative
if (number < 0) { *buff++ = '-'; number = -number; }
// add pre part
s = spec->pre;
while (s != spec->pre + lengthof(spec->pre) && (c=*s++)) *buff++ = c;
@ -352,13 +352,13 @@ static byte *FormatGenericCurrency(byte *buff, const CurrencySpec *spec, int64 n
} else if (number >= 1000000) {
number = (number + 500) / 1000;
compact = 'k';
}
}
}
// convert to ascii number and add commas
p = buf;
j = 4;
do {
do {
if (--j == 0) { *p++ = spec->separator; j = 3; }
*p++ = '0' + number % 10;
} while (number /= 10);
@ -427,8 +427,8 @@ static byte *DecodeString(byte *buff, const byte *str)
}
break;
}
// 0x85 is used as escape character..
// 0x85 is used as escape character..
case 0x85:
switch(*str++) {
case 0:
@ -453,7 +453,7 @@ static byte *DecodeString(byte *buff, const byte *str)
// liquid type of cargo is multiplied by 100 to get correct amount
buff = FormatCommaNumber(buff, GetParamInt16() * multiplier );
s = GetStringPtr(cargo_str);
memcpy(buff++, " ", 1);
while (*s) *buff++ = *s++;
break;
@ -476,7 +476,7 @@ static byte *DecodeString(byte *buff, const byte *str)
while (*s) *buff++ = *s++;
break;
}
case 0x88: // {STRING}
buff = GetString(buff, (uint16)GetParamUint16());
break;
@ -515,7 +515,7 @@ static byte *DecodeString(byte *buff, const byte *str)
}
case 0x9C: { // {CURRENCY64}
buff = FormatGenericCurrency(buff, &_currency_specs[_opt.currency], GetParamInt64(), false);
buff = FormatGenericCurrency(buff, &_currency_specs[_opt.currency], GetParamInt64(), false);
break;
}
@ -567,7 +567,7 @@ static byte *StationGetSpecialString(byte *buff)
static byte *GetSpecialTownNameString(byte *buff, int ind) {
uint32 x = GetParamInt32();
_town_name_generators[ind](buff, x);
while (*buff != 0) buff++;
@ -669,7 +669,7 @@ static byte *GenPlayerName_4(byte *buff)
if (i < sizeof(_initial_name_letters)) {
buff[0] = _initial_name_letters[i];
buff[1] = '.';
buff += 2;
buff += 2;
}
base = 0;
@ -712,7 +712,7 @@ static const char * const _song_names[] = {
static byte *GetSpecialPlayerNameString(byte *buff, int ind)
{
switch(ind) {
// not used
case 1: {
int i = GetParamInt32() & 0xFFFF;
@ -789,14 +789,14 @@ bool ReadLanguagePack(int lang_index) {
free(lang);
}
if (lang_pack == NULL) return false;
if (len < sizeof(LanguagePackHeader) ||
if (len < sizeof(LanguagePackHeader) ||
HDR->ident != TO_LE32(LANGUAGE_PACK_IDENT) ||
HDR->version != TO_LE32(LANGUAGE_PACK_VERSION)) {
free(lang_pack);
return false;
}
#undef HDR
#if defined(TTD_BIG_ENDIAN)
for(i=0; i!=32; i++) {
((LanguagePackHeader*)lang_pack)->offsets[i] = READ_LE_UINT16(&((LanguagePackHeader*)lang_pack)->offsets[i]);
@ -855,7 +855,7 @@ void InitializeLanguagePacks()
char *s = str_fmt("%s%s", _path.lang_dir, files[i]);
in = fopen(s, "rb");
free(s);
if (!in ||
if (!in ||
(j = fread(&hdr, sizeof(hdr), 1, in), fclose(in), j) != 1 ||
hdr.ident != TO_LE32(LANGUAGE_PACK_IDENT) ||
hdr.version != TO_LE32(LANGUAGE_PACK_VERSION)) {
@ -865,7 +865,7 @@ void InitializeLanguagePacks()
dl->ent[m].file = files[i];
dl->ent[m].name = strdup(hdr.name);
if (!strcmp(hdr.name, "English")) def = m;
m++;
@ -873,7 +873,7 @@ void InitializeLanguagePacks()
if (m == 0)
error(n == 0 ? "No available language packs" : "Invalid version of language packs");
dl->num = m;
for(i=0; i!=dl->num; i++)
dl->dropdown[i] = SPECSTR_LANGUAGE_START + i;

View File

@ -10,7 +10,7 @@
#include "economy.h"
static void HandleSubsidyClick(int y)
{
{
Subsidy *s;
int num,offs;
TileIndex xy;
@ -42,7 +42,7 @@ static void HandleSubsidyClick(int y)
}
}
return;
handle_click:
/* determine from coordinate for subsidy and try to scroll to it */
@ -53,7 +53,7 @@ handle_click:
xy = DEREF_TOWN(offs)->xy;
} else {
xy = _industries[offs].xy;
}
if (!ScrollMainWindowToTile(xy)) {
/* otherwise determine to coordinate for subsidy and scroll to it */
@ -90,7 +90,7 @@ static void DrawSubsidiesWindow(Window *w)
if (s->cargo_type != 0xFF && s->age < 12) {
SetupSubsidyDecodeParam(s, 1);
x2 = DrawString(x+2, y, STR_2027_FROM_TO, 0);
SET_DPARAM16(0, _date - ymd.day + 384 - s->age * 32);
DrawString(x2, y, STR_2028_BY, 0);
y += 10;

View File

@ -21,9 +21,9 @@ static void CcTerraform(bool success, uint tile, uint32 p1, uint32 p2)
static void GenericRaiseLowerLand(uint tile, int mode)
{
if (mode) {
DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0808_CAN_T_RAISE_LAND_HERE));
DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0808_CAN_T_RAISE_LAND_HERE));
} else {
DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0809_CAN_T_LOWER_LAND_HERE));
DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0809_CAN_T_LOWER_LAND_HERE));
}
}
@ -94,7 +94,7 @@ static void TerraformClick_BuyLand(Window *w)
static void TerraformClick_Trees(Window *w)
{
if (HandlePlacePushButton(w, 8, 0, 1, PlaceProc_PlantTree)) ShowBuildTreesToolbar();
if (HandlePlacePushButton(w, 8, 0, 1, PlaceProc_PlantTree)) ShowBuildTreesToolbar();
}
static void TerraformClick_PlaceSign(Window *w)
@ -159,7 +159,7 @@ static void TerraformToolbWndProc(Window *w, WindowEvent *e)
DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_LEVEL_LAND | CMD_AUTO);
} else if (e->place.userdata == VPM_X_AND_Y_LIMITED) {
// if (e->click.pt.x != -1) {
// DoCommandP(e->place.tile, _tree_to_plant, e->place.starttile, NULL,
// DoCommandP(e->place.tile, _tree_to_plant, e->place.starttile, NULL,
// CMD_PLANT_TREE | CMD_AUTO | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
} else {
assert(true);

View File

@ -33,7 +33,7 @@ void AddTextEffect(StringID msg, int x, int y, uint16 duration)
if (_game_mode == GM_MENU)
return;
for (te = _text_effect_list; te->string_id != 0xFFFF; ) {
if (++te == endof(_text_effect_list))
return;
@ -115,7 +115,7 @@ void DrawTextEffects(DrawPixelInfo *dpi)
continue;
AddStringToDraw(te->x, te->y, (StringID)(te->string_id-1), te->params_1, te->params_2);
}
}
}
@ -131,7 +131,7 @@ void DeleteAnimatedTile(uint tile)
endof(_animated_tile_list)[-1] = 0;
MarkTileDirtyByTile(tile);
return;
}
}
}
}
@ -145,7 +145,7 @@ bool AddAnimatedTile(uint tile)
MarkTileDirtyByTile(tile);
return true;
}
}
}
return false;
}

16
town.h
View File

@ -9,14 +9,14 @@ struct Town {
// Current population of people and amount of houses.
uint16 num_houses;
uint32 population;
// Town name
uint16 townnametype;
uint32 townnameparts;
// NOSAVE: Location of name sign, UpdateTownVirtCoord updates this.
// NOSAVE: Location of name sign, UpdateTownVirtCoord updates this.
ViewportSign sign;
// Makes sure we don't build certain house types twice.
byte flags12;
@ -32,7 +32,7 @@ struct Town {
uint8 exclusivity; // which player has exslusivity
uint8 exclusive_counter; // months till the exclusivity expires
int16 ratings[MAX_PLAYERS];
// Maximum amount of passengers and mail that can be transported.
uint16 max_pass;
uint16 max_mail;
@ -52,17 +52,17 @@ struct Town {
uint16 act_water;
uint16 new_act_food;
uint16 new_act_water;
// Time until we rebuild a house.
byte time_until_rebuild;
// When to grow town next time.
byte grow_counter;
byte growth_rate;
byte growth_rate;
// Fund buildings program in action?
byte fund_buildings_months;
// Fund road reconstruction in action?
byte road_build_months;

View File

@ -76,8 +76,8 @@ static void DrawTile_Town(TileInfo *ti)
if ((image = dcts->sprite_2) != 0) {
if (!(_display_opt & DO_TRANS_BUILDINGS))
image = (image & 0x3FFF) | 0x3224000;
AddSortableSpriteToDraw(image,
AddSortableSpriteToDraw(image,
ti->x | (dcts->subtile_xy>>4),
ti->y | (dcts->subtile_xy&0xF),
(dcts->width_height>>4)+1,
@ -100,7 +100,7 @@ static uint GetSlopeZ_Town(TileInfo *ti)
{
uint z = GetPartialZ(ti->x&0xF, ti->y&0xF, ti->tileh) + ti->z;
if (ti->tileh != 0) z = (z & ~7) + 4;
return (uint16) z;
return (uint16) z;
}
static uint GetSlopeTileh_Town(TileInfo *ti)
@ -140,7 +140,7 @@ static void AnimateTile_Town(uint tile)
_map_owner[tile] &= 0x7F;
DeleteAnimatedTile(tile);
}
MarkTileDirtyByTile(tile);
}
@ -169,9 +169,9 @@ static void ChangePopulation(Town *t, int mod)
static void MakeSingleHouseBigger(uint tile)
{
byte b;
assert(IS_TILETYPE(tile, MP_HOUSE));
b = _map5[tile];
if (b & 0x80)
return;
@ -185,14 +185,14 @@ static void MakeSingleHouseBigger(uint tile)
if ( (_map3_lo[tile] & 0xC0) == 0xC0) {
Town *t = ClosestTownFromTile(tile, (uint)-1);
ChangePopulation(t, _housetype_population[_map2[tile]]);
ChangePopulation(t, _housetype_population[_map2[tile]]);
}
MarkTileDirtyByTile(tile);
}
static void MakeTownHouseBigger(uint tile)
{
uint flags = _house_more_flags[_map2[tile]];
uint flags = _house_more_flags[_map2[tile]];
if (flags & 8) MakeSingleHouseBigger(TILE_ADDXY(tile, 0, 0));
if (flags & 4) MakeSingleHouseBigger(TILE_ADDXY(tile, 0, 1));
if (flags & 2) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 0));
@ -245,7 +245,7 @@ static void TileLoop_Town(uint tile)
_current_player = OWNER_TOWN;
ClearTownHouse(t, tile);
// rebuild with another house?
if ( (byte) (r >> 8) >= 12) {
DoBuildTownHouse(t, tile);
@ -274,12 +274,12 @@ static int32 ClearTile_Town(uint tile, byte flags)
rating = _housetype_remove_ratingmod[house];
_cleared_town_rating += rating;
_cleared_town = t = ClosestTownFromTile(tile, (uint)-1);
if (_current_player < MAX_PLAYERS) {
if (rating > t->ratings[_current_player] && !(flags & DC_NO_TOWN_RATING) && !_cheats.magic_bulldozer.value) {
SET_DPARAM16(0, t->index);
return_cmd_error(STR_2009_LOCAL_AUTHORITY_REFUSES);
}
}
}
if (flags & DC_EXEC) {
@ -293,7 +293,7 @@ static int32 ClearTile_Town(uint tile, byte flags)
static void GetAcceptedCargo_Town(uint tile, AcceptedCargo *ac)
{
int type = _map2[tile];
ac->type_1 = CT_PASSENGERS;
ac->amount_1 = _housetype_cargo_passengers[type];
@ -336,7 +336,7 @@ static const TileIndexDiff _roadblock_tileadd[4+3] = {
TILE_XY(1,0),
TILE_XY(0,1),
TILE_XY(-1,0),
// Store the first 3 elements again.
// Lets us rotate without using &3.
TILE_XY(0,-1),
@ -352,7 +352,7 @@ static void TownTickHandler(Town *t)
if (GrowTown(t)) {
i = t->growth_rate;
} else {
i = 0;
i = 0;
}
}
t->grow_counter = i;
@ -400,7 +400,7 @@ static bool IsRoadAllowedHere(uint tile, int dir)
// If this assertion fails, it might be because the world contains
// land at the edges. This is not ok.
TILE_ASSERT(tile);
for(;;) {
// Check if there already is a road at this point?
if (GetRoadBitsByTile(tile) == 0) {
@ -421,11 +421,11 @@ static bool IsRoadAllowedHere(uint tile, int dir)
HASBIT(GetTownRoadMask(TILE_ADD(tile, _roadblock_tileadd[dir+1] + _roadblock_tileadd[dir+2])), dir) ||
HASBIT(GetTownRoadMask(TILE_ADD(tile, _roadblock_tileadd[dir+3] + _roadblock_tileadd[dir+2])), dir))
return false;
// Otherwise allow
return true;
}
// If the tile is not a slope in the right direction, then
// maybe terraform some.
if ((k = (dir&1)?0xC:0x9) != slope && (k^0xF) != slope) {
@ -447,7 +447,7 @@ static bool IsRoadAllowedHere(uint tile, int dir)
static bool TerraformTownTile(uint tile, int edges, int dir)
{
int32 r;
TILE_ASSERT(tile);
r = DoCommandByTile(tile, edges, dir, DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
@ -491,7 +491,7 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
if (mask == 0) {
// Tile has no road. First reset the status counter
// to say that this is the last iteration.
// to say that this is the last iteration.
_grow_town_result = 0;
// Then check if the tile we are at belongs to the town,
@ -520,7 +520,7 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
// return if the road we're trying to build is curved.
if ( a != (b^2))
return;
// Return if neither side of the new road is a house
if (!IS_TILETYPE(TILE_ADD(tile,_roadblock_tileadd[a+1]), MP_HOUSE) &&
!IS_TILETYPE(TILE_ADD(tile,_roadblock_tileadd[a+3]), MP_HOUSE))
@ -544,7 +544,7 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
*tile_ptr = flotr.tile;
return;
}
// For any other kind of tunnel/bridge, bail out.
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE))
return;
@ -557,7 +557,7 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
// This is the tile we will reach if we extend to this direction.
tmptile = TILE_ADD(tile,_roadblock_tileadd[i]);
// Don't do it if it reaches to water.
if (IS_WATER_TILE(tmptile))
return;
@ -569,7 +569,7 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
return;
}
// Build a house at the edge. 60% chance or
// Build a house at the edge. 60% chance or
// always ok if no road allowed.
if (!IsRoadAllowedHere(tmptile, i) || CHANCE16(6,10)) {
// But not if there already is a house there.
@ -722,7 +722,7 @@ bool GrowTown(Town *t)
return GrowTownAtRoad(t, tile);
}
offs = *ptr++;
tile = TILE_ADD(tile, offs);
} while (offs);
@ -732,7 +732,7 @@ bool GrowTown(Town *t)
ptr = _town_coord_mod;
do {
FindLandscapeHeightByTile(&ti, tile);
// Only work with plain land that not already has a house with map5=0
if (ti.tileh == 0 && !(ti.type==MP_HOUSE && ti.map5==0)) {
if (DoCommandByTile(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR) != CMD_ERROR) {
@ -800,7 +800,7 @@ restart:
SET_DPARAM32(0, r);
GetString(buf1, t1->townnametype);
// Check size and width
if (strlen(buf1) >= 31 || GetStringWidth(buf1) > 130)
continue;
@ -814,7 +814,7 @@ restart:
}
}
t1->townnameparts = r;
return;
}
}
@ -868,7 +868,7 @@ static void DoCreateTown(Town *t, TileIndex tile)
t->statues = 0;
CreateTownName(t);
UpdateTownVirtCoord(t);
_town_sort_dirty = true;
@ -906,7 +906,7 @@ int32 CmdBuildTown(int x, int y, uint32 flags, uint32 p1, uint32 p2)
uint tile = TILE_FROM_XY(x,y);
TileInfo ti;
Town *t;
SET_EXPENSES_TYPE(EXPENSES_OTHER);
// Check if too close to the edge of map
@ -925,7 +925,7 @@ int32 CmdBuildTown(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// Allocate town struct
t = AllocateTown();
if (t == NULL)
return_cmd_error(STR_023A_TOO_MANY_TOWNS);
return_cmd_error(STR_023A_TOO_MANY_TOWNS);
// Create the town
if (flags & DC_EXEC) {
@ -959,7 +959,7 @@ Town *CreateRandomTown()
// Check not too close to a town
if (IsCloseToTown(tile, 20))
continue;
// Allocate a town struct
t = AllocateTown();
if (t == NULL)
@ -1042,7 +1042,7 @@ static bool CheckFree2x2Area(Town *t1, uint tile)
tile += _tile_add[i];
t = ClosestTownFromTile(tile, (uint)-1);
if (t1 != t)
if (t1 != t)
return false;
if (GetTileSlope(tile, NULL))
@ -1063,7 +1063,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
uint slope;
int z;
uint oneof;
// Above snow?
slope = GetTileSlope(tile, &z);
@ -1110,7 +1110,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
// Make sure there is no slope?
if (_housetype_extra_flags[house]&0x12 && slope)
continue;
if (_housetype_extra_flags[house]&0x10) {
if (CheckFree2x2Area(t,tile) ||
CheckFree2x2Area(t,(tile+=TILE_XY(-1,0))) ||
@ -1121,7 +1121,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
} else if (_housetype_extra_flags[house]&4) {
if (CheckBuildHouseMode(t, tile+TILE_XY(1,0), slope, 0))
break;
if (CheckBuildHouseMode(t, tile+TILE_XY(-1,0), slope, 1)) {
tile += TILE_XY(-1,0);
break;
@ -1143,7 +1143,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
// Special houses that there can be only one of.
t->flags12 |= oneof;
{
int m3lo,m5,eflags;
@ -1152,21 +1152,21 @@ static void DoBuildTownHouse(Town *t, uint tile)
m5 = 0;
if (_generating_world) {
uint32 r = Random();
// Value for map3lo
m3lo = 0xC0;
if ((byte)r >= 220) m3lo &= (r>>8);
if (m3lo == 0xC0)
ChangePopulation(t, _housetype_population[house]);
// Initial value for map5.
m5 = (r >> 16) & 0x3F;
}
assert(IS_TILETYPE(tile, MP_CLEAR));
ModifyTile(tile,
ModifyTile(tile,
MP_SETTYPE(MP_HOUSE) | MP_MAP2 | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5 | MP_MAPOWNER,
house, /* map2 */
m3lo, /* map3_lo */
@ -1216,7 +1216,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
static bool BuildTownHouse(Town *t, uint tile)
{
int32 r;
// make sure it's possible
if (!EnsureNoVehicle(tile)) return false;
if (GetTileSlope(tile, NULL) & 0x10) return false;
@ -1258,7 +1258,7 @@ static void ClearTownHouse(Town *t, uint tile) {
tile += TILE_XY(-1,-1);
}
}
// Remove population from the town if the
// house is finished.
if ((~_map3_lo[tile] & 0xC0) == 0) {
@ -1273,7 +1273,7 @@ static void ClearTownHouse(Town *t, uint tile) {
t->flags12 &= ~2;
if (house == 0x14 || house == 0x20)
t->flags12 &= ~4;
// Do the actual clearing of tiles
eflags = _housetype_extra_flags[house];
DoClearTownHouseHelper(tile);
@ -1286,7 +1286,7 @@ int32 CmdRenameTown(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
Town *t = DEREF_TOWN(p1);
str = AllocateName((byte*)_decode_parameters, 4);
if (str == 0)
return CMD_ERROR;
@ -1349,7 +1349,7 @@ void ExpandTown(Town *t)
int amount, n;
_generating_world = true;
amount = ((int)Random()&3) + 3;
t->num_houses += amount;
UpdateTownRadius(t);
@ -1374,7 +1374,7 @@ static void TownActionAdvertise(Town *t, int action)
{
static const byte _advertising_amount[3] = {0x40, 0x70, 0xA0};
static const byte _advertising_radius[3] = {10,15,20};
ModifyStationRatingAround(t->xy, _current_player,
ModifyStationRatingAround(t->xy, _current_player,
_advertising_amount[action],
_advertising_radius[action]);
}
@ -1384,14 +1384,14 @@ static void TownActionRoadRebuild(Town *t, int action)
Player *p;
t->road_build_months = 6;
SET_DPARAM16(0, t->index);
p = DEREF_PLAYER(_current_player);
SET_DPARAM16(1, p->name_1);
SET_DPARAM32(2, p->name_2);
AddNewsItem(STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING,
AddNewsItem(STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING,
NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_GENERAL, 0), t->xy, 0);
}
@ -1429,7 +1429,7 @@ static void TownActionBuildStatue(Town *t, int action)
// Layouted as an outward spiral
static const TileIndexDiff _statue_tiles[] = {
TILE_XY(-1,0), TILE_XY(0,1), TILE_XY(1,0), TILE_XY(1,0),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(-1,0), TILE_XY(-1,0),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(-1,0), TILE_XY(-1,0),
TILE_XY(-1,0), TILE_XY(0,1), TILE_XY(0,1), TILE_XY(0,1),
TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1),
@ -1437,7 +1437,7 @@ static void TownActionBuildStatue(Town *t, int action)
TILE_XY(-1,0), TILE_XY(0,1), TILE_XY(0,1), TILE_XY(0,1),
TILE_XY(0,1), TILE_XY(0,1), TILE_XY(1,0), TILE_XY(1,0),
TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(-1,0), TILE_XY(-1,0),
TILE_XY(-1,0), TILE_XY(-1,0), TILE_XY(-1,0), TILE_XY(-1,0),
TILE_XY(-1,0), TILE_XY(0,1), TILE_XY(0,1), TILE_XY(0,1),
@ -1445,7 +1445,7 @@ static void TownActionBuildStatue(Town *t, int action)
TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0),
TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0), TILE_XY(1,0),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1),
TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1), TILE_XY(0,-1),
TILE_XY(-1,0), TILE_XY(-1,0), TILE_XY(-1,0), TILE_XY(-1,0),
TILE_XY(-1,0), TILE_XY(-1,0), TILE_XY(-1,0), TILE_XY(-1,0),
0,
@ -1657,7 +1657,7 @@ Town *ClosestTownFromTile(uint tile, uint threshold)
Town *t;
uint dist, best = threshold;
Town *best_town = NULL;
FOR_ALL_TOWNS(t) {
if (t->xy != 0) {
dist = GetTileDist(tile, t->xy);
@ -1680,9 +1680,9 @@ void ChangeTownRating(Town *t, int add, int max)
return;
SETBIT(t->have_ratings, _current_player);
rating = t->ratings[_current_player];
if (add < 0) {
if (rating > max) {
rating += add;
@ -1714,7 +1714,7 @@ bool CheckforTownRating(uint tile, uint32 flags, Town *t, byte type)
return true;
/* check if you're allowed to remove the street/bridge/tunnel/industry
* owned by a town no removal if rating is lower than ... depends now on
* owned by a town no removal if rating is lower than ... depends now on
* difficulty setting. Minimum town rating selected by difficulty level
*/
modemod = _default_rating_settings[_opt_mod_ptr->diff.town_council_tolerance][type];
@ -1785,7 +1785,7 @@ const TileTypeProcs _tile_type_town_procs = {
// Save and load of towns.
static const byte _town_desc[] = {
SLE_VAR(Town,xy, SLE_UINT16),
SLE_CONDVAR(Town,population, SLE_FILE_U16 | SLE_VAR_U32, 0, 2),
SLE_CONDVAR(Town,population, SLE_UINT32, 3, 255),

View File

@ -84,7 +84,7 @@ static void TownAuthorityWndProc(Window *w, WindowEvent *e)
uint buttons;
int numact;
Town *t = DEREF_TOWN(w->window_number);
switch(e->event) {
case WE_PAINT:
buttons = GetMaskOfTownActions(&numact, t);
@ -129,7 +129,7 @@ static void TownAuthorityWndProc(Window *w, WindowEvent *e)
/* WARNING ugly hack!
GetPlayerNameString sets up (Player #) if the player is human in an extra DPARAM16
It seems that if player is non-human, nothing is set up, so param is 0. GetString doesn't like
that because there is another param after it.
that because there is another param after it.
So we'll just shift the rating one back if player is AI and all is fine
*/
SET_DPARAM16((IS_HUMAN_PLAYER(p->index) ? 4 : 3), str);
@ -167,7 +167,7 @@ static void TownAuthorityWndProc(Window *w, WindowEvent *e)
DrawStringMultiLine(2, 159, STR_204D_INITIATE_A_SMALL_LOCAL + i, 313);
}
}
break;
case WE_CLICK:
@ -225,11 +225,11 @@ static void TownViewWndProc(Window *w, WindowEvent *e)
case WE_PAINT:
SET_DPARAM16(0, t->index);
DrawWindowWidgets(w);
SET_DPARAM32(0, t->population);
SET_DPARAM32(1, t->num_houses);
DrawString(2,107,STR_2006_POPULATION,0);
SET_DPARAM16(0, t->act_pass);
SET_DPARAM16(1, t->max_pass);
DrawString(2,117,STR_200D_PASSENGERS_LAST_MONTH_MAX,0);
@ -237,7 +237,7 @@ static void TownViewWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(0, t->act_mail);
SET_DPARAM16(1, t->max_mail);
DrawString(2,127,STR_200E_MAIL_LAST_MONTH_MAX,0);
DrawWindowViewport(w);
break;
@ -411,7 +411,7 @@ static void TownDirectoryWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
DoDrawString(_town_sort_order & 1 ? "\xAA" : "\xA0", (_town_sort_order <= 1) ? 88 : 187, 15, 0x10);
{
Town *t;
int n = 0;
@ -447,7 +447,7 @@ static void TownDirectoryWndProc(Window *w, WindowEvent *e)
_town_sort_dirty = true;
SetWindowDirty(w);
} break;
case 4: { /* Click on Town Matrix */
uint16 id_v = (e->click.pt.y - 28) / 10;
@ -460,17 +460,17 @@ static void TownDirectoryWndProc(Window *w, WindowEvent *e)
{
Town *t = DEREF_TOWN(_town_sort[id_v]);
assert(t->xy);
ScrollMainWindowToTile(t->xy);
}
} break;
}
break;
case WE_4:
SetWindowDirty(w);
break;
}
}
}
static const WindowDesc _town_directory_desc = {

View File

@ -22,7 +22,7 @@ static const byte _vehicle_initial_y_fract[4] = {8,4,8,10};
static const byte _state_dir_table[4] = { 0x20, 8, 0x10, 4 };
static const byte _signal_onedir[14] = {
0x80, 0x80, 0x80, 0x20, 0x40, 0x10, 0, 0,
0x80, 0x80, 0x80, 0x20, 0x40, 0x10, 0, 0,
0x40, 0x40, 0x40, 0x10, 0x80, 0x20
};
@ -41,7 +41,7 @@ void UpdateTrainAcceleration(Vehicle *v)
// compute stuff like max speed, power, and weight.
do {
const RailVehicleInfo *rvi = &_rail_vehicle_info[u->engine_type];
// power is sum of the power for all engines
power += rvi->power;
@ -53,7 +53,7 @@ void UpdateTrainAcceleration(Vehicle *v)
weight += (_cargoc.weights[u->cargo_type] * u->cargo_count) >> 4;
} while ( (u=u->next) != NULL);
// these are shown in the UI
v->u.rail.cached_weight = weight;
v->u.rail.cached_power = power;
@ -123,15 +123,15 @@ static int GetRealisticAcceleration(Vehicle *v)
if (te > te2) te = te2;
f += te;
}
// add air resistance
{
float cx = 1.0f; // NOT DONE
// air resistance is doubled in tunnels.
if (v->vehstatus == 0x40) cx *= 2;
f -= cx * spd * spd * (F_KPH_MS * F_KPH_MS * 0.001f);
f -= cx * spd * spd * (F_KPH_MS * F_KPH_MS * 0.001f);
}
// after this f contains the acceleration.
@ -158,7 +158,7 @@ int GetTrainImage(Vehicle *v, byte direction)
if (base) return base;
img = _engine_original_sprites[v->engine_type];
}
base = _engine_sprite_base[img] + ((direction + _engine_sprite_add[img]) & _engine_sprite_and[img]);
if (v->cargo_count >= (v->cargo_cap >> 1))
@ -169,7 +169,7 @@ int GetTrainImage(Vehicle *v, byte direction)
void DrawTrainEngine(int x, int y, int engine, uint32 image_ormod)
{
const RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
int img = rvi->image_index;
uint32 image = 0;
@ -190,7 +190,7 @@ void DrawTrainEngine(int x, int y, int engine, uint32 image_ormod)
if (!image) img = _engine_original_sprites[engine];
}
if (!image) {
image = ((6 + _engine_sprite_add[img+1]) & _engine_sprite_and[img+1]) + _engine_sprite_base[img+1];
image = ((6 + _engine_sprite_add[img+1]) & _engine_sprite_and[img+1]) + _engine_sprite_base[img+1];
}
}
DrawSprite(image | image_ormod, x, y);
@ -208,7 +208,7 @@ void DrawTrainEngineInfo(int engine, int x, int y, int maxw)
SET_DPARAM16(1, rvi->weight << multihead);
SET_DPARAM32(4, (rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8) << multihead);
cap = rvi->capacity;
SET_DPARAM16(5, STR_8838_N_A);
if (cap != 0) {
@ -264,7 +264,7 @@ int32 CmdBuildRailWagon(uint engine, uint tile, uint32 flags)
v->direction = (byte)(dir*2+1);
v->tile = (TileIndex)tile;
x = GET_TILE_X(tile)*16 | _vehicle_initial_x_fract[dir];
y = GET_TILE_Y(tile)*16 | _vehicle_initial_y_fract[dir];
@ -294,11 +294,11 @@ int32 CmdBuildRailWagon(uint engine, uint tile, uint32 flags)
e = &_engines[engine];
v->u.rail.railtype = e->railtype;
v->build_year = _cur_year;
v->type = VEH_Train;
v->cur_image = 0xAC2;
_new_wagon_id = v->index;
VehiclePositionChanged(v);
@ -380,12 +380,12 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
uint tile;
_cmd_build_rail_veh_var1 = 0;
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
tile = TILE_FROM_XY(x,y);
rvi = &_rail_vehicle_info[p1];
if (rvi->flags & RVI_WAGON) {
return CmdBuildRailWagon(p1, tile, flags);
}
@ -434,14 +434,14 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->dest_tile = 0;
// v->profit_last_year = 0;
// v->profit_this_year = 0;
v->engine_type = (byte)p1;
e = &_engines[p1];
v->reliability = e->reliability;
v->reliability_spd_dec = e->reliability_spd_dec;
v->max_age = e->lifelength * 366;
v->string_id = STR_SV_TRAIN_NAME;
// v->cur_speed = 0;
// v->subspeed = 0;
@ -449,11 +449,11 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_new_train_id = v->index;
// v->cur_order_index = 0;
// v->num_orders = 0;
*(v->schedule_ptr = _ptr_to_next_order++) = 0;
// v->next_in_chain = 0xffff;
// v->next = NULL;
v->service_interval = _patches.servint_trains;
// v->breakdown_ctr = 0;
// v->breakdowns_since_last_service = 0;
@ -503,7 +503,7 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
}
_cmd_build_rail_veh_var1 = _railveh_unk1[p1];
_cmd_build_rail_veh_score = _railveh_score[p1];
return value;
return value;
}
@ -524,7 +524,7 @@ int CheckStoppedInDepot(Vehicle *v)
{
int count;
TileIndex tile = v->tile;
/* check if stopped in a depot */
if (!IsTrainDepotTile(tile) || v->cur_speed != 0) {
errmsg:
@ -535,7 +535,7 @@ errmsg:
count = 0;
do {
count++;
if (v->u.rail.track != 0x80 || v->tile != (TileIndex)tile ||
if (v->u.rail.track != 0x80 || v->tile != (TileIndex)tile ||
(v->subtype==0 && !(v->vehstatus&VS_STOPPED)))
goto errmsg;
} while ( (v=v->next) != NULL);
@ -599,7 +599,7 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
&& is_firsthead_sprite(src->spritenum);
// if nothing is selected as destination, try and find a matching vehicle to drag to.
if (((int32)p1 >> 16) == -1) {
if (((int32)p1 >> 16) == -1) {
dst = NULL;
if (!is_loco) dst = FindGoodVehiclePos(src);
} else {
@ -609,7 +609,7 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// don't move the same vehicle..
if (src == dst)
return 0;
/* the player must be the owner */
if (!CheckOwnership(src->owner) || (dst!=NULL && !CheckOwnership(dst->owner)))
return CMD_ERROR;
@ -618,7 +618,7 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
src_head = GetFirstVehicleInChain(src);
dst_head = NULL;
if (dst != NULL) dst_head = GetFirstVehicleInChain(dst);
/* check if all vehicles in the source train are stopped */
if (CheckStoppedInDepot(src_head) < 0)
return CMD_ERROR;
@ -695,7 +695,7 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
DeleteWindowById(WC_VEHICLE_VIEW, src->index);
DeleteVehicleSchedule(src);
}
src->subtype = 2;
src->unitnumber = 0; // doesn't occupy a unitnumber anymore.
@ -785,7 +785,7 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
last = NULL;
}
}
// make sure the vehicle is stopped in the depot
if (CheckStoppedInDepot(first) < 0)
return CMD_ERROR;
@ -801,7 +801,7 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// when selling an attached locomotive. we need to delete its window.
if (v->subtype == 0) {
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
// rearrange all vehicles that follow to separate lines.
if (p2 == 2) {
Vehicle *u,*tmp;
@ -809,7 +809,7 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
while (u != last) {
tmp = u;
u = u->next;
DoCommandByTile(tmp->tile, tmp->index | ((-1)<<16), 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
DoCommandByTile(tmp->tile, tmp->index | ((-1)<<16), 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
}
}
}
@ -834,7 +834,7 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
cost -= last->value;
DeleteVehicle(last);
}
// an attached train changed?
if (first && first->subtype == 0) {
UpdateTrainAcceleration(first);
@ -884,7 +884,7 @@ static void UpdateVarsAfterSwap(Vehicle *v)
EndVehicleMove(v);
}
static void SetLastSpeed(Vehicle *v, int spd) {
static void SetLastSpeed(Vehicle *v, int spd) {
int old = v->u.rail.last_speed;
if (spd != old) {
v->u.rail.last_speed = spd;
@ -908,7 +908,7 @@ static void ReverseTrainSwapVeh(Vehicle *v, int l, int r)
b->vehstatus = (b->vehstatus & ~VS_HIDDEN) | (a->vehstatus&VS_HIDDEN);
a->vehstatus = tmp;
}
/* swap variables */
swap_byte(&a->u.rail.track, &b->u.rail.track);
swap_byte(&a->direction, &b->direction);
@ -916,7 +916,7 @@ static void ReverseTrainSwapVeh(Vehicle *v, int l, int r)
/* toggle direction */
if (!(a->u.rail.track & 0x80)) a->direction ^= 4;
if (!(b->u.rail.track & 0x80)) b->direction ^= 4;
/* swap more variables */
swap_int16(&a->x_pos, &b->x_pos);
swap_int16(&a->y_pos, &b->y_pos);
@ -928,7 +928,7 @@ static void ReverseTrainSwapVeh(Vehicle *v, int l, int r)
UpdateVarsAfterSwap(b);
} else {
if (!(a->u.rail.track & 0x80)) a->direction ^= 4;
UpdateVarsAfterSwap(a);
UpdateVarsAfterSwap(a);
}
}
@ -996,7 +996,7 @@ int32 CmdForceTrainProceed(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC)
v->u.rail.force_proceed = 0x50;
return 0;
}
@ -1027,7 +1027,7 @@ int32 CmdRefitRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->cargo_type = (byte)p2;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
}
}
}
} while ( (v=v->next) != NULL);
_returned_refit_amount = num;
@ -1082,7 +1082,7 @@ static uint FindClosestTrainDepot(Vehicle *v)
return tile;
if (v->u.rail.track == 0x40) { tile = GetVehicleOutOfTunnelTile(v); }
tfdd.owner = v->owner;
tfdd.best_length = (uint)-1;
@ -1107,7 +1107,7 @@ static uint FindClosestTrainDepot(Vehicle *v)
if (tfdd.best_length != (uint)-1)
return tfdd.tile;
}
return (uint)-1;
}
@ -1122,7 +1122,7 @@ int32 CmdTrainGotoDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->u.rail.days_since_order_progr = 0;
v->cur_order_index++;
}
v->next_order = OT_DUMMY;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
@ -1139,7 +1139,7 @@ int32 CmdTrainGotoDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->next_order_param = GetDepotByTile(depot_tile);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
}
return 0;
}
@ -1157,7 +1157,7 @@ int32 CmdChangeTrainServiceInt(int x, int y, uint32 flags, uint32 p1, uint32 p2)
v->service_interval = (uint16)p2;
InvalidateWindowWidget(WC_VEHICLE_DETAILS, v->index, 8);
}
return 0;
}
@ -1193,7 +1193,7 @@ static void HandleLocomotiveSmokeCloud(Vehicle *v)
case 0:
// steam smoke.
if ( (v->tick_counter&0xF) == 0 && !IsTrainDepotTile(v->tile) && !IsTunnelTile(v->tile)) {
CreateEffectVehicleRel(v,
CreateEffectVehicleRel(v,
(_vehicle_smoke_pos[v->direction]),
(_vehicle_smoke_pos[v->direction+8]),
10,
@ -1257,14 +1257,14 @@ static bool CheckTrainStayInDepot(Vehicle *v)
}
TrainPlayLeaveStationSound(v);
v->u.rail.track = 1;
if (v->direction & 2)
v->u.rail.track = 2;
v->vehstatus &= ~VS_HIDDEN;
v->cur_speed = 0;
UpdateTrainDeltaXY(v, v->direction);
v->cur_image = GetTrainImage(v, v->direction);
VehiclePositionChanged(v);
@ -1324,7 +1324,7 @@ static bool TrainTrackFollower(uint tile, TrainTrackFollowerData *ttfd, int trac
// we've actually found the destination already. no point searching in directions longer than this.
if (ttfd->best_track_dist != (uint)-1)
return length >= ttfd->best_track_dist;
// didn't find station
dist = GetTileDist(tile, ttfd->dest_coords);
if (dist < ttfd->best_bird_dist) {
@ -1374,7 +1374,7 @@ static const byte _pick_track_table[6] = {1, 3, 2, 2, 0, 0};
/* choose a track */
static byte ChooseTrainTrack(Vehicle *v, uint tile, int direction, byte trackbits)
{
{
TrainTrackFollowerData fd;
int bits = trackbits;
uint best_track;
@ -1420,7 +1420,7 @@ static byte ChooseTrainTrack(Vehicle *v, uint tile, int direction, byte trackbit
fd.best_bird_dist = (uint)-1;
fd.best_track_dist = (uint)-1;
NewTrainPathfind(tile, _search_directions[i][direction], (TPFEnumProc*)TrainTrackFollower, &fd, NULL);
if (best_track != -1) {
if (best_track_dist == -1) {
@ -1430,7 +1430,7 @@ static byte ChooseTrainTrack(Vehicle *v, uint tile, int direction, byte trackbit
if (fd.best_bird_dist < best_bird_dist) goto good;
} else {
/* we found the destination for the first time */
goto good;
goto good;
}
} else {
if (fd.best_track_dist == -1) {
@ -1442,13 +1442,13 @@ static byte ChooseTrainTrack(Vehicle *v, uint tile, int direction, byte trackbit
if (fd.best_track_dist < best_track_dist) goto good;
}
}
/* if we reach this position, there's two paths of equal value so far.
/* if we reach this position, there's two paths of equal value so far.
* pick one randomly. */
r = (byte)Random();
if (_pick_track_table[i] == train_dir) r += 80;
if (_pick_track_table[best_track] == train_dir) r -= 80;
if (r <= 127) goto bad;
}
good:;
@ -1508,7 +1508,7 @@ static bool CheckReverseTrain(Vehicle *v)
if (fd.best_bird_dist < best_bird_dist) goto good;
} else {
/* we found the destination for the first time */
goto good;
goto good;
}
} else {
if (fd.best_bird_dist != 0) {
@ -1520,8 +1520,8 @@ static bool CheckReverseTrain(Vehicle *v)
if (fd.best_track_dist < best_track_dist) goto good;
}
}
/* if we reach this position, there's two paths of equal value so far.
/* if we reach this position, there's two paths of equal value so far.
* pick one randomly. */
r = (byte)Random();
if (_pick_track_table[i] == (v->direction & 3)) r += 80;
@ -1549,7 +1549,7 @@ static bool ProcessTrainOrder(Vehicle *v)
// These are un-interruptible
if ((v->next_order & OT_MASK) >= OT_GOTO_DEPOT && (v->next_order & OT_MASK) <= OT_LEAVESTATION) {
// Let a depot order in the schedule interrupt.
if ((v->next_order & (OT_MASK|OF_UNLOAD)) != (OT_GOTO_DEPOT|OF_UNLOAD))
return false;
@ -1565,9 +1565,9 @@ static bool ProcessTrainOrder(Vehicle *v)
v->cur_order_index++;
}
// check if we've reached a non-stop station while TTDPatch nonstop is enabled..
if (_patches.new_nonstop && (v->next_order & OF_NON_STOP) && v->next_order_param == _map2[v->tile]) {
v->cur_order_index++;
// check if we've reached a non-stop station while TTDPatch nonstop is enabled..
if (_patches.new_nonstop && (v->next_order & OF_NON_STOP) && v->next_order_param == _map2[v->tile]) {
v->cur_order_index++;
}
// Get the current order
@ -1623,7 +1623,7 @@ static void HandleTrainLoading(Vehicle *v, bool mode)
{
if (v->next_order == OT_NOTHING)
return;
if (v->next_order != OT_DUMMY) {
if ((v->next_order&OT_MASK) != OT_LOADING)
return;
@ -1643,19 +1643,19 @@ static void HandleTrainLoading(Vehicle *v, bool mode)
if (LoadUnloadVehicle(v)) {
InvalidateWindow(WC_TRAINS_LIST, v->owner);
MarkTrainDirty(v);
// need to update acceleration since the goods on the train changed.
UpdateTrainAcceleration(v);
}
return;
}
TrainPlayLeaveStationSound(v);
{
byte b = v->next_order;
v->next_order = OT_LEAVESTATION;
// If this was not the final order, don't remove it from the list.
if (!(b & OF_NON_STOP))
return;
@ -1735,7 +1735,7 @@ static void TrainEnterStation(Vehicle *v, int station)
static byte AfterSetTrainPos(Vehicle *v)
{
byte new_z, old_z;
// need this hint so it returns the right z coordinate on bridges.
_get_z_hint = v->z_pos;
new_z = GetSlopeZ(v->x_pos, v->y_pos);
@ -1763,7 +1763,7 @@ static const byte _new_vehicle_direction_table[11] = {
static int GetNewVehicleDirectionByTile(uint new_tile, uint old_tile)
{
uint offs = (GET_TILE_Y(new_tile) - GET_TILE_Y(old_tile) + 1) * 4 +
uint offs = (GET_TILE_Y(new_tile) - GET_TILE_Y(old_tile) + 1) * 4 +
GET_TILE_X(new_tile) - GET_TILE_X(old_tile) + 1;
assert(offs < 11);
return _new_vehicle_direction_table[offs];
@ -1812,7 +1812,7 @@ static bool CheckCompatibleRail(Vehicle *v, uint tile)
// correct Z position of a train going under a bridge on slopes
if (CORRECT_Z(ti.tileh))
ti.z += 8;
if(v->z_pos != ti.z) // train is going over bridge
return true;
}
@ -1822,7 +1822,7 @@ static bool CheckCompatibleRail(Vehicle *v, uint tile)
if (_map_owner[tile] != v->owner ||
(v->subtype == 0 && (_map3_lo[tile] & 0xF) != v->u.rail.railtype))
return false;
return true;
}
@ -1910,7 +1910,7 @@ static void SetVehicleCrashed(Vehicle *v)
return;
v->u.rail.crash_anim_pos++;
u = v;
BEGIN_ENUM_WAGONS(v)
v->vehstatus |= VS_CRASHED;
@ -1921,7 +1921,7 @@ static void SetVehicleCrashed(Vehicle *v)
static int CountPassengersInTrain(Vehicle *v)
{
int num = 0;
int num = 0;
BEGIN_ENUM_WAGONS(v)
if (v->cargo_type == 0) num += v->cargo_count;
END_ENUM_WAGONS(v)
@ -1943,8 +1943,8 @@ static void CheckTrainCollision(Vehicle *v)
/* can't collide in depot */
if (v->u.rail.track == 0x80)
return;
if ( !(v->u.rail.track == 0x40) )
if ( !(v->u.rail.track == 0x40) )
assert((uint)TILE_FROM_XY(v->x_pos, v->y_pos) == v->tile);
tcc.v = v;
@ -1954,27 +1954,27 @@ static void CheckTrainCollision(Vehicle *v)
realcoll = coll = VehicleFromPos(TILE_FROM_XY(v->x_pos, v->y_pos), &tcc, (VehicleFromPosProc*)FindTrainCollideEnum);
if (coll == NULL)
return;
coll = GetFirstVehicleInChain(coll);
/* it can't collide with its own wagons */
if ( (v == coll) || ( (v->u.rail.track & 0x40) && ( (v->direction & 2) != (realcoll->direction & 2) ) ) )
return;
//two drivers + passangers killed in train v
//two drivers + passangers killed in train v
num = 2 + CountPassengersInTrain(v);
if(!(coll->vehstatus&VS_CRASHED))
if(!(coll->vehstatus&VS_CRASHED))
//two drivers + passangers killed in train coll (if it was not crashed already)
num += 2 + CountPassengersInTrain(coll);
SetVehicleCrashed(v);
if (coll->subtype == 0)
SetVehicleCrashed(coll);
SET_DPARAM16(0, num);
AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
v->index,
@ -2009,7 +2009,7 @@ static void TrainController(Vehicle *v)
/* For every vehicle after and including the given vehicle */
for(;;) {
BeginVehicleMove(v);
if (v->u.rail.track != 0x40) {
/* Not inside tunnel */
if (GetNewVehiclePos(v, &gp)) {
@ -2039,7 +2039,7 @@ static void TrainController(Vehicle *v)
/* Determine what direction we're entering the new tile from */
dir = GetNewVehicleDirectionByTile(gp.new_tile, gp.old_tile);
assert(dir==1 || dir==3 || dir==5 || dir==7);
/* Get the status of the tracks in the new tile and mask
* away the bits that aren't reachable. */
ts = GetTileTrackStatus(gp.new_tile, TRANSPORT_RAIL) & _reachable_tracks[dir >> 1];
@ -2065,7 +2065,7 @@ static void TrainController(Vehicle *v)
if ( (tracks>>16)&chosen_track && v->u.rail.force_proceed == 0) goto red_light;
} else {
static byte _matching_tracks[8] = {0x30, 1, 0xC, 2, 0x30, 1, 0xC, 2};
/* The wagon is active, simply follow the prev vehicle. */
chosen_track = (byte)(_matching_tracks[GetDirectionToVehicle(prev, gp.x, gp.y)] & tracks);
}
@ -2080,7 +2080,7 @@ static void TrainController(Vehicle *v)
gp.y = (gp.y & ~0xF) | b[1];
chosen_dir = b[2];
}
/* Call the landscape function and tell it that the vehicle entered the tile */
r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
if (r&0x8)
@ -2100,7 +2100,7 @@ static void TrainController(Vehicle *v)
* (above) or the last vehicle moves. */
if (v->next == NULL)
TrainMovedChangeSignals(gp.old_tile, (dir>>1) ^ 2);
if (prev == NULL) {
AffectSpeedByDirChange(v, chosen_dir);
}
@ -2110,7 +2110,7 @@ static void TrainController(Vehicle *v)
} else {
/* in tunnel */
GetNewVehiclePos(v, &gp);
if (IS_TILETYPE(gp.new_tile, MP_TUNNELBRIDGE) &&
!(_map5[gp.new_tile] & 0xF0)) {
r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
@ -2136,7 +2136,7 @@ common:;
/* update the Z position of the vehicle */
old_z = AfterSetTrainPos(v);
if (prev == NULL) {
/* This is the first vehicle in the train */
AffectSpeedByZChange(v, old_z);
@ -2162,7 +2162,7 @@ red_light: {
/* find the first set bit in ts. need to do it in 2 steps, since
* FIND_FIRST_BIT only handles 6 bits at a time. */
i = FindFirstBit2x64(ts);
if (!(_map3_lo[gp.new_tile] & _signal_otherdir[i])) {
v->cur_speed = 0;
v->subspeed = 0;
@ -2181,7 +2181,7 @@ red_light: {
}
}
}
reverse_train_direction:
v->load_unload_time_rem = 0;
v->cur_speed = 0;
@ -2216,7 +2216,7 @@ static void DeleteLastWagon(Vehicle *v)
if (!((t=v->u.rail.track) & 0xC0)) {
SetSignalsOnBothDir(v->tile, FIND_FIRST_BIT(t));
}
if (v->u.rail.track == 0x40) {
int length;
TileIndex endtile = CheckTunnelBusy(v->tile, &length);
@ -2232,10 +2232,10 @@ static void DeleteLastWagon(Vehicle *v)
static void ChangeTrainDirRandomly(Vehicle *v)
{
static int8 _random_dir_change[4] = { -1, 0, 0, 1};
do {
//I need to buffer the train direction
if (!v->u.rail.track & 0x40)
if (!v->u.rail.track & 0x40)
v->direction = (v->direction + _random_dir_change[Random()&3]) & 7;
if (!(v->vehstatus & VS_HIDDEN)) {
BeginVehicleMove(v);
@ -2251,7 +2251,7 @@ static void HandleCrashedTrain(Vehicle *v)
int state = ++v->u.rail.crash_anim_pos, index;
uint32 r;
Vehicle *u;
if ( (state == 4) && (v->u.rail.track != 0x40) ) {
CreateEffectVehicleRel(v, 4, 4, 8, EV_CRASHED_SMOKE);
}
@ -2290,10 +2290,10 @@ static void HandleBrokenTrain(Vehicle *v)
if (v->breakdowns_since_last_service != 255)
v->breakdowns_since_last_service++;
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
SndPlayVehicleFx((_opt.landscape != LT_CANDY) ? 0xE : 0x3A, v);
if (!(v->vehstatus & VS_HIDDEN)) {
@ -2324,7 +2324,7 @@ static void TrainCheckIfLineEnds(Vehicle *v)
if ((uint)(t=v->breakdown_ctr) > 1) {
v->vehstatus |= VS_TRAIN_SLOWING;
t = _breakdown_speeds[ ((~t) >> 4) & 0xF];
if ((uint16)t <= v->cur_speed)
v->cur_speed = t;
@ -2342,7 +2342,7 @@ static void TrainCheckIfLineEnds(Vehicle *v)
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) &&
(_map5[tile] & 0xF0) == 0 && (byte)((_map5[tile] & 3)*2+1) == v->direction)
return;
// depot?
if (IS_TILETYPE(tile, MP_RAILWAY) && (_map5[tile] & 0xFC) == 0xC0)
return;
@ -2356,11 +2356,11 @@ static void TrainCheckIfLineEnds(Vehicle *v)
tile += _tileoffs_by_dir[t];
// determine the track status on the next tile.
ts = GetTileTrackStatus(tile, TRANSPORT_RAIL) & _reachable_tracks[t];
/* Calc position within the current tile ?? */
x = v->x_pos & 0xF;
y = v->y_pos & 0xF;
switch(v->direction) {
case 0:
x = (~x) + (~y) + 24;
@ -2488,7 +2488,7 @@ void Train_Tick(Vehicle *v)
if (v->subtype == 0) {
TrainLocoHandler(v, false);
// make sure vehicle wasn't deleted.
if (v->type == VEH_Train && v->subtype == 0)
TrainLocoHandler(v, true);
@ -2519,7 +2519,7 @@ void TrainEnterDepot(Vehicle *v, uint tile)
if ((v->next_order&OT_MASK) == OT_GOTO_DEPOT) {
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
t = v->next_order;
v->next_order = OT_DUMMY;
@ -2557,7 +2557,7 @@ static void CheckIfTrainNeedsService(Vehicle *v)
if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
return;
// Don't interfere with a depot visit scheduled by the user, or a
// depot visit by the order list.
if ((v->next_order & OT_MASK) == OT_GOTO_DEPOT &&
@ -2607,9 +2607,9 @@ void OnNewDay_Train(Vehicle *v)
if (v->subtype == 0) {
CheckVehicleBreakdown(v);
AgeVehicle(v);
CheckIfTrainNeedsService(v);
// check if train hasn't advanced in its order list for a set number of days
if (_patches.lost_train_days && v->num_orders && !(v->vehstatus & VS_STOPPED) && ++v->u.rail.days_since_order_progr >= _patches.lost_train_days && v->owner == _local_player) {
v->u.rail.days_since_order_progr = 0;
@ -2622,7 +2622,7 @@ void OnNewDay_Train(Vehicle *v)
}
CheckOrders(v);
/* update destination */
if ((v->next_order & OT_MASK) == OT_GOTO_STATION &&
(tile=DEREF_STATION(v->next_order_param)->train_tile) != 0)
@ -2649,7 +2649,7 @@ void TrainsYearlyLoop()
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Train && v->subtype == 0) {
// show warning if train is not generating enough income last 2 years (corresponds to a red icon in the vehicle list)
if (_patches.train_income_warn && v->owner == _local_player && v->age >= 730 && v->profit_this_year < 0) {
SET_DPARAM32(1, v->profit_this_year);

View File

@ -63,7 +63,7 @@ static void CcBuildLoco(bool success, uint tile, uint32 p1, uint32 p2)
if (!success)
return;
v = &_vehicles[_new_train_id];
if (tile == _backup_orders_tile) {
_backup_orders_tile = 0;
@ -76,7 +76,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
case WE_PAINT:
if (w->window_number == 0)
SETBIT(w->disabled_state, 5);
@ -93,7 +93,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(0, WP(w,buildtrain_d).railtype + STR_881C_NEW_RAIL_VEHICLES);
DrawWindowWidgets(w);
{
int num = _rail_engines_count[WP(w,buildtrain_d).railtype];
Engine *e = _rail_engines[WP(w,buildtrain_d).railtype];
@ -112,7 +112,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
DrawTrainEngine(x+29, y+6, engine_id, SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player)));
y += 14;
}
sel--;
sel--;
}
} while (++engine_id, ++e,--num);
@ -132,15 +132,15 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(3, rvi->power << multihead);
SET_DPARAM16(1, rvi->weight << multihead);
SET_DPARAM32(4, (rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8) << multihead);
SET_DPARAM16(5, STR_8838_N_A);
if (rvi->capacity != 0) {
SET_DPARAM16(6, rvi->capacity << multihead);
SET_DPARAM16(5, _cargoc.names_long_p[rvi->cargo_type]);
}
e = &_engines[selected_id];
e = &_engines[selected_id];
SET_DPARAM16(8, e->lifelength);
SET_DPARAM8(9, e->reliability * 100 >> 16);
ConvertDayToYMD(&ymd, e->intro_date);
@ -207,7 +207,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
} break;
}
}
static const Widget _new_rail_vehicle_widgets[] = {
{ WWT_CLOSEBOX, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 14, 11, 227, 0, 13, STR_0315, STR_018C_WINDOW_TITLE_DRAG_THIS},
@ -236,7 +236,7 @@ static void ShowBuildTrainWindow(uint tile)
w = AllocateWindowDesc(&_new_rail_vehicle_desc);
w->window_number = tile;
w->vscroll.cap = 8;
if (tile != 0) {
w->caption_color = _map_owner[tile];
WP(w,buildtrain_d).railtype = _map3_lo[tile] & 0xF;
@ -296,7 +296,7 @@ static void DrawTrainDepotWindow(Window *w)
}
SetVScrollCount(w, num);
SetHScrollCount(w, hnum);
/* locate the depot struct */
for(d=_depots; d->xy != (TileIndex)tile; d++) {}
@ -312,7 +312,7 @@ static void DrawTrainDepotWindow(Window *w)
if (v->type == VEH_Train &&
v->subtype == 0 &&
v->tile == (TileIndex)tile &&
v->u.rail.track == 0x80 &&
v->u.rail.track == 0x80 &&
--num < 0 && num >= -6) {
DrawTrainImage(v, x+21, y, 10, w->hscroll.pos, WP(w,traindepot_d).sel);
@ -331,7 +331,7 @@ static void DrawTrainDepotWindow(Window *w)
if (v->type == VEH_Train &&
v->subtype == 4 &&
v->tile == (TileIndex)tile &&
v->u.rail.track == 0x80 &&
v->u.rail.track == 0x80 &&
--num < 0 && num >= -6) {
DrawTrainImage(v, x+50, y, 9, 0, WP(w,traindepot_d).sel);
@ -395,20 +395,20 @@ static int GetVehicleFromTrainDepotWndPt(Window *w, int x, int y, GetDepotVehicl
/* didn't find anything, get out */
return 0;
found_it:
found_it:
d->head = d->wagon = v;
/* either pressed the flag or the number, but only when it's a loco */
if (area_x < 0 && v->subtype==0)
return area_x;
/* find the vehicle in this row that was clicked */
while (--area_x >= 0) {
v = v->next;
if (v == NULL) break;
}
d->wagon = v;
d->wagon = v;
return 0;
}
@ -447,7 +447,7 @@ static void TrainDepotClickTrain(Window *w, int x, int y)
// share / copy orders
if (_thd.place_mode && mode <= 0) { _place_clicked_vehicle = gdvp.head; return; }
v = gdvp.wagon;
switch(mode) {
@ -482,10 +482,10 @@ static void TrainDepotWndProc(Window *w, WindowEvent *e)
case WE_CLICK: {
switch(e->click.widget) {
case 6:
case 6:
ShowBuildTrainWindow(w->window_number);
break;
case 7:
case 7:
ScrollMainWindowToTile(w->window_number);
break;
case 2:
@ -513,7 +513,7 @@ static void TrainDepotWndProc(Window *w, WindowEvent *e)
return;
v = &_vehicles[WP(w,traindepot_d).sel];
WP(w,traindepot_d).sel = INVALID_VEHICLE;
SetWindowDirty(w);
@ -538,14 +538,14 @@ static void TrainDepotWndProc(Window *w, WindowEvent *e)
WP(w,traindepot_d).sel = INVALID_VEHICLE;
SetWindowDirty(w);
if (GetVehicleFromTrainDepotWndPt(w, e->dragdrop.pt.x, e->dragdrop.pt.y, &gdvp) == 0 &&
if (GetVehicleFromTrainDepotWndPt(w, e->dragdrop.pt.x, e->dragdrop.pt.y, &gdvp) == 0 &&
sel != INVALID_VEHICLE) {
if (gdvp.wagon == NULL || gdvp.wagon->index != sel) {
TrainDepotMoveVehicle(gdvp.wagon, sel, gdvp.head);
} else if (gdvp.head != NULL && gdvp.head->subtype==0) {
ShowTrainViewWindow(gdvp.head);
}
}
}
} break;
default:
@ -722,11 +722,11 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
Vehicle *v;
StringID str;
v = &_vehicles[w->window_number];
v = &_vehicles[w->window_number];
w->disabled_state = (v->owner == _local_player) ? 0 : 0x1C0;
/* draw widgets & caption */
SET_DPARAM16(0, v->string_id);
SET_DPARAM16(1, v->unitnumber);
@ -734,7 +734,7 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
/* draw the flag */
DrawSprite( (v->vehstatus&VS_STOPPED) ? 0xC12 : 0xC13, 2, 123);
if (v->u.rail.crash_anim_pos != 0) {
str = STR_8863_CRASHED;
} else if (v->breakdown_ctr == 1) {
@ -772,7 +772,7 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
SET_DPARAM16(1, v->u.rail.last_speed * 10 >> 4);
break;
}
default:
if (v->num_orders == 0) {
str = STR_NO_ORDERS + _patches.vehicle_speed;
@ -792,20 +792,20 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
Vehicle *v = &_vehicles[w->window_number];
switch(wid) {
case 4: /* start/stop train */
DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_TRAIN | CMD_MSG(STR_883B_CAN_T_STOP_START_TRAIN));
case 4: /* start/stop train */
DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_TRAIN | CMD_MSG(STR_883B_CAN_T_STOP_START_TRAIN));
break;
case 5: /* center main view */
ScrollMainWindowTo(v->x_pos, v->y_pos);
break;
case 6: /* goto depot */
DoCommandP(v->tile, v->index, 0, NULL, CMD_TRAIN_GOTO_DEPOT | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT));
DoCommandP(v->tile, v->index, 0, NULL, CMD_TRAIN_GOTO_DEPOT | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT));
break;
case 7: /* force proceed */
DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));
DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));
break;
case 8: /* reverse direction */
DoCommandP(v->tile, v->index, 0, NULL, CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_8869_CAN_T_REVERSE_DIRECTION));
DoCommandP(v->tile, v->index, 0, NULL, CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_8869_CAN_T_REVERSE_DIRECTION));
break;
case 9: /* show train orders */
ShowOrdersWindow(v);
@ -828,7 +828,7 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
Vehicle *v;
uint32 h;
v = &_vehicles[w->window_number];
v = &_vehicles[w->window_number];
assert(v->type == VEH_Train);
h = CheckStoppedInDepot(v) >= 0 ? (1 << 8) : (1 << 11);
if (h != w->hidden_state) {
@ -893,7 +893,7 @@ static void TrainDetailsInfoTab(Vehicle *v, int x, int y)
SET_DPARAM16(0, GetCustomEngineName(v->engine_type));
SET_DPARAM32(1, v->value);
DrawString(x, y, STR_882D_VALUE, 0x10);
}
}
}
static void TrainDetailsCapacityTab(Vehicle *v, int x, int y)
@ -927,7 +927,7 @@ static void DrawTrainDetailsWindow(Window *w)
// det_tab == 3 <-- Total Cargo tab
if (det_tab == 3) // reset tot_cargo array to 0 values
memset(tot_cargo, 0, sizeof(tot_cargo));
u = v = &_vehicles[w->window_number];
do {
if (det_tab != 3)
@ -964,9 +964,9 @@ static void DrawTrainDetailsWindow(Window *w)
num = v->age / 366;
SET_DPARAM16(1, num);
x = 2;
str = STR_0199_YEAR;
if (num != 1) {
str += STR_019A_YEARS - STR_0199_YEAR;
@ -975,7 +975,7 @@ static void DrawTrainDetailsWindow(Window *w)
}
SET_DPARAM16(0, str);
SET_DPARAM16(2, v->max_age / 366);
SET_DPARAM32(3, GetTrainRunningCost(v) >> 8);
SET_DPARAM32(3, GetTrainRunningCost(v) >> 8);
DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0);
SET_DPARAM16(2, v->max_speed * 10 >> 4);
@ -998,7 +998,7 @@ static void DrawTrainDetailsWindow(Window *w)
x = 1;
y = 57;
sel = w->vscroll.pos;
// draw the first 3 details tabs
if (det_tab != 3) {
for(;;) {
@ -1058,7 +1058,7 @@ do_change_service_int:
mod = _patches.servint_ispercent ? clamp(mod, MIN_SERVINT_PERCENT, MAX_SERVINT_PERCENT) : clamp(mod, MIN_SERVINT_DAYS, MAX_SERVINT_DAYS+1);
if (mod == v->service_interval)
return;
DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_TRAIN_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
break;
/* details buttons*/
@ -1127,7 +1127,7 @@ void ShowTrainDetailsWindow(Vehicle *v)
DeleteWindowById(WC_VEHICLE_ORDERS, veh);
DeleteWindowById(WC_VEHICLE_DETAILS, veh);
_alloc_wnd_parent_num = veh;
_alloc_wnd_parent_num = veh;
w = AllocateWindowDesc(&_train_details_desc);
w->window_number = veh;
@ -1163,7 +1163,7 @@ static void MakeSortedTrainList(byte owner)
// trains are stored as a cummulative index, eg 25, 41, 43. This means
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2
for (i = &_num_train_sort[1]; i != endof(_num_train_sort); i++) {*i += *(i-1);}
// sort by owner, then only subsort the requested owner-vehicles
qsort(_train_sort, n, sizeof(_train_sort[0]), GeneralOwnerSorter);
@ -1208,7 +1208,7 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
// Player0: 25; Player1: (41-25) 16; Player2: (43-41) 2 trains
i = (window_number == 0) ? 0 : _num_train_sort[window_number-1];
SetVScrollCount(w, _num_train_sort[window_number] - i);
/* draw the widgets */
{
Player *p = DEREF_PLAYER(window_number);
@ -1251,7 +1251,7 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
SET_DPARAM32(0, v->profit_this_year);
SET_DPARAM32(1, v->profit_last_year);
DrawString(x + 21, y + 18, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
if (v->string_id != STR_SV_TRAIN_NAME) {
SET_DPARAM16(0, v->string_id);
DrawString(x+21, y, STR_01AB, 0);
@ -1276,7 +1276,7 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
return;
case 6: { /* Matrix to show vehicles */
uint32 id_v = (e->click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / PLY_WND_PRC__SIZE_OF_ROW_SMALL;
if (id_v >= w->vscroll.cap) { return;} // click out of bounds
id_v += w->vscroll.pos;
@ -1301,15 +1301,15 @@ static void PlayerTrainsWndProc(Window *w, WindowEvent *e)
tile = _last_built_train_depot_tile;
do {
if (_map_owner[tile] == _local_player && IsTrainDepotTile(tile)) {
if (_map_owner[tile] == _local_player && IsTrainDepotTile(tile)) {
ShowTrainDepotWindow(tile);
ShowBuildTrainWindow(tile);
return;
}
tile = TILE_MASK(tile + 1);
} while(tile != _last_built_train_depot_tile);
ShowBuildTrainWindow(0);
} break;
}

View File

@ -18,7 +18,7 @@ static int GetRandomTreeType(uint tile, uint seed)
return (seed >> 6) + 28;
} else if (i == 1) {
if (seed > 12)
return -1;
return -1;
return 27;
} else {
return (seed * 7 >> 8) + 20;
@ -144,7 +144,7 @@ int32 CmdPlantTree(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
int32 cost;
int sx,sy,x,y;
int treetype;
SET_EXPENSES_TYPE(EXPENSES_OTHER);
// make sure sx,sy are smaller than ex,ey
@ -152,7 +152,7 @@ int32 CmdPlantTree(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
sy = GET_TILE_Y(p2)*16;
if (ex < sx) intswap(ex, sx);
if (ey < sy) intswap(ey, sy);
cost = 0; // total cost
for(x=sx; x<=ex; x+=16) {
@ -174,7 +174,7 @@ int32 CmdPlantTree(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
}
// 2x as expensive to add more trees to an existing tile
cost += _price.build_trees * 2;
} else {
} else {
// don't allow building on rocks
if (ti.type != MP_CLEAR || _map_owner[ti.tile] != OWNER_NONE || (ti.map5 & 0x1C) == 8) {
_error_message = STR_2804_SITE_UNSUITABLE;
@ -204,9 +204,9 @@ int32 CmdPlantTree(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
treetype = GetRandomTreeType(ti.tile, Random()>>24);
if (treetype==-1) treetype=27;
}
ModifyTile(ti.tile,
MP_SETTYPE(MP_TREES) |
MP_SETTYPE(MP_TREES) |
MP_MAP2 | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5,
m2, /* map2 */
treetype, /* map3lo */
@ -221,7 +221,7 @@ int32 CmdPlantTree(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
}
}
}
if (cost == 0) return CMD_ERROR;
return cost;
}
@ -276,12 +276,12 @@ static void DrawTile_Trees(TileInfo *ti)
d = _tree_layout_xy[(tmp & 0x30) >> 4];
index = ((tmp>>6)&3) + (_map3_lo[ti->tile]<<2);
/* different tree styles above one of the grounds */
if ((m2 & 0xB0) == 0xA0 && index >= 48 && index < 80)
index += 164 - 48;
assert(index < lengthof(_tree_layout_sprite));
assert(index < lengthof(_tree_layout_sprite));
s = _tree_layout_sprite[index];
}
@ -342,7 +342,7 @@ static int32 ClearTile_Trees(uint tile, byte flags) {
if (flags & DC_EXEC && _current_player < MAX_PLAYERS) {
Town *t = ClosestTownFromTile(tile, _patches.dist_local_authority);
if (t != NULL)
if (t != NULL)
ChangeTownRating(t, -35, -1000);
}
@ -372,7 +372,7 @@ static void GetTileDesc_Trees(uint tile, TileDesc *td)
(str=STR_2810_CACTUS_PLANTS, b==0x1B) ||
(str=STR_280F_RAINFOREST, IS_BYTE_INSIDE(b, 0x14, 0x1A+1)) ||
(str=STR_280E_TREES, true);
td->str = str;
td->str = str;
}
static void AnimateTile_Trees(uint tile)
@ -420,7 +420,7 @@ static void TileLoopTreesAlps(uint tile)
m2 = 0;
} else if (k == -8) {
/* snow_m1 */
m2 = 0x20;
m2 = 0x20;
if (tmp == m2)
return;
} else if (k < 8) {
@ -492,7 +492,7 @@ static void TileLoop_Trees(uint tile)
case 0: /* start destructing */
m5++;
break;
case 1: /* add a tree */
if (m5 < 0xC0) {
m5 = (m5 + 0x40) & ~7;
@ -502,7 +502,7 @@ static void TileLoop_Trees(uint tile)
case 2: { /* add a neighbouring tree */
byte m3 = _map3_lo[tile];
tile += _tileloop_trees_dir[Random() & 7];
if (!IS_TILETYPE(tile, MP_CLEAR))
@ -525,7 +525,7 @@ static void TileLoop_Trees(uint tile)
m5 = 0;
break;
}
}
default:
return;
@ -566,14 +566,14 @@ void OnTick_Trees()
int tree;
/* place a tree at a random rainforest spot */
if (_opt.landscape == LT_DESERT &&
if (_opt.landscape == LT_DESERT &&
(r=Random(),tile=TILE_MASK(r),GetMapExtraBits(tile)==2) &&
IS_TILETYPE(tile, MP_CLEAR) &&
(m=_map5[tile]&0x1C, m<=4) &&
(tree=GetRandomTreeType(tile, r>>24)) >= 0) {
ModifyTile(tile,
MP_SETTYPE(MP_TREES) |
MP_SETTYPE(MP_TREES) |
MP_MAP2 | MP_MAP3LO | MP_MAP3HI | MP_MAP5,
(m == 4 ? 0x10 : 0),
tree,
@ -585,7 +585,7 @@ void OnTick_Trees()
// byte underflow
if (--_trees_tick_ctr)
return;
/* place a tree at a random spot */
r = Random();
tile = TILE_MASK(r);
@ -593,7 +593,7 @@ void OnTick_Trees()
(m=_map5[tile]&0x1C, m==0 || m==4 || m==0x10) &&
(tree=GetRandomTreeType(tile, r>>24)) >= 0) {
int m2;
if (m == 0) {
m2 = 0;
} else if (m == 4) {
@ -603,7 +603,7 @@ void OnTick_Trees()
}
ModifyTile(tile,
MP_SETTYPE(MP_TREES) |
MP_SETTYPE(MP_TREES) |
MP_MAP2 | MP_MAP3LO | MP_MAP3HI | MP_MAP5,
m2,
tree,

68
ttd.c
View File

@ -59,7 +59,7 @@ void CDECL error(const char *s, ...) {
va_start(va, s);
vsprintf(buf, s, va);
va_end(va);
ShowOSErrorBox(buf);
if (_video_driver)
_video_driver->stop();
@ -145,7 +145,7 @@ static int NullVideoMainLoop() {
static bool NullVideoChangeRes(int w, int h) { return false; }
const HalVideoDriver _null_video_driver = {
NullVideoStart,
NullVideoStop,
@ -298,7 +298,7 @@ static void showhelp()
const DriverDesc *dd;
int i;
p = strecpy(buf,
p = strecpy(buf,
"Command line options:\n"
" -v drv = Set video driver (see below)\n"
" -s drv = Set sound driver (see below)\n"
@ -313,7 +313,7 @@ static void showhelp()
" -G seed= Set random seed\n"
);
for(i=0; i!=lengthof(_driver_classes); i++,dc++) {
for(i=0; i!=lengthof(_driver_classes); i++,dc++) {
p += sprintf(p, "List of %s drivers:\n", dc->name);
dd = dc->descs;
do {
@ -427,7 +427,7 @@ void SetDebugString(const char *s)
if (*s >= '0' && *s <= '9') {
v = strtoul(s, &end, 0);
s = end;
_debug_spritecache_level = v;
_debug_misc_level = v;
_debug_grf_level = v;
@ -460,7 +460,7 @@ void SetDebugString(const char *s)
v = strtoul(s, &end, 0);
s = end;
if (p) *p = v;
}
}
}
void ParseResolution(int res[2], char *s)
@ -473,7 +473,7 @@ void ParseResolution(int res[2], char *s)
res[0] = (strtoul(s, NULL, 0) + 7) & ~7;
res[1] = (strtoul(t+1, NULL, 0) + 7) & ~7;
}
}
int ttd_main(int argc, char* argv[])
{
@ -500,10 +500,10 @@ int ttd_main(int argc, char* argv[])
case 's': ttd_strlcpy(sounddriver, mgo.opt, sizeof(sounddriver)); break;
case 'v': ttd_strlcpy(videodriver, mgo.opt, sizeof(videodriver)); break;
case 'n': {
network = 1;
network = 1;
_networking_override=true;
if (mgo.opt) {
network_conn = mgo.opt;
network_conn = mgo.opt;
network++;
}
else
@ -525,7 +525,7 @@ int ttd_main(int argc, char* argv[])
} break;
case 'e': _switch_mode = SM_EDITOR; break;
case 'i': _ignore_wrong_grf = true; break;
case 'g':
case 'g':
if (mgo.opt) {
strcpy(_file_to_saveload.name, mgo.opt);
_switch_mode = SM_LOAD;
@ -568,10 +568,10 @@ int ttd_main(int argc, char* argv[])
// initialize airport state machines
InitializeAirports();
// Sample catalogue
DEBUG(misc, 1) ("Loading sound effects...");
MxInitialize(11025, "sample.cat");
MxInitialize(11025, "sample.cat");
// This must be done early, since functions use the InvalidateWindow* calls
InitWindowSystem();
@ -588,7 +588,7 @@ int ttd_main(int argc, char* argv[])
// Default difficulty level
_opt_mod_ptr = &_new_opt;
// ugly hack, if diff_level is 9, it means we got no setting from the config file, so we load the default settings.
if (_opt_mod_ptr->diff_level == 9)
SetDifficultyLevel(0, _opt_mod_ptr);
@ -646,7 +646,7 @@ void LoadIntroGame()
_opt_mod_ptr = &_new_opt;
GfxLoadSprites();
LoadStringWidthTable();
// Setup main window
InitWindowSystem();
SetupColorsAndInitialWindow();
@ -655,7 +655,7 @@ void LoadIntroGame()
sprintf(filename, "%sopntitle.dat", _path.data_dir);
if (SaveOrLoad(filename, SL_LOAD) != SL_OK)
GenerateWorld(1); // if failed loading, make empty world.
_opt.currency = _new_opt.currency;
_pause = 0;
@ -687,7 +687,7 @@ void MakeNewGame()
// Create a single player
DoStartupNewPlayer(false);
_local_player = 0;
MarkWholeScreenDirty();
@ -700,7 +700,7 @@ void MakeNewEditorWorld()
// Copy in game options
_opt_mod_ptr = &_opt;
memcpy(&_opt, &_new_opt, sizeof(_opt));
GfxLoadSprites();
// Re-init the windowing system
@ -758,7 +758,7 @@ void StartScenario()
// and in AfterLoad a player is started when it is
// a scenario.. so we do not need it here.
// DoStartupNewPlayer(false);
_local_player = 0;
MarkWholeScreenDirty();
@ -781,7 +781,7 @@ bool SafeSaveOrLoad(const char *filename, int mode, int newgm)
return false;
} else if (r != SL_OK) {
_game_mode = ogm;
return false;
return false;
} else
return true;
}
@ -789,7 +789,7 @@ bool SafeSaveOrLoad(const char *filename, int mode, int newgm)
static void SwitchMode(int new_mode)
{
_in_state_game_loop = true;
switch(new_mode) {
case SM_EDITOR: // Switch to scenario editor
MakeNewEditorWorld();
@ -842,7 +842,7 @@ normal_load:
case SM_MENU: // Switch to game menu
if ((_networking) && (!_networking_override)) NetworkCoreDisconnect();
_networking_override=false;
@ -863,8 +863,8 @@ normal_load:
MarkWholeScreenDirty();
break;
}
if (_switch_mode_errorstr!=INVALID_STRING_ID)
if (_switch_mode_errorstr!=INVALID_STRING_ID)
ShowErrorMessage(INVALID_STRING_ID,_switch_mode_errorstr,0,0);
_in_state_game_loop = false;
@ -885,10 +885,10 @@ void StateGameLoop()
_sync_seed_2 = _random_seed_2;
if (_networking) disable_computer=true;
if (_savedump_path[0] && (uint)_frame_counter >= _savedump_first && (uint)(_frame_counter -_savedump_first) % _savedump_freq == 0 ) {
char buf[100];
sprintf(buf, "%s%.5d.sav", _savedump_path, _frame_counter);
SaveOrLoad(buf, SL_SAVE);
if (_savedump_path[0] && (uint)_frame_counter >= _savedump_first && (uint)(_frame_counter -_savedump_first) % _savedump_freq == 0 ) {
char buf[100];
sprintf(buf, "%s%.5d.sav", _savedump_path, _frame_counter);
SaveOrLoad(buf, SL_SAVE);
if ((uint)_frame_counter >= _savedump_last) exit(1);
}
@ -917,7 +917,7 @@ void StateGameLoop()
static void DoAutosave()
{
char buf[200];
if (_patches.keep_all_autosave && _local_player != OWNER_SPECTATOR) {
Player *p;
char *s;
@ -1063,7 +1063,7 @@ void UpdateExclusiveRights()
FOR_ALL_TOWNS(t) if (t->xy != 0) {
t->exclusivity=(byte)-1;
}
/* FIXME old exclusive rights status is not being imported (stored in s->blocked_months_obsolete)
could be implemented this way:
1.) Go through all stations
@ -1090,7 +1090,7 @@ bool AfterLoadGame(uint version)
if (version <= 0x400) {
UpdateExclusiveRights();
}
// convert road side to my format.
if (_opt.road_side) _opt.road_side = 1;
@ -1102,7 +1102,7 @@ bool AfterLoadGame(uint version)
// reinit the landscape variables (landscape might have changed)
InitializeLandscapeVariables(true);
// Update all vehicles
AfterLoadVehicles();
// in version 2.2 of the savegame, we have new airports
@ -1131,7 +1131,7 @@ bool AfterLoadGame(uint version)
WP(w,vp_d).scrollpos_x = _saved_scrollpos_x;
WP(w,vp_d).scrollpos_y = _saved_scrollpos_y;
vp = w->viewport;
vp->zoom = _saved_scrollpos_zoom;
vp->virtual_width = vp->width << vp->zoom;
@ -1143,8 +1143,8 @@ bool AfterLoadGame(uint version)
if (version <= 0x400) {
CheckIsPlayerActive();
}
// If Load Scenario / New (Scenario) Game is used,
// If Load Scenario / New (Scenario) Game is used,
// a player does not exist yet. So create one here.
if (!_players[0].is_active)
DoStartupNewPlayer(false);

20
ttd.h
View File

@ -9,7 +9,7 @@
#endif
// use this on non static functions
#define PUBLIC
#define PUBLIC
typedef struct Rect {
int left,top,right,bottom;
@ -34,10 +34,10 @@ typedef struct YearMonthDay {
/* --- 1 Day is 74 ticks ---
* The game's internal structure is dictated by ticks. The date counter (date_fract) is an integer of
* uint16 type, so it can have a max value of 65536. Every tick this variable (date_fract) is
* increased by 885. When it overflows, the new day loop is called.
* uint16 type, so it can have a max value of 65536. Every tick this variable (date_fract) is
* increased by 885. When it overflows, the new day loop is called.
* * this that means 1 day is : 65536 / 885 = 74 ticks
* * 1 tick is approximately 27ms.
* * 1 tick is approximately 27ms.
* * 1 day is thus about 2 seconds (74*27 = 1998) on a machine that can run OpenTTD normally
*/
#define DAY_TICKS 74
@ -196,7 +196,7 @@ typedef struct Prices {
int32 aircraft_running;
int32 roadveh_running;
int32 ship_running;
int32 build_industry;
int32 build_industry;
} Prices;
#define GAME_DIFFICULTY_NUM 18
@ -267,12 +267,12 @@ typedef void GetTileDescProc(uint tile, TileDesc *td);
* tracks = (byte)(ts | ts >>8)
* This effectively converts the present part of the result (ccdd) to a
* track bitmask, which disregards directions. Normally, this is the same as just
* doing (byte)ts I think, although I am not really sure
* doing (byte)ts I think, although I am not really sure
*
* A trackdir is combination of a track and a dir, where the lower three bits
* are a track, the fourth bit is the direction. these give 12 (or 14)
* possible options: 0-5 and 8-13, so we need 14 bits for a trackdir bitmask
* above.
* above.
*/
typedef uint32 GetTileTrackStatusProc(uint tile, TransportType mode);
typedef void GetProducedCargoProc(uint tile, byte *b);
@ -316,7 +316,7 @@ enum {
MP_MAP5 = 1<<3,
MP_MAPOWNER_CURRENT = 1<<4,
MP_MAPOWNER = 1<<5,
MP_TYPE_MASK = 0xF << 8,
MP_MAP2_CLEAR = 1 << 12,
@ -466,7 +466,7 @@ enum {
// special string constants
enum SpecialStrings {
// special strings for town names. the town name is generated dynamically on request.
SPECSTR_TOWNNAME_START = 0x20C0,
SPECSTR_TOWNNAME_ENGLISH = SPECSTR_TOWNNAME_START,
@ -493,7 +493,7 @@ enum SpecialStrings {
SPECSTR_PLAYERNAME_AMERICAN,
SPECSTR_PLAYERNAME_LATIN,
SPECSTR_PLAYERNAME_SILLY,
SPECSTR_PLAYERNAME_LAST = SPECSTR_PLAYERNAME_SILLY,
SPECSTR_PLAYERNAME_LAST = SPECSTR_PLAYERNAME_SILLY,
SPECSTR_ANDCO_NAME = 0x70E6,
SPECSTR_PRESIDENT_NAME = 0x70E7,

View File

@ -17,7 +17,7 @@ static const byte _bridge_minlen[MAX_BRIDGES] = {
};
static const byte _bridge_maxlen[MAX_BRIDGES] = {
16, 2, 5, 10, 16, 16, 7, 8, 9, 2, 16, 32, 32,
16, 2, 5, 10, 16, 16, 7, 8, 9, 2, 16, 32, 32,
};
const uint16 _bridge_type_price_mod[MAX_BRIDGES] = {
@ -31,8 +31,8 @@ const uint16 _bridge_speeds[MAX_BRIDGES] = {
const PalSpriteID _bridge_sprites[MAX_BRIDGES] = {
0x0A24, 0x31E8A26, 0x0A25, 0x3208A22,
0x0A22, 0x3218A22, 0x0A23, 0x31C8A23,
0x31E8A23, 0x0A27, 0x0A28, 0x3218A28,
0x3238A28,
0x31E8A23, 0x0A27, 0x0A28, 0x3218A28,
0x3238A28,
};
const StringID _bridge_material[MAX_BRIDGES] = {
@ -88,11 +88,11 @@ static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
- no extra cost
- direction X: tiles 0,12
- direction Y: tiles 0, 9
*/
*/
if ((direction?0x201:0x1001) & (1 << tileh))
return 0;
// disallow certain start tiles to avoid certain crooked bridges
// disallow certain start tiles to avoid certain crooked bridges
if (tileh == 2)
return CMD_ERROR;
@ -106,7 +106,7 @@ static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
if ((direction?0x41:0x9) & (1 << tileh))
return 0;
// disallow certain end tiles to avoid certain crooked bridges
// disallow certain end tiles to avoid certain crooked bridges
if (tileh == 8)
return CMD_ERROR;
@ -116,7 +116,7 @@ static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
* start-tile: X 2,1 Y 2,4 (2 was disabled before)
* end-tile: X 8,4 Y 8,1 (8 was disabled before)
*/
if ( (tileh == 1 && (is_start_tile != (bool)direction)) ||
if ( (tileh == 1 && (is_start_tile != (bool)direction)) ||
(tileh == 4 && (is_start_tile == (bool)direction)) )
return CMD_ERROR;
@ -135,7 +135,7 @@ uint32 GetBridgeLength(TileIndex begin, TileIndex end)
y1 = GET_TILE_Y(begin);
x2 = GET_TILE_X(end);
y2 = GET_TILE_Y(end);
return abs((x2 + y2 - x1 - y1)) - 1;
}
@ -156,7 +156,7 @@ bool CheckBridge_Stuff(byte bridge_type, int bridge_len)
return true;
}
/* Build a Bridge
/* Build a Bridge
* x,y - end tile coord
* p1 - packed start tile coords (~ dx)
* p2&0xFF - bridge type (hi bh)
@ -174,11 +174,11 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 cost, terraformcost, ret;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
/* unpack parameters */
bridge_type = p2 & 0xFF;
railtype = (byte)(p2 >> 8);
// type of bridge
if (railtype & 0x80) {
railtype = 0;
@ -238,9 +238,9 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
cost = ret;
terraformcost = CheckBridgeSlope(direction, ti_start.tileh, true); // true - bridge-start-tile, false - bridge-end-tile
// towns are not allowed to use bridges on slopes.
if (terraformcost == CMD_ERROR ||
if (terraformcost == CMD_ERROR ||
(terraformcost && ((!_patches.ainew_active && _is_ai_player) || _current_player == OWNER_TOWN || !_patches.build_on_slopes)))
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@ -250,11 +250,11 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if ((ret=DoCommandByTile(ti_end.tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR)) == CMD_ERROR)
return CMD_ERROR;
cost += ret;
terraformcost = CheckBridgeSlope(direction, ti_end.tileh, false); // false - end tile slope check
// towns are not allowed to use bridges on slopes.
if (terraformcost == CMD_ERROR ||
if (terraformcost == CMD_ERROR ||
(terraformcost && ((!_patches.ainew_active && _is_ai_player) || _current_player == OWNER_TOWN || !_patches.build_on_slopes)))
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@ -299,7 +299,7 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (ti.tileh != 0 && ti.z >= ti_start.z)
return CMD_ERROR;
// Find ship below
// Find ship below
if ( ti.type == MP_WATER && !EnsureNoVehicle(ti.tile) )
{
_error_message = STR_980E_SHIP_IN_THE_WAY;
@ -339,26 +339,26 @@ not_valid_below:;
_map_type_and_height[ti.tile] |= MP_TUNNELBRIDGE << 4;
//bridges pieces sequence (middle parts)
// bridge len 1: 0
// bridge len 1: 0
// bridge len 2: 0 1
// bridge len 3: 0 4 1
// bridge len 4: 0 2 3 1
// bridge len 5: 0 2 5 3 1
// bridge len 6: 0 2 3 2 3 1
// bridge len 7: 0 2 3 4 2 3 1
// #0 - alwats as first, #1 - always as last (if len>1)
// #0 - alwats as first, #1 - always as last (if len>1)
// #2,#3 are to pair in order
// for odd bridges: #5 is going in the bridge middle if on even position, #4 on odd (counting from 0)
if(i==0) //first tile
m5 = 0;
m5 = 0;
else if (i==bridge_len-1) //last tile
m5 = 1;
else if(i==odd_middle_part) //we are on the middle of odd bridge: #5 on even pos, #4 on odd
m5 = 5 - (i%2);
else {
// generate #2 and #3 in turns [i%2==0], after the middle of odd bridge
// this sequence swaps [... XOR (i>odd_middle_part)],
// this sequence swaps [... XOR (i>odd_middle_part)],
// for even bridges XOR does not apply as odd_middle_part==bridge_len
m5 = 2 + ((i%2==0)^(i>odd_middle_part));
}
@ -377,7 +377,7 @@ not_valid_below:;
It's unnecessary to execute this command every time for every bridge. So it is done only
and cost is computed in "bridge_gui.c". For AI, Towns this has to be of course calculated
*/
if (!(flags & DC_QUERY_COST)) {
if (!(flags & DC_QUERY_COST)) {
bridge_len += 2; // begin and end tiles/ramps
if (_current_player < MAX_PLAYERS && !(_is_ai_player && !_patches.ainew_active))
@ -575,7 +575,7 @@ int32 CmdBuildTunnel(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC && DoBuildTunnel(x,y,tiorg.x,tiorg.y,flags&~DC_EXEC,excavated_tile) == CMD_ERROR)
return CMD_ERROR;
return DoBuildTunnel(x,y,tiorg.x, tiorg.y,flags,excavated_tile);
}
@ -588,14 +588,14 @@ uint CheckTunnelBusy(uint tile, int *length)
int delta = _tileoffs_by_dir[m5 & 3], len = 0;
uint starttile = tile;
Vehicle *v;
do { tile += delta; len++; } while (!IS_TILETYPE(tile, MP_TUNNELBRIDGE) || _map5[tile]&0xF0 || (byte)(_map5[tile] ^ 2) != m5 || GetTileZ(tile) != z);
if ((v=FindVehicleBetween(starttile, tile, z)) != NULL) {
_error_message = v->type == VEH_Train ? STR_5000_TRAIN_IN_TUNNEL : STR_5001_ROAD_VEHICLE_IN_TUNNEL;
return (uint)-1;
}
if (length) *length = len;
return tile;
}
@ -618,7 +618,7 @@ static int32 DoClearTunnel(uint tile, uint32 flags)
if (endtile == (uint)-1) return CMD_ERROR;
_build_tunnel_endtile = endtile;
t = ClosestTownFromTile(tile, (uint)-1); //needed for town rating penalty
// check if you're allowed to remove the tunnel owned by a town
// removal allowal depends on difficulty settings
@ -638,7 +638,7 @@ static int32 DoClearTunnel(uint tile, uint32 flags)
DoClearSquare(endtile);
UpdateSignalsOnSegment(tile, _updsignals_tunnel_dir[tile_dir]);
UpdateSignalsOnSegment(endtile, _updsignals_tunnel_dir[endtile_dir]);
if (_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR)
if (_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR)
ChangeTownRating(t, -250, 0);
}
return _price.clear_tunnel * (length + 1);
@ -676,7 +676,7 @@ static int32 DoClearBridge(uint tile, uint32 flags)
Vehicle *v;
Town *t;
int direction;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
direction = _map5[tile]&1;
@ -688,7 +688,7 @@ static int32 DoClearBridge(uint tile, uint32 flags)
// check if we own the tile below the bridge..
if (_current_player != OWNER_WATER && (!CheckTileOwnership(tile) || !EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)) ))
return CMD_ERROR;
cost = (_map5[tile] & 8) ? _price.remove_road * 2 : _price.remove_rail;
if (flags & DC_EXEC) {
@ -697,11 +697,11 @@ static int32 DoClearBridge(uint tile, uint32 flags)
MarkTileDirtyByTile(tile);
}
return cost;
/* delete canal under bridge */
} else if(_map5[tile]==0xC8 && GET_TILEHEIGHT(tile)!=0) {
int32 cost;
// check for vehicles under bridge
if ( !EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)) )
return CMD_ERROR;
@ -732,7 +732,7 @@ static int32 DoClearBridge(uint tile, uint32 flags)
tile += direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
endtile -= direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
if ((v=FindVehicleBetween(tile, endtile, GET_TILEHEIGHT(tile) + 8)) != NULL) {
VehicleInTheWayErrMsg(v);
VehicleInTheWayErrMsg(v);
return CMD_ERROR;
}
@ -740,12 +740,12 @@ static int32 DoClearBridge(uint tile, uint32 flags)
tile -= direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
endtile += direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
t = ClosestTownFromTile(tile, (uint)-1); //needed for town rating penalty
// check if you're allowed to remove the bridge owned by a town.
// check if you're allowed to remove the bridge owned by a town.
// removal allowal depends on difficulty settings
if(_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR) {
if (!CheckforTownRating(tile, flags, t, TUNNELBRIDGE_REMOVE))
if (!CheckforTownRating(tile, flags, t, TUNNELBRIDGE_REMOVE))
return CMD_ERROR;
}
@ -756,8 +756,8 @@ static int32 DoClearBridge(uint tile, uint32 flags)
//checks if the owner is town then decrease town rating by 250 until
// you have a "Poor" (0) town rating
if (_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR)
ChangeTownRating(t, -250, 0);
if (_map_owner[tile] == OWNER_TOWN && _game_mode != GM_EDITOR)
ChangeTownRating(t, -250, 0);
do {
m5 = _map5[c];
@ -787,7 +787,7 @@ clear_it:;
SetSignalsOnBothDir(tile, direction);
SetSignalsOnBothDir(endtile, direction);
}
return ((((endtile - tile) >> (direction?8:0))&0xFF)+1) * _price.clear_bridge;
@ -826,7 +826,7 @@ int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec)
if (!CheckTileOwnership(tile)) return CMD_ERROR;
if ( (uint)(_map3_lo[tile] & 0xF) == totype) return CMD_ERROR;
endtile = CheckTunnelBusy(tile, &length);
if (endtile == (uint)-1) return CMD_ERROR;
@ -861,7 +861,7 @@ int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec)
starttile = tile = FindEdgesOfBridge(tile, &endtile);
// Make sure there's no vehicle on the bridge
if ((v=FindVehicleBetween(tile, endtile, 0xff)) != NULL) {
VehicleInTheWayErrMsg(v);
VehicleInTheWayErrMsg(v);
return CMD_ERROR;
}
@ -881,7 +881,7 @@ int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec)
} while (tile <= endtile);
return cost;
} else
} else
return CMD_ERROR;
}
@ -906,7 +906,7 @@ uint GetBridgeHeight(const TileInfo *ti)
FindLandscapeHeightByTile(&ti_end, tile);
if (HASBIT(1 << 7, ti_end.tileh))
z_correction += 8;
// return the height there (the height of the NORTH CORNER)
return GET_TILEHEIGHT(tile) + z_correction;
}
@ -973,7 +973,7 @@ uint GetBridgeFoundation(uint tileh, byte direction) {
return tileh;
// inclined sloped building
if ( ((i=0, tileh == 1) || (i+=2, tileh == 2) || (i+=2, tileh == 4) || (i+=2, tileh == 8)) &&
if ( ((i=0, tileh == 1) || (i+=2, tileh == 2) || (i+=2, tileh == 4) || (i+=2, tileh == 8)) &&
( direction == 0 || (i++, direction == 1)) )
return i + 15;
@ -986,8 +986,8 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
uint tmp;
const uint32 *b;
bool ice = _map3_hi[ti->tile] & 0x80;
// draw tunnel?
// draw tunnel?
if ( (byte)(ti->map5&0xF0) == 0) {
/* railway type */
image = (_map3_lo[ti->tile] & 0xF) * 8;
@ -1018,11 +1018,11 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
tmp = (ti->map5&3) + (tmp*2);
if (!(ti->map5 & 0x40)) { // bridge ramps
if (!(BRIDGE_NO_FOUNDATION & (1 << ti->tileh))) { // no foundations for 0, 3, 6, 9, 12
int f = GetBridgeFoundation(ti->tileh, ti->map5 & 0x1); // pass direction
if (f) DrawFoundation(ti, f);
// default sloped sprites..
if (ti->tileh != 0) image = _track_sloped_sprites[ti->tileh - 1] + 0x3F3;
}
@ -1033,8 +1033,8 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
b += (tmp&1); // direction
if (ti->tileh == 0) b += 4; // sloped "entrance" ?
if (ti->map5 & 0x20) b += 2; // which side
image = *b;
image = *b;
if (!ice) {
DrawClearLandTile(ti, 3);
@ -1062,7 +1062,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
if (ti->map5 & 8 && ti->z != 0) DrawCanalWater(ti->tile);
} else {
// draw transport route under bridge
// draw foundation?
if (ti->tileh) {
int f = _bridge_foundations[ti->map5&1][ti->tileh];
@ -1087,7 +1087,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
b = _bridge_sprite_table[_map2[ti->tile]>>4][_map2[ti->tile]&0xF] + tmp * 4;
z = GetBridgeHeight(ti) + 5;
// draw rail
image = b[0];
if (!(_display_opt & DO_TRANS_BUILDINGS)) image = (image & 0x3FFF) | 0x03224000;
@ -1106,7 +1106,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
y += 12;
if (image&0x3FFF) AddSortableSpriteToDraw(image, x,y, 16, 1, 0x28, z);
}
if (ti->z + 5 == z ) {
// draw poles below for small bridges
image = b[2];
@ -1136,7 +1136,7 @@ static uint GetSlopeZ_TunnelBridge(TileInfo *ti) {
if ( (ti->map5 & 0xF0) == 0)
return z;
// bridge?
// bridge?
if ( ti->map5 & 0x80 ) {
// bridge ending?
if (!(ti->map5 & 0x40)) {
@ -1154,18 +1154,18 @@ static uint GetSlopeZ_TunnelBridge(TileInfo *ti) {
// ramp in opposite dir
return (z + ((x^0xF)>>1));
}
// bridge middle part
} else {
// build on slopes?
if (ti->tileh) z+=8;
// keep the same elevation because we're on the bridge?
if (_get_z_hint >= z + 8)
if (_get_z_hint >= z + 8)
return _get_z_hint;
// actually on the bridge, but not yet in the shared area.
if (!IS_INT_INSIDE(x, 5, 10+1))
if (!IS_INT_INSIDE(x, 5, 10+1))
return GetBridgeHeight(ti) + 8;
// in the shared area, assume that we're below the bridge, cause otherwise the hint would've caught it.
@ -1174,11 +1174,11 @@ static uint GetSlopeZ_TunnelBridge(TileInfo *ti) {
uint f = _bridge_foundations[ti->map5&1][ti->tileh];
// make sure that the slope is not inclined foundation
if (IS_BYTE_INSIDE(f, 1, 15)) return z;
// change foundation type?
if (f) ti->tileh = _inclined_tileh[f - 15];
}
// no transport route, fallback to default
}
}
@ -1282,7 +1282,7 @@ static void TileLoop_TunnelBridge(uint tile)
} else if (_opt.landscape == LT_DESERT) {
if (GetMapExtraBits(tile) == 1 && !(_map3_hi[tile]&0x80)) {
_map3_hi[tile] |= 0x80;
MarkTileDirtyByTile(tile);
MarkTileDirtyByTile(tile);
}
}
@ -1303,7 +1303,7 @@ static uint32 GetTileTrackStatus_TunnelBridge(uint tile, TransportType mode)
if ((m5 & 0xF0) == 0) {
/* This is a tunnel */
if (((m5 & 0xC) >> 2) == mode) {
if (((m5 & 0xC) >> 2) == mode) {
/* Tranport in the tunnel is compatible */
return m5&1 ? 0x202 : 0x101;
}
@ -1321,7 +1321,7 @@ static uint32 GetTileTrackStatus_TunnelBridge(uint tile, TransportType mode)
if ((m5 &= 0x18) != 8)
/* Clear ground */
return result;
else
else
if (mode != TRANSPORT_WATER)
return result;
} else {
@ -1347,7 +1347,7 @@ static void ChangeTileOwner_TunnelBridge(uint tile, byte old_player, byte new_pl
{
if (_map_owner[tile] != old_player)
return;
if (new_player != 255) {
_map_owner[tile] = new_player;
} else {
@ -1394,7 +1394,7 @@ static uint32 VehicleEnter_TunnelBridge(Vehicle *v, uint tile, int x, int y)
if (v->type == VEH_Train) {
fc = (x&0xF)+(y<<4);
dir = _map5[tile] & 3;
vdir = v->direction >> 1;
@ -1428,10 +1428,10 @@ static uint32 VehicleEnter_TunnelBridge(Vehicle *v, uint tile, int x, int y)
if (v->u.road.state != 0xFF && dir == vdir) {
if (fc == _tunnel_fractcoord_4[dir] ||
fc == _tunnel_fractcoord_5[dir]) {
v->tile = tile;
v->u.road.state = 0xFF;
v->vehstatus |= VS_HIDDEN;
v->vehstatus |= VS_HIDDEN;
return 4;
} else {
return 0;

42
unix.c
View File

@ -44,7 +44,7 @@ int compare_FiosItems (const void *a, const void *b) {
if (_savegame_sort_order < 2) // sort by date
r = da->mtime < db->mtime ? -1 : 1;
else
else
r = strcmp(da->title[0] ? da->title : da->name, db->title[0] ? db->title : db->name);
if (_savegame_sort_order & 1) r = -r;
@ -71,7 +71,7 @@ FiosItem *FiosGetSavegameList(int *num, int mode)
_fios_path = _fios_scn_path;
else
_fios_path = _fios_save_path;
// Parent directory, only if not in root already.
if (_fios_path[1] != 0) {
fios = FiosAlloc();
@ -263,11 +263,11 @@ char *FiosBrowseTo(const FiosItem *item)
case FIOS_TYPE_OLDFILE:
sprintf(str_buffr, "%s/%s.%s", _fios_path, item->name, _old_extensions[item->old_extension]);
return str_buffr;
case FIOS_TYPE_SCENARIO:
sprintf(str_buffr, "%s/%s.scn", path, item->name);
return str_buffr;
case FIOS_TYPE_OLD_SCENARIO:
sprintf(str_buffr, "%s/%s.%s", path, item->name, _old_extensions[item->old_extension]);
return str_buffr;
@ -291,14 +291,14 @@ StringID FiosGetDescText(char **path)
{
uint64 tot = (uint64)s.f_bsize * s.f_bavail;
SET_DPARAM32(0, (uint32)(tot >> 20));
return STR_4005_BYTES_FREE;
return STR_4005_BYTES_FREE;
}
else
return STR_4006_UNABLE_TO_READ_DRIVE;
}
#else
SET_DPARAM32(0, 0);
return STR_4005_BYTES_FREE;
return STR_4005_BYTES_FREE;
#endif
}
@ -348,14 +348,14 @@ const DriverDesc _music_driver_descs[] = {
#endif
#ifdef __BEOS__
{ "bemidi", "BeOS MIDI Driver", &_bemidi_music_driver, 1},
#endif
#endif
{ "null", "Null Music Driver", &_null_music_driver, 1},
{ NULL, NULL, NULL, 0}
};
bool FileExists(const char *filename)
{
return access(filename, 0) == 0;
return access(filename, 0) == 0;
}
static int LanguageCompareFunc(const void *a, const void *b)
@ -380,7 +380,7 @@ int GetLanguageList(char **languages, int max)
}
closedir(dir);
}
qsort(languages, num, sizeof(char*), LanguageCompareFunc);
return num;
}
@ -403,7 +403,7 @@ void ShowInfo(const char *str)
void ShowOSErrorBox(const char *buf)
{
fprintf(stderr, "\033[1;31mError: %s\033[0;39m\n", buf);
#if defined(__APPLE__)
// this opens the crash log opener script
system("./Crash_Log_Opener.app");
@ -435,25 +435,25 @@ void DeterminePaths()
#if defined(USE_HOMEDIR)
{
char *homedir;
char *homedir;
homedir = getenv("HOME");
if(!homedir) {
struct passwd *pw = getpwuid(getuid());
if (pw) homedir = pw->pw_dir;
}
_path.personal_dir = str_fmt("%s" PATHSEP "%s", homedir, PERSONAL_DIR);
}
#else /* not defined(USE_HOMEDIR) */
_path.personal_dir = malloc( MAX_PATH );
strcpy(_path.personal_dir, PERSONAL_DIR);
// check if absolute or relative path
s = strchr(_path.personal_dir, '/');
// add absolute path
if (s==NULL || _path.personal_dir != s) {
getcwd(_path.personal_dir, MAX_PATH);
@ -461,23 +461,23 @@ void DeterminePaths()
*s++ = '/';
strcpy(s, PERSONAL_DIR);
}
#endif /* defined(USE_HOMEDIR) */
s = strchr(_path.personal_dir, 0);
// append a / ?
if (s[-1] != '/') { s[0] = '/'; s[1] = 0; }
_path.save_dir = str_fmt("%ssave", _path.personal_dir);
_path.autosave_dir = str_fmt("%s/autosave", _path.save_dir);
_path.scenario_dir = str_fmt("%sscenario", _path.personal_dir);
_path.gm_dir = str_fmt("%sgm/", _path.game_data_dir);
_path.data_dir = str_fmt("%sdata/", _path.game_data_dir);
_path.lang_dir = str_fmt("%slang/", _path.game_data_dir);
_config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
// make (auto)save and scenario folder
mkdir(_path.save_dir, 0755);
mkdir(_path.autosave_dir, 0755);

View File

@ -31,10 +31,10 @@ typedef struct DrawTileSeqStruct {
static void DrawTile_Unmovable(TileInfo *ti)
{
uint32 image, ormod;
if (!(ti->map5 & 0x80)) {
if (ti->map5 == 2) {
// statue
DrawGroundSprite(0x58C);
@ -44,32 +44,32 @@ static void DrawTile_Unmovable(TileInfo *ti)
image = (image & 0x3FFF) | 0x3224000;
AddSortableSpriteToDraw(image, ti->x, ti->y, 16, 16, 25, ti->z);
} else if (ti->map5 == 3) {
// "owned by" sign
DrawClearLandTile(ti, 0);
AddSortableSpriteToDraw(
PLAYER_SPRITE_COLOR(_map_owner[ti->tile]) + 0x92B6,
ti->x+8, ti->y+8,
1, 1,
10,
1, 1,
10,
GetSlopeZ(ti->x+8, ti->y+8)
);
} else {
// lighthouse or transmitter
const DrawTileUnmovableStruct *dtus;
if (ti->tileh) DrawFoundation(ti, ti->tileh);
DrawClearLandTile(ti, 2);
dtus = &_draw_tile_unmovable_data[ti->map5];
dtus = &_draw_tile_unmovable_data[ti->map5];
image = dtus->image;
if (!(_display_opt & DO_TRANS_BUILDINGS))
image = (image & 0x3FFF) | 0x3224000;
AddSortableSpriteToDraw(image,
AddSortableSpriteToDraw(image,
ti->x | dtus->subcoord_x,
ti->y | dtus->subcoord_y,
dtus->width, dtus->height,
@ -87,7 +87,7 @@ static void DrawTile_Unmovable(TileInfo *ti)
DrawGroundSprite(*(uint16*)t | ormod);
t += sizeof(uint16);
for(dtss = (DrawTileSeqStruct *)t; (byte)dtss->delta_x != 0x80; dtss++) {
image = dtss->image;
if (_display_opt & DO_TRANS_BUILDINGS) {
@ -101,12 +101,12 @@ static void DrawTile_Unmovable(TileInfo *ti)
}
}
static uint GetSlopeZ_Unmovable(TileInfo *ti)
static uint GetSlopeZ_Unmovable(TileInfo *ti)
{
return GetPartialZ(ti->x&0xF, ti->y&0xF, ti->tileh) + ti->z;
}
static uint GetSlopeTileh_Unmovable(TileInfo *ti)
static uint GetSlopeTileh_Unmovable(TileInfo *ti)
{
return 0;
}
@ -114,12 +114,12 @@ static uint GetSlopeTileh_Unmovable(TileInfo *ti)
static int32 ClearTile_Unmovable(uint tile, byte flags)
{
byte m5 = _map5[tile];
if (m5 & 0x80) {
if (_current_player == OWNER_WATER)
if (_current_player == OWNER_WATER)
return DoCommandByTile(tile, OWNER_WATER, 0, DC_EXEC, CMD_DESTROY_COMPANY_HQ);
return_cmd_error(STR_5804_COMPANY_HEADQUARTERS_IN);
}
}
if (m5 == 3) // company owned land
return DoCommandByTile(tile, 0, 0, flags, CMD_SELL_LAND_AREA);
@ -127,8 +127,8 @@ static int32 ClearTile_Unmovable(uint tile, byte flags)
// checks if you're allowed to remove unmovable things
if (_game_mode != GM_EDITOR && _current_player != OWNER_WATER && ((flags & DC_AUTO || !_cheats.magic_bulldozer.value)) )
return_cmd_error(STR_5800_OBJECT_IN_THE_WAY);
if (flags & DC_EXEC) {
if (flags & DC_EXEC) {
DoClearSquare(tile);
}
@ -171,7 +171,7 @@ static const StringID _unmovable_tile_str[] = {
STR_5802_LIGHTHOUSE,
STR_2016_STATUE,
STR_5805_COMPANY_OWNED_LAND,
};
};
static void GetTileDesc_Unmovable(uint tile, TileDesc *td)
{
@ -289,7 +289,7 @@ void GenerateUnmovables()
if (_opt.landscape == LT_DESERT)
return;
/* add lighthouses */
i = (Random()&3) + 7;
do {
@ -297,7 +297,7 @@ restart:
r = Random();
dir = r >> 30;
r = r%((dir==0 || dir== 2)?TILE_Y_MAX:TILE_X_MAX);
tile =
tile =
(dir==0)?TILE_XY(0,r):0 + // left
(dir==1)?TILE_XY(r,0):0 + // top
(dir==2)?TILE_XY(TILE_X_MAX,r):0 + // right
@ -308,7 +308,7 @@ restart:
goto restart;
tile = TILE_MASK(tile + _tile_add[dir]);
} while (!(IS_TILETYPE(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h <= 16));
assert(tile == TILE_MASK(tile));
_map_type_and_height[tile] |= MP_UNMOVABLE << 4;
@ -328,7 +328,7 @@ int32 CmdBuildCompanyHQ(int x, int y, uint32 flags, uint32 p1, uint32 p2)
Player *p = DEREF_PLAYER(_current_player);
int score;
int32 cost = 0;
if (CheckFlatLandBelow(tile, 2, 2, flags, 0, NULL) == CMD_ERROR)
return CMD_ERROR;
@ -404,7 +404,7 @@ static void ChangeTileOwner_Unmovable(uint tile, byte old_player, byte new_playe
{
if (_map_owner[tile] != old_player)
return;
if (_map5[tile]==3 && new_player != 255) {
_map_owner[tile] = new_player;
} else {

View File

@ -110,7 +110,7 @@ typedef struct Patches {
bool always_small_airport; // always allow small airports
bool realistic_acceleration; // realistic acceleration for trains
bool invisible_trees; // don't show trees when buildings are transparent
uint8 toolbar_pos; // position of toolbars, 0=left, 1=center, 2=right
byte max_trains; //max trains in game per player (these are 8bit because the unitnumber field can't hold more)
@ -132,7 +132,7 @@ typedef struct Patches {
byte pf_maxdepth; // maximum recursion depth when searching for a train route for new pathfinder
uint16 pf_maxlength; // maximum length when searching for a train route for new pathfinder
bool bridge_pillars; // show bridge pillars for high bridges
bool ai_disable_veh_train; // disable types for AI
@ -169,7 +169,7 @@ typedef struct Cheat {
} Cheat;
// WARNING! Do _not_ remove entries in Cheats struct or change the order
// WARNING! Do _not_ remove entries in Cheats struct or change the order
// of the existing ones! Would break downward compatibility.
// Only add new entries at the end of the struct!
@ -187,7 +187,7 @@ typedef struct Cheats {
VARDEF Cheats _cheats;
typedef struct Paths {
char *personal_dir; // includes cfg file and save folder
char *personal_dir; // includes cfg file and save folder
char *game_data_dir; // includes data, gm, lang
char *data_dir;
char *gm_dir;

View File

@ -30,10 +30,10 @@ static void *EnsureNoVehicleProc(Vehicle *v, void *data)
{
if (v->tile != (TileIndex)(int)data || v->type == VEH_Disaster)
return NULL;
VehicleInTheWayErrMsg(v);
VehicleInTheWayErrMsg(v);
return (void*)1;
}
}
bool EnsureNoVehicle(TileIndex tile)
{
@ -169,7 +169,7 @@ static Vehicle *InitializeVehicle(Vehicle *v)
Vehicle *ForceAllocateSpecialVehicle()
{
Vehicle *v;
for(v=_vehicles + NUM_NORMAL_VEHICLES;
for(v=_vehicles + NUM_NORMAL_VEHICLES;
v!=&_vehicles[NUM_NORMAL_VEHICLES+NUM_SPECIAL_VEHICLES]; v++) {
if (v->type == 0)
return InitializeVehicle(v);
@ -227,7 +227,7 @@ void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc)
while (veh != INVALID_VEHICLE) {
Vehicle *v = &_vehicles[veh];
void *a;
if ((a = proc(v, data)) != NULL)
return a;
veh = v->next_hash;
@ -259,7 +259,7 @@ void UpdateVehiclePosHash(Vehicle *v, int x, int y)
new_hash = (x == INVALID_COORD) ? NULL : &_vehicle_position_hash[GEN_HASH(x,y)];
old_hash = (old_x == INVALID_COORD) ? NULL : &_vehicle_position_hash[GEN_HASH(old_x, old_y)];
if (old_hash == new_hash)
return;
@ -295,7 +295,7 @@ void InitializeVehicles()
memset(&_vehicles, 0, sizeof(_vehicles));
memset(&_checkpoints, 0, sizeof(_checkpoints));
memset(&_depots, 0, sizeof(_depots));
// setup indexes..
i = 0;
FOR_ALL_VEHICLES(v)
@ -334,7 +334,7 @@ Vehicle *GetFirstVehicleInChain(Vehicle *v)
if (++v == endof(_vehicles))
return u;
}
}
}
}
int CountVehiclesInChain(Vehicle *v)
@ -358,13 +358,13 @@ Depot *AllocateDepot()
}
}
if (free_dep == NULL ||
if (free_dep == NULL ||
(num_free < 30 && IS_HUMAN_PLAYER(_current_player))) {
_error_message = STR_1009_TOO_MANY_DEPOTS;
return NULL;
}
return free_dep;
return free_dep;
}
Checkpoint *AllocateCheckpoint()
@ -443,7 +443,7 @@ void DeleteCommandFromVehicleSchedule(uint cmd)
FOR_ALL_VEHICLES(v) {
if (v->type != 0 && v->schedule_ptr != NULL) {
// clear last station visited
if (v->last_station_visited == (cmd>>8) && (cmd & OT_MASK) == OT_GOTO_STATION)
v->last_station_visited = 0xFF;
@ -459,7 +459,7 @@ void DeleteCommandFromVehicleSchedule(uint cmd)
sched = v->schedule_ptr;
while ((order=*sched++) != 0) {
if ( (order & (OT_MASK|0xFF00)) == cmd) {
sched[-1] = OT_DUMMY;
sched[-1] = OT_DUMMY;
need_invalidate = true;
}
}
@ -538,7 +538,7 @@ void CallVehicleTicks()
static bool CanFillVehicle_FullLoadAny(Vehicle *v)
{
uint32 full = 0, not_full = 0;
// patch should return "true" to continue loading, i.e. when there is no cargo type that is fully loaded.
do {
//Should never happen, but just in case future additions change this
@ -559,7 +559,7 @@ bool CanFillVehicle(Vehicle *v)
byte *t = &_map_type_and_height[v->tile];
if (t[0] >> 4 == MP_STATION ||
(v->type == VEH_Ship &&
(v->type == VEH_Ship &&
(t[TILE_XY(1,0)] >> 4 == MP_STATION ||
t[TILE_XY(-1,0)] >> 4 == MP_STATION ||
t[TILE_XY(0,1)] >> 4 == MP_STATION ||
@ -581,14 +581,14 @@ bool CanFillVehicle(Vehicle *v)
static void DoDrawVehicle(Vehicle *v)
{
uint32 image = v->cur_image;
if (v->vehstatus & VS_DISASTER) {
image |= 0x3224000;
} else if (v->vehstatus & VS_DEFPAL) {
image |= (v->vehstatus & VS_CRASHED) ? 0x3248000 : SPRITE_PALETTE(PLAYER_SPRITE_COLOR(v->owner));
}
}
AddSortableSpriteToDraw(image, v->x_pos + v->x_offs, v->y_pos + v->y_offs,
AddSortableSpriteToDraw(image, v->x_pos + v->x_offs, v->y_pos + v->y_offs,
v->sprite_width, v->sprite_height, v->z_height, v->z_pos);
}
@ -610,12 +610,12 @@ void ViewportAddVehicles(DrawPixelInfo *dpi)
veh = _vehicle_position_hash[ (x+y)&0xFFFF ];
while (veh != INVALID_VEHICLE) {
v = &_vehicles[veh];
if (!(v->vehstatus & VS_HIDDEN) &&
if (!(v->vehstatus & VS_HIDDEN) &&
dpi->left <= v->right_coord &&
dpi->top <= v->bottom_coord &&
dpi->left + dpi->width >= v->left_coord &&
dpi->top + dpi->height >= v->top_coord) {
dpi->top + dpi->height >= v->top_coord) {
DoDrawVehicle(v);
}
veh = v->next_hash;
@ -647,7 +647,7 @@ static void EffectTick_0(Vehicle *v)
if (--v->progress & 0x80) {
BeginVehicleMove(v);
tile = TILE_FROM_XY(v->x_pos, v->y_pos);
if (!IS_TILETYPE(tile, MP_INDUSTRY)) {
EndVehicleMove(v);
@ -673,11 +673,11 @@ static void EffectInit_1(Vehicle *v)
static void EffectTick_1(Vehicle *v)
{
bool moved;
BeginVehicleMove(v);
moved = false;
if ((++v->progress & 7) == 0) {
v->z_pos++;
moved = true;
@ -753,11 +753,11 @@ static void EffectInit_4(Vehicle *v)
static void EffectTick_4(Vehicle *v)
{
bool moved;
BeginVehicleMove(v);
moved = false;
if ((++v->progress & 3) == 0) {
v->z_pos++;
moved = true;
@ -1095,8 +1095,8 @@ again:
EndVehicleMove(v);
DeleteVehicle(v);
return;
}
}
if (*b == 0x81) {
if (v->z_pos > 180 || CHANCE16(1,96)) {
v->spritenum = 5;
@ -1104,8 +1104,8 @@ again:
}
et = 0;
goto again;
}
}
if (*b == 0x82) {
uint tile;
@ -1163,7 +1163,7 @@ static EffectTickProc * const _effect_tick_procs[] = {
Vehicle *CreateEffectVehicle(int x, int y, int z, int type)
{
Vehicle *v;
v = ForceAllocateSpecialVehicle();
if (v != NULL) {
v->type = VEH_Special;
@ -1213,10 +1213,10 @@ Vehicle *CheckClickOnVehicle(ViewPort *vp, int x, int y)
y = (y << vp->zoom) + vp->virtual_top;
FOR_ALL_VEHICLES(v) {
if (v->type != 0 && (v->vehstatus & (VS_HIDDEN|VS_UNCLICKABLE)) == 0 &&
if (v->type != 0 && (v->vehstatus & (VS_HIDDEN|VS_UNCLICKABLE)) == 0 &&
x >= v->left_coord && x <= v->right_coord &&
y >= v->top_coord && y <= v->bottom_coord) {
dist = max(
myabs( ((v->left_coord + v->right_coord)>>1) - x ),
myabs( ((v->top_coord + v->bottom_coord)>>1) - y )
@ -1275,7 +1275,7 @@ void CheckVehicleBreakdown(Vehicle *v)
/* calculate reliability value to use in comparison */
rel = v->reliability;
if (v->type == VEH_Ship) rel += 0x6666;
/* disabled breakdowns? */
if (_opt.diff.vehicle_breakdowns < 1)
return;
@ -1320,8 +1320,8 @@ void AgeVehicle(Vehicle *v)
age = v->age - v->max_age;
if (age == 366*0 || age == 366*1 || age == 366*2 || age == 366*3 || age == 366*4)
v->reliability_spd_dec <<= 1;
v->reliability_spd_dec <<= 1;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
if (age == -366) {
@ -1343,7 +1343,7 @@ void MaybeRenewVehicle(Vehicle *v, int32 build_cost)
// It can be any value between -12 and 12.
if (!_patches.autorenew || v->age - v->max_age < (_patches.autorenew_months * 30))
return;
if (DEREF_PLAYER(v->owner)->money64 < _patches.autorenew_money + build_cost - v->value) {
if (v->owner == _local_player) {
int message;
@ -1361,7 +1361,7 @@ void MaybeRenewVehicle(Vehicle *v, int32 build_cost)
}
return;
}
// Withdraw the money from the right player ;)
_current_player = v->owner;
@ -1376,7 +1376,7 @@ void MaybeRenewVehicle(Vehicle *v, int32 build_cost)
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
SubtractMoneyFromPlayer(build_cost - v->value);
v->value = build_cost;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
}
@ -1394,7 +1394,7 @@ int32 CmdNameVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
str = AllocateName((byte*)_decode_parameters, 2);
if (str == 0)
return CMD_ERROR;
if (flags & DC_EXEC) {
StringID old_str = v->string_id;
v->string_id = str;
@ -1490,10 +1490,10 @@ byte GetDirectionTowards(Vehicle *v, int x, int y)
* bit 0x8 set, the vehicle could not and did not enter the tile. Are there
* other bits that can be set? */
uint32 VehicleEnterTile(Vehicle *v, uint tile, int x, int y)
{
{
uint old_tile = v->tile;
uint32 result = _tile_type_procs[GET_TILETYPE(tile)]->vehicle_enter_tile_proc(v, tile, x, y);
/* When vehicle_enter_tile_proc returns 8, that apparently means that
* we cannot enter the tile at all. In that case, don't call
* leave_tile. */
@ -1513,7 +1513,7 @@ uint GetFreeUnitNumber(byte type)
restart:
unit_num++;
FOR_ALL_VEHICLES(u) {
if (u->type == type && u->owner == _current_player &&
if (u->type == type && u->owner == _current_player &&
unit_num == u->unitnumber)
goto restart;
}
@ -1524,7 +1524,7 @@ restart:
// Save and load of vehicles
const byte _common_veh_desc[] = {
SLE_VAR(Vehicle,subtype, SLE_UINT8),
SLE_VAR(Vehicle,next_in_chain_old, SLE_UINT16),
SLE_VAR(Vehicle,string_id, SLE_STRINGID),
SLE_VAR(Vehicle,unitnumber, SLE_UINT8),
@ -1589,7 +1589,7 @@ const byte _common_veh_desc[] = {
// reserve extra space in savegame here. (currently 16 bytes)
SLE_CONDARR(NullStruct,null,SLE_FILE_U64 | SLE_VAR_NULL, 2, 2, 255),
SLE_END()
};
@ -1646,7 +1646,7 @@ static const byte _aircraft_desc[] = {
SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,pos), SLE_UINT8),
SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,targetairport), SLE_UINT8),
SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,state), SLE_UINT8),
SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,previous_pos), SLE_UINT8, 2, 255),
// reserve extra space in savegame here. (currently 15 bytes)
@ -1659,7 +1659,7 @@ static const byte _special_desc[] = {
SLE_WRITEBYTE(Vehicle,type,VEH_Special, 4),
SLE_VAR(Vehicle,subtype, SLE_UINT8),
SLE_VAR(Vehicle,tile, SLE_UINT16),
SLE_VAR(Vehicle,x_pos, SLE_INT16),

View File

@ -6,8 +6,8 @@
typedef struct VehicleRail {
uint16 last_speed; // NOSAVE: only used in UI
uint16 crash_anim_pos;
uint16 days_since_order_progr;
uint16 days_since_order_progr;
uint16 cached_weight; // cached power and weight for the vehicle.
uint32 cached_power; // no need to save those, they are recomputed on load.
@ -69,7 +69,7 @@ struct WorldSprite {
// screen coordinates
int16 left, top, right, bottom;
// world coordinates
int16 x;
int16 y;
@ -126,7 +126,7 @@ struct Vehicle {
byte vehstatus; // Status
byte last_station_visited;
byte cargo_type; // type of cargo this vehicle is carrying
byte cargo_days; // how many days have the pieces been in transit
byte cargo_source;// source of cargo
@ -162,7 +162,7 @@ struct Vehicle {
byte build_year;
uint16 load_unload_time_rem;
int32 profit_this_year;
int32 profit_last_year;
uint32 value;
@ -379,7 +379,7 @@ enum {
NUM_NORMAL_VEHICLES = 2048,
NUM_SPECIAL_VEHICLES = 512,
NUM_VEHICLES = NUM_NORMAL_VEHICLES + NUM_SPECIAL_VEHICLES
};
};
VARDEF Vehicle _vehicles[NUM_VEHICLES];

View File

@ -96,7 +96,7 @@ int CDECL VehicleNameSorter(const void *a, const void *b)
}
r = strcmp(buf1, _bufcache); // sort by name
if (r == 0) // if the sorting criteria had the same value, sort by unitnumber
r = va->unitnumber - vb->unitnumber;
@ -120,7 +120,7 @@ int CDECL VehicleProfitThisYearSorter(const void *a, const void *b)
const Vehicle *va = DEREF_VEHICLE((*(const SortStruct*)a).index);
const Vehicle *vb = DEREF_VEHICLE((*(const SortStruct*)b).index);
int r = va->profit_this_year - vb->profit_this_year;
if (r == 0) // if the sorting criteria had the same value, sort by unitnumber
r = va->unitnumber - vb->unitnumber;
@ -191,4 +191,4 @@ int CDECL VehicleMaxSpeedSorter(const void *a, const void *b)
r = va->unitnumber - vb->unitnumber;
return (_internal_sort_order & 1) ? -r : r;
}
}

View File

@ -48,9 +48,9 @@ typedef struct ParentSpriteToDraw {
typedef struct ViewportDrawer {
DrawPixelInfo dpi;
byte *spritelist_mem, *eof_spritelist_mem;
StringSpriteToDraw **last_string, *first_string;
TileSpriteToDraw **last_tile, *first_tile;
@ -79,7 +79,7 @@ Point MapXYZToViewport(ViewPort *vp, uint x, uint y, uint z)
return p;
}
void AssignWindowViewport(Window *w, int x, int y,
void AssignWindowViewport(Window *w, int x, int y,
int width, int height, uint32 follow_flags, byte zoom)
{
ViewPort *vp;
@ -98,7 +98,7 @@ void AssignWindowViewport(Window *w, int x, int y,
vp->top = y + w->top;
vp->width = width;
vp->height = height;
vp->zoom = zoom;
vp->virtual_width = width << zoom;
@ -133,7 +133,7 @@ static void DoSetViewportPosition(Window *w, int left, int top, int width, int h
w->left+w->width > left &&
top + height > w->top &&
w->top+w->height > top) {
if (left < w->left) {
DoSetViewportPosition(w, left, top, w->left - left, height);
DoSetViewportPosition(w, left + (w->left - left), top, width - (w->left - left), height);
@ -234,7 +234,7 @@ void SetViewportPosition(Window *w, int x, int y)
height += top;
top = 0;
}
if ( (i=(top + height - _screen.height)) >= 0) {
height -= i;
}
@ -285,7 +285,7 @@ Point TranslateXYToTileCoord(ViewPort *vp, int x, int y) {
pt.x = a+z;
pt.y = b+z;
if ((uint)pt.x >= TILE_X_MAX*16 || (uint)pt.y >= TILE_Y_MAX*16) {
pt.x = pt.y = -1;
}
@ -294,12 +294,12 @@ Point TranslateXYToTileCoord(ViewPort *vp, int x, int y) {
}
static Point GetTileFromScreenXY(int x, int y)
{
{
Window *w;
ViewPort *vp;
Point pt;
if ( (w = FindWindowFromPt(x, y)) != NULL &&
if ( (w = FindWindowFromPt(x, y)) != NULL &&
(vp = IsPtInWindowViewport(w, x, y)) != NULL)
return TranslateXYToTileCoord(vp, x, y);
@ -335,7 +335,7 @@ void DrawGroundSpriteAt(uint32 image, int16 x, int16 y, byte z)
{
ViewportDrawer *vd = _cur_vd;
TileSpriteToDraw *ts;
assert( (image & 0x3fff) < NUM_SPRITES);
ts = (TileSpriteToDraw*)vd->spritelist_mem;
@ -345,14 +345,14 @@ void DrawGroundSpriteAt(uint32 image, int16 x, int16 y, byte z)
}
vd->spritelist_mem += sizeof(TileSpriteToDraw);
ts->image = image;
ts->next = NULL;
ts->x = x;
ts->y = y;
ts->z = z;
*vd->last_tile = ts;
vd->last_tile = &ts->next;
vd->last_tile = &ts->next;
}
void DrawGroundSprite(uint32 image)
@ -384,7 +384,7 @@ static void AddCombinedSprite(uint32 image, int x, int y, byte z)
sd = GetSpriteDimension(image & 0x3FFF);
if ((t = pt.x + sd->xoffs) >= vd->dpi.left + vd->dpi.width ||
if ((t = pt.x + sd->xoffs) >= vd->dpi.left + vd->dpi.width ||
(t + sd->xsize) <= vd->dpi.left ||
(t = pt.y + sd->yoffs) >= vd->dpi.top + vd->dpi.height ||
(t + sd->ysize) <= vd->dpi.top)
@ -417,16 +417,16 @@ void AddSortableSpriteToDraw(uint32 image, int x, int y, int w, int h, byte dz,
}
if (vd->parent_list >= vd->eof_parent_list) {
// This can happen rarely, mostly when you zoom out completely
// and have a lot of stuff that moves (and is added to the
// and have a lot of stuff that moves (and is added to the
// sort-list, this function). To solve it, increase
// parent_list somewhere below to a higher number.
// This can not really hurt you, it just gives some black
// spots on the screen ;)
DEBUG(misc, 0) ("Out of sprite mem (parent_list)\n");
return;
}
vd->spritelist_mem += sizeof(ParentSpriteToDraw);
}
vd->spritelist_mem += sizeof(ParentSpriteToDraw);
ps->image = image;
ps->tile_x = x;
@ -441,7 +441,7 @@ void AddSortableSpriteToDraw(uint32 image, int x, int y, int w, int h, byte dz,
pt = RemapCoords(x, y, z);
sd = GetSpriteDimension(image & 0x3FFF);
if ((ps->left = (pt.x += sd->xoffs)) >= vd->dpi.left + vd->dpi.width ||
if ((ps->left = (pt.x += sd->xoffs)) >= vd->dpi.left + vd->dpi.width ||
(ps->right = (pt.x + sd->xsize)) <= vd->dpi.left ||
(ps->top = (pt.y += sd->yoffs)) >= vd->dpi.top + vd->dpi.height ||
(ps->bottom = (pt.y + sd->ysize)) <= vd->dpi.top) {
@ -473,7 +473,7 @@ void AddChildSpriteScreen(uint32 image, int x, int y)
{
ViewportDrawer *vd = _cur_vd;
ChildScreenSpriteToDraw *cs;
assert( (image & 0x3fff) < NUM_SPRITES);
cs = (ChildScreenSpriteToDraw*) vd->spritelist_mem;
@ -484,8 +484,8 @@ void AddChildSpriteScreen(uint32 image, int x, int y)
if (vd->last_child == NULL)
return;
vd->spritelist_mem += sizeof(ChildScreenSpriteToDraw);
vd->spritelist_mem += sizeof(ChildScreenSpriteToDraw);
*vd->last_child = cs;
vd->last_child = &cs->next;
@ -602,7 +602,7 @@ static bool IsPartOfAutoLine(int px, int py)
default:
NOT_REACHED();
}
/* useless, but avoids compiler warning this way */
return 0;
}
@ -615,7 +615,7 @@ static void DrawTileSelection(const TileInfo *ti)
#ifdef DEBUG_TILE_PUSH
dbg_draw_pushed(ti);
#endif
// Draw a red error square?
if (thd->redsq != 0 && thd->redsq == (TileIndex)ti->tile) {
DrawSelectionSprite(0x030382F0 | _tileh_to_sprite[ti->tileh], ti);
@ -636,8 +636,8 @@ static void DrawTileSelection(const TileInfo *ti)
// Figure out the Z coordinate for the single dot.
byte z = ti->z;
if (ti->tileh & 8) {
z += 8;
if (!(ti->tileh & 2) && (ti->tileh & 0x10)) {
z += 8;
if (!(ti->tileh & 2) && (ti->tileh & 0x10)) {
z += 8;
}
}
@ -689,14 +689,14 @@ void ViewportAddLandscape()
assert(width > 0);
assert(height > 0);
direction = false;
do {
int width_cur = width;
int x_cur = x;
int y_cur = y;
do {
FindLandscapeHeight(&ti, x_cur, y_cur);
#if !defined(NEW_ROTATION)
@ -708,11 +708,11 @@ void ViewportAddLandscape()
#endif
_added_tile_sprite = false;
_offset_ground_sprites = false;
DrawTile(&ti);
DrawTileSelection(&ti);
} while (--width_cur);
#if !defined(NEW_ROTATION)
if ( (direction^=1) != 0)
y += 0x10;
@ -724,7 +724,7 @@ void ViewportAddLandscape()
else
y -= 0x10;
#endif
} while (--height);
} while (--height);
}
@ -748,7 +748,7 @@ void ViewportAddTownNames(DrawPixelInfo *dpi)
top < t->sign.top + 12 &&
right > t->sign.left &&
left < t->sign.left + t->sign.width_1) {
AddStringToDraw(t->sign.left + 1, t->sign.top + 1, STR_2001, t->townnametype, t->townnameparts);
}
}
@ -762,9 +762,9 @@ void ViewportAddTownNames(DrawPixelInfo *dpi)
top < t->sign.top + 24 &&
right > t->sign.left &&
left < t->sign.left + t->sign.width_1*2) {
AddStringToDraw(t->sign.left + 1, t->sign.top + 1, STR_2001, t->townnametype, t->townnameparts);
}
}
}
} else {
right += 4;
@ -777,10 +777,10 @@ void ViewportAddTownNames(DrawPixelInfo *dpi)
top < t->sign.top + 24 &&
right > t->sign.left &&
left < t->sign.left + t->sign.width_2*4) {
AddStringToDraw(t->sign.left + 5, t->sign.top + 1, STR_2002, t->townnametype, t->townnameparts);
AddStringToDraw(t->sign.left + 1, t->sign.top - 3, STR_2003, t->townnametype, t->townnameparts);
}
}
}
}
}
@ -806,7 +806,7 @@ void ViewportAddStationNames(DrawPixelInfo *dpi)
top < st->sign.top + 12 &&
right > st->sign.left &&
left < st->sign.left + st->sign.width_1) {
sstd=AddStringToDraw(st->sign.left + 1, st->sign.top + 1, STR_305C_0, st->index, st->facilities);
if (sstd != NULL) {
sstd->color = (st->owner == OWNER_NONE || !st->facilities) ? 0xE : _player_colors[st->owner];
@ -824,7 +824,7 @@ void ViewportAddStationNames(DrawPixelInfo *dpi)
top < st->sign.top + 24 &&
right > st->sign.left &&
left < st->sign.left + st->sign.width_1*2) {
sstd=AddStringToDraw(st->sign.left + 1, st->sign.top + 1, STR_305C_0, st->index, st->facilities);
if (sstd != NULL) {
sstd->color = (st->owner == OWNER_NONE || !st->facilities) ? 0xE : _player_colors[st->owner];
@ -845,7 +845,7 @@ void ViewportAddStationNames(DrawPixelInfo *dpi)
top < st->sign.top + 24 &&
right > st->sign.left &&
left < st->sign.left + st->sign.width_2*4) {
sstd=AddStringToDraw(st->sign.left + 1, st->sign.top + 1, STR_305D_0, st->index, st->facilities);
if (sstd != NULL) {
sstd->color = (st->owner == OWNER_NONE || !st->facilities) ? 0xE : _player_colors[st->owner];
@ -877,14 +877,14 @@ void ViewportAddSigns(DrawPixelInfo *dpi)
top < ss->sign.top + 12 &&
right > ss->sign.left &&
left < ss->sign.left + ss->sign.width_1) {
sstd=AddStringToDraw(ss->sign.left + 1, ss->sign.top + 1, STR_2806, ss->str, 0);
if (sstd != NULL) {
sstd->width = ss->sign.width_1;
sstd->color = 14;
}
}
}
}
} else if (dpi->zoom == 1) {
right += 2;
bottom += 2;
@ -894,14 +894,14 @@ void ViewportAddSigns(DrawPixelInfo *dpi)
top < ss->sign.top + 24 &&
right > ss->sign.left &&
left < ss->sign.left + ss->sign.width_1*2) {
sstd=AddStringToDraw(ss->sign.left + 1, ss->sign.top + 1, STR_2806, ss->str, 0);
if (sstd != NULL) {
sstd->width = ss->sign.width_1;
sstd->color = 14;
}
}
}
}
} else {
right += 4;
bottom += 5;
@ -912,14 +912,14 @@ void ViewportAddSigns(DrawPixelInfo *dpi)
top < ss->sign.top + 24 &&
right > ss->sign.left &&
left < ss->sign.left + ss->sign.width_2*4) {
sstd=AddStringToDraw(ss->sign.left + 1, ss->sign.top + 1, STR_2807, ss->str, 0);
if (sstd != NULL) {
sstd->width = ss->sign.width_2 | 0x8000;
sstd->color = 14;
}
}
}
}
}
}
@ -945,14 +945,14 @@ void ViewportAddCheckpoints(DrawPixelInfo *dpi)
top < cp->sign.top + 12 &&
right > cp->sign.left &&
left < cp->sign.left + cp->sign.width_1) {
sstd=AddStringToDraw(cp->sign.left + 1, cp->sign.top + 1, STR_CHECKPOINT_VIEWPORT, cp - _checkpoints, 0);
if (sstd != NULL) {
sstd->width = cp->sign.width_1;
sstd->color = (cp->deleted ? 0xE : 11);
}
}
}
}
} else if (dpi->zoom == 1) {
right += 2;
bottom += 2;
@ -962,14 +962,14 @@ void ViewportAddCheckpoints(DrawPixelInfo *dpi)
top < cp->sign.top + 24 &&
right > cp->sign.left &&
left < cp->sign.left + cp->sign.width_1*2) {
sstd=AddStringToDraw(cp->sign.left + 1, cp->sign.top + 1, STR_CHECKPOINT_VIEWPORT, cp - _checkpoints, 0);
if (sstd != NULL) {
sstd->width = cp->sign.width_1;
sstd->color = (cp->deleted ? 0xE : 11);
}
}
}
}
} else {
right += 4;
bottom += 5;
@ -980,14 +980,14 @@ void ViewportAddCheckpoints(DrawPixelInfo *dpi)
top < cp->sign.top + 24 &&
right > cp->sign.left &&
left < cp->sign.left + cp->sign.width_2*4) {
sstd=AddStringToDraw(cp->sign.left + 1, cp->sign.top + 1, STR_CHECKPOINT_VIEWPORT_TINY, cp - _checkpoints, 0);
if (sstd != NULL) {
sstd->width = cp->sign.width_2 | 0x8000;
sstd->color = (cp->deleted ? 0xE : 11);
}
}
}
}
}
}
@ -1011,7 +1011,7 @@ void UpdateViewportSignPos(ViewportSign *sign, int left, int top, StringID str)
void ViewportDrawTileSprites(TileSpriteToDraw *ts)
{
{
do {
Point pt = RemapCoords(ts->x, ts->y, ts->z);
DrawSprite(ts->image, pt.x, pt.y);
@ -1026,7 +1026,7 @@ void ViewportSortParentSprites(ParentSpriteToDraw **psd)
if (!(ps->unk16 & 1)) {
ps->unk16 |= 1;
psd2 = psd;
while ( (ps2=*++psd2) != NULL) {
if (ps2->unk16 & 1)
continue;
@ -1075,7 +1075,7 @@ void ViewportDrawStrings(DrawPixelInfo *dpi, StringSpriteToDraw *ss)
{
DrawPixelInfo dp;
byte zoom;
_cur_dpi = &dp;
dp = *dpi;
@ -1090,7 +1090,7 @@ void ViewportDrawStrings(DrawPixelInfo *dpi, StringSpriteToDraw *ss)
do {
if (ss->width != 0) {
int x, y, w, bottom;
x = (ss->x >> zoom) - 1;
y = (ss->y >> zoom) - 1;
@ -1172,7 +1172,7 @@ void ViewportDoDraw(ViewPort *vp, int left, int top, int right, int bottom)
vd.first_string = NULL;
vd.last_tile = &vd.first_tile;
vd.first_tile = NULL;
ViewportAddLandscape();
#if !defined(NEW_ROTATION)
ViewportAddVehicles(&vd.dpi);
@ -1196,10 +1196,10 @@ void ViewportDoDraw(ViewPort *vp, int left, int top, int right, int bottom)
ViewportSortParentSprites(parent_list);
ViewportDrawParentSprites(parent_list);
if (vd.first_string != NULL)
ViewportDrawStrings(&vd.dpi, vd.first_string);
_cur_dpi = old_dpi;
}
@ -1218,7 +1218,7 @@ static void ViewportDrawChk(ViewPort *vp, int left, int top, int right, int bott
ViewportDrawChk(vp, t, top, right, bottom);
}
} else {
ViewportDoDraw(vp,
ViewportDoDraw(vp,
((left - vp->left) << vp->zoom) + vp->virtual_left,
((top - vp->top) << vp->zoom) + vp->virtual_top,
((right - vp->left) << vp->zoom) + vp->virtual_left,
@ -1285,7 +1285,7 @@ void UpdateViewportPosition(Window *w)
t = x;
x = y - t;
y = y + t;
// check if inside bounds?
t = (-130) << vp->zoom;
err = 0;
@ -1301,7 +1301,7 @@ void UpdateViewportPosition(Window *w)
if (err != 0) {
/* coordinate remap */
Point pt = RemapCoords(x, y, 0);
t = (-1) << vp->zoom;
t = (-1) << vp->zoom;
WP(w,vp_d).scrollpos_x = pt.x & t;
WP(w,vp_d).scrollpos_y = pt.y & t;
}
@ -1373,7 +1373,7 @@ void MarkTileDirty(int x, int y)
pt.x - 31 + 67,
pt.y - 122 + 154
);
}
}
void SetSelectionTilesDirty()
{
@ -1417,8 +1417,8 @@ static bool CheckClickOnTown(ViewPort *vp, int x, int y)
if (vp->zoom < 1) {
x = x - vp->left + vp->virtual_left;
y = y - vp->top + vp->virtual_top;
y = y - vp->top + vp->virtual_top;
FOR_ALL_TOWNS(t) {
if (t->xy &&
y >= t->sign.top &&
@ -1431,7 +1431,7 @@ static bool CheckClickOnTown(ViewPort *vp, int x, int y)
}
} else if (vp->zoom == 1) {
x = (x - vp->left + 1) * 2 + vp->virtual_left;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
FOR_ALL_TOWNS(t) {
if (t->xy &&
y >= t->sign.top &&
@ -1444,7 +1444,7 @@ static bool CheckClickOnTown(ViewPort *vp, int x, int y)
}
} else {
x = (x - vp->left + 3) * 4 + vp->virtual_left;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
FOR_ALL_TOWNS(t) {
if (t->xy &&
y >= t->sign.top &&
@ -1469,7 +1469,7 @@ static bool CheckClickOnStation(ViewPort *vp, int x, int y)
if (vp->zoom < 1) {
x = x - vp->left + vp->virtual_left;
y = y - vp->top + vp->virtual_top;
y = y - vp->top + vp->virtual_top;
FOR_ALL_STATIONS(st) {
if (st->xy &&
@ -1483,7 +1483,7 @@ static bool CheckClickOnStation(ViewPort *vp, int x, int y)
}
} else if (vp->zoom == 1) {
x = (x - vp->left + 1) * 2 + vp->virtual_left;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
FOR_ALL_STATIONS(st) {
if (st->xy &&
y >= st->sign.top &&
@ -1496,7 +1496,7 @@ static bool CheckClickOnStation(ViewPort *vp, int x, int y)
}
} else {
x = (x - vp->left + 3) * 4 + vp->virtual_left;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
FOR_ALL_STATIONS(st) {
if (st->xy &&
y >= st->sign.top &&
@ -1521,7 +1521,7 @@ static bool CheckClickOnSign(ViewPort *vp, int x, int y)
if (vp->zoom < 1) {
x = x - vp->left + vp->virtual_left;
y = y - vp->top + vp->virtual_top;
y = y - vp->top + vp->virtual_top;
for(ss = _sign_list; ss != endof(_sign_list); ss++) {
if (ss->str &&
@ -1535,7 +1535,7 @@ static bool CheckClickOnSign(ViewPort *vp, int x, int y)
}
} else if (vp->zoom == 1) {
x = (x - vp->left + 1) * 2 + vp->virtual_left;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
for(ss = _sign_list; ss != endof(_sign_list); ss++) {
if (ss->str &&
y >= ss->sign.top &&
@ -1548,7 +1548,7 @@ static bool CheckClickOnSign(ViewPort *vp, int x, int y)
}
} else {
x = (x - vp->left + 3) * 4 + vp->virtual_left;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
for(ss = _sign_list; ss != endof(_sign_list); ss++) {
if (ss->str &&
y >= ss->sign.top &&
@ -1573,7 +1573,7 @@ static bool CheckClickOnCheckpoint(ViewPort *vp, int x, int y)
if (vp->zoom < 1) {
x = x - vp->left + vp->virtual_left;
y = y - vp->top + vp->virtual_top;
y = y - vp->top + vp->virtual_top;
for(cp = _checkpoints; cp != endof(_checkpoints); cp++) {
if (cp->xy &&
@ -1587,7 +1587,7 @@ static bool CheckClickOnCheckpoint(ViewPort *vp, int x, int y)
}
} else if (vp->zoom == 1) {
x = (x - vp->left + 1) * 2 + vp->virtual_left;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
y = (y - vp->top + 1) * 2 + vp->virtual_top;
for(cp = _checkpoints; cp != endof(_checkpoints); cp++) {
if (cp->xy &&
y >= cp->sign.top &&
@ -1600,7 +1600,7 @@ static bool CheckClickOnCheckpoint(ViewPort *vp, int x, int y)
}
} else {
x = (x - vp->left + 3) * 4 + vp->virtual_left;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
y = (y - vp->top + 3) * 4 + vp->virtual_top;
for(cp = _checkpoints; cp != endof(_checkpoints); cp++) {
if (cp->xy &&
y >= cp->sign.top &&
@ -1691,7 +1691,7 @@ void PlaceObject()
Point pt;
Window *w;
WindowEvent e;
pt = GetTileBelowCursor();
if (pt.x == -1)
return;
@ -1808,7 +1808,7 @@ void UpdateTileSelection()
int y2 = thd->selstart.y;
x1 &= ~0xF;
y1 &= ~0xF;
if (x1 >= x2) intswap(x1,x2);
if (y1 >= y2) intswap(y1,y2);
thd->new_pos.x = x1;
@ -1834,10 +1834,10 @@ void UpdateTileSelection()
}
}
if (thd->drawstyle != thd->new_drawstyle ||
thd->pos.x != thd->new_pos.x || thd->pos.y != thd->new_pos.y ||
if (thd->drawstyle != thd->new_drawstyle ||
thd->pos.x != thd->new_pos.x || thd->pos.y != thd->new_pos.y ||
thd->size.x != thd->new_size.x || thd->size.y != thd->new_size.y) {
// clear the old selection?
if (thd->drawstyle) SetSelectionTilesDirty();
@ -1898,7 +1898,7 @@ static void CalcRaildirsDrawstyle(TileHighlightData *thd, int x, int y)
int d;
bool b;
uint w,h;
w = myabs((x & ~0xF) - thd->selstart.x) + 16;
h = myabs((y & ~0xF) - thd->selstart.y) + 16;
@ -2002,7 +2002,7 @@ bool VpHandlePlaceSizingDrag()
{
Window *w;
WindowEvent e;
if (_special_mouse_mode != WSM_SIZING)
return true;
@ -2024,9 +2024,9 @@ bool VpHandlePlaceSizingDrag()
// mouse button released..
// keep the selected tool, but reset it to the original mode.
_special_mouse_mode = WSM_NONE;
_special_mouse_mode = WSM_NONE;
_thd.place_mode = (_thd.next_drawstyle == HT_RECT || _thd.next_drawstyle & HT_LINE) ? 1 : 2;
SetTileSelectSize(1, 1);
// and call the mouseup event.
@ -2035,7 +2035,7 @@ bool VpHandlePlaceSizingDrag()
e.place.tile = TILE_FROM_XY(e.place.pt.x, e.place.pt.y);
e.place.starttile = TILE_FROM_XY(_thd.selstart.x, _thd.selstart.y);
w->wndproc(w, &e);
return false;
}
@ -2057,9 +2057,9 @@ void SetObjectToPlace(int icon, byte mode, byte window_class, uint16 window_num)
if (w != NULL)
CallWindowEventNP(w, WE_ABORT_PLACE_OBJ);
}
SetTileSelectSize(1, 1);
thd->make_square_red = false;
if (mode == 4) {
@ -2075,7 +2075,7 @@ void SetObjectToPlace(int icon, byte mode, byte window_class, uint16 window_num)
if (mode == 3)
VpStartPreSizing();
if ( (int)icon < 0)
SetAnimatedMouseCursor(_animcursors[~icon]);
else

View File

@ -8,12 +8,12 @@ struct ViewPort {
int virtual_left, virtual_top; // virtual coordinates
int virtual_width, virtual_height; // these are just width << zoom, height << zoom
byte zoom;
byte zoom;
};
/* viewport.c */
Point MapXYZToViewport(ViewPort *vp, uint x, uint y, uint z);
void AssignWindowViewport(Window *w, int x, int y,
void AssignWindowViewport(Window *w, int x, int y,
int width, int height, uint32 follow_flags, byte zoom);
void SetViewportPosition(Window *w, int x, int y);
ViewPort *IsPtInWindowViewport(Window *w, int x, int y);

View File

@ -65,7 +65,7 @@ IDirectMusicPerformance *performance = NULL;
IDirectMusicSegment *segment = NULL;
// the loader bject can load many types of DMusic related files
IDirectMusicLoader *loader = NULL;
IDirectMusicLoader *loader = NULL;
// whether we've initialized COM or not (when deciding whether to shut down)
int COMInitialized = 0;
@ -81,7 +81,7 @@ struct ProcPtrs {
};
#define M(x) x "\0"
static const char ole_files[] =
static const char ole_files[] =
M("ole32.dll")
M("CoCreateInstance")
M("CoInitialize")
@ -95,7 +95,7 @@ static ProcPtrs _proc;
static bool LoadOleDLL()
{
if (_proc.CoCreateInstance != NULL)
if (_proc.CoCreateInstance != NULL)
return true;
if (!LoadLibraryList((void**)&_proc, ole_files))
return false;
@ -151,7 +151,7 @@ bool InitDirectMusic (void)
// midi file for our demo. Again, we need to use CoCreateInstance
// and pass the appropriate ID parameters
if (FAILED(_proc.CoCreateInstance((REFCLSID)CLSID_DirectMusicLoader,
NULL, CLSCTX_INPROC,
NULL, CLSCTX_INPROC,
(REFIID)IID_IDirectMusicLoader,
(LPVOID *)&loader))) {
MSGBOX("Failed to create loader object");
@ -163,7 +163,7 @@ bool InitDirectMusic (void)
return true;
}
// Releases memory used by all of the initialized
// Releases memory used by all of the initialized
// DirectMusic objects in the program
void ReleaseSegment (void)
{
@ -174,8 +174,8 @@ void ReleaseSegment (void)
}
void ShutdownDirectMusic (void)
{
// release everything but the segment, which the performance
// will release automatically (and it'll crash if it's been
// release everything but the segment, which the performance
// will release automatically (and it'll crash if it's been
// released already)
if (NULL != loader) {
@ -196,7 +196,7 @@ void ShutdownDirectMusic (void)
}
}
// Load MIDI file for playing
// Load MIDI file for playing
bool LoadMIDI (char *directory, char *filename)
{
DMUS_OBJECTDESC obj_desc;
@ -229,8 +229,8 @@ bool LoadMIDI (char *directory, char *filename)
ReleaseSegment();
// and make a new segment
if (FAILED(loader->GetObject(&obj_desc,
(REFIID)IID_IDirectMusicSegment,
if (FAILED(loader->GetObject(&obj_desc,
(REFIID)IID_IDirectMusicSegment,
(LPVOID *) &segment))) {
MSGBOX("LoadMIDI: Get object failed");
return FALSE;

View File

@ -27,7 +27,7 @@ bool IsClearWaterTile(uint tile)
int32 CmdBuildShipDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
uint tile, tile2;
int32 cost, ret;
Depot *dep;
@ -49,7 +49,7 @@ int32 CmdBuildShipDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
ret = DoCommandByTile(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (ret == CMD_ERROR)
return CMD_ERROR;
// pretend that we're not making land from the water even though we actually are.
cost = 0;
@ -62,12 +62,12 @@ int32 CmdBuildShipDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_last_built_ship_depot_tile = tile;
dep->town_index = ClosestTownFromTile(tile, (uint)-1)->index;
ModifyTile(tile,
ModifyTile(tile,
MP_SETTYPE(MP_WATER) | MP_MAPOWNER_CURRENT | MP_MAP5 | MP_MAP2_CLEAR | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR,
(0x80 + p1*2)
);
ModifyTile(tile2,
ModifyTile(tile2,
MP_SETTYPE(MP_WATER) | MP_MAPOWNER_CURRENT | MP_MAP5 | MP_MAP2_CLEAR | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR,
(0x81 + p1*2)
);
@ -101,8 +101,8 @@ static int32 RemoveShipDepot(uint tile, uint32 flags)
// Kill the entry from the depot table
for(d=_depots; d->xy != tile; d++) {}
d->xy = 0;
DeleteWindowById(WC_VEHICLE_DEPOT, tile);
DeleteWindowById(WC_VEHICLE_DEPOT, tile);
}
return _price.remove_ship_depot;
@ -117,7 +117,7 @@ static int32 DoBuildShiplift(uint tile, int dir, uint32 flags)
// middle tile
ret = DoCommandByTile(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (ret == CMD_ERROR) return CMD_ERROR;
delta = _tileoffs_by_dir[dir];
// lower tile
ret = DoCommandByTile(tile - delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
@ -151,7 +151,7 @@ static int32 RemoveShiplift(uint tile, uint32 flags)
DoClearSquare(tile + delta);
DoClearSquare(tile - delta);
}
return _price.clear_water * 2;
}
@ -168,7 +168,7 @@ int32 CmdBuildLock(int x, int y, uint32 flags, uint32 p1, uint32 p2)
uint tile = TILE_FROM_XY(x,y);
int32 ret;
uint th;
th = GetTileSlope(tile, NULL);
th = GetTileSlope(tile, NULL);
if (th==3 || th==6 || th==9 || th==12) {
static const byte _shiplift_dirs[16] = {0,0,0,2,0,0,1,0,0,3,0,0,0};
@ -194,7 +194,7 @@ int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// move in which direction?
delta = (GET_TILE_X(tile) == GET_TILE_X(endtile)) ? TILE_XY(0,1) : TILE_XY(1,0);
if (endtile < tile) delta = -delta;
cost = 0;
for(;;) {
ret = 0;
@ -277,7 +277,7 @@ static int32 ClearTile_Water(uint tile, byte flags) {
DoClearSquare(tile);
return _price.clear_water;
}
if (flags & DC_EXEC)
if (flags & DC_EXEC)
DoClearSquare(tile);
return _price.purchase_land;
} else
@ -290,7 +290,7 @@ static int32 ClearTile_Water(uint tile, byte flags) {
TILE_XY(-1, 0),TILE_XY(0, 1),TILE_XY(1, 0),TILE_XY(0, -1), // lower
TILE_XY(1, 0),TILE_XY(0, -1),TILE_XY(-1, 0),TILE_XY(0, 1), // upper
};
if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
// don't allow water to delete it.
if (_current_player == OWNER_WATER) return CMD_ERROR;
@ -316,9 +316,9 @@ static bool IsWateredTile(uint tile)
{
byte m5 = _map5[tile];
if (IS_TILETYPE(tile, MP_WATER)) {
return m5 != 1;
return m5 != 1;
} else if (IS_TILETYPE(tile, MP_STATION)) {
// returns true if it is a dock-station (m5 inside values is m5<75 all stations,
// returns true if it is a dock-station (m5 inside values is m5<75 all stations,
// 83<=m5<=114 new airports
return !(m5 < 75 || (m5 >= 83 && m5 <= 114));
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
@ -331,13 +331,13 @@ static bool IsWateredTile(uint tile)
void DrawCanalWater(uint tile)
{
uint wa;
// determine the edges around with water.
wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0;
wa += IsWateredTile(TILE_ADDXY(tile, 0, 1)) << 1;
wa += IsWateredTile(TILE_ADDXY(tile, 1, 0)) << 2;
wa += IsWateredTile(TILE_ADDXY(tile, 0, -1)) << 3;
if (!(wa & 1)) DrawGroundSprite(SPR_CANALS_BASE + 57);
if (!(wa & 2)) DrawGroundSprite(SPR_CANALS_BASE + 58);
if (!(wa & 4)) DrawGroundSprite(SPR_CANALS_BASE + 59);
@ -383,9 +383,9 @@ static void DrawWaterStuff(TileInfo *ti, const byte *t, uint32 palette, uint bas
const WaterDrawTileStruct *wdts;
uint32 image;
DrawGroundSprite(*(uint16*)t);
DrawGroundSprite(*(uint16*)t);
t += sizeof(uint16);
for(wdts = (WaterDrawTileStruct *)t; (byte)wdts->delta_x != 0x80; wdts++) {
image = wdts->image + base;
if (_display_opt & DO_TRANS_BUILDINGS) {
@ -431,7 +431,7 @@ void DrawShipDepotSprite(int x, int y, int image)
t = _shipdepot_display_seq[image];
DrawSprite(*(uint16*)t, x, y);
t += sizeof(uint16);
for(wdts = (WaterDrawTileStruct *)t; (byte)wdts->delta_x != 0x80; wdts++) {
Point pt = RemapCoords(wdts->delta_x, wdts->delta_y, wdts->delta_z);
DrawSprite(wdts->image + PLAYER_SPRITE_COLOR(_local_player), x + pt.x, y + pt.y);
@ -440,12 +440,12 @@ void DrawShipDepotSprite(int x, int y, int image)
uint GetSlopeZ_Water(TileInfo *ti)
{
{
return GetPartialZ(ti->x&0xF, ti->y&0xF, ti->tileh) + ti->z;
}
uint GetSlopeTileh_Water(TileInfo *ti)
{
{
return ti->tileh;
}
@ -534,7 +534,7 @@ static void FloodVehicle(Vehicle *v)
_vehicle_sort_dirty[VEHROAD] = true;
InvalidateWindow(WC_ROADVEH_LIST, v->owner);
}
else if (v->type == VEH_Train) {
v = GetFirstVehicleInChain(v);
u = v;
@ -549,13 +549,13 @@ static void FloodVehicle(Vehicle *v)
v = u;
v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast
_vehicle_sort_dirty[VEHTRAIN] = true;
InvalidateWindow(WC_TRAINS_LIST, v->owner);
InvalidateWindow(WC_TRAINS_LIST, v->owner);
} else
return;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, 4);
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
SET_DPARAM16(0, pass);
AddNewsItem(STR_B006_FLOOD_VEHICLE_DESTROYED,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
@ -621,7 +621,7 @@ static uint32 GetTileTrackStatus_Water(uint tile, TransportType mode)
}
if ( (m5 & 0x10) == 0x10) {
//
//
b = _shiplift_tracks[m5 & 0xF];
return b + (b<<8);
}
@ -638,7 +638,7 @@ extern void ShowShipDepotWindow(uint tile);
static void ClickTile_Water(uint tile)
{
byte m5 = _map5[tile] - 0x80;
if (IS_BYTE_INSIDE(m5, 0, 3+1)) {
if (m5 & 1)
tile += (m5==1) ? TILE_XY(-1,0) : TILE_XY(0,-1);

View File

@ -11,7 +11,7 @@ static Point HandleScrollbarHittest(Scrollbar *sb, int top, int bottom)
top += 10;
bottom -= 9;
height = (bottom - top);
pos = sb->pos;
@ -19,7 +19,7 @@ static Point HandleScrollbarHittest(Scrollbar *sb, int top, int bottom)
cap = sb->cap;
if (count != 0) top += height * pos / count;
if (cap > count) cap = count;
if (count != 0)
bottom -= (count - pos - cap) * height / count;
@ -61,7 +61,7 @@ void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y)
pos = x;
sb = &w->hscroll;
}
if (pos <= mi+9) {
// Pressing the upper button?
if (!_demo_mode) {
@ -76,7 +76,7 @@ void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y)
// Pressing the lower button?
if (!_demo_mode) {
w->flags4 |= WF_SCROLL_DOWN;
if (_scroller_click_timeout == 0) {
_scroller_click_timeout = 6;
if ((byte)(sb->pos + sb->cap) < sb->count)
@ -85,14 +85,14 @@ void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y)
_left_button_clicked = false;
}
} else {
//
//
Point pt = HandleScrollbarHittest(sb, mi, ma);
if (pos < pt.x) {
sb->pos = max(sb->pos - sb->cap, 0);
} else if (pos > pt.y) {
sb->pos = min(
sb->pos + sb->cap,
sb->pos + sb->cap,
max(sb->count - sb->cap, 0)
);
} else {
@ -147,9 +147,9 @@ void DrawWindowWidgets(Window *w)
Rect r;
uint32 dparam_backup[10];
uint32 cur_click, cur_disabled, cur_hidden;
if (w->desc_flags & WDF_RESTORE_DPARAM) COPY_OUT_DPARAM(dparam_backup, 0, lengthof(dparam_backup));
wi = w->widget;
cur_click = w->click_state;
@ -190,7 +190,7 @@ void DrawWindowWidgets(Window *w)
StringID str = wi->unkA;
if ((wi->type&WWT_MASK) == WWT_4 && (cur_click&1)) str++;
DrawStringCentered((r.left + r.right+1)>>1, ((r.top+r.bottom + 1)>>1) - 5, str, 0);
goto restore_dparam;
}
@ -207,13 +207,13 @@ void DrawWindowWidgets(Window *w)
}
case WWT_MATRIX: {
int c, d, ctr;
int c, d, ctr;
int x, amt1, amt2;
int color;
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color,
(cur_click & 1) ? 0x20 : 0);
c = (wi->unkA&0xFF);
amt1 = (wi->right - wi->left + 1) / c;
@ -221,7 +221,7 @@ void DrawWindowWidgets(Window *w)
amt2 = (wi->bottom - wi->top + 1) / d;
color = _color_list[wi->color&0xF].window_color_bgb;
x = r.left;
for(ctr=c; --ctr; ) {
x += amt1;
@ -248,7 +248,7 @@ void DrawWindowWidgets(Window *w)
GfxFillRect(r.left+1, x, r.right-1, x, color);
}
goto draw_default;
goto draw_default;
}
// vertical scrollbar
@ -276,7 +276,7 @@ void DrawWindowWidgets(Window *w)
GfxFillRect(r.left+3, r.top+10, r.left+3, r.bottom-10, c2);
GfxFillRect(r.left+7, r.top+10, r.left+7, r.bottom-10, c1);
GfxFillRect(r.left+8, r.top+10, r.left+8, r.bottom-10, c2);
pt = HandleScrollbarHittest(&w->vscroll, r.top, r.bottom);
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == WF_SCROLL_MIDDLE ? 0x20 : 0);
break;
@ -350,7 +350,7 @@ void DrawWindowWidgets(Window *w)
case WWT_CAPTION: {
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, 0x10);
DrawFrameRect(r.left+1, r.top+1, r.right-1, r.bottom-1, wi->color, (w->caption_color == 0xFF) ? 0x60 : 0x70);
if (w->caption_color != 0xFF) {
GfxFillRect(r.left+2, r.top+2, r.right-2, r.bottom-2, _color_list[_player_colors[w->caption_color]].window_color_1b);
}
@ -365,7 +365,7 @@ draw_default:;
}
}
} while (cur_click>>=1, cur_disabled>>=1, cur_hidden >>= 1, (++wi)->type != WWT_LAST);
if (w->flags4 & WF_WHITE_BORDER_MASK) {
//DrawFrameRect(w->left, w->top, w->left + w->width-1, w->top+w->height-1, 0xF, 0x10);
@ -396,7 +396,7 @@ static int GetDropdownItem(Window *w)
if (GetWidgetFromPos(w, _cursor.pos.x - w->left, _cursor.pos.y - w->top) < 0)
return -1;
y = _cursor.pos.y - w->top - 2;
if (y < 0)
@ -433,7 +433,7 @@ void DropdownMenuWndProc(Window *w, WindowEvent *e)
DrawString(x+2, y, _dropdown_items[i], sel==0 ? 12 : 16);
if (dis & 1) {
GfxFillRect(x, y, x+w->width-3, y + 9, 0x8000 +
GfxFillRect(x, y, x+w->width-3, y + 9, 0x8000 +
_color_list[_dropdown_menu_widgets[0].color].window_color_bga);
}
} else {
@ -491,7 +491,7 @@ void DropdownMenuWndProc(Window *w, WindowEvent *e)
SetWindowDirty(w);
}
} break;
case WE_DESTROY: {
Window *w2 = FindWindowById(_dropdown_windowclass, _dropdown_windownum);
if (w2 != NULL) {
@ -510,7 +510,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
const Widget *wi;
Window *w2;
uint32 old_click_state = w->click_state;
_dropdown_disabled = disabled_mask;
cls = w->window_class;
@ -524,7 +524,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
SETBIT(w->click_state, button);
InvalidateWidget(w, button);
for(i=0;strings[i] != INVALID_STRING_ID;i++);
if (i == 0)
return;
@ -532,11 +532,11 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
_dropdown_items = strings;
_dropdown_item_count = i;
_dropdown_selindex = selected;
_dropdown_windowclass = w->window_class;
_dropdown_windownum = w->window_number;
_dropdown_button = button;
_dropdown_var1 = 0;
_dropdown_var2 = 1;
@ -547,8 +547,8 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
w2 = AllocateWindow(
w->left + wi[-1].left + 1,
w->top + wi->bottom + 2,
(_dropdown_menu_widgets[0].right=t1=wi->right - wi[-1].left, t1 + 1),
(_dropdown_menu_widgets[0].bottom=t2=i*10+3, t2+1),
(_dropdown_menu_widgets[0].right=t1=wi->right - wi[-1].left, t1 + 1),
(_dropdown_menu_widgets[0].bottom=t2=i*10+3, t2+1),
DropdownMenuWndProc,
0x3F,
_dropdown_menu_widgets);

142
win32.c
View File

@ -51,7 +51,7 @@ static void MakePalette()
pal->palVersion = 0x300;
pal->palNumEntries = 256;
for(i=0,b=_cur_palette; i!=256;i++,b+=3) {
pal->palPalEntry[i].peRed = b[0];
pal->palPalEntry[i].peGreen = b[1];
@ -60,7 +60,7 @@ static void MakePalette()
}
_wnd.gdi_palette = CreatePalette(pal);
if (_wnd.gdi_palette == NULL)
if (_wnd.gdi_palette == NULL)
error("CreatePalette failed!\n");
}
@ -133,7 +133,7 @@ static const VkMapping _vk_mapping[] = {
AS(VK_SUBTRACT, WKC_NUM_MINUS),
AS(VK_ADD, WKC_NUM_PLUS),
AS(VK_DECIMAL, WKC_NUM_DECIMAL),
{0}
{0}
};
static uint MapWindowsKey(uint key)
@ -162,14 +162,14 @@ static bool AllocateDibSection(int w, int h);
static void ClientSizeChanged(int w, int h)
{
if (_wnd.double_size) { w >>= 1; h >>= 1; }
// allocate new dib section of the new size
if (AllocateDibSection(w, h)) {
// mark all palette colors dirty
_pal_first_dirty = 0;
_pal_last_dirty = 255;
GameSizeChanged();
// redraw screen
if (_wnd.running) {
_screen.dst_ptr = _wnd.buffer_bits;
@ -191,12 +191,12 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
dc2 = CreateCompatibleDC(dc);
old_bmp = SelectObject(dc2, _wnd.dib_sect);
old_palette = SelectPalette(dc, _wnd.gdi_palette, FALSE);
if (_pal_last_dirty != -1) {
UpdatePalette(dc2, _pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
_pal_last_dirty = -1;
}
BitBlt(dc, 0, 0, _wnd.width, _wnd.height, dc2, 0, 0, SRCCOPY);
SelectPalette(dc, old_palette, TRUE);
SelectObject(dc2, old_bmp);
@ -219,7 +219,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
InvalidateRect(hwnd, NULL, FALSE);
return 0;
}
case WM_CLOSE:
AskExitGame();
return 0;
@ -255,7 +255,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
x >>= 1;
y >>= 1;
}
if (_cursor.fix_at) {
int dx = x - _cursor.pos.x;
int dy = y - _cursor.pos.y;
@ -285,7 +285,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
}
case WM_KEYDOWN:
{
{
// this is the rewritten ascii input function
// it disables windows deadkey handling --> more linux like :D
unsigned short w = 0;
@ -304,7 +304,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
ClientSizeChanged(_wnd.width, _wnd.height);
MarkWholeScreenDirty();
}
break;
break;
case WM_SYSKEYDOWN:
@ -334,7 +334,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
SetRect(&r2, 0, 0, 0, 0);
AdjustWindowRect(&r2, GetWindowLong(hwnd, GWL_STYLE), FALSE);
w = r->right - r->left - (r2.right - r2.left);
h = r->bottom - r->top - (r2.bottom - r2.top);
if (_wnd.double_size) { w >>= 1; h >>= 1; }
@ -389,7 +389,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
#endif //GET_WHEEL_DELTA_WPARAM
case WM_MOUSEWHEEL: {
int delta = GET_WHEEL_DELTA_WPARAM(wParam);
int delta = GET_WHEEL_DELTA_WPARAM(wParam);
if (delta < 0) {
_cursor.wheel++;
} else if (delta > 0) {
@ -433,13 +433,13 @@ static void MakeWindow(bool full_screen)
_fullscreen = full_screen;
_wnd.double_size = _double_size && !full_screen;
// recreate window?
if ((full_screen|_wnd.fullscreen) && _wnd.main_wnd) {
DestroyWindow(_wnd.main_wnd);
_wnd.main_wnd = 0;
}
if (full_screen) {
DEVMODE settings;
memset(&settings, 0, sizeof(DEVMODE));
@ -467,7 +467,7 @@ static void MakeWindow(bool full_screen)
RECT r;
uint style;
int x, y, w, h;
if ((_wnd.fullscreen=full_screen) != false) {
style = WS_POPUP | WS_VISIBLE;
SetRect(&r, 0, 0, _wnd.width_org, _wnd.height_org);
@ -510,11 +510,11 @@ static bool AllocateDibSection(int w, int h)
free(_wnd.alloced_bits);
_wnd.alloced_bits = NULL;
}
bi = alloca(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
memset(bi, 0, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
{
if (_wnd.double_size) {
_wnd.alloced_bits = _wnd.buffer_bits = (byte*)malloc(w * h);
@ -525,7 +525,7 @@ static bool AllocateDibSection(int w, int h)
bi->bmiHeader.biWidth = _wnd.width = w;
bi->bmiHeader.biHeight = -(_wnd.height = h);
}
bi->bmiHeader.biPlanes = 1;
bi->bmiHeader.biBitCount = 8;
bi->bmiHeader.biCompression = BI_RGB;
@ -539,7 +539,7 @@ static bool AllocateDibSection(int w, int h)
error("CreateDIBSection failed");
ReleaseDC(0, dc);
if (!_wnd.double_size)
if (!_wnd.double_size)
_wnd.buffer_bits = _wnd.bitmap_bits;
return true;
@ -562,7 +562,7 @@ static void FindResolutions()
DEVMODE dm;
while (EnumDisplaySettings(NULL, i++, &dm)) {
if (dm.dmBitsPerPel == 8 &&
if (dm.dmBitsPerPel == 8 &&
IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH+1) &&
IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT+1) &&
(n == 0 || _resolutions[n-1][0] != dm.dmPelsWidth || _resolutions[n-1][1] != dm.dmPelsHeight)) {
@ -625,7 +625,7 @@ static void filter(int left, int top, int width, int height)
while (height) {
for(i=0; i!=width; i++) {
d[i*2] = d[i*2+1] = d[i*2+p*2] = d[i*2+1+p*2] = s[i];
d[i*2] = d[i*2+1] = d[i*2+p*2] = d[i*2+1+p*2] = s[i];
}
s += p;
d += p * 4;
@ -676,7 +676,7 @@ static int Win32GdiMainLoop()
} else if (_fast_forward&2) {
_fast_forward = 0;
}
cur_ticks=GetTickCount();
if ((_fast_forward && !_pause) || cur_ticks > next_tick)
@ -687,15 +687,15 @@ static int Win32GdiMainLoop()
_ctrl_pressed = _wnd.has_focus && GetAsyncKeyState(VK_CONTROL)<0;
_shift_pressed = _wnd.has_focus && GetAsyncKeyState(VK_SHIFT)<0;
_dbg_screen_rect = _wnd.has_focus && GetAsyncKeyState(VK_CAPITAL)<0;
// determine which directional keys are down
_dirkeys =
(GetAsyncKeyState(VK_LEFT) < 0 ? 1 : 0) +
(GetAsyncKeyState(VK_UP) < 0 ? 2 : 0) +
(GetAsyncKeyState(VK_RIGHT) < 0 ? 4 : 0) +
_dirkeys =
(GetAsyncKeyState(VK_LEFT) < 0 ? 1 : 0) +
(GetAsyncKeyState(VK_UP) < 0 ? 2 : 0) +
(GetAsyncKeyState(VK_RIGHT) < 0 ? 4 : 0) +
(GetAsyncKeyState(VK_DOWN) < 0 ? 8 : 0);
GameLoop();
GameLoop();
_cursor.delta.x = _cursor.delta.y = 0;
if (_force_full_redraw)
@ -718,9 +718,9 @@ static bool Win32GdiChangeRes(int w, int h)
{
_wnd.width = _wnd.width_org = w;
_wnd.height = _wnd.height_org = h;
MakeWindow(_wnd.fullscreen);
return true;
}
@ -823,15 +823,15 @@ static DWORD WINAPI MidiThread(LPVOID arg)
if ((vol=_midi.new_vol) != -1) {
_midi.new_vol = -1;
MidiIntSetVolume(vol);
}
if ((s=_midi.start_song)[0]) {
_midi.playing = MidiIntPlaySong(s);
s[0] = 0;
// Delay somewhat in case we don't manage to play.
if (!_midi.playing) {
Sleep(5000);
Sleep(5000);
}
}
if (_midi.stop_song != false && _midi.playing) {
@ -893,7 +893,7 @@ static void FillHeaders()
WAVEHDR *hdr;
for(hdr=_wave_hdr; hdr != endof(_wave_hdr); hdr++) {
if (!(hdr->dwFlags & WHDR_INQUEUE)) {
MxMixSamples(_mixer, hdr->lpData, hdr->dwBufferLength >> 2);
MxMixSamples(_mixer, hdr->lpData, hdr->dwBufferLength >> 2);
if (waveOutWrite(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
error("waveOutWrite failed");
}
@ -914,7 +914,7 @@ static char *Win32SoundStart(char **parm)
{
WAVEFORMATEX wfex;
int hz;
_bufsize = GetDriverParamInt(parm, "bufsize", 1024);
hz = GetDriverParamInt(parm, "hz", 11025);
wfex.wFormatTag = WAVE_FORMAT_PCM;
@ -1007,7 +1007,7 @@ static uint32 *_crc_table;
static void MakeCRCTable(uint32 *table) {
uint32 crc, poly = 0xEDB88320L;
int i, j;
_crc_table = table;
for (i=0; i!=256; i++) {
@ -1051,7 +1051,7 @@ static void GetFileInfo(DebugFileInfo *dfi, const char *filename)
}
dfi->size = filesize;
dfi->crc32 = crc ^ (uint32)-1;
if (GetFileTime(file, NULL, NULL, &write_time)) {
FileTimeToSystemTime(&write_time, &dfi->file_time);
}
@ -1108,14 +1108,14 @@ static char *PrintModuleList(char *output)
return output;
}
static const char _crash_desc[] =
static const char _crash_desc[] =
"A serious fault condition occured in the game. The game will shut down.\n"
"Press \"Submit report\" to send crash information to the developers. "
"This will greatly help debugging. The information contained in the report is "
"displayed below.\n"
"Press \"Emergency save\" to attempt saving the game.";
static const char _save_succeeded[] =
static const char _save_succeeded[] =
"Emergency save succeeded.\nBe aware that critical parts of the internal game state "
"may have become corrupted. The saved game is not guaranteed to work.";
@ -1132,7 +1132,7 @@ typedef struct {
} WinInetProcs;
#define M(x) x "\0"
static const char wininet_files[] =
static const char wininet_files[] =
M("wininet.dll")
M("InternetOpenA")
M("InternetConnectA")
@ -1153,7 +1153,7 @@ static char *SubmitCrashReport(HWND wnd, void *msg, size_t msglen, const char *a
DWORD code, len;
static char buf[100];
char buff[100];
if (_wininet.InternetOpen == NULL && !LoadLibraryList((void**)&_wininet, wininet_files)) return "can't load wininet.dll";
inet = _wininet.InternetOpen("TTD", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );
@ -1171,7 +1171,7 @@ static char *SubmitCrashReport(HWND wnd, void *msg, size_t msglen, const char *a
len = sizeof(code);
if (!_wininet.HttpQueryInfo(http, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &code, &len, 0)) { err = "httpqueryinfo failed"; goto error4; }
if (code != 200) {
int l = sprintf(buf, "Server said: %d ", code);
len = sizeof(buf) - l;
@ -1201,13 +1201,13 @@ static void SubmitFile(HWND wnd, const char *file)
size = GetFileSize(h, NULL);
if (size > 500000) goto error1;
mem = malloc(size);
if (mem == NULL) goto error1;
if (!ReadFile(h, mem, size, &read, NULL) || read != size) goto error2;
SubmitCrashReport(wnd, mem, size, file);
SubmitCrashReport(wnd, mem, size, file);
error2:
free(mem);
@ -1223,16 +1223,16 @@ static void SetWndSize(HWND wnd, int mode)
int offs;
GetWindowRect(wnd, &r);
SetDlgItemText(wnd, 15, _expand_texts[mode == 1]);
if (mode >= 0) {
GetWindowRect(GetDlgItem(wnd, 11), &r2);
offs = r2.bottom - r2.top + 10;
if (!mode) offs=-offs;
SetWindowPos(wnd, HWND_TOPMOST, 0, 0, r.right - r.left, r.bottom - r.top + offs, SWP_NOMOVE | SWP_NOZORDER);
} else {
SetWindowPos(wnd, HWND_TOPMOST,
SetWindowPos(wnd, HWND_TOPMOST,
(GetSystemMetrics(SM_CXSCREEN) - (r.right - r.left)) >> 1,
(GetSystemMetrics(SM_CYSCREEN) - (r.bottom - r.top)) >> 1,
0, 0, SWP_NOSIZE);
@ -1273,7 +1273,7 @@ static BOOL CALLBACK CrashDialogFunc(HWND wnd,UINT msg,WPARAM wParam,LPARAM lPar
}
case 14: { // Submit crash report
char *s;
SetCursor(LoadCursor(NULL, IDC_WAIT));
s = SubmitCrashReport(wnd, _crash_msg, strlen(_crash_msg), "");
@ -1281,7 +1281,7 @@ static BOOL CALLBACK CrashDialogFunc(HWND wnd,UINT msg,WPARAM wParam,LPARAM lPar
MessageBoxA(wnd, s, "Error", MB_ICONSTOP);
break;
}
// try to submit emergency savegame
if (_did_emerg_save || DoEmergencySave(wnd)) {
SubmitFile(wnd, "crash.sav");
@ -1324,7 +1324,7 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
if (had_exception) { ExitProcess(0); }
had_exception = true;
_ident = GetTickCount(); // something pretty unique
MakeCRCTable(alloca(256 * sizeof(uint32)));
@ -1333,7 +1333,7 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
{
SYSTEMTIME time;
GetLocalTime(&time);
output += sprintf(output,
output += sprintf(output,
"*** OpenTTD Crash Report ***\r\n"
"Date: %d-%.2d-%.2d %.2d:%.2d:%.2d\r\n"
"Build: %s built on " __TIMESTAMP__ "\r\n",
@ -1436,7 +1436,7 @@ static void Win32InitializeExceptions()
_asm {
mov _safe_esp,esp
}
SetUnhandledExceptionFilter(ExceptionHandler);
}
#endif
@ -1459,7 +1459,7 @@ static FiosItem *FiosAlloc()
static HANDLE MyFindFirstFile(char *path, char *file, WIN32_FIND_DATA *fd)
{
char paths[MAX_PATH];
sprintf(paths, "%s\\%s", path, file);
return FindFirstFile(paths, fd);
}
@ -1471,7 +1471,7 @@ int CDECL compare_FiosItems (const void *a, const void *b) {
if (_savegame_sort_order < 2) // sort by date
r = da->mtime < db->mtime ? -1 : 1;
else
else
r = stricmp(da->title[0] ? da->title : da->name, db->title[0] ? db->title : db->name);
if (_savegame_sort_order & 1) r = -r;
@ -1503,7 +1503,7 @@ FiosItem *FiosGetSavegameList(int *num, int mode)
fios->type = FIOS_TYPE_PARENT;
strcpy(fios->title, ".. (Parent directory)");
}
// Show subdirectories first
h = MyFindFirstFile(_fios_path, "*.*", &fd);
@ -1695,7 +1695,7 @@ char *FiosBrowseTo(const FiosItem *item)
case FIOS_TYPE_DRIVE:
sprintf(path, "%c:\\", item->title[0]);
break;
case FIOS_TYPE_PARENT:
// Skip drive part
path += 3;
@ -1713,7 +1713,7 @@ char *FiosBrowseTo(const FiosItem *item)
while (*++path);
// Add backslash?
if (path[-1] != '\\') *path++ = '\\';
strcpy(path, item->name);
break;
@ -1752,7 +1752,7 @@ StringID FiosGetDescText(char **path)
if (GetDiskFreeSpace(root, &spc, &bps, &nfc, &tnc)) {
uint32 tot = ((spc*bps)*(uint64)nfc) >> 20;
SET_DPARAM32(0, tot);
return STR_4005_BYTES_FREE;
return STR_4005_BYTES_FREE;
} else {
return STR_4006_UNABLE_TO_READ_DRIVE;
}
@ -1848,7 +1848,7 @@ static int ParseCommandLine(char *line, char **argv, int max_argc)
// end?
if (*line == 0)
break;
// special handling when quoted
if (*line == '"') {
argv[n++] = ++line;
@ -1863,7 +1863,7 @@ static int ParseCommandLine(char *line, char **argv, int max_argc)
line++;
}
}
*line++ = 0;
*line++ = 0;
} while (n != max_argc);
return n;
@ -1890,12 +1890,12 @@ void CreateConsole()
_has_console = true;
AllocConsole();
hand = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hand, &coninfo);
coninfo.dwSize.Y = 500;
SetConsoleScreenBufferSize(hand, coninfo.dwSize);
// redirect unbuffered STDIN, STDOUT, STDERR to the console
#if !defined(__CYGWIN__)
*stdout = *_fdopen( _open_osfhandle((long)hand, _O_TEXT), "w" );
@ -1905,11 +1905,11 @@ void CreateConsole()
// open_osfhandle is not in cygwin
*stdout = *fdopen(1, "w" );
*stdin = *fdopen(0, "w" );
*stderr = *fdopen(2, "w" );
*stderr = *fdopen(2, "w" );
#endif
setvbuf( stdin, NULL, _IONBF, 0 );
setvbuf( stdout, NULL, _IONBF, 0 );
setvbuf( stdin, NULL, _IONBF, 0 );
setvbuf( stdout, NULL, _IONBF, 0 );
setvbuf( stderr, NULL, _IONBF, 0 );
}
@ -1919,10 +1919,10 @@ void ShowInfo(const char *str)
puts(str);
else {
bool old;
ReleaseCapture();
_left_button_clicked =_left_button_down = false;
old = MyShowCursor(true);
if (MessageBoxA(GetActiveWindow(), str, "OpenTTD", MB_ICONINFORMATION | MB_OKCANCEL) == IDCANCEL) {
CreateConsole();
@ -1960,7 +1960,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLin
argc = ParseCommandLine(GetCommandLine(), argv, lengthof(argv));
#if defined(WIN32_EXCEPTION_TRACKER)
{
{
Win32InitializeExceptions();
}
#endif
@ -1985,7 +1985,7 @@ void DeterminePaths()
_path.personal_dir = _path.game_data_dir = cfg = malloc(MAX_PATH);
GetCurrentDirectory(MAX_PATH - 1, cfg);
s = strchr(cfg, 0);
if (s[-1] != '\\') { s[0] = '\\'; s[1] = 0; }

View File

@ -1021,7 +1021,7 @@ void MouseLoop()
return;
// only allow zooming in-out in main window, or in viewports
if ( mousewheel && !(w->flags4 & WF_DISABLE_VP_SCROLL) &&
if ( mousewheel && !(w->flags4 & WF_DISABLE_VP_SCROLL) &&
(w->window_class == WC_MAIN_WINDOW || w->window_class == WC_EXTRA_VIEW_PORT) ) {
ZoomInOrOutToCursorWindow(mousewheel < 0,w);
}