mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-22 18:49:40 +00:00
Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9df8a3bd4c | |||
| 4f757bb914 | |||
| aafb49b3c4 | |||
| 4bbc264c72 | |||
| f042798507 | |||
| 909edb84af | |||
| 906a606418 | |||
| 2c6a0e46a9 | |||
| 236237740a | |||
| 3a195edcad | |||
| c50cf74889 | |||
| 4b6d1f9027 | |||
| c9c087e858 | |||
| ac66e29910 | |||
| b7749bde91 | |||
| 635eff5e51 | |||
| 4cd6870777 | |||
| 54cfb12334 | |||
| 2d746c52c8 | |||
| cb001e017a | |||
| 9bee2fc641 | |||
| 7399e107e1 | |||
| 70db6b3f40 | |||
| ac6aefa07b | |||
| c04f0af19b | |||
| c8c8667dc8 | |||
| a0688e8d85 | |||
| c85022e3db |
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -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년 앞당깁니다.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+15
-15
@@ -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
|
||||
|
||||
@@ -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
@@ -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}
|
||||
|
||||
+351
-351
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
########
|
||||
|
||||
@@ -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, "lä", last);
|
||||
strecat(buf, "lä", last);
|
||||
}
|
||||
} else {
|
||||
// A two-part name by combining one of name_finnish_{1,2} + name_finnish_3.
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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';
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user