Compare commits

...

28 Commits

Author SHA1 Message Date
rubidium 9df8a3bd4c (svn r9978) -Release 0.5.2. 2007-05-29 18:13:06 +00:00
rubidium 4f757bb914 (svn r9977) [0.5] -Prepare 0.5 branch for release of 0.5.2. 2007-05-29 18:02:14 +00:00
rubidium aafb49b3c4 (svn r9968) [0.5] -Backport from trunk (r9966):
- Fix: bridges and tunnels were not always removed on bankruptcy, thus leaving tunnels/bridges with an invalid owner that would crash the game when clicking with the query tool on them.
2007-05-28 22:11:42 +00:00
glx 4bbc264c72 (svn r9864) [0.5] -Codechange (win32): Remove references to MSLU and hide UNICODE notice for win9x users in installer 2007-05-17 19:47:04 +00:00
rubidium f042798507 (svn r9863) [0.5] -Backport from trunk (r9759, r9861):
- Feature: Add threading support for MorphOS (r9759)
- Fix: Null pointer dereference under MorphOS and AmigaOS (r9861)
2007-05-17 15:04:28 +00:00
rubidium 909edb84af (svn r9859) [0.5] -Prepare 0.5 branch for release of 0.5.2-RC1. 2007-05-16 21:41:34 +00:00
rubidium 906a606418 (svn r9858) [0.5] -Backport from trunk (r9771, r9856):
- Feature: Add password protected status to 'players' (network server) console command (r9771)
- Fix: Loading some TTDP savegames caused an instant assertion on loading (r9857)
2007-05-16 21:33:07 +00:00
rubidium 2c6a0e46a9 (svn r9856) [0.5] -Backport from trunk (r9855):
- Fix: Do not perform any commands on MP_VOID tiles [FS#779] (r9855)
2007-05-16 08:21:16 +00:00
rubidium 236237740a (svn r9854) [0.5] -Backport from trunk (r9715, r9724, r9774, r9796, r9811, r9847): language updates. 2007-05-15 23:32:50 +00:00
rubidium 3a195edcad (svn r9853) [0.5] -Backport from trunk (r9837, r9827, r9785, r9775, r9758, r9716):
- Feature: Add server_lang in [network] section of openttd.cfg (r9716)
- Fix: [NewGRF] Catch occurance of division-by-zero in varaction handling (r9837)
- Fix: Only non dedicated servers cannot have 0 players [FS#765] (r9785)
- Fix: Remove arbitrary limit on length of NewGRF strings (r9775)
- Fix: [NewGRF] Ignore axis-bit of station tile layouts [FS#756] (r9758)
2007-05-15 22:02:32 +00:00
glx c50cf74889 (svn r9852) [0.5] -Backport from trunk (r9728, r9834):
- Fix: [win32] Dead key and open/close console. (r9728)
- Add: win9x check in win32 builds
2007-05-15 22:00:41 +00:00
rubidium 4b6d1f9027 (svn r9851) [0.5] -Backport from trunk (r9731, r9741, r9743, r9753, r9757):
- Fix: when you have closed the "Load game"/"New game" windows which you started from the "start server" menu, you shouldn't start a server when starting a new game [SF#1244842] (r9757)
- Fix: Trains were lost after autorenewal/autoreplace [FS#732] (r9753)
- Fix: Stop flooded towns from building roads on water [FS#598] (r9743)
- Fix: Station signs were not resized when the language changed [FS#672] (r9741)
- Fix: In news history, newlines were not replaced with spaces [FS#677] (r9731)
2007-05-15 21:42:27 +00:00
rubidium c9c087e858 (svn r9849) [0.5] -Backport from trunk (r9693, r9694, r9697, r9718, r9719, r9725 and 9726):
- Fix: Crash when destroying bridge with train partially on it [FS#738] (r9726)
- Fix: Planes made a 270 degree turn instead of a 90 degree turn on the southern runway of the intercontinental airport [FS#743] (r9725)
- Fix: In-game private messages did not work for clients with high ClientIDs (r9719)
- Fix: Do not allow building of rail vehicles whose railtype is not available (r9718)
- Fix: [YAPF] The guessed path was ignored for ships [FS#736] (r9694)
2007-05-15 21:24:18 +00:00
rubidium ac66e29910 (svn r9698) [0.5] -Prepare 0.5 branch for release of 0.5.1. 2007-04-20 19:45:38 +00:00
rubidium b7749bde91 (svn r9695) [0.5] -Backport from trunk (r9668, r9680, r9681, r9687): language updates. 2007-04-20 19:40:07 +00:00
rubidium 635eff5e51 (svn r9660) [0.5] -Prepare 0.5 branch for release of 0.5.1-RC3. 2007-04-17 20:11:11 +00:00
truelight 4cd6870777 (svn r9659) [0.5] -Fix r9656: missed 2 hunks in last commit 2007-04-17 19:08:08 +00:00
truelight 54cfb12334 (svn r9657) [0.5] -Backport from trunk (r9585, r9613, r9615, r9633, r9640, r9649):
- Language updates (r9585, r9613, r9615, r9633, r9640, r9649)
2007-04-17 19:05:47 +00:00
rubidium 2d746c52c8 (svn r9656) [0.5] -Backport from trunk (r9602, r9641, r9647):
- Fix: Building rail on steep slopes ignored build_on_slopes patch setting (r9602)
- Fix: namegen.cpp was not UTF-8, which caused artefacts in Finnish town names (r9641)
- Fix: Select "Custom" in the difficulty settings gui when changing a setting [FS#733] (r9647)
2007-04-17 18:09:12 +00:00
truelight cb001e017a (svn r9589) [0.5] -Fix (r9587, r9588): this time I really do hope turkish.txt went okay... 2007-04-10 13:12:15 +00:00
truelight 9bee2fc641 (svn r9588) [0.5] -Fix r9587: something went wrong in turkish.txt update 2007-04-10 13:04:44 +00:00
truelight 7399e107e1 (svn r9587) [0.5] -Backport from trunk (r9585):
- Language updates (r9585)
2007-04-10 13:02:01 +00:00
truelight 70db6b3f40 (svn r9586) [0.5] -Backport from trunk (r9525, r9527, r9547, r9548, r9570, r9571, r9572, r9576):
- Language updates (r9525, r9527, r9547, r9548, r9570, r9571, r9572, r9576)
2007-04-10 12:58:05 +00:00
truelight ac6aefa07b (svn r9584) [0.5] -Backport frmo trunk (r9542, r9565, r9573):
- Fix: when checking for no vehicle on ground-tiles, don't take into account vehicles that are in the air (r9542)
- Feature: add list_patches to console commands; shows all patches and values (r9565)
- Fix: enclose settings names containing spaces with quotes (r9573)
2007-04-10 09:57:35 +00:00
truelight c04f0af19b (svn r9583) [0.5] -Backport from trunk (r9529, r9533, r9540, r9541):
- Fix: when 2 clients joined together, the second asserted on the NewCompany command of the first (r9529)
- Fix: when company is removed, sell all shares he has first, then sell all shares other people might have in this company (r9533)
- Fix: bankrupt AIs no longer buy over themselves (also added safeguards to prevent in future) (r9540 / r9541)
2007-04-10 09:49:41 +00:00
truelight c8c8667dc8 (svn r9582) [0.5] -Backport from trunk (r9425, r9437, r9455, r9519):
- Fix: housekeeping in convert rail functions (r9425)
- Fix: dedicated server crashed when the y part of the resolution was less than 10 (r9437)
- Fix: values of diff_custom and snow_line in .cfg weren't checked properly (r9455)
- Fix: free the malloc'd variable, not the pointer to that variable (r9519)
2007-04-10 09:40:36 +00:00
belugas a0688e8d85 (svn r9471) [0.5] -Backport from trunk (r9467 & r9469):
Reset the whole currency array while preserving custom one.  Also, max data of to_euro is now 300, not 1000, disabling any proper loading of the patch setting
2007-03-26 00:20:22 +00:00
truelight c85022e3db (svn r9430) [0.5] -Backport r9429: when deleting a vehicle which has shared orders with one more vehicle and no orders, segfaulted 2007-03-24 15:16:41 +00:00
74 changed files with 3137 additions and 2623 deletions
+1 -8
View File
@@ -268,14 +268,7 @@ ENDIAN_CHECK=endian_check$(EXE)
STRGEN=strgen/strgen$(EXE)
OSXAPP="OpenTTD.app"
ifdef RELEASE
REV:=$(RELEASE)
else
ifeq ($(shell if test -d .svn; then echo 1; fi), 1)
REV_MODIFIED := $(shell svnversion . | sed -n 's/.*\(M\).*/\1/p' )
REV := $(shell LC_ALL=C svn info | awk '/^URL:.*branch/ { BRANCH="-"a[split($$2, a, "/")] } /^Last Changed Rev:/ { REV="r"$$4"$(REV_MODIFIED)" } END { print REV BRANCH }')
endif
endif
REV := 0.5.2
# define flag to use for -lrt (some OSes overwrites this later for compatibility)
ifndef LRT
+1 -1
View File
@@ -3838,7 +3838,7 @@ static void AiHandleTakeover(Player *p)
if (best_pl->player_money >> 1 >= p->bankrupt_value) {
// Computer wants to buy it.
old_p = _current_player;
_current_player = p->index;
_current_player = best_pl->index;
DoCommand(0, old_p, 0, DC_EXEC, CMD_BUY_COMPANY);
_current_player = old_p;
}
+1 -1
View File
@@ -261,7 +261,7 @@ static const AirportMovingData _airport_moving_data_intercontinental[77] = {
{ 136, 96, AMED_HELI_LOWER, 0 }, // 56 Land in front of hangar2
{ 126, 104, 0, 3 }, // 57 Outway 2
{ 136, 136, 0, 1 }, // 58 Airport OUTWAY 2
{ 136, 152, AMED_EXACTPOS, 5 }, // 59 Accelerate to end of runway2
{ 136, 152, AMED_EXACTPOS, 1 }, // 59 Accelerate to end of runway2
{ 16, 152, AMED_NOSPDCLAMP, 0 }, // 60 Release control of runway2, for smoother movement
{ 20, 152, AMED_NOSPDCLAMP, 0 }, // 61 End of runway2
{ -56, 152, AMED_NOSPDCLAMP | AMED_TAKEOFF, 0 }, // 62 Take off2
+50 -6
View File
@@ -1,3 +1,53 @@
0.5.2 (2007-05-29)
------------------------------------------------------------------------
- Feature: Add threading support for MorphOS (r9759)
- Fix: Bridges and tunnels were not always removed on bankruptcy, thus leaving tunnels/bridges with an invalid owner that would crash the game when clicking with the query tool on them (r9966)
- Fix: Null pointer dereference under MorphOS and AmigaOS (r9861)
0.5.2-RC1 (2007-05-16)
------------------------------------------------------------------------
- Feature: Windows 95/98/ME check in Windows 2000/XP/2003/Vista builds (r9834)
- Feature: Add password protected status to 'players' (network server) console command (r9771)
- Feature: Add server_lang in [network] section of openttd.cfg (r9716)
- Fix: Loading some TTDP savegames caused an instant assertion on loading (r9857)
- Fix: [NewGRF] Catch occurance of division-by-zero in varaction handling (r9837)
- Fix: Only non dedicated servers cannot have 0 players [FS#765] (r9785)
- Fix: Remove arbitrary limit on length of NewGRF strings (r9775)
- Fix: [NewGRF] Ignore axis-bit of station tile layouts [FS#756] (r9758)
- Fix: [win32] Dead key and open/close console. (r9728)
- Fix: When you have closed the "Load game"/"New game" windows which you started from the "start server" menu, you shouldn't start a server when starting a new game [SF#1244842] (r9757)
- Fix: Trains were lost after autorenewal/autoreplace [FS#732] (r9753)
- Fix: Stop flooded towns from building roads on water [FS#598] (r9743)
- Fix: Station signs were not resized when the language changed [FS#672] (r9741)
- Fix: In news history, newlines were not replaced with spaces [FS#677] (r9731)
- Fix: Crash when destroying bridge with train partially on it [FS#738] (r9726)
- Fix: Planes made a 270 degree turn instead of a 90 degree turn on the southern runway of the intercontinental airport [FS#743] (r9725)
- Fix: In-game private messages did not work for clients with high ClientIDs (r9719)
- Fix: Do not allow building of rail vehicles whose railtype is not available (r9718)
- Fix: [YAPF] The guessed path was ignored for ships [FS#736] (r9694)
0.5.1 (2007-04-20)
------------------------------------------------------------------------
(None)
0.5.1-RC3 (2007-04-17)
------------------------------------------------------------------------
- Feature: Add list_patches to console commands; shows all patches and values (r9565)
- Fix: Select "Custom" in the difficulty settings gui when changing a setting [FS#733] (r9647)
- Fix: Building rail on steep slopes ignored build_on_slopes patch setting (r9602)
- Fix: Wrong characters in Finnish town names (r9641)
- Fix: When checking for no vehicle on ground-tiles, do not take into account vehicles that are in the air (r9542)
- Fix: Bankrupt AIs no longer buy over themselves (also added safeguards to prevent in future) (r9540 / r9541)
- Fix: When company is removed, sell all shares of the and in the company (r9533)
- Fix: Crash when 2 or more clients joined at roughly the same time (r9529)
- Fix: Custom currency was overwritten and fix euro introduction (r9467, r9469)
- Fix: Values of diff_custom and snow_line in .cfg were not checked properly (r9455)
- Fix: When deleting a vehicle which has shared orders with one more vehicle and no orders, segfaulted (r9429)
0.5.1-RC2 (2007-03-23)
------------------------------------------------------------------------
- Fix: crashes when the chatbox would be drawn outside of the main window [FS#701] (r9420)
@@ -1337,7 +1387,6 @@
0.2.1 (2004-04-04)
------------------------------------------------------------------------
- Fix: copy orders crashed if you clicked on a wagon
- Feature: 'A' hotkey now always opens autorail
- Change: Moved autorail button
@@ -1350,7 +1399,6 @@
0.2 (2004-04-03)
------------------------------------------------------------------------
- Feature: autoscroll (only works to left/right)
- Feature: train checkpoints, instead of ttdpatch's nonstop handling
- Feature: ttdpatch compatible nonstop handling
@@ -1411,7 +1459,6 @@
0.1.4 (2004-03-25)
------------------------------------------------------------------------
- Feature: crash submit system on win32
- Fix: train smoke clouds
- Fix: train engine sounds
@@ -1452,7 +1499,6 @@
0.1.3 (2004-03-18)
------------------------------------------------------------------------
- Fixed message options window
- Fixed company takeover/purchase
- Feature: Improved mouse scroll zooming
@@ -1476,7 +1522,6 @@
0.1.2 (2004-03-15)
------------------------------------------------------------------------
- Mouse wheel can be used to zoom in out on win32 (ludde)
- Implemented some support for resizing the window dynamically in win32 (ludde)
- Fixed tunnel mouse icon for maglev and monorail
@@ -1484,7 +1529,6 @@
0.1.1 (2004-03-14)
------------------------------------------------------------------------
- Preliminary presignal support
- Added external MIDI driver for unix version (by robertnorris)
- Added DirectMusic driver for Win32 version
+2 -2
View File
@@ -335,7 +335,7 @@ int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
CommandProc *proc;
/* Do not even think about executing out-of-bounds tile-commands */
if (tile >= MapSize()) {
if (tile >= MapSize() || IsTileType(tile, MP_VOID)) {
_cmd_text = NULL;
return CMD_ERROR;
}
@@ -413,7 +413,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
int y = TileY(tile) * TILE_SIZE;
/* Do not even think about executing out-of-bounds tile-commands */
if (tile >= MapSize()) {
if (tile >= MapSize() || IsTileType(tile, MP_VOID)) {
_cmd_text = NULL;
return false;
}
+24 -6
View File
@@ -1216,16 +1216,20 @@ DEF_CONSOLE_CMD(ConPlayers)
FOR_ALL_PLAYERS(p) {
char buffer[512];
const NetworkPlayerInfo *npi;
if (!p->is_active) continue;
npi = &_network_player_info[p->index];
GetString(buffer, STR_00D1_DARK_BLUE + _player_colors[p->index], lastof(buffer));
IConsolePrintF(8, "#:%d(%s) Company Name: '%s' Year Founded: %d Money: %d Loan: %d Value: %" OTTD_PRINTF64 "d (T:%d, R:%d, P:%d, S:%d)",
p->index + 1, buffer, _network_player_info[p->index].company_name, p->inaugurated_year, p->player_money, p->current_loan, CalculateCompanyValue(p),
/* trains */ _network_player_info[p->index].num_vehicle[0],
/* lorry + bus */ _network_player_info[p->index].num_vehicle[1] + _network_player_info[p->index].num_vehicle[2],
/* planes */ _network_player_info[p->index].num_vehicle[3],
/* ships */ _network_player_info[p->index].num_vehicle[4]);
IConsolePrintF(8, "#:%d(%s) Company Name: '%s' Year Founded: %d Money: %d Loan: %d Value: %" OTTD_PRINTF64 "d (T:%d, R:%d, P:%d, S:%d) %sprotected",
p->index + 1, buffer, npi->company_name, p->inaugurated_year, p->player_money, p->current_loan, CalculateCompanyValue(p),
/* trains */ npi->num_vehicle[0],
/* lorry + bus */ npi->num_vehicle[1] + npi->num_vehicle[2],
/* planes */ npi->num_vehicle[3],
/* ships */ npi->num_vehicle[4],
/* protected */ npi->password[0] == '\0' ? "un" : "");
}
return true;
@@ -1402,6 +1406,19 @@ DEF_CONSOLE_CMD(ConPatch)
return true;
}
DEF_CONSOLE_CMD(ConListPatches)
{
if (argc == 0) {
IConsoleHelp("List patch options. Usage: 'list_patches'");
return true;
}
if (argc != 1) return false;
IConsoleListPatches();
return true;
}
DEF_CONSOLE_CMD(ConListDumpVariables)
{
const IConsoleVar *var;
@@ -1482,6 +1499,7 @@ void IConsoleStdLibRegister(void)
IConsoleCmdRegister("pwd", ConPrintWorkingDirectory);
IConsoleCmdRegister("clear", ConClearBuffer);
IConsoleCmdRegister("patch", ConPatch);
IConsoleCmdRegister("list_patches", ConListPatches);
IConsoleAliasRegister("dir", "ls");
IConsoleAliasRegister("del", "rm %+");
+9 -4
View File
@@ -153,12 +153,17 @@ void CheckSwitchToEuro(void)
}
/**
* Called only from newgrf.c. Will fill _currency_specs array with
* Will fill _currency_specs array with
* default values from origin_currency_specs
**/
void ResetCurrencies(void)
* Called only from newgrf.c and settings.c.
* @param preserve_custom will not reset custom currency (the latest one on the list)
* if ever it is flagged to true. In which case, the total size of the memory to move
* will be one currency spec less, thus preserving the custom curreny from been
* overwritten.void ResetCurrencies(bool preserve_custom)
*/
void ResetCurrencies(bool preserve_custom)
{
memcpy(&_currency_specs, &origin_currency_specs, sizeof(origin_currency_specs));
memcpy(&_currency_specs, &origin_currency_specs, sizeof(origin_currency_specs) - (preserve_custom ? sizeof(_custom_currency) : 0));
}
/**
+1 -1
View File
@@ -38,7 +38,7 @@ extern CurrencySpec _currency_specs[NUM_CURRENCY];
uint GetMaskOfAllowedCurrencies(void);
void CheckSwitchToEuro(void);
void ResetCurrencies(void);
void ResetCurrencies(bool preserve_custom);
StringID* BuildCurrencyDropdown(void);
byte GetNewgrfCurrencyIdConverted(byte grfcurr_id);
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Hey, EMACS: -*- nroff -*-
.\" Please adjust this date whenever revising the manpage.
.Dd March 23, 2007
.Dd May 29, 2007
.Dt OPENTTD 6
.Sh NAME
.Nm openttd
+41 -21
View File
@@ -246,6 +246,41 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
{
Town *t;
PlayerID old = _current_player;
assert(old_player != new_player);
{
Player *p;
uint i;
/* See if the old_player had shares in other companies */
_current_player = old_player;
FOR_ALL_PLAYERS(p) {
for (i = 0; i < 4; i++) {
if (p->share_owners[i] == old_player) {
/* Sell his shares */
int32 res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
/* Because we are in a DoCommand, we can't just execute an other one and
* expect the money to be removed. We need to do it ourself! */
SubtractMoneyFromPlayer(res);
}
}
}
/* Sell all the shares that people have on this company */
p = GetPlayer(old_player);
for (i = 0; i < 4; i++) {
_current_player = p->share_owners[i];
if (_current_player != PLAYER_SPECTATOR) {
/* Sell the shares */
int32 res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
/* Because we are in a DoCommand, we can't just execute an other one and
* expect the money to be removed. We need to do it ourself! */
SubtractMoneyFromPlayer(res);
}
}
}
_current_player = old_player;
/* Temporarily increase the player's money, to be sure that
@@ -338,25 +373,6 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
/* Change color of existing windows */
if (new_player != PLAYER_SPECTATOR) ChangeWindowOwner(old_player, new_player);
{
Player *p;
uint i;
/* Check for shares */
FOR_ALL_PLAYERS(p) {
for (i = 0; i < 4; i++) {
/* 'Sell' the share if this player has any */
if (p->share_owners[i] == _current_player) {
p->share_owners[i] = PLAYER_SPECTATOR;
}
}
}
p = GetPlayer(_current_player);
/* Sell all the shares that people have on this company */
for (i = 0; i < 4; i++)
p->share_owners[i] = PLAYER_SPECTATOR;
}
_current_player = old;
MarkWholeScreenDirty();
@@ -1695,12 +1711,16 @@ int32 CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
int32 CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p;
PlayerID pid = (PlayerID)p1;
/* Disable takeovers in multiplayer games */
if (!IsValidPlayer((PlayerID)p1) || _networking) return CMD_ERROR;
if (!IsValidPlayer(pid) || _networking) return CMD_ERROR;
/* Do not allow players to take over themselves */
if (pid == _current_player) return CMD_ERROR;
SET_EXPENSES_TYPE(EXPENSES_OTHER);
p = GetPlayer(p1);
p = GetPlayer(pid);
if (!p->is_ai) return CMD_ERROR;
+6
View File
@@ -414,6 +414,12 @@ bool IsEngineBuildable(EngineID engine, byte type, PlayerID player)
// check if it's available
if (!HASBIT(e->player_avail, player)) return false;
if (type == VEH_Train) {
/* Check if the rail type is available to this player */
const Player *p = GetPlayer(player);
if (!HASBIT(p->avail_railtypes, EngInfo(engine)->railtype)) return false;
}
return true;
}
+3 -3
View File
@@ -144,10 +144,10 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
folder_error:
#if defined(UNICODE)
free(font_path);
#endif
registry_no_font_found:
#if defined(UNICODE)
free(font_namep);
#endif
RegCloseKey(hKey);
return err;
}
+4
View File
@@ -64,6 +64,10 @@ static void SelectGameWndProc(Window *w, WindowEvent *e)
break;
case WE_CLICK:
/* Do not create a network server when you (just) have closed one of the game
* creation/load windows for the network server. */
if (2 <= e->we.click.widget && e->we.click.widget <= 6) _is_network_server = false;
switch (e->we.click.widget) {
case 2: ShowGenerateLandscape(); break;
case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
+21 -28
View File
@@ -15,28 +15,26 @@ or http://bugs.openttd.org.
If the bug report is closed, it has been fixed, which then can be verified
in the latest SVN version.
Bugs for 0.5.1
Bugs for 0.5.2
------------------------------------------------------------------------
URL: http://bugs.openttd.org
-677 Badspacing in news summaries
-674 Map signs allow less nonenglish characters than english ones
-672 Non-transparent station names' backgrounds do not resize properly upon language change
-735 Plural rule not expanded correctly when non-numeric placeholder uses
-716 Train Crash in Depot
-674 Map signs allow less nonenglish characters than english ones
-669 Docks/Airports/RV Stations can be built without available vehicles
-646 AI builds useless stations
-601 airports can't get flooded when they have planes in them
-599 reloaded game lost company passwords
-594 terraforming wipes out canals
-601 Airports can't get flooded when they have planes in them
-599 Reloaded game lost company passwords
-594 Terraforming wipes out canals
-591 Autorenew fails under certain conditions
-583 Fatal fault or crash during startup
-571 Problems with vehicle purchase lists with NewGRFs
-559 Front-/Rear-facing engines don't line up with each other
-553 Autorenew doesn't warn when replacement isn't available
-546 [0.5.0 RC3] Inflation overflow
-546 Overflows due to inflation
-540 Planes vanished when offered exclusive
-539 Trains can cash the same cargo multiple times
-524 OSX sometimes (not always) fails to find free disk space
-522 overflow on vehicle costs
-522 Overflow on vehicle costs
-508 Destroying trees and replanting => raised rating
-502 OSX can incorrectly print "dbg: [sl] Cannot open savegame 'data/opntitle.dat' for saving/loading."
-501 Mouse pointer gets hidden, when draging out of window and back again. Only affects Wacom etc.
@@ -52,7 +50,7 @@ URL: http://bugs.openttd.org
-355 graphics bugs with trains - water, tunnels
-354 Maglev Trains faster than All Planes
-339 Crash in Quicktime when exiting game
-299 disable 90 deg turns patch - AI builds 90 deg turns
-299 Disable 90 deg turns patch - AI builds 90 deg turns
-290 NPF - no path to depot from tunnel
-282 AI Players do not clear loans as soon as they could
-274 Autoclean ignores any share holdings
@@ -61,11 +59,11 @@ URL: http://bugs.openttd.org
-216 AI build train vans one van less
-202 2 Locomotives in 1 Train - Selling one results in Age of the other one Being 0
-193 Inconsistent directory usage on Mac OS X
-165 vehicle length not taken into account
-165 Vehicle length not taken into account
-153 Language crash with app renaming OSX
-119 Clipping problems with vehicles on slopes
- 89 Able to build railways/stations before engines become available
- 65 short wagons bug
- 65 Short wagons bug
- 51 Windows doesn't support CUSTOM_LANG_DIR
- 47 Low rating calculation and cargo loading priority
@@ -77,30 +75,25 @@ URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-1459262 Towns building too many roads way too long now
-1458995 Another bug with smooth_economy
-1393415 NPF & one-way sigs
-1244842 Multiplayer interface bug (0.4.0.1)
-1212267 station visited twice when servicing
-1212267 Station visited twice when servicing
-1208170 Duplicate station names can be created
-1116638 "More, but smaller changes" deficiency
-1106356 re-offered prototypes
-1106356 Re-offered prototypes
Minor Bugs for 0.5.1
------------------------------------------------------------------------
URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-1461629 [r4180]Subsidy calculated wrong
-1412031 fast forward scrolling is also fast forward :)
-1387424 overtake insolvent company is to cheap
-1412031 Fast forward scrolling is also fast forward :)
-1382782 Loan interest calculated 'wrong'
-1201284 permanent hilight in a depot
-1201284 Permanent hilight in a depot
-1185852 Scrollbars get arbitrarily small
-1160732 little bug with transparency
-1117731 Editor-StartingDate
-1108046 game freezes
-1160732 Little bug with transparency
-1108046 Game freezes
-1102174 Bug if 3 people buy 25% shares in one company
-1084620 Minor bug considering buses/trucks
-1034310 color mauve in diagrams
-1034310 Color mauve in diagrams
-1030661 It's possible to build a tunnel under oil wells
- 987891 Large UFO destruction bug
- 987883 Aircraft landing/taking off
- 987880 company league table updating
- 985924 aircraft taxi speed
- 987880 Company league table updating
- 985924 Aircraft taxi speed
+1
View File
@@ -732,6 +732,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Colocar
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Colocar farol
STR_028E_PLACE_TRANSMITTER :{BLACK}Colocar transmissor
STR_028F_DEFINE_DESERT_AREA :{BLACK}Define área desértica.{} Pressione e segure CTRL para removê-la
STR_CREATE_LAKE :{BLACK}Define área com água.{} Faz um canal, a menos se CTRL for pressionado ao nível do mar, neste caso inundará ao redor
STR_0290_DELETE :{BLACK}Remover
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Remover esta cidade completamente
STR_0292_SAVE_SCENARIO :Salvar cenário
+1 -1
View File
@@ -1828,7 +1828,7 @@ STR_4011_LOAD_HEIGHTMAP :{WHITE}Заре
STR_4800_IN_THE_WAY :{WHITE}{STRING} пречи
STR_4801 :{WHITE}{INDUSTRY}
STR_4802_COAL_MINE :Мина за въглища
STR_4803_POWER_STATION :
STR_4803_POWER_STATION :Електроцентрала
STR_4804_SAWMILL :Дъскорезница
STR_4805_FOREST :Гора
STR_4806_OIL_REFINERY :Нефтена рафинерия
+3 -3
View File
@@ -3058,7 +3058,7 @@ STR_PURCHASE_INFO_ALL_BUT :Alles behalve {
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Creeër
STR_GENERATE :{WHITE}Maak aan
STR_RANDOM :{BLACK}Willekeurig maken
STR_RANDOM_HELP :{BLACK}Wijzig het willekeurige getal voor terrein creatie
STR_WORLD_GENERATION_CAPTION :{WHITE}Wereld maken
@@ -3094,14 +3094,14 @@ STR_WORLD_GENERATION :{BLACK}Wereld m
STR_TREE_GENERATION :{BLACK}Bos plaatsing
STR_UNMOVABLE_GENERATION :{BLACK}Onverplaatsbare generatie
STR_CLEARING_TILES :{BLACK}Ruig en
STR_SETTINGUP_GAME :{BLACK}Spel aan het instellen
STR_SETTINGUP_GAME :{BLACK}Spel aan het configureren
STR_PREPARING_TILELOOP :{BLACK}Bezig met vlakken
STR_PREPARING_GAME :{BLACK}Voorbereiden spel
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Deze aktie past de moeilijkheidsgraag aan naam custom
STR_SE_FLAT_WORLD :{WHITE}Vlak land
STR_SE_FLAT_WORLD_TIP :{BLACK}Genereer een platte kaart
STR_SE_RANDOM_LAND :{WHITE}Willekeurig land
STR_SE_NEW_WORLD :{BLACK}Creeër nieuw scenario
STR_SE_NEW_WORLD :{BLACK}Maak nieuw scenario aan
STR_SE_CAPTION :{WHITE}Scenario type
STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Maak de hoogte van plat land een lager
STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Maak de hoogte van plat land een hoger
+3 -3
View File
@@ -991,7 +991,7 @@ STR_EURO_INTRODUCE :{BLACK}{BIGFONT
STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Trajno {COMMA} havas maltro da ordenoj enplane
STR_TRAIN_HAS_VOID_ORDER :{WHITE}Trajno {COMMA} havas malplenan ordenon
STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Trajno {COMMA} havas duoblajn ordenojn
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Trajnno {COMMA} havas nevalidan stacion en la ordenoj
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Trajno {COMMA} havas nevalidan stacion en la ordenoj
STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Vojveturilo {COMMA} havas maltro da ordenoj enplane
STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Vojveturilo {COMMA} havas malplenan ordenon
STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Vojveturilo {COMMA} havas duoblajn ordenojn
@@ -1385,7 +1385,7 @@ STR_NETWORK_REFRESH_TIP :{BLACK}Refreŝi
STR_NETWORK_COMPANY_INFO :{SILVER}KOMPANIAJ INFORMOJ
STR_NETWORK_COMPANY_NAME :{SILVER}Kompaninomo: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Enaŭguro: {WHITE}{NUM}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inaŭguro: {WHITE}{NUM}
STR_NETWORK_VALUE :{SILVER}Kompanivaloro: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuna monstato: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Lastjara enspezo: {WHITE}{CURRENCY64}
@@ -2118,7 +2118,7 @@ STR_7034_CLICK_ON_SELECTED_NEW_COLOR :{BLACK}Alklaku
STR_7035_INCREASE_SIZE_OF_LOAN :{BLACK}Grandigu prunton
STR_7036_REPAY_PART_OF_LOAN :{BLACK}Repagu pruntparton
STR_7037_PRESIDENT :{WHITE}{PLAYERNAME}{}{GOLD}(Manaĝanto)
STR_7038_INAUGURATED :{GOLD}Enaŭguris: {WHITE}{NUM}
STR_7038_INAUGURATED :{GOLD}Inaŭgurita: {WHITE}{NUM}
STR_7039_VEHICLES :{GOLD}Veturiloj:
STR_TRAINS :{WHITE}{COMMA} trajno{P "" j}
STR_ROAD_VEHICLES :{WHITE}{COMMA} vojveturilo{P "" j}
+7 -5
View File
@@ -690,6 +690,7 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Mängij
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Konkurendi jaama saabus esimene veovahend
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Õnnetused / katastroofid
STR_0209_COMPANY_INFORMATION :{YELLOW}Ettevõtte teave
STR_NEWS_OPEN_CLOSE :{YELLOW}Ava / sulge tööstuseid
STR_020A_ECONOMY_CHANGES :{YELLOW}Muutused majanduses
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Soovitused ja teated mängija veovahendite kohta
STR_020C_NEW_VEHICLES :{YELLOW}Uued veovahendid
@@ -733,7 +734,7 @@ STR_022D_ARE_YOU_SURE_YOU_WANT_TO :{WHITE}Oled sa
STR_022E_LANDSCAPE_GENERATION :{BLACK}Maastiku loomine
STR_022F_TOWN_GENERATION :{BLACK}Linnade loomine
STR_0230_INDUSTRY_GENERATION :{BLACK}Tööstuste loomine
STR_0231_ROAD_CONSTRUCTION :{BLACK}Teede ehitamine
STR_0231_ROAD_CONSTRUCTION :{BLACK}Teeehitus
STR_0233_TOWN_GENERATION :{WHITE}Linnade loomine
STR_0234_NEW_TOWN :{BLACK}Uus linn
STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Ehita uus linn
@@ -794,12 +795,12 @@ STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Ehita te
STR_026A_CONSTRUCT_FARM :{BLACK}Raja farm
STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Ehita rauamaagikaevandus
STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Ehita naftapuuraugud
STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Ehita pank (seda saab ehitada vaid linnadesse, mille rahvastikuarv ületab 1200)
STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Ehita pank (saab ehitada vaid linnadesse, mille rahvastikuarv ületab 1200)
STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Ehita paberitehas
STR_026F_CONSTRUCT_FOOD_PROCESSING :{BLACK}Ehita toidutööstus
STR_0270_CONSTRUCT_PRINTING_WORKS :{BLACK}Ehita trükikoda
STR_0271_CONSTRUCT_GOLD_MINE :{BLACK}Ehita kullakaevandus
STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Ehita pank (seda saab vaid linnadesse ehitada)
STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Ehita pank (saab vaid linnadesse ehitada)
STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Ehita saeveski (vihmametsade puhustamiseks ja puidu tootmiseks)
STR_0274_PLANT_FRUIT_PLANTATION :{BLACK}Istuta puuviljaistandus
STR_0275_PLANT_RUBBER_PLANTATION :{BLACK}Istuta kummipuuistandus
@@ -829,6 +830,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Loo maas
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Ehita tuletorn
STR_028E_PLACE_TRANSMITTER :{BLACK}Paigalda saatjamast
STR_028F_DEFINE_DESERT_AREA :{BLACK}Loo kõrbealad.{}Eemaldamiseks klõpsa hoides all CTRL nuppu
STR_CREATE_LAKE :{BLACK}Määratle veealad.{}Ehita kanal. CTRL-klahvi all hoides ujutab ümbruskonna üle.
STR_0290_DELETE :{BLACK}Kustuta
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Hävita see linn täielikult
STR_0292_SAVE_SCENARIO :Salvesta kaart
@@ -2488,7 +2490,7 @@ STR_80A4_GOSS_COPPER_ORE_TRUCK :Goss vasemaagiv
STR_80A5_UHL_WATER_TANKER :Uhl veeveok
STR_80A6_BALOGH_WATER_TANKER :Balogh veeveok
STR_80A7_MPS_WATER_TANKER :MPS veeveok
STR_80A8_BALOGH_FRUIT_TRUCK :Balogh veeveok
STR_80A8_BALOGH_FRUIT_TRUCK :Balogh puuviljaveok
STR_80A9_UHL_FRUIT_TRUCK :Uhl puuviljaveok
STR_80AA_KELLING_FRUIT_TRUCK :Kelling puuviljaveok
STR_80AB_BALOGH_RUBBER_TRUCK :Balogh kummiveok
@@ -2618,7 +2620,7 @@ STR_INVALID_ORDER :{RED} (Ebasobiv
STR_UNKNOWN_DESTINATION :tundmatu sihtpunkt
STR_8812_EMPTY :{LTBLUE}Tühi
STR_8813_FROM :{LTBLUE}{CARGO} {STATION}'st
STR_8813_FROM :{LTBLUE}{CARGO} jaamast {STATION}
STR_FROM_MULT :{LTBLUE}{CARGO} jaamast {STATION} (x{NUM})
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Rong {COMMA} ootab depoos
STR_8815_NEW_VEHICLES :{BLACK}Uus rong
+3 -2
View File
@@ -1887,8 +1887,8 @@ STR_4838_IMPROVED_FARMING_METHODS :{BLACK}{BIGFONT
STR_4839_PRODUCTION_DOWN_BY_50 :{BLACK}{BIGFONT}{INDUSTRY}: tuotanto vähenee 50{NBSP}%:lla.
STR_483A_INSECT_INFESTATION_CAUSES :{BLACK}{BIGFONT}{INDUSTRY}: hyönteisparvet aiheuttavat tuhoa!{}Tuotanto vähenee 50{NBSP}%:lla.
STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...voidaan asettaa vain kartan reunoille.
STR_INDUSTRY_PROD_GOUP ::{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä enemmän!
STR_INDUSTRY_PROD_GODOWN ::{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä vähemmän!
STR_INDUSTRY_PROD_GOUP :{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä enemmän!
STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä vähemmän!
##id 0x5000
STR_5000_TRAIN_IN_TUNNEL :{WHITE}Juna on tunnelissa.
@@ -2192,6 +2192,7 @@ STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA}
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}Yhtiön {COMPANY} on ottanut haltuun {COMPANY}!
STR_7080_PROTECTED :{WHITE}Tällä yhtiöllä ei ole vielä osakkeita...
STR_LIVERY_DEFAULT :Normaalit tunnusvärit
STR_LIVERY_STEAM :Höyryveturi
STR_LIVERY_DIESEL :Dieselveturi
STR_LIVERY_ELECTRIC :Sähköveturi
+8
View File
@@ -2922,6 +2922,7 @@ STR_WORLD_GENERATION_CAPTION :{WHITE}Xeració
STR_RANDOM_SEED :{BLACK}Semilla Aleatoria:
STR_RANDOM_SEED_HELP :{BLACK}Pincha para introducir unha semilla
STR_LAND_GENERATOR :{BLACK}Xerador de terreo:
STR_TREE_PLACER :{BLACK}Algoritmo para árbores:
STR_TERRAIN_TYPE :{BLACK}Tipo de terreo:
STR_QUANTITY_OF_SEA_LAKES :{BLACK}Nivel do mar:
STR_SMOOTHNESS :{BLACK}Suavidade:
@@ -2942,7 +2943,9 @@ STR_GENERATION_PROGRESS :{BLACK}{NUM} /
STR_WORLD_GENERATION :{BLACK}Xeración do mundo
STR_SETTINGUP_GAME :{BLACK}Configurando partida
STR_PREPARING_GAME :{BLACK}Preparando partida
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Esta acción cambiou o nivel de dificultade a Personalizado
STR_SE_FLAT_WORLD :{WHITE}Terreo Chan
STR_SE_RANDOM_LAND :{WHITE}Terreo aleatorio
STR_SE_NEW_WORLD :{BLACK}Crear novo escenario
STR_SE_CAPTION :{WHITE}Tipo de escenario
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
@@ -2971,4 +2974,9 @@ STR_MEASURE_AREA :{BLACK}Área: {
STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Lonxitude: {NUM}{}Diferencia de altura: {NUM} m
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Área: {NUM} x {NUM}{}Diferencia de altura: {NUM} m
############ Date formatting
STR_DATE_TINY :{STRING}-{STRING}-{NUM}
STR_DATE_SHORT :{STRING} {NUM}
STR_DATE_LONG :{STRING} {STRING} {NUM}
########
+1541 -1540
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -744,8 +744,8 @@ STR_0298_LOAD_SCENARIO :{WHITE}시나
STR_0299_SAVE_SCENARIO :{WHITE}시나리오 저장하기
STR_029A_PLAY_SCENARIO :{BLACK}시나리오 플레이
STR_PLAY_HEIGHTMAP :{BLACK}DEM지형 플레이
STR_PLAY_HEIGHTMAP_HINT :{BLACK}DEM지형을 풍경으로 하여 게임을 시작합
STR_029B_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}이 시나리오를 종료하시겠습니까?
STR_PLAY_HEIGHTMAP_HINT :{BLACK}DEM지형을 풍경으로 하여 게임을 시작합니다.
STR_029C_QUIT_EDITOR :{WHITE}에디터 종료
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...1200명 이상의 도시에만 건설할 수 있습니다!
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}시작년도를 1년 앞당깁니다.
+6
View File
@@ -590,6 +590,7 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Ankomms
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Ankommst av første kjøretøy på motstanders stasjon
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Ulykker/katastrofer
STR_0209_COMPANY_INFORMATION :{YELLOW}Firmainformasjon
STR_NEWS_OPEN_CLOSE :{YELLOW}Åpninger / Stengninger av industrier
STR_020A_ECONOMY_CHANGES :{YELLOW}Økonomiske endringer
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Råd/informasjon om spillers kjøretøy
STR_020C_NEW_VEHICLES :{YELLOW}Nye kjøretøy
@@ -729,6 +730,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plasser
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Plasser fyrtårn
STR_028E_PLACE_TRANSMITTER :{BLACK}Plasser radiosender
STR_028F_DEFINE_DESERT_AREA :{BLACK}Definer ørkenområde.{}Trykk og hold inne CTRL for å fjerne den
STR_CREATE_LAKE :{BLACK}Definer vannområde.{}Lag en kanal, untatt hvis CTRL holdes nede på havnivå, hvor områdene vil fylles istedenfor
STR_0290_DELETE :{BLACK}Slett
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Slett denne byen fullstendig
STR_0292_SAVE_SCENARIO :Lagre scenario
@@ -1206,6 +1208,7 @@ STR_TREES_RANDOM_TYPE :{BLACK}Trær av
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Plasser trær av tilfeldig type
STR_CANT_BUILD_CANALS :{WHITE}Kan ikke bygge kanaler her...
STR_BUILD_CANALS_TIP :{BLACK}Bygg kanaler.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Kan ikke bygge sluser her...
@@ -2629,6 +2632,9 @@ STR_INCOMPATIBLE_RAIL_TYPES :Inkompatible je
STR_TRAIN_NO_POWER :{RED}Ingen strøm
STR_TRAIN_START_NO_CATENARY :Dette sporet mangler et kjede, så toget kan ikke starte
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Ny {STRING} nå tilgjengelig!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} Nå tilgjengelig! - {STRING}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Kjøretøy i veien
+3 -2
View File
@@ -731,6 +731,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plasser
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Plasser fyrtårn
STR_028E_PLACE_TRANSMITTER :{BLACK}Plasser radiosendar
STR_028F_DEFINE_DESERT_AREA :{BLACK}Definer ørkenområde.{}Trykk og held inne CTRL for å fjerne det
STR_CREATE_LAKE :{BLACK}Definer vassområde.{}Lag ein kanal. Viss CTRL er halde nede ved havnivå, vil vatnet i staden fløyme over omgivnadene
STR_0290_DELETE :{BLACK}Slett
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Slett byen heilt
STR_0292_SAVE_SCENARIO :Lagre scenario
@@ -1447,7 +1448,7 @@ STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :ikkje autoriser
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :mottok merkeleg pakke
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :feil versjon
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :namnet er brukt av nokon andre
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :feil passord til spelet
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :feil passord for til spelet
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :feil spelar-id i DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :sparka ut av tenaren
STR_NETWORK_ERR_CLIENT_CHEATER :freista å jukse
@@ -2769,7 +2770,7 @@ STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Ny kapas
STR_9841_CAN_T_REFIT_SHIP :{WHITE}Kan ikkje bygge om skip...
STR_9842_REFITTABLE :(ombyggbart)
STR_GO_TO_SHIP_DEPOT :Seil til {TOWN} skipsdepot
SERVICE_AT_SHIP_DEPOT :Vedlikehald ved {TOWN} skipsdepot
SERVICE_AT_SHIP_DEPOT :Vedlikehald ved {TOWN} Skipsdepot
##id 0xA000
STR_A000_AIRPORTS :{WHITE}Flyplassar
+2 -2
View File
@@ -3182,7 +3182,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Pojemno
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moc: {GOLD}+{POWER}{BLACK} Waga: {GOLD}+{WEIGHT_S}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Można przebudować na: {GOLD}
STR_PURCHASE_INFO_ALL_TYPES :Wszystkie typy towarów
STR_PURCHASE_INFO_ALL_BUT :Wszystko oprócz {GOLD}}
STR_PURCHASE_INFO_ALL_BUT :Wszystko oprócz {GOLD}
########### String for New Landscape Generator
@@ -3225,7 +3225,7 @@ STR_CLEARING_TILES :{BLACK}Generowa
STR_SETTINGUP_GAME :{BLACK}Ustawianie gry
STR_PREPARING_TILELOOP :{BLACK}Uaktywnianie pól
STR_PREPARING_GAME :{BLACK}Przygotowywanie gry
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Ta akcja zmieniła poziom trudności na "własny"
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Zmieniono poziom trudności na "własny"
STR_SE_FLAT_WORLD :{WHITE}Płaski świat
STR_SE_FLAT_WORLD_TIP :{BLACK}Stwórz płaski świat
STR_SE_RANDOM_LAND :{WHITE}Losowy teren
+6 -6
View File
@@ -385,7 +385,7 @@ STR_SORT_BY_VALUE :Valor
STR_SORT_BY_FACILITY :Tipo de Estação
STR_SORT_BY_WAITING :Valor da carga em espera
STR_SORT_BY_RATING_MAX :Avaliação de carga
STR_ENGINE_SORT_ENGINE_ID :Ordenação clássica
STR_ENGINE_SORT_ENGINE_ID :EngineID (ordernação clássica)
STR_ENGINE_SORT_COST :Custo
STR_ENGINE_SORT_POWER :Potência
STR_ENGINE_SORT_INTRO_DATE :Data de Introdução
@@ -1048,7 +1048,7 @@ STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Multipl
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Permitir sempre aeroportos pequenos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_WARN_LOST_TRAIN :{LTBLUE}Avisar quando comboios andam perdidos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_WARN_LOST_TRAIN :{LTBLUE}Alertar em caso de perda do combóio: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ORDER_REVIEW :{LTBLUE}Analisar ordens dos veículos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ORDER_REVIEW_OFF :Não
STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :Sim, mas excluir veículos parados
@@ -1085,7 +1085,7 @@ STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Tamanho
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Manutenção automática de helicópteros em heliportos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Ligar ferramentas de paisagem com as de construção: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Ao deslizar com o rato, mover a vista na direcção oposta: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Mostrar medidas ao usar ferramentas de construção: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Mostrar uma dica de medição ao utilizar várias ferramentas de construção: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Mostrar estampagens da companhia: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Nenhum
STR_CONFIG_PATCHES_LIVERIES_OWN :Própria companhia
@@ -2549,9 +2549,9 @@ STR_8825_NON_STOP :{BLACK}Sem para
STR_8826_GO_TO :{BLACK}Ir Para
STR_8827_FULL_LOAD :{BLACK}Carga
STR_8828_UNLOAD :{BLACK}Descarga
STR_REFIT :{BLACK}Reconverter
STR_REFIT_TIP :{BLACK}Escolha o tipo de carga para reconverter nesta ordem. Control click para remover a instrução de reconversão
STR_REFIT_ORDER :(Reconverter para {STRING})
STR_REFIT :{BLACK}Converter
STR_REFIT_TIP :{BLACK}Seleccionar o tipo de carga a converter nesta ordem. Pressionar Ctrl e botão-esquerdo do rato para remover instrução de conversão
STR_REFIT_ORDER :(Converter para {STRING})
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordens)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fim de Ordens - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
+10 -7
View File
@@ -590,6 +590,7 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Sosirea
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Sosirea primului vehicul la una din statiile competitorilor
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Accidente/dezastre
STR_0209_COMPANY_INFORMATION :{YELLOW}Informatii despre companie
STR_NEWS_OPEN_CLOSE :{YELLOW}Deschidere / inchidere industrii
STR_020A_ECONOMY_CHANGES :{YELLOW}Schimbãri economice
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Sfaturi/informatii despre vehiculele tale
STR_020C_NEW_VEHICLES :{YELLOW}Vehicule noi
@@ -729,6 +730,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plaseaza
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Plaseazã far
STR_028E_PLACE_TRANSMITTER :{BLACK}Plaseazã transmitãtor
STR_028F_DEFINE_DESERT_AREA :{BLACK}Defineste suprafata de desert.{}Apasã si mentine apasat CTRL pentru a o sterge
STR_CREATE_LAKE :{BLACK}Defineste zona apei.{}Creeaza un canal, mai putin cand CTRL este apasat la nivelul marii, cand va inunda, in loc, imprejurimile
STR_0290_DELETE :{BLACK}Sterge
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Sterge acest oras
STR_0292_SAVE_SCENARIO :Salveazã scenariul
@@ -783,7 +785,7 @@ STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Afisar
STR_02D0_FULL_ANIMATION :{SETX 12}Animatie completã
STR_02D2_FULL_DETAIL :{SETX 12}Detalii grafice complete
STR_02D4_TRANSPARENT_BUILDINGS :{SETX 12}Peisaj transparent (X)
STR_TRANSPARENT_SIGNS :{SETX 12}Numele statiilor transparente
STR_TRANSPARENT_SIGNS :{SETX 12}Semne statii, transparente
############ range ends here
############ range for menu starts
@@ -932,7 +934,7 @@ STR_OPTIONS_LANG :{BLACK}Limba
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Alege limba în care doresti afisatã interfata
STR_OPTIONS_FULLSCREEN :{BLACK}Mod
STR_OPTIONS_FULLSCREEN :{BLACK}Ecran intreg
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Bifeaza aceasta casuta pentru a juca in modul
STR_OPTIONS_RES :{BLACK}Rezolutia ecranului
@@ -1024,7 +1026,7 @@ STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Permite
STR_CONFIG_PATCHES_FORBID_90_DEG :{LTBLUE}Interzice trenurilor si navelor sa faca intoarceri de 90 de grade: {ORANGE}{STRING} {LTBLUE} (necesita NPF)
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Uneste gãrile alãturate: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Pãrãseste statia când orice tip de marfã este 'full load': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Foloseste algoritmul de LOAD imbunatatit: {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Foloseste algoritm incarcare imbunatatit: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GRADUAL_LOADING :{LTBLUE}Incarca vehiculele gradual: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflatia: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Livreazã marfa doar in statiile unde aceasta este ceruta: {ORANGE}{STRING}
@@ -1084,16 +1086,16 @@ STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Service
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Conecteaza bara de instrumente pentru peisaj cu cea de constructii feroviare/auto/aeriane: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Cand faci scroll cu mouse-ul muta ecranul in directia opusã: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Arata o bara de unelte de masuratori la folosirea uneltelor de constructie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Arata unifromete companiilor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Arata uniformele companiilor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Niciunul
STR_CONFIG_PATCHES_LIVERIES_OWN :Propria companie
STR_CONFIG_PATCHES_LIVERIES_ALL :Toate companiile
STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Echipa preferata pentru chat <ENTER>: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Nr. max. de trenuri pentru un jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Nr. max. de trenuri per jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Nr. max. de autovehicule pentru un jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Nr. max. de aeronave pentru un jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Nr. max. de nave pentru un jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Nr. max. de nave per jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_TRAINS :{LTBLUE}Dezactiveazã trenurile pentru jucãtorii PC: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH :{LTBLUE}Dezactiveazã autovehiculele pentru jucãtorii PC: {ORANGE}{STRING}
@@ -1206,6 +1208,7 @@ STR_TREES_RANDOM_TYPE :{BLACK}Arbori d
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Planteazã arbori din diverse specii la întâmplare
STR_CANT_BUILD_CANALS :{WHITE}Nu pot construi un canal aici...
STR_BUILD_CANALS_TIP :{BLACK}Construieste canale.
STR_LANDINFO_CANAL :Canal
STR_CANT_BUILD_LOCKS :{WHITE}Nu pot construi o ecluzã aici...
@@ -2602,7 +2605,7 @@ STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Mergi no
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Introdu o comandã înaintea celei selectate sau adaugã o comandã la sfârsitul listei
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forteazã trenul sã astepte la destinatia selectatã pânã la umplerea la capacitate maximã
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forteazã trenul sã descarce marfa la destinatia selectatã
STR_SERVICE_HINT :{BLACK}Sãri peste aceastã comandã dacã nu este necesar un service
STR_SERVICE_HINT :{BLACK}Sari peste aceastã comandã dacã nu este necesar un service
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY} Greutate: {WEIGHT_S}{}Vitezã: {VELOCITY} Putere: {POWER}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Defectiune
STR_885D_AGE_RUNNING_COST_YR :{BLACK}Vechimea: {LTBLUE}{STRING}{BLACK} Cost de rulare: {LTBLUE}{CURRENCY}/an
+365 -365
View File
File diff suppressed because it is too large Load Diff
+15 -15
View File
@@ -601,36 +601,36 @@ STR_01D2_JAZZ_JUKEBOX :{WHITE}Jukebox
STR_01D3_SOUND_MUSIC :Zvuk/Hudba
STR_01D4_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Zobraz okno zvuku a hudby
STR_01D5_ALL :{TINYFONT}Všetko
STR_01D6_OLD_STYLE :{TINYFONT}Stary styl
STR_01D7_NEW_STYLE :{TINYFONT}Novy styl
STR_01D6_OLD_STYLE :{TINYFONT}Starý štýl
STR_01D7_NEW_STYLE :{TINYFONT}Nový štýl
STR_01D8_EZY_STREET :{TINYFONT}Ezy Street
STR_01D9_CUSTOM_1 :{TINYFONT}Vlastne 1
STR_01DA_CUSTOM_2 :{TINYFONT}Vlastne 2
STR_01D9_CUSTOM_1 :{TINYFONT}Vlastné 1
STR_01DA_CUSTOM_2 :{TINYFONT}Vlastné 2
STR_01DB_MUSIC_VOLUME :{BLACK}{TINYFONT}Hlasitost hudby
STR_01DC_EFFECTS_VOLUME :{BLACK}{TINYFONT}Hlasitost zvuk. efektov
STR_01DD_MIN_MAX :{BLACK}{TINYFONT}MIN ' ' ' ' ' ' MAX
STR_01DE_SKIP_TO_PREVIOUS_TRACK :{BLACK}Predchadzajuca stopa
STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Nasledujuca stopa
STR_01E0_STOP_PLAYING_MUSIC :{BLACK}Zastavit prehravanie hudby
STR_01E1_START_PLAYING_MUSIC :{BLACK}Spustit prehravanie hudby
STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Tahat posuvace pre zmenu hlasitosti
STR_01DE_SKIP_TO_PREVIOUS_TRACK :{BLACK}Predchádzajúca stopa
STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Nasledujúca stopa
STR_01E0_STOP_PLAYING_MUSIC :{BLACK}Zastavit prehrávanie hudby
STR_01E1_START_PLAYING_MUSIC :{BLACK}Spustit prehrávanie hudby
STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Tahat posúvace pre zmenu hlasitosti
STR_01E3 :{DKGREEN}{TINYFONT}--
STR_01E4_0 :{DKGREEN}{TINYFONT}0{COMMA}
STR_01E5 :{DKGREEN}{TINYFONT}{COMMA}
STR_01E6 :{DKGREEN}{TINYFONT}------
STR_01E7 :{DKGREEN}{TINYFONT}"{STRING}"
STR_01E8_TRACK_XTITLE :{BLACK}{TINYFONT}Stopa{SETX 88}Title
STR_01E9_SHUFFLE :{TINYFONT}Nahodne
STR_01E9_SHUFFLE :{TINYFONT}Náhodne
STR_01EA_PROGRAM :{TINYFONT}{BLACK}Program
STR_01EB_MUSIC_PROGRAM_SELECTION :{WHITE}Vyber hudobneho programu
STR_01EB_MUSIC_PROGRAM_SELECTION :{WHITE}Výber hudobného programu
STR_01EC_0 :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
STR_01ED :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
STR_01EE_TRACK_INDEX :{TINYFONT}{BLACK}Cislo stopy
STR_01EE_TRACK_INDEX :{TINYFONT}{BLACK}Císlo stopy
STR_01EF_PROGRAM :{TINYFONT}{BLACK}Program - '{STRING}'
STR_01F0_CLEAR :{TINYFONT}{BLACK}Zmazat
STR_01F1_SAVE :{TINYFONT}{BLACK}Ulozit
STR_01F2_CURRENT_PROGRAM_OF_MUSIC :{BLACK}Aktualny program
STR_01F3_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vybrat 'Vsetko'
STR_01F1_SAVE :{TINYFONT}{BLACK}Uložit
STR_01F2_CURRENT_PROGRAM_OF_MUSIC :{BLACK}Aktuálny program
STR_01F3_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vybrat 'Všetko'
STR_01F4_SELECT_OLD_STYLE_MUSIC :{BLACK}Vybrat 'Stary styl'
STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Vybrat 'Novy styl'
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vybrat 'Vlastny 1' (uzivatelom definovany) program
+2
View File
@@ -772,6 +772,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Ustvari
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Postavi svetilnik
STR_028E_PLACE_TRANSMITTER :{BLACK}Postavi oddajnik
STR_028F_DEFINE_DESERT_AREA :{BLACK}Določi območja puščave.{}Pritisni in drži CTRL za odstranitev
STR_CREATE_LAKE :{BLACK}Določi področje vode.{}Naredi kanal, razen če je pritisnjen CTRL na morski gladini, ko bo poplavilo okolico.
STR_0290_DELETE :{BLACK}Izbriši
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Popolnoma izbriši mesto
STR_0292_SAVE_SCENARIO :Shrani scenarij
@@ -1249,6 +1250,7 @@ STR_TREES_RANDOM_TYPE :{BLACK}Drevesa
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Postavi drevesa naključne vrste
STR_CANT_BUILD_CANALS :{WHITE}Ni mogoče zgraditi kanalov tukaj ...
STR_BUILD_CANALS_TIP :{BLACK}Zgradi kanale.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Ni mogoče zgraditi zapornic tukaj ...
+2 -2
View File
@@ -1671,7 +1671,7 @@ STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY :Muta de lokala
STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Starta en liten lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{} Kostnad: {CURRENCY}
STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Starta en mellanstor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{} Kostnad: {CURRENCY}
STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Starta en stor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{} Kostnad: {CURRENCY}
STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Bekosta ombyggnad av stadens vägnätverk. Orsakar ansenlig splittring för vägtrafik upp till 6 månader.{} Kostnad: {CURRENCY}
STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Bekosta ombyggnad av stadens vägnätverk. Orsakar ansenliga störningar för vägtrafik i upp till 6 månader.{} Kostnad: {CURRENCY}
STR_2051_BUILD_A_STATUE_IN_HONOR :{WHITE}{STRING}{}{YELLOW} Bygg en staty i ditt företags ära.{} Kostnad: {CURRENCY}
STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Bekosta uppbyggnad av nya kommersiella byggnader i staden.{} Kostnad: {CURRENCY}
STR_2053_BUY_1_YEAR_S_EXCLUSIVE :{WHITE}{STRING}{}{YELLOW} Köp 1 års exklusiv transporträttighet i staden. Stadens myndigheter kommer bara tillåta passagerare och gods till användning för ditt företags stationer.{} Kostnad: {CURRENCY}
@@ -2630,7 +2630,7 @@ STR_TRAIN_STOPPING :{RED}Stannar
STR_TRAIN_STOPPING_VEL :{RED}Stannar, {VELOCITY}
STR_INCOMPATIBLE_RAIL_TYPES :Fel järnvägstyp
STR_TRAIN_NO_POWER :{RED}Ingen Kraft
STR_TRAIN_START_NO_CATENARY :
STR_TRAIN_START_NO_CATENARY :Detta spår saknar kedjekurva, så tåget kan inte starta
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nya {STRING} är nu tillgänglig!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
File diff suppressed because it is too large Load Diff
+7
View File
@@ -590,6 +590,7 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Oyuncun
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Rakibin durağına ilk aracın gelişi
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Kazalar / felaketler
STR_0209_COMPANY_INFORMATION :{YELLOW}Şirket bilgisi
STR_NEWS_OPEN_CLOSE :{YELLOW}Fabrika açılış/kapanışları
STR_020A_ECONOMY_CHANGES :{YELLOW}Ekonomi değişimleri
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Oyuncunun araçlarıyla ilgili ögüt / bilgi
STR_020C_NEW_VEHICLES :{YELLOW}Yeni araçlar
@@ -729,6 +730,7 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Haritaya
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Deniz feneri koy
STR_028E_PLACE_TRANSMITTER :{BLACK}Verici koy
STR_028F_DEFINE_DESERT_AREA :{BLACK}Çöl yap, kaldırmak için CTRL'ye basılı tut
STR_CREATE_LAKE :{BLACK}Su alanını belirle.{}Deniz seviyesinde CTRL tuşu basılı olmadığı sürece kanal yapar, basılıysa etraftakileri su altında bırakır
STR_0290_DELETE :{BLACK}Sil
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Sehri tamamen sil
STR_0292_SAVE_SCENARIO :Kaydet
@@ -1206,6 +1208,7 @@ STR_TREES_RANDOM_TYPE :{BLACK}Rastgele
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Rastgele türde ağaçlar koy
STR_CANT_BUILD_CANALS :{WHITE}Buraya kanal yapılamaz...
STR_BUILD_CANALS_TIP :{BLACK}Kanal yap.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Buraya kilit yapılamaz...
@@ -2629,6 +2632,10 @@ STR_INCOMPATIBLE_RAIL_TYPES :Uyumsuz ray tü
STR_TRAIN_NO_POWER :{RED}Elektrik yok
STR_TRAIN_START_NO_CATENARY :Bu rayda elektrik olmadiği için bu tren çalışamaz
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}{STRING} artık kullanılabilir!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} artık kullanılabilir! - {STRING}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Yolda araba var
STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} Arabalar
+100
View File
@@ -232,8 +232,10 @@ STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARG
STR_0140_NEW_GAME :{BLACK}Nei Spul
STR_0141_LOAD_GAME :{BLACK}Laad Spul
STR_64 :64
STR_128 :128
STR_256 :256
STR_512 :512
STR_1024 :1024
STR_2048 :2048
STR_0148_GAME_OPTIONS :{BLACK}Spul Opsjes
@@ -1099,8 +1101,26 @@ STR_482B_TRANSPORTED :{YELLOW}{CARGO}
STR_482F_COST :{BLACK}Kostet: {YELLOW}{CURRENCY}
##id 0x5000
STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Tunnel mat earst fuorthelle wurde
STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Brêge mat earst fuorthelle wurde
STR_5008_CANNOT_START_AND_END_ON :{WHITE}Begjin en ein kin net op itselde plak wêze
STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Begjin en ein mat yn ien lijn wêze
STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
STR_5012_WOODEN :Hout
STR_5013_CONCRETE :Beton
STR_5014_TUBULAR_STEEL :Buis, Stiel
STR_5015_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Kin hjir gjin brêge bouwe...
STR_5016_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Kin hjir gjin tunnel bouwe...
STR_5017_RAILROAD_TUNNEL :Spoartunnel
STR_501F_WOODEN_RAIL_BRIDGE :Houten spoarbrêge
STR_5020_CONCRETE_RAIL_BRIDGE :Betonnen spoarbrêge
##id 0x5800
STR_5800_OBJECT_IN_THE_WAY :{WHITE}Objekt yn it paad
STR_5801_TRANSMITTER :Sendmast
STR_5802_LIGHTHOUSE :Fjoertoer
STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Kin dit stikje lân net keapje...
STR_5807_YOU_ALREADY_OWN_IT :{WHITE}...it is al fan dy!
############ WARNING, using range 0x6000 for strings that are stored in the savegame
@@ -1113,14 +1133,93 @@ STR_482F_COST :{BLACK}Kostet:
##id 0x6800
############ range for difficulty levels starts
STR_6801_EASY :{BLACK}Maklik
STR_6802_MEDIUM :{BLACK}Gewoan
############ range for difficulty levels ends
############ range for difficulty settings starts
STR_6805_MAXIMUM_NO_COMPETITORS :{LTBLUE}Maksimum oantal tsjinstanders: {ORANGE}{COMMA}
STR_6806_COMPETITOR_START_TIME :{LTBLUE}Tsjinstander begjint: {ORANGE}{STRING}
STR_6807_NO_OF_TOWNS :{LTBLUE}Oantal stêden: {ORANGE}{STRING}
STR_6808_NO_OF_INDUSTRIES :{LTBLUE}Oantal yndustrieen: {ORANGE}{STRING}
STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR :{LTBLUE}Konstruksjesnelhyd fan tsjinstanders: {ORANGE}{STRING}
STR_6810_COST_OF_CONSTRUCTION :{LTBLUE}Konstruksjekosten: {ORANGE}{STRING}
STR_6811_TERRAIN_TYPE :{LTBLUE}Terreinsoart: {ORANGE}{STRING}
STR_6813_ECONOMY :{LTBLUE}Ekonomy: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Gjin
STR_6816_LOW :Leech
STR_6817_NORMAL :Gewoan
STR_6818_HIGH :Heech
STR_6819 :{BLACK}{SMALLLEFTARROW}
STR_681A :{BLACK}{SMALLRIGHTARROW}
STR_681B_VERY_SLOW :Hiel dreech
STR_681C_SLOW :Dreech
STR_681D_MEDIUM :Gewoan
STR_681E_FAST :Hurd
STR_681F_VERY_FAST :Hiel hurd
STR_6820_LOW :Leech
STR_6821_MEDIUM :Gewoan
STR_6822_HIGH :Heech
STR_6823_NONE :Gjin
STR_6824_REDUCED :Minder
STR_6825_NORMAL :Gewoan
STR_6826_X1_5 :x1.5
STR_6827_X2 :x2
STR_6828_X3 :x3
STR_6829_X4 :x4
STR_682A_VERY_FLAT :Hiel Flak
STR_682B_FLAT :Flak
STR_682D_MOUNTAINOUS :Bergachtich
STR_682F_FLUCTUATING :Wikseljend
STR_6830_IMMEDIATE :Fuortendaliks
STR_6831_3_MONTHS_AFTER_PLAYER :3 moannen nei spyler
STR_6832_6_MONTHS_AFTER_PLAYER :6 moannen nei spyler
STR_6833_9_MONTHS_AFTER_PLAYER :9 moannen nei spyler
STR_6836_OFF :Ut
STR_6837_ON :Oan
##id 0x7000
STR_7000 :
STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
STR_7002_PLAYER :(Spyler {COMMA})
STR_7004_NEW_FACE :{BLACK}Nei Gesicht
STR_7005_COLOR_SCHEME :{BLACK}Kleurenskema
STR_7006_COLOR_SCHEME :{GOLD}Kleurenskema:
STR_7007_NEW_COLOR_SCHEME :{WHITE}Nei Kleurenskema
STR_700E_FINANCES :{WHITE}{COMPANY} Finansieen {BLACK}{PLAYERNAME}
STR_700F_EXPENDITURE_INCOME :{WHITE}Utjeften/Ynkomsten
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstruksje
STR_7018_TRAIN_INCOME :{GOLD}Ynkomsten Treinen
STR_701A_AIRCRAFT_INCOME :{GOLD}Ynkomsten Fleantúgen
STR_701B_SHIP_INCOME :{GOLD}Ynkomsten Skepen
STR_701C_LOAN_INTEREST :{GOLD}Rinte Liening
STR_701D_OTHER :{GOLD}Oaren
STR_701E :{BLACK}-{CURRENCY64}
STR_701F :{BLACK}+{CURRENCY64}
STR_7020_TOTAL :{WHITE}Totaal:
STR_7021 :{COMPANY}{PLAYERNAME}
STR_7022_INCOME_GRAPH :{WHITE}Ynkomsten Grafyk
STR_7024 :{COMMA}
STR_7027_LOAN :{WHITE}Liening
STR_7028 :{BLACK}{CURRENCY64}
STR_7029_BORROW :{BLACK}Lien {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Betelje {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} werom
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kin net mear jild liene
STR_702E_REQUIRED :{WHITE}...{CURRENCY} nedich
STR_702F_CAN_T_REPAY_LOAN :{WHITE}Kin liening net werombetelje
STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT :{BLACK}Selektear nei gesicht foar de bedriuwslieder
STR_7035_INCREASE_SIZE_OF_LOAN :{BLACK}Lien mear jild
STR_7036_REPAY_PART_OF_LOAN :{BLACK}Betelje in diel fan de liening werom
STR_7037_PRESIDENT :{WHITE}{PLAYERNAME}{}{GOLD}(Bedriuwslieder)
STR_7038_INAUGURATED :{GOLD}Oprjochte: {WHITE}{NUM}
STR_7042_NONE :{WHITE}Gjin
STR_7044_MALE :{BLACK}Man
STR_7045_FEMALE :{BLACK}Frou
STR_7046_NEW_FACE :{BLACK}Nei Gesicht
STR_704C_KEY :{BLACK}Kaai
@@ -1193,5 +1292,6 @@ SET_PERFORMANCE_DETAIL_INT :{BLACK}{NUM}
############ Tooltip measurment
############ Date formatting
########
+2 -2
View File
@@ -281,7 +281,7 @@ static byte MakeFinnishTownName(char *buf, uint32 seed, const char *last)
if (SeedChance(0, 15, seed) >= 10) {
strecat(buf, name_finnish_real[SeedChance(2, lengthof(name_finnish_real), seed)], last);
} else if (SeedChance(0, 15, seed) >= 5) {
// A two-part name by combining one of name_finnish_1 + "la"/"lä"
// A two-part name by combining one of name_finnish_1 + "la"/"lä"
// The reason for not having the contents of name_finnish_{1,2} in the same table is
// that the ones in name_finnish_2 are not good for this purpose.
uint sel = SeedChance( 0, lengthof(name_finnish_1), seed);
@@ -295,7 +295,7 @@ static byte MakeFinnishTownName(char *buf, uint32 seed, const char *last)
{
strecat(buf, "la", last);
} else {
strecat(buf, "", last);
strecat(buf, "", last);
}
} else {
// A two-part name by combining one of name_finnish_{1,2} + name_finnish_3.
+3 -1
View File
@@ -7,7 +7,7 @@
extern const char _openttd_revision[];
#elif defined(WITH_REV_HACK)
#define WITH_REV
const char _openttd_revision[] = WITH_REV_HACK;
const char _openttd_revision[] = "0.5.2";
#else
const char _openttd_revision[] = NOREV_STRING;
#endif
@@ -1397,11 +1397,13 @@ void NetworkStartUp(void)
byte cl_max = _network_game_info.clients_max;
byte cp_max = _network_game_info.companies_max;
byte sp_max = _network_game_info.spectators_max;
byte s_lang = _network_game_info.server_lang;
memset(&_network_game_info, 0, sizeof(_network_game_info));
_network_game_info.clients_max = cl_max;
_network_game_info.companies_max = cp_max;
_network_game_info.spectators_max = sp_max;
_network_game_info.server_lang = s_lang;
}
// Let's load the network in windows
+2 -2
View File
@@ -183,7 +183,7 @@ DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_CHAT)(NetworkAction action, DestType
// Data:
// uint8: ActionID (see network_data.h, NetworkAction)
// uint8: Destination Type (see network_data.h, DestType);
// uint8: Destination Player (1..MAX_PLAYERS)
// uint16: Destination Player
// String: Message (max MAX_TEXT_MSG_LEN)
//
@@ -191,7 +191,7 @@ DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_CHAT)(NetworkAction action, DestType
NetworkSend_uint8(p, action);
NetworkSend_uint8(p, type);
NetworkSend_uint8(p, dest);
NetworkSend_uint16(p, dest);
NetworkSend_string(p, msg);
NetworkSend_Packet(p, MY_CLIENT);
}
+23 -22
View File
@@ -1479,7 +1479,7 @@ void ShowJoinStatusWindowAfterJoin(void)
AllocateWindowDesc(&_network_join_status_window_desc);
}
static void SendChat(const char *buf, DestType type, byte dest)
static void SendChat(const char *buf, DestType type, int dest)
{
if (buf[0] == '\0') return;
if (!_network_server) {
@@ -1543,7 +1543,7 @@ static char *ChatTabCompletionFindText(char *buf)
static void ChatTabCompletion(Window *w)
{
static char _chat_tab_completion_buf[lengthof(_edit_str_buf)];
Textbuf *tb = &WP(w, querystr_d).text;
Textbuf *tb = &WP(w, chatquerystr_d).text;
uint len, tb_len;
uint item;
char *tb_buf, *pre_buf;
@@ -1601,7 +1601,7 @@ static void ChatTabCompletion(Window *w)
}
/* Update the textbuffer */
UpdateTextBufferSize(&WP(w, querystr_d).text);
UpdateTextBufferSize(&WP(w, chatquerystr_d).text);
SetWindowDirty(w);
free(pre_buf);
@@ -1615,17 +1615,17 @@ static void ChatTabCompletion(Window *w)
_chat_tab_completion_active = false;
/* Update the textbuffer */
UpdateTextBufferSize(&WP(w, querystr_d).text);
UpdateTextBufferSize(&WP(w, chatquerystr_d).text);
SetWindowDirty(w);
}
free(pre_buf);
}
/* uses querystr_d WP macro
* uses querystr_d->caption to store
* - type of chat message (Private/Team/All) in bytes 0-7
* - destination of chat message in the case of Team/Private in bytes 8-15 */
/*
* uses chatquerystr_d WP macro
* uses chatquerystr_d->caption to store type of chat message (Private/Team/All)
*/
static void ChatWindowWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
@@ -1644,8 +1644,8 @@ static void ChatWindowWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
assert(GB(WP(w, querystr_d).caption, 0, 8) < lengthof(chat_captions));
msg = chat_captions[GB(WP(w, querystr_d).caption, 0, 8)];
assert(WP(w, chatquerystr_d).caption < lengthof(chat_captions));
msg = chat_captions[WP(w, chatquerystr_d).caption];
DrawStringRightAligned(w->widget[2].left - 2, w->widget[2].top + 1, msg, 16);
DrawEditBox(w, &WP(w, querystr_d), 2);
} break;
@@ -1653,9 +1653,9 @@ static void ChatWindowWndProc(Window *w, WindowEvent *e)
case WE_CLICK:
switch (e->we.click.widget) {
case 3: { /* Send */
DestType type = GB(WP(w, querystr_d).caption, 0, 8);
byte dest = GB(WP(w, querystr_d).caption, 8, 8);
SendChat(WP(w, querystr_d).text.buf, type, dest);
DestType type = (DestType)WP(w, chatquerystr_d).caption;
int dest = WP(w, chatquerystr_d).dest;
SendChat(WP(w, chatquerystr_d).text.buf, type, dest);
} /* FALLTHROUGH */
case 0: /* Cancel */ DeleteWindow(w); break;
}
@@ -1672,9 +1672,9 @@ static void ChatWindowWndProc(Window *w, WindowEvent *e)
_chat_tab_completion_active = false;
switch (HandleEditBoxKey(w, &WP(w, querystr_d), 2, e)) {
case 1: { /* Return */
DestType type = GB(WP(w, querystr_d).caption, 0, 8);
byte dest = GB(WP(w, querystr_d).caption, 8, 8);
SendChat(WP(w, querystr_d).text.buf, type, dest);
DestType type = (DestType)WP(w, chatquerystr_d).caption;
int dest = WP(w, chatquerystr_d).dest;
SendChat(WP(w, chatquerystr_d).text.buf, type, dest);
} /* FALLTHROUGH */
case 2: /* Escape */ DeleteWindow(w); break;
}
@@ -1704,7 +1704,7 @@ static const WindowDesc _chat_window_desc = {
ChatWindowWndProc
};
void ShowNetworkChatQueryWindow(DestType type, byte dest)
void ShowNetworkChatQueryWindow(DestType type, int dest)
{
Window *w;
@@ -1716,11 +1716,12 @@ void ShowNetworkChatQueryWindow(DestType type, byte dest)
w = AllocateWindowDesc(&_chat_window_desc);
LowerWindowWidget(w, 2);
WP(w,querystr_d).caption = GB(type, 0, 8) | (dest << 8); // Misuse of caption
WP(w,querystr_d).wnd_class = WC_MAIN_TOOLBAR;
WP(w,querystr_d).wnd_num = 0;
WP(w,querystr_d).afilter = CS_ALPHANUMERAL;
InitializeTextBuffer(&WP(w, querystr_d).text, _edit_str_buf, lengthof(_edit_str_buf), 0);
WP(w, chatquerystr_d).caption = type; // Misuse of caption
WP(w, chatquerystr_d).dest = dest;
WP(w, chatquerystr_d).afilter = CS_ALPHANUMERAL;
WP(w, chatquerystr_d).wnd_class = WC_MAIN_TOOLBAR;
WP(w, chatquerystr_d).wnd_num = 0;
InitializeTextBuffer(&WP(w, chatquerystr_d).text, _edit_str_buf, lengthof(_edit_str_buf), 0);
}
#endif /* ENABLE_NETWORK */
+2 -2
View File
@@ -9,7 +9,7 @@
void ShowNetworkNeedPassword(NetworkPasswordType npt);
void ShowNetworkGiveMoneyWindow(byte player); // PlayerID
void ShowNetworkChatQueryWindow(DestType type, byte dest);
void ShowNetworkChatQueryWindow(DestType type, int dest);
void ShowJoinStatusWindowAfterJoin(void);
void ShowNetworkGameWindow(void);
void ShowClientList(void);
@@ -17,7 +17,7 @@ void ShowClientList(void);
#else /* ENABLE_NETWORK */
/* Network function stubs when networking is disabled */
static inline void ShowNetworkChatQueryWindow(byte desttype, byte dest) {}
static inline void ShowNetworkChatQueryWindow(byte desttype, int dest) {}
static inline void ShowClientList(void) {}
static inline void ShowJoinStatusWindowAfterJoin(void) {}
static inline void ShowNetworkGameWindow(void) {}
+1 -1
View File
@@ -1119,7 +1119,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_CHAT)
{
NetworkAction action = NetworkRecv_uint8(cs, p);
DestType desttype = NetworkRecv_uint8(cs, p);
int dest = NetworkRecv_uint8(cs, p);
int dest = NetworkRecv_uint16(cs, p);
char msg[MAX_TEXT_MSG_LEN];
NetworkRecv_string(cs, p, msg, MAX_TEXT_MSG_LEN);
+58 -64
View File
@@ -2096,79 +2096,73 @@ static void FeatureNewName(byte *buf, int len)
len -= (int)name_length;
if (name_length == 1) {
DEBUG(grf, 7) ("FeatureNewName: Can't add empty name");
} else if (name_length > 127) {
DEBUG(grf, 7) ("FeatureNewName: Too long a name (%d)", name_length);
} else {
DEBUG(grf, 8) ("FeatureNewName: %d <- %s", id, name);
DEBUG(grf, 8) ("FeatureNewName: %d <- %s", id, name);
switch (feature) {
case GSF_TRAIN:
case GSF_ROAD:
case GSF_SHIP:
case GSF_AIRCRAFT: {
if (id < TOTAL_NUM_ENGINES) {
StringID string = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_8000_KIRBY_PAUL_TANK_STEAM + id);
SetCustomEngineName(id, string);
} else {
AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, id);
}
break;
switch (feature) {
case GSF_TRAIN:
case GSF_ROAD:
case GSF_SHIP:
case GSF_AIRCRAFT: {
if (id < TOTAL_NUM_ENGINES) {
StringID string = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_8000_KIRBY_PAUL_TANK_STEAM + id);
SetCustomEngineName(id, string);
} else {
AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, id);
}
break;
}
default:
switch (GB(id, 8, 8)) {
case 0xC4: /* Station class name */
if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
grfmsg(GMS_WARN, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring.", GB(id, 0, 8));
} else {
StationClassID sclass = _cur_grffile->stations[GB(id, 0, 8)]->sclass;
SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED));
}
break;
default:
switch (GB(id, 8, 8)) {
case 0xC4: /* Station class name */
if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
grfmsg(GMS_WARN, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring.", GB(id, 0, 8));
} else {
StationClassID sclass = _cur_grffile->stations[GB(id, 0, 8)]->sclass;
SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED));
}
break;
case 0xC5: /* Station name */
if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
grfmsg(GMS_WARN, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring.", GB(id, 0, 8));
} else {
_cur_grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
}
break;
case 0xC5: /* Station name */
if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
grfmsg(GMS_WARN, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring.", GB(id, 0, 8));
} else {
_cur_grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
}
break;
case 0xC9:
case 0xD0:
case 0xDC:
AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
break;
case 0xC9:
case 0xD0:
case 0xDC:
AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
break;
default:
DEBUG(grf, 7) ("FeatureNewName: Unsupported ID (0x%04X)", id);
break;
}
break;
default:
DEBUG(grf, 7) ("FeatureNewName: Unsupported ID (0x%04X)", id);
break;
}
break;
#if 0
case GSF_CANAL :
case GSF_BRIDGE :
case GSF_TOWNHOUSE :
AddGRFString(_cur_spriteid, id, lang, name);
switch (GB(id, 8,8)) {
case 0xC9: /* House name */
default:
DEBUG(grf, 7) ("FeatureNewName: Unsupported ID (0x%04X)", id);
}
break;
case GSF_CANAL :
case GSF_BRIDGE :
case GSF_TOWNHOUSE :
AddGRFString(_cur_spriteid, id, lang, name);
switch (GB(id, 8,8)) {
case 0xC9: /* House name */
default:
DEBUG(grf, 7) ("FeatureNewName: Unsupported ID (0x%04X)", id);
}
break;
case GSF_INDUSTRIES :
case 0x48 : /* for generic strings */
AddGRFString(_cur_spriteid, id, lang, name);
break;
default :
DEBUG(grf,7) ("FeatureNewName: Unsupported feature (0x%02X)", feature);
break;
case GSF_INDUSTRIES :
case 0x48 : /* for generic strings */
AddGRFString(_cur_spriteid, id, lang, name);
break;
default :
DEBUG(grf,7) ("FeatureNewName: Unsupported feature (0x%02X)", feature);
break;
#endif
}
}
}
}
@@ -3505,7 +3499,7 @@ static void ResetNewGRFData(void)
ResetPriceBaseMultipliers();
/* Reset the curencies array */
ResetCurrencies();
ResetCurrencies(false);
// Reset station classes
ResetStationClasses();
+4 -4
View File
@@ -118,10 +118,10 @@ static inline usize EvalAdjust_ ## size(const DeterministicSpriteGroupAdjust *ad
case DSGA_OP_SMAX: return max(last_value, value); \
case DSGA_OP_UMIN: return min((usize)last_value, (usize)value); \
case DSGA_OP_UMAX: return max((usize)last_value, (usize)value); \
case DSGA_OP_SDIV: return last_value / value; \
case DSGA_OP_SMOD: return last_value % value; \
case DSGA_OP_UDIV: return (usize)last_value / (usize)value; \
case DSGA_OP_UMOD: return (usize)last_value % (usize)value; \
case DSGA_OP_SDIV: return value == 0 ? last_value : last_value / value; \
case DSGA_OP_SMOD: return value == 0 ? last_value : last_value % value; \
case DSGA_OP_UDIV: return value == 0 ? (usize)last_value : (usize)last_value / (usize)value; \
case DSGA_OP_UMOD: return value == 0 ? (usize)last_value : (usize)last_value % (usize)value; \
case DSGA_OP_MUL: return last_value * value; \
case DSGA_OP_AND: return last_value & value; \
case DSGA_OP_OR: return last_value | value; \
+8 -1
View File
@@ -602,6 +602,7 @@ static void DrawNewsString(int x, int y, uint16 color, const NewsItem *ni, uint
const char *ptr;
char *dest;
StringID str;
WChar c_last;
if (ni->display_mode == 3) {
str = _get_news_string_callback[ni->callback](ni);
@@ -615,15 +616,21 @@ static void DrawNewsString(int x, int y, uint16 color, const NewsItem *ni, uint
* from it such as big fonts, etc. */
ptr = buffer;
dest = buffer2;
c_last = '\0';
for (;;) {
WChar c = Utf8Consume(&ptr);
if (c == 0) break;
if (c == '\r') {
/* Make a space from a newline, but ignore multiple newlines */
if (c == '\n' && c_last != '\n') {
dest[0] = ' ';
dest++;
} else if (c == '\r') {
dest[0] = dest[1] = dest[2] = dest[3] = ' ';
dest += 4;
} else if (IsPrintable(c)) {
dest += Utf8Encode(dest, c);
}
c_last = c;
}
*dest = '\0';
+4
View File
@@ -344,6 +344,9 @@ static void FixOldVehicles(void)
FOR_ALL_VEHICLES(v) {
Vehicle *u;
/* We haven't used this bit for stations for ages */
if (v->type == VEH_Road) CLRBIT(v->u.road.state, 2);
FOR_ALL_VEHICLES_FROM(u, v->index + 1) {
/* If a vehicle has the same orders, add the link to eachother
* in both vehicles */
@@ -1511,6 +1514,7 @@ static bool LoadOldMain(LoadgameState *ls)
for (i = 0; i < OLD_MAP_SIZE; i ++) {
switch (GetTileType(i)) {
case MP_STATION: _m[i].m4 = 0; break; // We don't understand this grf mapping (yet)
case MP_RAILWAY:
/* We save presignals different from TTDPatch, convert them */
if (GetRailTileType(i) == RAIL_TILE_SIGNALS) {
+2 -2
View File
@@ -1242,8 +1242,8 @@ bool AfterLoadGame(void)
// If Load Scenario / New (Scenario) Game is used,
// a player does not exist yet. So create one here.
// 1 exeption: network-games. Those can have 0 players
// But this exeption is not true for network_servers!
if (!_players[0].is_active && (!_networking || (_networking && _network_server)))
// But this exeption is not true for non dedicated network_servers! */
if (!_players[0].is_active && (!_networking || (_networking && _network_server && !_network_dedicated)))
DoStartupNewPlayer(false);
DoZoomInOutWindow(ZOOM_NONE, w); // update button status
+2 -2
View File
@@ -28,7 +28,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="TRUE"
OptimizeForProcessor="1"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_REV_HACK"
StringPooling="TRUE"
ExceptionHandling="TRUE"
RuntimeLibrary="0"
@@ -101,7 +101,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_REV_HACK"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
+4 -4
View File
@@ -58,7 +58,7 @@
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="2"
OmitFramePointers="true"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_REV_HACK"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -170,7 +170,7 @@
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="2"
OmitFramePointers="true"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_REV_HACK"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -276,7 +276,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_REV_HACK"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -375,7 +375,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_REV_HACK"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
+3 -1
View File
@@ -463,6 +463,8 @@ static void RemoveSharedOrderVehicleList(Vehicle *v)
{
WindowClass window_class;
assert(v->orders != NULL);
switch (v->type) {
default: NOT_REACHED();
case VEH_Train: window_class = WC_TRAINS_LIST; break;
@@ -1161,7 +1163,7 @@ void DeleteVehicleOrders(Vehicle *v)
/* If we are the only one left in the Shared Order Vehicle List,
* remove it, as we are no longer a Shared Order Vehicle */
if (u->prev_shared == NULL && u->next_shared == NULL) RemoveSharedOrderVehicleList(u);
if (u->prev_shared == NULL && u->next_shared == NULL && u->orders != NULL) RemoveSharedOrderVehicleList(u);
/* We only need to update this-one, because if there is a third
* vehicle which shares the same order-list, nothing will change. If
+24
View File
@@ -1,3 +1,27 @@
openttd (0.5.2-1) unstable; urgency=low
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Tue, 29 May 2007 20:00:00 +0100
openttd (0.5.2~rc1-1) unstable; urgency=low
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Wed, 16 May 2007 23:35:39 +0100
openttd (0.5.1-1) unstable; urgency=low
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Fri, 20 Apr 2007 21:45:32 +0100
openttd (0.5.1~rc3-1) unstable; urgency=low
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Tue, 17 Apr 2007 22:00:46 +0100
openttd (0.5.1~rc2-1) unstable; urgency=low
* New upstream release.
+22 -17
View File
@@ -1,6 +1,6 @@
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "0.5.1" ; Define application version
!define INSTALLERVERSION 30 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPVERSION "0.5.2" ; Define application version
!define INSTALLERVERSION 34 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPURLLINK "http://www.openttd.org"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
@@ -81,6 +81,7 @@ Page custom ShowWarningsPage
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
!define MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT DisableBack
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
@@ -354,26 +355,30 @@ NoCD:
hasCD:
FunctionEnd
;---------------------------------------------------------------------
; Custom page function to show notices for running OpenTTD
;----------------------------------------------------------------------------------
; Disable the "Back" button on finish page if the installer is run on Win9x systems
Function DisableBack
Call GetWindowsVersion
Pop $R0
StrCmp $R0 "win9x" 0 WinNT
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "BackEnabled" "0"
WinNT:
ClearErrors
FunctionEnd
;----------------------------------------------------------------------------------
; Custom page function to show notices for running OpenTTD (only for win32 systems)
; We have extracted this custom page as Notice in the .onInit function
Function ShowWarningsPage
Call GetWindowsVersion
Pop $R0
; Don't show the UNICODE notice if the installer is run on Win9x systems
StrCmp $R0 "win9x" 0 WinNT
Abort
WinNT:
!insertmacro MUI_HEADER_TEXT "Installation Complete" "Important notices for OpenTTD usage."
!insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "notice.ini" "Notice"
!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "Notice"
Call GetWindowsVersion
Pop $R0
; Hide the MSLU text if the installer is not run on Win9x systems
StrCmp $R0 "winnt" 0 Win9x
!insertmacro MUI_INSTALLOPTIONS_READ $R1 "Notice" "Field 1" "HWND" ; MSLU groupbox
ShowWindow $R1 0
!insertmacro MUI_INSTALLOPTIONS_READ $R1 "Notice" "Field 2" "HWND" ; MSLU text
ShowWindow $R1 0
!insertmacro MUI_INSTALLOPTIONS_READ $R1 "Notice" "Field 3" "HWND" ; MSLU link
ShowWindow $R1 0
Win9x:
ClearErrors
!insertmacro MUI_INSTALLOPTIONS_SHOW
FunctionEnd
+4 -28
View File
@@ -1,41 +1,17 @@
; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=6
NumFields=3
CancelEnabled=0
[Field 1]
Type=Groupbox
Text=Notice for Windows 9x/ME users!
Left=8
Right=292
Top=80
Bottom=138
[Field 2]
Type=Label
Text=OpenTTD will not work without the Microsoft Layer for Unicode installed.\r\nDue to licensing issues we cannot bundle this file with the installer. Please download MSLU from the Microsoft website and extract UnicoWS.dll to the same directory as the openttd executabe.
Left=13
Right=284
Top=91
Bottom=127
[Field 3]
Type=Link
Text=Microsoft Layer for Unicode
State=http://www.microsoft.com/downloads/details.aspx?FamilyId=73BA7BD7-ED06-4F0D-80A4-2A7EEAEE17E2&displaylang=en
Left=197
Right=284
Top=127
Bottom=135
[Field 4]
Type=Groupbox
Text=UNICODE support
Left=8
Right=292
Top=0
Bottom=75
[Field 5]
[Field 2]
Type=Label
Text=This version of OpenTTD has support for UNICODE, allowing users to use non-ASCII character sets such as Russian or Japanese.\r\nSelecting such a language will result in an unusable and garbled interface. You will need to specify a font that has support for these characters in openttd.cfg, or alternatively use an appropiate grf file.\r\n\r\nFor more information please refer to the readme or the wiki.
Left=13
@@ -43,7 +19,7 @@ Right=284
Top=9
Bottom=65
[Field 6]
[Field 3]
Type=Link
Text=OpenTTD wiki
Left=238
+4 -4
View File
@@ -65,8 +65,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,5,0,0
PRODUCTVERSION 0,5,0,0
FILEVERSION 0,5,2,0
PRODUCTVERSION 0,5,2,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -84,14 +84,14 @@ BEGIN
VALUE "Comments", "This program is licensed under the GNU General Public License.\0"
VALUE "CompanyName", "OpenTTD Development Team\0"
VALUE "FileDescription", "OpenTTD\0"
VALUE "FileVersion", "Development Version\0"
VALUE "FileVersion", "0.5.2\0"
VALUE "InternalName", "openttd\0"
VALUE "LegalCopyright", "Copyright © OpenTTD Developers 2002-2007. All Rights Reserved.\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "openttd.exe\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "OpenTTD\0"
VALUE "ProductVersion", "0.0.0.0\0"
VALUE "ProductVersion", "0.5.2.0\0"
VALUE "SpecialBuild", "-\0"
END
END
+2 -2
View File
@@ -871,8 +871,8 @@ int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
}
/* This is the joining client who wants a new company */
if (_local_player != _network_playas) {
assert(_local_player == PLAYER_SPECTATOR && _network_playas == p->index);
if (_local_player != _network_playas && _network_playas == p->index) {
assert(_local_player == PLAYER_SPECTATOR);
SetLocalPlayer(p->index);
MarkWholeScreenDirty();
}
+20 -11
View File
@@ -187,7 +187,7 @@ uint GetRailFoundation(Slope tileh, TrackBits bits)
static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
{
if (IsSteepSlope(tileh)) {
if (existing == 0) {
if (_patches.build_on_slopes && existing == 0) {
TrackBits valid = TRACK_BIT_CROSS | (HASBIT(1 << SLOPE_STEEP_W | 1 << SLOPE_STEEP_E, tileh) ? TRACK_BIT_VERT : TRACK_BIT_HORZ);
if (valid & rail_bits) return _price.terraform;
}
@@ -272,7 +272,7 @@ int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
case MP_RAILWAY:
if (!CheckTrackCombination(tile, trackbit, flags) ||
!EnsureNoVehicle(tile)) {
!EnsureNoVehicleOnGround(tile)) {
return CMD_ERROR;
}
if (!IsTileOwner(tile, _current_player) ||
@@ -307,7 +307,7 @@ int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
}
#undef M
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) {
if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS);
@@ -384,7 +384,7 @@ int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (!IsLevelCrossing(tile) ||
GetCrossingRailBits(tile) != trackbit ||
(_current_player != OWNER_WATER && !CheckTileOwnership(tile)) ||
!EnsureNoVehicle(tile)) {
!EnsureNoVehicleOnGround(tile)) {
return CMD_ERROR;
}
@@ -399,7 +399,7 @@ int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (!IsPlainRailTile(tile) ||
(_current_player != OWNER_WATER && !CheckTileOwnership(tile)) ||
!EnsureNoVehicle(tile)) {
!EnsureNoVehicleOnGround(tile)) {
return CMD_ERROR;
}
@@ -654,7 +654,7 @@ int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
sigvar = HASBIT(p1, 3) ? SIG_SEMAPHORE : SIG_ELECTRIC;
pre_signal = HASBIT(p1, 3);
if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicle(tile))
if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicleOnGround(tile))
return CMD_ERROR;
/* Protect against invalid signal copying */
@@ -833,7 +833,7 @@ int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (!ValParamTrackOrientation(track) ||
!IsTileType(tile, MP_RAILWAY) ||
!EnsureNoVehicle(tile) ||
!EnsureNoVehicleOnGround(tile) ||
!HasSignalOnTrack(tile, track)) {
return CMD_ERROR;
}
@@ -874,15 +874,24 @@ int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
typedef int32 DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
/**
* Switches the rail type.
* Railtypes are stored on a per-tile basis, not on a per-track basis, so
* all the tracks in the given tile will be converted.
* @param tile The tile on which the railtype is to be convert.
* @param totype The railtype we want to convert to
* @param exec Switches between test and execute mode
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
static int32 DoConvertRail(TileIndex tile, RailType totype, bool exec)
{
if (!CheckTileOwnership(tile)) return CMD_ERROR;
if (!EnsureNoVehicle(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
// tile is already of requested type?
if (GetRailType(tile) == totype) return CMD_ERROR;
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
if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
@@ -984,7 +993,7 @@ static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
return CMD_ERROR;
if (!EnsureNoVehicle(tile))
if (!EnsureNoVehicleOnGround(tile))
return CMD_ERROR;
if (flags & DC_EXEC) {
+2 -2
View File
@@ -1,6 +1,6 @@
OpenTTD README
Last updated: 2007-03-23
Release version: 0.5.1-RC2
Last updated: 2007-05-29
Release version: 0.5.2
------------------------------------------------------------------------
+14 -6
View File
@@ -308,7 +308,7 @@ int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if ((existing & pieces) == pieces) {
return_cmd_error(STR_1007_ALREADY_BUILT);
}
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
break;
case ROAD_TILE_CROSSING:
@@ -352,7 +352,7 @@ int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
default: goto do_clear;
}
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (flags & DC_EXEC) {
YapfNotifyTrackLayoutChange(tile, FIND_FIRST_BIT(GetTrackBits(tile)));
@@ -422,13 +422,21 @@ do_clear:;
return cost;
}
/**
* Switches the rail type on a level crossing.
* @param tile The tile on which the railtype is to be convert.
* @param totype The railtype we want to convert to
* @param exec Switches between test and execute mode
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
{
// not a railroad crossing?
if (!IsLevelCrossing(tile)) return CMD_ERROR;
// not owned by me?
if (!CheckTileOwnership(tile) || !EnsureNoVehicle(tile)) return CMD_ERROR;
if (!CheckTileOwnership(tile) || !EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (GetRailTypeCrossing(tile) == totype) return CMD_ERROR;
@@ -441,7 +449,7 @@ int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, FIND_FIRST_BIT(GetCrossingRailBits(tile)));
}
return _price.build_rail >> 1;
return _price.build_rail / 2;
}
@@ -573,7 +581,7 @@ int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (p1 > 3) return CMD_ERROR; // check direction
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
tileh = GetTileSlope(tile, NULL);
if (tileh != SLOPE_FLAT && (
@@ -939,7 +947,7 @@ static void TileLoop_Road(TileIndex tile)
if (t->road_build_months != 0 &&
(DistanceManhattan(t->xy, tile) < 8 || grp != 0) &&
GetRoadTileType(tile) == ROAD_TILE_NORMAL && (GetRoadBits(tile) == ROAD_X || GetRoadBits(tile) == ROAD_Y)) {
if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicle(tile) && CHANCE16(1, 20)) {
if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicleOnGround(tile) && CHANCE16(1, 20)) {
StartRoadWorks(tile);
SndPlayTileFx(SND_21_JACKHAMMER, tile);
+68 -30
View File
@@ -260,7 +260,13 @@ static IniFile *ini_load(const char *filename)
}
} else if (group) {
// find end of keyname
for (t = s; *t != '\0' && *t != '=' && *t != '\t' && *t != ' '; t++);
if (*s == '\"') {
s++;
for (t = s; *t != '\0' && *t != '\"'; t++);
if (*t == '\"') *t = ' ';
} else {
for (t = s; *t != '\0' && *t != '=' && *t != '\t' && *t != ' '; t++);
}
// it's an item in an existing group
item = ini_item_alloc(group, s, t-s);
@@ -348,11 +354,18 @@ static bool ini_save(const char *filename, IniFile *ini)
assert(item->value != NULL);
if (item->comment != NULL) fputs(item->comment, f);
/* protect item->name with quotes if needed */
if (strchr(item->name, ' ') != NULL) {
fprintf(f, "\"%s\"", item->name);
} else {
fprintf(f, "%s", item->name);
}
/* Don't give an equal sign to list items that don't have a parameter */
if (group->type == IGT_LIST && *item->value == '\0') {
fprintf(f, "%s\n", item->name);
fprintf(f, "\n");
} else {
fprintf(f, "%s = %s\n", item->name, item->value);
fprintf(f, " = %s\n", item->value);
}
}
}
@@ -976,7 +989,7 @@ static void ini_save_setting_list(IniFile *ini, const char *grpname, char **list
#define SDTG_CONDOMANY(name, type, flags, guiflags, var, def, max, full, str, proc, from, to)\
SDTG_GENERAL(name, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, max, 0, full, str, proc, from, to)
#define SDTG_OMANY(name, type, flags, guiflags, var, def, max, full, str, proc)\
SDTG_CONDOMANY(name, type, flags, guiflags, var, def, max full, str, proc, 0, SL_MAX_VERSION)
SDTG_CONDOMANY(name, type, flags, guiflags, var, def, max, full, str, proc, 0, SL_MAX_VERSION)
#define SDTG_CONDMMANY(name, type, flags, guiflags, var, def, full, str, proc, from, to)\
SDTG_GENERAL(name, SDT_MANYOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, 0, 0, full, str, proc, from, to)
@@ -1205,29 +1218,30 @@ static const SettingDescGlobVarList _misc_settings[] = {
#ifdef ENABLE_NETWORK
static const SettingDescGlobVarList _network_settings[] = {
SDTG_VAR("sync_freq", SLE_UINT16,C|S,0, _network_sync_freq, 100, 0, 100, 0, STR_NULL, NULL),
SDTG_VAR("frame_freq", SLE_UINT8,C|S,0, _network_frame_freq, 0, 0, 100, 0, STR_NULL, NULL),
SDTG_VAR("max_join_time", SLE_UINT16, S, 0, _network_max_join_time, 500, 0, 32000, 0, STR_NULL, NULL),
SDTG_BOOL("pause_on_join", S, 0, _network_pause_on_join, true, STR_NULL, NULL),
SDTG_STR("server_bind_ip", SLE_STRB, S, 0, _network_server_bind_ip_host, "0.0.0.0", STR_NULL, NULL),
SDTG_VAR("server_port", SLE_UINT16, S, 0, _network_server_port, NETWORK_DEFAULT_PORT, 0, 65535, 0, STR_NULL, NULL),
SDTG_BOOL("server_advertise", S, 0, _network_advertise, false, STR_NULL, NULL),
SDTG_VAR("lan_internet", SLE_UINT8, S, 0, _network_lan_internet, 0, 0, 1, 0, STR_NULL, NULL),
SDTG_STR("player_name", SLE_STRB, S, 0, _network_player_name, NULL, STR_NULL, NULL),
SDTG_STR("server_password", SLE_STRB, S, 0, _network_server_password, NULL, STR_NULL, NULL),
SDTG_STR("rcon_password", SLE_STRB, S, 0, _network_rcon_password, NULL, STR_NULL, NULL),
SDTG_STR("server_name", SLE_STRB, S, 0, _network_server_name, NULL, STR_NULL, NULL),
SDTG_STR("connect_to_ip", SLE_STRB, S, 0, _network_default_ip, NULL, STR_NULL, NULL),
SDTG_STR("network_id", SLE_STRB, S, 0, _network_unique_id, NULL, STR_NULL, NULL),
SDTG_BOOL("autoclean_companies", S, 0, _network_autoclean_companies, false, STR_NULL, NULL),
SDTG_VAR("autoclean_unprotected",SLE_UINT8, S, 0, _network_autoclean_unprotected,12, 0, 60, 0, STR_NULL, NULL),
SDTG_VAR("autoclean_protected", SLE_UINT8, S, 0, _network_autoclean_protected, 36, 0, 180, 0, STR_NULL, NULL),
SDTG_VAR("max_companies", SLE_UINT8, S, 0, _network_game_info.companies_max, 8, 0, 8, 0, STR_NULL, NULL),
SDTG_VAR("max_clients", SLE_UINT8, S, 0, _network_game_info.clients_max, 10, 0, 10, 0, STR_NULL, NULL),
SDTG_VAR("max_spectators", SLE_UINT8, S, 0, _network_game_info.spectators_max, 10, 0, 10, 0, STR_NULL, NULL),
SDTG_VAR("restart_game_year", SLE_INT32, S,D0, _network_restart_game_year, 0, MIN_YEAR, MAX_YEAR, 1, STR_NULL, NULL),
SDTG_VAR("min_players", SLE_UINT8, S, 0, _network_min_players, 0, 0, 10, 0, STR_NULL, NULL),
SDTG_END()
SDTG_VAR("sync_freq", SLE_UINT16,C|S,0, _network_sync_freq, 100, 0, 100, 0, STR_NULL, NULL),
SDTG_VAR("frame_freq", SLE_UINT8,C|S,0, _network_frame_freq, 0, 0, 100, 0, STR_NULL, NULL),
SDTG_VAR("max_join_time", SLE_UINT16, S, 0, _network_max_join_time, 500, 0, 32000, 0, STR_NULL, NULL),
SDTG_BOOL("pause_on_join", S, 0, _network_pause_on_join, true, STR_NULL, NULL),
SDTG_STR("server_bind_ip", SLE_STRB, S, 0, _network_server_bind_ip_host, "0.0.0.0", STR_NULL, NULL),
SDTG_VAR("server_port", SLE_UINT16, S, 0, _network_server_port, NETWORK_DEFAULT_PORT, 0, 65535, 0, STR_NULL, NULL),
SDTG_BOOL("server_advertise", S, 0, _network_advertise, false, STR_NULL, NULL),
SDTG_VAR("lan_internet", SLE_UINT8, S, 0, _network_lan_internet, 0, 0, 1, 0, STR_NULL, NULL),
SDTG_STR("player_name", SLE_STRB, S, 0, _network_player_name, NULL, STR_NULL, NULL),
SDTG_STR("server_password", SLE_STRB, S, 0, _network_server_password, NULL, STR_NULL, NULL),
SDTG_STR("rcon_password", SLE_STRB, S, 0, _network_rcon_password, NULL, STR_NULL, NULL),
SDTG_STR("server_name", SLE_STRB, S, 0, _network_server_name, NULL, STR_NULL, NULL),
SDTG_STR("connect_to_ip", SLE_STRB, S, 0, _network_default_ip, NULL, STR_NULL, NULL),
SDTG_STR("network_id", SLE_STRB, S, 0, _network_unique_id, NULL, STR_NULL, NULL),
SDTG_BOOL("autoclean_companies", S, 0, _network_autoclean_companies, false, STR_NULL, NULL),
SDTG_VAR("autoclean_unprotected",SLE_UINT8, S, 0, _network_autoclean_unprotected,12, 0, 60, 0, STR_NULL, NULL),
SDTG_VAR("autoclean_protected", SLE_UINT8, S, 0, _network_autoclean_protected, 36, 0, 180, 0, STR_NULL, NULL),
SDTG_VAR("max_companies", SLE_UINT8, S, 0, _network_game_info.companies_max, 8, 0, 8, 0, STR_NULL, NULL),
SDTG_VAR("max_clients", SLE_UINT8, S, 0, _network_game_info.clients_max, 10, 0, 10, 0, STR_NULL, NULL),
SDTG_VAR("max_spectators", SLE_UINT8, S, 0, _network_game_info.spectators_max, 10, 0, 10, 0, STR_NULL, NULL),
SDTG_VAR("restart_game_year", SLE_INT32, S,D0, _network_restart_game_year, 0, MIN_YEAR, MAX_YEAR, 1, STR_NULL, NULL),
SDTG_VAR("min_players", SLE_UINT8, S, 0, _network_min_players, 0, 0, 10, 0, STR_NULL, NULL),
SDTG_OMANY("server_lang", SLE_UINT8, S, 0, _network_game_info.server_lang, 0, 3, "ANY|ENGLISH|GERMAN|FRENCH", STR_NULL, NULL),
SDTG_END()
};
#endif /* ENABLE_NETWORK */
@@ -1241,12 +1255,12 @@ static const SettingDesc _gameopt_settings[] = {
* and why not byte for example? */
SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, (SLE_FILE_I16 | SLE_VAR_I32), 0, 0, GameOptions, diff, 17, 0, 0, 0, 0, NULL, STR_NULL, NULL, 0, 3),
SDT_GENERAL("diff_custom", SDT_INTLIST, SL_ARR, (SLE_FILE_I16 | SLE_VAR_I32), 0, 0, GameOptions, diff, 18, 0, 0, 0, 0, NULL, STR_NULL, NULL, 4, SL_MAX_VERSION),
SDT_VAR(GameOptions, diff_level,SLE_UINT8, 0, 0, 9, 0, 9, 0, STR_NULL, NULL),
SDT_VAR(GameOptions, diff_level,SLE_UINT8, 0, 0, 0, 0, 3, 0, STR_NULL, NULL),
SDT_OMANY(GameOptions, currency, SLE_UINT8, N, 0, 0, CUSTOM_CURRENCY_ID, "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|ROL|RUR|SIT|SEK|YTL|SKK|BRR|custom", STR_NULL, NULL),
SDT_OMANY(GameOptions, units, SLE_UINT8, N, 0, 1, 2, "imperial|metric|si", STR_NULL, NULL),
SDT_OMANY(GameOptions, town_name, SLE_UINT8, 0, 0, 0, 20, "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovakish|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan", STR_NULL, NULL),
SDT_OMANY(GameOptions, landscape, SLE_UINT8, 0, 0, 0, 3, "normal|hilly|desert|candy", STR_NULL, NULL),
SDT_VAR(GameOptions, snow_line, SLE_UINT8, 0, 0, 1, 0, 56, 0, STR_NULL, NULL),
SDT_VAR(GameOptions, snow_line, SLE_UINT8, 0, 0, 7 * TILE_HEIGHT, 2 * TILE_HEIGHT, 13 * TILE_HEIGHT, 0, STR_NULL, NULL),
SDT_CONDOMANY(GameOptions,autosave, SLE_UINT8, 0, 22, N, 0, 0, 0, "", STR_NULL, NULL),
SDT_CONDOMANY(GameOptions,autosave, SLE_UINT8,23, SL_MAX_VERSION, S, 0, 1, 4, "off|monthly|quarterly|half year|yearly", STR_NULL, NULL),
SDT_OMANY(GameOptions, road_side, SLE_UINT8, 0, 0, 1, 1, "left|right", STR_NULL, NULL),
@@ -1478,7 +1492,7 @@ const SettingDesc _patch_settings[] = {
static const SettingDesc _currency_settings[] = {
SDT_VAR(CurrencySpec, rate, SLE_UINT16, S, 0, 1, 0, 100, 0, STR_NULL, NULL),
SDT_CHR(CurrencySpec, separator, S, 0, ".", STR_NULL, NULL),
SDT_VAR(CurrencySpec, to_euro, SLE_INT32, S, 0, 0, 0,1000, 0, STR_NULL, NULL),
SDT_VAR(CurrencySpec, to_euro, SLE_INT32, S, 0, 0, 0,3000, 0, STR_NULL, NULL),
SDT_STR(CurrencySpec, prefix, SLE_STRBQ, S, 0, NULL, STR_NULL, NULL),
SDT_STR(CurrencySpec, suffix, SLE_STRBQ, S, 0, " credits", STR_NULL, NULL),
SDT_END()
@@ -1650,14 +1664,18 @@ static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc, SettingDescP
#endif /* ENABLE_NETWORK */
}
extern void CheckDifficultyLevels(void);
/** Load the values from the configuration files */
void LoadFromConfig(void)
{
IniFile *ini = ini_load(_config_file);
ResetCurrencies(false);
HandleSettingDescs(ini, ini_load_settings, ini_load_setting_list);
_grfconfig_newgame = GRFLoadConfig(ini, "newgrf", false);
_grfconfig_static = GRFLoadConfig(ini, "newgrf-static", true);
_news_display_opt = NewsDisplayLoadConfig(ini, "news_display");
CheckDifficultyLevels();
ini_free(ini);
}
@@ -1796,6 +1814,26 @@ void IConsoleGetPatchSetting(const char *name)
name, value, (sd->desc.flags & SGF_0ISDISABLED) ? "(0) " : "", sd->desc.min, sd->desc.max);
}
void IConsoleListPatches(void)
{
const SettingDesc *sd;
IConsolePrintF(_icolour_warn, "All patches with their current value:");
for (sd = _patch_settings; sd->save.cmd != SL_END; sd++) {
char value[80];
const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_patches_newgame : &_patches, &sd->save);
if (sd->desc.cmd == SDT_BOOLX) {
snprintf(value, lengthof(value), (*(bool*)ptr == 1) ? "on" : "off");
} else {
snprintf(value, lengthof(value), "%d", (uint32)ReadValue(ptr, sd->save.conv));
}
IConsolePrintF(_icolour_def, "%s = %s", sd->desc.name, value);
}
IConsolePrintF(_icolour_warn, "Use 'patch' command to change a value");
}
/** Save and load handler for patches/settings
* @param osd SettingDesc struct containing all information
* @param object can be either NULL in which case we load global variables or
+1
View File
@@ -71,6 +71,7 @@ extern Patches _patches_newgame;
bool IConsoleSetPatchSetting(const char *name, int32 value);
void IConsoleGetPatchSetting(const char *name);
void IConsoleListPatches(void);
const SettingDesc *GetPatchFromName(const char *name, uint *i);
bool SetPatchValue(uint index, const Patches *object, int32 value);
+21
View File
@@ -200,6 +200,7 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
break;
case 24: /* Change interface language */
ReadLanguagePack(e->we.dropdown.index);
UpdateAllStationVirtCoord();
MarkWholeScreenDirty();
break;
case 27: /* Change resolution */
@@ -368,6 +369,24 @@ void SetDifficultyLevel(int mode, GameOptions *gm_opt)
}
}
/**
* Checks the difficulty levels read from the configuration and
* forces them to be correct when invalid.
*/
void CheckDifficultyLevels(void)
{
if (_opt_newgame.diff_level != 3) {
SetDifficultyLevel(_opt_newgame.diff_level, &_opt_newgame);
} else {
uint i;
for (i = 0; i < GAME_DIFFICULTY_NUM; i++) {
int *diff = ((int*)&_opt_newgame.diff) + i;
*diff = clamp(*diff, _game_setting_info[i].min, _game_setting_info[i].max);
*diff -= *diff % _game_setting_info[i].step;
}
}
}
extern void StartupEconomy(void);
enum {
@@ -479,7 +498,9 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
// save value in temporary variable
((int*)&_opt_mod_temp.diff)[btn] = val;
RaiseWindowWidget(w, _opt_mod_temp.diff_level + 3);
SetDifficultyLevel(3, &_opt_mod_temp); // set difficulty level to custom
LowerWindowWidget(w, _opt_mod_temp.diff_level + 3);
SetWindowDirty(w);
} break;
case 3: case 4: case 5: case 6: /* Easy / Medium / Hard / Custom */
+11 -3
View File
@@ -1096,7 +1096,7 @@ int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint3
int w = plat_len;
do {
byte layout = *layout_ptr++;
MakeRailStation(tile, st->owner, st->index, axis, layout, GB(p2, 0, 4));
MakeRailStation(tile, st->owner, st->index, axis, layout & ~1, GB(p2, 0, 4));
SetCustomStationSpecIndex(tile, specindex);
SetStationTileRandomBits(tile, GB(Random(), 0, 4));
@@ -1104,7 +1104,7 @@ int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint3
/* Use a fixed axis for GetPlatformInfo as our platforms / numtracks are always the right way around */
uint32 platinfo = GetPlatformInfo(AXIS_X, 0, plat_len, numtracks_orig, plat_len - w, numtracks_orig - numtracks, false);
uint16 callback = GetStationCallback(CBID_STATION_TILE_LAYOUT, platinfo, 0, statspec, st, tile);
if (callback != CALLBACK_FAILED && callback < 8) SetStationGfx(tile, callback + axis);
if (callback != CALLBACK_FAILED && callback < 8) SetStationGfx(tile, (callback & ~1) + axis);
}
tile += tile_delta;
@@ -1337,6 +1337,14 @@ static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
return cost;
}
/**
* Switches the rail type at a railway station tile.
* @param tile The tile on which the railtype is to be convert.
* @param totype The railtype we want to convert to
* @param exec Switches between test and execute mode
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
{
const Station* st = GetStationByTile(tile);
@@ -1357,7 +1365,7 @@ int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
}
return _price.build_rail >> 1;
return _price.build_rail / 2;
}
/** Heavy wizardry used to add a roadstop to a station.
+3
View File
@@ -152,6 +152,7 @@ void UndrawTextMessage(void)
if (x + width >= _screen.width) {
width = _screen.width - x;
}
if (width <= 0 || height <= 0) return;
_textmessage_visible = false;
// Put our 'shot' back to the screen
@@ -219,6 +220,8 @@ void DrawTextMessage(void)
if (x + width >= _screen.width) {
width = _screen.width - x;
}
if (width <= 0 || height <= 0) return;
// Make a copy of the screen as it is before painting (for undraw)
memcpy_pitch(
_textmessage_backup,
+154 -2
View File
@@ -4,7 +4,7 @@
#include "thread.h"
#include <stdlib.h>
#if defined(__AMIGA__) || defined(__MORPHOS__) || defined(NO_THREADS)
#if defined(__AMIGA__) || defined(NO_THREADS)
OTTDThread *OTTDCreateThread(OTTDThreadFunc function, void *arg) { return NULL; }
void *OTTDJoinThread(OTTDThread *t) { return NULL; }
void OTTDExitThread(void) { NOT_REACHED(); };
@@ -62,7 +62,7 @@ void OTTDExitThread(void)
_endthread();
}
#elif defined(UNIX)
#elif defined(UNIX) && !defined(__MORPHOS__)
#include <pthread.h>
@@ -154,4 +154,156 @@ void OTTDExitThread(void)
{
ExitThread(0);
}
#elif defined(MORPHOS)
#include <exec/types.h>
#include <exec/rawfmt.h>
#include <dos/dostags.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <setjmp.h>
/* NOTE: this code heavily depends on latest libnix updates. So make
* sure you link with new stuff which supports semaphore locking of
* the IO resources, else it will just go foobar. */
struct OTTDThreadStartupMessage {
struct Message msg; ///< standard exec.library message (MUST be the first thing in the message struct!)
OTTDThreadFunc func; ///< function the thread will execute
void *arg; ///< functions arguments for the thread function
void *ret; ///< return value of the thread function
jmp_buf jumpstore; ///< storage for the setjump state
};
struct OTTDThread {
struct MsgPort *replyport;
struct OTTDThreadStartupMessage msg;
};
/**
* Default OpenTTD STDIO/ERR debug output is not very useful for this, so we
* utilize serial/ramdebug instead.
*/
#ifndef NO_DEBUG_MESSAGES
void KPutStr(CONST_STRPTR format)
{
RawDoFmt(format, NULL, (void (*)())RAWFMTFUNC_SERIAL, NULL);
}
#else
#define KPutStr(x)
#endif
static void Proxy(void)
{
struct Task *child = FindTask(NULL);
struct OTTDThreadStartupMessage *msg;
/* Make sure, we don't block the parent. */
SetTaskPri(child, -5);
KPutStr("[Child] Progressing...\n");
if (NewGetTaskAttrs(NULL, &msg, sizeof(struct OTTDThreadStartupMessage *), TASKINFOTYPE_STARTUPMSG, TAG_DONE) && msg != NULL) {
/* Make use of setjmp() here, so this point can be reached again from inside
* OTTDExitThread() which can be called from anythere inside msg->func.
* It's a bit ugly and in worst case it leaks some memory. */
if (setjmp(msg->jumpstore) == 0) {
msg->ret = msg->func(msg->arg);
} else {
KPutStr("[Child] Returned to main()\n");
}
}
/* Quit the child, exec.library will reply the startup msg internally. */
KPutStr("[Child] Done.\n");
}
OTTDThread* OTTDCreateThread(OTTDThreadFunc function, void *arg)
{
OTTDThread *t;
struct Task *parent;
KPutStr("[OpenTTD] Create thread...\n");
t = (struct OTTDThread *)AllocVecTaskPooled(sizeof(struct OTTDThread));
if (t == NULL) return NULL;
parent = FindTask(NULL);
/* Make sure main thread runs with sane priority */
SetTaskPri(parent, 0);
/* Things we'll pass down to the child by utilizing NP_StartupMsg */
t->msg.func = function;
t->msg.arg = arg;
t->msg.ret = NULL;
t->replyport = CreateMsgPort();
if (t->replyport != NULL) {
struct Process *child;
t->msg.msg.mn_Node.ln_Type = NT_MESSAGE;
t->msg.msg.mn_ReplyPort = t->replyport;
t->msg.msg.mn_Length = sizeof(struct OTTDThreadStartupMessage);
child = CreateNewProcTags(
NP_CodeType, CODETYPE_PPC,
NP_Entry, Proxy,
NP_StartupMsg, (ULONG)&t->msg,
NP_Priority, 5UL,
NP_Name, (ULONG)"OpenTTD Thread",
NP_PPCStackSize, 131072UL,
TAG_DONE);
if (child != NULL) {
KPutStr("[OpenTTD] Child process launched.\n");
return t;
}
DeleteMsgPort(t->replyport);
}
FreeVecTaskPooled(t);
return NULL;
}
void* OTTDJoinThread(OTTDThread *t)
{
struct OTTDThreadStartupMessage *reply;
void *ret;
KPutStr("[OpenTTD] Join threads...\n");
if (t == NULL) return NULL;
KPutStr("[OpenTTD] Wait for child to quit...\n");
WaitPort(t->replyport);
reply = (struct OTTDThreadStartupMessage *)GetMsg(t->replyport);
ret = reply->ret;
DeleteMsgPort(t->replyport);
FreeVecTaskPooled(t);
return ret;
}
void OTTDExitThread()
{
struct OTTDThreadStartupMessage *msg;
KPutStr("[Child] Aborting...\n");
if (NewGetTaskAttrs(NULL, &msg, sizeof(struct OTTDThreadStartupMessage *), TASKINFOTYPE_STARTUPMSG, TAG_DONE) && msg != NULL) {
KPutStr("[Child] Jumping back...\n");
longjmp(msg->jumpstore, 0xBEAFCAFE);
}
NOT_REACHED();
}
#endif
+1 -1
View File
@@ -803,7 +803,7 @@ static bool GrowTown(Town *t)
for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
/* Only work with plain land that not already has a house */
if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR))) {
if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
_current_player = old_player;
return true;
+21 -5
View File
@@ -764,6 +764,16 @@ static int32 ClearTile_TunnelBridge(TileIndex tile, byte flags)
return CMD_ERROR;
}
/**
* Switches the rail type for a tunnel or a bridgehead. As the railtype
* on the bridge are determined by the one of the bridgehead, this
* functions converts the railtype on the entire bridge.
* @param tile The tile on which the railtype is to be convert.
* @param totype The railtype we want to convert to
* @param exec Switches between test and execute mode
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
{
TileIndex endtile;
@@ -792,7 +802,7 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, track);
YapfNotifyTrackLayoutChange(endtile, track);
}
return (length + 1) * (_price.build_rail >> 1);
return (length + 1) * (_price.build_rail / 2);
} else if (IsBridge(tile) &&
IsBridgeMiddle(tile) &&
IsTransportUnderBridge(tile) &&
@@ -809,7 +819,7 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, GetRailUnderBridge(tile));
}
return _price.build_rail >> 1;
return _price.build_rail / 2;
} else if (IsBridge(tile) && IsBridgeRamp(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
TileIndexDiff delta;
int32 cost;
@@ -837,14 +847,14 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, track);
YapfNotifyTrackLayoutChange(endtile, track);
}
cost = 2 * (_price.build_rail >> 1);
cost = 2 * (_price.build_rail / 2);
delta = TileOffsByDiagDir(GetBridgeRampDirection(tile));
for (tile += delta; tile != endtile; tile += delta) {
if (exec) {
SetRailTypeOnBridge(tile, totype);
MarkTileDirtyByTile(tile);
}
cost += _price.build_rail >> 1;
cost += _price.build_rail / 2;
}
return cost;
@@ -1339,7 +1349,13 @@ static void ChangeTileOwner_TunnelBridge(TileIndex tile, PlayerID old_player, Pl
SetTileOwner(tile, OWNER_NONE);
}
} else {
DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
/* When clearing the bridge/tunnel failed there are still vehicles on/in
* the bridge/tunnel. As all *our* vehicles are already removed, they
* must be of another owner. Therefor this must be a road bridge/tunnel.
* In that case we can safely reassign the ownership to OWNER_NONE. */
SetTileOwner(tile, OWNER_NONE);
}
}
}
}
+1 -1
View File
@@ -55,7 +55,7 @@ bool FiosIsRoot(const char *path)
#else
/* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
const char *s = strchr(path, ':');
return s[1] == '\0';
return s != NULL && s[1] == '\0';
#endif
}
+1
View File
@@ -2088,6 +2088,7 @@ static int32 ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
new_v->service_interval = old_v->service_interval;
new_front = true;
new_v->unitnumber = old_v->unitnumber; // use the same unit number
new_v->dest_tile = old_v->dest_tile;
new_v->current_order = old_v->current_order;
if (old_v->type == VEH_Train && GetNextVehicle(old_v) != NULL){
+12
View File
@@ -212,6 +212,7 @@ static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT event, DWORD
static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static uint32 keycode = 0;
static bool console = false;
switch (msg) {
case WM_CREATE:
@@ -363,6 +364,10 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
}
#endif /* UNICODE */
case WM_DEADCHAR:
console = GB(lParam, 16, 8) == 41;
return 0;
case WM_CHAR: {
uint scancode = GB(lParam, 16, 8);
uint charcode = wParam;
@@ -370,6 +375,13 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
/* Silently drop all non-text messages as those were handled by WM_KEYDOWN */
if (wParam < VK_SPACE) return 0;
/* If the console key is a dead-key, we need to press it twice to get a WM_CHAR message.
* But we then get two WM_CHAR messages, so ignore the first one */
if (console && scancode == 41) {
console = false;
return 0;
}
#if !defined(UNICODE)
{
wchar_t w;
+3
View File
@@ -887,6 +887,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
* save it because argv[] points into this buffer and thus needs to
* be available between subsequent calls to FS2OTTD() */
char cmdlinebuf[MAX_PATH];
/* Check if a win9x user started the win32 version */
if (HASBIT(GetVersion(), 31)) error("This version of OpenTTD doesn't run on windows 95/98/ME.\nPlease download the win9x binary and try again.");
#endif /* UNICODE */
cmdline = WIDE_TO_MB_BUFFER(GetCommandLine(), cmdlinebuf, lengthof(cmdlinebuf));
+11
View File
@@ -348,6 +348,17 @@ typedef struct querystr_d {
} querystr_d;
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(querystr_d));
typedef struct chatquerystr_d {
StringID caption;
WindowClass wnd_class;
WindowNumber wnd_num;
Textbuf text;
const char *orig;
CharSetFilter afilter;
int dest;
} chatquerystr_d;
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(chatquerystr_d));
typedef struct query_d {
StringID caption;
StringID message;
+4 -3
View File
@@ -117,7 +117,8 @@ public:
while (true) {
m_num_steps++;
Node *n = m_nodes.GetBestOpenNode();
if (n == NULL) break;
if (n == NULL)
break;
// if the best open node was worse than the best path found, we can finish
if (m_pBestDestNode != NULL && m_pBestDestNode->GetCost() < n->GetCostEstimate())
@@ -159,9 +160,9 @@ public:
/** If path was found return the best node that has reached the destination. Otherwise
* return the best visited node (which was nearest to the destination).
*/
FORCEINLINE Node& GetBestNode()
FORCEINLINE Node* GetBestNode()
{
return (m_pBestDestNode != NULL) ? *m_pBestDestNode : *m_pBestIntermediateNode;
return (m_pBestDestNode != NULL) ? m_pBestDestNode : m_pBestIntermediateNode;
}
/** Calls NodeList::CreateNewNode() - allocates new node that can be filled and used
+5 -5
View File
@@ -59,11 +59,11 @@ public:
// some path found
// get found depot tile
Node& n = Yapf().GetBestNode();
*depot_tile = n.GetLastTile();
Node *n = Yapf().GetBestNode();
*depot_tile = n->GetLastTile();
// walk through the path back to the origin
Node* pNode = &n;
Node *pNode = n;
while (pNode->m_parent != NULL) {
pNode = pNode->m_parent;
}
@@ -126,7 +126,7 @@ public:
// if path not found - return INVALID_TRACKDIR
Trackdir next_trackdir = INVALID_TRACKDIR;
Node* pNode = &Yapf().GetBestNode();
Node *pNode = Yapf().GetBestNode();
if (pNode != NULL) {
// path was found or at least suggested
// walk through the path back to the origin
@@ -163,7 +163,7 @@ public:
// path was found
// walk through the path back to the origin
Node* pNode = &Yapf().GetBestNode();
Node *pNode = Yapf().GetBestNode();
while (pNode->m_parent != NULL) {
pNode = pNode->m_parent;
}
+4 -4
View File
@@ -278,7 +278,7 @@ public:
// if path not found - return INVALID_TRACKDIR
Trackdir next_trackdir = INVALID_TRACKDIR;
Node* pNode = &Yapf().GetBestNode();
Node *pNode = Yapf().GetBestNode();
if (pNode != NULL) {
// path was found or at least suggested
// walk through the path back to its origin
@@ -320,7 +320,7 @@ public:
// if path not found - return distance = UINT_MAX
uint dist = UINT_MAX;
Node* pNode = &Yapf().GetBestNode();
Node *pNode = Yapf().GetBestNode();
if (pNode != NULL) {
// path was found or at least suggested
// get the path cost estimate
@@ -362,8 +362,8 @@ public:
// some path found
// get found depot tile
Node& n = Yapf().GetBestNode();
TileIndex depot_tile = n.m_segment_last_tile;
Node *n = Yapf().GetBestNode();
TileIndex depot_tile = n->m_segment_last_tile;
assert(IsTileDepotType(depot_tile, TRANSPORT_ROAD));
Depot* ret = GetDepotByTile(depot_tile);
return ret;
+4 -4
View File
@@ -59,13 +59,13 @@ public:
pf.SetOrigin(src_tile, trackdirs);
pf.SetDestination(v->dest_tile, dest_trackdirs);
// find best path
bool bFound = pf.FindPath(v);
pf.FindPath(v);
Trackdir next_trackdir = INVALID_TRACKDIR; // this would mean "path not found"
if (bFound) {
// path was found
Node* pNode = pf.GetBestNode();
if (pNode != NULL) {
// walk through the path back to the origin
Node* pNode = &pf.GetBestNode();
Node* pPrevNode = NULL;
while (pNode->m_parent != NULL) {
pPrevNode = pNode;