mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
This commit is contained in:
parent
f12d1a3f0a
commit
dfe5533db6
|
@ -81,7 +81,7 @@ extern const Trackdir _track_exitdir_to_trackdir[][DIAGDIR_END] = {
|
|||
{TRACKDIR_RIGHT_N, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR}
|
||||
};
|
||||
|
||||
extern const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END] = { // TODO: replace magic with enums
|
||||
extern const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END] = {
|
||||
{TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR},
|
||||
{INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW},
|
||||
{INVALID_TRACKDIR, TRACKDIR_UPPER_E, TRACKDIR_UPPER_W, INVALID_TRACKDIR},
|
||||
|
|
|
@ -223,7 +223,7 @@ struct RailtypeInfo {
|
|||
* 1) All the sprites in a railset MUST be in the same order. This order
|
||||
* is determined by normal rail. Check sprites 1005 and following for this order<p>
|
||||
* 2) The position where the railtype is loaded must always be the same, otherwise
|
||||
* the offset will fail.<p>
|
||||
* the offset will fail.
|
||||
* @note: Something more flexible might be desirable in the future.
|
||||
*/
|
||||
SpriteID total_offset;
|
||||
|
@ -240,10 +240,10 @@ struct RailtypeInfo {
|
|||
};
|
||||
|
||||
|
||||
// these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block
|
||||
/** these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block */
|
||||
enum {
|
||||
NUM_SSD_ENTRY = 256, // max amount of blocks
|
||||
NUM_SSD_STACK = 32, // max amount of blocks to check recursively
|
||||
NUM_SSD_ENTRY = 256, ///< max amount of blocks
|
||||
NUM_SSD_STACK = 32, ///< max amount of blocks to check recursively
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
136
src/rail_cmd.cpp
136
src/rail_cmd.cpp
|
@ -79,8 +79,8 @@ const byte _track_sloped_sprites[14] = {
|
|||
|
||||
static bool CheckTrackCombination(TileIndex tile, TrackBits to_build, uint flags)
|
||||
{
|
||||
TrackBits current; /* The current track layout */
|
||||
TrackBits future; /* The track layout we want to build */
|
||||
TrackBits current; // The current track layout
|
||||
TrackBits future; // The track layout we want to build
|
||||
_error_message = STR_1001_IMPOSSIBLE_TRACK_COMBINATION;
|
||||
|
||||
if (!IsPlainRailTile(tile)) return false;
|
||||
|
@ -111,7 +111,7 @@ static bool CheckTrackCombination(TileIndex tile, TrackBits to_build, uint flags
|
|||
|
||||
static const TrackBits _valid_tileh_slopes[][15] = {
|
||||
|
||||
// set of normal ones
|
||||
/* set of normal ones */
|
||||
{
|
||||
TRACK_BIT_ALL,
|
||||
TRACK_BIT_RIGHT,
|
||||
|
@ -133,7 +133,7 @@ static const TrackBits _valid_tileh_slopes[][15] = {
|
|||
TRACK_BIT_RIGHT,
|
||||
},
|
||||
|
||||
// allowed rail for an evenly raised platform
|
||||
/* allowed rail for an evenly raised platform */
|
||||
{
|
||||
TRACK_BIT_NONE,
|
||||
TRACK_BIT_LEFT,
|
||||
|
@ -199,13 +199,13 @@ static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existin
|
|||
} else {
|
||||
rail_bits |= existing;
|
||||
|
||||
// don't allow building on the lower side of a coast
|
||||
/* don't allow building on the lower side of a coast */
|
||||
if (IsTileType(tile, MP_WATER) &&
|
||||
~_valid_tileh_slopes[1][tileh] & rail_bits) {
|
||||
return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
|
||||
}
|
||||
|
||||
// no special foundation
|
||||
/* no special foundation */
|
||||
if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0)
|
||||
return 0;
|
||||
|
||||
|
@ -259,7 +259,7 @@ int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
}
|
||||
if (!IsTileOwner(tile, _current_player) ||
|
||||
!IsCompatibleRail(GetRailType(tile), railtype)) {
|
||||
// Get detailed error message
|
||||
/* Get detailed error message */
|
||||
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
|
||||
}
|
||||
|
||||
|
@ -434,11 +434,11 @@ static int32 ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end
|
|||
|
||||
if (!ValParamTrackOrientation(TrackdirToTrack(*trackdir))) return CMD_ERROR;
|
||||
|
||||
// calculate delta x,y from start to end tile
|
||||
/* calculate delta x,y from start to end tile */
|
||||
dx = ex - x;
|
||||
dy = ey - y;
|
||||
|
||||
// calculate delta x,y for the first direction
|
||||
/* calculate delta x,y for the first direction */
|
||||
trdx = _trackdelta[*trackdir].x;
|
||||
trdy = _trackdelta[*trackdir].y;
|
||||
|
||||
|
@ -447,7 +447,7 @@ static int32 ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end
|
|||
trdy += _trackdelta[*trackdir ^ 1].y;
|
||||
}
|
||||
|
||||
// validate the direction
|
||||
/* validate the direction */
|
||||
while (
|
||||
(trdx <= 0 && dx > 0) ||
|
||||
(trdx >= 0 && dx < 0) ||
|
||||
|
@ -463,8 +463,8 @@ static int32 ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end
|
|||
}
|
||||
}
|
||||
|
||||
// (for diagonal tracks, this is already made sure of by above test), but:
|
||||
// for non-diagonal tracks, check if the start and end tile are on 1 line
|
||||
/* (for diagonal tracks, this is already made sure of by above test), but:
|
||||
* for non-diagonal tracks, check if the start and end tile are on 1 line */
|
||||
if (!IsDiagonalTrackdir(*trackdir)) {
|
||||
trdx = _trackdelta[*trackdir].x;
|
||||
trdy = _trackdelta[*trackdir].y;
|
||||
|
@ -517,7 +517,7 @@ static int32 CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32
|
|||
|
||||
tile += ToTileIndexDiff(_trackdelta[trackdir]);
|
||||
|
||||
// toggle railbit for the non-diagonal tracks
|
||||
/* toggle railbit for the non-diagonal tracks */
|
||||
if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
|
||||
}
|
||||
|
||||
|
@ -649,11 +649,11 @@ int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
|
||||
|
||||
if (!HasSignalOnTrack(tile, track)) {
|
||||
// build new signals
|
||||
/* build new signals */
|
||||
cost = _price.build_signals;
|
||||
} else {
|
||||
if (p2 != 0 && sigvar != GetSignalVariant(tile)) {
|
||||
// convert signals <-> semaphores
|
||||
/* convert signals <-> semaphores */
|
||||
cost = _price.build_signals + _price.remove_signals;
|
||||
} else {
|
||||
// it is free to change orientation/pre-exit-combo signals
|
||||
|
@ -663,21 +663,21 @@ int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
if (flags & DC_EXEC) {
|
||||
if (!HasSignals(tile)) {
|
||||
// there are no signals at all on this tile yet
|
||||
/* there are no signals at all on this tile yet */
|
||||
SetHasSignals(tile, true);
|
||||
_m[tile].m2 |= 0xF0; // all signals are on
|
||||
_m[tile].m3 &= ~0xF0; // no signals built by default
|
||||
_m[tile].m3 &= ~0xF0; // no signals built by default
|
||||
SetSignalType(tile, SIGTYPE_NORMAL);
|
||||
SetSignalVariant(tile, sigvar);
|
||||
}
|
||||
|
||||
if (p2 == 0) {
|
||||
if (!HasSignalOnTrack(tile, track)) {
|
||||
// build new signals
|
||||
/* build new signals */
|
||||
_m[tile].m3 |= SignalOnTrack(track);
|
||||
} else {
|
||||
if (pre_signal) {
|
||||
// cycle between normal -> pre -> exit -> combo -> ...
|
||||
/* cycle between normal -> pre -> exit -> combo -> ... */
|
||||
SignalType type = GetSignalType(tile);
|
||||
|
||||
SetSignalType(tile, type == SIGTYPE_COMBO ? SIGTYPE_NORMAL : (SignalType)(type + 1));
|
||||
|
@ -746,7 +746,7 @@ static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint3
|
|||
signals = _m[tile].m3 & SignalOnTrack(track);
|
||||
if (signals == 0) signals = SignalOnTrack(track); /* Can this actually occur? */
|
||||
|
||||
// copy signal/semaphores style (independent of CTRL)
|
||||
/* copy signal/semaphores style (independent of CTRL) */
|
||||
semaphores = GetSignalVariant(tile) != SIG_ELECTRIC;
|
||||
} else { // no signals exist, drag a two-way signal stretch
|
||||
signals = SignalOnTrack(track);
|
||||
|
@ -762,7 +762,7 @@ static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint3
|
|||
* remove - 1 remove signals, 0 build signals */
|
||||
signal_ctr = total_cost = 0;
|
||||
for (;;) {
|
||||
// only build/remove signals with the specified density
|
||||
/* only build/remove signals with the specified density */
|
||||
if (signal_ctr % signal_density == 0) {
|
||||
uint32 p1 = GB(TrackdirToTrack(trackdir), 0, 3);
|
||||
SB(p1, 3, 1, mode);
|
||||
|
@ -781,7 +781,7 @@ static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint3
|
|||
tile += ToTileIndexDiff(_trackdelta[trackdir]);
|
||||
signal_ctr++;
|
||||
|
||||
// toggle railbit for the non-diagonal tracks (|, -- tracks)
|
||||
/* toggle railbit for the non-diagonal tracks (|, -- tracks) */
|
||||
if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
|
||||
}
|
||||
|
||||
|
@ -869,15 +869,15 @@ static int32 DoConvertRail(TileIndex tile, RailType totype, bool exec)
|
|||
|
||||
if (!EnsureNoVehicleOnGround(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
|
||||
|
||||
// 'hidden' elrails can't be downgraded to normal rail when elrails are disabled
|
||||
/* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
|
||||
if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
|
||||
|
||||
// change type.
|
||||
/* change type. */
|
||||
if (exec) {
|
||||
SetRailType(tile, totype);
|
||||
MarkTileDirtyByTile(tile);
|
||||
|
||||
// notify YAPF about the track layout change
|
||||
/* notify YAPF about the track layout change */
|
||||
TrackBits tracks = GetTrackBits(tile);
|
||||
while (tracks != TRACK_BIT_NONE) {
|
||||
YapfNotifyTrackLayoutChange(tile, RemoveFirstTrack(&tracks));
|
||||
|
@ -923,7 +923,7 @@ int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
if (!ValParamRailtype(p2)) return CMD_ERROR;
|
||||
if (p1 >= MapSize()) return CMD_ERROR;
|
||||
|
||||
// make sure sx,sy are smaller than ex,ey
|
||||
/* make sure sx,sy are smaller than ex,ey */
|
||||
ex = TileX(tile);
|
||||
ey = TileY(tile);
|
||||
sx = TileX(p1);
|
||||
|
@ -1188,7 +1188,7 @@ static void DrawTrackBits(TileInfo* ti, TrackBits track)
|
|||
SpriteID pal = PAL_NONE;
|
||||
bool junction = false;
|
||||
|
||||
// Select the sprite to use.
|
||||
/* Select the sprite to use. */
|
||||
(image = rti->base_sprites.track_y, track == TRACK_BIT_Y) ||
|
||||
(image++, track == TRACK_BIT_X) ||
|
||||
(image++, track == TRACK_BIT_UPPER) ||
|
||||
|
@ -1212,8 +1212,8 @@ static void DrawTrackBits(TileInfo* ti, TrackBits track)
|
|||
|
||||
if (foundation != 0) DrawFoundation(ti, foundation);
|
||||
|
||||
// DrawFoundation() modifies ti.
|
||||
// Default sloped sprites..
|
||||
/* DrawFoundation() modifies it.
|
||||
* Default sloped sprites.. */
|
||||
if (ti->tileh != SLOPE_FLAT)
|
||||
image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y;
|
||||
}
|
||||
|
@ -1226,7 +1226,7 @@ static void DrawTrackBits(TileInfo* ti, TrackBits track)
|
|||
|
||||
DrawGroundSprite(image, pal);
|
||||
|
||||
// Draw track pieces individually for junction tiles
|
||||
/* Draw track pieces individually for junction tiles */
|
||||
if (junction) {
|
||||
if (track & TRACK_BIT_X) DrawGroundSprite(rti->base_sprites.single_y, PAL_NONE);
|
||||
if (track & TRACK_BIT_Y) DrawGroundSprite(rti->base_sprites.single_x, PAL_NONE);
|
||||
|
@ -1288,7 +1288,7 @@ static void DrawTile_Track(TileInfo *ti)
|
|||
|
||||
if (HasSignals(ti->tile)) DrawSignals(ti->tile, rails);
|
||||
} else {
|
||||
// draw depot/waypoint
|
||||
/* draw depot/waypoint */
|
||||
const DrawTileSprites* dts;
|
||||
const DrawTileSeqStruct* dtss;
|
||||
uint32 relocation;
|
||||
|
@ -1303,8 +1303,8 @@ static void DrawTile_Track(TileInfo *ti)
|
|||
image = dts->ground_sprite;
|
||||
if (image != SPR_FLAT_GRASS_TILE) image += rti->total_offset;
|
||||
|
||||
// adjust ground tile for desert
|
||||
// don't adjust for snow, because snow in depots looks weird
|
||||
/* adjust ground tile for desert
|
||||
* don't adjust for snow, because snow in depots looks weird */
|
||||
if (IsSnowRailGround(ti->tile) && _opt.landscape == LT_TROPIC) {
|
||||
if (image != SPR_FLAT_GRASS_TILE) {
|
||||
image += rti->snow_offset; // tile with tracks
|
||||
|
@ -1313,12 +1313,12 @@ static void DrawTile_Track(TileInfo *ti)
|
|||
}
|
||||
}
|
||||
} else {
|
||||
// look for customization
|
||||
/* look for customization */
|
||||
byte stat_id = GetWaypointByTile(ti->tile)->stat_id;
|
||||
const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, stat_id);
|
||||
|
||||
if (statspec != NULL) {
|
||||
// emulate station tile - open with building
|
||||
/* emulate station tile - open with building */
|
||||
const Station* st = ComposeWaypointStation(ti->tile);
|
||||
uint gfx = 2;
|
||||
|
||||
|
@ -1348,7 +1348,7 @@ static void DrawTile_Track(TileInfo *ti)
|
|||
}
|
||||
} else {
|
||||
default_waypoint:
|
||||
// There is no custom layout, fall back to the default graphics
|
||||
/* There is no custom layout, fall back to the default graphics */
|
||||
dts = &_waypoint_gfx_table[GetWaypointAxis(ti->tile)];
|
||||
relocation = 0;
|
||||
image = dts->ground_sprite + rti->total_offset;
|
||||
|
@ -1435,15 +1435,15 @@ struct SetSignalsData {
|
|||
bool stop;
|
||||
bool has_presignal;
|
||||
|
||||
// presignal info
|
||||
/* presignal info */
|
||||
int presignal_exits;
|
||||
int presignal_exits_free;
|
||||
|
||||
// these are used to keep track of the signals that change.
|
||||
/* these are used to keep track of the signals that change. */
|
||||
TrackdirByte bit[NUM_SSD_ENTRY];
|
||||
TileIndex tile[NUM_SSD_ENTRY];
|
||||
|
||||
// these are used to keep track of the stack that modifies presignals recursively
|
||||
/* these are used to keep track of the stack that modifies presignals recursively */
|
||||
TileIndex next_tile[NUM_SSD_STACK];
|
||||
DiagDirectionByte next_dir[NUM_SSD_STACK];
|
||||
|
||||
|
@ -1455,22 +1455,22 @@ static bool SetSignalsEnumProc(TileIndex tile, void* data, Trackdir trackdir, ui
|
|||
|
||||
if (!IsTileType(tile, MP_RAILWAY)) return false;
|
||||
|
||||
// the tile has signals?
|
||||
/* the tile has signals? */
|
||||
if (HasSignalOnTrack(tile, TrackdirToTrack(trackdir))) {
|
||||
if (HasSignalOnTrackdir(tile, ReverseTrackdir(trackdir))) {
|
||||
// yes, add the signal to the list of signals
|
||||
/* yes, add the signal to the list of signals */
|
||||
if (ssd->cur != NUM_SSD_ENTRY) {
|
||||
ssd->tile[ssd->cur] = tile; // remember the tile index
|
||||
ssd->bit[ssd->cur] = trackdir; // and the controlling bit number
|
||||
ssd->cur++;
|
||||
}
|
||||
|
||||
// remember if this block has a presignal.
|
||||
/* remember if this block has a presignal. */
|
||||
ssd->has_presignal |= IsPresignalEntry(tile);
|
||||
}
|
||||
|
||||
if (HasSignalOnTrackdir(tile, trackdir) && IsPresignalExit(tile)) {
|
||||
// this is an exit signal that points out from the segment
|
||||
/* this is an exit signal that points out from the segment */
|
||||
ssd->presignal_exits++;
|
||||
if (GetSignalStateByTrackdir(tile, trackdir) != SIGNAL_STATE_RED)
|
||||
ssd->presignal_exits_free++;
|
||||
|
@ -1528,21 +1528,21 @@ static bool SignalVehicleCheck(TileIndex tile, uint track)
|
|||
|
||||
dest.track = 1 << (direction & 1); // get the trackbit the vehicle would have if it has not entered the tunnel yet (ie is still visible)
|
||||
|
||||
// check for a vehicle with that trackdir on the start tile of the tunnel
|
||||
/* check for a vehicle with that trackdir on the start tile of the tunnel */
|
||||
if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL) return true;
|
||||
|
||||
// check for a vehicle with that trackdir on the end tile of the tunnel
|
||||
/* check for a vehicle with that trackdir on the end tile of the tunnel */
|
||||
if (VehicleFromPos(end, &dest, SignalVehicleCheckProc) != NULL) return true;
|
||||
|
||||
// now check all tiles from start to end for a warping vehicle
|
||||
// NOTE: the hashes for tiles may overlap, so this could maybe be optimised a bit by not checking every tile?
|
||||
/* now check all tiles from start to end for a warping vehicle
|
||||
* NOTE: the hashes for tiles may overlap, so this could maybe be optimised a bit by not checking every tile? */
|
||||
dest.track = 0x40; //Vehicle inside a tunnel or on a bridge
|
||||
for (; tile != end; tile += TileOffsByDiagDir(direction)) {
|
||||
if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL)
|
||||
return true;
|
||||
}
|
||||
|
||||
// no vehicle found
|
||||
/* no vehicle found */
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1597,39 +1597,39 @@ static void ChangeSignalStates(SetSignalsData *ssd)
|
|||
{
|
||||
int i;
|
||||
|
||||
// thinking about presignals...
|
||||
// the presignal is green if,
|
||||
// if no train is in the segment AND
|
||||
// there is at least one green exit signal OR
|
||||
// there are no exit signals in the segment
|
||||
/* thinking about presignals...
|
||||
* the presignal is green if,
|
||||
* if no train is in the segment AND
|
||||
* there is at least one green exit signal OR
|
||||
* there are no exit signals in the segment */
|
||||
|
||||
// then mark the signals in the segment accordingly
|
||||
/* then mark the signals in the segment accordingly */
|
||||
for (i = 0; i != ssd->cur; i++) {
|
||||
TileIndex tile = ssd->tile[i];
|
||||
byte bit = SignalAgainstTrackdir(ssd->bit[i]);
|
||||
uint16 m2 = _m[tile].m2;
|
||||
|
||||
// presignals don't turn green if there is at least one presignal exit and none are free
|
||||
/* presignals don't turn green if there is at least one presignal exit and none are free */
|
||||
if (IsPresignalEntry(tile)) {
|
||||
int ex = ssd->presignal_exits, exfree = ssd->presignal_exits_free;
|
||||
|
||||
// subtract for dual combo signals so they don't count themselves
|
||||
/* subtract for dual combo signals so they don't count themselves */
|
||||
if (IsPresignalExit(tile) && HasSignalOnTrackdir(tile, ssd->bit[i])) {
|
||||
ex--;
|
||||
if (GetSignalStateByTrackdir(tile, ssd->bit[i]) != SIGNAL_STATE_RED) exfree--;
|
||||
}
|
||||
|
||||
// if we have exits and none are free, make red.
|
||||
/* if we have exits and none are free, make red. */
|
||||
if (ex && !exfree) goto make_red;
|
||||
}
|
||||
|
||||
// check if the signal is unaffected.
|
||||
/* check if the signal is unaffected. */
|
||||
if (ssd->stop) {
|
||||
make_red:
|
||||
// turn red
|
||||
/* turn red */
|
||||
if ((bit & m2) == 0) continue;
|
||||
} else {
|
||||
// turn green
|
||||
/* turn green */
|
||||
if ((bit & m2) != 0) continue;
|
||||
}
|
||||
|
||||
|
@ -1644,7 +1644,7 @@ make_red:
|
|||
}
|
||||
}
|
||||
|
||||
// it changed, so toggle it
|
||||
/* it changed, so toggle it */
|
||||
_m[tile].m2 = m2 ^ bit;
|
||||
MarkTileDirtyByTile(tile);
|
||||
}
|
||||
|
@ -1659,23 +1659,23 @@ bool UpdateSignalsOnSegment(TileIndex tile, DiagDirection direction)
|
|||
ssd.cur_stack = 0;
|
||||
|
||||
for (;;) {
|
||||
// go through one segment and update all signals pointing into that segment.
|
||||
/* go through one segment and update all signals pointing into that segment. */
|
||||
ssd.cur = ssd.presignal_exits = ssd.presignal_exits_free = 0;
|
||||
ssd.has_presignal = false;
|
||||
|
||||
FollowTrack(tile, 0xC000 | TRANSPORT_RAIL, direction, SetSignalsEnumProc, SetSignalsAfterProc, &ssd);
|
||||
ChangeSignalStates(&ssd);
|
||||
|
||||
// remember the result only for the first iteration.
|
||||
/* remember the result only for the first iteration. */
|
||||
if (result < 0) {
|
||||
// stay in depot while segment is occupied or while all presignal exits are blocked
|
||||
/* stay in depot while segment is occupied or while all presignal exits are blocked */
|
||||
result = ssd.stop || (ssd.presignal_exits > 0 && ssd.presignal_exits_free == 0);
|
||||
}
|
||||
|
||||
// if any exit signals were changed, we need to keep going to modify the stuff behind those.
|
||||
/* if any exit signals were changed, we need to keep going to modify the stuff behind those. */
|
||||
if (ssd.cur_stack == 0) break;
|
||||
|
||||
// one or more exit signals were changed, so we need to update another segment too.
|
||||
/* one or more exit signals were changed, so we need to update another segment too. */
|
||||
tile = ssd.next_tile[--ssd.cur_stack];
|
||||
direction = ssd.next_dir[ssd.cur_stack];
|
||||
}
|
||||
|
@ -1768,7 +1768,7 @@ static void TileLoop_Track(TileIndex tile)
|
|||
|
||||
new_ground = RAIL_GROUND_GRASS;
|
||||
|
||||
if (old_ground != RAIL_GROUND_BARREN) { /* wait until bottom is green */
|
||||
if (old_ground != RAIL_GROUND_BARREN) { // wait until bottom is green
|
||||
/* determine direction of fence */
|
||||
TrackBits rail = GetTrackBits(tile);
|
||||
|
||||
|
@ -1962,7 +1962,7 @@ static uint32 VehicleEnter_Track(Vehicle *v, TileIndex tile, int x, int y)
|
|||
DiagDirection dir;
|
||||
int length;
|
||||
|
||||
// this routine applies only to trains in depot tiles
|
||||
/* this routine applies only to trains in depot tiles */
|
||||
if (v->type != VEH_TRAIN || !IsTileDepotType(tile, TRANSPORT_RAIL)) return VETSB_CONTINUE;
|
||||
|
||||
/* depot direction */
|
||||
|
|
|
@ -412,8 +412,8 @@ int64 ReadValue(const void *ptr, VarType conv)
|
|||
/** Write the value of a setting
|
||||
* @param ptr pointer to the variable
|
||||
* @param conv type of variable, can be a non-clean type, eg
|
||||
* with other flags. It is parsed upon read
|
||||
* @param var the new value being given to the variable */
|
||||
* with other flags. It is parsed upon read
|
||||
* @param val the new value being given to the variable */
|
||||
void WriteValue(void *ptr, VarType conv, int64 val)
|
||||
{
|
||||
switch (GetVarMemType(conv)) {
|
||||
|
@ -498,6 +498,7 @@ static inline size_t SlCalcNetStringLen(const char *ptr, size_t length)
|
|||
* by SlCalcNetStringLen and the length that the index will occupy.
|
||||
* @param ptr pointer to the stringbuffer
|
||||
* @param length maximum length of the string (buffer size, etc.)
|
||||
* @param conv type of data been used
|
||||
* @return return the gross length of the string */
|
||||
static inline size_t SlCalcStringLen(const void *ptr, size_t length, VarType conv)
|
||||
{
|
||||
|
@ -525,7 +526,7 @@ static inline size_t SlCalcStringLen(const void *ptr, size_t length, VarType con
|
|||
/**
|
||||
* Save/Load a string.
|
||||
* @param ptr the string being manipulated
|
||||
* @param the length of the string (full length)
|
||||
* @param length of the string (full length)
|
||||
* @param conv must be SLE_FILE_STRING */
|
||||
static void SlString(void *ptr, size_t length, VarType conv)
|
||||
{
|
||||
|
@ -650,7 +651,9 @@ static inline bool SlSkipVariableOnLoad(const SaveLoad *sld)
|
|||
|
||||
/**
|
||||
* Calculate the size of an object.
|
||||
* @param object to be measured
|
||||
* @param sld The SaveLoad description of the object so we know how to manipulate it
|
||||
* @return size of given objetc
|
||||
*/
|
||||
static size_t SlCalcObjLength(const void *object, const SaveLoad *sld)
|
||||
{
|
||||
|
@ -768,7 +771,7 @@ void SlObject(void *object, const SaveLoad *sld)
|
|||
|
||||
/**
|
||||
* Save or Load (a list of) global variables
|
||||
* @param desc The global variable that is being loaded or saved
|
||||
* @param sldg The global variable that is being loaded or saved
|
||||
*/
|
||||
void SlGlobList(const SaveLoadGlobVarList *sldg)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file saveload.h */
|
||||
|
||||
#ifndef SAVELOAD_H
|
||||
#define SAVELOAD_H
|
||||
|
||||
|
@ -10,9 +12,9 @@
|
|||
#define SIZE_MAX ((size_t)-1)
|
||||
|
||||
enum SaveOrLoadResult {
|
||||
SL_OK = 0, // completed successfully
|
||||
SL_ERROR = 1, // error that was caught before internal structures were modified
|
||||
SL_REINIT = 2, // error that was caught in the middle of updating game state, need to clear it. (can only happen during load)
|
||||
SL_OK = 0, ///< completed successfully
|
||||
SL_ERROR = 1, ///< error that was caught before internal structures were modified
|
||||
SL_REINIT = 2, ///< error that was caught in the middle of updating game state, need to clear it. (can only happen during load)
|
||||
};
|
||||
|
||||
enum SaveOrLoadMode {
|
||||
|
|
|
@ -20,7 +20,7 @@ uint _num_screenshot_formats;
|
|||
uint _cur_screenshot_format;
|
||||
ScreenshotType current_screenshot_type;
|
||||
|
||||
// called by the ScreenShot proc to generate screenshot lines.
|
||||
/* called by the ScreenShot proc to generate screenshot lines. */
|
||||
typedef void ScreenshotCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n);
|
||||
typedef bool ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette);
|
||||
|
||||
|
@ -62,7 +62,7 @@ struct RgbQuad {
|
|||
};
|
||||
assert_compile(sizeof(RgbQuad) == 4);
|
||||
|
||||
// generic .BMP writer
|
||||
/* generic .BMP writer */
|
||||
static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette)
|
||||
{
|
||||
BitmapFileHeader bfh;
|
||||
|
@ -72,23 +72,23 @@ static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
uint i, padw;
|
||||
uint n, maxlines;
|
||||
|
||||
// only implemented for 8bit images so far.
|
||||
/* only implemented for 8bit images so far. */
|
||||
if (pixelformat != 8)
|
||||
return false;
|
||||
|
||||
f = fopen(name, "wb");
|
||||
if (f == NULL) return false;
|
||||
|
||||
// each scanline must be aligned on a 32bit boundary
|
||||
/* each scanline must be aligned on a 32bit boundary */
|
||||
padw = ALIGN(w, 4);
|
||||
|
||||
// setup the file header
|
||||
/* setup the file header */
|
||||
bfh.type = TO_LE16('MB');
|
||||
bfh.size = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256 + padw * h);
|
||||
bfh.reserved = 0;
|
||||
bfh.off_bits = TO_LE32(sizeof(bfh) + sizeof(bih) + sizeof(RgbQuad) * 256);
|
||||
|
||||
// setup the info header
|
||||
/* setup the info header */
|
||||
bih.size = TO_LE32(sizeof(BitmapInfoHeader));
|
||||
bih.width = TO_LE32(w);
|
||||
bih.height = TO_LE32(h);
|
||||
|
@ -101,7 +101,7 @@ static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
bih.clrused = 0;
|
||||
bih.clrimp = 0;
|
||||
|
||||
// convert the palette to the windows format
|
||||
/* convert the palette to the windows format */
|
||||
for (i = 0; i != 256; i++) {
|
||||
rq[i].red = palette[i].r;
|
||||
rq[i].green = palette[i].g;
|
||||
|
@ -109,15 +109,15 @@ static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
rq[i].reserved = 0;
|
||||
}
|
||||
|
||||
// write file header and info header and palette
|
||||
/* write file header and info header and palette */
|
||||
if (fwrite(&bfh, sizeof(bfh), 1, f) != 1) return false;
|
||||
if (fwrite(&bih, sizeof(bih), 1, f) != 1) return false;
|
||||
if (fwrite(rq, sizeof(rq), 1, f) != 1) return false;
|
||||
|
||||
// use by default 64k temp memory
|
||||
/* use by default 64k temp memory */
|
||||
maxlines = clamp(65536 / padw, 16, 128);
|
||||
|
||||
// now generate the bitmap bits
|
||||
/* now generate the bitmap bits */
|
||||
Pixel *buff = MallocT<Pixel>(padw * maxlines); // by default generate 128 lines at a time.
|
||||
if (buff == NULL) {
|
||||
fclose(f);
|
||||
|
@ -125,16 +125,16 @@ static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
}
|
||||
memset(buff, 0, padw * maxlines); // zero the buffer to have the padding bytes set to 0
|
||||
|
||||
// start at the bottom, since bitmaps are stored bottom up.
|
||||
/* start at the bottom, since bitmaps are stored bottom up. */
|
||||
do {
|
||||
// determine # lines
|
||||
/* determine # lines */
|
||||
n = min(h, maxlines);
|
||||
h -= n;
|
||||
|
||||
// render the pixels
|
||||
/* render the pixels */
|
||||
callb(userdata, buff, h, padw, n);
|
||||
|
||||
// write each line
|
||||
/* write each line */
|
||||
while (n)
|
||||
if (fwrite(buff + (--n) * padw, padw, 1, f) != 1) {
|
||||
free(buff);
|
||||
|
@ -175,7 +175,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
png_structp png_ptr;
|
||||
png_infop info_ptr;
|
||||
|
||||
// only implemented for 8bit images so far.
|
||||
/* only implemented for 8bit images so far. */
|
||||
if (pixelformat != 8)
|
||||
return false;
|
||||
|
||||
|
@ -209,7 +209,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
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.
|
||||
/* convert the palette to the .PNG format. */
|
||||
for (i = 0; i != 256; i++) {
|
||||
rq[i].red = palette[i].r;
|
||||
rq[i].green = palette[i].g;
|
||||
|
@ -220,10 +220,10 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
png_write_info(png_ptr, info_ptr);
|
||||
png_set_flush(png_ptr, 512);
|
||||
|
||||
// use by default 64k temp memory
|
||||
/* use by default 64k temp memory */
|
||||
maxlines = clamp(65536 / w, 16, 128);
|
||||
|
||||
// now generate the bitmap bits
|
||||
/* now generate the bitmap bits */
|
||||
Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
|
||||
if (buff == NULL) {
|
||||
png_destroy_write_struct(&png_ptr, &info_ptr);
|
||||
|
@ -234,14 +234,14 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
|
||||
y = 0;
|
||||
do {
|
||||
// determine # lines to write
|
||||
/* determine # lines to write */
|
||||
n = min(h - y, maxlines);
|
||||
|
||||
// render the pixels into the buffer
|
||||
/* render the pixels into the buffer */
|
||||
callb(userdata, buff, y, w, n);
|
||||
y += n;
|
||||
|
||||
// write them to png
|
||||
/* write them to png */
|
||||
for (i = 0; i != n; i++)
|
||||
png_write_row(png_ptr, buff + i * w);
|
||||
} while (y != h);
|
||||
|
@ -295,7 +295,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
|
||||
memset(&pcx, 0, sizeof(pcx));
|
||||
|
||||
// setup pcx header
|
||||
/* setup pcx header */
|
||||
pcx.manufacturer = 10;
|
||||
pcx.version = 5;
|
||||
pcx.rle = 1;
|
||||
|
@ -310,16 +310,16 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
pcx.width = pcx.pitch = TO_LE16(w);
|
||||
pcx.height = TO_LE16(h);
|
||||
|
||||
// write pcx header
|
||||
/* write pcx header */
|
||||
if (fwrite(&pcx, sizeof(pcx), 1, f) != 1) {
|
||||
fclose(f);
|
||||
return false;
|
||||
}
|
||||
|
||||
// use by default 64k temp memory
|
||||
/* use by default 64k temp memory */
|
||||
maxlines = clamp(65536 / w, 16, 128);
|
||||
|
||||
// now generate the bitmap bits
|
||||
/* now generate the bitmap bits */
|
||||
Pixel *buff = MallocT<Pixel>(w * maxlines); // by default generate 128 lines at a time.
|
||||
if (buff == NULL) {
|
||||
fclose(f);
|
||||
|
@ -329,22 +329,22 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
|
||||
y = 0;
|
||||
do {
|
||||
// determine # lines to write
|
||||
/* determine # lines to write */
|
||||
uint n = min(h - y, maxlines);
|
||||
uint i;
|
||||
|
||||
// render the pixels into the buffer
|
||||
/* render the pixels into the buffer */
|
||||
callb(userdata, buff, y, w, n);
|
||||
y += n;
|
||||
|
||||
// write them to pcx
|
||||
/* write them to pcx */
|
||||
for (i = 0; i != n; i++) {
|
||||
const Pixel* bufp = buff + i * w;
|
||||
byte runchar = bufp[0];
|
||||
uint runcount = 1;
|
||||
uint j;
|
||||
|
||||
// for each pixel...
|
||||
/* for each pixel... */
|
||||
for (j = 1; j < w; j++) {
|
||||
Pixel ch = bufp[j];
|
||||
|
||||
|
@ -366,7 +366,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
runcount++;
|
||||
}
|
||||
|
||||
// write remaining bytes..
|
||||
/* write remaining bytes.. */
|
||||
if (runcount > 1 || (runchar & 0xC0) == 0xC0)
|
||||
if (fputc(0xC0 | runcount, f) == EOF) {
|
||||
free(buff);
|
||||
|
@ -383,7 +383,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
|
|||
|
||||
free(buff);
|
||||
|
||||
// write 8-bit color palette
|
||||
/* write 8-bit color palette */
|
||||
if (fputc(12, f) == EOF) {
|
||||
fclose(f);
|
||||
return false;
|
||||
|
@ -445,7 +445,7 @@ void SetScreenshotFormat(int i)
|
|||
strcpy(_screenshot_format_name, _screenshot_formats[i].extension);
|
||||
}
|
||||
|
||||
// screenshot generator that dumps the current video buffer
|
||||
/* screenshot generator that dumps the current video buffer */
|
||||
static void CurrentScreenCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
|
||||
{
|
||||
for (; n > 0; --n) {
|
||||
|
@ -455,7 +455,7 @@ static void CurrentScreenCallback(void *userdata, Pixel *buf, uint y, uint pitch
|
|||
}
|
||||
}
|
||||
|
||||
// generate a large piece of the world
|
||||
/* generate a large piece of the world */
|
||||
static void LargeWorldCallback(void *userdata, Pixel *buf, uint y, uint pitch, uint n)
|
||||
{
|
||||
ViewPort *vp = (ViewPort *)userdata;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file screenshot.h */
|
||||
|
||||
#ifndef SCREENSHOT_H
|
||||
#define SCREENSHOT_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file sdl.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WITH_SDL
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file
|
||||
/** @file settings.cpp
|
||||
* All actions handling saving and loading of the settings/configuration goes on in this file.
|
||||
* The file consists of four parts:
|
||||
* <ol>
|
||||
|
@ -95,10 +95,10 @@ static void *pool_alloc(SettingsMemoryPool **pool, uint size)
|
|||
|
||||
size = ALIGN(size, sizeof(void*));
|
||||
|
||||
// first check if there's memory in the next pool
|
||||
/* first check if there's memory in the next pool */
|
||||
if (p->next && p->next->pos + size <= p->next->size) {
|
||||
p = p->next;
|
||||
// then check if there's not memory in the cur pool
|
||||
/* then check if there's not memory in the cur pool */
|
||||
} else if (p->pos + size > p->size) {
|
||||
SettingsMemoryPool *n = pool_new(size);
|
||||
*pool = n;
|
||||
|
@ -130,7 +130,7 @@ static void pool_free(SettingsMemoryPool **pool)
|
|||
}
|
||||
}
|
||||
|
||||
// structs describing the ini format.
|
||||
/** structs describing the ini format. */
|
||||
struct IniItem {
|
||||
char *name;
|
||||
char *value;
|
||||
|
@ -139,21 +139,21 @@ struct IniItem {
|
|||
};
|
||||
|
||||
struct IniGroup {
|
||||
char *name; // name of group
|
||||
char *comment; //comment for group
|
||||
char *name; ///< name of group
|
||||
char *comment; ///<comment for group
|
||||
IniItem *item, **last_item;
|
||||
IniGroup *next;
|
||||
IniFile *ini;
|
||||
IniGroupType type; // type of group
|
||||
IniGroupType type; ///< type of group
|
||||
};
|
||||
|
||||
struct IniFile {
|
||||
SettingsMemoryPool *pool;
|
||||
IniGroup *group, **last_group;
|
||||
char *comment; // last comment in file
|
||||
char *comment; ///< last comment in file
|
||||
};
|
||||
|
||||
// allocate an inifile object
|
||||
/** allocate an inifile object */
|
||||
static IniFile *ini_alloc()
|
||||
{
|
||||
IniFile *ini;
|
||||
|
@ -167,7 +167,7 @@ static IniFile *ini_alloc()
|
|||
return ini;
|
||||
}
|
||||
|
||||
// allocate an ini group object
|
||||
/** allocate an ini group object */
|
||||
static IniGroup *ini_group_alloc(IniFile *ini, const char *grpt, int len)
|
||||
{
|
||||
IniGroup *grp = (IniGroup*)pool_alloc(&ini->pool, sizeof(IniGroup));
|
||||
|
@ -199,7 +199,7 @@ static IniItem *ini_item_alloc(IniGroup *group, const char *name, int len)
|
|||
return item;
|
||||
}
|
||||
|
||||
// load an ini file into the "abstract" format
|
||||
/** load an ini file into the "abstract" format */
|
||||
static IniFile *ini_load(const char *filename)
|
||||
{
|
||||
char buffer[1024], c, *s, *t, *e;
|
||||
|
@ -217,23 +217,23 @@ static IniFile *ini_load(const char *filename)
|
|||
in = fopen(filename, "r");
|
||||
if (in == NULL) return ini;
|
||||
|
||||
// for each line in the file
|
||||
/* for each line in the file */
|
||||
while (fgets(buffer, sizeof(buffer), in)) {
|
||||
|
||||
// trim whitespace from the left side
|
||||
/* trim whitespace from the left side */
|
||||
for (s = buffer; *s == ' ' || *s == '\t'; s++);
|
||||
|
||||
// trim whitespace from right side.
|
||||
/* trim whitespace from right side. */
|
||||
e = s + strlen(s);
|
||||
while (e > s && ((c=e[-1]) == '\n' || c == '\r' || c == ' ' || c == '\t')) e--;
|
||||
*e = '\0';
|
||||
|
||||
// skip comments and empty lines
|
||||
/* skip comments and empty lines */
|
||||
if (*s == '#' || *s == ';' || *s == '\0') {
|
||||
uint ns = comment_size + (e - s + 1);
|
||||
uint a = comment_alloc;
|
||||
uint pos;
|
||||
// add to comment
|
||||
/* add to comment */
|
||||
if (ns > a) {
|
||||
a = max(a, 128U);
|
||||
do a*=2; while (a < ns);
|
||||
|
@ -246,7 +246,7 @@ static IniFile *ini_load(const char *filename)
|
|||
continue;
|
||||
}
|
||||
|
||||
// it's a group?
|
||||
/* it's a group? */
|
||||
if (s[0] == '[') {
|
||||
if (e[-1] != ']') {
|
||||
ShowInfoF("ini: invalid group name '%s'", buffer);
|
||||
|
@ -260,30 +260,30 @@ static IniFile *ini_load(const char *filename)
|
|||
comment_size = 0;
|
||||
}
|
||||
} else if (group) {
|
||||
// find end of keyname
|
||||
/* find end of keyname */
|
||||
for (t = s; *t != '\0' && *t != '=' && *t != '\t' && *t != ' '; t++);
|
||||
|
||||
// it's an item in an existing group
|
||||
/* it's an item in an existing group */
|
||||
item = ini_item_alloc(group, s, t-s);
|
||||
if (comment_size) {
|
||||
item->comment = (char*)pool_strdup(&ini->pool, comment, comment_size);
|
||||
comment_size = 0;
|
||||
}
|
||||
|
||||
// find start of parameter
|
||||
/* find start of parameter */
|
||||
while (*t == '=' || *t == ' ' || *t == '\t') t++;
|
||||
|
||||
|
||||
// remove starting quotation marks
|
||||
/* remove starting quotation marks */
|
||||
if (*t == '\"') t++;
|
||||
// remove ending quotation marks
|
||||
/* remove ending quotation marks */
|
||||
e = t + strlen(t);
|
||||
if (e > t && e[-1] == '\"') e--;
|
||||
*e = '\0';
|
||||
|
||||
item->value = (char*)pool_strdup(&ini->pool, t, e - t);
|
||||
} else {
|
||||
// it's an orphan item
|
||||
/* it's an orphan item */
|
||||
ShowInfoF("ini: '%s' outside of group", buffer);
|
||||
}
|
||||
}
|
||||
|
@ -299,25 +299,25 @@ static IniFile *ini_load(const char *filename)
|
|||
return ini;
|
||||
}
|
||||
|
||||
// lookup a group or make a new one
|
||||
/** lookup a group or make a new one */
|
||||
static IniGroup *ini_getgroup(IniFile *ini, const char *name, int len)
|
||||
{
|
||||
IniGroup *group;
|
||||
|
||||
if (len == -1) len = strlen(name);
|
||||
|
||||
// does it exist already?
|
||||
/* does it exist already? */
|
||||
for (group = ini->group; group; group = group->next)
|
||||
if (!memcmp(group->name, name, len) && group->name[len] == 0)
|
||||
return group;
|
||||
|
||||
// otherwise make a new one
|
||||
/* otherwise make a new one */
|
||||
group = ini_group_alloc(ini, name, len);
|
||||
group->comment = (char*)pool_strdup(&ini->pool, "\n", 1);
|
||||
return group;
|
||||
}
|
||||
|
||||
// lookup an item or make a new one
|
||||
/** lookup an item or make a new one */
|
||||
static IniItem *ini_getitem(IniGroup *group, const char *name, bool create)
|
||||
{
|
||||
IniItem *item;
|
||||
|
@ -328,11 +328,11 @@ static IniItem *ini_getitem(IniGroup *group, const char *name, bool create)
|
|||
|
||||
if (!create) return NULL;
|
||||
|
||||
// otherwise make a new one
|
||||
/* otherwise make a new one */
|
||||
return ini_item_alloc(group, name, len);
|
||||
}
|
||||
|
||||
// save ini file from the "abstract" format.
|
||||
/** save ini file from the "abstract" format. */
|
||||
static bool ini_save(const char *filename, IniFile *ini)
|
||||
{
|
||||
FILE *f;
|
||||
|
@ -380,13 +380,13 @@ static int lookup_oneofmany(const char *many, const char *one, int onelen)
|
|||
|
||||
if (onelen == -1) onelen = strlen(one);
|
||||
|
||||
// check if it's an integer
|
||||
/* check if it's an integer */
|
||||
if (*one >= '0' && *one <= '9')
|
||||
return strtoul(one, NULL, 0);
|
||||
|
||||
idx = 0;
|
||||
for (;;) {
|
||||
// find end of item
|
||||
/* find end of item */
|
||||
s = many;
|
||||
while (*s != '|' && *s != 0) s++;
|
||||
if (s - many == onelen && !memcmp(one, many, onelen)) return idx;
|
||||
|
@ -408,7 +408,7 @@ static uint32 lookup_manyofmany(const char *many, const char *str)
|
|||
uint32 res = 0;
|
||||
|
||||
for (;;) {
|
||||
// skip "whitespace"
|
||||
/* skip "whitespace" */
|
||||
while (*str == ' ' || *str == '\t' || *str == '|') str++;
|
||||
if (*str == 0) break;
|
||||
|
||||
|
@ -522,7 +522,7 @@ static void make_oneofmany(char *buf, const char *many, int id)
|
|||
{
|
||||
int orig_id = id;
|
||||
|
||||
// Look for the id'th element
|
||||
/* Look for the id'th element */
|
||||
while (--id >= 0) {
|
||||
for (; *many != '|'; many++) {
|
||||
if (*many == '\0') { // not found
|
||||
|
@ -533,7 +533,7 @@ static void make_oneofmany(char *buf, const char *many, int id)
|
|||
many++; // pass the |-character
|
||||
}
|
||||
|
||||
// copy string until next item (|) or the end of the list if this is the last one
|
||||
/* copy string until next item (|) or the end of the list if this is the last one */
|
||||
while (*many != '\0' && *many != '|') *buf++ = *many++;
|
||||
*buf = '\0';
|
||||
}
|
||||
|
@ -685,7 +685,7 @@ static void ini_load_settings(IniFile *ini, const SettingDesc *sd, const char *g
|
|||
|
||||
if (!SlIsObjectCurrentlyValid(sld->version_from, sld->version_to)) continue;
|
||||
|
||||
// XXX - wtf is this?? (group override?)
|
||||
/* XXX - wtf is this?? (group override?) */
|
||||
s = strchr(sdb->name, '.');
|
||||
if (s != NULL) {
|
||||
group = ini_getgroup(ini, sdb->name, s - sdb->name);
|
||||
|
@ -761,7 +761,7 @@ static void ini_save_settings(IniFile *ini, const SettingDesc *sd, const char *g
|
|||
if (!SlIsObjectCurrentlyValid(sld->version_from, sld->version_to)) continue;
|
||||
if (sld->conv & SLF_CONFIG_NO) continue;
|
||||
|
||||
// XXX - wtf is this?? (group override?)
|
||||
/* XXX - wtf is this?? (group override?) */
|
||||
s = strchr(sdb->name, '.');
|
||||
if (s != NULL) {
|
||||
group = ini_getgroup(ini, sdb->name, s - sdb->name);
|
||||
|
@ -776,7 +776,7 @@ static void ini_save_settings(IniFile *ini, const SettingDesc *sd, const char *g
|
|||
ptr = GetVariableAddress(object, sld);
|
||||
|
||||
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 */
|
||||
const void *p = string_to_val(sdb, item->value);
|
||||
|
||||
/* The main type of a variable/setting is in bytes 8-15
|
||||
|
@ -1069,7 +1069,7 @@ static void ini_save_setting_list(IniFile *ini, const char *grpname, char **list
|
|||
#include "gui.h"
|
||||
#include "town.h"
|
||||
#include "gfx.h"
|
||||
// virtual PositionMainToolbar function, calls the right one.
|
||||
/* virtual PositionMainToolbar function, calls the right one.*/
|
||||
static int32 v_PositionMainToolbar(int32 p1)
|
||||
{
|
||||
if (_game_mode != GM_MENU) PositionMainToolbar(NULL);
|
||||
|
@ -1460,7 +1460,7 @@ const SettingDesc _patch_settings[] = {
|
|||
SDT_CONDVAR (Patches, npf_road_drive_through_penalty, SLE_UINT, 47, SL_MAX_VERSION, 0, 0, 8 * NPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
|
||||
|
||||
// The maximum number of nodes to search
|
||||
/* The maximum number of nodes to search */
|
||||
SDT_CONDBOOL(Patches, yapf.disable_node_optimization , 28, SL_MAX_VERSION, 0, 0, false , STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.max_search_nodes , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10000 , 500, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDBOOL(Patches, yapf.rail_firstred_twoway_eol , 28, SL_MAX_VERSION, 0, 0, true , STR_NULL, NULL),
|
||||
|
@ -1472,22 +1472,22 @@ const SettingDesc _patch_settings[] = {
|
|||
SDT_CONDVAR (Patches, yapf.rail_slope_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_curve45_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_curve90_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 6 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
// This penalty is applied when a train reverses inside a depot
|
||||
/* This penalty is applied when a train reverses inside a depot */
|
||||
SDT_CONDVAR (Patches, yapf.rail_depot_reverse_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 50 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
// This is the penalty for level crossings (for trains only)
|
||||
/* This is the penalty for level crossings (for trains only) */
|
||||
SDT_CONDVAR (Patches, yapf.rail_crossing_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
// look-ahead how many signals are checked
|
||||
/* look-ahead how many signals are checked */
|
||||
SDT_CONDVAR (Patches, yapf.rail_look_ahead_max_signals, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10 , 1, 100, 0, STR_NULL, NULL),
|
||||
// look-ahead n-th red signal penalty polynomial: penalty = p2 * n^2 + p1 * n + p0
|
||||
/* look-ahead n-th red signal penalty polynomial: penalty = p2 * n^2 + p1 * n + p0 */
|
||||
SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p0 , SLE_INT , 28, SL_MAX_VERSION, 0, 0, 500 , -1000000, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p1 , SLE_INT , 28, SL_MAX_VERSION, 0, 0, -100 , -1000000, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p2 , SLE_INT , 28, SL_MAX_VERSION, 0, 0, 5 , -1000000, 1000000, 0, STR_NULL, NULL),
|
||||
// penalties for too long or too short station platforms
|
||||
/* penalties for too long or too short station platforms */
|
||||
SDT_CONDVAR (Patches, yapf.rail_longer_platform_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 8 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_longer_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 0 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_shorter_platform_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 40 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.rail_shorter_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 0 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
|
||||
// road vehicles - penalties
|
||||
/* road vehicles - penalties */
|
||||
SDT_CONDVAR (Patches, yapf.road_slope_penalty , SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.road_curve_penalty , SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
SDT_CONDVAR (Patches, yapf.road_crossing_penalty , SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file settings.h */
|
||||
|
||||
#ifndef SETTINGS_H
|
||||
#define SETTINGS_H
|
||||
|
||||
|
@ -12,12 +14,12 @@
|
|||
enum SettingDescTypeLong {
|
||||
/* 4 bytes allocated a maximum of 16 types for GenericType */
|
||||
SDT_BEGIN = 0,
|
||||
SDT_NUMX = 0, // any number-type
|
||||
SDT_BOOLX = 1, // a boolean number
|
||||
SDT_ONEOFMANY = 2, // bitmasked number where only ONE bit may be set
|
||||
SDT_MANYOFMANY = 3, // bitmasked number where MULTIPLE bits may be set
|
||||
SDT_INTLIST = 4, // list of integers seperated by a comma ','
|
||||
SDT_STRING = 5, // string with a pre-allocated buffer
|
||||
SDT_NUMX = 0, ///< any number-type
|
||||
SDT_BOOLX = 1, ///< a boolean number
|
||||
SDT_ONEOFMANY = 2, ///< bitmasked number where only ONE bit may be set
|
||||
SDT_MANYOFMANY = 3, ///< bitmasked number where MULTIPLE bits may be set
|
||||
SDT_INTLIST = 4, ///< list of integers seperated by a comma ','
|
||||
SDT_STRING = 5, ///< string with a pre-allocated buffer
|
||||
SDT_END,
|
||||
/* 10 more possible primitives */
|
||||
};
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file settings_gui.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "currency.h"
|
||||
|
@ -352,9 +354,9 @@ static inline bool GetBitAndShift(uint32 *b)
|
|||
*/
|
||||
static const int16 _default_game_diff[3][GAME_DIFFICULTY_NUM] = { /*
|
||||
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R*/
|
||||
{2, 2, 1, 3, 300, 2, 0, 2, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0}, //easy
|
||||
{4, 1, 1, 2, 150, 3, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1}, //medium
|
||||
{7, 0, 2, 2, 100, 4, 1, 3, 2, 2, 0, 2, 3, 2, 1, 1, 1, 2}, //hard
|
||||
{2, 2, 1, 3, 300, 2, 0, 2, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0}, ///< easy
|
||||
{4, 1, 1, 2, 150, 3, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1}, ///< medium
|
||||
{7, 0, 2, 2, 100, 4, 1, 3, 2, 2, 0, 2, 3, 2, 1, 1, 1, 2}, ///< hard
|
||||
};
|
||||
|
||||
void SetDifficultyLevel(int mode, GameOptions *gm_opt)
|
||||
|
@ -393,7 +395,7 @@ enum {
|
|||
GAMEDIFF_WND_ROWSIZE = 9
|
||||
};
|
||||
|
||||
// Temporary holding place of values in the difficulty window until 'Save' is clicked
|
||||
/* Temporary holding place of values in the difficulty window until 'Save' is clicked */
|
||||
static GameOptions _opt_mod_temp;
|
||||
// 0x383E = (1 << 13) | (1 << 12) | (1 << 11) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1)
|
||||
#define DIFF_INGAME_DISABLED_BUTTONS 0x383E
|
||||
|
@ -457,7 +459,7 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
|
|||
uint btn, dis;
|
||||
int16 val;
|
||||
|
||||
// Don't allow clients to make any changes
|
||||
/* Don't allow clients to make any changes */
|
||||
if (_networking && !_network_server)
|
||||
return;
|
||||
|
||||
|
@ -469,12 +471,12 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
|
|||
if (y < 0)
|
||||
return;
|
||||
|
||||
// Get button from Y coord.
|
||||
/* Get button from Y coord. */
|
||||
btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
|
||||
if (btn >= GAME_DIFFICULTY_NUM || y % (GAMEDIFF_WND_ROWSIZE + 2) >= 9)
|
||||
return;
|
||||
|
||||
// Clicked disabled button?
|
||||
/* Clicked disabled button? */
|
||||
dis = (_game_mode == GM_NORMAL) ? DIFF_INGAME_DISABLED_BUTTONS : 0;
|
||||
|
||||
if (HASBIT(dis, btn))
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file ship.h */
|
||||
|
||||
#ifndef SHIP_H
|
||||
#define SHIP_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file ship_cmd.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "ship.h"
|
||||
|
@ -62,8 +64,8 @@ void DrawShipEngine(int x, int y, EngineID engine, SpriteID pal)
|
|||
|
||||
/** Get the size of the sprite of a ship sprite heading west (used for lists)
|
||||
* @param engine The engine to get the sprite from
|
||||
* @param &width The width of the sprite
|
||||
* @param &height The height of the sprite
|
||||
* @param width The width of the sprite
|
||||
* @param height The height of the sprite
|
||||
*/
|
||||
void GetShipSpriteSize(EngineID engine, uint &width, uint &height)
|
||||
{
|
||||
|
@ -191,7 +193,7 @@ void OnNewDay_Ship(Vehicle *v)
|
|||
SubtractMoneyFromPlayerFract(v->owner, cost);
|
||||
|
||||
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
||||
//we need this for the profit
|
||||
/* we need this for the profit */
|
||||
InvalidateWindowClasses(WC_SHIPS_LIST);
|
||||
}
|
||||
|
||||
|
@ -376,10 +378,10 @@ static void CheckShipLeaveDepot(Vehicle *v)
|
|||
tile = v->tile;
|
||||
axis = GetShipDepotAxis(tile);
|
||||
|
||||
// Check first side
|
||||
/* Check first side */
|
||||
if (_ship_sometracks[axis] & GetTileShipTrackStatus(TILE_ADD(tile, ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
|
||||
m = (axis == AXIS_X) ? 0x101 : 0x207;
|
||||
// Check second side
|
||||
/* Check second side */
|
||||
} else if (_ship_sometracks[axis + 2] & GetTileShipTrackStatus(TILE_ADD(tile, -2 * ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
|
||||
m = (axis == AXIS_X) ? 0x105 : 0x203;
|
||||
} else {
|
||||
|
@ -405,14 +407,14 @@ static bool ShipAccelerate(Vehicle *v)
|
|||
|
||||
spd = min(v->cur_speed + 1, v->max_speed);
|
||||
|
||||
//updates statusbar only if speed have changed to save CPU time
|
||||
/*updates statusbar only if speed have changed to save CPU time */
|
||||
if (spd != v->cur_speed) {
|
||||
v->cur_speed = spd;
|
||||
if (_patches.vehicle_speed)
|
||||
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
|
||||
}
|
||||
|
||||
// Decrease somewhat when turning
|
||||
/* Decrease somewhat when turning */
|
||||
if (!(v->direction & 1)) spd = spd * 3 / 4;
|
||||
|
||||
if (spd == 0) return false;
|
||||
|
@ -455,7 +457,7 @@ struct PathFindShip {
|
|||
|
||||
static bool ShipTrackFollower(TileIndex tile, PathFindShip *pfs, int track, uint length, byte *state)
|
||||
{
|
||||
// Found dest?
|
||||
/* Found dest? */
|
||||
if (tile == pfs->dest_coords) {
|
||||
pfs->best_bird_dist = 0;
|
||||
|
||||
|
@ -463,7 +465,7 @@ static bool ShipTrackFollower(TileIndex tile, PathFindShip *pfs, int track, uint
|
|||
return true;
|
||||
}
|
||||
|
||||
// Skip this tile in the calculation
|
||||
/* Skip this tile in the calculation */
|
||||
if (tile != pfs->skiptile) {
|
||||
pfs->best_bird_dist = minu(pfs->best_bird_dist, DistanceMaxPlusManhattan(pfs->dest_coords, tile));
|
||||
}
|
||||
|
@ -543,7 +545,7 @@ static inline NPFFoundTargetData PerfNPFRouteToStationOrTile(TileIndex tile, Tra
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* returns the track to choose on the next tile, or -1 when it's better to
|
||||
/** returns the track to choose on the next tile, or -1 when it's better to
|
||||
* reverse. The tile given is the tile we are about to enter, enterdir is the
|
||||
* direction in which we are entering the tile */
|
||||
static Track ChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks)
|
||||
|
@ -558,7 +560,7 @@ static Track ChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir,
|
|||
NPFFoundTargetData ftd;
|
||||
TileIndex src_tile = TILE_ADD(tile, TileOffsByDiagDir(ReverseDiagDir(enterdir)));
|
||||
Trackdir trackdir = GetVehicleTrackdir(v);
|
||||
assert(trackdir != INVALID_TRACKDIR); /* Check that we are not in a depot */
|
||||
assert(trackdir != INVALID_TRACKDIR); // Check that we are not in a depot
|
||||
|
||||
NPFFillWithOrderData(&fstd, v);
|
||||
|
||||
|
@ -731,7 +733,7 @@ static void ShipController(Vehicle *v)
|
|||
|
||||
/* Process station in the orderlist. */
|
||||
st = GetStation(v->current_order.dest);
|
||||
if (st->facilities & FACIL_DOCK) { /* ugly, ugly workaround for problem with ships able to drop off cargo at wrong stations */
|
||||
if (st->facilities & FACIL_DOCK) { // ugly, ugly workaround for problem with ships able to drop off cargo at wrong stations
|
||||
v->BeginLoading();
|
||||
v->current_order.flags &= OF_FULL_LOAD | OF_UNLOAD | OF_TRANSFER;
|
||||
v->current_order.flags |= OF_NON_STOP;
|
||||
|
@ -743,7 +745,7 @@ static void ShipController(Vehicle *v)
|
|||
MarkShipDirty(v);
|
||||
}
|
||||
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
|
||||
} else { /* leave stations without docks right aways */
|
||||
} else { // leave stations without docks right aways
|
||||
v->current_order.type = OT_LEAVESTATION;
|
||||
v->cur_order_index++;
|
||||
InvalidateVehicleOrder(v);
|
||||
|
@ -834,6 +836,7 @@ void ShipsYearlyLoop()
|
|||
|
||||
/** Build a ship.
|
||||
* @param tile tile of depot where ship is built
|
||||
* @param flags type of operation
|
||||
* @param p1 ship type being built (engine)
|
||||
* @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
|
||||
*/
|
||||
|
@ -930,6 +933,7 @@ int32 CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
/** Sell a ship.
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 vehicle ID to be sold
|
||||
* @param p2 unused
|
||||
*/
|
||||
|
@ -963,6 +967,7 @@ int32 CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
/** Start/Stop a ship.
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 ship ID to start/stop
|
||||
* @param p2 unused
|
||||
*/
|
||||
|
@ -1001,6 +1006,7 @@ int32 CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
/** Send a ship to the depot.
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 vehicle ID to send to the depot
|
||||
* @param p2 various bitmasked elements
|
||||
* - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
|
||||
|
@ -1073,6 +1079,7 @@ int32 CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
/** Refits a ship to the specified cargo type.
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 vehicle ID of the ship to refit
|
||||
* @param p2 various bitstuffed elements
|
||||
* - p2 = (bit 0-7) - the new cargo type to refit to (p2 & 0xFF)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file ship_gui.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "debug.h"
|
||||
|
@ -32,7 +34,7 @@ static void ShipDetailsWndProc(Window *w, WindowEvent *e)
|
|||
StringID str;
|
||||
|
||||
SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
|
||||
// disable service-scroller when interval is set to disabled
|
||||
/* disable service-scroller when interval is set to disabled */
|
||||
SetWindowWidgetDisabledState(w, 5, !_patches.servint_ships);
|
||||
SetWindowWidgetDisabledState(w, 6, !_patches.servint_ships);
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file signs.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "table/strings.h"
|
||||
|
@ -30,6 +32,7 @@ DEFINE_OLD_POOL(Sign, Sign, SignPoolNewBlock, NULL)
|
|||
/**
|
||||
*
|
||||
* Update the coordinate of one sign
|
||||
* @param si Pointer to the Sign
|
||||
*
|
||||
*/
|
||||
static void UpdateSignVirtCoords(Sign *si)
|
||||
|
@ -97,6 +100,10 @@ static Sign *AllocateSign()
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a sign placed on the map
|
||||
* @param si Pointer to the Sign to remove
|
||||
*/
|
||||
void DestroySign(Sign *si)
|
||||
{
|
||||
DeleteName(si->str);
|
||||
|
@ -107,6 +114,7 @@ void DestroySign(Sign *si)
|
|||
* no effect whatsoever except for the colour the sign gets for easy recognition,
|
||||
* but everybody is able to rename/remove it.
|
||||
* @param tile tile to place sign at
|
||||
* @param flags type of operation
|
||||
* @param p1 unused
|
||||
* @param p2 unused
|
||||
*/
|
||||
|
@ -142,8 +150,10 @@ int32 CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
* the user wanted to delete it. So delete it. Ownership of signs
|
||||
* has no meaning/effect whatsoever except for eyecandy
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 index of the sign to be renamed/removed
|
||||
* @param p2 unused
|
||||
* @return 0 if succesfull, otherwise CMD_ERROR
|
||||
*/
|
||||
int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||
{
|
||||
|
@ -175,7 +185,7 @@ int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
/* Free the name, because we did not assign it yet */
|
||||
DeleteName(str);
|
||||
}
|
||||
} else { /* Delete sign */
|
||||
} else { // Delete sign
|
||||
if (flags & DC_EXEC) {
|
||||
Sign *si = GetSign(p1);
|
||||
|
||||
|
@ -191,9 +201,11 @@ int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Callback function that is called after a sign is placed
|
||||
*
|
||||
* @param success of the operation
|
||||
* @param tile unused
|
||||
* @param p1 unused
|
||||
* @param p2 unused
|
||||
*/
|
||||
void CcPlaceSign(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
||||
{
|
||||
|
@ -207,7 +219,7 @@ void CcPlaceSign(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
|||
*
|
||||
* PlaceProc function, called when someone pressed the button if the
|
||||
* sign-tool is selected
|
||||
*
|
||||
* @param tile on which to place the sign
|
||||
*/
|
||||
void PlaceProc_Sign(TileIndex tile)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file signs.h */
|
||||
|
||||
#ifndef SIGNS_H
|
||||
#define SIGNS_H
|
||||
|
||||
|
@ -62,7 +64,7 @@ VARDEF bool _sign_sort_dirty;
|
|||
void UpdateAllSignVirtCoords();
|
||||
void PlaceProc_Sign(TileIndex tile);
|
||||
|
||||
/* misc.c */
|
||||
/* misc.cpp */
|
||||
void ShowRenameSignWindow(const Sign *si);
|
||||
|
||||
void ShowSignList();
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file signs_gui.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "table/strings.h"
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file slope.h */
|
||||
|
||||
#ifndef SLOPE_H
|
||||
#define SLOPE_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file smallmap_gui.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "functions.h"
|
||||
|
@ -332,13 +334,13 @@ static void DrawSmallMapStuff(Pixel *dst, uint xc, uint yc, int pitch, int reps,
|
|||
Pixel *dst_ptr_end = _screen.dst_ptr + _screen.width * _screen.height - _screen.width;
|
||||
|
||||
do {
|
||||
// check if the tile (xc,yc) is within the map range
|
||||
/* check if the tile (xc,yc) is within the map range */
|
||||
if (xc < MapMaxX() && yc < MapMaxY()) {
|
||||
// check if the dst pointer points to a pixel inside the screen buffer
|
||||
/* check if the dst pointer points to a pixel inside the screen buffer */
|
||||
if (dst > _screen.dst_ptr && dst < dst_ptr_end)
|
||||
WRITE_PIXELS_OR(dst, proc(TileXY(xc, yc)) & mask);
|
||||
}
|
||||
// switch to next tile in the column
|
||||
/* switch to next tile in the column */
|
||||
} while (xc++, yc++, dst += pitch, --reps != 0);
|
||||
}
|
||||
|
||||
|
@ -454,7 +456,7 @@ static inline uint32 GetSmallMapRoutesPixels(TileIndex tile)
|
|||
default: bits = MKCOLOR(0xFFFFFFFF); break;
|
||||
}
|
||||
} else {
|
||||
// ground color
|
||||
/* ground color */
|
||||
bits = ApplyMask(MKCOLOR(0x54545454), &_smallmap_contours_andor[t]);
|
||||
}
|
||||
return bits;
|
||||
|
@ -693,7 +695,7 @@ skip_column:
|
|||
FOR_ALL_VEHICLES(v) {
|
||||
if (v->type != VEH_SPECIAL &&
|
||||
(v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) == 0) {
|
||||
// Remap into flat coordinates.
|
||||
/* Remap into flat coordinates. */
|
||||
Point pt = RemapCoords(
|
||||
v->x_pos / TILE_SIZE - WP(w,smallmap_d).scroll_x / TILE_SIZE, // divide each one separately because (a-b)/c != a/c-b/c in integer world
|
||||
v->y_pos / TILE_SIZE - WP(w,smallmap_d).scroll_y / TILE_SIZE, // dtto
|
||||
|
@ -701,32 +703,32 @@ skip_column:
|
|||
x = pt.x;
|
||||
y = pt.y;
|
||||
|
||||
// Check if y is out of bounds?
|
||||
/* Check if y is out of bounds? */
|
||||
y -= dpi->top;
|
||||
if (!IS_INT_INSIDE(y, 0, dpi->height)) continue;
|
||||
|
||||
// Default is to draw both pixels.
|
||||
/* Default is to draw both pixels. */
|
||||
skip = false;
|
||||
|
||||
// Offset X coordinate
|
||||
/* Offset X coordinate */
|
||||
x -= WP(w,smallmap_d).subscroll + 3 + dpi->left;
|
||||
|
||||
if (x < 0) {
|
||||
// if x+1 is 0, that means we're on the very left edge,
|
||||
// and should thus only draw a single pixel
|
||||
/* if x+1 is 0, that means we're on the very left edge,
|
||||
* and should thus only draw a single pixel */
|
||||
if (++x != 0) continue;
|
||||
skip = true;
|
||||
} else if (x >= dpi->width - 1) {
|
||||
// Check if we're at the very right edge, and if so draw only a single pixel
|
||||
/* Check if we're at the very right edge, and if so draw only a single pixel */
|
||||
if (x != dpi->width - 1) continue;
|
||||
skip = true;
|
||||
}
|
||||
|
||||
// Calculate pointer to pixel and the color
|
||||
/* Calculate pointer to pixel and the color */
|
||||
ptr = dpi->dst_ptr + y * dpi->pitch + x;
|
||||
color = (type == 1) ? _vehicle_type_colors[v->type] : 0xF;
|
||||
|
||||
// And draw either one or two pixels depending on clipping
|
||||
/* And draw either one or two pixels depending on clipping */
|
||||
ptr[0] = color;
|
||||
if (!skip) ptr[1] = color;
|
||||
}
|
||||
|
@ -737,7 +739,7 @@ skip_column:
|
|||
const Town *t;
|
||||
|
||||
FOR_ALL_TOWNS(t) {
|
||||
// Remap the town coordinate
|
||||
/* Remap the town coordinate */
|
||||
Point pt = RemapCoords(
|
||||
(int)(TileX(t->xy) * TILE_SIZE - WP(w, smallmap_d).scroll_x) / TILE_SIZE,
|
||||
(int)(TileY(t->xy) * TILE_SIZE - WP(w, smallmap_d).scroll_y) / TILE_SIZE,
|
||||
|
@ -745,23 +747,23 @@ skip_column:
|
|||
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
|
||||
/* 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 < dpi->top + dpi->height) {
|
||||
// And draw it.
|
||||
/* And draw it. */
|
||||
SetDParam(0, t->index);
|
||||
DrawString(x, y, STR_2056, 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draw map indicators
|
||||
/* Draw map indicators */
|
||||
{
|
||||
Point pt;
|
||||
|
||||
// Find main viewport.
|
||||
/* Find main viewport. */
|
||||
vp = FindWindowById(WC_MAIN_WINDOW,0)->viewport;
|
||||
|
||||
pt = RemapCoords(WP(w, smallmap_d).scroll_x, WP(w, smallmap_d).scroll_y, 0);
|
||||
|
@ -1033,7 +1035,7 @@ static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
|
|||
int x = WP(w, vp_d).scrollpos_x; // Where is the main looking at
|
||||
int y = WP(w, vp_d).scrollpos_y;
|
||||
|
||||
// set this view to same location. Based on the center, adjusting for zoom
|
||||
/* set this view to same location. Based on the center, adjusting for zoom */
|
||||
WP(w2, vp_d).scrollpos_x = x - (w2->viewport->virtual_width - w->viewport->virtual_width) / 2;
|
||||
WP(w2, vp_d).scrollpos_y = y - (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
|
||||
} break;
|
||||
|
@ -1094,18 +1096,18 @@ void ShowExtraViewPortWindow()
|
|||
Window *w, *v;
|
||||
int i = 0;
|
||||
|
||||
// find next free window number for extra viewport
|
||||
/* find next free window number for extra viewport */
|
||||
while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != NULL) i++;
|
||||
|
||||
w = AllocateWindowDescFront(&_extra_view_port_desc, i);
|
||||
if (w != NULL) {
|
||||
int x, y;
|
||||
// the main window with the main view
|
||||
/* the main window with the main view */
|
||||
v = FindWindowById(WC_MAIN_WINDOW, 0);
|
||||
// New viewport start ats (zero,zero)
|
||||
/* 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)
|
||||
/* center on same place as main window (zoom is maximum, no adjustment needed) */
|
||||
x = WP(v, vp_d).scrollpos_x;
|
||||
y = WP(v, vp_d).scrollpos_y;
|
||||
WP(w, vp_d).scrollpos_x = x + (v->viewport->virtual_width - (294)) / 2;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file sound.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "functions.h"
|
||||
|
@ -51,12 +53,12 @@ static void OpenBankFile(const char *filename)
|
|||
|
||||
FioSeekTo(fe->file_offset, SEEK_SET);
|
||||
|
||||
// Check for special case, see else case
|
||||
/* Check for special case, see else case */
|
||||
FioReadBlock(name, FioReadByte()); // Read the name of the sound
|
||||
if (strcmp(name, "Corrupt sound") != 0) {
|
||||
FioSeekTo(12, SEEK_CUR); // Skip past RIFF header
|
||||
|
||||
// Read riff tags
|
||||
/* Read riff tags */
|
||||
for (;;) {
|
||||
uint32 tag = FioReadDword();
|
||||
uint32 size = FioReadDword();
|
||||
|
@ -130,7 +132,7 @@ bool SoundInitialize(const char *filename)
|
|||
return true;
|
||||
}
|
||||
|
||||
// Low level sound player
|
||||
/* Low level sound player */
|
||||
static void StartSound(uint sound, int panning, uint volume)
|
||||
{
|
||||
MixerChannel *mc;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file sound.h */
|
||||
|
||||
#ifndef SOUND_H
|
||||
#define SOUND_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file sprite.h */
|
||||
|
||||
#ifndef SPRITE_H
|
||||
#define SPRITE_H
|
||||
|
||||
|
@ -40,7 +42,7 @@ struct DrawBuildingsTileStruct {
|
|||
byte draw_proc; /* this allows to specify a special drawing procedure.*/
|
||||
};
|
||||
|
||||
// Iterate through all DrawTileSeqStructs in DrawTileSprites.
|
||||
/** Iterate through all DrawTileSeqStructs in DrawTileSprites. */
|
||||
#define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++)
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file spritechache.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "debug.h"
|
||||
|
@ -237,7 +239,7 @@ static uint32 GetSpriteCacheUsage()
|
|||
|
||||
void IncreaseSpriteLRU()
|
||||
{
|
||||
// Increase all LRU values
|
||||
/* Increase all LRU values */
|
||||
if (_sprite_lru_counter > 16384) {
|
||||
SpriteID i;
|
||||
|
||||
|
@ -256,15 +258,15 @@ void IncreaseSpriteLRU()
|
|||
_sprite_lru_counter = 0;
|
||||
}
|
||||
|
||||
// Compact sprite cache every now and then.
|
||||
/* Compact sprite cache every now and then. */
|
||||
if (++_compact_cache_counter >= 740) {
|
||||
CompactSpriteCache();
|
||||
_compact_cache_counter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Called when holes in the sprite cache should be removed.
|
||||
// That is accomplished by moving the cached data.
|
||||
/** Called when holes in the sprite cache should be removed.
|
||||
* That is accomplished by moving the cached data. */
|
||||
static void CompactSpriteCache()
|
||||
{
|
||||
MemBlock *s;
|
||||
|
@ -277,26 +279,26 @@ static void CompactSpriteCache()
|
|||
MemBlock temp;
|
||||
SpriteID i;
|
||||
|
||||
// Since free blocks are automatically coalesced, this should hold true.
|
||||
/* Since free blocks are automatically coalesced, this should hold true. */
|
||||
assert(!(next->size & S_FREE_MASK));
|
||||
|
||||
// If the next block is the sentinel block, we can safely return
|
||||
/* If the next block is the sentinel block, we can safely return */
|
||||
if (next->size == 0)
|
||||
break;
|
||||
|
||||
// Locate the sprite belonging to the next pointer.
|
||||
/* Locate the sprite belonging to the next pointer. */
|
||||
for (i = 0; GetSpriteCache(i)->ptr != next->data; i++) {
|
||||
assert(i != _spritecache_items);
|
||||
}
|
||||
|
||||
GetSpriteCache(i)->ptr = s->data; // Adjust sprite array entry
|
||||
// Swap this and the next block
|
||||
/* Swap this and the next block */
|
||||
temp = *s;
|
||||
memmove(s, next, next->size);
|
||||
s = NextBlock(s);
|
||||
*s = temp;
|
||||
|
||||
// Coalesce free blocks
|
||||
/* Coalesce free blocks */
|
||||
while (NextBlock(s)->size & S_FREE_MASK) {
|
||||
s->size += NextBlock(s)->size & ~S_FREE_MASK;
|
||||
}
|
||||
|
@ -324,18 +326,18 @@ static void DeleteEntryFromSpriteCache()
|
|||
}
|
||||
}
|
||||
|
||||
// Display an error message and die, in case we found no sprite at all.
|
||||
// This shouldn't really happen, unless all sprites are locked.
|
||||
/* Display an error message and die, in case we found no sprite at all.
|
||||
* This shouldn't really happen, unless all sprites are locked. */
|
||||
if (best == (uint)-1)
|
||||
error("Out of sprite memory");
|
||||
|
||||
// Mark the block as free (the block must be in use)
|
||||
/* Mark the block as free (the block must be in use) */
|
||||
s = (MemBlock*)GetSpriteCache(best)->ptr - 1;
|
||||
assert(!(s->size & S_FREE_MASK));
|
||||
s->size |= S_FREE_MASK;
|
||||
GetSpriteCache(best)->ptr = NULL;
|
||||
|
||||
// And coalesce adjacent free blocks
|
||||
/* And coalesce adjacent free blocks */
|
||||
for (s = _spritecache_ptr; s->size != 0; s = NextBlock(s)) {
|
||||
if (s->size & S_FREE_MASK) {
|
||||
while (NextBlock(s)->size & S_FREE_MASK) {
|
||||
|
@ -364,10 +366,10 @@ static void* AllocSprite(size_t mem_req)
|
|||
* big enough for an additional free block? */
|
||||
if (cur_size == mem_req ||
|
||||
cur_size >= mem_req + sizeof(MemBlock)) {
|
||||
// Set size and in use
|
||||
/* Set size and in use */
|
||||
s->size = mem_req;
|
||||
|
||||
// Do we need to inject a free block too?
|
||||
/* Do we need to inject a free block too? */
|
||||
if (cur_size != mem_req) {
|
||||
NextBlock(s)->size = (cur_size - mem_req) | S_FREE_MASK;
|
||||
}
|
||||
|
@ -377,7 +379,7 @@ static void* AllocSprite(size_t mem_req)
|
|||
}
|
||||
}
|
||||
|
||||
// Reached sentinel, but no block found yet. Delete some old entry.
|
||||
/* Reached sentinel, but no block found yet. Delete some old entry. */
|
||||
DeleteEntryFromSpriteCache();
|
||||
}
|
||||
}
|
||||
|
@ -392,12 +394,12 @@ const void *GetRawSprite(SpriteID sprite)
|
|||
|
||||
sc = GetSpriteCache(sprite);
|
||||
|
||||
// Update LRU
|
||||
/* Update LRU */
|
||||
sc->lru = ++_sprite_lru_counter;
|
||||
|
||||
p = sc->ptr;
|
||||
|
||||
// Load the sprite, if it is not loaded, yet
|
||||
/* Load the sprite, if it is not loaded, yet */
|
||||
if (p == NULL) p = ReadSprite(sc, sprite);
|
||||
return p;
|
||||
}
|
||||
|
@ -405,12 +407,12 @@ const void *GetRawSprite(SpriteID sprite)
|
|||
|
||||
void GfxInitSpriteMem()
|
||||
{
|
||||
// initialize sprite cache heap
|
||||
/* initialize sprite cache heap */
|
||||
if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)malloc(SPRITE_CACHE_SIZE);
|
||||
|
||||
// A big free block
|
||||
/* A big free block */
|
||||
_spritecache_ptr->size = (SPRITE_CACHE_SIZE - sizeof(MemBlock)) | S_FREE_MASK;
|
||||
// Sentinel block (identified by size == 0)
|
||||
/* Sentinel block (identified by size == 0) */
|
||||
NextBlock(_spritecache_ptr)->size = 0;
|
||||
|
||||
/* Reset the spritecache 'pool' */
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file spritecache.h */
|
||||
|
||||
#ifndef SPRITECACHE_H
|
||||
#define SPRITECACHE_H
|
||||
|
||||
|
|
|
@ -55,12 +55,12 @@ Station::Station(TileIndex tile)
|
|||
}
|
||||
|
||||
/**
|
||||
* Clean up a station by clearing vehicle orders and invalidating windows.
|
||||
* Aircraft-Hangar orders need special treatment here, as the hangars are
|
||||
* actually part of a station (tiletype is STATION), but the order type
|
||||
* is OT_GOTO_DEPOT.
|
||||
* @param st Station to be deleted
|
||||
*/
|
||||
* Clean up a station by clearing vehicle orders and invalidating windows.
|
||||
* Aircraft-Hangar orders need special treatment here, as the hangars are
|
||||
* actually part of a station (tiletype is STATION), but the order type
|
||||
* is OT_GOTO_DEPOT.
|
||||
* @param st Station to be deleted
|
||||
*/
|
||||
Station::~Station()
|
||||
{
|
||||
DEBUG(station, cDebugCtorLevel, "I-%3d", index);
|
||||
|
@ -106,7 +106,7 @@ void Station::operator delete(void *p, int st_idx)
|
|||
}
|
||||
|
||||
/** Called when new facility is built on the station. If it is the first facility
|
||||
* it initializes also 'xy' and 'random_bits' members */
|
||||
* it initializes also 'xy' and 'random_bits' members */
|
||||
void Station::AddFacility(byte new_facility_bit, TileIndex facil_xy)
|
||||
{
|
||||
if (facilities == 0) {
|
||||
|
@ -182,7 +182,7 @@ bool Station::TileBelongsToRailStation(TileIndex tile) const
|
|||
/** Obtain the length of a platform
|
||||
* @pre tile must be a railway station tile
|
||||
* @param tile A tile that contains the platform in question
|
||||
* @returns The length of the platform
|
||||
* @return The length of the platform
|
||||
*/
|
||||
uint Station::GetPlatformLength(TileIndex tile) const
|
||||
{
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file station.h */
|
||||
|
||||
#ifndef STATION_H
|
||||
#define STATION_H
|
||||
|
||||
|
@ -82,8 +84,8 @@ protected:
|
|||
|
||||
struct StationSpecList {
|
||||
const StationSpec *spec;
|
||||
uint32 grfid; /// GRF ID of this custom station
|
||||
uint8 localidx; /// Station ID within GRF of station
|
||||
uint32 grfid; ///< GRF ID of this custom station
|
||||
uint8 localidx; ///< Station ID within GRF of station
|
||||
};
|
||||
|
||||
/** StationRect - used to track station spread out rectangle - cheaper than scanning whole map */
|
||||
|
@ -142,7 +144,7 @@ struct Station {
|
|||
byte facilities;
|
||||
byte airport_type;
|
||||
|
||||
// trainstation width/height
|
||||
/* trainstation width/height */
|
||||
byte trainst_w, trainst_h;
|
||||
|
||||
/** List of custom stations (StationSpecs) allocated to the station */
|
||||
|
@ -151,7 +153,7 @@ struct Station {
|
|||
|
||||
Date build_date;
|
||||
|
||||
uint64 airport_flags; /// stores which blocks on the airport are taken. was 16 bit earlier on, then 32
|
||||
uint64 airport_flags; ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32
|
||||
StationID index;
|
||||
|
||||
byte last_vehicle_type;
|
||||
|
|
|
@ -118,7 +118,7 @@ static uint FindCatchmentRadius(const Station* st)
|
|||
|
||||
static Station* GetStationAround(TileIndex tile, int w, int h, StationID closest_station)
|
||||
{
|
||||
// check around to see if there's any stations there
|
||||
/* check around to see if there's any stations there */
|
||||
BEGIN_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1))
|
||||
if (IsTileType(tile_cur, MP_STATION)) {
|
||||
StationID t = GetStationIndex(tile_cur);
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file station_gui.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "debug.h"
|
||||
|
@ -51,7 +53,8 @@ static StationSortListingTypeFunction StationRatingMaxSorter;
|
|||
* goes for the rating: at above 90% orso (224) it is also 'full'
|
||||
* Each cargo-bar is 16 pixels wide and 6 pixels high
|
||||
* Each rating 14 pixels wide and 1 pixel high and is 1 pixel below the cargo-bar
|
||||
* @param x,y X/Y coordinate to draw the box at
|
||||
* @param x coordinate to draw the box at
|
||||
* @param y coordinate to draw the box at
|
||||
* @param type Cargo type
|
||||
* @param amount Cargo amount
|
||||
* @param rating ratings data for that particular cargo */
|
||||
|
@ -230,7 +233,7 @@ static void BuildStationsList(plstations_d* sl, PlayerID owner, byte facilities,
|
|||
}
|
||||
}
|
||||
}
|
||||
//stations without waiting cargo
|
||||
/* stations without waiting cargo */
|
||||
if (num_waiting_cargo == 0 && include_empty) {
|
||||
station_sort[n++] = st;
|
||||
}
|
||||
|
@ -320,7 +323,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e)
|
|||
int cg_ofst;
|
||||
int x = 89;
|
||||
int y = 14;
|
||||
int xb = 2; // offset from left of widget
|
||||
int xb = 2; ///< offset from left of widget
|
||||
|
||||
uint i = 0;
|
||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||
|
@ -363,7 +366,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e)
|
|||
SetDParam(1, st->facilities);
|
||||
x = DrawString(xb, y, STR_3049_0, 0) + 5;
|
||||
|
||||
// show cargo waiting and station ratings
|
||||
/* show cargo waiting and station ratings */
|
||||
for (CargoID j = 0; j < NUM_CARGO; j++) {
|
||||
uint amount = GB(st->goods[j].waiting_acceptance, 0, 12);
|
||||
if (amount != 0) {
|
||||
|
@ -510,7 +513,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e)
|
|||
|
||||
case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */
|
||||
if (sl->sort_type != e->we.dropdown.index) {
|
||||
// value has changed -> resort
|
||||
/* value has changed -> resort */
|
||||
sl->sort_type = e->we.dropdown.index;
|
||||
station_sort.criteria = sl->sort_type;
|
||||
sl->flags |= SL_RESORT;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file station_map.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "station_map.h"
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file station_map.h */
|
||||
|
||||
#ifndef STATION_MAP_H
|
||||
#define STATION_MAP_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file stdfax.h */
|
||||
|
||||
#ifndef STDAFX_H
|
||||
#define STDAFX_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file string.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "functions.h"
|
||||
|
@ -123,7 +125,8 @@ void str_strip_colours(char *str)
|
|||
* not found, this is sufficient. If more, or general functionality is
|
||||
* needed, look to r7271 where it was removed because it was broken when
|
||||
* using certain locales: eg in Turkish the uppercase 'I' was converted to
|
||||
* '?', so just revert to the old functionality */
|
||||
* '?', so just revert to the old functionality
|
||||
* @param str string to convert */
|
||||
void strtolower(char *str)
|
||||
{
|
||||
for (; *str != '\0'; str++) *str = tolower(*str);
|
||||
|
|
34
src/string.h
34
src/string.h
|
@ -1,26 +1,28 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file string.h */
|
||||
|
||||
#ifndef STRING_H
|
||||
#define STRING_H
|
||||
|
||||
#include "macros.h"
|
||||
|
||||
/*
|
||||
* dst: destination buffer
|
||||
* src: string to copy/concatenate
|
||||
* size: size of the destination buffer
|
||||
* usage: ttd_strlcpy(dst, src, lengthof(dst));
|
||||
/**
|
||||
* usage ttd_strlcpy(dst, src, lengthof(dst));
|
||||
* @param dst destination buffer
|
||||
* @param src string to copy/concatenate
|
||||
* @param size size of the destination buffer
|
||||
*/
|
||||
void ttd_strlcat(char *dst, const char *src, size_t size);
|
||||
void ttd_strlcpy(char *dst, const char *src, size_t size);
|
||||
|
||||
/*
|
||||
* dst: destination buffer
|
||||
* src: string to copy
|
||||
* last: pointer to the last element in the dst array
|
||||
* if NULL no boundary check is performed
|
||||
* returns a pointer to the terminating \0 in the destination buffer
|
||||
/**
|
||||
* usage: strecpy(dst, src, lastof(dst));
|
||||
* @param dst destination buffer
|
||||
* @param src string to copy
|
||||
* @param last pointer to the last element in the dst array
|
||||
* if NULL no boundary check is performed
|
||||
* @return a pointer to the terminating \0 in the destination buffer
|
||||
*/
|
||||
char* strecat(char* dst, const char* src, const char* last);
|
||||
char* strecpy(char* dst, const char* src, const char* last);
|
||||
|
@ -38,9 +40,9 @@ void str_strip_colours(char *str);
|
|||
* Valid filter types for IsValidChar.
|
||||
*/
|
||||
enum CharSetFilter {
|
||||
CS_ALPHANUMERAL, //! Both numeric and alphabetic and spaces and stuff
|
||||
CS_NUMERAL, //! Only numeric ones
|
||||
CS_ALPHA, //! Only alphabetic values
|
||||
CS_ALPHANUMERAL, ///< Both numeric and alphabetic and spaces and stuff
|
||||
CS_NUMERAL, ///< Only numeric ones
|
||||
CS_ALPHA, ///< Only alphabetic values
|
||||
};
|
||||
|
||||
/** Convert the given string to lowercase, only works with ASCII! */
|
||||
|
@ -105,6 +107,8 @@ static inline size_t Utf8CharLen(WChar c)
|
|||
* Return the length of an UTF-8 encoded value based on a single char. This
|
||||
* char should be the first byte of the UTF-8 encoding. If not, or encoding
|
||||
* is invalid, return value is 0
|
||||
* @param c char to query length of
|
||||
* @return requested size
|
||||
*/
|
||||
static inline size_t Utf8EncodedCharLen(char c)
|
||||
{
|
||||
|
@ -127,7 +131,7 @@ static inline bool IsUtf8Part(char c)
|
|||
/**
|
||||
* Retrieve the previous UNICODE character in an UTF-8 encoded string.
|
||||
* @param s char pointer pointing to (the first char of) the next character
|
||||
* @returns a pointer in 's' to the previous UNICODE character's first byte
|
||||
* @return a pointer in 's' to the previous UNICODE character's first byte
|
||||
* @note The function should not be used to determine the length of the previous
|
||||
* encoded char because it might be an invalid/corrupt start-sequence
|
||||
*/
|
||||
|
|
189
src/strings.cpp
189
src/strings.cpp
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file strings.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "currency.h"
|
||||
|
@ -37,7 +39,7 @@ static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv,
|
|||
static char *FormatString(char *buff, const char *str, const int32 *argv, uint casei, const char* last);
|
||||
|
||||
struct LanguagePack {
|
||||
uint32 ident;
|
||||
uint32 ident; // 32-bits identifier
|
||||
uint32 version; // 32-bits of auto generated version info which is basically a hash of strings.h
|
||||
char name[32]; // the international name of this language
|
||||
char own_name[32]; // the localized name of this language
|
||||
|
@ -45,16 +47,16 @@ struct LanguagePack {
|
|||
uint16 offsets[32]; // the offsets
|
||||
byte plural_form; // how to compute plural forms
|
||||
byte pad[3]; // pad header to be a multiple of 4
|
||||
char data[VARARRAY_SIZE];
|
||||
char data[VARARRAY_SIZE]; // list of strings
|
||||
};
|
||||
|
||||
static char **_langpack_offs;
|
||||
static LanguagePack *_langpack;
|
||||
static uint _langtab_num[32]; // Offset into langpack offs
|
||||
static uint _langtab_num[32]; // Offset into langpack offs
|
||||
static uint _langtab_start[32]; // Offset into langpack offs
|
||||
|
||||
|
||||
// Read an int64 from the argv array.
|
||||
/** Read an int64 from the argv array. */
|
||||
static inline int64 GetInt64(const int32 **argv)
|
||||
{
|
||||
int64 result;
|
||||
|
@ -65,14 +67,14 @@ static inline int64 GetInt64(const int32 **argv)
|
|||
return result;
|
||||
}
|
||||
|
||||
// Read an int32 from the argv array.
|
||||
/** Read an int32 from the argv array. */
|
||||
static inline int32 GetInt32(const int32 **argv)
|
||||
{
|
||||
assert(argv);
|
||||
return *(*argv)++;
|
||||
}
|
||||
|
||||
// Read an array from the argv array.
|
||||
/** Read an array from the argv array. */
|
||||
static inline const int32 *GetArgvPtr(const int32 **argv, int n)
|
||||
{
|
||||
const int32 *result;
|
||||
|
@ -85,13 +87,13 @@ static inline const int32 *GetArgvPtr(const int32 **argv, int n)
|
|||
|
||||
#define NUM_BOUND_STRINGS 8
|
||||
|
||||
// Array to hold the bound strings.
|
||||
/* Array to hold the bound strings. */
|
||||
static const char *_bound_strings[NUM_BOUND_STRINGS];
|
||||
|
||||
// This index is used to implement a "round-robin" allocating of
|
||||
// slots for BindCString. NUM_BOUND_STRINGS slots are reserved.
|
||||
// Which means that after NUM_BOUND_STRINGS calls to BindCString,
|
||||
// the indices will be reused.
|
||||
/* This index is used to implement a "round-robin" allocating of
|
||||
* slots for BindCString. NUM_BOUND_STRINGS slots are reserved.
|
||||
* Which means that after NUM_BOUND_STRINGS calls to BindCString,
|
||||
* the indices will be reused. */
|
||||
static int _bind_index;
|
||||
|
||||
static const char *GetStringPtr(StringID string)
|
||||
|
@ -99,10 +101,16 @@ static const char *GetStringPtr(StringID string)
|
|||
return _langpack_offs[_langtab_start[string >> 11] + (string & 0x7FF)];
|
||||
}
|
||||
|
||||
// The highest 8 bits of string contain the "case index".
|
||||
// These 8 bits will only be set when FormatString wants to print
|
||||
// the string in a different case. No one else except FormatString
|
||||
// should set those bits, therefore string CANNOT be StringID, but uint32.
|
||||
/** The highest 8 bits of string contain the "case index".
|
||||
* These 8 bits will only be set when FormatString wants to print
|
||||
* the string in a different case. No one else except FormatString
|
||||
* should set those bits, therefore string CANNOT be StringID, but uint32.
|
||||
* @param buffr
|
||||
* @param string
|
||||
* @param argv
|
||||
* @param last
|
||||
* @return a formatted string of char
|
||||
*/
|
||||
static char *GetStringWithArgs(char *buffr, uint string, const int32 *argv, const char* last)
|
||||
{
|
||||
uint index = GB(string, 0, 11);
|
||||
|
@ -122,8 +130,8 @@ static char *GetStringWithArgs(char *buffr, uint string, const int32 *argv, cons
|
|||
return GetSpecialPlayerNameString(buffr, index - 0xE4, argv, last);
|
||||
break;
|
||||
|
||||
// User defined name
|
||||
case 15:
|
||||
/* User defined name */
|
||||
return GetName(buffr, index, last);
|
||||
|
||||
case 26:
|
||||
|
@ -147,8 +155,8 @@ static char *GetStringWithArgs(char *buffr, uint string, const int32 *argv, cons
|
|||
return FormatString(buffr, buff, argv, 0, last);
|
||||
|
||||
case 31:
|
||||
// dynamic strings. These are NOT to be passed through the formatter,
|
||||
// but passed through verbatim.
|
||||
/* dynamic strings. These are NOT to be passed through the formatter,
|
||||
* but passed through verbatim. */
|
||||
if (index < (STR_SPEC_USERSTRING & 0x7FF)) {
|
||||
return strecpy(buffr, _bound_strings[index], last);
|
||||
}
|
||||
|
@ -184,7 +192,8 @@ char *InlineString(char *buf, StringID string)
|
|||
* This function takes a C-string and allocates a temporary string ID.
|
||||
* The StringID of the bound string is valid until BindCString is called
|
||||
* another NUM_BOUND_STRINGS times. So be careful when using it.
|
||||
*
|
||||
* @param str temp string to add
|
||||
* @return the id of that temp string
|
||||
* @note formatting a DATE_TINY calls BindCString twice, thus reduces the
|
||||
* amount of 'user' bound strings by 2.
|
||||
* @todo rewrite the BindCString system to make the limit flexible and
|
||||
|
@ -198,7 +207,10 @@ StringID BindCString(const char *str)
|
|||
return idx + STR_SPEC_DYNSTRING;
|
||||
}
|
||||
|
||||
// This function is used to "bind" a C string to a OpenTTD dparam slot.
|
||||
/** This function is used to "bind" a C string to a OpenTTD dparam slot.
|
||||
* @param n slot of the string
|
||||
* @param str string to bind
|
||||
*/
|
||||
void SetDParamStr(uint n, const char *str)
|
||||
{
|
||||
SetDParam(n, BindCString(str));
|
||||
|
@ -331,10 +343,10 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, int64 n
|
|||
char* p;
|
||||
int j;
|
||||
|
||||
// multiply by exchange rate
|
||||
/* multiply by exchange rate */
|
||||
number *= spec->rate;
|
||||
|
||||
// convert from negative
|
||||
/* convert from negative */
|
||||
if (number < 0) {
|
||||
buff = strecpy(buff, "-", last);
|
||||
number = -number;
|
||||
|
@ -345,7 +357,7 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, int64 n
|
|||
* The only remaining value is 1 (suffix), so everything that is not 1 */
|
||||
if (spec->symbol_pos != 1) buff = strecpy(buff, spec->prefix, last);
|
||||
|
||||
// for huge numbers, compact the number into k or M
|
||||
/* for huge numbers, compact the number into k or M */
|
||||
if (compact) {
|
||||
if (number >= 1000000000) {
|
||||
number = (number + 500000) / 1000000;
|
||||
|
@ -356,7 +368,7 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, int64 n
|
|||
}
|
||||
}
|
||||
|
||||
// convert to ascii number and add commas
|
||||
/* convert to ascii number and add commas */
|
||||
p = endof(buf);
|
||||
*--p = '\0';
|
||||
j = 4;
|
||||
|
@ -381,63 +393,63 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, int64 n
|
|||
|
||||
static int DeterminePluralForm(int32 n)
|
||||
{
|
||||
// The absolute value determines plurality
|
||||
/* The absolute value determines plurality */
|
||||
if (n < 0) n = -n;
|
||||
|
||||
switch (_langpack->plural_form) {
|
||||
// Two forms, singular used for one only
|
||||
// Used in:
|
||||
// Danish, Dutch, English, German, Norwegian, Swedish, Estonian, Finnish,
|
||||
// Greek, Hebrew, Italian, Portuguese, Spanish, Esperanto
|
||||
/* Two forms, singular used for one only
|
||||
* Used in:
|
||||
* Danish, Dutch, English, German, Norwegian, Swedish, Estonian, Finnish,
|
||||
* Greek, Hebrew, Italian, Portuguese, Spanish, Esperanto */
|
||||
case 0:
|
||||
default:
|
||||
return n != 1;
|
||||
|
||||
// Only one form
|
||||
// Used in:
|
||||
// Hungarian, Japanese, Korean, Turkish
|
||||
/* Only one form
|
||||
* Used in:
|
||||
* Hungarian, Japanese, Korean, Turkish */
|
||||
case 1:
|
||||
return 0;
|
||||
|
||||
// Two forms, singular used for zero and one
|
||||
// Used in:
|
||||
// French, Brazilian Portuguese
|
||||
/* Two forms, singular used for zero and one
|
||||
* Used in:
|
||||
* French, Brazilian Portuguese */
|
||||
case 2:
|
||||
return n > 1;
|
||||
|
||||
// Three forms, special case for zero
|
||||
// Used in:
|
||||
// Latvian
|
||||
/* Three forms, special case for zero
|
||||
* Used in:
|
||||
* Latvian */
|
||||
case 3:
|
||||
return n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;
|
||||
|
||||
// Three forms, special case for one and two
|
||||
// Used in:
|
||||
// Gaelige (Irish)
|
||||
/* Three forms, special case for one and two
|
||||
* Used in:
|
||||
* Gaelige (Irish) */
|
||||
case 4:
|
||||
return n==1 ? 0 : n==2 ? 1 : 2;
|
||||
|
||||
// Three forms, special case for numbers ending in 1[2-9]
|
||||
// Used in:
|
||||
// Lithuanian
|
||||
/* Three forms, special case for numbers ending in 1[2-9]
|
||||
* Used in:
|
||||
* Lithuanian */
|
||||
case 5:
|
||||
return n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;
|
||||
|
||||
// Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4]
|
||||
// Used in:
|
||||
// Croatian, Czech, Russian, Slovak, Ukrainian
|
||||
/* Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4]
|
||||
* Used in:
|
||||
* Croatian, Czech, Russian, Slovak, Ukrainian */
|
||||
case 6:
|
||||
return n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
|
||||
|
||||
// Three forms, special case for one and some numbers ending in 2, 3, or 4
|
||||
// Used in:
|
||||
// Polish
|
||||
/* Three forms, special case for one and some numbers ending in 2, 3, or 4
|
||||
* Used in:
|
||||
* Polish */
|
||||
case 7:
|
||||
return n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
|
||||
|
||||
// Four forms, special case for one and all numbers ending in 02, 03, or 04
|
||||
// Used in:
|
||||
// Slovenian
|
||||
/* Four forms, special case for one and all numbers ending in 02, 03, or 04
|
||||
* Used in:
|
||||
* Slovenian */
|
||||
case 8:
|
||||
return n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;
|
||||
}
|
||||
|
@ -561,9 +573,9 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
break;
|
||||
|
||||
case SCC_CARGO_SHORT: { /* {SHORTCARGO} */
|
||||
// Short description of cargotypes. Layout:
|
||||
// 8-bit = cargo type
|
||||
// 16-bit = cargo count
|
||||
/* Short description of cargotypes. Layout:
|
||||
* 8-bit = cargo type
|
||||
* 16-bit = cargo count */
|
||||
StringID cargo_str = GetCargo(GetInt32(&argv))->units_volume;
|
||||
switch (cargo_str) {
|
||||
case STR_TONS: {
|
||||
|
@ -599,13 +611,13 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
} break;
|
||||
|
||||
case SCC_CURRENCY_COMPACT_64: { /* {CURRCOMPACT64} */
|
||||
// 64 bit compact currency-unit
|
||||
/* 64 bit compact currency-unit */
|
||||
buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last);
|
||||
break;
|
||||
}
|
||||
|
||||
case SCC_STRING1: { /* {STRING1} */
|
||||
// String that consumes ONE argument
|
||||
/* String that consumes ONE argument */
|
||||
uint str = modifier + GetInt32(&argv);
|
||||
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 1), last);
|
||||
modifier = 0;
|
||||
|
@ -613,7 +625,7 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
}
|
||||
|
||||
case SCC_STRING2: { /* {STRING2} */
|
||||
// String that consumes TWO arguments
|
||||
/* String that consumes TWO arguments */
|
||||
uint str = modifier + GetInt32(&argv);
|
||||
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 2), last);
|
||||
modifier = 0;
|
||||
|
@ -621,7 +633,7 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
}
|
||||
|
||||
case SCC_STRING3: { /* {STRING3} */
|
||||
// String that consumes THREE arguments
|
||||
/* String that consumes THREE arguments */
|
||||
uint str = modifier + GetInt32(&argv);
|
||||
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 3), last);
|
||||
modifier = 0;
|
||||
|
@ -629,7 +641,7 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
}
|
||||
|
||||
case SCC_STRING4: { /* {STRING4} */
|
||||
// String that consumes FOUR arguments
|
||||
/* String that consumes FOUR arguments */
|
||||
uint str = modifier + GetInt32(&argv);
|
||||
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 4), last);
|
||||
modifier = 0;
|
||||
|
@ -637,7 +649,7 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
}
|
||||
|
||||
case SCC_STRING5: { /* {STRING5} */
|
||||
// String that consumes FIVE arguments
|
||||
/* String that consumes FIVE arguments */
|
||||
uint str = modifier + GetInt32(&argv);
|
||||
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 5), last);
|
||||
modifier = 0;
|
||||
|
@ -653,11 +665,11 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
const Industry* i = GetIndustry(GetInt32(&argv));
|
||||
int32 args[2];
|
||||
|
||||
// industry not valid anymore?
|
||||
/* industry not valid anymore? */
|
||||
if (!IsValidIndustry(i)) break;
|
||||
|
||||
// First print the town name and the industry type name
|
||||
// The string STR_INDUSTRY_PATTERN controls the formatting
|
||||
/* First print the town name and the industry type name
|
||||
* The string STR_INDUSTRY_PATTERN controls the formatting */
|
||||
args[0] = i->town->index;
|
||||
args[1] = GetIndustrySpec(i->type)->name;
|
||||
buff = FormatString(buff, GetStringPtr(STR_INDUSTRY_FORMAT), args, modifier >> 24, last);
|
||||
|
@ -690,9 +702,9 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
}
|
||||
|
||||
case SCC_CARGO: { // {CARGO}
|
||||
// Layout now is:
|
||||
// 8bit - cargo type
|
||||
// 16-bit - cargo count
|
||||
/* Layout now is:
|
||||
* 8bit - cargo type
|
||||
* 16-bit - cargo count */
|
||||
CargoID cargo = GetInt32(&argv);
|
||||
StringID cargo_str = (cargo == CT_INVALID) ? (StringID)STR_8838_N_A : GetCargo(cargo)->quantifier;
|
||||
buff = GetStringWithArgs(buff, cargo_str, argv++, last);
|
||||
|
@ -748,17 +760,17 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
argv++;
|
||||
break;
|
||||
|
||||
// This sets up the gender for the string.
|
||||
// We just ignore this one. It's used in {G 0 Der Die Das} to determine the case.
|
||||
/* This sets up the gender for the string.
|
||||
* We just ignore this one. It's used in {G 0 Der Die Das} to determine the case. */
|
||||
case SCC_GENDER_INDEX: // {GENDER 0}
|
||||
str++;
|
||||
break;
|
||||
|
||||
case SCC_STRING: {// {STRING}
|
||||
uint str = modifier + GetInt32(&argv);
|
||||
// WARNING. It's prohibited for the included string to consume any arguments.
|
||||
// For included strings that consume argument, you should use STRING1, STRING2 etc.
|
||||
// To debug stuff you can set argv to NULL and it will tell you
|
||||
/* WARNING. It's prohibited for the included string to consume any arguments.
|
||||
* For included strings that consume argument, you should use STRING1, STRING2 etc.
|
||||
* To debug stuff you can set argv to NULL and it will tell you */
|
||||
buff = GetStringWithArgs(buff, str, argv, last);
|
||||
modifier = 0;
|
||||
break;
|
||||
|
@ -834,23 +846,23 @@ static char* FormatString(char* buff, const char* str, const int32* argv, uint c
|
|||
}
|
||||
|
||||
case SCC_SETCASE: { // {SETCASE}
|
||||
// This is a pseudo command, it's outputted when someone does {STRING.ack}
|
||||
// The modifier is added to all subsequent GetStringWithArgs that accept the modifier.
|
||||
/* This is a pseudo command, it's outputted when someone does {STRING.ack}
|
||||
* The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */
|
||||
modifier = (byte)*str++ << 24;
|
||||
break;
|
||||
}
|
||||
|
||||
case SCC_SWITCH_CASE: { // {Used to implement case switching}
|
||||
// <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT>
|
||||
// Each LEN is printed using 2 bytes in big endian order.
|
||||
/* <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT>
|
||||
* Each LEN is printed using 2 bytes in big endian order. */
|
||||
uint num = (byte)*str++;
|
||||
while (num) {
|
||||
if ((byte)str[0] == casei) {
|
||||
// Found the case, adjust str pointer and continue
|
||||
/* Found the case, adjust str pointer and continue */
|
||||
str += 3;
|
||||
break;
|
||||
}
|
||||
// Otherwise skip to the next case
|
||||
/* Otherwise skip to the next case */
|
||||
str += 3 + (str[1] << 8) + str[2];
|
||||
num--;
|
||||
}
|
||||
|
@ -1018,20 +1030,20 @@ static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv,
|
|||
return strecpy(buff, origin_songs_specs[GetInt32(&argv) - 1].song_name, last);
|
||||
}
|
||||
|
||||
// town name?
|
||||
/* town name? */
|
||||
if (IS_INT_INSIDE(ind - 6, 0, SPECSTR_TOWNNAME_LAST-SPECSTR_TOWNNAME_START + 1)) {
|
||||
buff = GetSpecialTownNameString(buff, ind - 6, GetInt32(&argv), last);
|
||||
return strecpy(buff, " Transport", last);
|
||||
}
|
||||
|
||||
// language name?
|
||||
/* language name? */
|
||||
if (IS_INT_INSIDE(ind, (SPECSTR_LANGUAGE_START - 0x70E4), (SPECSTR_LANGUAGE_END - 0x70E4) + 1)) {
|
||||
int i = ind - (SPECSTR_LANGUAGE_START - 0x70E4);
|
||||
return strecpy(buff,
|
||||
i == _dynlang.curr ? _langpack->own_name : _dynlang.ent[i].name, last);
|
||||
}
|
||||
|
||||
// resolution size?
|
||||
/* resolution size? */
|
||||
if (IS_INT_INSIDE(ind, (SPECSTR_RESOLUTION_START - 0x70E4), (SPECSTR_RESOLUTION_END - 0x70E4) + 1)) {
|
||||
int i = ind - (SPECSTR_RESOLUTION_START - 0x70E4);
|
||||
buff += snprintf(
|
||||
|
@ -1040,7 +1052,7 @@ static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv,
|
|||
return buff;
|
||||
}
|
||||
|
||||
// screenshot format name?
|
||||
/* screenshot format name? */
|
||||
if (IS_INT_INSIDE(ind, (SPECSTR_SCREENSHOT_START - 0x70E4), (SPECSTR_SCREENSHOT_END - 0x70E4) + 1)) {
|
||||
int i = ind - (SPECSTR_SCREENSHOT_START - 0x70E4);
|
||||
return strecpy(buff, GetScreenshotFormatDesc(i), last);
|
||||
|
@ -1050,7 +1062,10 @@ static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// remap a string ID from the old format to the new format
|
||||
/**
|
||||
* remap a string ID from the old format to the new format
|
||||
* @param s StringID that requires remapping
|
||||
* @return translated ID*/
|
||||
StringID RemapOldStringID(StringID s)
|
||||
{
|
||||
switch (s) {
|
||||
|
@ -1103,10 +1118,10 @@ bool ReadLanguagePack(int lang_index)
|
|||
tot_count += num;
|
||||
}
|
||||
|
||||
// Allocate offsets
|
||||
/* Allocate offsets */
|
||||
langpack_offs = MallocT<char*>(tot_count);
|
||||
|
||||
// Fill offsets
|
||||
/* Fill offsets */
|
||||
s = lang_pack->data;
|
||||
for (i = 0; i != tot_count; i++) {
|
||||
len = (byte)*s;
|
||||
|
@ -1133,7 +1148,7 @@ bool ReadLanguagePack(int lang_index)
|
|||
/** Determine the current charset based on the environment
|
||||
* First check some default values, after this one we passed ourselves
|
||||
* and if none exist return the value for $LANG
|
||||
* @param environment variable to check conditionally if default ones are not
|
||||
* @param param environment variable to check conditionally if default ones are not
|
||||
* set. Pass NULL if you don't want additional checks.
|
||||
* @return return string containing current charset, or NULL if not-determinable */
|
||||
const char *GetCurrentLocale(const char *param)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file strings.h */
|
||||
|
||||
#ifndef STRINGS_H
|
||||
#define STRINGS_H
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* $Id$ */
|
||||
|
||||
/** @file subsidy_gui.cpp */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "table/strings.h"
|
||||
|
|
Loading…
Reference in New Issue