1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-13 01:29:10 +00:00

Compare commits

...

49 Commits

Author SHA1 Message Date
bjarni
32a2a6b523 (svn r4046) missed a file in last commit 2006-03-22 22:43:03 +00:00
bjarni
316e189bd7 (svn r4045) -Fix: [OSX] fixed header issue 2006-03-22 22:42:14 +00:00
Darkvater
c88ceb9a3e (svn r4043) - Set release version on the executable for VS2003,VS6 and makefile. 2006-03-22 22:30:38 +00:00
Darkvater
d49a748b91 (svn r4042) - Release 0.4.6 2006-03-22 22:26:36 +00:00
matthijs
bb7c37b515 (svn r4041) [Debian] Change next version number to 0.4.6 instead of 0.4.5.1. 2006-03-22 22:26:16 +00:00
Darkvater
ec54b3ac24 (svn r4040) - Prepare 0.4.5 branch for release. Update readme's, bugs, installers and makefile, changelog, etc. to 0.4.6 2006-03-22 22:25:46 +00:00
bjarni
a9032183df (svn r4038) -backport (3966, 3972 and 4019) -Fix: [OSX 10.3 and newer] [ 1157244 ] Can't save game if name contains german umlauts (loading savegames with certain chars still look a bit odd) 2006-03-22 21:40:26 +00:00
bjarni
90feff4982 (svn r4037) -backported (3676): updated the install readme for OSX 2006-03-22 21:24:26 +00:00
matthijs
e434485dd8 (svn r4036) * Prepare debian release files for 0.4.5.1 release. 2006-03-22 21:18:33 +00:00
matthijs
dcc4ccf4e9 (svn r4035) - Backport from trunk (4033):
- Codechange: [Debian] Update debian packaging files to use debconf for user interaction.
2006-03-22 21:16:31 +00:00
bjarni
ef7e4abf7f (svn r4034) merged 3618:3971 for video/cocoa_v.m (major speedup for PPC fullscreen fix) 2006-03-22 21:11:05 +00:00
matthijs
5d0ed8fab8 (svn r4032) -Backport from trunk (3507):
- Fix: [Makefile] Make sure the ICON_DIR gets created before copying files there.
  - Fix: Fix small syntactic error in the manpage.
2006-03-22 21:04:13 +00:00
Darkvater
ed7df6e2bf (svn r4031) - Backport from trunk (r4030):
- [win32] Change compiler settings to use the multithreaded CRT. This prevents
  certain crashes on multi-threaded machines.
2006-03-22 20:46:07 +00:00
Darkvater
7cf9e0d8ca (svn r4029) - Backport from trunk (r4023):
Fix: [ 1453646 NPF ] Road vehicles planning through the back of depots and stations.
2006-03-22 20:33:30 +00:00
celestar
85141929a8 (svn r4018) -Backport from trunk (4001:4002):
Add length parameter to FiosMakeSavegameName() and use this function for creating the full path instead of home-brewn snprintf.
	Use the title of a savegame in the saveload dialog-editbox. This gets rid of the '.sav' appended to each game as well as properly showing UTF-8 saves when this is implemented. Also don't change the text if the save has failed.
2006-03-22 11:26:08 +00:00
celestar
f4d5c1b01b (svn r4017) -Backport from trunk (3999): Change the order of DestroyWindow and ChangeDisplay. On some machines a sizechange messagequeue is handled before sending WM_DISPLAYCHANGE resulting in an improper resolution written to the configuration file when exiting from fullscreen. (Frostregen) 2006-03-22 11:24:27 +00:00
celestar
31d6286cb4 (svn r4016) -Backport from trunk (3998): When removing rail track from a tile where only X and Y pieces exist, explicitly update signals in both directions. 2006-03-22 11:23:22 +00:00
celestar
ca0a0cdbfd (svn r4015) -Backport from trunk: Default the patch-setting 'pause_on_join' to true. 2006-03-22 11:17:21 +00:00
celestar
04572ed7fe (svn r4014) -Backport from trunk: Slope and height information returned for some tile types is wrong 2006-03-22 11:13:20 +00:00
celestar
ebfef9683e (svn r4013) -Fix last commit. CheckTunnelInWay works differently from IsTunnelInWay :S 2006-03-22 11:11:52 +00:00
celestar
c05d3dd558 (svn r4012) -Backport from trunk (3992, 3995): Rewrote the code to determine whether a rail-tile can be terraformed.
Fixes a bug where you could terraform a tunnel (fixed by r3228, but reverted that one)
Fixes a bug introduced by r3228 which allowed steep rail tiles resulting in ... unwanted effects such as display artifacts.
2006-03-22 10:32:07 +00:00
Darkvater
6e029fe97d (svn r3978) - Change all STRING1's back to STRING in french.txt because these {STRINGn} are only applicable to english.txt. Fixup of r3973. Sorry. Backport of r3977 from trunk 2006-03-19 09:03:25 +00:00
belugas
26ed195319 (svn r3975) Update french translation, adding STRING1 where needed, as well as other omissions.
Thanks to Darkvater for this opportunity. 
No typo this time
2006-03-19 01:52:05 +00:00
Darkvater
7170357a10 (svn r3970) - FS#56 - [Crash] Missing glyph(s) in big-font. Added several missing glyphs for the big font. Backport of r3940 from trunk 2006-03-18 16:03:55 +00:00
Darkvater
e4bbd3b41c (svn r3969) - [ 1439907 ] Increase client list window width so at least most languages fit (wikipedian). Backport of r3933 from trunk 2006-03-18 16:03:04 +00:00
Darkvater
5ed5e6beed (svn r3968) - Update german and finnish languages. Backport of r3932, r3943 from trunk 2006-03-18 16:02:19 +00:00
Darkvater
5de94db9df (svn r3967) - Fix: Properly set back the owner of a crossing/road-under bridge after removing it. For crossings we can always use .m2 because it is already 0 when not owned by a town. Backport of r3876, r3893 from trunk 2006-03-18 16:00:02 +00:00
Darkvater
6b664a3ba0 (svn r3965) - [win32] Remove mapfile generation and generate a pdb file instead. This and the corresponding executable is enough to trace the source of a crash given by crash.txt by using WinDbg for example. Mapfiles are a bit deprecated in the newer VS environments.
- [win32] Show the revision in crash.txt and enable the button to show the crash text in the crash-window 
- Backport of r3871, r3872 from trunk
2006-03-18 15:51:04 +00:00
Darkvater
beee5698f9 (svn r3964) -Fix: [autoreplace]: (FS#67) autoreplacing trains now keep their tile length instead of their pixel length. Backport of r3811 from trunk 2006-03-18 15:49:00 +00:00
Darkvater
a86ec733a0 (svn r3963) Update debian packaging files to the ones used for releasing 0.4.5 (see os/debian/changelog for details).
Fix a small debconf issue which was in the 0.4.5 release. Backport of r3801 from trunk
2006-03-18 15:48:15 +00:00
Darkvater
37c1135d6b (svn r3962) -Fix: Mark the right tile as dirty. It's just a graphical glitch which happend in r1592. Backport of r3792 from trunk 2006-03-18 15:47:16 +00:00
Darkvater
923dee9bec (svn r3961) - Fix crash when resizing news history window. Backport of r3778 from trunk 2006-03-18 15:46:09 +00:00
Darkvater
1856976d8e (svn r3960) -Fix: Correctly implement minimum search, so road vehicles head twoards the closest station, not the last one in the list. Backport of r3751 from trunk 2006-03-18 15:45:23 +00:00
Darkvater
818a5a596f (svn r3959) -Fix: [FS#61] The tooltips for raising and lowering land buttons in the scenario editor are interchanged (Reported and fixed by lc). Backport of r3749 from trunk 2006-03-18 15:32:38 +00:00
Darkvater
2be4b388ec (svn r3958) Change HASBIT() to return 0/1 instead of 0/value of tested bit. Backport of r3747 from trunk 2006-03-18 15:31:34 +00:00
Darkvater
300aba48cc (svn r3957) -Fix: Correctly restore the roadside after roadworks are finished. Backport of r3680 from trunk 2006-03-18 15:29:24 +00:00
Darkvater
f470a87dea (svn r3956) - Fix: [Multistop] Check the status of the destination road stop instead of a station's first road stop. This only has effect with road vehicle queuing disabled. Backport of r3663, r3681 from trunk 2006-03-18 15:28:26 +00:00
Darkvater
4b938510a5 (svn r3955) - Fix: validate the setting of max_companies/spectators through the console. Backport of r3591, r3593 from trunk 2006-03-18 15:25:25 +00:00
Darkvater
7ddae93da8 (svn r3954) - Explicitly update v->first in TrainConsistChanged() if necessary, as this is far faster than brute forcing it later.
- When loading a game, call TrainConsistChanged() for each train head separately before updating images, as v->first is used extensively in GetTrainImage() for custom graphics. This gives a significant speed improvement on loading a game. 
- Rewrite GetFreeUnitNumber() so that only one loop of vehicles is required. Instead a list of used/unused numbers is created and the first unused number is chosen. This significantly improves performance in large games. 
- Improve game-load times. Backport of r3570-3572 from trunk
2006-03-18 15:22:27 +00:00
Darkvater
f75365fcf4 (svn r3953) - Grr, compile before you commit. Wrong merge of 3529/3553 in r3948 2006-03-18 15:19:30 +00:00
Darkvater
e89a98d296 (svn r3952) - Fix: On loading a game, GetPlayerRailtypes() didn't account for the fact that vehicles are introduced a year after their introduction date. This will also relieve possible (rare) network desyncs. Backport of r3565 from trunk 2006-03-18 15:17:57 +00:00
Darkvater
8157969b2b (svn r3951) - Restore plural forms of cargo types for several languages. Backport of r3560 from trunk. 2006-03-18 15:16:12 +00:00
Darkvater
b3ccef7045 (svn r3950) - Add directives to allow Visual Studio 2005 compilation. Backport of r3551 from trunk. 2006-03-18 15:14:34 +00:00
Darkvater
af0fb58264 (svn r3949) - Revert r3467, was total nonesense, my fault. Backport of r3532 from trunk 2006-03-18 15:13:35 +00:00
Darkvater
5f2e2ef32a (svn r3948) - Fix: [ 1415782 ] crash in string code with openbsd/zaurus; alignment issues (thanks Tron for the help). Backport of r3529, r3553 from trunk 2006-03-18 15:12:24 +00:00
Darkvater
8353c1260a (svn r3526) - Codechange: Add additional linker information to release builds to help figure out crashes more easily 2006-02-03 17:24:37 +00:00
Darkvater
8de919ce50 (svn r3519) - [0.4.5-Branch] backport changes from abused tags/ (nothing important) 2006-02-01 22:02:47 +00:00
Darkvater
f9cacc9f5c (svn r3518) - Add proper revision numbers for bugfixing branch 2006-02-01 21:53:12 +00:00
Darkvater
af3ac4954a (svn r3517) - Branch: added branch for stable 0.4.5 2006-02-01 21:47:10 +00:00
89 changed files with 930 additions and 615 deletions

View File

@@ -267,11 +267,7 @@ ENDIAN_CHECK=endian_check$(EXE)
STRGEN=strgen/strgen$(EXE)
OSXAPP="OpenTTD.app"
ifdef RELEASE
REV:=$(RELEASE)
else
REV := $(shell if test -d .svn; then svnversion . | awk '{ print "r"$$0 }'; fi)
endif
REV := 0.4.6
# MorphOS needs builddate
BUILDDATE=`date +%d.%m.%y`
@@ -479,6 +475,12 @@ LIBS += $(shell $(LIBPNG-CONFIG) --L_opts $(PNGCONFIG_FLAGS))
endif
endif
ifdef OSX
ifndef JAGUAR
LIBS += -liconv
endif
endif
# enables/disables assert()
ifdef DISABLE_ASSERTS
CFLAGS += -DNDEBUG
@@ -915,6 +917,7 @@ endif
install -d $(DATA_DIR_INSTALL)/lang \
$(DATA_DIR_INSTALL)/data \
$(DATA_DIR_INSTALL)/gm \
$(ICON_DIR_INSTALL) \
$(BINARY_DIR_INSTALL)
ifndef USE_HOMEDIR
mkdir -p $(PERSONAL_DIR)/scenario

View File

@@ -1,3 +1,38 @@
t 0.4.6 (2006-03-22)
------------------------------------------------------------------------
- Codechange: [win32] Show the revision in crash.txt and enable the button to show the crash text in the crash-window (r3965)
- Codechange: Add additional linker information to release builds to help figure out crashes more easily (r3526)
- Fix: [OSX 10.3 and newer] [ 1157244 ] Can't save game if name contains german umlauts (loading savegames with certain chars still look odd) (r4038)
- Fix: [OSX] major speedup for PPC fullscreen (r4034)
- Fix: [Makefile] Make sure the ICON_DIR gets created before copying files there. (r4032)
- Fix: [win32] Change compiler settings to use the multithreaded CRT. This prevents certain crashes on multi-threaded machines. (r4031)
- Fix: [ 1453646 NPF ] Road vehicles planning through the back of depots and stations. (r4029)
- Fix: Use the title of a savegame in the saveload dialog-editbox. (r4018)
- Fix: Improper resolution written to the configuration file when exiting from fullscreen. (r4017)
- Fix: When removing rail track from a tile where only X and Y pieces exist, explicitly update signals in both directions. (r4016)
- Fix: Default the patch-setting 'pause_on_join' to true. (r4015)
- Fix: Slope and height information returned for some tile types is wrong (r4014)
- Fix: Fixes a bug introduced by r3228 which allowed steep rail tiles resulting in ... unwanted effects such as display artifacts. (r4012)
- Fix: Update french translation (r3978)
- Fix: FS#56 - [Crash] Missing glyph(s) in big-font. Added several missing glyphs for the big font. (r3970)
- Fix: [ 1439907 ] Increase client list window width so at least most languages fit. (r3969)
- Fix: Update german and finnish languages. (r3968)
- Fix: Properly set back the owner of a crossing/road-under bridge after removing it. (r3967)
- Fix: [autoreplace]: (FS#67) autoreplacing trains now keep their tile length instead of their pixel length. (r3964)
- Fix: Mark the right tile as dirty. It's just a graphical glitch which happend in r1592. (r3962)
- Fix: Fix crash when resizing news history window. (r3961)
- Fix: Correctly implement minimum search, so road vehicles head twoards the closest station, not the last one in the list. (r3960)
- Fix: [FS#61] The tooltips for raising and lowering land buttons in the scenario editor are interchanged (r3959)
- Fix: Correctly restore the roadside after roadworks are finished. (r3957)
- Fix: [Multistop] Check the status of the destination road stop instead of a station's first road stop. This only has effect with road vehicle queuing disabled. (r3956)
- Fix: validate the setting of max_companies/spectators through the console. (r3955)
- Fix: Improve game-load times. (r3954)
- Fix: On loading a game, GetPlayerRailtypes() didn't account for the fact that vehicles are introduced a year after their introduction date. This will also relieve possible (rare) network desyncs. (r3952)
- Fix: Restore plural forms of cargo types for several languages. (r3951)
- Fix: [win32] Add directives to allow Visual Studio 2005 compilation. (r3950)
- Fix: [ 1415782 ] crash in string code with openbsd/zaurus; alignment issues (r3948)
0.4.5 (2006-01-31)
------------------------------------------------------------------------

View File

@@ -86,38 +86,13 @@ static void TerraformAddDirtyTileAround(TerraformerState *ts, TileIndex tile)
static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
{
int r;
bool skip_clear = false;
assert(tile < MapSize());
if ((r=TerraformAllowTileProcess(ts, tile)) <= 0)
return r;
if (IsTileType(tile, MP_RAILWAY)) {
static const byte _railway_modes[4] = {8, 0x10, 4, 0x20};
static const byte _railway_dangslopes[4] = {0xd, 0xe, 7, 0xb};
static const byte _railway_dangslopes2[4] = {0x2, 0x1, 0x8, 0x4};
// Nothing could be built at the steep slope - this avoids a bug
// when you have a single diagonal track in one corner on a
// basement and then you raise/lower the other corner.
int tileh = GetTileSlope(tile, NULL) & 0xF;
if (tileh == _railway_dangslopes[mode] ||
tileh == _railway_dangslopes2[mode]) {
_terraform_err_tile = tile;
_error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
return -1;
}
// If we have a single diagonal track there, the other side of
// tile can be terraformed.
if ((_m[tile].m5 & ~0x40) == _railway_modes[mode]) {
if (ts->direction == 1) return 0;
skip_clear = true;
}
}
if (!skip_clear) {
if (!IsTileType(tile, MP_RAILWAY)) {
int32 ret = DoCommandByTile(tile, 0,0, ts->flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) {
@@ -259,26 +234,35 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return CMD_ERROR;
}
if (direction == -1) {
/* Check if tunnel would take damage */
{ /* Check if tunnel or track would take damage */
int count;
TileIndex *ti = ts.tile_table;
for (count = ts.tile_table_count; count != 0; count--, ti++) {
uint z, t;
uint a, b, c, d, r, min;
TileIndex tile = *ti;
z = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 0));
t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 0));
if (t <= z) z = t;
t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 1));
if (t <= z) z = t;
t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1));
if (t <= z) z = t;
_terraform_err_tile = tile;
if (!CheckTunnelInWay(tile, z * 8)) {
return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE);
a = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 0));
b = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 0));
c = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1));
d = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 1));
r = GetTileh(a, b, c, d, &min);
if (IsTileType(tile, MP_RAILWAY)) {
if (IsSteepTileh(r)) return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
if (IsPlainRailTile(tile)) {
extern const TrackBits _valid_tileh_slopes[2][15];
if (GetTrackBits(tile) & ~_valid_tileh_slopes[0][r]) return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
} else return_cmd_error(STR_5800_OBJECT_IN_THE_WAY);
}
if (direction == -1 && !CheckTunnelInWay(tile, min)) return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE);
_terraform_err_tile = 0;
}
}

View File

@@ -553,10 +553,29 @@ DEF_CONSOLE_CMD(ConServerInfo)
DEF_CONSOLE_HOOK(ConHookValidateMaxClientsCount) {
/* XXX - hardcoded, string limiation -- TrueLight
* XXX - also see network.c:NetworkStartup ~1343 */
* XXX - also see network.c:NetworkStartup ~1356 */
if (_network_game_info.clients_max > 10) {
_network_game_info.clients_max = 10;
IConsoleError("Maximum clients is 10, truncating.");
IConsoleError("Maximum clients out of bounds, truncating to limit.");
}
return true;
}
DEF_CONSOLE_HOOK(ConHookValidateMaxCompaniesCount) {
if (_network_game_info.companies_max > MAX_PLAYERS) {
_network_game_info.companies_max = MAX_PLAYERS;
IConsoleError("Maximum companies out of bounds, truncating to limit.");
}
return true;
}
DEF_CONSOLE_HOOK(ConHookValidateMaxSpectatorsCount) {
/* XXX @see ConHookValidateMaxClientsCount */
if (_network_game_info.spectators_max > 10) {
_network_game_info.spectators_max = 10;
IConsoleError("Maximum spectators out of bounds, truncating to limit.");
}
return true;
@@ -1444,8 +1463,10 @@ void IConsoleStdLibRegister(void)
IConsoleVarHookAdd("max_clients", ICONSOLE_HOOK_POST_ACTION, ConHookValidateMaxClientsCount);
IConsoleVarRegister("max_companies", &_network_game_info.companies_max, ICONSOLE_VAR_BYTE, "Control the maximum amount of active companies during runtime. Default value: 8");
IConsoleVarHookAdd("max_companies", ICONSOLE_HOOK_ACCESS, ConHookServerOnly);
IConsoleVarHookAdd("max_companies", ICONSOLE_HOOK_POST_ACTION, ConHookValidateMaxCompaniesCount);
IConsoleVarRegister("max_spectators", &_network_game_info.spectators_max, ICONSOLE_VAR_BYTE, "Control the maximum amount of active spectators during runtime. Default value: 9");
IConsoleVarHookAdd("max_spectators", ICONSOLE_HOOK_ACCESS, ConHookServerOnly);
IConsoleVarHookAdd("max_spectators", ICONSOLE_HOOK_POST_ACTION, ConHookValidateMaxSpectatorsCount);
IConsoleVarRegister("max_join_time", &_network_max_join_time, ICONSOLE_VAR_UINT16, "Set the maximum amount of time (ticks) a client is allowed to join. Default value: 500");

Binary file not shown.

View File

@@ -0,0 +1,23 @@
To install OpenTTD, you should drag the game to any location you want and in that folder, you should create a folder called "data". It should contain:
sample.cat
trg1r.grf
trgcr.grf
trghr.grf
trgir.grf
trgtr.grf
(Alternatively you can use the TTD GRF files from the DOS version: TRG1.GRF, TRGC.GRF, TRGH.GRF, TRGI.GRF, TRGT.GRF. A few minor graphical glitches with the DOS graphics remain. E.g. the autorail button in the rail toolbar doesn't look as nice as with the Windows graphics.)
You should also use the data folder to add any custom grf files if you like
if you want music, you can add a GM folder and add all .gm files from TTD inside it
If you want to use the scenarios, you can copy the scenario folder as well. If you already have one, just copy the content so you don't overwrite old ones that have been removed.
In the end, you should have a folder containing:
OpenTTD (the actual game)
data (containing the grf files)
GM (optional for music)
scenario (optional pregenerated maps)
The game adds some items by itself when it runs, like a save folder and a setting file

View File

@@ -1,24 +0,0 @@
It's gone
The main goal with the package system was to make it as simple as possible to update. The problem was that some files inside the data folder should be updated and not others. Now the data files have been moved inside OpenTTD itself and to make it even easier, the same goes for the lang dir. There will no longer be an issue where people have different versions of grf files, language files and OpenTTD.
To install simply copy OpenTTD into the folder you want
If it is your current folder with outdated grf files, you should remove
canalsw.grf
openttd.grf
opntitle.dat
signalsw.grf
trkfoundw.grf
THE TTD GRF FILES ARE STILL NEEDED!
They need to be inside a folder called "data" in the same folder as OpenTTD. Create it if you have none. It should contain:
sample.cat
trg1r.grf
trgcr.grf
trghr.grf
trgir.grf
trgtr.grf
(Alternatively you can use the TTD GRF files from the DOS version: TRG1.GRF, TRGC.GRF, TRGH.GRF, TRGI.GRF, TRGT.GRF. A few minor graphical glitches with the DOS graphics remain. E.g. the autorail button in the rail toolbar doesn't look as nice as with the Windows graphics.)
You should also use the data folder to add any custom grf files if you like

View File

@@ -1,9 +1,9 @@
.\" Hey, EMACS: -*- nroff -*-
.\" Please adjust this date whenever revising the manpage.
.Dd July 27, 2005
.Dd March 22, 2006
.Dt OPENTTD 6
.Sh NAME
.Nm openttd
.Nm openttd
.Nd An open source clone of the Microprose game "Transport Tycoon Deluxe"
.Sh SYNOPSIS
.Nm
@@ -59,6 +59,7 @@ Set the starting date
.It Fl v Ar driver
Set the video driver, see
.Fl h
.El
.Sh SEE ALSO
http://wiki.openttd.org/
.Sh HISTORY

View File

@@ -16,12 +16,12 @@ static void DrawTile_Dummy(TileInfo *ti)
static uint GetSlopeZ_Dummy(const TileInfo* ti)
{
return GetPartialZ(ti->x & 0xF, ti->y & 0xF, ti->tileh) + ti->z;
return 0;
}
static uint GetSlopeTileh_Dummy(const TileInfo* ti)
{
return ti->tileh;
return 0;
}
static int32 ClearTile_Dummy(TileIndex tile, byte flags)

View File

@@ -1010,7 +1010,7 @@ void EnginesMonthlyLoop(void)
CalcEngineReliability(e);
}
if (!(e->flags & ENGINE_AVAILABLE) && (uint16)(_date - min(_date, 365)) >= e->intro_date) {
if (!(e->flags & ENGINE_AVAILABLE) && _date >= (e->intro_date + 365)) {
// Introduce it to all players
NewVehicleAvailable(e);
} else if (!(e->flags & (ENGINE_AVAILABLE|ENGINE_INTRODUCING)) && _date >= e->intro_date) {

20
gfx.c
View File

@@ -698,7 +698,7 @@ static void GfxBlitTileZoomIn(BlitterParams *bp)
const byte* ctab;
if (bp->mode & 1) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
do {
do {
@@ -741,7 +741,7 @@ static void GfxBlitTileZoomIn(BlitterParams *bp)
bp->dst += bp->pitch;
} while (--bp->height != 0);
} else if (bp->mode & 2) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
do {
do {
done = src_o[0];
@@ -775,7 +775,7 @@ static void GfxBlitTileZoomIn(BlitterParams *bp)
bp->dst += bp->pitch;
} while (--bp->height != 0);
} else {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
do {
do {
done = src_o[0];
@@ -900,7 +900,7 @@ static void GfxBlitTileZoomMedium(BlitterParams *bp)
const byte* ctab;
if (bp->mode & 1) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
do {
do {
done = src_o[0];
@@ -949,7 +949,7 @@ static void GfxBlitTileZoomMedium(BlitterParams *bp)
} while (!(done & 0x80));
} while (--bp->height != 0);
} else if (bp->mode & 2) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
do {
do {
done = src_o[0];
@@ -994,7 +994,7 @@ static void GfxBlitTileZoomMedium(BlitterParams *bp)
} while (!(done & 0x80));
} while (--bp->height != 0);
} else {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
do {
do {
done = src_o[0];
@@ -1105,7 +1105,7 @@ static void GfxBlitTileZoomOut(BlitterParams *bp)
const byte* ctab;
if (bp->mode & 1) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
for(;;) {
do {
done = src_o[0];
@@ -1174,7 +1174,7 @@ static void GfxBlitTileZoomOut(BlitterParams *bp)
if (--bp->height == 0) return;
}
} else if (bp->mode & 2) {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
for(;;) {
do {
done = src_o[0];
@@ -1239,7 +1239,7 @@ static void GfxBlitTileZoomOut(BlitterParams *bp)
if (--bp->height == 0) return;
}
} else {
src_o += READ_LE_UINT16(src_o + bp->start_y * 2);
src_o += ReadLE16Aligned(src_o + bp->start_y * 2);
for(;;) {
do {
done = src_o[0];
@@ -1620,7 +1620,7 @@ void LoadStringWidthTable(void)
}
for (i = 450; i != 674; i++) {
*b++ = (i < 545 || i > 577) && i != 585 && i != 587 && i != 588 && (i < 590 || i > 597) && (i < 599 || i > 601) && i != 603 && i != 633 && i != 665 ? GetSprite(i)->width + 1 : 0;
*b++ = (i < 545 || i > 577) && i != 588 && i != 590 && i != 591 && i != 593 && (i < 599 || i > 601) && i != 603 ? GetSprite(i)->width + 1 : 0;
}
}

View File

@@ -314,6 +314,12 @@ static const SpriteID _openttd_grf_indexes[] = {
93, 96, // { | } ~ medium
541, 544, // { | } ~ large
SPR_HOUSE_ICON, SPR_HOUSE_ICON,
585, 585, // <20> large
587, 587, // <20> large
592, 592, // <20> large
594, 597, // <20> <20> <20> <20> large
633, 633, // <20> large
665, 665, // <20> large
END
};

2
hal.h
View File

@@ -88,7 +88,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot);
// Delete a name
bool FiosDelete(const char *name);
// Make a filename from a name
void FiosMakeSavegameName(char *buf, const char *name);
void FiosMakeSavegameName(char *buf, const char *name, size_t size);
int CDECL compare_FiosItems(const void *a, const void *b);

View File

@@ -398,7 +398,7 @@ static void DrawTile_Industry(TileInfo *ti)
static uint GetSlopeZ_Industry(const TileInfo* ti)
{
return GetPartialZ(ti->x & 0xF, ti->y & 0xF, ti->tileh) + ti->z;
return ti->z + (ti->tileh == 0 ? 0 : 8);
}
static uint GetSlopeTileh_Industry(const TileInfo* ti)

View File

@@ -12,25 +12,45 @@ 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://sourceforge.net/tracker/?group_id=103924&atid=636365
or http://bugs.openttd.org.
If the the bug report is closed, it has been fixed, which then can be verified
If the bug report is closed, it has been fixed, which then can be verified
in the latest SVN version.
Bugs for 0.4.5
Bugs for 0.4.6
------------------------------------------------------------------------
URL: http://bugs.openttd.org
-20 Saving files when run from gdb
-45 NORETURN wrongly declared for gcc
-46 Some if, for, switch and while have no space before (
-47 rating calculation and cargo loading priority
-9 [MorphOS] write to NULL when going to device root in filerequester
-8 [MorphOS] game crashes if no TCP/IP stack is loaded
-80 Medium Crash when switching from windowed to fullscreen
-78 Low Save vs. Autosave
-77 Low cocoa video driver got an artifact in fullscreen
-74 Low message settings
-73 vehicle selection bug
-71 Invalid last_vehicle for station (crash)
-68 wagon replacements
-66 wagon re-fitting
-65 short wagons bug
-63 Initial Volume Level not restored
-57 (Ship) Pathfinder problem
-55 Assertion on TrainController (train_cmd.c:2840)
-52 desync when server saves game (on slow hardware)
-51 Windows doesn't support CUSTOM_LANG_DIR
-50 Trains chosing an alternative path when encountering a 1-way presignal instead of waiting
-47 Low rating calculation and cargo loading priority
-45 Low NORETURN wrongly declared for gcc
-20 Low Saving files when run from gdb 2005-12-06 Unconfirmed
- 9 Low [MorphOS] write to NULL when going to device root in filerequester 2005-11-28 Assigned Christian Rosentreter
------------------------------------------------------------------------
URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-1454591 Street junctions not able to converted
-1453676 crash in windowed mode when moving mouse back to openttd
-1436419 Vehicles profits gone negitive.......bug
-1438411 Game crash with NPF (r3663)
-1434000 Error in Transfer-Function
-1433315 non-existant crash reporting
-1432871 Wrong signalstate when track over track
-1427531 Newspapers problem
-1417453 Makefile and Variables issue
-1415782 crash in string code with openbsd/zaurus
-1397638 Economics bug?
-1395628 Trackpad panning/scrolling broken
-1394799 Dual headed engines disagreement
@@ -40,11 +60,8 @@ URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-1389999 Child windows not sticking
-1389986 Shares problem (nightly 3330)
-1380497 problems with competitors during multiplayer
-1372772 Train gets lost between two stations
-1366446 different names for patches
-1362784 Incorrect vehicule profit calcul with inflation on
-1299162 Music volume too low
-1288024 Strange string on OTTD initial screen
-1250094 Towns Shrink when center tile is built on
-1244842 Multiplayer interface bug (0.4.0.1)
-1212267 station visited twice when servicing
@@ -56,18 +73,17 @@ URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-1174829 Waypoint / Orders Bug
-1168820 Some mouse and keyboard events are lost
-1167810 Cargo payment after deleting stations (st->xy = 0)
-1157244 Can't save game if name contains german umlauts
-1116638 "More, but smaller changes" deficiency
-1106356 re-offered prototypes
-1085486 Subsidies: Only count when station is in right suburb
Minor Bugs for 0.4.5
Minor Bugs for 0.4.5.1
------------------------------------------------------------------------
URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-1424115 Reversed arrow sign in list view column headers
-1412033 autoreplace not possible on monorail/maglev trains
-1412031 fast forward scrolling is also fast forward :)
-1395489 Nightly 3358 Linux Driver warnings
-1394316 Multistop traffic jam
-1394231 Autorenew glitch on helicopters
-1387424 overtake insolvent company is to cheap
@@ -75,7 +91,6 @@ URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-1372891 Performance loss with NTP & NPF
-1342383 Last built rail type not cleared when starting new game
-1296259 Autosave override for multiplayer games
-1254226 giant screenshot crashes multiplayer
-1242753 Town population minus 10
-1236320 Bug in main menu allows moving screen
-1201284 permanent hilight in a depot
@@ -85,7 +100,6 @@ URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-1183253 Incorrect Load vs Loading Sprites
-1183251 Hangar sprite does not update when refit.
-1160732 little bug with transparency
-1153937 Game wont run from a start menu shortcut
-1117731 Editor-StartingDate
-1114237 Wrong autoreplace hint
-1108046 game freezes
@@ -102,4 +116,4 @@ URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-0987883 Aircraft landing/taking off
-0987880 company league table updating
-0985924 aircraft taxi speed
-0941694 Clipping problems stations/vehicles on slopes
-0941694 Clipping problems stations/vehicles on slopes

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Baterias
STR_004C_PLASTIC :Pl<50>stico
STR_004D_FIZZY_DRINK :Bebidas Gasosas
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passageiro
STR_QUANTITY_COAL :{COMMA} tonelada de carv<72>o
STR_QUANTITY_MAIL :{COMMA} saco de correspond<6E>ncias
STR_QUANTITY_PASSENGERS :{COMMA} passageiro{P "" s}
STR_QUANTITY_COAL :{COMMA} tonelada{P "" s} de carv<72>o
STR_QUANTITY_MAIL :{COMMA} saco{P "" s} de correspond<6E>ncias
STR_QUANTITY_OIL :{VOLUME} de petr<74>leo
STR_QUANTITY_LIVESTOCK :{COMMA} insumo de gado
STR_QUANTITY_LIVESTOCK :{COMMA} insumo{P "" s} de gado
STR_QUANTITY_GOODS :{COMMA} caixas de bens
STR_QUANTITY_GRAIN :{COMMA} tonelada de cereais
STR_QUANTITY_WOOD :{COMMA} tonelada de madeira
STR_QUANTITY_IRON_ORE :{COMMA} tonelada de min<69>rio de ferro
STR_QUANTITY_STEEL :{COMMA} tonelada de a<>o
STR_QUANTITY_VALUABLES :{COMMA} saco de valores
STR_QUANTITY_COPPER_ORE :{COMMA} tonelada de min<69>rio de cobre
STR_QUANTITY_MAIZE :{COMMA} tonelada de milho
STR_QUANTITY_FRUIT :{COMMA} tonelada de fruta
STR_QUANTITY_DIAMONDS :{COMMA} saco de diamantes
STR_QUANTITY_FOOD :{COMMA} tonelada de comida
STR_QUANTITY_PAPER :{COMMA} tonelada de papel
STR_QUANTITY_GOLD :{COMMA} saco de ouro
STR_QUANTITY_GRAIN :{COMMA} tonelada{P "" s} de cereais
STR_QUANTITY_WOOD :{COMMA} tonelada{P "" s} de madeira
STR_QUANTITY_IRON_ORE :{COMMA} tonelada{P "" s} de min<69>rio de ferro
STR_QUANTITY_STEEL :{COMMA} tonelada{P "" s} de a<>o
STR_QUANTITY_VALUABLES :{COMMA} saco{P "" s} de valores
STR_QUANTITY_COPPER_ORE :{COMMA} tonelada{P "" s} de min<69>rio de cobre
STR_QUANTITY_MAIZE :{COMMA} tonelada{P "" s} de milho
STR_QUANTITY_FRUIT :{COMMA} tonelada{P "" s} de fruta
STR_QUANTITY_DIAMONDS :{COMMA} saco{P "" s} de diamantes
STR_QUANTITY_FOOD :{COMMA} tonelada{P "" s} de comida
STR_QUANTITY_PAPER :{COMMA} tonelada{P "" s} de papel
STR_QUANTITY_GOLD :{COMMA} saco{P "" s} de ouro
STR_QUANTITY_WATER :{VOLUME} de <20>gua
STR_QUANTITY_WHEAT :{COMMA} tonelada de trigo
STR_QUANTITY_WHEAT :{COMMA} tonelada{P "" s} de trigo
STR_QUANTITY_RUBBER :{VOLUME} de borracha
STR_QUANTITY_SUGAR :{COMMA} tonelada de a<><61>car
STR_QUANTITY_TOYS :{COMMA} brinquedo
STR_QUANTITY_SWEETS :{COMMA} saco de doces
STR_QUANTITY_SUGAR :{COMMA} tonelada{P "" s} de a<><61>car
STR_QUANTITY_TOYS :{COMMA} brinquedo{P "" s}
STR_QUANTITY_SWEETS :{COMMA} saco{P "" s} de doces
STR_QUANTITY_COLA :{VOLUME} de cola
STR_QUANTITY_CANDYFLOSS :{COMMA} tonelada de algod<6F>o doce
STR_QUANTITY_BUBBLES :{COMMA} bolha
STR_QUANTITY_TOFFEE :{COMMA} tonelada de caramelo
STR_QUANTITY_BATTERIES :{COMMA} bateria
STR_QUANTITY_CANDYFLOSS :{COMMA} tonelada{P "" s} de algod<6F>o doce
STR_QUANTITY_BUBBLES :{COMMA} bolha{P "" s}
STR_QUANTITY_TOFFEE :{COMMA} tonelada{P "" s} de caramelo
STR_QUANTITY_BATTERIES :{COMMA} bateria{P "" s}
STR_QUANTITY_PLASTIC :{VOLUME} de pl<70>stico
STR_QUANTITY_FIZZY_DRINKS :{COMMA} Bebida Gasosa
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bebida{P "" s} gasosa
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}CL

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Pila
STR_004C_PLASTIC :Pl<50>stic
STR_004D_FIZZY_DRINK :Beguda Gasosa
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passatger
STR_QUANTITY_COAL :{COMMA} tona de carb<72>
STR_QUANTITY_MAIL :{COMMA} saca de correu
STR_QUANTITY_PASSENGERS :{COMMA} passatger{P "" s}
STR_QUANTITY_COAL :{COMMA} ton{P a es} de carb<72>
STR_QUANTITY_MAIL :{COMMA} sa{P ca ques} de correu
STR_QUANTITY_OIL :{VOLUME} de petroli
STR_QUANTITY_LIVESTOCK :{COMMA} cap de bestiar
STR_QUANTITY_GOODS :{COMMA} palet de mercaderies
STR_QUANTITY_GRAIN :{COMMA} tona de gra
STR_QUANTITY_WOOD :{COMMA} tona de fusta
STR_QUANTITY_IRON_ORE :{COMMA} tona de mineral de ferro
STR_QUANTITY_STEEL :{COMMA} tona d'acer
STR_QUANTITY_VALUABLES :{COMMA} saca de valors
STR_QUANTITY_COPPER_ORE :{COMMA} tona de mineral de coure
STR_QUANTITY_MAIZE :{COMMA} tona de blat de moro
STR_QUANTITY_FRUIT :{COMMA} tona de fruita
STR_QUANTITY_DIAMONDS :{COMMA} bossa de diamants
STR_QUANTITY_FOOD :{COMMA} tona de queviures
STR_QUANTITY_PAPER :{COMMA} tona de paper
STR_QUANTITY_GOLD :{COMMA} sac d'or
STR_QUANTITY_LIVESTOCK :{COMMA} cap{P "" s} de bestiar
STR_QUANTITY_GOODS :{COMMA} palet{P "" s} de mercaderies
STR_QUANTITY_GRAIN :{COMMA} ton{P a es} de gra
STR_QUANTITY_WOOD :{COMMA} ton{P a es} de fusta
STR_QUANTITY_IRON_ORE :{COMMA} ton{P a es} de mineral de ferro
STR_QUANTITY_STEEL :{COMMA} ton{P a es} d'acer
STR_QUANTITY_VALUABLES :{COMMA} sa{P ca ques} de valors
STR_QUANTITY_COPPER_ORE :{COMMA} ton{P a es} de mineral de coure
STR_QUANTITY_MAIZE :{COMMA} ton{P a es} de blat de moro
STR_QUANTITY_FRUIT :{COMMA} ton{P a es} de fruita
STR_QUANTITY_DIAMONDS :{COMMA} boss{P a es} de diamants
STR_QUANTITY_FOOD :{COMMA} ton{P a es} de queviures
STR_QUANTITY_PAPER :{COMMA} ton{P a es} de paper
STR_QUANTITY_GOLD :{COMMA} sa{P ca ques} d'or
STR_QUANTITY_WATER :{VOLUME} d'aigua
STR_QUANTITY_WHEAT :{COMMA} tona de blat
STR_QUANTITY_WHEAT :{COMMA} ton{P a es} de blat
STR_QUANTITY_RUBBER :{VOLUME} de cautx<74>
STR_QUANTITY_SUGAR :{COMMA} tona de sucre
STR_QUANTITY_TOYS :{COMMA} joguina
STR_QUANTITY_SWEETS :{COMMA} bossa de dol<6F>os
STR_QUANTITY_SUGAR :{COMMA} ton{P a es} de sucre
STR_QUANTITY_TOYS :{COMMA} joguin{P a es}
STR_QUANTITY_SWEETS :{COMMA} boss{P a es} de dol<6F>os
STR_QUANTITY_COLA :{VOLUME} de refrescs
STR_QUANTITY_CANDYFLOSS :{COMMA} tona de cot<6F> de sucre
STR_QUANTITY_BUBBLES :{COMMA} bombolla
STR_QUANTITY_TOFFEE :{COMMA} tona de caramel
STR_QUANTITY_BATTERIES :{COMMA} pila
STR_QUANTITY_CANDYFLOSS :{COMMA} ton{P a es} de cot<6F> de sucre
STR_QUANTITY_BUBBLES :{COMMA} bomboll{P a es}
STR_QUANTITY_TOFFEE :{COMMA} ton{P a es} de caramel
STR_QUANTITY_BATTERIES :{COMMA} pil{P a es}
STR_QUANTITY_PLASTIC :{VOLUME} de pl<70>stic
STR_QUANTITY_FIZZY_DRINKS :{COMMA} beguda gasosa
STR_QUANTITY_FIZZY_DRINKS :{COMMA} begud{P a es} gasosa
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}CB

View File

@@ -83,35 +83,35 @@ STR_004B_BATTERY :Batteri
STR_004C_PLASTIC :Plastik
STR_004D_FIZZY_DRINK :Sodavand
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passager
STR_QUANTITY_COAL :{COMMA} ton kul
STR_QUANTITY_MAIL :{COMMA} s<>k post
STR_QUANTITY_PASSENGERS :{COMMA} passager{P "" er}
STR_QUANTITY_COAL :{COMMA} ton{P "" s} kul
STR_QUANTITY_MAIL :{COMMA} s<>k{P "" ke} post
STR_QUANTITY_OIL :{VOLUME} olie
STR_QUANTITY_LIVESTOCK :{COMMA} stk. kv<6B>g
STR_QUANTITY_GOODS :{COMMA} kasse gods
STR_QUANTITY_GRAIN :{COMMA} ton korn
STR_QUANTITY_WOOD :{COMMA} ton tr<74>
STR_QUANTITY_IRON_ORE :{COMMA} ton jernmalm
STR_QUANTITY_STEEL :{COMMA} ton st<73>l
STR_QUANTITY_VALUABLES :{COMMA} s<>k v<>rdigendstande
STR_QUANTITY_COPPER_ORE :{COMMA} tons kobbermalm
STR_QUANTITY_MAIZE :{COMMA} ton majs
STR_QUANTITY_FRUIT :{COMMA} ton frugt
STR_QUANTITY_DIAMONDS :{COMMA} s<>k diamanter
STR_QUANTITY_FOOD :{COMMA} ton mad
STR_QUANTITY_PAPER :{COMMA} ton papir
STR_QUANTITY_GOLD :{COMMA} s<>k guld
STR_QUANTITY_GOODS :{COMMA} kasse{P "" r} gods
STR_QUANTITY_GRAIN :{COMMA} ton{P "" s} korn
STR_QUANTITY_WOOD :{COMMA} ton{P "" s} tr<74>
STR_QUANTITY_IRON_ORE :{COMMA} ton{P "" s} jernmalm
STR_QUANTITY_STEEL :{COMMA} ton{P "" s} st<73>l
STR_QUANTITY_VALUABLES :{COMMA} s<>k{P "" ke} v<>rdigendstande
STR_QUANTITY_COPPER_ORE :{COMMA} ton{P "" s} kobbermalm
STR_QUANTITY_MAIZE :{COMMA} ton{P "" s} majs
STR_QUANTITY_FRUIT :{COMMA} ton{P "" s} frugt
STR_QUANTITY_DIAMONDS :{COMMA} s<>k{P "" ke} diamanter
STR_QUANTITY_FOOD :{COMMA} ton{P "" s} mad
STR_QUANTITY_PAPER :{COMMA} ton{P "" s} papir
STR_QUANTITY_GOLD :{COMMA} s<>k{P "" ke} guld
STR_QUANTITY_WATER :{VOLUME} vand
STR_QUANTITY_WHEAT :{COMMA} ton hvede
STR_QUANTITY_WHEAT :{COMMA} ton{P "" s} hvede
STR_QUANTITY_RUBBER :{VOLUME} gummi
STR_QUANTITY_SUGAR :{COMMA} ton sukker
STR_QUANTITY_SUGAR :{COMMA} ton{P "" s} sukker
STR_QUANTITY_TOYS :{COMMA} leget<65>j
STR_QUANTITY_SWEETS :{COMMA} s<>k slik
STR_QUANTITY_SWEETS :{COMMA} s<>k{P "" ke} slik
STR_QUANTITY_COLA :{VOLUME} cola
STR_QUANTITY_CANDYFLOSS :{COMMA} ton candyfloss
STR_QUANTITY_BUBBLES :{COMMA} boble
STR_QUANTITY_CANDYFLOSS :{COMMA} ton{P "" s} candyfloss
STR_QUANTITY_BUBBLES :{COMMA} boble{P "" r}
STR_QUANTITY_TOFFEE :{COMMA} ton karamel
STR_QUANTITY_BATTERIES :{COMMA} batteri
STR_QUANTITY_BATTERIES :{COMMA} batteri{P "" er}
STR_QUANTITY_PLASTIC :{VOLUME} plastik
STR_QUANTITY_FIZZY_DRINKS :{COMMA} sodavand
STR_ABBREV_NOTHING :

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Batterij
STR_004C_PLASTIC :Plastic
STR_004D_FIZZY_DRINK :Frisdrank
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passagier
STR_QUANTITY_PASSENGERS :{COMMA} passagier{P "" s}
STR_QUANTITY_COAL :{COMMA} ton kolen
STR_QUANTITY_MAIL :{COMMA} zak post
STR_QUANTITY_MAIL :{COMMA} zak{P "" ken} post
STR_QUANTITY_OIL :{VOLUME} olie
STR_QUANTITY_LIVESTOCK :{COMMA} stuk vee
STR_QUANTITY_GOODS :{COMMA} pallet goederen
STR_QUANTITY_LIVESTOCK :{COMMA} stuk{P "" s} vee
STR_QUANTITY_GOODS :{COMMA} pallet{P "" s} goederen
STR_QUANTITY_GRAIN :{COMMA} ton graan
STR_QUANTITY_WOOD :{COMMA} ton hout
STR_QUANTITY_IRON_ORE :{COMMA} ton ijzererts
STR_QUANTITY_STEEL :{COMMA} ton staal
STR_QUANTITY_VALUABLES :{COMMA} zak kostbaarheden
STR_QUANTITY_VALUABLES :{COMMA} zak{P "" ken} kostbaarheden
STR_QUANTITY_COPPER_ORE :{COMMA} ton kopererts
STR_QUANTITY_MAIZE :{COMMA} ton ma<6D>s
STR_QUANTITY_FRUIT :{COMMA} ton fruit
STR_QUANTITY_DIAMONDS :{COMMA} zak diamanten
STR_QUANTITY_DIAMONDS :{COMMA} zak{P "" ken} diamanten
STR_QUANTITY_FOOD :{COMMA} ton voedsel
STR_QUANTITY_PAPER :{COMMA} ton papier
STR_QUANTITY_GOLD :{COMMA} zak goud
STR_QUANTITY_GOLD :{COMMA} zak{P "" ken} goud
STR_QUANTITY_WATER :{VOLUME} water
STR_QUANTITY_WHEAT :{COMMA} ton tarwe
STR_QUANTITY_RUBBER :{VOLUME} rubber
STR_QUANTITY_SUGAR :{COMMA} ton suiker
STR_QUANTITY_TOYS :{COMMA} speelgoed
STR_QUANTITY_SWEETS :{COMMA} zak snoep
STR_QUANTITY_SWEETS :{COMMA} zak{P "" ken} snoep
STR_QUANTITY_COLA :{VOLUME} cola
STR_QUANTITY_CANDYFLOSS :{COMMA} ton suikerspinnen
STR_QUANTITY_BUBBLES :{COMMA} bel
STR_QUANTITY_BUBBLES :{COMMA} bel{P "" len}
STR_QUANTITY_TOFFEE :{COMMA} ton toffee
STR_QUANTITY_BATTERIES :{COMMA} batterij
STR_QUANTITY_BATTERIES :{COMMA} batterij{P "" en}
STR_QUANTITY_PLASTIC :{VOLUME} plastic
STR_QUANTITY_FIZZY_DRINKS :{COMMA} blikje frisdrank
STR_QUANTITY_FIZZY_DRINKS :{COMMA} blikje{P "" s} frisdrank
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}KL

View File

@@ -1957,7 +1957,7 @@ STR_700A_COMPANY_NAME :Yhti
STR_700B_PRESIDENT_S_NAME :P<><50>johtajan nimi
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Yhti<74>n nime<6D> ei voi muuttaa...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}P<><50>johtajan nime<6D> ei voi muuttaa...
STR_700E_FINANCES :{WHITE}{COMPANY} Talous {BLACK}{PLAYERNAME}
STR_700E_FINANCES :{WHITE}Talous, {COMPANY} {BLACK}{PLAYERNAME}
STR_700F_EXPENDITURE_INCOME :{WHITE}Menot/tulot
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Rakentaminen
@@ -2106,61 +2106,61 @@ STR_8019_T_I_M_ELECTRIC :'T.I.M.' (s
STR_801A_ASIASTAR_ELECTRIC :'AsiaStar' (s<>hk<68>)
STR_801B_PASSENGER_CAR :Matkustajavaunu
STR_801C_MAIL_VAN :Postivaunu
STR_801D_COAL_CAR :Hiilivaunu
STR_801E_OIL_TANKER :<3A>ljys<EFBFBD>ili<EFBFBD>
STR_801D_COAL_CAR :Kivihiilivaunu
STR_801E_OIL_TANKER :<3A>ljyvaunu
STR_801F_LIVESTOCK_VAN :Karjavaunu
STR_8020_GOODS_VAN :Tavaravaunu
STR_8021_GRAIN_HOPPER :Viljalaari
STR_8022_WOOD_TRUCK :Tukkiteli
STR_8023_IRON_ORE_HOPPER :Rautalaari
STR_8024_STEEL_TRUCK :Ter<65>steli
STR_8021_GRAIN_HOPPER :Viljavaunu
STR_8022_WOOD_TRUCK :Raakapuuvaunu
STR_8023_IRON_ORE_HOPPER :Malmivaunu
STR_8024_STEEL_TRUCK :Ter<65>skelavaunu
STR_8025_ARMORED_VAN :Panssaroitu vaunu
STR_8026_FOOD_VAN :Ruokavaunu
STR_8027_PAPER_TRUCK :Paperiteli
STR_8028_COPPER_ORE_HOPPER :Kuparilaari
STR_8029_WATER_TANKER :Vesis<EFBFBD>ili<EFBFBD>
STR_802A_FRUIT_TRUCK :Hedelm<6C>teli
STR_802B_RUBBER_TRUCK :Kumiteli
STR_802C_SUGAR_TRUCK :Sokeriteli
STR_802D_COTTON_CANDY_HOPPER :Hattaralaari
STR_802E_TOFFEE_HOPPER :Toffeelaari
STR_8027_PAPER_TRUCK :Paperivaunu
STR_8028_COPPER_ORE_HOPPER :Malmivaunu
STR_8029_WATER_TANKER :Vesivaunu
STR_802A_FRUIT_TRUCK :Hedelm<6C>vaunu
STR_802B_RUBBER_TRUCK :Kumivaunu
STR_802C_SUGAR_TRUCK :Sokerivaunu
STR_802D_COTTON_CANDY_HOPPER :Hattaravaunu
STR_802E_TOFFEE_HOPPER :Toffeevaunu
STR_802F_BUBBLE_VAN :Kuplavaunu
STR_8030_COLA_TANKER :Limsas<EFBFBD>ili<EFBFBD>
STR_8030_COLA_TANKER :Limsavaunu
STR_8031_CANDY_VAN :Karkkivaunu
STR_8032_TOY_VAN :Leluvaunu
STR_8033_BATTERY_TRUCK :Paristoteli
STR_8034_FIZZY_DRINK_TRUCK :Sihijuomateli
STR_8035_PLASTIC_TRUCK :Muoviteli
STR_8033_BATTERY_TRUCK :Paristovaunu
STR_8034_FIZZY_DRINK_TRUCK :Sihijuomavaunu
STR_8035_PLASTIC_TRUCK :Muovivaunu
STR_8036_X2001_ELECTRIC :'X2001' (s<>hk<68>)
STR_8037_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (s<>hk<68>)
STR_8038_WIZZOWOW_Z99 :Wizzowow Z99
STR_8039_PASSENGER_CAR :Matkustajavaunu
STR_803A_MAIL_VAN :Postivaunu
STR_803B_COAL_CAR :Hiilivaunu
STR_803C_OIL_TANKER :<3A>ljys<EFBFBD>ili<EFBFBD>
STR_803C_OIL_TANKER :<3A>ljyvaunu
STR_803D_LIVESTOCK_VAN :Karjavaunu
STR_803E_GOODS_VAN :Tavaravaunu
STR_803F_GRAIN_HOPPER :Viljalaari
STR_8040_WOOD_TRUCK :Tukkiteli
STR_8041_IRON_ORE_HOPPER :Rautalaari
STR_8042_STEEL_TRUCK :Ter<65>steli
STR_803F_GRAIN_HOPPER :Viljavaunu
STR_8040_WOOD_TRUCK :Raakapuuvaunu
STR_8041_IRON_ORE_HOPPER :Malmivaunu
STR_8042_STEEL_TRUCK :Ter<65>skelavaunu
STR_8043_ARMORED_VAN :Panssaroitu vaunu
STR_8044_FOOD_VAN :Ruokavaunu
STR_8045_PAPER_TRUCK :Paperiteli
STR_8046_COPPER_ORE_HOPPER :Kuparilaari
STR_8047_WATER_TANKER :Vesis<EFBFBD>ili<EFBFBD>
STR_8048_FRUIT_TRUCK :Hedelm<6C>teli
STR_8049_RUBBER_TRUCK :Kumiteli
STR_804A_SUGAR_TRUCK :Sokeriteli
STR_804B_COTTON_CANDY_HOPPER :Hattaralaari
STR_804C_TOFFEE_HOPPER :Toffeelaari
STR_8045_PAPER_TRUCK :Paperivaunu
STR_8046_COPPER_ORE_HOPPER :Malmivaunu
STR_8047_WATER_TANKER :Vesivaunu
STR_8048_FRUIT_TRUCK :Hedelm<6C>vaunu
STR_8049_RUBBER_TRUCK :Kumivaunu
STR_804A_SUGAR_TRUCK :Sokerivaunu
STR_804B_COTTON_CANDY_HOPPER :Hattaravaunu
STR_804C_TOFFEE_HOPPER :Toffeevaunu
STR_804D_BUBBLE_VAN :Kuplavaunu
STR_804E_COLA_TANKER :Limsas<EFBFBD>ili<EFBFBD>
STR_804E_COLA_TANKER :Limsavaunu
STR_804F_CANDY_VAN :Karkkivaunu
STR_8050_TOY_VAN :Leluvaunu
STR_8051_BATTERY_TRUCK :Paristoteli
STR_8052_FIZZY_DRINK_TRUCK :Sihijuomateli
STR_8053_PLASTIC_TRUCK :Muoviteli
STR_8051_BATTERY_TRUCK :Paristovaunu
STR_8052_FIZZY_DRINK_TRUCK :Sihijuomavaunu
STR_8053_PLASTIC_TRUCK :Muovivaunu
STR_8054_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (s<>hk<68>)
STR_8055_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (s<>hk<68>)
STR_8056_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (s<>hk<68>)
@@ -2169,30 +2169,30 @@ STR_8058_WIZZOWOW_ROCKETEER :Wizzowow Rocket
STR_8059_PASSENGER_CAR :Matkustajavaunu
STR_805A_MAIL_VAN :Postivaunu
STR_805B_COAL_CAR :Hiilivaunu
STR_805C_OIL_TANKER :<3A>ljys<EFBFBD>ili<EFBFBD>
STR_805C_OIL_TANKER :<3A>ljyvaunu
STR_805D_LIVESTOCK_VAN :Karjavaunu
STR_805E_GOODS_VAN :Tavaravaunu
STR_805F_GRAIN_HOPPER :Viljalaari
STR_8060_WOOD_TRUCK :Tukkiteli
STR_8061_IRON_ORE_HOPPER :Rautamalmilaari
STR_8062_STEEL_TRUCK :Ter<65>steli
STR_805F_GRAIN_HOPPER :Viljavaunu
STR_8060_WOOD_TRUCK :Raakapuuvaunu
STR_8061_IRON_ORE_HOPPER :Malmivaunu
STR_8062_STEEL_TRUCK :Ter<65>skela
STR_8063_ARMORED_VAN :Panssaroitu vaunu
STR_8064_FOOD_VAN :Ruokavaunu
STR_8065_PAPER_TRUCK :Paperiteli
STR_8066_COPPER_ORE_HOPPER :Kuparilaari
STR_8067_WATER_TANKER :Vesis<EFBFBD>ili<EFBFBD>
STR_8068_FRUIT_TRUCK :Hedelm<6C>teli
STR_8069_RUBBER_TRUCK :Kumiteli
STR_806A_SUGAR_TRUCK :Sokeriteli
STR_806B_COTTON_CANDY_HOPPER :Hattaralaari
STR_806C_TOFFEE_HOPPER :Toffeelaari
STR_8065_PAPER_TRUCK :Paperivaunu
STR_8066_COPPER_ORE_HOPPER :Malmivaunu
STR_8067_WATER_TANKER :Vesivaunu
STR_8068_FRUIT_TRUCK :Hedelm<6C>vaunu
STR_8069_RUBBER_TRUCK :Kumivaunu
STR_806A_SUGAR_TRUCK :Sokerivaunu
STR_806B_COTTON_CANDY_HOPPER :Hattaravaunu
STR_806C_TOFFEE_HOPPER :Toffeevaunu
STR_806D_BUBBLE_VAN :Kuplavaunu
STR_806E_COLA_TANKER :Limsas<EFBFBD>ili<EFBFBD>
STR_806E_COLA_TANKER :Limsavaunu
STR_806F_CANDY_VAN :Karkkivaunu
STR_8070_TOY_VAN :Leluvaunu
STR_8071_BATTERY_TRUCK :Paristoteli
STR_8072_FIZZY_DRINK_TRUCK :Sihijuomateli
STR_8073_PLASTIC_TRUCK :Muoviteli
STR_8071_BATTERY_TRUCK :Paristovaunu
STR_8072_FIZZY_DRINK_TRUCK :Sihijuomavaunu
STR_8073_PLASTIC_TRUCK :Muovivaunu
STR_8074_MPS_REGAL_BUS :MPS Regal -linja-auto
STR_8075_HEREFORD_LEOPARD_BUS :Hereford Leopard -linja-auto
STR_8076_FOSTER_BUS :Foster-linja-auto

View File

@@ -1250,10 +1250,10 @@ STR_NETWORK_8_PLAYERS :8 joueurs
STR_NETWORK_9_PLAYERS :9 joueurs
STR_NETWORK_10_PLAYERS :10 joueurs
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max compagnies:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limiter le nombre de compagnies sur le serveur
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limiter le serveur <20> un certain nombre de compagnies
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max spectateurs:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limiter le nombre de spectateurs sur le serveur
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limiter le serveur <20> un certain nombre de spectateurs
STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Langue parl<72>e :
STR_NETWORK_LANGUAGE_TIP :{BLACK}Les autres joueurs sauront quelle langue est parl<72>e sur ce serveur.
@@ -1352,7 +1352,7 @@ STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :mot de passe de
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :mauvais player-id dans DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :jet<65> par le serveur
STR_NETWORK_ERR_CLIENT_CHEATER :a tent<6E> de tricher
STR_NETWORK_ERR_CLIENT_SERVER_FULL :serveur complet
STR_NETWORK_ERR_CLIENT_SERVER_FULL :Serveur complet
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :a rejoint la partie
STR_NETWORK_GIVE_MONEY :vous a donn<6E> un peu d'argent ({CURRENCY})
@@ -2767,7 +2767,7 @@ STR_REPLACE_HELP_RAILTYPE :{BLACK}Choisir
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Ceci affiche par quelle locomotive celle qui est s<>lectionn<6E>e <20> gauche sera remplac<61>e
STR_REPLACE_HELP :{BLACK}Cette caract<63>ristique permet de choisir un type de locomotive et de le remplacer par un autre. Ceci sera fait automatiquement quand le v<>hicule rentre dans un d<>p<EFBFBD>t
STR_REPLACE_REMOVE_WAGON :{BLACK}Retrait de wagon: {ORANGE}{SKIP}{STRING}
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Faire que la longueur du train reste la m<>me en retirant des wagons (depuis la t<>te du train), si le remplacement du v<>hicule allonge le train.
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}L'autoremplacement conserve la m<>me longueur du train en retirant des wagons (d'abord par la t<>te), si le remplacement fait en sorte que le train ne devienne plus long.
STR_ENGINE_NOT_BUILDABLE :{WHITE}Ce v<>hicule ne peut pas <20>tre construit
STR_SHORT_DATE :{WHITE}{DATE_TINY}

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Bater
STR_004C_PLASTIC :Pl<50>stico
STR_004D_FIZZY_DRINK :Bebida Gaseosa
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} pasaxeiro
STR_QUANTITY_COAL :{COMMA} ton. de carb<72>n
STR_QUANTITY_MAIL :{COMMA} saco de correo
STR_QUANTITY_PASSENGERS :{COMMA} pasaxeiro{P "" s}
STR_QUANTITY_COAL :{COMMA} ton{P "" s}. de carb<72>n
STR_QUANTITY_MAIL :{COMMA} saco{P "" s} de correo
STR_QUANTITY_OIL :{VOLUME} de petr<74>leo
STR_QUANTITY_LIVESTOCK :{COMMA} item de gando
STR_QUANTITY_GOODS :{COMMA} caix<69>n de mercador<6F>as
STR_QUANTITY_GRAIN :{COMMA} ton. de gran
STR_QUANTITY_WOOD :{COMMA} ton. de madeira
STR_QUANTITY_IRON_ORE :{COMMA} ton. de hematita
STR_QUANTITY_STEEL :{COMMA} ton. de aceiro
STR_QUANTITY_VALUABLES :{COMMA} saco de valores
STR_QUANTITY_COPPER_ORE :{COMMA} ton. de mineral de cobre
STR_QUANTITY_MAIZE :{COMMA} ton. de millo
STR_QUANTITY_FRUIT :{COMMA} ton. de froita
STR_QUANTITY_DIAMONDS :{COMMA} saco de diamantes
STR_QUANTITY_FOOD :{COMMA} ton. de comida
STR_QUANTITY_PAPER :{COMMA} ton. de papel
STR_QUANTITY_GOLD :{COMMA} saco de ouro
STR_QUANTITY_LIVESTOCK :{COMMA} item{P "" s} de gando
STR_QUANTITY_GOODS :{COMMA} caix<69>n{P "" s} de mercador<6F>as
STR_QUANTITY_GRAIN :{COMMA} ton{P "" s}. de gran
STR_QUANTITY_WOOD :{COMMA} ton{P "" s}. de madeira
STR_QUANTITY_IRON_ORE :{COMMA} ton{P "" s}. de hematita
STR_QUANTITY_STEEL :{COMMA} ton{P "" s}. de aceiro
STR_QUANTITY_VALUABLES :{COMMA} saco{P "" s} de valores
STR_QUANTITY_COPPER_ORE :{COMMA} ton{P "" s}. de mineral de cobre
STR_QUANTITY_MAIZE :{COMMA} ton{P "" s}. de millo
STR_QUANTITY_FRUIT :{COMMA} ton{P "" s}. de froita
STR_QUANTITY_DIAMONDS :{COMMA} saco{P "" s} de diamantes
STR_QUANTITY_FOOD :{COMMA} ton{P "" s}. de comida
STR_QUANTITY_PAPER :{COMMA} ton{P "" s}. de papel
STR_QUANTITY_GOLD :{COMMA} saco{P "" s} de ouro
STR_QUANTITY_WATER :{VOLUME} de auga
STR_QUANTITY_WHEAT :{COMMA} ton. de trigo
STR_QUANTITY_WHEAT :{COMMA} ton{P "" s}. de trigo
STR_QUANTITY_RUBBER :{VOLUME} de caucho
STR_QUANTITY_SUGAR :{COMMA} ton. de azucre
STR_QUANTITY_TOYS :{COMMA} xoguete
STR_QUANTITY_SWEETS :{COMMA} saco de caramelo
STR_QUANTITY_SUGAR :{COMMA} ton{P "" s}. de azucre
STR_QUANTITY_TOYS :{COMMA} xoguete{P "" s}
STR_QUANTITY_SWEETS :{COMMA} saco{P "" s} de caramelo
STR_QUANTITY_COLA :{VOLUME} de cola
STR_QUANTITY_CANDYFLOSS :{COMMA} ton. de algod<6F>n de azucre
STR_QUANTITY_BUBBLES :{COMMA} burbulla
STR_QUANTITY_TOFFEE :{COMMA} ton. de toffee
STR_QUANTITY_BATTERIES :{COMMA} bater<65>a
STR_QUANTITY_CANDYFLOSS :{COMMA} ton{P "" s}. de algod<6F>n de azucre
STR_QUANTITY_BUBBLES :{COMMA} burbulla{P "" s}
STR_QUANTITY_TOFFEE :{COMMA} ton{P "" s}. de toffee
STR_QUANTITY_BATTERIES :{COMMA} bater<65>a{P "" s}
STR_QUANTITY_PLASTIC :{VOLUME} de pl<70>stico
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bebida gaseosa
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bebida{P "" s} gaseosa{P "" s}
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}CL

View File

@@ -1315,7 +1315,7 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Trennen
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Gib deine Nachricht ein
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Gib an wieviel Geld du geben m<>chtest
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Gib an, wieviel Geld du geben m<>chtest
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist gesch<63>tzt. Gib das Passwort ein
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist gesch<63>tzt! Passwort eingeben
STR_NETWORK_CLIENT_LIST :{WHITE}Teilnehmerliste
@@ -1486,7 +1486,7 @@ STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Bev<65>lkerung: {ORANGE}{COMMA}{BLACK} H<>user: {ORANGE}{COMMA}
STR_2007_RENAME_TOWN :Stadt umbenennen
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Die Stadt kann nicht umbenannt werden...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} Die Stadtverwaltung erteilt keine Genehmigung
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}Die Stadtverwaltung von {TOWN} erteilt keine Genehmigung
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}St<53>dtenamen - klicke auf den Namen, um die Stadt anzuzeigen
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Ansicht auf Stadt zentrieren
STR_200C_CHANGE_TOWN_NAME :{BLACK}Stadt umbenennen

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Rafhl
STR_004C_PLASTIC :Plast
STR_004D_FIZZY_DRINK :Gosdrykkja
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} far<61>egi
STR_QUANTITY_PASSENGERS :{COMMA} far<61>eg{P i ar}
STR_QUANTITY_COAL :{COMMA} tonn af kolum
STR_QUANTITY_MAIL :{COMMA} pokar af p<>sti
STR_QUANTITY_OIL :{VOLUME} af ol<6F>u
STR_QUANTITY_LIVESTOCK :{COMMA} nautgripur
STR_QUANTITY_GOODS :{COMMA} kassi af v<>rum
STR_QUANTITY_LIVESTOCK :{COMMA} nautgrip{P u i}r
STR_QUANTITY_GOODS :{COMMA} kass{P i ar} af v<>rum
STR_QUANTITY_GRAIN :{COMMA} tonn af korni
STR_QUANTITY_WOOD :{COMMA} tonn af timbri
STR_QUANTITY_IRON_ORE :{COMMA} tonn af j<>rngr<67>ti
STR_QUANTITY_STEEL :{COMMA} tonn af st<73>li
STR_QUANTITY_VALUABLES :{COMMA} poki af ver<65>m<EFBFBD>tum
STR_QUANTITY_VALUABLES :{COMMA} pok{P i ar} af ver<65>m<EFBFBD>tum
STR_QUANTITY_COPPER_ORE :{COMMA} tonn af kopar
STR_QUANTITY_MAIZE :{COMMA} tonn af ma<6D>s
STR_QUANTITY_FRUIT :{COMMA} tonn af <20>v<EFBFBD>xtum
STR_QUANTITY_DIAMONDS :{COMMA} poki af dem<65>ntum
STR_QUANTITY_DIAMONDS :{COMMA} pok{P i ar} af dem<65>ntum
STR_QUANTITY_FOOD :{COMMA} tonn af matv<74>lum
STR_QUANTITY_PAPER :{COMMA} tonn af papp<70>r
STR_QUANTITY_GOLD :{COMMA} poki af gulli
STR_QUANTITY_GOLD :{COMMA} pok{P i ar} af gulli
STR_QUANTITY_WATER :{VOLUME} af vatni
STR_QUANTITY_WHEAT :{COMMA} tonn af hveiti
STR_QUANTITY_RUBBER :{VOLUME} af g<>mm<6D>i
STR_QUANTITY_SUGAR :{COMMA} tonn af sykri
STR_QUANTITY_TOYS :{COMMA} leikfang
STR_QUANTITY_SWEETS :{COMMA} poki af s<>lg<6C>ti
STR_QUANTITY_TOYS :{COMMA} leikf{P a <20>}ng
STR_QUANTITY_SWEETS :{COMMA} pok{P i ar} af s<>lg<6C>ti
STR_QUANTITY_COLA :{VOLUME} af k<>ladrykk
STR_QUANTITY_CANDYFLOSS :{COMMA} tonn af sykurfrau<61>i
STR_QUANTITY_BUBBLES :{COMMA} k<>la
STR_QUANTITY_BUBBLES :{COMMA} k<>l{P a ur}
STR_QUANTITY_TOFFEE :{COMMA} tonn af toff<66>
STR_QUANTITY_BATTERIES :{COMMA} rafhla<EFBFBD>a
STR_QUANTITY_BATTERIES :{COMMA} rafhl{P a<>a <20><>ur}
STR_QUANTITY_PLASTIC :{VOLUME} af plasti
STR_QUANTITY_FIZZY_DRINKS :{COMMA} gosdrykkur
STR_QUANTITY_FIZZY_DRINKS :{COMMA} gosdrykk{P u i}r
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}CL

View File

@@ -83,35 +83,35 @@ STR_004B_BATTERY :Batterie
STR_004C_PLASTIC :Plastica
STR_004D_FIZZY_DRINK :Bevande Frizzanti
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passeggero
STR_QUANTITY_PASSENGERS :{COMMA} passegger{P o i}
STR_QUANTITY_COAL :{COMMA} ton. di carbone
STR_QUANTITY_MAIL :{COMMA} sacco postale
STR_QUANTITY_MAIL :{COMMA} sacc{P o i} postal{P e i}
STR_QUANTITY_OIL :{VOLUME} di petrolio
STR_QUANTITY_LIVESTOCK :{COMMA} capo di bestiame
STR_QUANTITY_GOODS :{COMMA} cassa di beni
STR_QUANTITY_LIVESTOCK :{COMMA} cap{P o i} di bestiame
STR_QUANTITY_GOODS :{COMMA} cass{P a e} di beni
STR_QUANTITY_GRAIN :{COMMA} ton. di grano
STR_QUANTITY_WOOD :{COMMA} ton. di legna
STR_QUANTITY_IRON_ORE :{COMMA} ton. di ferro grezzo
STR_QUANTITY_STEEL :{COMMA} ton. di acciaio
STR_QUANTITY_VALUABLES :{COMMA} borsa di valori
STR_QUANTITY_VALUABLES :{COMMA} bors{P a e} di valori
STR_QUANTITY_COPPER_ORE :{COMMA} ton. di rame grezzo
STR_QUANTITY_MAIZE :{COMMA} ton. di mais
STR_QUANTITY_FRUIT :{COMMA} ton. di frutta
STR_QUANTITY_DIAMONDS :{COMMA} borsa di diamanti
STR_QUANTITY_DIAMONDS :{COMMA} bors{P a e} di diamanti
STR_QUANTITY_FOOD :{COMMA} ton. di cibo
STR_QUANTITY_PAPER :{COMMA} ton. di carta
STR_QUANTITY_GOLD :{COMMA} borsa d'oro
STR_QUANTITY_GOLD :{COMMA} bors{P a e} d'oro
STR_QUANTITY_WATER :{VOLUME} di acqua
STR_QUANTITY_WHEAT :{COMMA} ton. di frumento
STR_QUANTITY_RUBBER :{VOLUME} di gomma
STR_QUANTITY_SUGAR :{COMMA} ton. di zucchero
STR_QUANTITY_TOYS :{COMMA} giocattolo
STR_QUANTITY_SWEETS :{COMMA} busta di caramelle
STR_QUANTITY_TOYS :{COMMA} giocattol{P o i}
STR_QUANTITY_SWEETS :{COMMA} bust{P a e} di caramelle
STR_QUANTITY_COLA :{VOLUME} di cola
STR_QUANTITY_CANDYFLOSS :{COMMA} ton. di cotone candito
STR_QUANTITY_BUBBLES :{COMMA} bolla
STR_QUANTITY_BUBBLES :{COMMA} boll{P a e}
STR_QUANTITY_TOFFEE :{COMMA} ton. di toffee
STR_QUANTITY_BATTERIES :{COMMA} batteria
STR_QUANTITY_BATTERIES :{COMMA} batteri{P a e}
STR_QUANTITY_PLASTIC :{VOLUME} di plastica
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bibite frizzanti
STR_ABBREV_NOTHING :

View File

@@ -83,35 +83,35 @@ STR_004B_BATTERY :Batteri
STR_004C_PLASTIC :Plastikk
STR_004D_FIZZY_DRINK :Brus
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passasjer
STR_QUANTITY_PASSENGERS :{COMMA} passasjer{P "" er}
STR_QUANTITY_COAL :{COMMA} tonn kull
STR_QUANTITY_MAIL :{COMMA} postsekk
STR_QUANTITY_MAIL :{COMMA} postsekk{P "" er}
STR_QUANTITY_OIL :{VOLUME} olje
STR_QUANTITY_LIVESTOCK :{COMMA} enhet buskap
STR_QUANTITY_GOODS :{COMMA} kasse gods
STR_QUANTITY_LIVESTOCK :{COMMA} enhet{P "" er} buskap
STR_QUANTITY_GOODS :{COMMA} kasse{P "" r} gods
STR_QUANTITY_GRAIN :{COMMA} tonn korn
STR_QUANTITY_WOOD :{COMMA} tonn t<>mmer
STR_QUANTITY_IRON_ORE :{COMMA} tonn jernmalm
STR_QUANTITY_STEEL :{COMMA} tonn st<73>l
STR_QUANTITY_VALUABLES :{COMMA} sekk med verdisaker
STR_QUANTITY_VALUABLES :{COMMA} sekk{P "" er} med verdisaker
STR_QUANTITY_COPPER_ORE :{COMMA} tonn kobbermalm
STR_QUANTITY_MAIZE :{COMMA} tonn mais
STR_QUANTITY_FRUIT :{COMMA} tonn frukt
STR_QUANTITY_DIAMONDS :{COMMA} sekk med diamanter
STR_QUANTITY_DIAMONDS :{COMMA} sekk{P "" er} med diamanter
STR_QUANTITY_FOOD :{COMMA} tonn mat
STR_QUANTITY_PAPER :{COMMA} tonn papir
STR_QUANTITY_GOLD :{COMMA} sekk med gull
STR_QUANTITY_GOLD :{COMMA} sekk{P "" er} med gull
STR_QUANTITY_WATER :{VOLUME} vann
STR_QUANTITY_WHEAT :{COMMA} tonn hvete
STR_QUANTITY_RUBBER :{VOLUME} gummi
STR_QUANTITY_SUGAR :{COMMA} tonn sukker
STR_QUANTITY_TOYS :{COMMA} leke
STR_QUANTITY_SWEETS :{COMMA} sekk med s<>tsaker
STR_QUANTITY_TOYS :{COMMA} leke{P "" r}
STR_QUANTITY_SWEETS :{COMMA} sekk{P "" er} med s<>tsaker
STR_QUANTITY_COLA :{VOLUME} cola
STR_QUANTITY_CANDYFLOSS :{COMMA} tonn sukkerspinn
STR_QUANTITY_BUBBLES :{COMMA} boble
STR_QUANTITY_BUBBLES :{COMMA} boble{P "" r}
STR_QUANTITY_TOFFEE :{COMMA} tonn karamell
STR_QUANTITY_BATTERIES :{COMMA} batteri
STR_QUANTITY_BATTERIES :{COMMA} batteri{P "" er}
STR_QUANTITY_PLASTIC :{VOLUME} plastikk
STR_QUANTITY_FIZZY_DRINKS :{COMMA} brus
STR_ABBREV_NOTHING :

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Baterias
STR_004C_PLASTIC :Pl<50>stico
STR_004D_FIZZY_DRINK :Bebidas Gasosas
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} passageiro
STR_QUANTITY_COAL :{COMMA} tonelada de carv<72>o
STR_QUANTITY_MAIL :{COMMA} saco de correio
STR_QUANTITY_PASSENGERS :{COMMA} passageiro{P "" s}
STR_QUANTITY_COAL :{COMMA} tonelada{P "" s} de carv<72>o
STR_QUANTITY_MAIL :{COMMA} saco{P "" s} de correio
STR_QUANTITY_OIL :{VOLUME} de petr<74>leo
STR_QUANTITY_LIVESTOCK :{COMMA} item de gado
STR_QUANTITY_GOODS :{COMMA} caixa de bens
STR_QUANTITY_GRAIN :{COMMA} tonelada de cereais
STR_QUANTITY_WOOD :{COMMA} tonelada de madeira
STR_QUANTITY_IRON_ORE :{COMMA} tonelada de min<69>rio de ferro
STR_QUANTITY_STEEL :{COMMA} tonelada de a<>o
STR_QUANTITY_VALUABLES :{COMMA} saco de valores
STR_QUANTITY_COPPER_ORE :{COMMA} tonelada de min<69>rio de cobre
STR_QUANTITY_MAIZE :{COMMA} tonelada de milho
STR_QUANTITY_FRUIT :{COMMA} tonelada de fruta
STR_QUANTITY_DIAMONDS :{COMMA} saco de diamantes
STR_QUANTITY_FOOD :{COMMA} tonelada de comida
STR_QUANTITY_PAPER :{COMMA} tonelada de papel
STR_QUANTITY_GOLD :{COMMA} saco de ouro
STR_QUANTITY_LIVESTOCK :{COMMA} ite{P m ns} de gado
STR_QUANTITY_GOODS :{COMMA} caixa{P "" s} de bens
STR_QUANTITY_GRAIN :{COMMA} tonelada{P "" s} de cereais
STR_QUANTITY_WOOD :{COMMA} tonelada{P "" s} de madeira
STR_QUANTITY_IRON_ORE :{COMMA} tonelada{P "" s} de min<69>rio de ferro
STR_QUANTITY_STEEL :{COMMA} tonelada{P "" s} de a<>o
STR_QUANTITY_VALUABLES :{COMMA} saco{P "" s} de valores
STR_QUANTITY_COPPER_ORE :{COMMA} tonelada{P "" s} de min<69>rio de cobre
STR_QUANTITY_MAIZE :{COMMA} tonelada{P "" s} de milho
STR_QUANTITY_FRUIT :{COMMA} tonelada{P "" s} de fruta
STR_QUANTITY_DIAMONDS :{COMMA} saco{P "" s} de diamantes
STR_QUANTITY_FOOD :{COMMA} tonelada{P "" s} de comida
STR_QUANTITY_PAPER :{COMMA} tonelada{P "" s} de papel
STR_QUANTITY_GOLD :{COMMA} saco{P "" s} de ouro
STR_QUANTITY_WATER :{VOLUME} de <20>gua
STR_QUANTITY_WHEAT :{COMMA} tonelada de trigo
STR_QUANTITY_WHEAT :{COMMA} tonelada{P "" s} de trigo
STR_QUANTITY_RUBBER :{VOLUME} de borracha
STR_QUANTITY_SUGAR :{COMMA} tonelada de a<><61>car
STR_QUANTITY_TOYS :{COMMA} brinquedo
STR_QUANTITY_SWEETS :{COMMA} saco de doces
STR_QUANTITY_SUGAR :{COMMA} tonelada{P "" s} de a<><61>car
STR_QUANTITY_TOYS :{COMMA} brinquedo{P "" s}
STR_QUANTITY_SWEETS :{COMMA} saco{P "" s} de doces
STR_QUANTITY_COLA :{VOLUME} de cola
STR_QUANTITY_CANDYFLOSS :{COMMA} tonelada de algod<6F>o doce
STR_QUANTITY_BUBBLES :{COMMA} bolha
STR_QUANTITY_TOFFEE :{COMMA} tonelada de caramelo
STR_QUANTITY_CANDYFLOSS :{COMMA} tonelada{P "" s} de algod<6F>o doce
STR_QUANTITY_BUBBLES :{COMMA} bolha{P "" s}
STR_QUANTITY_TOFFEE :{COMMA} tonelada{P "" s} de caramelo
STR_QUANTITY_BATTERIES :{COMMA} pilh{P y as}
STR_QUANTITY_PLASTIC :{VOLUME} de pl<70>stico
STR_QUANTITY_FIZZY_DRINKS :{COMMA} Bebida Gasosa
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bebida{P "" s} gasosa{P "" s}
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}CL

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :baterii
STR_004C_PLASTIC :plastic
STR_004D_FIZZY_DRINK :suc
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} c<>l<EFBFBD>tor
STR_QUANTITY_COAL :{COMMA} ton<EFBFBD> de c<>rbune
STR_QUANTITY_MAIL :{COMMA} sac cu colete postale
STR_QUANTITY_PASSENGERS :{COMMA} c<>l<EFBFBD>tor{P "" i}
STR_QUANTITY_COAL :{COMMA} ton{P <20> e} de c<>rbune
STR_QUANTITY_MAIL :{COMMA} sac{P "" i} cu colete postale
STR_QUANTITY_OIL :{VOLUME} de petrol
STR_QUANTITY_LIVESTOCK :{COMMA} animal
STR_QUANTITY_GOODS :{COMMA} pachet de bunuri
STR_QUANTITY_GRAIN :{COMMA} ton<EFBFBD> de cereale
STR_QUANTITY_WOOD :{COMMA} ton<EFBFBD> de lemne
STR_QUANTITY_IRON_ORE :{COMMA} ton<EFBFBD> de minereu de fier
STR_QUANTITY_STEEL :{COMMA} ton<EFBFBD> de otel
STR_QUANTITY_VALUABLES :{COMMA} cutie de valori
STR_QUANTITY_COPPER_ORE :{COMMA} ton<EFBFBD> de minereu de cupru
STR_QUANTITY_MAIZE :{COMMA} ton<EFBFBD> de porumb
STR_QUANTITY_FRUIT :{COMMA} ton<EFBFBD> de fructe
STR_QUANTITY_DIAMONDS :{COMMA} sac cu diamante
STR_QUANTITY_FOOD :{COMMA} ton<EFBFBD> de alimente
STR_QUANTITY_PAPER :{COMMA} ton<EFBFBD> de h<>rtie
STR_QUANTITY_GOLD :{COMMA} sac cu aur
STR_QUANTITY_LIVESTOCK :{COMMA} animal{P "" e}
STR_QUANTITY_GOODS :{COMMA} pachet{P "" e} de bunuri
STR_QUANTITY_GRAIN :{COMMA} ton{P <20> e} de cereale
STR_QUANTITY_WOOD :{COMMA} ton{P <20> e} de lemne
STR_QUANTITY_IRON_ORE :{COMMA} ton{P <20> e} de minereu de fier
STR_QUANTITY_STEEL :{COMMA} ton{P <20> e} de otel
STR_QUANTITY_VALUABLES :{COMMA} cuti{P e i} de valori
STR_QUANTITY_COPPER_ORE :{COMMA} ton{P <20> e} de minereu de cupru
STR_QUANTITY_MAIZE :{COMMA} ton{P <20> e} de porumb
STR_QUANTITY_FRUIT :{COMMA} ton{P <20> e} de fructe
STR_QUANTITY_DIAMONDS :{COMMA} sac{P "" i} cu diamante
STR_QUANTITY_FOOD :{COMMA} ton{P <20> e} de alimente
STR_QUANTITY_PAPER :{COMMA} ton{P <20> e} de h<>rtie
STR_QUANTITY_GOLD :{COMMA} sac{P "" i} cu aur
STR_QUANTITY_WATER :{VOLUME} de ap<61>
STR_QUANTITY_WHEAT :{COMMA} ton<EFBFBD> de gr<67>u
STR_QUANTITY_WHEAT :{COMMA} ton{P <20> e} de gr<67>u
STR_QUANTITY_RUBBER :{VOLUME} de cauciuc
STR_QUANTITY_SUGAR :{COMMA} ton<EFBFBD> de zah<61>r
STR_QUANTITY_TOYS :{COMMA} sac cu juc<75>rii
STR_QUANTITY_SWEETS :{COMMA} sac cu bomboane
STR_QUANTITY_SUGAR :{COMMA} ton{P <20> e} de zah<61>r
STR_QUANTITY_TOYS :{COMMA} sac{P "" i} cu juc<75>rii
STR_QUANTITY_SWEETS :{COMMA} sac{P "" i} cu bomboane
STR_QUANTITY_COLA :{VOLUME} de cola
STR_QUANTITY_CANDYFLOSS :{COMMA} ton<EFBFBD> de vat<61> de zah<61>r
STR_QUANTITY_BUBBLES :{COMMA} balonas
STR_QUANTITY_TOFFEE :{COMMA} ton<EFBFBD> de caramel
STR_QUANTITY_BATTERIES :{COMMA} baterie
STR_QUANTITY_CANDYFLOSS :{COMMA} ton{P <20> e} de vat<61> de zah<61>r
STR_QUANTITY_BUBBLES :{COMMA} balonas{P "" e}
STR_QUANTITY_TOFFEE :{COMMA} ton{P <20> e} de caramel
STR_QUANTITY_BATTERIES :{COMMA} bateri{P e i}
STR_QUANTITY_PLASTIC :{VOLUME} de plastic
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bidon cu suc
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bido{P n ane} cu suc
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}CL
STR_ABBREV_COAL :{TINYFONT}CB

View File

@@ -83,37 +83,37 @@ STR_004B_BATTERY :Pilas
STR_004C_PLASTIC :Pl<50>stico
STR_004D_FIZZY_DRINK :Refresco
STR_QUANTITY_NOTHING :
STR_QUANTITY_PASSENGERS :{COMMA} pasajero
STR_QUANTITY_COAL :{COMMA} tonelada de carb<72>n
STR_QUANTITY_MAIL :{COMMA} saca de correo
STR_QUANTITY_PASSENGERS :{COMMA} pasajero{P "" s}
STR_QUANTITY_COAL :{COMMA} tonelada{P "" s} de carb<72>n
STR_QUANTITY_MAIL :{COMMA} saca{P "" s} de correo
STR_QUANTITY_OIL :{VOLUME} de petr<74>leo
STR_QUANTITY_LIVESTOCK :{COMMA} cabeza de ganado
STR_QUANTITY_GOODS :{COMMA} caja de mercanc<6E>a
STR_QUANTITY_GRAIN :{COMMA} tonelada de grano
STR_QUANTITY_WOOD :{COMMA} tonelada de madera
STR_QUANTITY_IRON_ORE :{COMMA} tonelada de mineral de hierro
STR_QUANTITY_STEEL :{COMMA} tonelada de acero
STR_QUANTITY_VALUABLES :{COMMA} bolsa de objetos de valor
STR_QUANTITY_COPPER_ORE :{COMMA} tonelada de mineral de cobre
STR_QUANTITY_MAIZE :{COMMA} tonelada de ma<6D>z
STR_QUANTITY_FRUIT :{COMMA} tonelada de fruta
STR_QUANTITY_DIAMONDS :{COMMA} bolsa de diamantes
STR_QUANTITY_FOOD :{COMMA} tonelada de alimento
STR_QUANTITY_PAPER :{COMMA} tonelada de papel
STR_QUANTITY_GOLD :{COMMA} bolsa de oro
STR_QUANTITY_LIVESTOCK :{COMMA} cabeza{P "" s} de ganado
STR_QUANTITY_GOODS :{COMMA} caja{P "" s} de mercanc<6E>a{P "" s}
STR_QUANTITY_GRAIN :{COMMA} tonelada{P "" s} de grano
STR_QUANTITY_WOOD :{COMMA} tonelada{P "" s} de madera
STR_QUANTITY_IRON_ORE :{COMMA} tonelada{P "" s} de mineral de hierro
STR_QUANTITY_STEEL :{COMMA} tonelada{P "" s} de acero
STR_QUANTITY_VALUABLES :{COMMA} bolsa{P "" s} de objetos de valor
STR_QUANTITY_COPPER_ORE :{COMMA} tonelada{P "" s} de mineral de cobre
STR_QUANTITY_MAIZE :{COMMA} tonelada{P "" s} de ma<6D>z
STR_QUANTITY_FRUIT :{COMMA} tonelada{P "" s} de fruta
STR_QUANTITY_DIAMONDS :{COMMA} bolsa{P "" s} de diamantes
STR_QUANTITY_FOOD :{COMMA} tonelada{P "" s} de alimento
STR_QUANTITY_PAPER :{COMMA} tonelada{P "" s} de papel
STR_QUANTITY_GOLD :{COMMA} bolsa{P "" s} de oro
STR_QUANTITY_WATER :{VOLUME} de agua
STR_QUANTITY_WHEAT :{COMMA} tonelada de trigo
STR_QUANTITY_WHEAT :{COMMA} tonelada{P "" s} de trigo
STR_QUANTITY_RUBBER :{VOLUME} de caucho
STR_QUANTITY_SUGAR :{COMMA} tonelada de azucar
STR_QUANTITY_TOYS :{COMMA} juguete
STR_QUANTITY_SWEETS :{COMMA} bolsa de dulces
STR_QUANTITY_SUGAR :{COMMA} tonelada{P "" s} de azucar
STR_QUANTITY_TOYS :{COMMA} juguete{P "" s}
STR_QUANTITY_SWEETS :{COMMA} bolsa{P "" s} de dulces
STR_QUANTITY_COLA :{VOLUME} de cola
STR_QUANTITY_CANDYFLOSS :{COMMA} tonelada de algod<6F>n de az<61>car
STR_QUANTITY_BUBBLES :{COMMA} burbuja
STR_QUANTITY_TOFFEE :{COMMA} tonelada de caramelo
STR_QUANTITY_BATTERIES :{COMMA} pila
STR_QUANTITY_CANDYFLOSS :{COMMA} tonelada{P "" s} de algod<6F>n de az<61>car
STR_QUANTITY_BUBBLES :{COMMA} burbuja{P "" s}
STR_QUANTITY_TOFFEE :{COMMA} tonelada{P "" s} de caramelo{P "" s}
STR_QUANTITY_BATTERIES :{COMMA} pila{P "" s}
STR_QUANTITY_PLASTIC :{VOLUME} de pl<70>stico
STR_QUANTITY_FIZZY_DRINKS :{COMMA} refresco
STR_QUANTITY_FIZZY_DRINKS :{COMMA} refresco{P "" s}
STR_ABBREV_NOTHING :
STR_ABBREV_PASSENGERS :{TINYFONT}PS
STR_ABBREV_COAL :{TINYFONT}CL

View File

@@ -57,7 +57,7 @@ static inline int64 BIGMULS(int32 a, int32 b) {
#define IS_INSIDE_1D(x, base, size) ( (uint)((x) - (base)) < ((uint)(size)) )
#define HASBIT(x,y) ((x) & (1 << (y)))
#define HASBIT(x,y) (((x) & (1 << (y))) != 0)
#define SETBIT(x,y) ((x) |= (1 << (y)))
#define CLRBIT(x,y) ((x) &= ~(1 << (y)))
#define TOGGLEBIT(x,y) ((x) ^= (1 << (y)))
@@ -142,14 +142,20 @@ static inline void swap_int32(int32 *a, int32 *b) { int32 t = *a; *a = *b; *b =
static inline void swap_tile(TileIndex *a, TileIndex *b) { TileIndex t = *a; *a = *b; *b = t; }
static inline uint16 ReadLE16Aligned(const void* x)
{
return FROM_LE16(*(const uint16*)x);
}
#if defined(TTD_LITTLE_ENDIAN)
# define READ_LE_UINT16(b) (*(const uint16*)(b))
#elif defined(TTD_BIG_ENDIAN)
static inline uint16 READ_LE_UINT16(const void *b) {
return ((const byte*)b)[0] + (((const byte*)b)[1] << 8);
}
static inline uint16 ReadLE16Unaligned(const void* x)
{
#ifdef OTTD_ALIGNMENT
return ((const byte*)x)[0] | ((const byte*)x)[1] << 8;
#else
return FROM_LE16(*(const uint16*)x);
#endif
}
/**
* ROtate x Left/Right by n (must be >= 0)

View File

@@ -1237,8 +1237,8 @@ static const Widget _scen_edit_land_gen_widgets[] = {
{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 181, 14, 101, STR_NULL, STR_NULL},
{ WWT_IMGBTN, RESIZE_NONE, 14, 2, 23, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC},
{ WWT_IMGBTN, RESIZE_NONE, 14, 24, 45, 14, 35, SPR_IMG_TERRAFORM_DOWN, STR_018F_RAISE_A_CORNER_OF_LAND},
{ WWT_IMGBTN, RESIZE_NONE, 14, 46, 67, 14, 35, SPR_IMG_TERRAFORM_UP, STR_018E_LOWER_A_CORNER_OF_LAND},
{ WWT_IMGBTN, RESIZE_NONE, 14, 24, 45, 14, 35, SPR_IMG_TERRAFORM_DOWN, STR_018E_LOWER_A_CORNER_OF_LAND},
{ WWT_IMGBTN, RESIZE_NONE, 14, 46, 67, 14, 35, SPR_IMG_TERRAFORM_UP, STR_018F_RAISE_A_CORNER_OF_LAND},
{ WWT_IMGBTN, RESIZE_NONE, 14, 68, 89, 14, 35, SPR_IMG_LEVEL_LAND, STR_LEVEL_LAND_TOOLTIP},
{ WWT_IMGBTN, RESIZE_NONE, 14, 90, 111, 14, 35, SPR_IMG_BUILD_CANAL, STR_CREATE_LAKE},
{ WWT_IMGBTN, RESIZE_NONE, 14, 112, 134, 14, 35, SPR_IMG_ROCKS, STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE},

View File

@@ -1325,7 +1325,7 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
DeleteWindow(w);
} else {
// SLD_SAVE_GAME, SLD_SAVE_SCENARIO copy clicked name to editbox
ttd_strlcpy(WP(w, querystr_d).text.buf, file->name, WP(w, querystr_d).text.maxlength);
ttd_strlcpy(WP(w, querystr_d).text.buf, file->title, WP(w, querystr_d).text.maxlength);
UpdateTextBufferSize(&WP(w, querystr_d).text);
InvalidateWidget(w, 10);
}
@@ -1359,16 +1359,17 @@ static void SaveLoadDlgWndProc(Window *w, WindowEvent *e)
if (HASBIT(w->click_state, 11)) { /* Delete button clicked */
if (!FiosDelete(WP(w,querystr_d).text.buf)) {
ShowErrorMessage(INVALID_STRING_ID, STR_4008_UNABLE_TO_DELETE_FILE, 0, 0);
} else {
BuildFileList();
/* Reset file name to current date on successfull delete */
if (_saveload_mode == SLD_SAVE_GAME) GenerateFileName();
}
UpdateTextBufferSize(&WP(w, querystr_d).text);
SetWindowDirty(w);
BuildFileList();
if (_saveload_mode == SLD_SAVE_GAME) {
GenerateFileName(); /* Reset file name to current date */
UpdateTextBufferSize(&WP(w, querystr_d).text);
}
} else if (HASBIT(w->click_state, 12)) { /* Save button clicked */
_switch_mode = SM_SAVE;
FiosMakeSavegameName(_file_to_saveload.name, WP(w,querystr_d).text.buf);
FiosMakeSavegameName(_file_to_saveload.name, WP(w,querystr_d).text.buf, sizeof(_file_to_saveload.name));
/* In the editor set up the vehicle engines correctly (date might have changed) */
if (_game_mode == GM_EDITOR) StartupEngines();

View File

@@ -15,7 +15,7 @@
extern const char _openttd_revision[];
#elif defined(WITH_REV_HACK)
#define WITH_REV
const char _openttd_revision[] = WITH_REV_HACK;
const char _openttd_revision[] = "0.4.6";
#else
const char _openttd_revision[] = NOREV_STRING;
#endif

View File

@@ -3,7 +3,7 @@
#ifndef NETWORK_H
#define NETWORK_H
#define NOREV_STRING "norev000"
#define NOREV_STRING "0.4.6-norev000"
#ifdef ENABLE_NETWORK

View File

@@ -11,7 +11,7 @@
#ifdef ENABLE_NETWORK
#ifdef __APPLE__
#if defined(__APPLE__)
#include <AvailabilityMacros.h>
#if (MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_2)
// OSX 10.2 don't have socklen_t defined, so we will define it here

View File

@@ -1225,8 +1225,9 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
h = ClientListPopupHeigth();
// Allocate the popup
w = AllocateWindow(x, y, 100, h + 1, ClientListPopupWndProc, WC_TOOLBAR_MENU, _client_list_popup_widgets);
w = AllocateWindow(x, y, 150, h + 1, ClientListPopupWndProc, WC_TOOLBAR_MENU, _client_list_popup_widgets);
w->widget[0].bottom = w->widget[0].top + h;
w->widget[0].right = w->widget[0].left + 150;
w->flags4 &= ~WF_WHITE_BORDER_MASK;
WP(w,menu_d).item_count = 0;
@@ -1257,7 +1258,7 @@ static void ClientListPopupWndProc(Window *w, WindowEvent *e)
if (_clientlist_proc[i] == NULL) continue;
if (sel-- == 0) { // Selected item, highlight it
GfxFillRect(1, y, 98, y + CLNWND_ROWSIZE - 1, 0);
GfxFillRect(1, y, 150 - 2, y + CLNWND_ROWSIZE - 1, 0);
colour = 0xC;
} else colour = 0x10;
@@ -1328,9 +1329,9 @@ static void ClientListWndProc(Window *w, WindowEvent *e)
// Filter out spectators
if (ci->client_playas > 0 && ci->client_playas <= MAX_PLAYERS)
DrawPlayerIcon(ci->client_playas - 1, 44, y + 1);
DrawPlayerIcon(ci->client_playas - 1, 64, y + 1);
DoDrawString(ci->client_name, 61, y, colour);
DoDrawString(ci->client_name, 81, y, colour);
y += CLNWND_ROWSIZE;
}

View File

@@ -961,7 +961,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_ACK)
if (_network_pause_on_join) {
DoCommandP(0, 0, 0, NULL, CMD_PAUSE);
NetworkServer_HandleChat(NETWORK_ACTION_CHAT, DESTTYPE_BROADCAST, 0, "Game unpaused", NETWORK_SERVER_INDEX);
NetworkServer_HandleChat(NETWORK_ACTION_CHAT, DESTTYPE_BROADCAST, 0, "Game unpaused (client connected)", NETWORK_SERVER_INDEX);
}
}

View File

@@ -7,6 +7,7 @@
#include "table/sprites.h"
#include "table/strings.h"
#include "window.h"
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
#include "news.h"
@@ -595,6 +596,7 @@ static void MessageHistoryWndProc(Window *w, WindowEvent *e)
int y = 19;
byte p, show;
SetVScrollCount(w, _total_news);
DrawWindowWidgets(w);
if (_total_news == 0) break;

68
npf.c
View File

@@ -501,7 +501,7 @@ static void NPFFollowTrack(AyStar* aystar, OpenListNode* current)
TileIndex src_tile = current->path.node.tile;
DiagDirection src_exitdir = TrackdirToExitdir(src_trackdir);
FindLengthOfTunnelResult flotr;
TileIndex dst_tile;
TileIndex dst_tile = INVALID_TILE;
int i;
TrackdirBits trackdirbits, ts;
TransportType type = aystar->user_data[NPF_TYPE];
@@ -517,40 +517,46 @@ static void NPFFollowTrack(AyStar* aystar, OpenListNode* current)
* so we should skip it's body */
flotr = FindLengthOfTunnel(src_tile, src_exitdir);
dst_tile = flotr.tile;
} else {
if (type != TRANSPORT_WATER && (IsRoadStationTile(src_tile) || IsTileDepotType(src_tile, type))){
/* This is a road station or a train or road depot. We can enter and exit
* those from one side only. Trackdirs don't support that (yet), so we'll
* do this here. */
} else if (type != TRANSPORT_WATER && (IsRoadStationTile(src_tile) || IsTileDepotType(src_tile, type))) {
/* This is a road station or a train or road depot. We can enter and exit
* those from one side only. Trackdirs don't support that (yet), so we'll
* do this here. */
DiagDirection exitdir;
/* Find out the exit direction first */
if (IsRoadStationTile(src_tile))
exitdir = GetRoadStationDir(src_tile);
else /* Train or road depot. Direction is stored the same for both, in map5 */
exitdir = GetDepotDirection(src_tile, type);
/* Let's see if were headed the right way into the depot, and reverse
* otherwise (only for trains, since only with trains you can
* (sometimes) reach tiles after reversing that you couldn't reach
* without reversing. */
if (src_trackdir == DiagdirToDiagTrackdir(ReverseDiagdir(exitdir)) && type == TRANSPORT_RAIL)
/* We are headed inwards. We can only reverse here, so we'll not
* consider this direction, but jump ahead to the reverse direction.
* It would be nicer to return one neighbour here (the reverse
* trackdir of the one we are considering now) and then considering
* that one to return the tracks outside of the depot. But, because
* the code layout is cleaner this way, we will just pretend we are
* reversed already */
src_trackdir = ReverseTrackdir(src_trackdir);
DiagDirection exitdir;
/* Find out the exit direction first */
if (IsRoadStationTile(src_tile)) {
exitdir = GetRoadStationDir(src_tile);
} else { /* Train or road depot. Direction is stored the same for both, in map5 */
exitdir = GetDepotDirection(src_tile, type);
}
/* Let's see if were headed the right way into the depot */
if (src_trackdir == DiagdirToDiagTrackdir(ReverseDiagdir(exitdir))) {
/* We are headed inwards. We cannot go through the back of the depot.
* For rail, we can now reverse. Reversing for road vehicles is never
* useful, since you cannot take paths you couldn't take before
* reversing (as with rail). */
if (type == TRANSPORT_RAIL) {
/* We can only reverse here, so we'll not consider this direction, but
* jump ahead to the reverse direction. It would be nicer to return
* one neighbour here (the reverse trackdir of the one we are
* considering now) and then considering that one to return the tracks
* outside of the depot. But, because the code layout is cleaner this
* way, we will just pretend we are reversed already */
src_trackdir = ReverseTrackdir(src_trackdir);
dst_tile = AddTileIndexDiffCWrap(src_tile, TileIndexDiffCByDir(exitdir));
} else {
dst_tile = INVALID_TILE; /* Road vehicle heading inwards: dead end */
}
}
} else {
/* This a normal tile, a bridge, a tunnel exit, etc. */
dst_tile = AddTileIndexDiffCWrap(src_tile, TileIndexDiffCByDir(TrackdirToExitdir(src_trackdir)));
if (dst_tile == INVALID_TILE) {
/* We reached the border of the map */
/* TODO Nicer control flow for this */
return;
}
}
if (dst_tile == INVALID_TILE) {
/* We reached the border of the map */
/* TODO Nicer control flow for this */
return;
}
/* I can't enter a tunnel entry/exit tile from a tile above the tunnel. Note

View File

@@ -42,7 +42,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /Gr /Zp4 /W3 /Zi /Ox /Oa /Ow /Og /Oi /Os /Gf /Gy /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "WIN32_EXCEPTION_TRACKER" /D "WIN32_ENABLE_DIRECTMUSIC_SUPPORT" /D "WITH_PNG" /D "WITH_ZLIB" /D "ENABLE_NETWORK" /FAcs /FR /Yu"stdafx.h" /J /FD /c
# ADD CPP /nologo /Gr /Zp4 /MT /W3 /Zi /Ox /Oa /Ow /Og /Oi /Os /Gf /Gy /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "WIN32_EXCEPTION_TRACKER" /D "WIN32_ENABLE_DIRECTMUSIC_SUPPORT" /D "WITH_PNG" /D "WITH_ZLIB" /D "ENABLE_NETWORK" /D "WITH_REV_HACK" /FAcs /FR /Yu"stdafx.h" /J /FD /c
# SUBTRACT CPP /WX /Ot
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
@@ -68,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "WITH_PNG" /D "WITH_ZLIB" /D "ENABLE_NETWORK" /D "WIN32_ENABLE_DIRECTMUSIC_SUPPORT" /YX"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "WITH_PNG" /D "WITH_ZLIB" /D "ENABLE_NETWORK" /D "WIN32_ENABLE_DIRECTMUSIC_SUPPORT" /D "WITH_REV_HACK" /YX"stdafx.h" /FD /GZ /c
# SUBTRACT CPP /WX /Fr
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"

View File

@@ -23,15 +23,15 @@
Name="VCCLCompilerTool"
Optimization="3"
GlobalOptimizations="TRUE"
InlineFunctionExpansion="1"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="TRUE"
FavorSizeOrSpeed="2"
OmitFramePointers="TRUE"
OptimizeForProcessor="1"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;ENABLE_NETWORK;WITH_REV_HACK"
StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="4"
RuntimeLibrary="0"
StructMemberAlignment="3"
BufferSecurityCheck="FALSE"
EnableFunctionLevelLinking="TRUE"
@@ -58,9 +58,8 @@
OutputFile=".\Release/openttd.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Release/openttd.pdb"
GenerateMapFile="TRUE"
MapFileName=".\Release/openttd.map"
SubSystem="2"
OptimizeReferences="2"
OptimizeForWindows98="1"
@@ -101,9 +100,9 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;ENABLE_NETWORK"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;ENABLE_NETWORK;WITH_REV_HACK"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="stdafx.h"
PrecompiledHeaderFile=".\Debug/openttd.pch"

View File

@@ -3,12 +3,18 @@ openttd for Debian
To properly play this game, original data files are needed.
You should copy the data files from the original TTD into the data directory
(/usr/share/games/openttd/data). You should copy all .grf files there.
(/usr/share/games/openttd/data). You should copy these files:
* trg1r.grf
* trgcr.grf
* trghr.grf
* trgir.grf
* trgtr.grf
* sample.cat
-Music
For in game music (optional), you should copy all files in the data/gm
folder of your ttd installation to /usr/share/games/openttd/gm. You
should also install timdity and a soundfont (freepats is packaged in
For in game music (optional), you should copy all files in the gm/
subdir of your ttd installation to /usr/share/games/openttd/gm. You
should also install timidity and a soundfont (freepats is packaged in
debian and works out of the box).
Don't forget to use -m extmidi if you want music, and if you have

View File

@@ -1,8 +1,46 @@
openttd (0.4.6-1) unstable; urgency=low
* Remove old terminal messages and make sure that debconf is always called.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Thu, 9 Mar 2006 00:04:33 +0100
openttd (0.4.5-1) unstable; urgency=low
* New upstream release
* Bump Standards-Version to 3.6.2
* s/timdity/timidity/ in README.Debian.
* Use debconf for prompting instead of terminal.
* Fix makefile to create icon dir if necessary.
* Fix syntax error in manpage.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Wed, 1 Feb 2006 01:56:39 +0100
openttd (0.4.0.1-5) unstable; urgency=low
* Fixed capitalization of menu item.
* Install xpm icon to /usr/share/pixmaps and don't install png icon, since
it is not used.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Thu, 22 Sep 2005 10:35:09 +0200
openttd (0.4.0.1-4) unstable; urgency=low
* Changelog was distributed twice.
* Put openttd in contrib.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Mon, 19 Sep 2005 23:49:18 +0200
openttd (0.4.0.1-3) unstable; urgency=low
* Clarified installing instructions in README.Debian
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Thu, 16 Jun 2005 03:51:13 +0200
openttd (0.4.0.1-2) unstable; urgency=low
* Added Suggests: timidity, freepats
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Fri, 27 May 2005 02:19:24 +0200
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Thu, 16 Jun 2005 03:34:03 +0200
openttd (0.4.0.1-1) unstable; urgency=low

21
os/debian/config Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/sh
# Source debconf library.
. /usr/share/debconf/confmodule
FILES="trg1r.grf trgcr.grf trghr.grf trgir.grf trgtr.grf sample.cat"
DATADIR=/usr/share/games/openttd/data
MISSING="No";
for FILE in $FILES; do
# Check if all the files needed are here.
if [ ! -e $DATADIR/$FILE ]; then
MISSING="Yes";
break;
fi;
done;
if [ $MISSING = "Yes" ]; then
db_input high openttd/datafiles || true
db_go
fi;

View File

@@ -1,16 +1,19 @@
Source: openttd
Section: games
Section: contrib/games
Priority: optional
Maintainer: Matthijs Kooijman <m.kooijman@student.utwente.nl>
Build-Depends: debhelper (>= 4.0.0), libsdl-dev, zlib1g-dev, libpng-dev
Standards-Version: 3.6.0
Standards-Version: 3.6.2
Package: openttd
Architecture: any
Depends: ${shlibs:Depends}
Depends: ${shlibs:Depends}, debconf
Suggests: timidity, freepats
Description: open source clone of the Microprose game "Transport Tycoon Deluxe"
An enhanced open source clone of the Microprose game "Transport Tycoon Deluxe".
Description: reimplementation of Transport Tycoon Deluxe with enhancements
A reimplementation of the Microprose game "Transport Tycoon Deluxe" with lots
of new features and enhancements.
You require the data files of the original Transport Tycoon Deluxe
for Windows to play the game. You have to MANUALLY copy them to the
game data directory! (see README.Debian for details)
.
Homepage: http://www.openttd.org/

View File

@@ -5,21 +5,21 @@ It was downloaded from http://sourceforge.net/projects/openttd
Upstream Author: Ludvig Strigeus (ludde) and many others
Copyright:
License:
This package is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 dated June, 1991.
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This package is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

View File

@@ -1,4 +1,3 @@
changelog.txt
readme.txt
docs/Manual.txt
docs/multiplayer.txt

View File

@@ -1,2 +1,2 @@
?package(openttd):needs="X11" section="Games/Simulation" title="Openttd"\
command="/usr/games/openttd" icon="/usr/share/games/openttd/openttd.32.xpm"
?package(openttd):needs="X11" section="Games/Simulation" title="OpenTTD"\
command="/usr/games/openttd" icon="/usr/share/pixmaps/openttd.32.xpm"

0
os/debian/patches/00list Normal file
View File

View File

@@ -5,6 +5,7 @@
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
@@ -17,12 +18,10 @@ set -e
# the debian-policy package
#
. /usr/share/debconf/confmodule
case "$1" in
configure)
cat <<EOF
Before running the game, you should copy the data files from the
original TTD. See README.Debian for more details.
EOF
;;
abort-upgrade|abort-remove|abort-deconfigure)

View File

@@ -20,10 +20,6 @@ set -e
case "$1" in
purge|remove)
cat <<EOF
Don't forget to remove any existing data files from
/usr/share/games/openttd!
EOF
;;
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)

View File

@@ -6,20 +6,9 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
include /usr/share/dpatch/dpatch.make
#not supported by openttd makefile
#CFLAGS = -Wall -g
#
#ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
# CFLAGS += -O0
#else
# CFLAGS += -O2
#endif
#ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
# INSTALL_PROGRAM += -s
#endif
configure: configure-stamp
configure: patch configure-stamp
configure-stamp:
dh_testdir
# Add here commands to configure the package.
@@ -28,20 +17,19 @@ configure-stamp:
build: build-stamp
build-stamp: configure-stamp
build-stamp: configure-stamp
dh_testdir
# Add here commands to compile the package.
rm Makefile.config || true
$(MAKE) PREFIX=/usr MIDI=/usr/bin/timidity INSTALL=1 BINARY_DIR=games DATA_DIR=share/games/openttd PERSONAL_DIR=.openttd USE_HOMEDIR=1
$(MAKE) PREFIX=/usr MIDI=/usr/bin/timidity INSTALL=1 BINARY_DIR=games DATA_DIR=share/games/openttd ICON_DIR=share/pixmaps PERSONAL_DIR=.openttd USE_HOMEDIR=1
#/usr/bin/docbook-to-man debian/openttd.sgml > openttd.1
touch build-stamp
clean:
clean: unpatch
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
@@ -74,7 +62,7 @@ binary-arch: build install
dh_installexamples
# dh_install
dh_installmenu
# dh_installdebconf
dh_installdebconf
# dh_installlogrotate
# dh_installemacsen
# dh_installpam

6
os/debian/templates Normal file
View File

@@ -0,0 +1,6 @@
Template: openttd/datafiles
Type: note
Description: You need to install data files.
OpenTTD needs the datafiles from the original TTD game to run. You should
install these datafiles before you can play the game. See README.Debian for
more details on which files need to be copied where.

View File

@@ -5,7 +5,7 @@
#------------------------------------------------------------------------------
%define name openttd
%define version 0.3.6
%define version 0.4.6
%define release 1mdk
#------------------------------------------------------------------------------

View File

@@ -52,7 +52,7 @@ release: all
$(Q)mkdir -p "OpenTTD $(RELEASE)"/docs
$(Q)mkdir -p "OpenTTD $(RELEASE)"/scenario
$(Q)cp -R $(OSXAPP) "OpenTTD $(RELEASE)"/
$(Q)cp docs/OSX_where_did_the_package_go.txt "OpenTTD $(RELEASE)"/Where\ did\ the\ package\ go.txt
$(Q)cp docs/OSX_install_instructions.txt "OpenTTD $(RELEASE)"/How\ to\ install\ (please\ read).txt
$(Q)cp readme.txt "OpenTTD $(RELEASE)"/docs/
$(Q)cp docs/README_if_game_crashed_on_OSX.txt "OpenTTD $(RELEASE)"/docs/readme\ if\ crashed\ on\ OSX.txt
$(Q)cp docs/console.txt "OpenTTD $(RELEASE)"/docs/

View File

@@ -108,3 +108,16 @@ $(error no x86 libpng found)
LDFLAGS:= $(LDFLAGS_PPC)
endif
endif
# setting up flags to make a binary, that fits the system it builds on
ifndef FAT_BINARY
ifndef JAGUAR
ifeq ($(shell uname), Darwin)
# it's a hardware mac, not crosscompiling
ifeq ($(shell uname -r), 6.8)
# OSX 10.2.8 uses Darwin 6.8, so we better set JAGUAR so we avoid the stuff that was added in 10.3 or later
JAGUAR:=1
endif
endif
endif
endif

View File

@@ -1,8 +1,8 @@
; Define your application name
!define APPNAME "OpenTTD"
!define APPNAMEANDVERSION "OpenTTD 0.4.5.0"
!define APPVERSION "0.4.5.0"
!define INSTALLERVERSION 17 ;NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPNAMEANDVERSION "OpenTTD 0.4.6.0"
!define APPVERSION "0.4.6.0"
!define INSTALLERVERSION 18 ;NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define MUI_ICON "..\..\..\openttd.ico"
!define MUI_UNICON "..\..\..\openttd.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp"

6
os2.c
View File

@@ -401,7 +401,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot)
return STR_4006_UNABLE_TO_READ_DRIVE;
}
void FiosMakeSavegameName(char *buf, const char *name)
void FiosMakeSavegameName(char *buf, const char *name, size_t size)
{
const char* extension;
const char* period;
@@ -415,14 +415,14 @@ void FiosMakeSavegameName(char *buf, const char *name)
period = strrchr(name, '.');
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
sprintf(buf, "%s\\%s%s", _fios_path, name, extension);
snprintf(buf, size, "%s\\%s%s", _fios_path, name, extension);
}
bool FiosDelete(const char *name)
{
char path[512];
snprintf(path, lengthof(path), "%s\\%s", _fios_path, name);
FiosMakeSavegameName(path, name, sizeof(path));
return unlink(path) == 0;
}

View File

@@ -46,7 +46,7 @@ BEGIN
PUSHBUTTON "&Close",12,7,49,50,14
PUSHBUTTON "&Submit report",14,81,49,68,14,WS_DISABLED
PUSHBUTTON "&Emergency save",13,155,49,68,14
PUSHBUTTON "",15,243,49,55,14,WS_DISABLED
PUSHBUTTON "",15,243,49,55,14
EDITTEXT 11,7,70,291,118,ES_MULTILINE | ES_READONLY | WS_VSCROLL |
WS_HSCROLL | NOT WS_TABSTOP
LTEXT "",10,36,7,262,34
@@ -61,8 +61,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,4,5,0
PRODUCTVERSION 0,4,5,0
FILEVERSION 0,4,6,0
PRODUCTVERSION 0,4,6,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -80,7 +80,7 @@ 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.4.5.0\0"
VALUE "FileVersion", "0.4.6.0\0"
VALUE "InternalName", "openttd\0"
VALUE "LegalCopyright", "Copyright <20> OpenTTD Developers 2002-2006. All Rights Reserved.\0"
VALUE "LegalTrademarks", "\0"

View File

@@ -388,8 +388,8 @@ void FollowTrack(TileIndex tile, uint16 flags, byte direction, TPFEnumProc *enum
tpf.var2 = HASBIT(flags, 15) ? 0x43 : 0xFF; /* 0x8000 */
tpf.disable_tile_hash = HASBIT(flags, 12) != 0; /* 0x1000 */
tpf.hasbit_13 = HASBIT(flags, 13) != 0; /* 0x2000 */
tpf.disable_tile_hash = HASBIT(flags, 12); /* 0x1000 */
tpf.hasbit_13 = HASBIT(flags, 13); /* 0x2000 */
tpf.tracktype = (byte)flags;

View File

@@ -629,7 +629,7 @@ byte GetPlayerRailtypes(PlayerID p)
const EngineInfo *ei = &_engine_info[i];
if (e->type == VEH_Train && HASBIT(ei->climates, _opt.landscape) &&
(HASBIT(e->player_avail, p) || e->intro_date <= _date) &&
(HASBIT(e->player_avail, p) || _date >= (e->intro_date + 365)) &&
!(RailVehInfo(i)->flags & RVI_WAGON)) {
assert(e->railtype < RAILTYPE_END);
SETBIT(rt, e->railtype);

2
rail.h
View File

@@ -552,7 +552,7 @@ static inline SignalType GetSignalType(TileIndex tile, Track track)
static inline bool HasSemaphores(TileIndex tile, Track track)
{
assert(IsValidTrack(track));
return (_m[tile].m4 & SIG_SEMAPHORE_MASK);
return (_m[tile].m4 & SIG_SEMAPHORE_MASK) != 0;
}
/**

View File

@@ -128,7 +128,7 @@ static bool CheckTrackCombination(TileIndex tile, TrackBits to_build, uint flags
}
static const byte _valid_tileh_slopes[4][15] = {
const TrackBits _valid_tileh_slopes[4][15] = {
// set of normal ones
{
@@ -395,6 +395,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
TileIndex tile;
byte m5;
int32 cost = _price.remove_rail;
bool crossing = false;
if (!ValParamTrackOrientation(p2)) return CMD_ERROR;
trackbit = TrackToTrackBits(track);
@@ -451,10 +452,11 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_m[tile].m5 = m5;
SetTileOwner(tile, _m[tile].m3);
_m[tile].m2 = 0;
break;
case MP_RAILWAY:
case MP_RAILWAY: {
TrackBits present;
if (!IsPlainRailTile(tile))
return CMD_ERROR;
@@ -462,6 +464,10 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!(GetTrackBits(tile) & trackbit))
return CMD_ERROR;
present = GetTrackBits(tile);
if ((present & trackbit) == 0) return CMD_ERROR;
if (present == (TRACK_BIT_DIAG1 | TRACK_BIT_DIAG2)) crossing = true;
/* Charge extra to remove signals on the track, if they are there */
if (HasSignalOnTrack(tile, track))
cost += DoCommand(x, y, track, 0, flags, CMD_REMOVE_SIGNALS);
@@ -479,13 +485,26 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
goto skip_mark_dirty;
}
break;
}
default:
assert(0);
}
/* mark_dirty */
MarkTileDirtyByTile(tile);
if (flags & DC_EXEC) {
MarkTileDirtyByTile(tile);
if (crossing) {
/* crossing is set when only TRACK_BIT_X and TRACK_BIT_Y are set. As we
* are removing one of these pieces, we'll need to update signals for
* both directions explicitly, as after the track is removed it won't
* 'connect' with the other piece. */
SetSignalsOnBothDir(tile, TRACK_DIAG1);
SetSignalsOnBothDir(tile, TRACK_DIAG2);
} else {
SetSignalsOnBothDir(tile, track);
}
}
skip_mark_dirty:;

View File

@@ -291,8 +291,8 @@ static void BuildRailClick_Remove(Window *w)
SndPlayFx(SND_15_BEEP);
TOGGLEBIT(w->click_state, 16);
_remove_button_clicked = HASBIT(w->click_state, 16) != 0;
SetSelectionRed(HASBIT(w->click_state, 16) != 0);
_remove_button_clicked = HASBIT(w->click_state, 16);
SetSelectionRed(HASBIT(w->click_state, 16));
// handle station builder
if (HASBIT(w->click_state, 16)) {

View File

@@ -1,6 +1,6 @@
OpenTTD README
Last updated: 2006-01-31
Release version: 0.4.5
Last updated: 2006-03-22
Release version: 0.4.6
------------------------------------------------------------------------

View File

@@ -1009,7 +1009,7 @@ static void TileLoop_Road(TileIndex tile)
!(DistanceManhattan(t->xy, tile) >= 8 && grp == 0) &&
(_m[tile].m5==5 || _m[tile].m5==10)) {
if (GetTileSlope(tile, NULL) == 0 && EnsureNoVehicle(tile) && CHANCE16(1,20)) {
_m[tile].m4 |= (GB(_m[tile].m4, 4, 3) <= 2 ? 7 : 6) << 4;
SB(_m[tile].m4, 4, 3, (GB(_m[tile].m4, 4, 3) <= 1 ? 6 : 7));
SndPlayTileFx(SND_21_JACKHAMMER, tile);
CreateEffectVehicleAbove(

View File

@@ -158,7 +158,7 @@ static void BuildRoadClick_Remove(Window *w)
SetWindowDirty(w);
SndPlayFx(SND_15_BEEP);
TOGGLEBIT(w->click_state, 11);
SetSelectionRed(HASBIT(w->click_state, 11) != 0);
SetSelectionRed(HASBIT(w->click_state, 11));
}
static void BuildRoadClick_Landscaping(Window *w)

View File

@@ -634,7 +634,8 @@ static void ProcessRoadVehOrder(Vehicle *v)
st = GetStation(order->station);
{
uint mindist = 0xFFFFFFFF;
TileIndex dest;
uint mindist;
RoadStopType type;
RoadStop *rs;
@@ -649,12 +650,17 @@ static void ProcessRoadVehOrder(Vehicle *v)
return;
}
for (rs = GetPrimaryRoadStop(st, type); rs != NULL; rs = rs->next) {
if (DistanceManhattan(v->tile, rs->xy) < mindist) {
v->dest_tile = rs->xy;
dest = rs->xy;
mindist = DistanceManhattan(v->tile, rs->xy);
for (rs = rs->next; rs != NULL; rs = rs->next) {
uint dist = DistanceManhattan(v->tile, rs->xy);
if (dist < mindist) {
mindist = dist;
dest = rs->xy;
}
}
v->dest_tile = dest;
}
} else if (order->type == OT_GOTO_DEPOT) {
v->dest_tile = GetDepot(order->station)->xy;
@@ -1006,17 +1012,15 @@ static int RoadFindPathToDest(Vehicle *v, TileIndex tile, int enterdir)
/* Road depot */
bitmask |= _road_veh_fp_ax_or[GB(_m[tile].m5, 0, 2)];
}
} else if (IsTileType(tile, MP_STATION)) {
if (IsTileOwner(tile, OWNER_NONE) || IsTileOwner(tile, v->owner)) {
} else if (IsTileType(tile, MP_STATION) && IsRoadStationTile(tile)) {
if (IsTileOwner(tile, v->owner)) {
/* Our station */
const Station* st = GetStation(_m[tile].m2);
byte val = _m[tile].m5;
if (v->cargo_type != CT_PASSENGERS) {
if (IS_BYTE_INSIDE(val, 0x43, 0x47) && (_patches.roadveh_queue || st->truck_stops->status&3))
bitmask |= _road_veh_fp_ax_or[(val-0x43)&3];
} else {
if (IS_BYTE_INSIDE(val, 0x47, 0x4B) && (_patches.roadveh_queue || st->bus_stops->status&3))
bitmask |= _road_veh_fp_ax_or[(val-0x47)&3];
RoadStopType rstype = (v->cargo_type == CT_PASSENGERS) ? RS_BUS : RS_TRUCK;
if (GetRoadStopType(tile) == rstype) {
const RoadStop *rs = GetRoadStopByTile(tile, rstype);
if (rs != NULL && (_patches.roadveh_queue || GB(rs->status, 0, 2) != 0)) {
bitmask |= _road_veh_fp_ax_or[GetRoadStationDir(tile)];
}
}
}
}

View File

@@ -1243,6 +1243,12 @@ extern bool AfterLoadGame(void);
extern void BeforeSaveGame(void);
extern bool LoadOldSaveGame(const char *file);
#if defined(__APPLE__) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
extern const char *convert_to_fs_charset(const char *filename);
#else
#define convert_to_fs_charset(str) (str)
#endif
/** Small helper function to close the to be loaded savegame an signal error */
static inline SaveOrLoadResult AbortSaveLoad(void)
{
@@ -1347,7 +1353,6 @@ void WaitTillSaved(void)
save_thread = NULL;
}
/**
* Main Save or Load function where the high-level saveload functions are
* handled. It opens the savegame, selects format and checks versions
@@ -1378,7 +1383,11 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode)
return SL_OK;
}
_sl.fh = fopen(filename, (mode == SL_SAVE) ? "wb" : "rb");
if(mode == SL_SAVE) {
_sl.fh = fopen(convert_to_fs_charset(filename), "wb");
} else {
_sl.fh = fopen(filename, "rb");
}
if (_sl.fh == NULL) {
DEBUG(misc, 0) ("Cannot open savegame for saving/loading.");
return SL_ERROR;

View File

@@ -12,6 +12,12 @@
#include "screenshot.h"
#include "variables.h"
#if defined(__APPLE__) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
extern const char *convert_to_fs_charset(const char *filename);
#else
#define convert_to_fs_charset(str) (str)
#endif
char _screenshot_format_name[8];
uint _num_screenshot_formats;
uint _cur_screenshot_format;
@@ -73,7 +79,7 @@ static bool MakeBmpImage(const char *name, ScreenshotCallback *callb, void *user
if (pixelformat != 8)
return false;
f = fopen(name, "wb");
f = fopen(convert_to_fs_charset(name), "wb");
if (f == NULL) return false;
// each scanline must be aligned on a 32bit boundary
@@ -177,7 +183,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
if (pixelformat != 8)
return false;
f = fopen(name, "wb");
f = fopen(convert_to_fs_charset(name), "wb");
if (f == NULL) return false;
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (char *)name, png_my_error, png_my_warning);
@@ -288,7 +294,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
if (pixelformat != 8 || w == 0)
return false;
f = fopen(name, "wb");
f = fopen(convert_to_fs_charset(name), "wb");
if (f == NULL) return false;
memset(&pcx, 0, sizeof(pcx));

View File

@@ -777,7 +777,7 @@ static const SettingDesc network_settings[] = {
{"sync_freq", SDT_UINT16 | SDT_NOSAVE, (void*)100, &_network_sync_freq, NULL},
{"frame_freq", SDT_UINT8 | SDT_NOSAVE, (void*)0, &_network_frame_freq, NULL},
{"max_join_time", SDT_UINT16, (void*)500, &_network_max_join_time, NULL},
{"pause_on_join", SDT_BOOL, (void*)false, &_network_pause_on_join, NULL},
{"pause_on_join", SDT_BOOL, (void*)true, &_network_pause_on_join, NULL},
{"server_bind_ip", SDT_STRINGBUF | (lengthof(_network_server_bind_ip_host) << 16), "0.0.0.0", &_network_server_bind_ip_host, NULL},
{"server_port", SDT_UINT, (void*)NETWORK_DEFAULT_PORT, &_network_server_port, NULL},
{"server_advertise",SDT_BOOL, (void*)false, &_network_advertise, NULL},

View File

@@ -193,7 +193,7 @@ static const uint16 * const _legend_table[] = {
_legend_industries_candy,
};
#if defined(TTD_ALIGNMENT_4)
#if defined(OTTD_ALIGNMENT)
static inline void WRITE_PIXELS(Pixel* d, uint32 val)
{
# if defined(TTD_BIG_ENDIAN)

View File

@@ -202,7 +202,7 @@ void StationPickerDrawSprite(int x, int y, RailType railtype, int image);
uint32 GetCustomStationRelocation(const StationSpec *spec, const Station *st, byte ctype);
RoadStop * GetRoadStopByTile(TileIndex tile, RoadStopType type);
static inline int GetRoadStopType(TileIndex tile)
static inline RoadStopType GetRoadStopType(TileIndex tile)
{
return (_m[tile].m5 < 0x47) ? RS_TRUCK : RS_BUS;
}

View File

@@ -2111,7 +2111,7 @@ void StationPickerDrawSprite(int x, int y, RailType railtype, int image)
static uint GetSlopeZ_Station(const TileInfo* ti)
{
return (ti->tileh != 0) ? ti->z + 8 : ti->z;
return ti->z + (ti->tileh == 0 ? 0 : 8);
}
static uint GetSlopeTileh_Station(const TileInfo *ti)

View File

@@ -82,8 +82,6 @@
# define CDECL
# define NOT_REACHED() assert(0)
# define GCC_PACK
# undef TTD_ALIGNMENT_4
# undef TTD_ALIGNMENT_2
# include <malloc.h>
#endif /* __WATCOMC__ */
@@ -101,6 +99,12 @@
# pragma warning(disable: 4018) // 'expression' : signed/unsigned mismatch
# pragma warning(disable: 4305) // 'identifier' : truncation from 'type1' to 'type2'
# endif /* _MSC_VER < 1300 */
# if _MSC_VER >= 1400 // MSVC 2005 safety checks
# pragma warning(disable: 4996) // 'strdup' was declared deprecated
# define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
# pragma comment(linker, "/NODEFAULTLIB:LIBC.LIB")
// allow linking to non-recompiled libs
# endif /* _MSC_VER >= 1400 */
# include <malloc.h> // alloca()
# define NORETURN __declspec(noreturn)
@@ -133,8 +137,6 @@
# endif
# endif /* _MSC_VER < 1300 */
# undef TTD_ALIGNMENT_4
# undef TTD_ALIGNMENT_2
# define GCC_PACK
// This is needed to zlib uses the stdcall calling convention on visual studio, also used with libpng (VS6 warning)
@@ -193,10 +195,13 @@ typedef unsigned char byte;
typedef unsigned __int64 uint64;
#endif /* __BEOS__ */
#if defined(ARM) || defined(__arm__) || defined(__alpha__)
# define OTTD_ALIGNMENT
#endif
// Setup alignment and conversion macros
#if defined(TTD_BIG_ENDIAN)
# define TTD_ALIGNMENT_2
# define TTD_ALIGNMENT_4
# define OTTD_ALIGNMENT
static inline uint32 TO_LE32(uint32 x) { return BSWAP32(x); }
static inline uint16 TO_LE16(uint16 x) { return BSWAP16(x); }
static inline uint32 FROM_LE32(uint32 x) { return BSWAP32(x); }

View File

@@ -499,8 +499,8 @@ static char *FormatString(char *buff, const char *str, const int32 *argv, uint c
break;
case 0x81: // {STRINL}
buff = GetStringWithArgs(buff, ReadLE16Unaligned(str), argv);
str += 2;
buff = GetStringWithArgs(buff, READ_LE_UINT16(str-2), argv);
break;
case 0x82: // {DATE_LONG}
buff = FormatYmdString(buff, GetInt32(&argv));
@@ -1013,7 +1013,7 @@ bool ReadLanguagePack(int lang_index)
#if defined(TTD_BIG_ENDIAN)
for (i = 0; i != 32; i++) {
lang_pack->offsets[i] = READ_LE_UINT16(&lang_pack->offsets[i]);
lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]);
}
#endif

42
tile.c
View File

@@ -15,6 +15,30 @@ uint GetMapExtraBits(TileIndex tile)
return GB(_m[tile].extra, 0, 2);
}
/** Converts the heights of 4 corners into a tileh, and returns the minimum height of the tile
* @param n,w,e,s the four corners
* @param h uint pointer to write the height to
* @return the tileh
*/
uint GetTileh(uint n, uint w, uint e, uint s, uint *h)
{
uint min = n;
uint r;
if (min >= w) min = w;
if (min >= e) min = e;
if (min >= s) min = s;
r = 0;
if ((n -= min) != 0) r += (--n << 4) + 8;
if ((e -= min) != 0) r += (--e << 4) + 4;
if ((s -= min) != 0) r += (--s << 4) + 2;
if ((w -= min) != 0) r += (--w << 4) + 1;
if (h != NULL) *h = min * 8;
return r;
}
uint GetTileSlope(TileIndex tile, uint *h)
{
@@ -22,8 +46,6 @@ uint GetTileSlope(TileIndex tile, uint *h)
uint b;
uint c;
uint d;
uint min;
uint r;
assert(tile < MapSize());
@@ -32,24 +54,12 @@ uint GetTileSlope(TileIndex tile, uint *h)
return 0;
}
min = a = TileHeight(tile);
a = TileHeight(tile);
b = TileHeight(tile + TileDiffXY(1, 0));
if (min >= b) min = b;
c = TileHeight(tile + TileDiffXY(0, 1));
if (min >= c) min = c;
d = TileHeight(tile + TileDiffXY(1, 1));
if (min >= d) min = d;
r = 0;
if ((a -= min) != 0) r += (--a << 4) + 8;
if ((c -= min) != 0) r += (--c << 4) + 4;
if ((d -= min) != 0) r += (--d << 4) + 2;
if ((b -= min) != 0) r += (--b << 4) + 1;
if (h != NULL)
*h = min * 8;
return r;
return GetTileh(a, b, c, d, h);
}
uint GetTileZ(TileIndex tile)

1
tile.h
View File

@@ -47,6 +47,7 @@ typedef enum DiagonalDirections {
void SetMapExtraBits(TileIndex tile, byte flags);
uint GetMapExtraBits(TileIndex tile);
uint GetTileh(uint n, uint w, uint e, uint s, uint *h);
uint GetTileSlope(TileIndex tile, uint *h);
uint GetTileZ(TileIndex tile);

View File

@@ -143,14 +143,12 @@ static void DrawTile_Town(TileInfo *ti)
static uint GetSlopeZ_Town(const TileInfo* ti)
{
uint z = GetPartialZ(ti->x & 0xF, ti->y & 0xF, ti->tileh) + ti->z;
if (ti->tileh != 0) z = (z & ~7) + 4;
return (uint16) z;
return ti->z + (ti->tileh == 0 ? 0 : 8);
}
static uint GetSlopeTileh_Town(const TileInfo *ti)
{
return ti->tileh;
return 0;
}
static void AnimateTile_Town(TileIndex tile)

View File

@@ -93,6 +93,9 @@ void TrainConsistChanged(Vehicle* v)
const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type);
uint16 veh_len;
// Update the v->first cache. This is faster than having to brute force it later.
if (u->first == NULL) u->first = v;
// update the 'first engine'
u->u.rail.first_engine = (v == u) ? INVALID_VEHICLE : first_engine;

View File

@@ -500,6 +500,8 @@ static void TileLoop_Trees(TileIndex tile)
/* fall through */
case 2: { /* add a neighbouring tree */
byte m3 = _m[tile].m3;
tile += ToTileIndexDiff(_tileloop_trees_dir[Random() & 7]);
if (!IsTileType(tile, MP_CLEAR)) return;
@@ -513,6 +515,7 @@ static void TileLoop_Trees(TileIndex tile)
_m[tile].m2 = 0;
}
_m[tile].m3 = m3;
_m[tile].m4 = 0;
SetTileType(tile, MP_TREES);

View File

@@ -803,6 +803,8 @@ static int32 DoClearBridge(TileIndex tile, uint32 flags)
m5 = _m[c].m5;
if (m5 & 0x40) {
uint town = IsTileOwner(c, OWNER_TOWN) ? ClosestTownFromTile(c, (uint)-1)->index : 0;
if (m5 & 0x20) {
static const uint16 _new_data_table[] = {0x1002, 0x1001, 0x2005, 0x200A, 0, 0, 0, 0};
new_data = _new_data_table[((m5 & 0x18) >> 2) | (m5 & 1)];
@@ -813,7 +815,7 @@ static int32 DoClearBridge(TileIndex tile, uint32 flags)
SetTileType(c, new_data >> 12);
_m[c].m5 = (byte)new_data;
_m[c].m2 = 0;
_m[c].m2 = town;
_m[c].m4 &= 0x0F;
MarkTileDirtyByTile(c);

48
unix.c
View File

@@ -43,12 +43,12 @@ ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;)
#endif
#if defined(__APPLE__)
#include <AvailabilityMacros.h>
#if defined(WITH_SDL)
//the mac implementation needs this file included in the same file as main()
#include <SDL.h>
#endif
#endif
static char *_fios_path;
static char *_fios_save_path;
static char *_fios_scn_path;
@@ -361,7 +361,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot)
return STR_4005_BYTES_FREE;
}
void FiosMakeSavegameName(char *buf, const char *name)
void FiosMakeSavegameName(char *buf, const char *name, size_t size)
{
const char* extension;
const char* period;
@@ -375,14 +375,14 @@ void FiosMakeSavegameName(char *buf, const char *name)
period = strrchr(name, '.');
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
sprintf(buf, "%s/%s%s", _fios_path, name, extension);
snprintf(buf, size, "%s/%s%s", _fios_path, name, extension);
}
bool FiosDelete(const char *name)
{
char path[512];
snprintf(path, lengthof(path), "%s/%s", _fios_path, name);
FiosMakeSavegameName(path, name, sizeof(path));
return unlink(path) == 0;
}
@@ -604,3 +604,43 @@ void CSleep(int milliseconds)
}
#endif // __AMIGA__
}
#if defined(__APPLE__) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
/* FYI: This is not thread-safe.
Assumptions:
- the 'from' charset is ISO-8859-15
- the 'to' charset is either the same, or UTF-8
NOTE: iconv was added in OSX 10.3. 10.2.x will still have the invalid char issues. There aren't any easy fix for this
*/
#include <iconv.h>
#include <locale.h>
const char *convert_to_fs_charset(const char *filename)
{
static char statout[1024], statin[1024];
static iconv_t convd;
static bool alreadyInited;
char *outbuf = statout;
const char *inbuf = statin;
size_t inlen = strlen(filename), outlen = 1023;
size_t retval = 0;
if(inbuf == NULL)
inbuf = statin;
setlocale(LC_ALL, "C-UTF-8");
strcpy(statout, filename);
strcpy(statin, filename);
inbuf = strrchr(statin, '/');
outbuf = strrchr(statout, '/');
if(alreadyInited == false)
{
convd = iconv_open("UTF-8", "ISO-8859-15");
if(convd == (iconv_t)(-1))
return filename;
alreadyInited = true;
}
retval = iconv(convd, NULL, NULL, NULL, NULL);
inlen = iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
// FIX: invalid characters will abort conversion, but they shouldn't occur?
return statout;
}
#endif

View File

@@ -182,12 +182,16 @@ static void DrawTile_Unmovable(TileInfo *ti)
static uint GetSlopeZ_Unmovable(const TileInfo* ti)
{
return GetPartialZ(ti->x & 0xF, ti->y & 0xF, ti->tileh) + ti->z;
if (_m[ti->tile].m5 == 3) {
return ti->z + GetPartialZ(ti->x & 0xF, ti->y & 0xF, ti->tileh);
} else {
return ti->z + (ti->tileh == 0 ? 0 : 8);
}
}
static uint GetSlopeTileh_Unmovable(const TileInfo *ti)
{
return 0;
return _m[ti->tile].m5 == 3 ? ti->tileh : 0;
}
static int32 ClearTile_Unmovable(TileIndex tile, byte flags)

View File

@@ -218,6 +218,11 @@ void AfterLoadVehicles(void)
FOR_ALL_VEHICLES(v) {
v->first = NULL;
if (v->type == VEH_Train && (IsFrontEngine(v) || IsFreeWagon(v)))
TrainConsistChanged(v);
}
FOR_ALL_VEHICLES(v) {
if (v->type != 0) {
switch (v->type) {
case VEH_Train: v->cur_image = GetTrainImage(v, v->direction); break;
@@ -234,9 +239,6 @@ void AfterLoadVehicles(void)
v->left_coord = INVALID_COORD;
VehiclePositionChanged(v);
if (v->type == VEH_Train && (IsFrontEngine(v) || IsFreeWagon(v)))
TrainConsistChanged(v);
}
}
}
@@ -687,7 +689,7 @@ bool CanFillVehicle(Vehicle *v)
bool CanRefitTo(EngineID engine_type, CargoID cid_to)
{
CargoID cid = _global_cargo_id[_opt_ptr->landscape][cid_to];
return HASBIT(_engine_info[engine_type].refit_mask, cid) != 0;
return HASBIT(_engine_info[engine_type].refit_mask, cid);
}
static void DoDrawVehicle(const Vehicle *v)
@@ -1711,8 +1713,11 @@ static void MaybeReplaceVehicle(Vehicle *v)
bool stopped = false;
/* Remember the length in case we need to trim train later on
* If it's not a train, the value is unused */
uint16 old_total_length = (v->type == VEH_Train) ? v->u.rail.cached_total_length : -1;
* If it's not a train, the value is unused
* round up to the length of the tiles used for the train instead of the train length instead
* Useful when newGRF uses custom length */
uint16 old_total_length = (v->type == VEH_Train) ? ((v->u.rail.cached_total_length + 15 )/ 16)* 16 : -1;
_current_player = v->owner;
@@ -1999,19 +2004,41 @@ uint32 VehicleEnterTile(Vehicle *v, TileIndex tile, int x, int y)
UnitID GetFreeUnitNumber(byte type)
{
UnitID unit_num = 0;
Vehicle *u;
UnitID unit, max;
const Vehicle *u;
static bool *cache = NULL;
static UnitID gmax = 0;
restart:
unit_num++;
FOR_ALL_VEHICLES(u) {
if (u->type == type && u->owner == _current_player &&
unit_num == u->unitnumber)
goto restart;
switch (type) {
case VEH_Train: max = _patches.max_trains; break;
case VEH_Road: max = _patches.max_roadveh; break;
case VEH_Ship: max = _patches.max_ships; break;
case VEH_Aircraft: max = _patches.max_aircraft; break;
default: assert(0);
}
return unit_num;
}
if (max > gmax) {
gmax = max;
free(cache);
cache = malloc((max + 1) * sizeof(*cache));
}
// Clear the cache
memset(cache, 0, (max + 1) * sizeof(*cache));
// Fill the cache
FOR_ALL_VEHICLES(u) {
if (u->type == type && u->owner == _current_player && u->unitnumber != 0 && u->unitnumber <= max)
cache[u->unitnumber] = true;
}
// Find the first unused unit number
for (unit = 1; unit <= max; unit++) {
if (!cache[unit]) break;
}
return unit;
}
// Save and load of vehicles
const SaveLoad _common_veh_desc[] = {

View File

@@ -903,7 +903,6 @@ static void QZ_SetPortAlphaOpaque (void) {
- (void)appDidHide:(NSNotification*)note
{
_cocoa_video_data.active = false;
// DEBUG(driver, 1)("cocoa_v: appDidHide");
}
@@ -921,7 +920,6 @@ static void QZ_SetPortAlphaOpaque (void) {
[ self restoreCachedImage ];
_cocoa_video_data.active = true;
// DEBUG(driver, 1)("cocoa_v: appDidUnhide");
}
@@ -953,25 +951,21 @@ static void QZ_SetPortAlphaOpaque (void) {
- (void)windowDidBecomeKey:(NSNotification *)aNotification
{
_cocoa_video_data.active = true;
// DEBUG(driver, 1)("cocoa_v: windowDidBecomeKey");
}
- (void)windowDidResignKey:(NSNotification *)aNotification
{
_cocoa_video_data.active = false;
// DEBUG(driver, 1)("cocoa_v: windowDidResignKey");
}
- (void)windowDidBecomeMain:(NSNotification *)aNotification
{
_cocoa_video_data.active = true;
// DEBUG(driver, 1)("cocoa_v: windowDidBecomeMain");
}
- (void)windowDidResignMain:(NSNotification *)aNotification
{
_cocoa_video_data.active = false;
// DEBUG(driver, 1)("cocoa_v: windowDidResignMain");
}
@end
@@ -1507,17 +1501,60 @@ static void QZ_WaitForVerticalBlank(void)
static void QZ_DrawScreen(void)
{
const uint8* src;
uint8* dst;
uint height;
uint width;
uint pitch;
uint y;
uint8 *src, *dst;
QZ_WaitForVerticalBlank();
src = _cocoa_video_data.pixels;
dst = (uint8*)_cocoa_video_data.realpixels;
width = _cocoa_video_data.width;
pitch = _cocoa_video_data.pitch;
for(y = 0; y < _cocoa_video_data.height; y++) {
src = _cocoa_video_data.pixels + y * _cocoa_video_data.width;
dst = ((uint8 *) _cocoa_video_data.realpixels) + y * _cocoa_video_data.pitch;
#ifdef __POWERPC__
// PPC appears to handle updating of rectangles right
{
uint num_dirty_rects;
uint length_drawn;
uint left;
uint i;
memcpy(dst, src, _cocoa_video_data.width);
num_dirty_rects = _cocoa_video_data.num_dirty_rects;
/* Check if we need to do anything */
if (num_dirty_rects == 0 ) return;
if (num_dirty_rects >= MAX_DIRTY_RECTS) {
num_dirty_rects = 1;
_cocoa_video_data.dirty_rects[0].left = 0;
_cocoa_video_data.dirty_rects[0].top = 0;
_cocoa_video_data.dirty_rects[0].right = _cocoa_video_data.width;
_cocoa_video_data.dirty_rects[0].bottom = _cocoa_video_data.height;
}
QZ_WaitForVerticalBlank();
/* Build the region of dirty rectangles */
for (i = 0; i < num_dirty_rects; i++) {
y = _cocoa_video_data.dirty_rects[i].top;
left = _cocoa_video_data.dirty_rects[i].left;
length_drawn = _cocoa_video_data.dirty_rects[i].right - left + 1;
height = _cocoa_video_data.dirty_rects[i].bottom;
for (; y <= height; y++) memcpy(dst + y * pitch + left, src + y * width +left, length_drawn);
}
_cocoa_video_data.num_dirty_rects = 0;
}
#else
// it appears that Intel based macs didn't like to only update parts of the screen at a time, so they still update everything at each frame
// we need to switch to use Quartz exclusively (no QuickDraw commands at all) to fix this
// to use Quartz exclusively, we should use 16 or 32 bit graphics since 8 bit coloured graphic support sucks
height = _cocoa_video_data.height;
QZ_WaitForVerticalBlank();
for (y = 0; y < height; y++) memcpy(dst + y * pitch, src + y * width, width);
#endif
}
static int QZ_ListFullscreenModes (OTTDPoint *mode_list, int max_modes) {
@@ -1830,7 +1867,6 @@ static void QZ_WarpCursor (int x, int y) {
CGWarpMouseCursorPosition (cgp);
/* Generate the mouse moved event */
// SDL_PrivateMouseMotion (0, 0, x, y);
}
void QZ_ShowMouse (void) {
@@ -1885,7 +1921,6 @@ void QZ_HideMouse (void) {
/* Display the in game quit confirmation dialog */
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *) sender
{
// DEBUG(driver, 1)("cocoa_v: applicationShouldTerminate");
QZ_AskQuit();

View File

@@ -651,6 +651,10 @@ static const char *Win32GdiStart(const char * const *parm)
static void Win32GdiStop(void)
{
DeleteObject(_wnd.gdi_palette);
DeleteObject(_wnd.dib_sect);
DestroyWindow(_wnd.main_wnd);
if (_wnd.fullscreen) ChangeDisplaySettings(NULL, 0);
if (_double_size) {
_cur_resolution[0] *= 2;
@@ -658,9 +662,6 @@ static void Win32GdiStop(void)
}
MyShowCursor(true);
DeleteObject(_wnd.gdi_palette);
DeleteObject(_wnd.dib_sect);
DestroyWindow(_wnd.main_wnd);
}
// simple upscaler by 2

View File

@@ -544,7 +544,7 @@ static void TileLoopWaterHelper(TileIndex tile, const TileIndexDiffC *offs)
// Middle part of bridge with clear land below?
if ((_m[target].m5 & 0xF8) == 0xC0) {
_m[target].m5 |= 0x08;
MarkTileDirtyByTile(tile);
MarkTileDirtyByTile(target);
}
break;

View File

@@ -427,6 +427,7 @@ extern bool CloseConsoleLogIfActive(void);
static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
{
extern const char _openttd_revision[];
char *output;
static bool had_exception;
@@ -451,7 +452,7 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
time.wHour,
time.wMinute,
time.wSecond,
"???"
_openttd_revision
);
}
@@ -962,7 +963,7 @@ StringID FiosGetDescText(const char **path, uint32 *tot)
return sid;
}
void FiosMakeSavegameName(char *buf, const char *name)
void FiosMakeSavegameName(char *buf, const char *name, size_t size)
{
const char* extension;
const char* period;
@@ -976,14 +977,14 @@ void FiosMakeSavegameName(char *buf, const char *name)
period = strrchr(name, '.');
if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
sprintf(buf, "%s\\%s%s", _fios_path, name, extension);
snprintf(buf, size, "%s\\%s%s", _fios_path, name, extension);
}
bool FiosDelete(const char *name)
{
char path[512];
snprintf(path, lengthof(path), "%s\\%s", _fios_path, name);
FiosMakeSavegameName(path, name, sizeof(path));
return DeleteFile(path) != 0;
}