Compare commits

..

1 Commits

Author SHA1 Message Date
rubidium d0b24d7b4d (svn r9383) -Release 0.5.1-RC1. 2007-03-20 21:25:34 +00:00
117 changed files with 3178 additions and 4044 deletions
+32 -31
View File
@@ -268,7 +268,7 @@ ENDIAN_CHECK=endian_check$(EXE)
STRGEN=strgen/strgen$(EXE)
OSXAPP="OpenTTD.app"
REV := 0.5.3-RC1
REV := 0.5.1-RC1
# define flag to use for -lrt (some OSes overwrites this later for compatibility)
ifndef LRT
@@ -836,12 +836,8 @@ ifdef WIN32
SRCS += sound/win32_s.c
SRCS += video/win32_v.c
else
ifdef OS2
SRCS += os2.c
else
SRCS += unix.c
SRCS += music/extmidi.c
endif
SRCS += unix.c
SRCS += music/extmidi.c
endif
ifdef OSX
@@ -946,31 +942,36 @@ lang/%.lng: lang/%.txt $(STRGEN) lang/english.txt
ifdef MORPHOS
release: all
$(Q)rm -fr "/t/openttd-$(REV)-morphos.lha"
$(Q)rm -fr "/t/openttd-$(RELEASE)-morphos.lha"
$(Q)mkdir -p "/t/"
$(Q)mkdir -p "/t/openttd-$(REV)-morphos"
$(Q)mkdir -p "/t/openttd-$(REV)-morphos/docs"
$(Q)mkdir -p "/t/openttd-$(REV)-morphos/data"
$(Q)mkdir -p "/t/openttd-$(REV)-morphos/lang"
$(Q)mkdir -p "/t/openttd-$(REV)-morphos/scenario"
$(Q)mkdir -p "/t/openttd-$(REV)-morphos/scenario/heightmap"
$(Q)cp -R $(TTD) "/t/openttd-$(REV)-morphos/"
$(Q)cp data/* "/t/openttd-$(REV)-morphos/data/"
$(Q)cp lang/*.lng "/t/openttd-$(REV)-morphos/lang/"
$(Q)-cp scenario/*.scn "/t/openttd-$(REV)-morphos/scenario/"
$(Q)-cp scenario/heightmap/* "/t/openttd-$(REV)-morphos/scenario/heightmap/"
$(Q)cp readme.txt "/t/openttd-$(REV)-morphos/docs/ReadMe"
$(Q)cp COPYING "/t/openttd-$(REV)-morphos/docs/"
$(Q)cp changelog.txt "/t/openttd-$(REV)-morphos/docs/ChangeLog"
$(Q)cp known-bugs.txt "/t/openttd-$(REV)-morphos/docs/known-bugs.txt"
$(Q)cp os/morphos/icons/openttd.info "/t/openttd-$(REV)-morphos/$(TTD).info"
$(Q)cp os/morphos/icons/docs.info "/t/openttd-$(REV)-morphos/docs.info"
$(Q)cp os/morphos/icons/drawer.info "/t/openttd-$(REV)-morphos.info"
$(Q)strip --strip-all --strip-unneeded --remove-section .comment "/t/openttd-$(REV)-morphos/$(TTD)"
$(Q)lha a -r "t:openttd-$(REV)-morphos.lha" "t:openttd-$(REV)-morphos"
$(Q)lha a "t:openttd-$(REV)-morphos.lha" "t:openttd-$(REV)-morphos.info"
$(Q)rm -fr "/t/openttd-$(REV)-morphos"
$(Q)rm -fr "/t/openttd-$(REV)-morphos.info"
$(Q)mkdir -p "/t/openttd-$(RELEASE)-morphos"
$(Q)mkdir -p "/t/openttd-$(RELEASE)-morphos/docs"
$(Q)mkdir -p "/t/openttd-$(RELEASE)-morphos/data"
$(Q)mkdir -p "/t/openttd-$(RELEASE)-morphos/lang"
$(Q)mkdir -p "/t/openttd-$(RELEASE)-morphos/scenario"
$(Q)mkdir -p "/t/openttd-$(RELEASE)-morphos/scenario/heightmap"
$(Q)cp -R $(TTD) "/t/openttd-$(RELEASE)-morphos/"
$(Q)cp data/* "/t/openttd-$(RELEASE)-morphos/data/"
$(Q)cp lang/*.lng "/t/openttd-$(RELEASE)-morphos/lang/"
$(Q)-cp scenario/*.scn "/t/openttd-$(RELEASE)-morphos/scenario/"
$(Q)-cp scenario/heightmap/* "/t/openttd-$(RELEASE)-morphos/scenario/heightmap/"
$(Q)cp readme.txt "/t/openttd-$(RELEASE)-morphos/docs/ReadMe"
$(Q)cp docs/console.txt "/t/openttd-$(RELEASE)-morphos/docs/Console"
$(Q)cp COPYING "/t/openttd-$(RELEASE)-morphos/docs/"
$(Q)cp changelog.txt "/t/openttd-$(RELEASE)-morphos/docs/ChangeLog"
$(Q)cp known-bugs.txt "/t/openttd-$(RELEASE)-morphos/docs/known-bugs.txt"
$(Q)cp os/morphos/icons/openttd.info "/t/openttd-$(RELEASE)-morphos/$(TTD).info"
$(Q)cp os/morphos/icons/docs.info "/t/openttd-$(RELEASE)-morphos/docs.info"
$(Q)cp os/morphos/icons/drawer.info "/t/openttd-$(RELEASE)-morphos.info"
$(Q)cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/ReadMe.info"
$(Q)cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/Console.info"
$(Q)cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/COPYING.info"
$(Q)cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/ChangeLog.info"
$(Q)strip --strip-all --strip-unneeded --remove-section .comment "/t/openttd-$(RELEASE)-morphos/$(TTD)"
$(Q)lha a -r "t:openttd-$(RELEASE)-morphos.lha" "t:openttd-$(RELEASE)-morphos"
$(Q)lha a "t:openttd-$(RELEASE)-morphos.lha" "t:openttd-$(RELEASE)-morphos.info"
$(Q)rm -fr "/t/openttd-$(RELEASE)-morphos"
$(Q)rm -fr "/t/openttd-$(RELEASE)-morphos.info"
@echo "Release archive can be found in RAM:t/ now."
.PHONY: release
+1 -1
View File
@@ -3838,7 +3838,7 @@ static void AiHandleTakeover(Player *p)
if (best_pl->player_money >> 1 >= p->bankrupt_value) {
// Computer wants to buy it.
old_p = _current_player;
_current_player = best_pl->index;
_current_player = p->index;
DoCommand(0, old_p, 0, DC_EXEC, CMD_BUY_COMPANY);
_current_player = old_p;
}
+2 -2
View File
@@ -180,7 +180,7 @@ static const AirportMovingData _airport_moving_data_international[51] = {
{ 193, 104, AMED_NOSPDCLAMP | AMED_SLOWTURN, 0 }, // 32 Fly to landing position in air
{ 105, 104, AMED_NOSPDCLAMP | AMED_LAND, 0 }, // 33 Going down for land
{ 3, 104, AMED_NOSPDCLAMP | AMED_BRAKE, 0 }, // 34 Just landed, brake until end of runway
{ 12, 104, AMED_SLOWTURN, 0 }, // 35 Just landed, turn around and taxi 1 square
{ 12, 104, 0, 0 }, // 35 Just landed, turn around and taxi 1 square
{ 7, 84, 0, 0 }, // 36 Taxi from runway to crossing
{ -31, 209, AMED_NOSPDCLAMP | AMED_SLOWTURN, 0 }, // 37 Fly around waiting for a landing spot (north-east)
{ 1, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, 0 }, // 38 Fly around waiting for a landing spot (north-west)
@@ -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, 1 }, // 59 Accelerate to end of runway2
{ 136, 152, AMED_EXACTPOS, 5 }, // 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
+1 -3
View File
@@ -31,7 +31,6 @@ CommandCallback CcPlaySound10;
CommandCallback CcPlaceSign;
CommandCallback CcTerraform;
CommandCallback CcBuildTown;
CommandCallback CcGiveMoney;
/* rail_gui.c */
CommandCallback CcPlaySound1E;
@@ -86,8 +85,7 @@ CommandCallback *_callback_table[] = {
/* 0x17 */ CcCloneShip,
/* 0x18 */ CcCloneTrain,
/* 0x19 */ CcAI,
/* 0x1A */ CcCloneVehicle,
/* 0x1B */ CcGiveMoney,
/* 0x1A */ CcCloneVehicle
};
const int _callback_table_count = lengthof(_callback_table);
+41 -132
View File
@@ -1,140 +1,43 @@
0.5.3-RC1 (2007-06-28)
------------------------------------------------------------------------
- Feature: Make the client list window (for network games) stickyable (r10293)
- Feature: console command to get the current game date (r10137)
- Fix: Waypoints could be renamed when you are not the owner (r10368)
- Fix: Smooth economy did not close primary industries and it allowed increasing of production of industries that should not have rising productions (r10348, r10347, r10290)
- Fix: Acceleration for trains on slopes is not calculated properly [FS#786] (r10344, r10317)
- Fix: The 'old' pathfinders (OPF and NPF) for road vehicles could not find a path when in a tunnel [FS#290] (r10345)
- Fix: Only add the autoreplace menu when autoreplace actually knows about the group [FS#880] (r10337)
- Fix: Signal state sometimes not properly set when the signal "pathfinder" reached the end of a line [FS#910] (r10336)
- Fix: News messages were shown over the endgame/highscore windows [FS#943] (r10333)
- Fix: Rail could be destroyed when building tunnels (r10306)
- Fix: Flush the output of the dedicated server console (r10295)
- Fix: The "pause" key did not work in the scenario editor (r10294)
- Fix: Age non-front engines too (so when you move engines around in the depot they do not get age 0 when they are much older [FS#202] (r10288)
- Fix: Do not make everyone spectator if 1 joining client failed to create new company (r10284)
- Fix: Remove invalid characters (for the file system) from savegame names [FS#916, FS#850] (r10272, r10116)
- Fix: Some old savegames could have the wrong bits unset (r10268, r10147)
- Fix: Do not look in every direction for tunnels when building one, one direction is enough (r10258)
- Fix: [Windows] Do not mess desktop when using ALT-TAB [FS#876] (r10251, r10186)
- Fix: Take the age of the front vehicle for station rating (r10246)
- Fix: Terraforming wipes out canals. Now you always have to remove the canal before terraforming, instead of "just" removing the canal [FS#594] (r10240)
- Fix: Only 2 trains could crash at one time as collision checking stopped on the first hit. This could technically cause desyncs in network games as the collision hash order is not guaranteed [FS#892] (r10222)
- Fix: Land under foundations was terraform when it shouldn't be terraformed [FS#882, FS#890] (r10219)
- Fix: Do not make a 270 degree turn on the international airport when a 90 degree turn is enough (r10187)
- Fix: Crash when trying to get the aircraft movement state of an aircraft going to a just deleted airport [FS#874] (r10165)
- Fix: Airports did not flood when there are aircraft on the airport [FS#601] (r10155)
- Fix: Some vehicles were not drawn when having a high resolution and a high zoom-out level [FS#870] (r10154)
- Fix: Vehicles disappear when crossing certain tiles [FS#869] (r10153)
- Fix: Train disconnects in some old TTD savegames [FS#862] (10151)
- Fix: OpenTTD assumes that the resolution is at least 1 by 1, so force the resolution to be always at least 1 by 1 (r10139)
- Fix: When you got a sufficiently small resolution, there is a possibility for a division by zero when a sound is played (r10138)
- Fix: When removing a dock, a ship will always try to reach the old location of the dock even when it cannot anymore because it the old location of the dock is now land instead of water [FS#810] (r10131)
- Fix: SetCurrentGrfLangID returned the wrong language ids for most languages (r10130)
- Fix: Some NewGRFs use the same (unused in the "current" climate) sprite IDs. Normally this gives some artefacts, but when one NewGRF expects it to be a sprite and another NewGRF overwrites it with a non-sprite nasty things happen (drawing a non-sprite crashes OTTD) [FS#838] (r10109)
- Fix: Multiple subsequent "give money" actions could result in duplicate messages that money has been transfered when it only happened once, or tell you paid money when you did not [FS#834, FS#839] (r10087, r10085)
- Fix: "Deactivate Electrified Railways" did not work [FS#836] (10083)
- Fix: Memory leaks in the networking code [FS#846, FS#844] (r10082, r10075)
- Fix: Coverage area highlight was still show when it was turned off for docks [FS#835] (r10068)
- Fix: Do not use override engine type for articulated wagon parts (r10048)
- Fix: Sprite resulting from '?' substitution was reloaded into the cache entry for SPR_IMG_QUERY instead of the original sprite cache entry. This resulted in unaccounted missing sprite cache memory, and was exacerbated because the original missing sprite was not cached, so it did it again and again and again. Slowdowns and boom (r10038)
- Fix: One could build on (some) slopes when building on slopes was disabled [FS#823] (r10030)
- Fix: When deleting the first engine of a train with multiple engines, only reopen the train window if the player had the original train window open. This fixes 'random' windows opening for multiple players of the same company (r10028)
- Fix: When selling trains, if there were no wagons between multiheaded engines the rear part could be checked despite having already been deleted (10023)
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)
- Fix: reading out of an array caused a segmentation fault [FS#694] (r9394)
0.5.1-RC1 (2007-03-20)
------------------------------------------------------------------------
- Feature: Translation dependant formatting of dates (r8906)
- Feature: Kick inactive initial network connections after some time [FS#115] (r9038, r9061)
- Feature: Kick inactive initial network connections after some time (r9038, r9061)
- Feature: Add an extra news group for opening and closing of industries (r9097)
- Codechange: Disable shares by default and increase the default maximum distance from edge for oil refineries (r9339)
- Codechange: When you started openttd with '-g' you got the same map every run (r9205)
- Codechange: When all news-setting buttons are 'full', make the for-all button show 'full' too (r9137)
- Codechange: Disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flood water at height level 0 [FS#622, FS#629] (r9105, r9115)
- Codechange: The station list, sorted by cargo rating, now takes stations into account that have no cargo waiting [FS#595] (r9062)
- Fix: Close the Shared Order Vehicle List if you remove the shared link with only 2 vehicles (r9338)
- Fix: A34-1000, Z-Shuttle, and Kelling K1 are now listed as small aircraft (r9298)
- Fix: Shared orders got messed up when the 'first' trains got removed in the depot [FS#685] (r9277)
- Fix: Use a less CPU-intensive algorithm to find a random industry for the AI to prevent it slowing down the game [FS#644] (r9251)
- Fix: When loading games, enroute_from was updated in the wrong place, causing issues with TTD savegames/scenarios (r9147)
- Fix: "Train is lost" message is generated incorrectly [FS#676] (r9146)
- Fix: Difficulty level button was not selected when opening the difficulty window (r9117)
- Fix: The wrong catenary wires were drawn for tunnel entrances [FS#612] (r9077)
- Fix: The intercontinental airport used 'T-junction' runway sprites when there is no exit in the middle of the runway as in the city airport [FS#529] (r9076)
- Fix: [win] dedicated console now doesn't need an extra 'enter' to fully quit [FS#459] (r9074)
- Fix: Take over companies properly in multiplayer games [FS#459] (r9071)
- Fix: When a bribe failed and you haven't picked up cargo yet, you would never be able to do so for a given station [FS#404] (r9070)
- Fix: Don't keep on scrolling for non-numeric values in settings, but require reclick [FS#663] (r9064)
- Fix: The personal (.openttd) directories were hidden in the load/save directory listings [FS#652] (r9043)
- Fix: Desync caused by buffer overflow [FS#664] (r9027)
- Fix: When cutting strings into multiple lines also take into consideration whitespace characters of more than 1 byte length. (r9012)
- Fix: Play the correct engine sound based on the engine type instead of the sprite (r9009)
- Fix: New locomotive names were not announced in the news, it said "new railway locomotive available - railway locomotive" [FS#581] (r9000, r9001)
- Fix: [NewGRF] Do not select a disabled platform length/number of track count when going out of drag-drop mode [FS#450] (r8999)
- Fix: [win] Resolution doubled in cfg file when fullscreen mode used [FS#642] (r8994)
- Fix: The industry list should also be (re)set when the number of industries is 0 [FS#656] (r8980)
- Fix: [win] Possible buffer overflow if unicode text is pasted into an input box and needs trimming. (r8975)
- Fix: [win] Support compilation with the Vista Platform SDK (r8974)
- Codechange: Change windows unicode handling and allow a pure non-unicode build to function. (r9055)
- Codechange: Be more lenient when trimming UTF-8 strings and don't terminate the string when an invalid encoding is encountered, but only focus on maximum length. (r9083)
- Codechange: Dsable shares by default and increase the default maximum distance from edge for oil refineries (r9339)
- Regression: [win32] Possible buffer overflow if unicode text is pasted into an input box and needs trimming. (r8975)
- Fix: NewGRF support for vehicle variable 48 (r8943)
- Fix: Crash on loading savegames with GRFs that do not have their GRF info/name set (r8955)
- Fix: [NewGRF] support for vehicle variable 48 was wrong (r8943)
- Fix: Support compilation with the Vista Platform SDK (r8974)
- Fix: The industry list should also be (re)set when the number of industries is 0 (r8980)
- Fix: Resolution doubled in cfg file when fullscreen mode used (r8994)
- Fix: Do not select a disabled platform length/number of track count when going out of drag-drop mode (r8999)
- Fix: New locomotive names were not announced in the news, it said "new railway locomotive available - railway locomotive" (r9000, r9001)
- Fix: Play the correct engine sound based on the engine type instead of the sprite (r9009)
- Fix: When cutting strings into multiple lines also take into consideration whitespace characters of more than 1 byte length. (r9012)
- Fix: Desync caused by buffer overflow (r9027)
- Fix: The personal (.openttd) directories were hidden in the load/save directory listings (r9043)
- Fix: The station list, sorted by cargo rating, now takes stations into account that have no cargo waiting (r9062)
- Fix: Don't keep on scrolling for non-numeric values in settings, but require reclick (r9064)
- Fix: When a bribe failed and you haven't picked up cargo yet, you would never be able to do so for a given station (r9070)
- Fix: Take over companies properly in multiplayer games (r9071)
- Fix: win32 dedicated console now doesn't need an extra 'enter' to fully quit (r9074)
- Fix: The intercontinental airport used 'T-junction' runway sprites when there is no exit in the middle of the runway as in the city airport (r9076)
- Fix: The wrong catenary wires were drawn for tunnel entrances (r9077)
- Fix: [win9x] Clipboard paste for Windows95 correctly converts the input to the current locale. (r9084)
- Fix: Disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flooding water at height level 0 (r9105)
- Fix: Make clear in the tooltips when the canal build tool (in the scenario editor) makes flooding water (r9115)
- Fix: Difficulty level button was not selected when opening the difficulty window (r9117)
- Fix: "Train is lost" message is generated incorrectly (r9146)
- Fix: When loadin games, enroute_from was updated in the wrong place, causing issues with TTD savegames/scenarios (r9147)
- Fix: When you started openttd with '-g' you got the same map every run (r9205)
- Fix: Shared orders got messed up when the 'first' trains got removed in the depot (r9277)
- Fix: Use a less CPU-intensive algorithm to find a random industry for the AI to prevent it slowing down the game (r9251)
- Fix: A34-1000, Z-Shuttle, and Kelling K1 are now listed as small aircraft (r9298)
- Fix: Assert() when you removed the orders of a shared list while having the shared order vehicle list open (r9337)
- Fix: Close the Shared Order Vehicle List if you remove the shared link with only 2 vehicles (r9338)
- Fix: When all news-setting buttons are 'full', make the for-all button show 'full' too (r9137)
0.5.0 (2007-02-27)
@@ -1433,6 +1336,7 @@
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
@@ -1445,6 +1349,7 @@
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
@@ -1505,6 +1410,7 @@
0.1.4 (2004-03-25)
------------------------------------------------------------------------
- Feature: crash submit system on win32
- Fix: train smoke clouds
- Fix: train engine sounds
@@ -1545,6 +1451,7 @@
0.1.3 (2004-03-18)
------------------------------------------------------------------------
- Fixed message options window
- Fixed company takeover/purchase
- Feature: Improved mouse scroll zooming
@@ -1568,6 +1475,7 @@
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
@@ -1575,6 +1483,7 @@
0.1.1 (2004-03-14)
------------------------------------------------------------------------
- Preliminary presignal support
- Added external MIDI driver for unix version (by robertnorris)
- Added DirectMusic driver for Win32 version
+1 -9
View File
@@ -17,7 +17,6 @@
#include "unmovable_map.h"
#include "genworld.h"
#include "industry.h"
#include "water_map.h"
typedef struct TerraformerHeightMod {
TileIndex tile;
@@ -112,7 +111,7 @@ static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
// basement and then you raise/lower the other corner.
tileh = GetTileSlope(tile, &z);
if (tileh == unsafe_slope[mode] ||
tileh == (SLOPE_STEEP | ComplementSlope(unsafe_slope[mode]))) {
tileh == ComplementSlope(unsafe_slope[mode])) {
_terraform_err_tile = tile;
_error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
return -1;
@@ -137,13 +136,6 @@ static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
}
}
/* Canals can't be terraformed */
if (IsClearWaterTile(tile) && IsCanal(tile)) {
_terraform_err_tile = tile;
_error_message = STR_MUST_DEMOLISH_CANAL_FIRST;
return -1;
}
ret = DoCommand(tile, 0,0, ts->flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) {
+2 -2
View File
@@ -335,7 +335,7 @@ int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
CommandProc *proc;
/* Do not even think about executing out-of-bounds tile-commands */
if (tile >= MapSize() || IsTileType(tile, MP_VOID)) {
if (tile >= MapSize()) {
_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() || IsTileType(tile, MP_VOID)) {
if (tile >= MapSize()) {
_cmd_text = NULL;
return false;
}
+1 -2
View File
@@ -385,8 +385,7 @@ void IConsolePrint(uint16 color_code, const char *string)
str_validate(str);
if (_network_dedicated) {
fprintf(stdout, "%s\n", str);
fflush(stdout);
printf("%s\n", str);
IConsoleWriteToLogFile(str);
free(str); // free duplicated string since it's not used anymore
return;
+6 -39
View File
@@ -928,20 +928,6 @@ DEF_CONSOLE_CMD(ConGetSeed)
return true;
}
DEF_CONSOLE_CMD(ConGetDate)
{
YearMonthDay ymd;
if (argc == 0) {
IConsoleHelp("Returns the current date (day-month-year) of the game. Usage: 'getdate'");
return true;
}
ConvertDateToYMD(_date, &ymd);
IConsolePrintF(_icolour_def, "Date: %d-%d-%d", ymd.day, ymd.month + 1, ymd.year);
return true;
}
DEF_CONSOLE_CMD(ConAlias)
{
IConsoleAlias *alias;
@@ -1230,20 +1216,16 @@ 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) %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" : "");
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]);
}
return true;
@@ -1420,19 +1402,6 @@ 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;
@@ -1498,7 +1467,6 @@ void IConsoleStdLibRegister(void)
IConsoleCmdRegister("newgame", ConNewGame);
IConsoleCmdRegister("restart", ConRestart);
IConsoleCmdRegister("getseed", ConGetSeed);
IConsoleCmdRegister("getdate", ConGetDate);
IConsoleCmdRegister("quit", ConExit);
IConsoleCmdRegister("resetengines", ConResetEngines);
IConsoleCmdRegister("return", ConReturn);
@@ -1514,7 +1482,6 @@ void IConsoleStdLibRegister(void)
IConsoleCmdRegister("pwd", ConPrintWorkingDirectory);
IConsoleCmdRegister("clear", ConClearBuffer);
IConsoleCmdRegister("patch", ConPatch);
IConsoleCmdRegister("list_patches", ConListPatches);
IConsoleAliasRegister("dir", "ls");
IConsoleAliasRegister("del", "rm %+");
+4 -9
View File
@@ -153,17 +153,12 @@ void CheckSwitchToEuro(void)
}
/**
* Will fill _currency_specs array with
* Called only from newgrf.c. Will fill _currency_specs array with
* default values from origin_currency_specs
* 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)
**/
void ResetCurrencies(void)
{
memcpy(&_currency_specs, &origin_currency_specs, sizeof(origin_currency_specs) - (preserve_custom ? sizeof(_custom_currency) : 0));
memcpy(&_currency_specs, &origin_currency_specs, sizeof(origin_currency_specs));
}
/**
+1 -1
View File
@@ -38,7 +38,7 @@ extern CurrencySpec _currency_specs[NUM_CURRENCY];
uint GetMaskOfAllowedCurrencies(void);
void CheckSwitchToEuro(void);
void ResetCurrencies(bool preserve_custom);
void ResetCurrencies(void);
StringID* BuildCurrencyDropdown(void);
byte GetNewgrfCurrencyIdConverted(byte grfcurr_id);
+4 -6
View File
@@ -236,16 +236,14 @@ static void BuildDockStationWndProc(Window *w, WindowEvent *e)
case WE_CREATE: LowerWindowWidget(w, _station_show_coverage + 3); break;
case WE_PAINT: {
int rad = (_patches.modified_catchment) ? CA_DOCK : 4;
int rad;
if (WP(w,def_d).close) return;
DrawWindowWidgets(w);
if (_station_show_coverage) {
SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
} else {
SetTileSelectSize(1, 1);
}
rad = (_patches.modified_catchment) ? CA_DOCK : 4;
if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
DrawStationCoverageAreaText(4, 50, (uint)-1, rad);
break;
+1 -12
View File
@@ -50,9 +50,6 @@ To enable music, start OpenTTD with the command line:
If I hear enough responses that both music and sound work together (it might
just be my system), I'll have the defaults changed.
Please note also that the GCC version does not currently support the MCI MIDI
system.
A NOTE ABOUT DEDICATED MULTIPLAYER SERVERS
------------------------------------------
@@ -77,17 +74,9 @@ may help to set one up (although some of the links from that page are broken):
http://www.mozilla.org/ports/os2/gccsetup.html
Alternatively, Paul Smedley's ready-to-go GCC build environment has been known to
successfully build the game:
http://www.smedley.info/os2ports/index.php?page=build-environment
To build, you should, if your environment is set up well enough, be able to just
type `./configure' (or `sh configure' if you're using the OS/2 shell) and `make'.
You may have to manually specify `--os OS2' on the configure command line, as
configure cannot currently detect OS/2 manually.
A note on Open Watcom
---------------------
@@ -133,4 +122,4 @@ issues, see the Contacting section of readme.txt.
Thanks to Paul Smedley for his help with getting OpenTTD to compile under GCC on OS/2.
- Owen Rudge, 24th June 2007
- Owen Rudge, 8th January 2007
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Hey, EMACS: -*- nroff -*-
.\" Please adjust this date whenever revising the manpage.
.Dd Jun 28, 2007
.Dd March 20, 2007
.Dt OPENTTD 6
.Sh NAME
.Nm openttd
+1 -1
View File
@@ -58,7 +58,7 @@ static const DriverDesc _music_driver_descs[] = {
M("qt", "QuickTime MIDI Driver", &_qtime_music_driver),
#endif
#ifdef UNIX
#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(__OS2__)
#if !defined(__MORPHOS__) && !defined(__AMIGA__)
M("extmidi", "External MIDI Driver", &_extmidi_music_driver),
#endif
#endif
+22 -42
View File
@@ -246,41 +246,6 @@ 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
@@ -373,6 +338,25 @@ 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();
@@ -1468,7 +1452,7 @@ int LoadUnloadVehicle(Vehicle *v, bool just_arrived)
// if last speed is 0, we treat that as if no vehicle has ever visited the station.
ge->last_speed = min(t, 255);
ge->last_age = _cur_year - u->build_year;
ge->last_age = _cur_year - v->build_year;
// If there's goods waiting at the station, and the vehicle
// has capacity for it, load it on the vehicle.
@@ -1711,16 +1695,12 @@ 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(pid) || _networking) return CMD_ERROR;
/* Do not allow players to take over themselves */
if (pid == _current_player) return CMD_ERROR;
if (!IsValidPlayer((PlayerID)p1) || _networking) return CMD_ERROR;
SET_EXPENSES_TYPE(EXPENSES_OTHER);
p = GetPlayer(pid);
p = GetPlayer(p1);
if (!p->is_ai) return CMD_ERROR;
-1
View File
@@ -422,7 +422,6 @@ int32 SettingsDisableElrail(int32 p1)
if (rv_info->engclass == 2 && e->railtype == old_railtype) {
/* change it to the proper one */
e->railtype = new_railtype;
_engine_info[e_id].railtype = new_railtype;
}
}
-6
View File
@@ -414,12 +414,6 @@ 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;
}
+2 -2
View File
@@ -79,7 +79,7 @@ static void EnginePreviewWndProc(Window *w, WindowEvent *e)
DrawStringCentered(w->width >> 1, 80, GetCustomEngineName(engine), 0x10);
dei = &_draw_engine_list[GetEngine(engine)->type - VEH_Train];
dei = &_draw_engine_list[GetEngine(engine)->type];
width = w->width;
dei->engine_proc(width >> 1, 100, engine, 0);
@@ -182,7 +182,7 @@ StringID GetNewsStringNewVehicleAvail(const NewsItem *ni)
void DrawNewsNewVehicleAvail(Window *w)
{
EngineID engine = WP(w, news_d).ni->string_id;
const DrawEngineInfo *dei = &_draw_engine_list[GetEngine(engine)->type - VEH_Train];
const DrawEngineInfo *dei = &_draw_engine_list[GetEngine(engine)->type];
DrawNewsBorder(w);
-17
View File
@@ -149,20 +149,3 @@ void FioOpenFile(int slot, const char *filename)
_fio.handles[slot] = f;
FioSeekToFile(slot << 24);
}
/**
* Sanitizes a filename, i.e. removes all illegal characters from it.
* @param filename the "\0" terminated filename
*/
void SanitizeFilename(char *filename)
{
for (; *filename != '\0'; filename++) {
switch (*filename) {
/* The following characters are not allowed in filenames
* on at least one of the supported operating systems: */
case ':': case '\\': case '*': case '?': case '/': case '<': case '>': case '|': case '"':
*filename = '_';
break;
}
}
}
-1
View File
@@ -15,6 +15,5 @@ void FioOpenFile(int slot, const char *filename);
void FioReadBlock(void *ptr, uint size);
void FioSkipBytes(int n);
bool FioCheckFileExists(const char *filename);
void SanitizeFilename(char *filename);
#endif /* FILEIO_H */
+2 -2
View File
@@ -144,10 +144,10 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
folder_error:
registry_no_font_found:
#if defined(UNICODE)
free(font_namep);
free(font_path);
#endif
registry_no_font_found:
RegCloseKey(hKey);
return err;
}
+38 -38
View File
@@ -206,7 +206,7 @@ static const SpriteID trg1idx[] = {
/* Medium font */
2, 92, // ' ' till 'z'
SKIP, 36,
160, 160, // Move Ÿ to the correct position
160, 160, // Move ¾ to the correct position
98, 98, // Up arrow
131, 133,
SKIP, 1, // skip currency sign
@@ -231,7 +231,7 @@ static const SpriteID trg1idx[] = {
/* Small font */
226, 316, // ' ' till 'z'
SKIP, 36,
384, 384, // Move Ÿ to the correct position
384, 384, // Move ¾ to the correct position
322, 322, // Up arrow
355, 357,
SKIP, 1, // skip currency sign
@@ -253,7 +253,7 @@ static const SpriteID trg1idx[] = {
/* Big font */
450, 540, // ' ' till 'z'
SKIP, 36,
608, 608, // Move Ÿ to the correct position
608, 608, // Move ¾ to the correct position
SKIP, 1,
579, 581,
SKIP, 1,
@@ -292,47 +292,47 @@ static const SpriteID _openttd_grf_indexes[] = {
582, 582, // euro symbol large size
358, 358, // euro symbol tiny
SPR_CURSOR_CANAL, SPR_IMG_FASTFORWARD, // more icons
648, 648, // nordic char: æ
616, 616, // nordic char: Æ
666, 666, // nordic char: ø
634, 634, // nordic char: Ø
648, 648, // nordic char: æ
616, 616, // nordic char: Æ
666, 666, // nordic char: ø
634, 634, // nordic char: Ø
SPR_PIN_UP, SPR_CURSOR_CLONE_TRAIN, // more icons
382, 383, // Œ œ tiny
158, 159, // Œ œ medium
606, 607, // Œ œ large
360, 360, // Š tiny
362, 362, // š tiny
136, 136, // Š medium
138, 138, // š medium
584, 584, // Š large
586, 586, // š large
626, 626, // Ð large
658, 658, // ð large
374, 374, // Ž tiny
378, 378, // ž tiny
150, 150, // Ž medium
154, 154, // ž medium
598, 598, // Ž large
602, 602, // ž large
640, 640, // Þ large
672, 672, // þ large
380, 380, // º tiny
156, 156, // º medium
604, 604, // º large
382, 383, // ¼ ½ tiny
158, 159, // ¼ ½ medium
606, 607, // ¼ ½ large
360, 360, // ¦ tiny
362, 362, // ¨ tiny
136, 136, // ¦ medium
138, 138, // ¨ medium
584, 584, // ¦ large
586, 586, // ¨ large
626, 626, // Ð large
658, 658, // ð large
374, 374, // ´ tiny
378, 378, // ¸ tiny
150, 150, // ´ medium
154, 154, // ¸ medium
598, 598, // ´ large
602, 602, // ¸ large
640, 640, // Þ large
672, 672, // þ large
380, 380, // º tiny
156, 156, // º medium
604, 604, // º large
317, 320, // { | } ~ tiny
93, 96, // { | } ~ medium
541, 544, // { | } ~ large
SPR_HOUSE_ICON, SPR_HOUSE_ICON,
585, 585, // § large
587, 587, // © large
592, 592, // ® large
594, 597, // ° ± ² ³ large
633, 633, // × large
665, 665, // ÷ large
585, 585, // § large
587, 587, // © large
592, 592, // ® large
594, 597, // ° ± ² ³ large
633, 633, // × large
665, 665, // ÷ large
SPR_SELL_TRAIN, SPR_SHARED_ORDERS_ICON,
377, 377, // · small
153, 153, // · medium
601, 601, // · large
377, 377, // · small
153, 153, // · medium
601, 601, // · large
END
};
+8 -11
View File
@@ -1615,16 +1615,13 @@ static void ExtChangeIndustryProduction(Industry *i)
int mag;
new = old = i->production_rate[j];
if (CHANCE16I(20, 1024, r)) new -= max(((RandomRange(50) + 10) * old) >> 8, 1U);
/* Chance of increasing becomes better when more is transported */
if (CHANCE16I(20 + (i->pct_transported[j] * 20 >> 8), 1024, r >> 16) &&
i->type != IT_OIL_WELL) {
new += max(((RandomRange(50) + 10) * old) >> 8, 1U);
}
if (CHANCE16I(20, 1024, r))
new -= ((RandomRange(50) + 10) * old) >> 8;
if (CHANCE16I(20 + (i->pct_transported[j] * 20 >> 8), 1024, r >> 16))
new += ((RandomRange(50) + 10) * old) >> 8;
new = clamp(new, 1, 255);
/* Do not stop closing the industry when it has the lowest possible production rate */
if (new == old && old > 1) {
new = clamp(new, 0, 255);
if (new == old) {
closeit = false;
continue;
}
@@ -1632,8 +1629,8 @@ static void ExtChangeIndustryProduction(Industry *i)
percent = new * 100 / old - 100;
i->production_rate[j] = new;
/* Close the industry when it has the lowest possible production rate */
if (new > 1) closeit = false;
if (new >= indspec->production_rate[j] / 4)
closeit = false;
mag = abs(percent);
if (mag >= 10) {
-6
View File
@@ -64,12 +64,6 @@ 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. */
#ifdef ENABLE_NETWORK
if (2 <= e->we.click.widget && e->we.click.widget <= 6) _is_network_server = false;
#endif /* ENABLE_NETWORK */
switch (e->we.click.widget) {
case 2: ShowGenerateLandscape(); break;
case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
+67 -11
View File
@@ -4,34 +4,46 @@ All bugs listed below are marked as known. Please do not submit any bugs
that are the same as these. If you do, don't act surprised, because
we WILL flame you!!
There is an experimental AI included in the game which you can enable
from the "Configure Patches" window. All bugs related to this AI should
go to: http://www.tt-forums.net/viewtopic.php?t=9576
Of course if you have more knowledge about any of these bugs, have more
specifics, we welcome you to report them. React to the given bug indicated
by the number below on http://bugs.openttd.org.
by the number below on http://sourceforge.net/tracker/?group_id=103924&atid=636365
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.3
Bugs for 0.5.0
------------------------------------------------------------------------
URL: http://bugs.openttd.org
-917 Load scenario with no towns failed without proper warning
-873 Assertion window fails to open on OSX
-820 Pillar drawing order glich, with newbridges
-716 Train Crash in Depot
-674 Map signs allow less nonenglish characters than english ones
-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
-669 Docks/Airports/RV Stations can be built without available vehicles
-646 AI builds useless stations
-599 Reloaded game lost company passwords
-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 Overflows due to inflation
-546 [0.5.0 RC3] Inflation overflow
-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.
-494 Get free money abusing a stock bug
-474 Overtaking car doesn't hit the against-riding car.
-458 Crash when changing Resolution on Mac OS X (x86)
-442 Alt-tab behaviour flawed whilst full screen (win32)
-435 Assertion window doesn't show when in fullscreen on Mac OS X
-423 Improved loading causes high CPU use with long trains
-410 Openttd in dedicated mode don't run without data files
@@ -40,11 +52,55 @@ 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
-265 Subsidy awarded detection bug
-259 AIs start unnamed companies that do nothing
-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
-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
- 51 Windows doesn't support CUSTOM_LANG_DIR
- 47 Low rating calculation and cargo loading priority
------------------------------------------------------------------------
URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-1573339 0.4.8.dmg Crash with intel 64bit
-1460218 0.4.7 normal industry bug (non_smooth)
-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
-1208170 Duplicate station names can be created
-1116638 "More, but smaller changes" deficiency
-1106356 re-offered prototypes
Minor Bugs for 0.5.0
------------------------------------------------------------------------
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
-1382782 Loan interest calculated 'wrong'
-1201284 permanent hilight in a depot
-1185852 Scrollbars get arbitrarily small
-1160732 little bug with transparency
-1117731 Editor-StartingDate
-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
-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
+1
View File
@@ -19,6 +19,7 @@
#include "water_map.h"
#include "tgp.h"
#include "genworld.h"
#include "heightmap.h"
extern const TileTypeProcs
_tile_type_clear_procs,
+2 -3
View File
@@ -236,7 +236,7 @@ STR_0109_DIAMOND_MINE :{BLACK}{TINYFON
STR_010A_COPPER_ORE_MINE :{BLACK}{TINYFONT}Mina de Cobre
STR_010B_FRUIT_PLANTATION :{BLACK}{TINYFONT}Plantação de Frutas
STR_010C_RUBBER_PLANTATION :{BLACK}{TINYFONT}Plantação de Seringueiras
STR_010D_WATER_SUPPLY :{BLACK}{TINYFONT}Poço Artesiano
STR_010D_WATER_SUPPLY :{BLACK}{TINYFONT}Poço de Água
STR_010E_WATER_TOWER :{BLACK}{TINYFONT}Reservatório
STR_010F_LUMBER_MILL :{BLACK}{TINYFONT}Serraria
STR_0110_COTTON_CANDY_FOREST :{BLACK}{TINYFONT}Floresta de Algodão Doce
@@ -732,7 +732,6 @@ 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
@@ -1892,7 +1891,7 @@ STR_4839_PRODUCTION_DOWN_BY_50 :{BLACK}{BIGFONT
STR_483A_INSECT_INFESTATION_CAUSES :{BLACK}{BIGFONT}Infestação de insetos causa destruição em {INDUSTRY}!{}Produção diminui em 50%
STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...só pode ser colocado perto das bordas do mapa
STR_INDUSTRY_PROD_GOUP :{BLACK}{BIGFONT}A produção de {STRING} em {INDUSTRY} aumentou em {COMMA}%!
STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}A produção de {STRING} em {INDUSTRY} diminuiu em {COMMA}%!
STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}A produção de {STRING} na {INDUSTRY} diminuiu em {COMMA}%!
##id 0x5000
STR_5000_TRAIN_IN_TUNNEL :{WHITE}Há um trem no túnel
+1 -1
View File
@@ -1828,7 +1828,7 @@ STR_4011_LOAD_HEIGHTMAP :{WHITE}Заре
STR_4800_IN_THE_WAY :{WHITE}{STRING} пречи
STR_4801 :{WHITE}{INDUSTRY}
STR_4802_COAL_MINE :Мина за въглища
STR_4803_POWER_STATION :Електроцентрала
STR_4803_POWER_STATION :
STR_4804_SAWMILL :Дъскорезница
STR_4805_FOREST :Гора
STR_4806_OIL_REFINERY :Нефтена рафинерия
+3 -6
View File
@@ -590,7 +590,6 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Ankomst
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Ankomst af første køretøj til modstanderens station
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Uheld / katastrofer
STR_0209_COMPANY_INFORMATION :{YELLOW}Selskabsinformation
STR_NEWS_OPEN_CLOSE :{YELLOW}Åbning / lukning af industrier
STR_020A_ECONOMY_CHANGES :{YELLOW}Økonomiændringer
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Rådgivning / information om spillerens køretøjer
STR_020C_NEW_VEHICLES :{YELLOW}Nye køretøjer
@@ -730,7 +729,6 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Placér
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Placér fyrtårn
STR_028E_PLACE_TRANSMITTER :{BLACK}Placér sender
STR_028F_DEFINE_DESERT_AREA :{BLACK}Definer ørkenområde.{}Hold CTRL nede for at fjerne det
STR_CREATE_LAKE :{BLACK}Definer vandområde.{}Lav en kanal, med mindre CTRL-tasten holdes ved havniveau, hvorved omgivelserne oversvømmes i stedet
STR_0290_DELETE :{BLACK}Slet
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Slet denne by fuldstændigt
STR_0292_SAVE_SCENARIO :Gem scenarie
@@ -1208,7 +1206,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Træer a
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Placer træer af tilfældig type
STR_CANT_BUILD_CANALS :{WHITE}Kan ikke bygge en kanal her...
STR_BUILD_CANALS_TIP :{BLACK}Byg kanaler.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Kan ikke bygge en sluse her...
@@ -1504,8 +1501,8 @@ STR_0800_COST :{TINYFONT}{RED}
STR_0801_COST :{RED}Pris: {CURRENCY}
STR_0802_INCOME :{TINYFONT}{GREEN}Indkomst: {CURRENCY}
STR_0803_INCOME :{GREEN}Indkomst: {CURRENCY}
STR_FEEDER_TINY :{TINYFONT}{YELLOW}Overført: {CURRENCY}
STR_FEEDER :{YELLOW}Overført: {CURRENCY}
STR_FEEDER_TINY :{TINYFONT}{YELLOW}Overfør: {CURRENCY}
STR_FEEDER :{YELLOW}Overfør: {CURRENCY}
STR_0805_ESTIMATED_COST :{WHITE}Anslået Pris: {CURRENCY}
STR_0807_ESTIMATED_INCOME :{WHITE}Anslået Indkomst: {CURRENCY}
STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Kan ikke hæve landet her...
@@ -2764,7 +2761,7 @@ STR_983B_REFIT :{WHITE}{VEHICLE
STR_983C_REFIT_SHIP :{BLACK}Ombyg skibet
STR_983D_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Vælg den slags last skibet skal sejle med
STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Ombyg skibet til den markerede slags last
STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Vælg den lasttype der skal transporteres:
STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Vælg den lasttype der skal sejles med:
STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Ny kapacitet: {GOLD}{CARGO}{}{BLACK}Pris for ombyggelse: {GOLD}{CURRENCY}
STR_9841_CAN_T_REFIT_SHIP :{WHITE}Kan ikke ombygge skib...
STR_9842_REFITTABLE :(kan ombygges)
+3 -3
View File
@@ -3058,7 +3058,7 @@ STR_PURCHASE_INFO_ALL_BUT :Alles behalve {
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Maak aan
STR_GENERATE :{WHITE}Creeër
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 configureren
STR_SETTINGUP_GAME :{BLACK}Spel aan het instellen
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}Maak nieuw scenario aan
STR_SE_NEW_WORLD :{BLACK}Creeër nieuw scenario
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
-1
View File
@@ -1801,7 +1801,6 @@ STR_3804_WATER :Water
STR_3805_COAST_OR_RIVERBANK :Coast or riverbank
STR_3806_SHIP_DEPOT :Ship depot
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Can't build on water
STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Must demolish canal first
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Save Game
+3 -6
View File
@@ -591,7 +591,6 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Unua ve
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Unua veturilo atingas konkurantan stacion
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Akcidentoj / katastrofoj
STR_0209_COMPANY_INFORMATION :{YELLOW}Kompaniaj informoj
STR_NEWS_OPEN_CLOSE :{YELLOW}Malfermo / fermo de industrioj
STR_020A_ECONOMY_CHANGES :{YELLOW}Ekonomiaj ŝanĝoj
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Konsiloj / informoj pri propraj veturiloj
STR_020C_NEW_VEHICLES :{YELLOW}Novaj veturiloj
@@ -731,7 +730,6 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Metu rok
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Metu lumturon
STR_028E_PLACE_TRANSMITTER :{BLACK}Metu transmitilon
STR_028F_DEFINE_DESERT_AREA :{BLACK}Difinu dezertan regionon.{}Premu kaj tenu CTRL por forigi ĝin
STR_CREATE_LAKE :{BLACK}Difinu akvoregionon.{}Faru kanalon, krom se CTRL estas tenata marnivele, kiukaze ĝi anstataŭe transfluas al la ĉirkaŭo
STR_0290_DELETE :{BLACK}Forigu
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Plene forigu ĉi tiun urbon
STR_0292_SAVE_SCENARIO :Konservu scenaron
@@ -991,7 +989,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}Trajno {COMMA} havas nevalidan stacion en la ordenoj
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Trajnno {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
@@ -1209,7 +1207,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Arboj de
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Metu arbojn de hazardaj tipoj
STR_CANT_BUILD_CANALS :{WHITE}Ne povas konstrui kanalojn ĉi tie...
STR_BUILD_CANALS_TIP :{BLACK}Konstruu kanalojn.
STR_LANDINFO_CANAL :Kanalo
STR_CANT_BUILD_LOCKS :{WHITE}Ne povas konstrui kluzojn ĉi tie...
@@ -1385,7 +1382,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}Inaŭguro: {WHITE}{NUM}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Enaŭ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 +2115,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}Inaŭgurita: {WHITE}{NUM}
STR_7038_INAUGURATED :{GOLD}Enaŭguris: {WHITE}{NUM}
STR_7039_VEHICLES :{GOLD}Veturiloj:
STR_TRAINS :{WHITE}{COMMA} trajno{P "" j}
STR_ROAD_VEHICLES :{WHITE}{COMMA} vojveturilo{P "" j}
+5 -19
View File
@@ -690,7 +690,6 @@ 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
@@ -734,7 +733,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}Teeehitus
STR_0231_ROAD_CONSTRUCTION :{BLACK}Teede ehitamine
STR_0233_TOWN_GENERATION :{WHITE}Linnade loomine
STR_0234_NEW_TOWN :{BLACK}Uus linn
STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Ehita uus linn
@@ -795,12 +794,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 (saab ehitada vaid linnadesse, mille rahvastikuarv ületab 1200)
STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Ehita pank (seda 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 (saab vaid linnadesse ehitada)
STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Ehita pank (seda 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
@@ -830,7 +829,6 @@ 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
@@ -1308,7 +1306,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Suvalise
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Istutab suvalisi puid
STR_CANT_BUILD_CANALS :{WHITE}Siia ei saa kanaleid ehitada...
STR_BUILD_CANALS_TIP :{BLACK}Ehita kanaleid.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Siia ei saa lüüse ehitada...
@@ -2490,7 +2487,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 puuviljaveok
STR_80A8_BALOGH_FRUIT_TRUCK :Balogh veeveok
STR_80A9_UHL_FRUIT_TRUCK :Uhl puuviljaveok
STR_80AA_KELLING_FRUIT_TRUCK :Kelling puuviljaveok
STR_80AB_BALOGH_RUBBER_TRUCK :Balogh kummiveok
@@ -2620,7 +2617,7 @@ STR_INVALID_ORDER :{RED} (Ebasobiv
STR_UNKNOWN_DESTINATION :tundmatu sihtpunkt
STR_8812_EMPTY :{LTBLUE}Tühi
STR_8813_FROM :{LTBLUE}{CARGO} jaamast {STATION}
STR_8813_FROM :{LTBLUE}{CARGO} {STATION}'st
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
@@ -2732,10 +2729,6 @@ STR_INCOMPATIBLE_RAIL_TYPES :Ühildamatud ra
STR_TRAIN_NO_POWER :{RED}Vool puudub
STR_TRAIN_START_NO_CATENARY :Selle raja ahel puudub, rong ei saa sõitu alustada
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Uus {STRING} saadaval!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uus {STRING} saadaval! - {STRING}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Maanteesõiduk on teel ees
STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} maanteesõiduk{P "" it}
@@ -2996,7 +2989,6 @@ STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_NEWGRF_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Sa oled tegemas muudatusi töötavasse mängu; see võib OpenTTD kokku jooksutada.{}Kas sa oled täielikult veendunud selles?
STR_NEWGRF_ADD :{BLACK}Lisa
STR_NEWGRF_ADD_TIP :{BLACK}Lisa nimekirja NewGRF fail
STR_NEWGRF_REMOVE :{BLACK}Eemalda
@@ -3233,10 +3225,4 @@ STR_MEASURE_AREA :{BLACK}Pindala:
STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Pikkus: {NUM}{}Kürguste erinevusj: {NUM} m
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pindala: {NUM} x {NUM}{}Kõrguste erinevus: {NUM} m
############ Date formatting
STR_DATE_TINY :{STRING}-{STRING}-{NUM}
STR_DATE_SHORT :{STRING} {NUM}
STR_DATE_LONG :{STRING} {STRING} {NUM}
########
+68 -74
View File
@@ -47,7 +47,7 @@ STR_0027_COLA :Limsaa
STR_0028_COTTON_CANDY :Hattaraa
STR_0029_BUBBLES :Kuplia
STR_002A_TOFFEE :Toffeeta
STR_002B_BATTERIES :Paristoja
STR_002B_BATTERIES :Pattereita
STR_002C_PLASTIC :Muovia
STR_002D_FIZZY_DRINKS :Sihijuomaa
STR_002E :
@@ -203,7 +203,7 @@ STR_00EA_OWNERS :Omistajat
STR_00EB_ROADS :{BLACK}{TINYFONT}Tie
STR_00EC_RAILROADS :{BLACK}{TINYFONT}Rautatie
STR_00ED_STATIONS_AIRPORTS_DOCKS :{BLACK}{TINYFONT}Asemat/lentokentät/satamat
STR_00EE_BUILDINGS_INDUSTRIES :{BLACK}{TINYFONT}Rakennukset/Teollisuus
STR_00EE_BUILDINGS_INDUSTRIES :{BLACK}{TINYFONT}Rakennus
STR_00EF_VEHICLES :{BLACK}{TINYFONT}Liikennevälineet
STR_00F0_100M :{BLACK}{TINYFONT}100 m
STR_00F1_200M :{BLACK}{TINYFONT}200 m
@@ -590,7 +590,6 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Ensimm
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Ensimmäinen ajoneuvo saapuu kilpailijan asemalle.
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Vahingot/onnettomuudet
STR_0209_COMPANY_INFORMATION :{YELLOW}Yhtiön tiedot
STR_NEWS_OPEN_CLOSE :{YELLOW}Avaa / tehtaiden sulkemiset
STR_020A_ECONOMY_CHANGES :{YELLOW}Talouden muutokset
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Neuvoja/tietoja pelaajan ajoneuvoista
STR_020C_NEW_VEHICLES :{YELLOW}Uudet ajoneuvot
@@ -730,7 +729,6 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sijoita
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Sijoita majakka.
STR_028E_PLACE_TRANSMITTER :{BLACK}Sijoita lähetin.
STR_028F_DEFINE_DESERT_AREA :{BLACK}Määrittele aavikon alue.{}Paina ja pidä pohjassa CTRL-nappia poistaaksesi aavikkoa.
STR_CREATE_LAKE :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos CTRL on alaspainettuna merenpinnalla. Tällöin meri laajenee ympäristöön.
STR_0290_DELETE :{BLACK}Poista
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Poista tämä kaupunki kokonaan.
STR_0292_SAVE_SCENARIO :Tallenna skenaario
@@ -745,7 +743,7 @@ STR_029A_PLAY_SCENARIO :{BLACK}Pelaa sk
STR_PLAY_HEIGHTMAP :{BLACK}Pelaa korkeuskartta
STR_PLAY_HEIGHTMAP_HINT :{BLACK}Aloita uusi peli, käyttäen korkeuskarttaa maastona
STR_029B_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Lopetetaanko skenaario?
STR_029C_QUIT_EDITOR :{WHITE}Sulje editori
STR_029C_QUIT_EDITOR :{WHITE}Sulje muokkain
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...voidaan rakentaa vain kaupunkeihin, joissa on yli 1200 asukasta.
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}Siirrä aloituspäivää vuodella taaksepäin.
STR_029F_MOVE_THE_STARTING_DATE :{BLACK}Siirrä aloituspäivää vuodella eteenpäin.
@@ -820,12 +818,12 @@ STR_02E4 :{BLACK}{SKIP}{S
STR_MEASURING_UNITS_SELECTION :{BLACK}Mittayksiköiden valinta
STR_02E6_ROAD_VEHICLES :{BLACK}Ajoneuvot
STR_02E7 :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
STR_02E8_SELECT_SIDE_OF_ROAD_FOR :{BLACK}Valitse kummalla puolella tietä ajetaan.
STR_02E8_SELECT_SIDE_OF_ROAD_FOR :{BLACK}Valitse, kummalla puolella tietä ajetaan.
STR_02E9_DRIVE_ON_LEFT :Vasemmalla kaistalla
STR_02EA_DRIVE_ON_RIGHT :Oikealla kaistalla
STR_02EB_TOWN_NAMES :{BLACK}Kaupunkien nimet
STR_02EC :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Valitse kaupunkien nimien tyyli.
STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Valitse tyyli kaupunkien nimille.
STR_02F4_AUTOSAVE :{BLACK}Automaattitallennus
STR_02F5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
@@ -833,7 +831,7 @@ STR_02F6_SELECT_INTERVAL_BETWEEN :{BLACK}Valitse
STR_02F7_OFF :Pois
STR_02F8_EVERY_3_MONTHS :Joka 3. kuukausi
STR_02F9_EVERY_6_MONTHS :Joka 6. kuukausi
STR_02FA_EVERY_12_MONTHS :Kerran vuodessa
STR_02FA_EVERY_12_MONTHS :Joka 12. kuukausi
STR_02FB_START_A_NEW_GAME :{BLACK}Aloita uusi peli.
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Lataa tallennettu peli.
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Luo oma pelimaailma/skenaario.
@@ -843,7 +841,7 @@ STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Näytä
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Näytä vaikeusasetukset.
STR_0303_START_A_NEW_GAME_USING :{BLACK}Aloita uusi peli käyttäen omaa skenaariota.
STR_0304_QUIT :{BLACK}Sulje
STR_0305_QUIT_OPENTTD :{BLACK}Sulje OpenTTD.
STR_0305_QUIT_OPENTTD :{BLACK}Sulje "OpenTTD".
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...voidaan rakentaa vain kaupunkeihin.
STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Valitse 'lauhkea' ilmasto.
@@ -864,7 +862,7 @@ STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...voida
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...voidaan rakentaa vain aavikkoalueisiin.
STR_0319_PAUSED :{YELLOW}* * TAUKO * *
STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvakaappaus tallennettu nimellä '{STRING}'.
STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvankaappaus tallennettu levyllä nimellä '{STRING}'.
STR_031C_SCREENSHOT_FAILED :{WHITE}Kuvakaappaus epäonnistui!
STR_0329_PURCHASE_LAND_FOR_FUTURE :{BLACK}Osta maata tulevaa käyttöä varten.
@@ -1208,7 +1206,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Sattuman
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Aseta sattumanvaraisia puita
STR_CANT_BUILD_CANALS :{WHITE}Kanaalia ei voi rakentaa tähän...
STR_BUILD_CANALS_TIP :{BLACK}Rakenna kanavia.
STR_LANDINFO_CANAL :Kanaali
STR_CANT_BUILD_LOCKS :{WHITE}Sulkua ei voi rakentaa tähän...
@@ -1508,14 +1505,14 @@ STR_FEEDER_TINY :{TINYFONT}{YELL
STR_FEEDER :{YELLOW}Siirrä: {CURRENCY}
STR_0805_ESTIMATED_COST :{WHITE}Arvioitu kustannus: {CURRENCY}
STR_0807_ESTIMATED_INCOME :{WHITE}Arvioitu tulo: {CURRENCY}
STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Maata ei voi korottaa.
STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Maata ei voi laskea.
STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Maata ei voi korottaa...
STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Maata ei voi madaltaa...
STR_080A_ROCKS :Kalliota
STR_080B_ROUGH_LAND :Epätasaista maata
STR_080C_BARE_LAND :Paljasta maata
STR_080D_GRASS :Ruohikkoa
STR_080E_FIELDS :Peltoja
STR_080F_SNOW_COVERED_LAND :Lumen peittämää maata
STR_080F_SNOW_COVERED_LAND :Lumenpeittämää maata
STR_0810_DESERT :Aavikkoa
##id 0x1000
@@ -1532,12 +1529,12 @@ STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Sähkör
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Yksiraiteisen rakentaminen
STR_100C_MAGLEV_CONSTRUCTION :{WHITE}MagLevin rakentaminen
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Valitse rautatiesilta.
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Veturitallia ei voi rakentaa.
STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Rautatieasemaa ei voi rakentaa.
STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Opastinta ei voi rakentaa.
STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Rautatietä ei voi rakentaa.
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Rautatietä ei voi poistaa.
STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Opastinta ei voi poistaa tästä.
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Veturitallia ei voi rakentaa...
STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Rautatieasemaa ei voi rakentaa...
STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Opastinta ei voi rakentaa...
STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Rautatietä ei voi rakentaa...
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Rautatietä ei voi poistaa tästä...
STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Opastinta ei voi poistaa tästä...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Veturitallin suunta
STR_1015_RAILROAD_CONSTRUCTION :Rautatien rakentaminen
STR_TOOLB_ELRAIL_CONSTRUCTION :Sähköradan rakentaminen
@@ -1567,25 +1564,25 @@ STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Tie pit
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tietyöt ovat käynnissä.
STR_1802_ROAD_CONSTRUCTION :{WHITE}Tien rakentaminen
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Valitse maantiesilta
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Tietä ei voi rakentaa.
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Tietä ei voi poistaa.
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Autovarikon suunta
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Autovarikkoa ei voi rakentaa.
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Linja-autoasemaa ei voi rakentaa.
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Lastauslaituria ei voi rakentaa.
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Tietä ei voi rakentaa...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Tietä ei voi poistaa tästä...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Huoltoaseman suunta
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Huoltoasemaa ei voi rakentaa...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Linja-autoasemaa ei voi rakentaa...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Lastauslaituria ei voi rakentaa...
STR_180A_ROAD_CONSTRUCTION :Tien rakentaminen
STR_180B_BUILD_ROAD_SECTION :{BLACK}Rakenna tieosuus.
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna autovarikko (ajoneuvojen rakentamista ja huoltoa varten)
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna huoltoasema (ajoneuvojen rakentamista ja huoltoa varten)
STR_180D_BUILD_BUS_STATION :{BLACK}Rakenna linja-autoasema
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Rakenna lastauslaituri
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Rakenna maantiesilta
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Rakenna maantietunneli
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Tien rakentaminen/siirtäminen päälle/pois
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Valitse autovarikon suunta.
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Valitse huoltoaseman suunta.
STR_1814_ROAD :Tie
STR_1815_ROAD_WITH_STREETLIGHTS :Tie katuvaloilla
STR_1816_TREE_LINED_ROAD :Puilla reunustettu tie
STR_1817_ROAD_VEHICLE_DEPOT :Autovarikko
STR_1817_ROAD_VEHICLE_DEPOT :Huoltoasema
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Tasoristeys
##id 0x2000
@@ -1595,23 +1592,23 @@ STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Rakennus täytyy purkaa ensin.
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Rakennus täytyy tuhota ensin.
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Asukasluku: {ORANGE}{COMMA}{BLACK} Taloja: {ORANGE}{COMMA}
STR_2007_RENAME_TOWN :Nimeä kaupunki
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kaupungin nimeä ei voi vaihtaa.
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kaupunkia ei voi uudelleennimetä...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN}: paikallisviranomaiset kieltäytyvät.
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Kaupunkien nimet - kaupungin valitseminen keskittää näkymän.
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Keskitä näkymä kaupungkiin.
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Kaupunkien nimet - napsauta nimeä keskittääksesi päänäkymän kaupunkiin.
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Keskitä päänäkymä kaupungin sijaintiin.
STR_200C_CHANGE_TOWN_NAME :{BLACK}Vaihda kaupungin nimeä.
STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Matkustajia viime kuussa: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Postia viime kuussa: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_200F_TALL_OFFICE_BLOCK :Korkea toimistorakennus
STR_2010_OFFICE_BLOCK :Tomistorakennus
STR_2011_SMALL_BLOCK_OF_FLATS :Pientaloalue
STR_2011_SMALL_BLOCK_OF_FLATS :Pienasuntokortteli
STR_2012_CHURCH :Kirkko
STR_2013_LARGE_OFFICE_BLOCK :Suuri toimistorakennus
STR_2014_TOWN_HOUSES :Kaupungintalot
STR_2014_TOWN_HOUSES :Kaupungin talot
STR_2015_HOTEL :Hotelli
STR_2016_STATUE :Patsas
STR_2017_FOUNTAIN :Suihkulähde
@@ -1629,14 +1626,14 @@ STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN}:
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Kuljetusyhtiön arvioinnit:
STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Tuet
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tarjotut tuet:
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tarjolla olevat tuet:
STR_2027_FROM_TO :{ORANGE}{STRING} välille {STRING}-{STRING}
STR_2028_BY :{YELLOW} ({DATE_SHORT})
STR_202A_NONE :{ORANGE}Ei mitään
STR_202B_SERVICES_ALREADY_SUBSIDISED :{BLACK}Käytetyt tuet-
STR_202C_FROM_TO :{ORANGE}{STRING} välille {STATION}-{STATION}{YELLOW} ({COMPANY}
STR_202D_UNTIL :{YELLOW}, {DATE_SHORT} asti)
STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Tuki päättynyt:{}{}{STRING} väli {STRING} - {STRING} ei ole enää tuettu.
STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Tuki päättynyt:{}{}{STRING} väli {STRING} - {STRING} ei sisällä enää tukia.
STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}Tuki vedetty pois:{}{}{STRING} kuljetuspalvelu välille {STATION}-{STATION} ei ole enää tuettu.
STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Tuki tarjottu:{}{}Ensimmäinen {STRING}kuljetus välillä {STRING} - {STRING} saa vuoden mittaisen tuen paikallisviranomaisilta!
STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Tuki myönnetty yhtiölle {COMPANY}!{}{}{STRING}kuljetus välillä {STATION}-{STATION} tuottaa 50{NBSP}% enemmän seuraavan vuoden ajan!
@@ -1644,22 +1641,22 @@ STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT
STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Tuki myönnetty yhtiölle {COMPANY}!{}{}{STRING}kuljetus välillä {STATION}-{STATION} tuottaa kolminkertaisesti seuraavan vuoden ajan!
STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Tuki myönnetty yhtiölle {COMPANY}!{}{}{STRING}kuljetus välillä {STATION}-{STATION} tuottaa nelinkertaisesti seuraavan vuoden ajan!
STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN}: paikallisviranomaiset eivät salli toisen lentokentän rakentamista tähän kaupunkiin.
STR_2036_COTTAGES :Mökkejä
STR_2037_HOUSES :Taloja
STR_2038_FLATS :Asuntoja
STR_2039_TALL_OFFICE_BLOCK :Korkeita toimistorakennuksia
STR_203A_SHOPS_AND_OFFICES :Liikkeitä ja toimistoja
STR_203B_SHOPS_AND_OFFICES :Liikkeitä ja toimistoja
STR_2036_COTTAGES :Mökkiä
STR_2037_HOUSES :Taloa
STR_2038_FLATS :Asuntoa
STR_2039_TALL_OFFICE_BLOCK :Korkeata toimistorakennusta
STR_203A_SHOPS_AND_OFFICES :Kauppaa ja toimistoa
STR_203B_SHOPS_AND_OFFICES :Kauppaa ja toimistoa
STR_203C_THEATER :Teatteri
STR_203D_STADIUM :Stadion
STR_203E_OFFICES :Toimistoja
STR_203F_HOUSES :Taloja
STR_203E_OFFICES :Toimistoa
STR_203F_HOUSES :Taloa
STR_2040_CINEMA :Elokuvateatteri
STR_2041_SHOPPING_MALL :Kauppakeskus
STR_2042_DO_IT :{BLACK}Sijoita
STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Luettelo kaupungissa tehtävistä asioista - napsauta kohdetta saadaksesi lisätietoja.
STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Suorita valittu toiminto.
STR_2045_ACTIONS_AVAILABLE :{BLACK}Toiminnot:
STR_2045_ACTIONS_AVAILABLE :{BLACK}Saatavilla olevat toiminnot:
STR_2046_SMALL_ADVERTISING_CAMPAIGN :Pieni mainoskampanja
STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Keskikokoinen mainoskampanja
STR_2048_LARGE_ADVERTISING_CAMPAIGN :Suuri mainoskampanja
@@ -1668,9 +1665,9 @@ STR_204A_BUILD_STATUE_OF_COMPANY :Rakenna patsas
STR_204B_FUND_NEW_BUILDINGS :Rahoita uusia rakennuksia
STR_204C_BUY_EXCLUSIVE_TRANSPORT :Osta yksinoikeudet kuljetuksiin
STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY :Lahjo viranomaisia
STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Käynnistä pieni mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{} Kustannus: {CURRENCY}
STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{} Kustannus: {CURRENCY}
STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{} Kustannus: {CURRENCY}
STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Tee aloite pienestä mainoskampanjasta hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{} Kustannus: {CURRENCY}
STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Tee aloite keskikokoisesta mainoskampanjasta hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{} Kustannus: {CURRENCY}
STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Tee aloite suuresta mainoskampanjasta hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{} Kustannus: {CURRENCY}
STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Rahoita kaupungin tieverkon rakentamista. Aiheuttaa huomattavaa häiriötä tieliikenteessä kuuden kuukauden ajan.{} Kustannus: {CURRENCY}
STR_2051_BUILD_A_STATUE_IN_HONOR :{WHITE}{STRING}{}{YELLOW} Rakenna patsas yhtiösi kunniaksi.{} Kustannus: {CURRENCY}
STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Rahoita uusien kaupparakennusten rakentamista kaupungissa.{} Kustannus: {CURRENCY}
@@ -1695,15 +1692,15 @@ STR_LANDSCAPING :Maastonmuokkaus
STR_2800_PLANT_TREES :Istuta puita
STR_2801_PLACE_SIGN :Aseta kyltti
STR_2802_TREES :{WHITE}Puita
STR_2803_TREE_ALREADY_HERE :{WHITE}...tässä on jo puu.
STR_2804_SITE_UNSUITABLE :{WHITE}...huono paikka.
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Puuta ei voi istuttaa.
STR_2803_TREE_ALREADY_HERE :{WHITE}...puu on jo tässä.
STR_2804_SITE_UNSUITABLE :{WHITE}...paikka sopimaton.
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Puuta ei voi istuttaa...
STR_2806 :{WHITE}{STRING}
STR_2808_TOO_MANY_SIGNS :{WHITE}...liian monta kylttiä.
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kylttiä ei voi sijoittaa.
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kylttiä ei voi sijoittaa...
STR_280A_SIGN :Kyltti
STR_280B_EDIT_SIGN_TEXT :{WHITE}Muokkaa kyltin tekstiä.
STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kyltin nimeä ei voi muuttaa.
STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kyltin nimeä ei voi muuttaa...
STR_280D_SELECT_TREE_TYPE_TO_PLANT :{BLACK}Valitse istutettava puutyyppi.
STR_280E_TREES :Puita
STR_280F_RAINFOREST :Sademetsää
@@ -1716,19 +1713,19 @@ STR_3002_ORIENTATION :{BLACK}Suunta
STR_3003_NUMBER_OF_TRACKS :{BLACK}Ratojen määrä
STR_3004_PLATFORM_LENGTH :{BLACK}Asemalaiturin pituus
STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Liian lähellä toista rautatieasemaa.
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Liitä yhteen useampi asema/lastausalue.
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa ja lastausaluetta kaupungissa.
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa ja lastausaluetta.
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Liitä yhteen useampi kuin yksi olemassaoleva asema/lastausalue.
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa/lastausaluetta kaupungissa.
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa/lastausaluetta.
STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Liian monta linja-autopysäkkiä.
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Liian monta lastauslaituria.
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Liian lähellä toista asemaa tai lastausaluetta.
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Liian lähellä toista asemaa/lastausaluetta.
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Rautatieasema pitää tuhota ensin.
STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Liian lähellä toista lentokenttää.
STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Lentokenttä pitää tuhota ensin.
STR_3030_RENAME_STATION_LOADING :Nimeä asema/lastausalue
STR_3031_CAN_T_RENAME_STATION :{WHITE}Asemaa ei voi nimetä uudelleen.
STR_3031_CAN_T_RENAME_STATION :{WHITE}Asemaa ei voi nimetä uudelleen...
STR_3032_RATINGS :{BLACK}Arviot
STR_3033_ACCEPTS :{BLACK}Ottaa vastaan
STR_3034_LOCAL_RATING_OF_TRANSPORT :{BLACK}Paikallinen arvio kuljetuspalvelusta:
@@ -1739,24 +1736,24 @@ STR_3036_VERY_POOR :Hyvin kehno
STR_3037_POOR :Kehno
STR_3038_MEDIOCRE :Keskinkertainen
STR_3039_GOOD :Hyvä
STR_303A_VERY_GOOD :Erittäin hyvä
STR_303A_VERY_GOOD :Oikein hyvä
STR_303B_EXCELLENT :Mainio
STR_303C_OUTSTANDING :Loistava
############ range for rating ends
STR_303D :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}{NBSP}%)
STR_303E_NO_LONGER_ACCEPTS :{WHITE}{STATION} ei ota enää vastaan {STRING}.
STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} ei ota enää vastaan {STRING} tai {STRING}.
STR_303E_NO_LONGER_ACCEPTS :{WHITE}{STATION} ei enää ota vastaan {STRING}.
STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} ei enää ota vastaan {STRING} tai {STRING}.
STR_3040_NOW_ACCEPTS :{WHITE}{STATION} ottaa nyt vastaan {STRING}.
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} ottaa nyt vastaan {STRING} ja {STRING}.
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Linja-autoaseman suunta
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Lastauslaiturin suunta
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Linja-autoasema pitää purkaa ensin.
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Lastauslaituri pitää purkaa ensin.
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Linja-autoasema pitää tuhota ensin.
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Lastauslaituri pitää tuhota ensin.
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} asema{P "" a}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Ei mitään -
STR_304B_SITE_UNSUITABLE :{WHITE}...huono paikka
STR_304B_SITE_UNSUITABLE :{WHITE}...paikka sopimaton.
STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Liian lähellä toista satamaa.
STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Satama pitää tuhota ensin.
STR_304E_SELECT_RAILROAD_STATION :{BLACK}Valitse rautatieaseman suunta.
@@ -1769,7 +1766,7 @@ STR_3054_SHOW_STATION_RATINGS :{BLACK}Näytä
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Muuta aseman nimi.
STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Näytä luettelo vastaanotettavasta rahdista.
STR_3057_STATION_NAMES_CLICK_ON :{BLACK}Asemien nimet - napsauta nimeä keskittääksesi näkymän asemaan.
STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT :{BLACK}Valitse lentokentän koko ja tyyppi.
STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT :{BLACK}Valitse lentokentän koko/tyyppi.
STR_305C_0 :{STATION} {STATIONFEATURES}
STR_STATION_SIGN_TINY :{TINYFONT}{STATION}
STR_305E_RAILROAD_STATION :Rautatieasema
@@ -1785,7 +1782,7 @@ STR_3068_DOCK :{WHITE}Satama
STR_3069_BUOY :Poiju
STR_306A_BUOY_IN_THE_WAY :{WHITE}...poiju on tiellä.
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...asema liian levittäytynyt.
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...epäsymmetriset asemat poissa käytöstä.
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...epäyhdenmukaiset asemat poissa käytöstä.
STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Pidä CTRL painettuna valitaksesi enemmän kuin yhden tavaran
STR_UNDEFINED :(määrittelemätön)
@@ -1793,9 +1790,9 @@ STR_STAT_CLASS_DFLT :Oletusasema
STR_STAT_CLASS_WAYP :Rastit
##id 0x3800
STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Telakan suunta
STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Telakan suunn.
STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...se pitää rakentaa veteen.
STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Telakkaa ei voi rakentaa.
STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Telakkaa ei voi rakentaa...
STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Valitse telakan suunta
STR_3804_WATER :Vettä
STR_3805_COAST_OR_RIVERBANK :Rannikko tai joenpenkka
@@ -1887,8 +1884,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,7 +2189,6 @@ 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
@@ -2632,9 +2628,7 @@ STR_INCOMPATIBLE_RAIL_TYPES :Raiteet eivät
STR_TRAIN_NO_POWER :{RED}Ei virtaa
STR_TRAIN_START_NO_CATENARY :Radasta puuttuu "catenary"; junaa ei voi käynnistää
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Uusi {STRING} on nyt saatavilla!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! - {STRING}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Ajoneuvo tiellä.
+9 -9
View File
@@ -1283,14 +1283,14 @@ STR_NETWORK_MULTIPLAYER :{WHITE}Multijou
STR_NETWORK_PLAYER_NAME :{BLACK}Nom du joueur:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Ceci est le nom avec lequel les autres joueurs pourront vous identifier
STR_NETWORK_CONNECTION :{BLACK}Connexion :
STR_NETWORK_CONNECTION_TIP :{BLACK}Choisir entre un jeu sur Internet ou sur réseau local
STR_NETWORK_CONNECTION_TIP :{BLACK}Choisir entre un jeu Internet ou sur réseau local
STR_NETWORK_START_SERVER :{BLACK}Démarrer le serveur
STR_NETWORK_START_SERVER_TIP :{BLACK}Démarre son propre serveur
STR_NETWORK_GAME_NAME :{BLACK}Nom
STR_NETWORK_GAME_NAME_TIP :{BLACK}Nom de la partie
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Langue, version du serveur, etc.
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Langage, version du serveur, etc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Cliquer sur une partie de la liste pour la sélectionner
STR_NETWORK_FIND_SERVER :{BLACK}Trouver un serveur
@@ -1337,7 +1337,7 @@ STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (publier)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_0_PLAYERS :0 joueurs
STR_NETWORK_0_PLAYERS :0 joueur
STR_NETWORK_1_PLAYERS :1 joueur
STR_NETWORK_2_PLAYERS :2 joueurs
STR_NETWORK_3_PLAYERS :3 joueurs
@@ -1408,8 +1408,8 @@ STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) En
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Rapatriement des infos sur le jeu..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Rapatriement des infos sur la compagnie..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} client{P "" s} avant vous
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} ko téléchargés
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} client{P "" s} avant nous
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} ko déjà téléchargés
STR_NETWORK_DISCONNECT :{BLACK}Déconnecter
@@ -1421,7 +1421,7 @@ STR_NETWORK_CLIENT_LIST :{WHITE}Liste de
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Aucun périphérique réseau trouvé ou programme compilé sans ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Aucune partie réseau n'a été trouvée
STR_NETWORK_ERR_NOCONNECTION :{WHITE} Le serveur n'a pas répondu à la requête
STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Echec de la connexion : NewGRF requis
STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Echec de la connexion à cause de NewGRF différents
STR_NETWORK_ERR_DESYNC :{WHITE} La synchronisation de la partie réseau a échouée.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} La connection de la partie réseau a été perdue.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} La sauvegarde serveur n'a pas pu être chargée.
@@ -1431,7 +1431,7 @@ STR_NETWORK_ERR_TIMEOUT :{WHITE} La conn
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Il y a eu une erreur de protocole et la connection est donc fermée.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} La révision de ce client ne correspond pas à celle du serveur.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Mot de passe incorrect.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Le serveur est complet
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Le serveur est plein
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Vous êtes bannis de ce serveur
STR_NETWORK_ERR_KICKED :{WHITE} Vous avez été exclu de la partie
STR_NETWORK_ERR_CHEATER :{WHITE} Tricher n'est pas autorisé sur ce serveur
@@ -1443,7 +1443,7 @@ STR_NETWORK_ERR_CLIENT_DESYNC :erreur de désy
STR_NETWORK_ERR_CLIENT_SAVEGAME :chargement de la carte impossible
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :connection perdue
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :erreur de protocole
STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH :NewGRF requis
STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH :NewGRF différents
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :non autorisé
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :paquet étrange reçu
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :révision incorrecte
@@ -1717,7 +1717,7 @@ STR_3002_ORIENTATION :{BLACK}Orientat
STR_3003_NUMBER_OF_TRACKS :{BLACK}Nombre de voies
STR_3004_PLATFORM_LENGTH :{BLACK}Longueur du quai
STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Trop près d'une autre gare
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjacent à plus d'une gare à la fois
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Ajouter une ou plusieurs gares
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Trop de gares dans cette ville
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Trop de gares
STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Trop d'arrêts d'autobus
-8
View File
@@ -2922,7 +2922,6 @@ 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:
@@ -2943,9 +2942,7 @@ 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}
@@ -2974,9 +2971,4 @@ 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}
########
-2
View File
@@ -731,7 +731,6 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Felsige
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Leuchtturm errichten
STR_028E_PLACE_TRANSMITTER :{BLACK}Sender errichten
STR_028F_DEFINE_DESERT_AREA :{BLACK}Lege Wüstengebiet an.{}STRG drücken zum entfernen
STR_CREATE_LAKE :{BLACK}Wasser erzeugen.{}Baut einen Kanal. Bei gedrückter Strg.-Taste wird ein Wasserfeld erzeugt, das umliegendes Land flutet.
STR_0290_DELETE :{BLACK}Löschen
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Diese Stadt vollständig löschen
STR_0292_SAVE_SCENARIO :Szenario speichern
@@ -1209,7 +1208,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Zufälli
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Zufällige Baumart pflanzen
STR_CANT_BUILD_CANALS :{WHITE}Kann hier keinen Kanal bauen...
STR_BUILD_CANALS_TIP :{BLACK}Kanalbau.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Kann hier keine Schleuse bauen...
+1582 -1584
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -744,8 +744,8 @@ STR_0298_LOAD_SCENARIO :{WHITE}시나
STR_0299_SAVE_SCENARIO :{WHITE}시나리오 저장하기
STR_029A_PLAY_SCENARIO :{BLACK}시나리오 플레이
STR_PLAY_HEIGHTMAP :{BLACK}DEM지형 플레이
STR_PLAY_HEIGHTMAP_HINT :{BLACK}DEM지형을 풍경으로 하여 게임을 시작합
STR_029B_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}이 시나리오를 종료하시겠습니까?
STR_PLAY_HEIGHTMAP_HINT :{BLACK}DEM지형을 풍경으로 하여 게임을 시작합니다.
STR_029C_QUIT_EDITOR :{WHITE}에디터 종료
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...1200명 이상의 도시에만 건설할 수 있습니다!
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}시작년도를 1년 앞당깁니다.
-6
View File
@@ -590,7 +590,6 @@ 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
@@ -730,7 +729,6 @@ 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
@@ -1208,7 +1206,6 @@ 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...
@@ -2632,9 +2629,6 @@ 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
+2 -3
View File
@@ -731,7 +731,6 @@ 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
@@ -1448,7 +1447,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 for til spelet
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :feil passord 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
@@ -2770,7 +2769,7 @@ STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Ny kapas
STR_9841_CAN_T_REFIT_SHIP :{WHITE}Kan ikkje bygge om skip...
STR_9842_REFITTABLE :(ombyggbart)
STR_GO_TO_SHIP_DEPOT :Seil til {TOWN} skipsdepot
SERVICE_AT_SHIP_DEPOT :Vedlikehald ved {TOWN} Skipsdepot
SERVICE_AT_SHIP_DEPOT :Vedlikehald ved {TOWN} skipsdepot
##id 0xA000
STR_A000_AIRPORTS :{WHITE}Flyplassar
+2 -2
View File
@@ -3182,7 +3182,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Pojemno
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moc: {GOLD}+{POWER}{BLACK} Waga: {GOLD}+{WEIGHT_S}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Można przebudować na: {GOLD}
STR_PURCHASE_INFO_ALL_TYPES :Wszystkie typy towarów
STR_PURCHASE_INFO_ALL_BUT :Wszystko oprócz {GOLD}
STR_PURCHASE_INFO_ALL_BUT :Wszystko oprócz {GOLD}}
########### String for New Landscape Generator
@@ -3225,7 +3225,7 @@ STR_CLEARING_TILES :{BLACK}Generowa
STR_SETTINGUP_GAME :{BLACK}Ustawianie gry
STR_PREPARING_TILELOOP :{BLACK}Uaktywnianie pól
STR_PREPARING_GAME :{BLACK}Przygotowywanie gry
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Zmieniono poziom trudności na "własny"
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Ta akcja zmieniła 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 -8
View File
@@ -385,7 +385,7 @@ STR_SORT_BY_VALUE :Valor
STR_SORT_BY_FACILITY :Tipo de Estação
STR_SORT_BY_WAITING :Valor da carga em espera
STR_SORT_BY_RATING_MAX :Avaliação de carga
STR_ENGINE_SORT_ENGINE_ID :EngineID (ordernação clássica)
STR_ENGINE_SORT_ENGINE_ID :Ordenação clássica
STR_ENGINE_SORT_COST :Custo
STR_ENGINE_SORT_POWER :Potência
STR_ENGINE_SORT_INTRO_DATE :Data de Introdução
@@ -730,7 +730,6 @@ 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}Definir área de deserto.{}Manter a tecla CTRL pressionada para remover
STR_CREATE_LAKE :{BLACK}Definir área de água.{}Construir um canal com a tecla CTRL numa área que não seja a do mar, senão inundar-se-iam as zonas circundantes
STR_0290_DELETE :{BLACK}Apagar
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Apagar completamente esta cidade
STR_0292_SAVE_SCENARIO :Guardar cenário
@@ -1048,7 +1047,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}Alertar em caso de perda do combóio: {ORANGE}{STRING}
STR_CONFIG_PATCHES_WARN_LOST_TRAIN :{LTBLUE}Avisar quando comboios andam perdidos: {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 +1084,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 uma dica de medição ao utilizar várias ferramentas de construção: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Mostrar medidas ao usar 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
@@ -1208,7 +1207,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Árvores
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Colocar árvores de tipo aleatório
STR_CANT_BUILD_CANALS :{WHITE}Não é possível construir canais aqui...
STR_BUILD_CANALS_TIP :{BLACK}Construir canais.
STR_LANDINFO_CANAL :Canal
STR_CANT_BUILD_LOCKS :{WHITE}Não é possível construir diques aqui...
@@ -2549,9 +2547,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}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_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_8829_ORDERS :{WHITE}{VEHICLE} (Ordens)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fim de Ordens - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
+7 -10
View File
@@ -590,7 +590,6 @@ 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
@@ -730,7 +729,6 @@ 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
@@ -785,7 +783,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}Semne statii, transparente
STR_TRANSPARENT_SIGNS :{SETX 12}Numele statiilor transparente
############ range ends here
############ range for menu starts
@@ -934,7 +932,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}Ecran intreg
STR_OPTIONS_FULLSCREEN :{BLACK}Mod
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Bifeaza aceasta casuta pentru a juca in modul
STR_OPTIONS_RES :{BLACK}Rezolutia ecranului
@@ -1026,7 +1024,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 algoritm incarcare imbunatatit: {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Foloseste algoritmul de LOAD 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}
@@ -1086,16 +1084,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 uniformele companiilor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Arata unifromete 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 per jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Nr. max. de trenuri pentru un 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 per jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Nr. max. de nave pentru un 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}
@@ -1208,7 +1206,6 @@ 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...
@@ -2605,7 +2602,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}Sari peste aceastã comandã dacã nu este necesar un service
STR_SERVICE_HINT :{BLACK}Sãri peste aceastã comandã dacã nu este necesar un service
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY} Greutate: {WEIGHT_S}{}Vitezã: {VELOCITY} Putere: {POWER}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Defectiune
STR_885D_AGE_RUNNING_COST_YR :{BLACK}Vechimea: {LTBLUE}{STRING}{BLACK} Cost de rulare: {LTBLUE}{CURRENCY}/an
+365 -365
View File
File diff suppressed because it is too large Load Diff
-25
View File
@@ -360,7 +360,6 @@ STR_015C_SAVE_GAME :保存游戏
STR_015D_LOAD_GAME :读取存档
STR_015E_QUIT_GAME :放弃游戏
STR_015F_QUIT :退出
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}你确定要放弃当前的游戏吗?
STR_0161_QUIT_GAME :{WHITE}放弃游戏
STR_SORT_ORDER_TIP :{BLACK}选择排序方法 (降序/升序)
STR_SORT_CRITERIA_TIP :{BLACK}选择排序标准
@@ -590,7 +589,6 @@ STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}玩家
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}对手车站的剪彩仪式
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}事故/灾难
STR_0209_COMPANY_INFORMATION :{YELLOW}公司信息
STR_NEWS_OPEN_CLOSE :{YELLOW}开启/关闭工业设施
STR_020A_ECONOMY_CHANGES :{YELLOW}经济变化
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}玩家车辆的状况报告
STR_020C_NEW_VEHICLES :{YELLOW}新的车辆类型
@@ -615,22 +613,16 @@ STR_HIGHSCORE_STATS :{BIGFONT}'{STRI
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{COMPANY} 达到 '{STRING}' 的状态!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{PLAYERNAME} 在 {COMPANY} 达到 '{STRING}' 状态!
STR_021F :{BLUE}{COMMA}
STR_0220_CREATE_SCENARIO :{BLACK}创建场景
STR_0221_OPENTTD :{YELLOW}OpenTTD
STR_0222_SCENARIO_EDITOR :{YELLOW}场景编辑器
STR_0223_LAND_GENERATION :{WHITE}生成土地
STR_0224 :{BLACK}{UPARROW}
STR_0225 :{BLACK}{DOWNARROW}
STR_0226_RANDOM_LAND :{BLACK}随机地形
STR_0227_RESET_LAND :{BLACK}重置地形
STR_0228_INCREASE_SIZE_OF_LAND_AREA :{BLACK}增加要升高/降低的土地面积
STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}减少要升高/降低的土地面积
STR_022A_GENERATE_RANDOM_LAND :{BLACK}随机生成土地
STR_022B_RESET_LANDSCAPE :{BLACK}重置景观
STR_022C_RESET_LANDSCAPE :{WHITE}重置景观
STR_LOAD_GAME_HEIGHTMAP :{WHITE}使用高度图
STR_LOAD_SCEN_HEIGHTMAP :{BLACK}使用高度图
STR_022D_ARE_YOU_SURE_YOU_WANT_TO :{WHITE}你确定要重置地形吗?
STR_022E_LANDSCAPE_GENERATION :{BLACK}生成景观
STR_022F_TOWN_GENERATION :{BLACK}生成城镇
STR_0230_INDUSTRY_GENERATION :{BLACK}生成工业
@@ -730,7 +722,6 @@ STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}在地
STR_028D_PLACE_LIGHTHOUSE :{BLACK}放置灯塔
STR_028E_PLACE_TRANSMITTER :{BLACK}放置转播塔
STR_028F_DEFINE_DESERT_AREA :{BLACK}定义沙漠区域。{}摁住 CTRL 可以去掉沙漠区域。
STR_CREATE_LAKE :{BLACK}定义水域。{}修建运河,仅在CTRL被按下的情况下不会在海平面淹没周围的区域。
STR_0290_DELETE :{BLACK}删除
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}完全删除这座城镇
STR_0292_SAVE_SCENARIO :保存场景
@@ -744,7 +735,6 @@ STR_0299_SAVE_SCENARIO :{WHITE}保存
STR_029A_PLAY_SCENARIO :{BLACK}以场景开始游戏
STR_PLAY_HEIGHTMAP :{BLACK}以高度图开始游戏
STR_PLAY_HEIGHTMAP_HINT :{BLACK}以高度图决定的地形开始一个新游戏。
STR_029B_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}你确定要推出当前场景吗?
STR_029C_QUIT_EDITOR :{WHITE}推出编辑器
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}只能在人口超过 1200 的城镇建造……
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}将开始年份向前调整 1 年
@@ -1208,7 +1198,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}随机
STR_TREES_RANDOM_TYPE_TIP :{BLACK}种植随机类型的树木
STR_CANT_BUILD_CANALS :{WHITE}不能在这里兴建运河……
STR_BUILD_CANALS_TIP :{BLACK}修建运河。
STR_LANDINFO_CANAL :运河
STR_CANT_BUILD_LOCKS :{WHITE}不能在这里兴建船闸……
@@ -2956,20 +2945,6 @@ STR_VEH_WITH_SHARED_ORDERS_LIST_TIP :{BLACK}显示
### depot strings
STR_SELL :{BLACK}出售
STR_DEPOT_SELL_ALL_VEHICLE_CONFIRM :{BLACK}你将出售车库/船坞/机库中的全部车辆/船只/飞机
STR_ARE_YOU_SURE :{BLACK}你确定吗?
STR_DEPOT_SELL_ALL_TRAIN_TIP :{BLACK}确认你将要出售车库中的所有列车
STR_DEPOT_SELL_ALL_ROADVEH_TIP :{BLACK}确定你将要出售车库中的所有汽车
STR_DEPOT_SELL_ALL_SHIP_TIP :{BLACK}确定你要你将要出售船坞中的全部船只
STR_DEPOT_SELL_ALL_AIRCRAFT_TIP :{BLACK}确定你将要出售机库中的全部飞机
STR_DEPOT_SELL_ALL_CANCEL_TRAIN_TIP :{BLACK}不要出售车库中的列车
STR_DEPOT_SELL_ALL_CANCEL_ROADVEH_TIP :{BLACK}不要出售车库中的汽车
STR_DEPOT_SELL_ALL_CANCEL_SHIP_TIP :{BLACK}不要出售船坞中的船只
STR_DEPOT_SELL_ALL_CANCEL_AIRCRAFT_TIP :{BLACK}不要出售机库中的飞机
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}出售车库中的所有列车
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}出售车库中的所有汽车
STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP :{BLACK}出售船坞中的所有船只
+15 -15
View File
@@ -601,36 +601,36 @@ STR_01D2_JAZZ_JUKEBOX :{WHITE}Jukebox
STR_01D3_SOUND_MUSIC :Zvuk/Hudba
STR_01D4_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Zobraz okno zvuku a hudby
STR_01D5_ALL :{TINYFONT}Všetko
STR_01D6_OLD_STYLE :{TINYFONT}Starý štýl
STR_01D7_NEW_STYLE :{TINYFONT}Nový štýl
STR_01D6_OLD_STYLE :{TINYFONT}Stary styl
STR_01D7_NEW_STYLE :{TINYFONT}Novy styl
STR_01D8_EZY_STREET :{TINYFONT}Ezy Street
STR_01D9_CUSTOM_1 :{TINYFONT}Vlastné 1
STR_01DA_CUSTOM_2 :{TINYFONT}Vlastné 2
STR_01D9_CUSTOM_1 :{TINYFONT}Vlastne 1
STR_01DA_CUSTOM_2 :{TINYFONT}Vlastne 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}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_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_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}Náhodne
STR_01E9_SHUFFLE :{TINYFONT}Nahodne
STR_01EA_PROGRAM :{TINYFONT}{BLACK}Program
STR_01EB_MUSIC_PROGRAM_SELECTION :{WHITE}Výber hudobného programu
STR_01EB_MUSIC_PROGRAM_SELECTION :{WHITE}Vyber hudobneho programu
STR_01EC_0 :{TINYFONT}{LTBLUE}0{COMMA} "{STRING}"
STR_01ED :{TINYFONT}{LTBLUE}{COMMA} "{STRING}"
STR_01EE_TRACK_INDEX :{TINYFONT}{BLACK}Císlo stopy
STR_01EE_TRACK_INDEX :{TINYFONT}{BLACK}Cislo stopy
STR_01EF_PROGRAM :{TINYFONT}{BLACK}Program - '{STRING}'
STR_01F0_CLEAR :{TINYFONT}{BLACK}Zmazat
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_01F1_SAVE :{TINYFONT}{BLACK}Ulozit
STR_01F2_CURRENT_PROGRAM_OF_MUSIC :{BLACK}Aktualny program
STR_01F3_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vybrat 'Vsetko'
STR_01F4_SELECT_OLD_STYLE_MUSIC :{BLACK}Vybrat 'Stary styl'
STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Vybrat 'Novy styl'
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vybrat 'Vlastny 1' (uzivatelom definovany) program
-2
View File
@@ -772,7 +772,6 @@ 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
@@ -1250,7 +1249,6 @@ STR_TREES_RANDOM_TYPE :{BLACK}Drevesa
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Postavi drevesa naključne vrste
STR_CANT_BUILD_CANALS :{WHITE}Ni mogoče zgraditi kanalov tukaj ...
STR_BUILD_CANALS_TIP :{BLACK}Zgradi kanale.
STR_LANDINFO_CANAL :Kanal
STR_CANT_BUILD_LOCKS :{WHITE}Ni mogoče zgraditi zapornic tukaj ...
+2 -2
View File
@@ -1671,7 +1671,7 @@ STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY :Muta de lokala
STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Starta en liten lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{} Kostnad: {CURRENCY}
STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Starta en mellanstor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{} Kostnad: {CURRENCY}
STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Starta en stor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina tranporttjänster.{} Kostnad: {CURRENCY}
STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Bekosta ombyggnad av stadens vägnätverk. Orsakar ansenliga störningar för vägtrafik i upp till 6 månader.{} 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_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 :Detta spår saknar kedjekurva, så tåget kan inte starta
STR_TRAIN_START_NO_CATENARY :
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nya {STRING} är nu tillgänglig!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
File diff suppressed because it is too large Load Diff
-7
View File
@@ -590,7 +590,6 @@ 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
@@ -730,7 +729,6 @@ 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
@@ -1208,7 +1206,6 @@ 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...
@@ -2632,10 +2629,6 @@ 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
+8 -8
View File
@@ -596,7 +596,7 @@ STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Пока
STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Показати рослинність на карті
STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Показати власників землі на карті
STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Показати назви міст на карті
STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Прибуток цього року: {CURRENCY} (торік: {CURRENCY})
STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Прибуток цього року: {CURRENCY} (минулого року: {CURRENCY})
############ range for service numbers starts
STR_AGE :{COMMA} р{P ік оки оків} ({COMMA})
@@ -1108,7 +1108,7 @@ STR_CANT_COPY_ORDER_LIST :{WHITE}Немо
STR_END_OF_SHARED_ORDERS :{SETX 10}- - Кінець наказів - -
STR_TRAIN_IS_LOST :{WHITE}Поїзд {COMMA} заблукав.
STR_TRAIN_IS_UNPROFITABLE :{WHITE}Поїзд {COMMA} торік приніс прибуток {CURRENCY}
STR_TRAIN_IS_UNPROFITABLE :{WHITE}Поїзд {COMMA} приніс прибуток минулого року {CURRENCY}
STR_EURO_INTRODUCE :{BLACK}{BIGFONT}Європейська грошова одиниця!{}{}У вашій країні введено євро - єдину валюту для розрахунків!
# Start of order review system.
@@ -1513,7 +1513,7 @@ STR_NETWORK_COMPANY_NAME :{SILVER}Наз
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Засновано: {WHITE}{NUM}
STR_NETWORK_VALUE :{SILVER}Вартість компанії: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Поточний баланс: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Прибуток торік: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Прибуток минулого року: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Продуктивність: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Транспорт: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -2311,16 +2311,16 @@ STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Керівник)
STR_7059_TRANSPORT_COMPANY_MERGER :{BLACK}{BIGFONT}Компанії об'єдналися!
STR_705A_HAS_BEEN_SOLD_TO_FOR :{BLACK}{BIGFONT}{COMPANY} була викуплена {COMPANY} за {CURRENCY}!
STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}Ми шукаємо нового власника нашої компанії.{}{}Чи бажаєте Ви купити {COMPANY} за {CURRENCY}?
STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}Ми шукаємо нового власника нашої компанії.{}{}Ви бажаєте купити {COMPANY} за {CURRENCY}?
STR_705C_BANKRUPT :{BLACK}{BIGFONT}БАНКРУТ!
STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{COMPANY} була закрита кредиторами і все майно продане!
STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{COMPANY} буде закрита кредиторами і все майно буде продане!
STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED :{BLACK}{BIGFONT}Засновано нову компанію!
STR_705F_STARTS_CONSTRUCTION_NEAR :{BLACK}{BIGFONT}{COMPANY} починає будівництво біля {TOWN}!
STR_7060_CAN_T_BUY_COMPANY :{WHITE}Неможливо купити компанію...
STR_7061_CARGO_PAYMENT_RATES :{WHITE}Тарифи на доставку вантажів
STR_7062_DAYS_IN_TRANSIT :{BLACK}{TINYFONT}Днів у дорозі
STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Плата за доставку 10 одиниць (або 10,000 літрів) вантажу на відстань 20 квадратів
STR_7064_TOGGLE_GRAPH_FOR_CARGO :{BLACK}Вкл/відкл графік типів вантажу
STR_7064_TOGGLE_GRAPH_FOR_CARGO :{BLACK}Вкл/викл графік типів вантажу
STR_7065 :{BLACK}{TINYFONT}{STRING}
STR_7066_ENGINEER :Інженер
STR_7067_TRAFFIC_MANAGER :Регулювальник
@@ -2341,7 +2341,7 @@ STR_COMPANY_PASSWORD :{BLACK}Паро
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Пароль захищає вашу компанію від приєднання інших гравців.
STR_SET_COMPANY_PASSWORD :Встановлення паролю
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Світова економічна криза!{}{}Фінансисти очікують спад виробництва та попиту!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Криза минула!{}{}Збільшення виробництва внаслідок стабілізації економіки надає впевненості підприємствам!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Криза минула!{}{}Збільшення діяльності підніме промисловість коли економіка стабілізується!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Розмір вікна великий/малий
STR_7076_COMPANY_VALUE :{GOLD}Вартість компанії: {WHITE}{CURRENCY64}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Купити 25% акцій компанії
@@ -2773,7 +2773,7 @@ STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Ціна
STR_885C_BROKEN_DOWN :{RED}Зламався
STR_885D_AGE_RUNNING_COST_YR :{BLACK}Вік: {LTBLUE}{STRING}{BLACK} Транспортні витрати: {LTBLUE}{CURRENCY}/рік
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Вага: {LTBLUE}{WEIGHT_S} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY}
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибуток: {LTBLUE}{CURRENCY} (торік: {CURRENCY})
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибуток: {LTBLUE}{CURRENCY} (минулого року: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Надійність: {LTBLUE}{COMMA}% {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Зупинений
STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Неможливо проїхати сигнал - небезпечно...
+1
View File
@@ -617,6 +617,7 @@ STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Verminde
STR_022A_GENERATE_RANDOM_LAND :{BLACK}Ontwikkel lukraak land
STR_022B_RESET_LANDSCAPE :{BLACK}Herstel landerye
STR_022C_RESET_LANDSCAPE :{WHITE}Herstel landerye
STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Is jy seker jy wil alle speler-besittend eiendom verwyder?
STR_022E_LANDSCAPE_GENERATION :{BLACK}Landerye ontwikkeling
STR_022F_TOWN_GENERATION :{BLACK}Stad ontwikkeling
STR_0230_INDUSTRY_GENERATION :{BLACK}Nyweheid ontwikkeling
+2
View File
@@ -621,6 +621,8 @@ STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Smanji p
STR_022A_GENERATE_RANDOM_LAND :{BLACK}Napravi nasumično zemljište
STR_022B_RESET_LANDSCAPE :{BLACK}Poništi krajolik
STR_022C_RESET_LANDSCAPE :{WHITE}Poništi krajolik
STR_RESET_LANDSCAPE_TOOLTIP :{BLACK}Obriši sa mape sve u vlasništvu igrača
STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Jeste li sigurni da želite obrisati sve u vlasništvu igrača?
STR_022E_LANDSCAPE_GENERATION :{BLACK}Stvaranje krajolika
STR_022F_TOWN_GENERATION :{BLACK}Stvaranje gradova
STR_0230_INDUSTRY_GENERATION :{BLACK}Stvaranje industrija
-100
View File
@@ -232,10 +232,8 @@ 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
@@ -1101,26 +1099,8 @@ 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
@@ -1133,93 +1113,14 @@ STR_5807_YOU_ALREADY_OWN_IT :{WHITE}...it is
##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
@@ -1292,6 +1193,5 @@ SET_PERFORMANCE_DETAIL_INT :{BLACK}{NUM}
############ Tooltip measurment
############ Date formatting
########
+2
View File
@@ -625,6 +625,8 @@ STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Μείω
STR_022A_GENERATE_RANDOM_LAND :{BLACK}Δημιουργία τυχαίου εδάφους
STR_022B_RESET_LANDSCAPE :{BLACK}Επαναφορά τοπίου
STR_022C_RESET_LANDSCAPE :{WHITE}Επαναφορά Τοπίου
STR_RESET_LANDSCAPE_TOOLTIP :{BLACK}Αφαίρεση όλων των ιδιοκτησιών παικτών από το χάρτη
STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Είστε σίγουρος ότι θέλετε να αφαιρέσετε όλες τις ιδιοκτησίες παικτών;
STR_022E_LANDSCAPE_GENERATION :{BLACK}Δημιουργία τοπίου
STR_022F_TOWN_GENERATION :{BLACK}Δημιουργία πόλης
STR_0230_INDUSTRY_GENERATION :{BLACK}Δημιουργία Βιομηχανίας
+14 -18
View File
@@ -53,20 +53,6 @@ static int _scengen_town_size = 2; // depress medium-sized towns per default
extern void GenerateIndustries(void);
extern bool GenerateTowns(void);
void CcGiveMoney(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
#ifdef ENABLE_NETWORK
char msg[20];
if (!success) return;
/* Inform the player of this action */
snprintf(msg, sizeof(msg), "%d", p1);
if (!_network_server) {
SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg);
} else {
NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, NETWORK_SERVER_INDEX);
}
#endif /* ENABLE_NETWORK */
}
void HandleOnEditText(WindowEvent *e)
{
@@ -89,11 +75,21 @@ void HandleOnEditText(WindowEvent *e)
case 3: { /* Give money, you can only give money in excess of loan */
const Player *p = GetPlayer(_current_player);
int32 money = min(p->money64 - p->current_loan, atoi(e->we.edittext.str) / _currency->rate);
char msg[20];
money = clamp(money, 0, 20000000); // Clamp between 20 million and 0
// Give 'id' the money, and substract it from ourself
DoCommandP(0, money, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
if (!DoCommandP(0, money, id, NULL, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS))) break;
// Inform the player of this action
snprintf(msg, sizeof(msg), "%d", money);
if (!_network_server) {
SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg);
} else {
NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg, NETWORK_SERVER_INDEX);
}
break;
}
#endif /* ENABLE_NETWORK */
@@ -1805,7 +1801,7 @@ static void MainToolbarWndProc(Window *w, WindowEvent *e)
case WKC_F7: ShowPlayerStations(_local_player); break;
case WKC_F8: ShowPlayerFinances(_local_player); break;
case WKC_F9: ShowPlayerCompany(_local_player); break;
case WKC_F10: ShowOperatingProfitGraph(); break;
case WKC_F10:ShowOperatingProfitGraph(); break;
case WKC_F11: ShowCompanyLeagueTable(); break;
case WKC_F12: ShowBuildIndustryWindow(); break;
case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Train); break;
@@ -1817,7 +1813,7 @@ static void MainToolbarWndProc(Window *w, WindowEvent *e)
case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(); break;
case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
case WKC_SHIFT | WKC_F10: ShowBuildAirToolbar(); break;
case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
case WKC_CTRL | 'S': MenuClickSmallScreenshot(); break;
@@ -2012,7 +2008,7 @@ static void ScenEditToolbarWndProc(Window *w, WindowEvent *e)
case WE_KEYPRESS:
switch (e->we.keypress.keycode) {
case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(w); break;
case WKC_F1: ToolbarPauseClick(w); break;
case WKC_F2: ShowGameOptions(); break;
case WKC_F3: MenuClickSaveLoad(0); break;
case WKC_F4: ToolbarScenGenLand(w); break;
+2 -4
View File
@@ -30,7 +30,6 @@
#include "tgp.h"
#include "settings.h"
#include "date.h"
#include "fileio.h"
#include "fios.h"
/* Variables to display file lists */
@@ -213,16 +212,16 @@ static const char *credits[] = {
" Loïc Guilloux (glx) - In training, not yet specialized",
" Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)",
" Attila Bán (MiHaMiX) - WebTranslator, Nightlies, Wiki and bugtracker host",
" Owen Rudge (orudge) - Forum host, OS/2 port",
" Peter Nelson (peter1138) - Spiritual descendant from newgrf gods",
" Remko Bijker (Rubidium) - THE desync hunter",
" Christoph Mallon (Tron) - Programmer, code correctness police",
" Patric Stout (TrueLight) - Coder, network guru, SVN-, MS- and website host",
" Patric Stout (TrueLight) - Coder, network guru, SVN- and website host",
"",
"Retired Developers:",
" Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)",
" Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)",
" Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)",
" Owen Rudge (orudge) - Forum- and masterserver host, OS/2 port (0.1 - 0.4.8)",
"",
"Special thanks go out to:",
" Josef Drexler - For his great work on TTDPatch",
@@ -1338,7 +1337,6 @@ static void GenerateFileName(void)
SetDParam(1, p->name_2);
SetDParam(2, _date);
GetString(_edit_str_buf, STR_4004, lastof(_edit_str_buf));
SanitizeFilename(_edit_str_buf);
}
extern void StartupEngines(void);
+2 -2
View File
@@ -281,7 +281,7 @@ static byte MakeFinnishTownName(char *buf, uint32 seed, const char *last)
if (SeedChance(0, 15, seed) >= 10) {
strecat(buf, name_finnish_real[SeedChance(2, lengthof(name_finnish_real), seed)], last);
} else if (SeedChance(0, 15, seed) >= 5) {
// A two-part name by combining one of name_finnish_1 + "la"/"lä"
// A two-part name by combining one of name_finnish_1 + "la"/"lä"
// The reason for not having the contents of name_finnish_{1,2} in the same table is
// that the ones in name_finnish_2 are not good for this purpose.
uint sel = SeedChance( 0, lengthof(name_finnish_1), seed);
@@ -295,7 +295,7 @@ static byte MakeFinnishTownName(char *buf, uint32 seed, const char *last)
{
strecat(buf, "la", last);
} else {
strecat(buf, "", last);
strecat(buf, "", last);
}
} else {
// A two-part name by combining one of name_finnish_{1,2} + name_finnish_3.
+1 -3
View File
@@ -7,7 +7,7 @@
extern const char _openttd_revision[];
#elif defined(WITH_REV_HACK)
#define WITH_REV
const char _openttd_revision[] = "0.5.3-RC1";
const char _openttd_revision[] = "0.5.1-RC1";
#else
const char _openttd_revision[] = NOREV_STRING;
#endif
@@ -1397,13 +1397,11 @@ void NetworkStartUp(void)
byte cl_max = _network_game_info.clients_max;
byte cp_max = _network_game_info.companies_max;
byte sp_max = _network_game_info.spectators_max;
byte s_lang = _network_game_info.server_lang;
memset(&_network_game_info, 0, sizeof(_network_game_info));
_network_game_info.clients_max = cl_max;
_network_game_info.companies_max = cp_max;
_network_game_info.spectators_max = sp_max;
_network_game_info.server_lang = s_lang;
}
// Let's load the network in windows
+2 -2
View File
@@ -183,7 +183,7 @@ DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_CHAT)(NetworkAction action, DestType
// Data:
// uint8: ActionID (see network_data.h, NetworkAction)
// uint8: Destination Type (see network_data.h, DestType);
// uint16: Destination Player
// uint8: Destination Player (1..MAX_PLAYERS)
// 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_uint16(p, dest);
NetworkSend_uint8(p, dest);
NetworkSend_string(p, msg);
NetworkSend_Packet(p, MY_CLIENT);
}
+33 -31
View File
@@ -429,24 +429,34 @@ void NetworkAddCommandQueue(NetworkClientState *cs, CommandPacket *cp)
// Prepare a DoCommand to be send over the network
void NetworkSend_Command(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback)
{
CommandPacket c;
CommandPacket *c = malloc(sizeof(CommandPacket));
byte temp_callback;
c.player = _local_player;
c.next = NULL;
c.tile = tile;
c.p1 = p1;
c.p2 = p2;
c.cmd = cmd;
c.callback = 0;
c->player = _local_player;
c->next = NULL;
c->tile = tile;
c->p1 = p1;
c->p2 = p2;
c->cmd = cmd;
c->callback = 0;
while (c.callback < _callback_table_count && _callback_table[c.callback] != callback)
c.callback++;
if (c.callback == _callback_table_count) {
temp_callback = 0;
while (temp_callback < _callback_table_count && _callback_table[temp_callback] != callback)
temp_callback++;
if (temp_callback == _callback_table_count) {
DEBUG(net, 0) ("[NET] Unknown callback. (Pointer: %p) No callback sent.", callback);
c.callback = 0; /* _callback_table[0] == NULL */
temp_callback = 0; /* _callback_table[0] == NULL */
}
ttd_strlcpy(c.text, (_cmd_text != NULL) ? _cmd_text : "", lengthof(c.text));
if (_network_server) {
// We are the server, so set the command to be executed next possible frame
c->frame = _frame_counter_max + 1;
} else {
c->frame = 0; // The client can't tell which frame, so just make it 0
}
ttd_strlcpy(c->text, (_cmd_text != NULL) ? _cmd_text : "", lengthof(c->text));
if (_network_server) {
// If we are the server, we queue the command in our 'special' queue.
@@ -454,38 +464,30 @@ void NetworkSend_Command(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, Comma
// client on the server can do everything 1 tick faster than others.
// So to keep the game fair, we delay the command with 1 tick
// which gives about the same speed as most clients.
// Only the server gets the callback, because clients should not get them
// We are the server, so set the command to be executed next possible frame
NetworkClientState *cs;
CommandPacket *new_cp = malloc(sizeof(CommandPacket));
c.frame = _frame_counter_max + 1;
*new_cp = c;
// And we queue it for delivery to the clients
FOR_ALL_CLIENTS(cs) {
if (cs->status > STATUS_AUTH) NetworkAddCommandQueue(cs, c);
}
// Only the server gets the callback, because clients should not get them
c->callback = temp_callback;
if (_local_command_queue == NULL) {
_local_command_queue = new_cp;
_local_command_queue = c;
} else {
// Find last packet
CommandPacket *cp = _local_command_queue;
while (cp->next != NULL) cp = cp->next;
cp->next = new_cp;
}
c.callback = 0;
// And we queue it for delivery to the clients
FOR_ALL_CLIENTS(cs) {
if (cs->status > STATUS_AUTH) NetworkAddCommandQueue(cs, &c);
cp->next = c;
}
return;
}
// Clients send their command to the server and forget all about the packet
c.frame = 0;
SEND_COMMAND(PACKET_CLIENT_COMMAND)(&c);
c->callback = temp_callback;
SEND_COMMAND(PACKET_CLIENT_COMMAND)(c);
}
// Execute a DoCommand we received from the network
+25 -27
View File
@@ -1033,8 +1033,7 @@ enum {
static const Widget _client_list_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 14, 11, 237, 0, 13, STR_NETWORK_CLIENT_LIST, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_STICKYBOX, RESIZE_NONE, 14, 238, 249, 0, 13, STR_NULL, STR_STICKY_BUTTON},
{ WWT_CAPTION, RESIZE_NONE, 14, 11, 249, 0, 13, STR_NETWORK_CLIENT_LIST, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 14, 0, 249, 14, 14 + CLNWND_ROWSIZE + 1, 0x0, STR_NULL},
{ WIDGETS_END},
@@ -1048,7 +1047,7 @@ static const Widget _client_list_popup_widgets[] = {
static WindowDesc _client_list_desc = {
WDP_AUTO, WDP_AUTO, 250, 1,
WC_CLIENT_LIST,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
_client_list_widgets,
ClientListWndProc
};
@@ -1144,7 +1143,7 @@ static bool CheckClientListHeight(Window *w)
if (w->height != CLNWND_OFFSET + num + 1) {
// XXX - magic unfortunately; (num + 2) has to be one bigger than heigh (num + 1)
SetWindowDirty(w);
w->widget[3].bottom = w->widget[3].top + num + 2;
w->widget[2].bottom = w->widget[2].top + num + 2;
w->height = CLNWND_OFFSET + num + 1;
SetWindowDirty(w);
return false;
@@ -1480,7 +1479,7 @@ void ShowJoinStatusWindowAfterJoin(void)
AllocateWindowDesc(&_network_join_status_window_desc);
}
static void SendChat(const char *buf, DestType type, int dest)
static void SendChat(const char *buf, DestType type, byte dest)
{
if (buf[0] == '\0') return;
if (!_network_server) {
@@ -1544,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, chatquerystr_d).text;
Textbuf *tb = &WP(w, querystr_d).text;
uint len, tb_len;
uint item;
char *tb_buf, *pre_buf;
@@ -1602,7 +1601,7 @@ static void ChatTabCompletion(Window *w)
}
/* Update the textbuffer */
UpdateTextBufferSize(&WP(w, chatquerystr_d).text);
UpdateTextBufferSize(&WP(w, querystr_d).text);
SetWindowDirty(w);
free(pre_buf);
@@ -1616,17 +1615,17 @@ static void ChatTabCompletion(Window *w)
_chat_tab_completion_active = false;
/* Update the textbuffer */
UpdateTextBufferSize(&WP(w, chatquerystr_d).text);
UpdateTextBufferSize(&WP(w, querystr_d).text);
SetWindowDirty(w);
}
free(pre_buf);
}
/*
* uses chatquerystr_d WP macro
* uses chatquerystr_d->caption to store type of chat message (Private/Team/All)
*/
/* 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 */
static void ChatWindowWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
@@ -1645,8 +1644,8 @@ static void ChatWindowWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
assert(WP(w, chatquerystr_d).caption < lengthof(chat_captions));
msg = chat_captions[WP(w, chatquerystr_d).caption];
assert(GB(WP(w, querystr_d).caption, 0, 8) < lengthof(chat_captions));
msg = chat_captions[GB(WP(w, querystr_d).caption, 0, 8)];
DrawStringRightAligned(w->widget[2].left - 2, w->widget[2].top + 1, msg, 16);
DrawEditBox(w, &WP(w, querystr_d), 2);
} break;
@@ -1654,9 +1653,9 @@ static void ChatWindowWndProc(Window *w, WindowEvent *e)
case WE_CLICK:
switch (e->we.click.widget) {
case 3: { /* Send */
DestType type = (DestType)WP(w, chatquerystr_d).caption;
int dest = WP(w, chatquerystr_d).dest;
SendChat(WP(w, chatquerystr_d).text.buf, type, dest);
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);
} /* FALLTHROUGH */
case 0: /* Cancel */ DeleteWindow(w); break;
}
@@ -1673,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 = (DestType)WP(w, chatquerystr_d).caption;
int dest = WP(w, chatquerystr_d).dest;
SendChat(WP(w, chatquerystr_d).text.buf, type, dest);
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);
} /* FALLTHROUGH */
case 2: /* Escape */ DeleteWindow(w); break;
}
@@ -1705,7 +1704,7 @@ static const WindowDesc _chat_window_desc = {
ChatWindowWndProc
};
void ShowNetworkChatQueryWindow(DestType type, int dest)
void ShowNetworkChatQueryWindow(DestType type, byte dest)
{
Window *w;
@@ -1717,12 +1716,11 @@ void ShowNetworkChatQueryWindow(DestType type, int dest)
w = AllocateWindowDesc(&_chat_window_desc);
LowerWindowWidget(w, 2);
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);
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);
}
#endif /* ENABLE_NETWORK */
+2 -2
View File
@@ -9,7 +9,7 @@
void ShowNetworkNeedPassword(NetworkPasswordType npt);
void ShowNetworkGiveMoneyWindow(byte player); // PlayerID
void ShowNetworkChatQueryWindow(DestType type, int dest);
void ShowNetworkChatQueryWindow(DestType type, byte 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, int dest) {}
static inline void ShowNetworkChatQueryWindow(byte desttype, byte dest) {}
static inline void ShowClientList(void) {}
static inline void ShowJoinStatusWindowAfterJoin(void) {}
static inline void ShowNetworkGameWindow(void) {}
+4 -11
View File
@@ -835,7 +835,8 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
NetworkClientState *new_cs;
const NetworkClientInfo *ci;
byte callback;
CommandPacket *cp;
CommandPacket *cp = malloc(sizeof(CommandPacket));
// The client was never joined.. so this is impossible, right?
// Ignore the packet, give the client a warning, and close his connection
@@ -844,7 +845,6 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
return;
}
cp = malloc(sizeof(CommandPacket));
cp->player = NetworkRecv_uint8(cs, p);
cp->cmd = NetworkRecv_uint32(cs, p);
cp->p1 = NetworkRecv_uint32(cs, p);
@@ -854,10 +854,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
callback = NetworkRecv_uint8(cs, p);
if (cs->has_quit) {
free(cp);
return;
}
if (cs->has_quit) return;
ci = DEREF_CLIENT_INFO(cs);
@@ -865,13 +862,11 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
if (!IsValidCommand(cp->cmd)) {
IConsolePrintF(_icolour_err, "WARNING: invalid command from client %d (IP: %s).", ci->client_index, GetPlayerIP(ci));
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_NOT_EXPECTED);
free(cp);
return;
}
if (!CheckCommandFlags(cp, ci)) {
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_KICKED);
free(cp);
return;
}
@@ -883,7 +878,6 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
IConsolePrintF(_icolour_err, "WARNING: player %d (IP: %s) tried to execute a command as player %d, kicking...",
ci->client_playas + 1, GetPlayerIP(ci), cp->player + 1);
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_PLAYER_MISMATCH);
free(cp);
return;
}
@@ -895,7 +889,6 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
if (cp->cmd == CMD_PLAYER_CTRL) {
if (cp->p1 != 0) {
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_CHEATER);
free(cp);
return;
}
@@ -1126,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_uint16(cs, p);
int dest = NetworkRecv_uint8(cs, p);
char msg[MAX_TEXT_MSG_LEN];
NetworkRecv_string(cs, p, msg, MAX_TEXT_MSG_LEN);
+64 -59
View File
@@ -1626,7 +1626,6 @@ static const SpriteGroup* CreateGroupFromGroupID(byte feature, byte setid, byte
if (feature != _cur_grffile->spriteset_feature) {
grfmsg(GMS_WARN, "NewSpriteGroup(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping.",
setid, type,
_cur_grffile->spriteset_feature, feature);
return NULL;
}
@@ -2097,73 +2096,79 @@ static void FeatureNewName(byte *buf, int len)
len -= (int)name_length;
DEBUG(grf, 8) ("FeatureNewName: %d <- %s", id, name);
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);
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);
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;
}
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
}
}
}
}
@@ -3500,7 +3505,7 @@ static void ResetNewGRFData(void)
ResetPriceBaseMultipliers();
/* Reset the curencies array */
ResetCurrencies(false);
ResetCurrencies();
// Reset station classes
ResetStationClasses();
-2
View File
@@ -290,8 +290,6 @@ static byte MapAircraftMovementState(const Vehicle *v)
const Station *st = GetStation(v->u.air.targetairport);
byte amdflag = GetAirportMovingData(st->airport_type, v->u.air.pos)->flag;
if (st->airport_tile == 0) return AMS_TTDP_FLIGHT_TO_TOWER;
switch (v->u.air.state) {
case HANGAR:
/* The international airport is a special case as helicopters can land in
+4 -4
View File
@@ -118,10 +118,10 @@ static inline usize EvalAdjust_ ## size(const DeterministicSpriteGroupAdjust *ad
case DSGA_OP_SMAX: return max(last_value, value); \
case DSGA_OP_UMIN: return min((usize)last_value, (usize)value); \
case DSGA_OP_UMAX: return max((usize)last_value, (usize)value); \
case DSGA_OP_SDIV: return 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_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_MUL: return last_value * value; \
case DSGA_OP_AND: return last_value & value; \
case DSGA_OP_OR: return last_value | value; \
+1 -1
View File
@@ -404,7 +404,7 @@ void SetCurrentGrfLangID(const char *iso_name)
for (i=0; i < lengthof(iso_codes); i++) {
if (strncmp(iso_codes[i].code, iso_name, strlen(iso_codes[i].code)) == 0) {
/* We found a match, so let's use it. */
ret = iso_codes[i].grfLangID;
ret = i;
break;
}
}
+1 -8
View File
@@ -602,7 +602,6 @@ 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);
@@ -616,21 +615,15 @@ 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;
/* Make a space from a newline, but ignore multiple newlines */
if (c == '\n' && c_last != '\n') {
dest[0] = ' ';
dest++;
} else if (c == '\r') {
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';
-20
View File
@@ -19,7 +19,6 @@
#include "network.h"
#include "ai/ai.h"
#include "date.h"
#include "bridge_map.h"
enum {
HEADER_SIZE = 49,
@@ -345,9 +344,6 @@ 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 */
@@ -357,21 +353,6 @@ static void FixOldVehicles(void)
break;
}
}
if (IsBridgeTile(v->tile) && IsBridgeRamp(v->tile) &&
(v->z_pos & (TILE_HEIGHT - 1)) == (TILE_HEIGHT - 1)) {
/* Under some circumstances the trains going up a ramp can be one
* pixel too low when they enter the bridge. This causes the train
* to "disappear" under the bridge, which causes the train to
* break into two pieces and crash slightly later.
*
* This "hack" will make the trains on those positions on the
* ramps run one pixel higher. This offset will be automatically
* "fixed" when it enters the bridge middle parts or when it
* drives down the ramp of the bridge.
*/
v->z_pos++;
}
}
}
@@ -1530,7 +1511,6 @@ static bool LoadOldMain(LoadgameState *ls)
for (i = 0; i < OLD_MAP_SIZE; i ++) {
switch (GetTileType(i)) {
case MP_STATION: _m[i].m4 = 0; break; // We don't understand this grf mapping (yet)
case MP_RAILWAY:
/* We save presignals different from TTDPatch, convert them */
if (GetRailTileType(i) == RAIL_TILE_SIGNALS) {
+2 -14
View File
@@ -419,11 +419,6 @@ int ttd_main(int argc, char *argv[])
if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
if (generation_seed != GENERATE_NEW_SEED) _patches_newgame.generation_seed = generation_seed;
/* The width and height must be at least 1 pixel, this
* way all internal drawing routines work correctly. */
if (_cur_resolution[0] == 0) _cur_resolution[0] = 1;
if (_cur_resolution[1] == 0) _cur_resolution[1] = 1;
if (_dedicated_forks && !dedicated) _dedicated_forks = false;
// enumerate language files
@@ -1247,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 non dedicated network_servers! */
if (!_players[0].is_active && (!_networking || (_networking && _network_server && !_network_dedicated)))
// But this exeption is not true for network_servers!
if (!_players[0].is_active && (!_networking || (_networking && _network_server)))
DoStartupNewPlayer(false);
DoZoomInOutWindow(ZOOM_NONE, w); // update button status
@@ -1616,13 +1611,6 @@ bool AfterLoadGame(void)
}
}
{
Vehicle *v;
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Road && v->u.road.state >= 250) SETBIT(v->u.road.state, 2);
}
}
return true;
}
+1 -3
View File
@@ -463,8 +463,6 @@ 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;
@@ -1163,7 +1161,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 && u->orders != NULL) RemoveSharedOrderVehicleList(u);
if (u->prev_shared == NULL && u->next_shared == 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
-36
View File
@@ -1,39 +1,3 @@
openttd (0.5.3~rc1-1) unstable; urgency=low
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Thu, 28 Jun 2007 18:00:00 +0100
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.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Fri, 23 Mar 2007 23:45:46 +0100
openttd (0.5.1~rc1-1) unstable; urgency=low
* New upstream release.
+17 -22
View File
@@ -1,6 +1,6 @@
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "0.5.3" ; Define application version
!define INSTALLERVERSION 35 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPVERSION "0.5.1" ; Define application version
!define INSTALLERVERSION 29 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPURLLINK "http://www.openttd.org"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
@@ -81,7 +81,6 @@ 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
@@ -355,30 +354,26 @@ NoCD:
hasCD:
FunctionEnd
;----------------------------------------------------------------------------------
; 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)
;---------------------------------------------------------------------
; Custom page function to show notices for running OpenTTD
; 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
+28 -4
View File
@@ -1,17 +1,41 @@
; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=3
CancelEnabled=0
NumFields=6
[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 2]
[Field 5]
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
@@ -19,7 +43,7 @@ Right=284
Top=9
Bottom=65
[Field 3]
[Field 6]
Type=Link
Text=OpenTTD wiki
Left=238
+1 -1
View File
@@ -134,7 +134,7 @@ static void ChangeWorkingDirectory(char *exe)
}
}
void ShowInfo(const char *str)
void ShowInfo(const unsigned char *str)
{
HAB hab;
HMQ hmq;
+4 -4
View File
@@ -65,8 +65,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,5,3,0
PRODUCTVERSION 0,5,3,0
FILEVERSION 0,5,0,0
PRODUCTVERSION 0,5,0,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", "0.5.3-RC1\0"
VALUE "FileVersion", "0.5.1-RC1\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.5.2.0\0"
VALUE "ProductVersion", "0.0.0.0\0"
VALUE "SpecialBuild", "-\0"
END
END
+24 -43
View File
@@ -251,13 +251,31 @@ const byte _ffb_64[128] = {
48, 56, 56, 58, 56, 60, 60, 62,
};
static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction);
/** Most code of the "Normal" case of TPF Mode 1; for signals special tricks
* have to be done, but those happen in TPFMode1; this is just to prevent
* gotos ;). */
static inline void TPFMode1_NormalCase(TrackPathFinder* tpf, TileIndex tile, TileIndex tile_org, DiagDirection direction)
static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
{
uint bits;
int i;
RememberData rd;
TileIndex tile_org = tile;
// check if the old tile can be left at that direction
if (tpf->tracktype == TRANSPORT_ROAD) {
// road stops and depots now have a track (r4419)
// don't enter road stop from the back
if (IsRoadStopTile(tile) && GetRoadStopDir(tile) != direction) return;
// don't enter road depot from the back
if (IsTileDepotType(tile, TRANSPORT_ROAD) && GetRoadDepotDirection(tile) != direction) return;
}
if (IsTunnelTile(tile)) {
if (GetTunnelDirection(tile) != direction ||
GetTunnelTransportType(tile) != tpf->tracktype) {
return;
}
tile = SkipToEndOfTunnel(tpf, tile, direction);
}
tile += TileOffsByDiagDir(direction);
/* Check in case of rail if the owner is the same */
if (tpf->tracktype == TRANSPORT_RAIL) {
// don't enter train depot from the back
@@ -284,46 +302,11 @@ static inline void TPFMode1_NormalCase(TrackPathFinder* tpf, TileIndex tile, Til
/* Check if the new tile is a tunnel or bridge head and that the direction
* and transport type match */
if (IsTileType(tile, MP_TUNNELBRIDGE) && IsTunnel(tile)) {
if (GetTunnelTransportType(tile) != tpf->tracktype) {
return;
}
/* Only skip through the tunnel if heading inwards. We can
* be headed outwards if our starting position was in a
* tunnel and we're pathfinding backwards */
if (GetTunnelDirection(tile) == direction) {
tile = SkipToEndOfTunnel(tpf, tile, direction);
} else if (GetTunnelDirection(tile) != ReverseDiagDir(direction)) {
/* We don't support moving through the sides of a tunnel
* entrance :-) */
return;
}
}
}
static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
{
uint bits;
int i;
RememberData rd;
TileIndex tile_org = tile;
// check if the old tile can be left at that direction
if (tpf->tracktype == TRANSPORT_ROAD) {
// road stops and depots now have a track (r4419)
// don't enter road stop from the back
if (IsRoadStopTile(tile) && GetRoadStopDir(tile) != direction) return;
// don't enter road depot from the back
if (IsTileDepotType(tile, TRANSPORT_ROAD) && GetRoadDepotDirection(tile) != direction) return;
}
if (IsTunnelTile(tile)) {
if (GetTunnelDirection(tile) != direction ||
GetTunnelTransportType(tile) != tpf->tracktype) {
return;
}
tile = SkipToEndOfTunnel(tpf, tile, direction);
}
tile += TileOffsByDiagDir(direction);
tpf->rd.cur_length++;
@@ -353,8 +336,6 @@ static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection directi
}
}
TPFMode1_NormalCase(tpf, tile, tile_org, direction);
/* the next is only used when signals are checked.
* seems to go in 2 directions simultaneously */
+7 -7
View File
@@ -838,9 +838,7 @@ int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
* _local_player/_network_playas: what they play as
* cid = requested company/player of joining client */
Player *p;
#ifdef ENABLE_NETWORK
uint16 cid = p2; // ClientID
#endif /* ENABLE_NETWORK */
/* This command is only executed in a multiplayer game */
if (!_networking) return CMD_ERROR;
@@ -863,16 +861,18 @@ int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
NetworkClientInfo *ci = &_network_client_info[cid];
ci->client_playas = PLAYER_SPECTATOR;
NetworkUpdateClientInfo(ci->client_index);
} else if (_local_player == PLAYER_SPECTATOR) {
_network_playas = PLAYER_SPECTATOR;
}
} else
#endif /* ENABLE_NETWORK */
{
_network_playas = PLAYER_SPECTATOR;
SetLocalPlayer(PLAYER_SPECTATOR);
}
break;
}
/* This is the joining client who wants a new company */
if (_local_player != _network_playas && _network_playas == p->index) {
assert(_local_player == PLAYER_SPECTATOR);
if (_local_player != _network_playas) {
assert(_local_player == PLAYER_SPECTATOR && _network_playas == p->index);
SetLocalPlayer(p->index);
MarkWholeScreenDirty();
}
+19 -25
View File
@@ -187,7 +187,7 @@ uint GetRailFoundation(Slope tileh, TrackBits bits)
static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
{
if (IsSteepSlope(tileh)) {
if (_patches.build_on_slopes && existing == 0) {
if (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;
}
@@ -201,17 +201,20 @@ static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existin
}
// no special foundation
if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0) {
if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0)
return 0;
} else if (!_patches.build_on_slopes || _is_old_ai_player) {
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
if ((~_valid_tileh_slopes[1][tileh] & rail_bits) == 0 || ( // whole tile is leveled up
(rail_bits == TRACK_BIT_X || rail_bits == TRACK_BIT_Y) &&
(tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)
)) { // partly up
return (existing != 0) ? 0 : _price.terraform;
if (existing != 0) {
return 0;
} else if (!_patches.build_on_slopes || _is_old_ai_player) {
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
} else {
return _price.terraform;
}
}
}
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@@ -269,7 +272,7 @@ int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
case MP_RAILWAY:
if (!CheckTrackCombination(tile, trackbit, flags) ||
!EnsureNoVehicleOnGround(tile)) {
!EnsureNoVehicle(tile)) {
return CMD_ERROR;
}
if (!IsTileOwner(tile, _current_player) ||
@@ -304,7 +307,7 @@ int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
}
#undef M
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) {
if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS);
@@ -381,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)) ||
!EnsureNoVehicleOnGround(tile)) {
!EnsureNoVehicle(tile)) {
return CMD_ERROR;
}
@@ -396,7 +399,7 @@ int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (!IsPlainRailTile(tile) ||
(_current_player != OWNER_WATER && !CheckTileOwnership(tile)) ||
!EnsureNoVehicleOnGround(tile)) {
!EnsureNoVehicle(tile)) {
return CMD_ERROR;
}
@@ -651,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) || !EnsureNoVehicleOnGround(tile))
if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicle(tile))
return CMD_ERROR;
/* Protect against invalid signal copying */
@@ -830,7 +833,7 @@ int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (!ValParamTrackOrientation(track) ||
!IsTileType(tile, MP_RAILWAY) ||
!EnsureNoVehicleOnGround(tile) ||
!EnsureNoVehicle(tile) ||
!HasSignalOnTrack(tile, track)) {
return CMD_ERROR;
}
@@ -871,23 +874,14 @@ 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 (GetRailType(tile) == totype) return CMD_ERROR;
if (!EnsureNoVehicle(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
if (!EnsureNoVehicleOnGround(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
// tile is already of requested type?
if (GetRailType(tile) == totype) 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;
@@ -990,7 +984,7 @@ static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
return CMD_ERROR;
if (!EnsureNoVehicleOnGround(tile))
if (!EnsureNoVehicle(tile))
return CMD_ERROR;
if (flags & DC_EXEC) {
+2 -2
View File
@@ -1,6 +1,6 @@
OpenTTD README
Last updated: 2007-06-28
Release version: 0.5.3-RC1
Last updated: 2007-03-20
Release version: 0.5.1-RC1
------------------------------------------------------------------------
+6 -14
View File
@@ -308,7 +308,7 @@ int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if ((existing & pieces) == pieces) {
return_cmd_error(STR_1007_ALREADY_BUILT);
}
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (!EnsureNoVehicle(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 (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (flags & DC_EXEC) {
YapfNotifyTrackLayoutChange(tile, FIND_FIRST_BIT(GetTrackBits(tile)));
@@ -422,21 +422,13 @@ 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) || !EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (!CheckTileOwnership(tile) || !EnsureNoVehicle(tile)) return CMD_ERROR;
if (GetRailTypeCrossing(tile) == totype) return CMD_ERROR;
@@ -449,7 +441,7 @@ int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, FIND_FIRST_BIT(GetCrossingRailBits(tile)));
}
return _price.build_rail / 2;
return _price.build_rail >> 1;
}
@@ -581,7 +573,7 @@ int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (p1 > 3) return CMD_ERROR; // check direction
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
tileh = GetTileSlope(tile, NULL);
if (tileh != SLOPE_FLAT && (
@@ -947,7 +939,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 && EnsureNoVehicleOnGround(tile) && CHANCE16(1, 20)) {
if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicle(tile) && CHANCE16(1, 20)) {
StartRoadWorks(tile);
SndPlayTileFx(SND_21_JACKHAMMER, tile);
+1 -1
View File
@@ -332,7 +332,7 @@ static const Depot* FindClosestRoadDepot(const Vehicle* v)
/* See where we are now */
Trackdir trackdir = GetVehicleTrackdir(v);
ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, v->tile, ReverseTrackdir(trackdir), TRANSPORT_ROAD, v->owner, INVALID_RAILTYPE, 0);
ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_ROAD, v->owner, INVALID_RAILTYPE);
if (ftd.best_bird_dist == 0) {
return GetDepotByTile(ftd.node.tile); /* Target found */
} else {
-2
View File
@@ -13,7 +13,6 @@
#include "screenshot.h"
#include "variables.h"
#include "date.h"
#include "fileio.h"
char _screenshot_format_name[8];
uint _num_screenshot_formats;
@@ -508,7 +507,6 @@ static char *MakeScreenshotName(const char *ext)
GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
}
SanitizeFilename(_screenshot_name);
base = strchr(_screenshot_name, 0);
base[0] = '.'; strcpy(base + 1, ext);
+30 -68
View File
@@ -260,13 +260,7 @@ static IniFile *ini_load(const char *filename)
}
} else if (group) {
// find end of keyname
if (*s == '\"') {
s++;
for (t = s; *t != '\0' && *t != '\"'; t++);
if (*t == '\"') *t = ' ';
} else {
for (t = s; *t != '\0' && *t != '=' && *t != '\t' && *t != ' '; t++);
}
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);
@@ -354,18 +348,11 @@ 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, "\n");
fprintf(f, "%s\n", item->name);
} else {
fprintf(f, " = %s\n", item->value);
fprintf(f, "%s = %s\n", item->name, item->value);
}
}
}
@@ -989,7 +976,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)
@@ -1218,30 +1205,29 @@ 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_OMANY("server_lang", SLE_UINT8, S, 0, _network_game_info.server_lang, 0, 3, "ANY|ENGLISH|GERMAN|FRENCH", 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_END()
};
#endif /* ENABLE_NETWORK */
@@ -1255,12 +1241,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, 0, 0, 3, 0, STR_NULL, NULL),
SDT_VAR(GameOptions, diff_level,SLE_UINT8, 0, 0, 9, 0, 9, 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, 7 * TILE_HEIGHT, 2 * TILE_HEIGHT, 13 * TILE_HEIGHT, 0, STR_NULL, NULL),
SDT_VAR(GameOptions, snow_line, SLE_UINT8, 0, 0, 1, 0, 56, 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),
@@ -1492,7 +1478,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,3000, 0, STR_NULL, NULL),
SDT_VAR(CurrencySpec, to_euro, SLE_INT32, S, 0, 0, 0,1000, 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()
@@ -1664,18 +1650,14 @@ 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);
}
@@ -1814,26 +1796,6 @@ void IConsoleGetPatchSetting(const char *name)
name, value, (sd->desc.flags & SGF_0ISDISABLED) ? "(0) " : "", sd->desc.min, sd->desc.max);
}
void IConsoleListPatches(void)
{
const SettingDesc *sd;
IConsolePrintF(_icolour_warn, "All patches with their current value:");
for (sd = _patch_settings; sd->save.cmd != SL_END; sd++) {
char value[80];
const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_patches_newgame : &_patches, &sd->save);
if (sd->desc.cmd == SDT_BOOLX) {
snprintf(value, lengthof(value), (*(bool*)ptr == 1) ? "on" : "off");
} else {
snprintf(value, lengthof(value), "%d", (uint32)ReadValue(ptr, sd->save.conv));
}
IConsolePrintF(_icolour_def, "%s = %s", sd->desc.name, value);
}
IConsolePrintF(_icolour_warn, "Use 'patch' command to change a value");
}
/** Save and load handler for patches/settings
* @param osd SettingDesc struct containing all information
* @param object can be either NULL in which case we load global variables or
-1
View File
@@ -71,7 +71,6 @@ extern Patches _patches_newgame;
bool IConsoleSetPatchSetting(const char *name, int32 value);
void IConsoleGetPatchSetting(const char *name);
void IConsoleListPatches(void);
const SettingDesc *GetPatchFromName(const char *name, uint *i);
bool SetPatchValue(uint index, const Patches *object, int32 value);
-21
View File
@@ -200,7 +200,6 @@ 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 */
@@ -369,24 +368,6 @@ 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 {
@@ -498,9 +479,7 @@ 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 */
+1 -4
View File
@@ -239,8 +239,7 @@ static void ProcessShipOrder(Vehicle *v)
if (order->type == v->current_order.type &&
order->flags == v->current_order.flags &&
order->dest == v->current_order.dest &&
(order->type != OT_GOTO_STATION || GetStation(order->dest)->dock_tile != 0))
order->dest == v->current_order.dest)
return;
v->current_order = *order;
@@ -254,8 +253,6 @@ static void ProcessShipOrder(Vehicle *v)
st = GetStation(order->dest);
if (st->dock_tile != 0) {
v->dest_tile = TILE_ADD(st->dock_tile, ToTileIndexDiff(GetDockOffset(st->dock_tile)));
} else {
v->cur_order_index++;
}
} else if (order->type == OT_GOTO_DEPOT) {
v->dest_tile = GetDepot(order->dest)->xy;
+1 -1
View File
@@ -208,7 +208,7 @@ static void SndPlayScreenCoordFx(SoundFx sound, int x, int y)
StartSound(
sound,
left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
left / (vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
(GetSound(sound)->volume * msf.effect_vol * _vol_factor_by_zoom[vp->zoom]) >> 15
);
return;
+6 -23
View File
@@ -84,11 +84,10 @@ bool SpriteExists(SpriteID id)
static void* AllocSprite(size_t);
static void* ReadSprite(SpriteID id, bool real_sprite)
static void* ReadSprite(SpriteID id)
{
uint num;
byte type;
uint32 filepos = _sprite_file_pos[id];
DEBUG(spritecache, 9) ("load sprite %d", id);
@@ -96,25 +95,15 @@ static void* ReadSprite(SpriteID id, bool real_sprite)
DEBUG(spritecache, 1) ("Tried to load non-existing sprite #%d. Probable cause: Wrong/missing NewGRFs", id);
/* SPR_IMG_QUERY is a BIG FAT RED ? */
filepos = _sprite_file_pos[SPR_IMG_QUERY];
id = SPR_IMG_QUERY;
}
FioSeekToFile(filepos);
FioSeekToFile(_sprite_file_pos[id]);
num = FioReadWord();
type = FioReadByte();
if (type == 0xFF) {
byte* dest;
if (real_sprite) {
static byte warning_level = 0;
DEBUG(misc, warning_level) ("Tried to load non sprite #%d as a real sprite. Probable cause: NewGRF interference", id);
warning_level = 6;
if (id == SPR_IMG_QUERY) error("Uhm, would you be so kind not to load a NewGRF that makes the 'query' sprite a non- sprite?");
return (void*)GetSprite(SPR_IMG_QUERY);
}
dest = AllocSprite(num);
byte* dest = AllocSprite(num);
_sprite_ptr[id] = dest;
FioReadBlock(dest, num);
@@ -126,12 +115,6 @@ static void* ReadSprite(SpriteID id, bool real_sprite)
Sprite* sprite;
byte* dest;
if (!real_sprite) {
static byte warning_level = 0;
DEBUG(misc, warning_level) ("Tried to load real sprite #%d as a non sprite. Probable cause: NewGRF interference", id);
warning_level = 6;
}
num = (type & 0x02) ? width * height : num - 8;
sprite = AllocSprite(sizeof(*sprite) + num);
_sprite_ptr[id] = sprite;
@@ -440,7 +423,7 @@ static uint RotateSprite(uint s)
}
#endif
const void *GetRawSprite(SpriteID sprite, bool real_sprite)
const void *GetRawSprite(SpriteID sprite)
{
void* p;
@@ -460,7 +443,7 @@ const void *GetRawSprite(SpriteID sprite, bool real_sprite)
p = _sprite_ptr[sprite];
// Load the sprite, if it is not loaded, yet
if (p == NULL) p = ReadSprite(sprite, real_sprite);
if (p == NULL) p = ReadSprite(sprite);
return p;
}
+3 -3
View File
@@ -12,17 +12,17 @@ typedef struct Sprite {
byte data[VARARRAY_SIZE];
} Sprite;
const void *GetRawSprite(SpriteID sprite, bool real_sprite);
const void *GetRawSprite(SpriteID sprite);
bool SpriteExists(SpriteID sprite);
static inline const Sprite *GetSprite(SpriteID sprite)
{
return GetRawSprite(sprite, true);
return GetRawSprite(sprite);
}
static inline const byte *GetNonSprite(SpriteID sprite)
{
return GetRawSprite(sprite, false);
return GetRawSprite(sprite);
}
void GfxInitSpriteMem(void);
+3 -11
View File
@@ -1096,7 +1096,7 @@ int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint3
int w = plat_len;
do {
byte layout = *layout_ptr++;
MakeRailStation(tile, st->owner, st->index, axis, layout & ~1, GB(p2, 0, 4));
MakeRailStation(tile, st->owner, st->index, axis, layout, 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 & ~1) + axis);
if (callback != CALLBACK_FAILED && callback < 8) SetStationGfx(tile, callback + axis);
}
tile += tile_delta;
@@ -1337,14 +1337,6 @@ 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);
@@ -1365,7 +1357,7 @@ int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
}
return _price.build_rail / 2;
return _price.build_rail >> 1;
}
/** Heavy wizardry used to add a roadstop to a station.
+1 -1
View File
@@ -469,7 +469,7 @@ static const CmdStruct _cmd_structs[] = {
// These are special versions of {STRING1}
// The first string includes the second string.
{"COMPANY", EmitSingleChar, SCC_STRING1, 2, 0},
{"COMPANY", EmitSingleChar, SCC_STRING1, 1, 0},
{"PLAYERNAME", EmitSingleChar, SCC_STRING1, 1, 0},
{"VEHICLE", EmitSingleChar, SCC_STRING1, 1, 0},
+1 -1
View File
@@ -25,7 +25,7 @@
* All sprites which are described here are referenced only one to a handful of times
* throughout the code. When introducing new sprite enums, use meaningful names.
* Don't be lazy and typing, and only use abbrevations when their meaning is clear or
* the length of the enum would get out of hand. In that case EXPLAIN THE ABBREVATION
* the length of the enum would get out of hand. In that case EXPLAIN THE ABBREVATION
* IN THIS FILE, and perhaps add some comments in the code where it is used.
* Now, don't whine about this being too much typing work if the enums are like
* 30 characters in length. If your editor doen't help you simplifying your work,
+9 -38
View File
@@ -120,8 +120,6 @@ void InitTextMessage(void)
void UndrawTextMessage(void)
{
if (_textmessage_visible) {
int x, y, width, height;
// Sometimes we also need to hide the cursor
// This is because both textmessage and the cursor take a shot of the
// screen before drawing.
@@ -141,28 +139,15 @@ void UndrawTextMessage(void)
}
}
x = _textmsg_box.x;
y = _screen.height - _textmsg_box.y - _textmsg_box.height;
width = _textmsg_box.width;
height = _textmsg_box.height;
if (y < 0) {
height = max(height + y, min(_textmsg_box.height, _screen.height));
y = 0;
}
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
memcpy_pitch(
_screen.dst_ptr + x + y * _screen.pitch,
_screen.dst_ptr + _textmsg_box.x + (_screen.height - _textmsg_box.y - _textmsg_box.height) * _screen.pitch,
_textmessage_backup,
width, height, _textmsg_box.width, _screen.pitch);
_textmsg_box.width, _textmsg_box.height, _textmsg_box.width, _screen.pitch);
// And make sure it is updated next time
_video_driver->make_dirty(x, y, width, height);
_video_driver->make_dirty(_textmsg_box.x, _screen.height - _textmsg_box.y - _textmsg_box.height, _textmsg_box.width, _textmsg_box.height);
_textmessage_dirty = true;
}
@@ -195,8 +180,7 @@ void TextMessageDailyLoop(void)
// Draw the textmessage-box
void DrawTextMessage(void)
{
int x, y, width, height;
uint offset_y, count;
uint y, count;
if (!_textmessage_dirty) return;
@@ -209,24 +193,11 @@ void DrawTextMessage(void)
count = GetTextMessageCount();
if (count == 0) return;
x = _textmsg_box.x;
y = _screen.height - _textmsg_box.y - _textmsg_box.height;
width = _textmsg_box.width;
height = _textmsg_box.height;
if (y < 0) {
height = max(height + y, min(_textmsg_box.height, _screen.height));
y = 0;
}
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,
_screen.dst_ptr + x + y * _screen.pitch,
width, height, _screen.pitch, _textmsg_box.width);
_screen.dst_ptr + _textmsg_box.x + (_screen.height - _textmsg_box.y - _textmsg_box.height) * _screen.pitch,
_textmsg_box.width, _textmsg_box.height, _screen.pitch, _textmsg_box.width);
_cur_dpi = &_screen; // switch to _screen painting
@@ -240,12 +211,12 @@ void DrawTextMessage(void)
);
/* Paint the messages starting with the lowest at the bottom */
for (offset_y = 13; count-- != 0; offset_y += 13) {
DoDrawString(_textmsg_list[count].message, _textmsg_box.x + 3, _screen.height - _textmsg_box.y - offset_y + 1, _textmsg_list[count].color);
for (y = 13; count-- != 0; y += 13) {
DoDrawString(_textmsg_list[count].message, _textmsg_box.x + 3, _screen.height - _textmsg_box.y - y + 1, _textmsg_list[count].color);
}
// Make sure the data is updated next flush
_video_driver->make_dirty(x, y, width, height);
_video_driver->make_dirty(_textmsg_box.x, _screen.height - _textmsg_box.y - _textmsg_box.height, _textmsg_box.width, _textmsg_box.height);
_textmessage_visible = true;
_textmessage_dirty = false;
+2 -154
View File
@@ -4,7 +4,7 @@
#include "thread.h"
#include <stdlib.h>
#if defined(__AMIGA__) || defined(NO_THREADS)
#if defined(__AMIGA__) || defined(__MORPHOS__) || 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) && !defined(__MORPHOS__)
#elif defined(UNIX)
#include <pthread.h>
@@ -154,156 +154,4 @@ void OTTDExitThread(void)
{
ExitThread(0);
}
#elif defined(MORPHOS)
#include <exec/types.h>
#include <exec/rawfmt.h>
#include <dos/dostags.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <setjmp.h>
/* NOTE: this code heavily depends on latest libnix updates. So make
* sure you link with new stuff which supports semaphore locking of
* the IO resources, else it will just go foobar. */
struct OTTDThreadStartupMessage {
struct Message msg; ///< standard exec.library message (MUST be the first thing in the message struct!)
OTTDThreadFunc func; ///< function the thread will execute
void *arg; ///< functions arguments for the thread function
void *ret; ///< return value of the thread function
jmp_buf jumpstore; ///< storage for the setjump state
};
struct OTTDThread {
struct MsgPort *replyport;
struct OTTDThreadStartupMessage msg;
};
/**
* Default OpenTTD STDIO/ERR debug output is not very useful for this, so we
* utilize serial/ramdebug instead.
*/
#ifndef NO_DEBUG_MESSAGES
void KPutStr(CONST_STRPTR format)
{
RawDoFmt(format, NULL, (void (*)())RAWFMTFUNC_SERIAL, NULL);
}
#else
#define KPutStr(x)
#endif
static void Proxy(void)
{
struct Task *child = FindTask(NULL);
struct OTTDThreadStartupMessage *msg;
/* Make sure, we don't block the parent. */
SetTaskPri(child, -5);
KPutStr("[Child] Progressing...\n");
if (NewGetTaskAttrs(NULL, &msg, sizeof(struct OTTDThreadStartupMessage *), TASKINFOTYPE_STARTUPMSG, TAG_DONE) && msg != NULL) {
/* Make use of setjmp() here, so this point can be reached again from inside
* OTTDExitThread() which can be called from anythere inside msg->func.
* It's a bit ugly and in worst case it leaks some memory. */
if (setjmp(msg->jumpstore) == 0) {
msg->ret = msg->func(msg->arg);
} else {
KPutStr("[Child] Returned to main()\n");
}
}
/* Quit the child, exec.library will reply the startup msg internally. */
KPutStr("[Child] Done.\n");
}
OTTDThread* OTTDCreateThread(OTTDThreadFunc function, void *arg)
{
OTTDThread *t;
struct Task *parent;
KPutStr("[OpenTTD] Create thread...\n");
t = (struct OTTDThread *)AllocVecTaskPooled(sizeof(struct OTTDThread));
if (t == NULL) return NULL;
parent = FindTask(NULL);
/* Make sure main thread runs with sane priority */
SetTaskPri(parent, 0);
/* Things we'll pass down to the child by utilizing NP_StartupMsg */
t->msg.func = function;
t->msg.arg = arg;
t->msg.ret = NULL;
t->replyport = CreateMsgPort();
if (t->replyport != NULL) {
struct Process *child;
t->msg.msg.mn_Node.ln_Type = NT_MESSAGE;
t->msg.msg.mn_ReplyPort = t->replyport;
t->msg.msg.mn_Length = sizeof(struct OTTDThreadStartupMessage);
child = CreateNewProcTags(
NP_CodeType, CODETYPE_PPC,
NP_Entry, Proxy,
NP_StartupMsg, (ULONG)&t->msg,
NP_Priority, 5UL,
NP_Name, (ULONG)"OpenTTD Thread",
NP_PPCStackSize, 131072UL,
TAG_DONE);
if (child != NULL) {
KPutStr("[OpenTTD] Child process launched.\n");
return t;
}
DeleteMsgPort(t->replyport);
}
FreeVecTaskPooled(t);
return NULL;
}
void* OTTDJoinThread(OTTDThread *t)
{
struct OTTDThreadStartupMessage *reply;
void *ret;
KPutStr("[OpenTTD] Join threads...\n");
if (t == NULL) return NULL;
KPutStr("[OpenTTD] Wait for child to quit...\n");
WaitPort(t->replyport);
reply = (struct OTTDThreadStartupMessage *)GetMsg(t->replyport);
ret = reply->ret;
DeleteMsgPort(t->replyport);
FreeVecTaskPooled(t);
return ret;
}
void OTTDExitThread()
{
struct OTTDThreadStartupMessage *msg;
KPutStr("[Child] Aborting...\n");
if (NewGetTaskAttrs(NULL, &msg, sizeof(struct OTTDThreadStartupMessage *), TASKINFOTYPE_STARTUPMSG, TAG_DONE) && msg != NULL) {
KPutStr("[Child] Jumping back...\n");
longjmp(msg->jumpstore, 0xBEAFCAFE);
}
NOT_REACHED();
}
#endif
+1 -1
View File
@@ -803,7 +803,7 @@ static bool GrowTown(Town *t)
for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
/* Only work with plain land that not already has a house */
if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR))) {
DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
_current_player = old_player;
return true;
+60 -80
View File
@@ -1325,7 +1325,6 @@ int32 CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
*/
int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Window *w = NULL;
Vehicle *v, *tmp, *first;
Vehicle *new_f = NULL;
int32 cost = 0;
@@ -1350,8 +1349,7 @@ int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) {
if (v == first && IsFrontEngine(first)) {
w = FindWindowById(WC_VEHICLE_VIEW, first->index);
if (w != NULL) DeleteWindow(w);
DeleteWindowById(WC_VEHICLE_VIEW, first->index);
}
if (IsLocalPlayer() && (p1 == 1 || !(RailVehInfo(v->engine_type)->flags & RVI_WAGON))) {
InvalidateWindow(WC_REPLACE_VEHICLE, VEH_Train);
@@ -1418,8 +1416,7 @@ int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
first->prev_shared = NULL;
first->next_shared = NULL;
/* If we deleted a window then open a new one for the 'new' train */
if (IsLocalPlayer() && w != NULL) ShowTrainViewWindow(new_f);
if (IsLocalPlayer()) ShowTrainViewWindow(new_f);
}
}
@@ -1472,15 +1469,6 @@ int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (rear != NULL) {
cost -= rear->value;
/* If this is a multiheaded vehicle with nothing
* between the parts, tmp will be pointing to the
* rear part, which is unlinked from the train and
* deleted here. However, because tmp has already
* been set it needs to be updated now so that the
* loop never sees the rear part. */
if (tmp == rear) tmp = GetNextVehicle(tmp);
if (flags & DC_EXEC) {
first = UnlinkWagon(rear, first);
DeleteDepotHighlightOfVehicle(rear);
@@ -2748,28 +2736,26 @@ static void TrainEnterStation(Vehicle *v, StationID station)
static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
{
byte old_z = v->z_pos;
v->z_pos = GetSlopeZ(v->x_pos, v->y_pos);
byte new_z, old_z;
// need this hint so it returns the right z coordinate on bridges.
_get_z_hint = v->z_pos;
new_z = GetSlopeZ(v->x_pos, v->y_pos);
_get_z_hint = 0;
old_z = v->z_pos;
v->z_pos = new_z;
if (new_tile) {
CLRBIT(v->u.rail.flags, VRF_GOINGUP);
CLRBIT(v->u.rail.flags, VRF_GOINGDOWN);
if (v->u.rail.track == TRACK_BIT_X || v->u.rail.track == TRACK_BIT_Y) {
/* Any track that isn't TRACK_BIT_X or TRACK_BIT_Y cannot be sloped.
* To check whether the current tile is sloped, and in which
* direction it is sloped, we get the 'z' at the center of
* the tile (middle_z) and the edge of the tile (old_z),
* which we then can compare. */
static const int HALF_TILE_SIZE = TILE_SIZE / 2;
static const int INV_TILE_SIZE_MASK = ~(TILE_SIZE - 1);
if (new_z != old_z) {
TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
byte middle_z = GetSlopeZ((v->x_pos & INV_TILE_SIZE_MASK) | HALF_TILE_SIZE, (v->y_pos & INV_TILE_SIZE_MASK) | HALF_TILE_SIZE);
/* For some reason tunnel tiles are always given as sloped :(
* But they are not sloped... */
if (middle_z != v->z_pos && !IsTunnelTile(TileVirtXY(v->x_pos, v->y_pos))) {
SETBIT(v->u.rail.flags, (middle_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
// XXX workaround, whole UP/DOWN detection needs overhaul
if (!IsTunnelTile(tile)) {
SETBIT(v->u.rail.flags, (new_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
}
}
}
@@ -2917,6 +2903,28 @@ static void TrainMovedChangeSignals(TileIndex tile, DiagDirection dir)
}
typedef struct TrainCollideChecker {
const Vehicle *v;
const Vehicle *v_skip;
} TrainCollideChecker;
static void *FindTrainCollideEnum(Vehicle *v, void *data)
{
const TrainCollideChecker* tcc = data;
if (v != tcc->v &&
v != tcc->v_skip &&
v->type == VEH_Train &&
v->u.rail.track != 0x80 &&
myabs(v->z_pos - tcc->v->z_pos) <= 6 &&
myabs(v->x_pos - tcc->v->x_pos) < 6 &&
myabs(v->y_pos - tcc->v->y_pos) < 6) {
return v;
} else {
return NULL;
}
}
static void SetVehicleCrashed(Vehicle *v)
{
Vehicle *u;
@@ -2942,47 +2950,6 @@ static uint CountPassengersInTrain(const Vehicle* v)
return num;
}
typedef struct TrainCollideChecker {
Vehicle *v;
const Vehicle *v_skip;
uint num;
} TrainCollideChecker;
static void *FindTrainCollideEnum(Vehicle *v, void *data)
{
TrainCollideChecker* tcc = (TrainCollideChecker*)data;
if (v != tcc->v &&
v != tcc->v_skip &&
v->type == VEH_Train &&
v->u.rail.track != 0x80 &&
myabs(v->z_pos - tcc->v->z_pos) < 6 &&
myabs(v->x_pos - tcc->v->x_pos) < 6 &&
myabs(v->y_pos - tcc->v->y_pos) < 6 ) {
Vehicle *coll = GetFirstVehicleInChain(v);
/* it can't collide with its own wagons */
if (tcc->v == coll ||
(tcc->v->u.rail.track == 0x40 && (tcc->v->direction & 2) != (v->direction & 2)))
return NULL;
/* two drivers + passengers killed in train tcc->v (if it was not crashed already) */
if (!(tcc->v->vehstatus & VS_CRASHED)) {
tcc->num += 2 + CountPassengersInTrain(tcc->v);
SetVehicleCrashed(tcc->v);
}
if (!(coll->vehstatus & VS_CRASHED)) {
/* two drivers + passengers killed in train coll (if it was not crashed already) */
tcc->num += 2 + CountPassengersInTrain(coll);
SetVehicleCrashed(coll);
}
}
return NULL;
}
/*
* Checks whether the specified train has a collision with another vehicle. If
* so, destroys this vehicle, and the other vehicle if its subtype has TS_Front.
@@ -2992,6 +2959,9 @@ static void *FindTrainCollideEnum(Vehicle *v, void *data)
static void CheckTrainCollision(Vehicle *v)
{
TrainCollideChecker tcc;
Vehicle *coll;
Vehicle *realcoll;
uint num;
/* can't collide in depot */
if (v->u.rail.track == 0x80) return;
@@ -3000,15 +2970,28 @@ static void CheckTrainCollision(Vehicle *v)
tcc.v = v;
tcc.v_skip = v->next;
tcc.num = 0;
/* find colliding vehicles */
VehicleFromPos(v->tile, &tcc, FindTrainCollideEnum);
/* find colliding vehicle */
realcoll = VehicleFromPos(TileVirtXY(v->x_pos, v->y_pos), &tcc, FindTrainCollideEnum);
if (realcoll == NULL) return;
/* any dead -> no crash */
if (tcc.num == 0) return;
coll = GetFirstVehicleInChain(realcoll);
SetDParam(0, tcc.num);
/* it can't collide with its own wagons */
if (v == coll ||
(v->u.rail.track & 0x40 && (v->direction & 2) != (realcoll->direction & 2)))
return;
//two drivers + passangers killed in train v
num = 2 + CountPassengersInTrain(v);
if (!(coll->vehstatus & VS_CRASHED))
//two drivers + passangers killed in train coll (if it was not crashed already)
num += 2 + CountPassengersInTrain(coll);
SetVehicleCrashed(v);
if (IsFrontEngine(coll)) SetVehicleCrashed(coll);
SetDParam(0, num);
AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0),
v->index,
@@ -3677,9 +3660,6 @@ void OnNewDay_Train(Vehicle *v)
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
InvalidateWindowClasses(WC_TRAINS_LIST);
}
} else if (IsTrainEngine(v)) {
/* Also age engines that aren't front engines */
AgeVehicle(v);
}
}

Some files were not shown because too many files have changed in this diff Show More