mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-21 01:59:44 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d0b24d7b4d |
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "water_map.h"
|
||||
#include "tgp.h"
|
||||
#include "genworld.h"
|
||||
#include "heightmap.h"
|
||||
|
||||
extern const TileTypeProcs
|
||||
_tile_type_clear_procs,
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
########
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -744,8 +744,8 @@ STR_0298_LOAD_SCENARIO :{WHITE}시나
|
||||
STR_0299_SAVE_SCENARIO :{WHITE}시나리오 저장하기
|
||||
STR_029A_PLAY_SCENARIO :{BLACK}시나리오 플레이
|
||||
STR_PLAY_HEIGHTMAP :{BLACK}DEM지형 플레이
|
||||
STR_PLAY_HEIGHTMAP_HINT :{BLACK}DEM지형을 풍경으로 하여 게임을 시작합
|
||||
STR_029B_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}이 시나리오를 종료하시겠습니까?
|
||||
STR_PLAY_HEIGHTMAP_HINT :{BLACK}DEM지형을 풍경으로 하여 게임을 시작합니다.
|
||||
STR_029C_QUIT_EDITOR :{WHITE}에디터 종료
|
||||
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...1200명 이상의 도시에만 건설할 수 있습니다!
|
||||
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}시작년도를 1년 앞당깁니다.
|
||||
|
||||
@@ -590,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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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}
|
||||
|
||||
+350
-352
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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}Неможливо проїхати сигнал - небезпечно...
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
########
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -281,7 +281,7 @@ static byte MakeFinnishTownName(char *buf, uint32 seed, const char *last)
|
||||
if (SeedChance(0, 15, seed) >= 10) {
|
||||
strecat(buf, name_finnish_real[SeedChance(2, lengthof(name_finnish_real), seed)], last);
|
||||
} else if (SeedChance(0, 15, seed) >= 5) {
|
||||
// A two-part name by combining one of name_finnish_1 + "la"/"lä"
|
||||
// A two-part name by combining one of name_finnish_1 + "la"/"lä"
|
||||
// The reason for not having the contents of name_finnish_{1,2} in the same table is
|
||||
// that the ones in name_finnish_2 are not good for this purpose.
|
||||
uint sel = SeedChance( 0, lengthof(name_finnish_1), seed);
|
||||
@@ -295,7 +295,7 @@ static byte MakeFinnishTownName(char *buf, uint32 seed, const char *last)
|
||||
{
|
||||
strecat(buf, "la", last);
|
||||
} else {
|
||||
strecat(buf, "lä", last);
|
||||
strecat(buf, "lä", last);
|
||||
}
|
||||
} else {
|
||||
// A two-part name by combining one of name_finnish_{1,2} + name_finnish_3.
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
extern const char _openttd_revision[];
|
||||
#elif defined(WITH_REV_HACK)
|
||||
#define WITH_REV
|
||||
const char _openttd_revision[] = "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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
Reference in New Issue
Block a user