mirror of https://github.com/OpenTTD/OpenTTD
Compare commits
30 Commits
e6b45731c0
...
b22eb2f14e
Author | SHA1 | Date |
---|---|---|
|
b22eb2f14e | |
|
5a3d80a002 | |
|
a53ade4a11 | |
|
4b3c3d4e37 | |
|
526d5f529d | |
|
ae917cb8c6 | |
|
6d95cea73a | |
|
921d83c324 | |
|
c69fc76395 | |
|
1d21edde8d | |
|
b82ffa3542 | |
|
8e2df7809b | |
|
821784004d | |
|
f0447d59d4 | |
|
cbdd358ae8 | |
|
2cdd50f40e | |
|
56942a15c7 | |
|
5eeda026a4 | |
|
edc5b8ea1f | |
|
a8650c6b06 | |
|
7bb4940ebd | |
|
b8e56cd05d | |
|
df5237e721 | |
|
03f5f7145f | |
|
0dc40877fd | |
|
03672ed8eb | |
|
1b01a0636c | |
|
bccbd64037 | |
|
434163aa31 | |
|
55605ae8f2 |
|
@ -449,6 +449,7 @@ if(WIN32)
|
||||||
psapi
|
psapi
|
||||||
winhttp
|
winhttp
|
||||||
bcrypt
|
bcrypt
|
||||||
|
xinput
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -36,3 +36,11 @@ AITown.FoundTown <- function(tile, size, city, layout, name) { return AITown.Fou
|
||||||
|
|
||||||
AIVehicle.SetNameCompat14 <- AIVehicle.SetName;
|
AIVehicle.SetNameCompat14 <- AIVehicle.SetName;
|
||||||
AIVehicle.SetName <- function(id, name) { return AIVehicle.SetNameCompat14(id, AICompat14.Text(name)); }
|
AIVehicle.SetName <- function(id, name) { return AIVehicle.SetNameCompat14(id, AICompat14.Text(name)); }
|
||||||
|
|
||||||
|
AIObject.constructorCompat14 <- AIObject.constructor;
|
||||||
|
foreach(name, object in CompatScriptRootTable) {
|
||||||
|
if (type(object) != "class") continue;
|
||||||
|
if (!object.rawin("constructor")) continue;
|
||||||
|
if (object.constructor != AIObject.constructorCompat14) continue;
|
||||||
|
object.constructor <- function() : (name) { AILog.Error("'" + name + "' is not instantiable"); }
|
||||||
|
}
|
||||||
|
|
|
@ -81,3 +81,11 @@ GSTown.FoundTown <- function(tile, size, city, layout, name) { return GSTown.Fou
|
||||||
|
|
||||||
GSVehicle.SetNameCompat14 <- GSVehicle.SetName;
|
GSVehicle.SetNameCompat14 <- GSVehicle.SetName;
|
||||||
GSVehicle.SetName <- function(id, name) { return GSVehicle.SetNameCompat14(id, GSCompat14.Text(name)); }
|
GSVehicle.SetName <- function(id, name) { return GSVehicle.SetNameCompat14(id, GSCompat14.Text(name)); }
|
||||||
|
|
||||||
|
GSObject.constructorCompat14 <- GSObject.constructor;
|
||||||
|
foreach(name, object in CompatScriptRootTable) {
|
||||||
|
if (type(object) != "class") continue;
|
||||||
|
if (!object.rawin("constructor")) continue;
|
||||||
|
if (object.constructor != GSObject.constructorCompat14) continue;
|
||||||
|
object.constructor <- function() : (name) { GSLog.Error("'" + name + "' is not instantiable"); }
|
||||||
|
}
|
||||||
|
|
|
@ -454,6 +454,7 @@ add_files(
|
||||||
spritecache.cpp
|
spritecache.cpp
|
||||||
spritecache.h
|
spritecache.h
|
||||||
spritecache_internal.h
|
spritecache_internal.h
|
||||||
|
spritecache_type.h
|
||||||
station.cpp
|
station.cpp
|
||||||
station_base.h
|
station_base.h
|
||||||
station_cmd.cpp
|
station_cmd.cpp
|
||||||
|
|
|
@ -83,7 +83,7 @@ void AIInstance::Died()
|
||||||
|
|
||||||
void AIInstance::LoadDummyScript()
|
void AIInstance::LoadDummyScript()
|
||||||
{
|
{
|
||||||
ScriptAllocatorScope alloc_scope(this->engine);
|
ScriptAllocatorScope alloc_scope(this->engine.get());
|
||||||
Script_CreateDummy(this->engine->GetVM(), STR_ERROR_AI_NO_AI_FOUND, "AI");
|
Script_CreateDummy(this->engine->GetVM(), STR_ERROR_AI_NO_AI_FOUND, "AI");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,7 @@
|
||||||
|
|
||||||
void Aircraft::UpdateDeltaXY()
|
void Aircraft::UpdateDeltaXY()
|
||||||
{
|
{
|
||||||
this->x_offs = -1;
|
this->bounds = {{-1, -1, 0}, {2, 2, 0}, {}};
|
||||||
this->y_offs = -1;
|
|
||||||
this->x_extent = 2;
|
|
||||||
this->y_extent = 2;
|
|
||||||
|
|
||||||
switch (this->subtype) {
|
switch (this->subtype) {
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
|
@ -64,21 +61,21 @@ void Aircraft::UpdateDeltaXY()
|
||||||
case LANDING:
|
case LANDING:
|
||||||
case HELILANDING:
|
case HELILANDING:
|
||||||
case FLYING:
|
case FLYING:
|
||||||
this->x_extent = 24;
|
/* Bounds are not centred on the aircraft. */
|
||||||
this->y_extent = 24;
|
this->bounds.extent.x = 24;
|
||||||
|
this->bounds.extent.y = 24;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
this->z_extent = 5;
|
this->bounds.extent.z = 5;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AIR_SHADOW:
|
case AIR_SHADOW:
|
||||||
this->z_extent = 1;
|
this->bounds.extent.z = 1;
|
||||||
this->x_offs = 0;
|
this->bounds.origin = {};
|
||||||
this->y_offs = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AIR_ROTOR:
|
case AIR_ROTOR:
|
||||||
this->z_extent = 1;
|
this->bounds.extent.z = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1125,6 +1122,15 @@ static bool AircraftController(Aircraft *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amd.flags.Test(AirportMovingDataFlag::Land)) {
|
if (amd.flags.Test(AirportMovingDataFlag::Land)) {
|
||||||
|
if (st->airport.blocks.Test(AirportBlock::Zeppeliner)) {
|
||||||
|
/* Zeppeliner blocked the runway, abort landing */
|
||||||
|
v->state = FLYING;
|
||||||
|
UpdateAircraftCache(v);
|
||||||
|
SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlightLevel(v));
|
||||||
|
v->pos = v->previous_pos;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (st->airport.tile == INVALID_TILE) {
|
if (st->airport.tile == INVALID_TILE) {
|
||||||
/* Airport has been removed, abort the landing procedure */
|
/* Airport has been removed, abort the landing procedure */
|
||||||
v->state = FLYING;
|
v->state = FLYING;
|
||||||
|
@ -1782,6 +1788,11 @@ static void AirportClearBlock(const Aircraft *v, const AirportFTAClass *apc)
|
||||||
if (apc->layout[v->previous_pos].blocks != apc->layout[v->pos].blocks) {
|
if (apc->layout[v->previous_pos].blocks != apc->layout[v->pos].blocks) {
|
||||||
Station *st = Station::Get(v->targetairport);
|
Station *st = Station::Get(v->targetairport);
|
||||||
|
|
||||||
|
if (st->airport.blocks.Test(AirportBlock::Zeppeliner) &&
|
||||||
|
apc->layout[v->previous_pos].blocks == AirportBlock::RunwayIn) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
st->airport.blocks.Reset(apc->layout[v->previous_pos].blocks);
|
st->airport.blocks.Reset(apc->layout[v->previous_pos].blocks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,6 +127,7 @@ enum class AirportBlock : uint8_t {
|
||||||
/* end of new blocks */
|
/* end of new blocks */
|
||||||
|
|
||||||
Nothing = 30,
|
Nothing = 30,
|
||||||
|
Zeppeliner = 62, ///< Block for the zeppeliner disaster vehicle.
|
||||||
AirportClosed = 63, ///< Dummy block for indicating a closed airport.
|
AirportClosed = 63, ///< Dummy block for indicating a closed airport.
|
||||||
};
|
};
|
||||||
using AirportBlocks = EnumBitSet<AirportBlock, uint64_t>;
|
using AirportBlocks = EnumBitSet<AirportBlock, uint64_t>;
|
||||||
|
|
|
@ -321,19 +321,19 @@ void Blitter_32bppAnim::DrawColourMappingRect(void *dst, int width, int height,
|
||||||
Debug(misc, 0, "32bpp blitter doesn't know how to draw this colour table ('{}')", pal);
|
Debug(misc, 0, "32bpp blitter doesn't know how to draw this colour table ('{}')", pal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_32bppAnim::SetPixel(void *video, int x, int y, uint8_t colour)
|
void Blitter_32bppAnim::SetPixel(void *video, int x, int y, PixelColour colour)
|
||||||
{
|
{
|
||||||
*((Colour *)video + x + y * _screen.pitch) = LookupColourInPalette(colour);
|
*((Colour *)video + x + y * _screen.pitch) = LookupColourInPalette(colour.p);
|
||||||
|
|
||||||
/* Set the colour in the anim-buffer too, if we are rendering to the screen */
|
/* Set the colour in the anim-buffer too, if we are rendering to the screen */
|
||||||
if (_screen_disable_anim) return;
|
if (_screen_disable_anim) return;
|
||||||
|
|
||||||
this->anim_buf[this->ScreenToAnimOffset((uint32_t *)video) + x + y * this->anim_buf_pitch] = colour | (DEFAULT_BRIGHTNESS << 8);
|
this->anim_buf[this->ScreenToAnimOffset((uint32_t *)video) + x + y * this->anim_buf_pitch] = colour.p | (DEFAULT_BRIGHTNESS << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_32bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash)
|
void Blitter_32bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash)
|
||||||
{
|
{
|
||||||
const Colour c = LookupColourInPalette(colour);
|
const Colour c = LookupColourInPalette(colour.p);
|
||||||
|
|
||||||
if (_screen_disable_anim) {
|
if (_screen_disable_anim) {
|
||||||
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) {
|
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) {
|
||||||
|
@ -341,7 +341,7 @@ void Blitter_32bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
uint16_t * const offset_anim_buf = this->anim_buf + this->ScreenToAnimOffset((uint32_t *)video);
|
uint16_t * const offset_anim_buf = this->anim_buf + this->ScreenToAnimOffset((uint32_t *)video);
|
||||||
const uint16_t anim_colour = colour | (DEFAULT_BRIGHTNESS << 8);
|
const uint16_t anim_colour = colour.p | (DEFAULT_BRIGHTNESS << 8);
|
||||||
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) {
|
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) {
|
||||||
*((Colour *)video + x + y * _screen.pitch) = c;
|
*((Colour *)video + x + y * _screen.pitch) = c;
|
||||||
offset_anim_buf[x + y * this->anim_buf_pitch] = anim_colour;
|
offset_anim_buf[x + y * this->anim_buf_pitch] = anim_colour;
|
||||||
|
@ -349,7 +349,7 @@ void Blitter_32bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8_t colour)
|
void Blitter_32bppAnim::DrawRect(void *video, int width, int height, PixelColour colour)
|
||||||
{
|
{
|
||||||
if (_screen_disable_anim) {
|
if (_screen_disable_anim) {
|
||||||
/* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */
|
/* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */
|
||||||
|
@ -357,7 +357,7 @@ void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8_t col
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Colour colour32 = LookupColourInPalette(colour);
|
Colour colour32 = LookupColourInPalette(colour.p);
|
||||||
uint16_t *anim_line = this->ScreenToAnimOffset((uint32_t *)video) + this->anim_buf;
|
uint16_t *anim_line = this->ScreenToAnimOffset((uint32_t *)video) + this->anim_buf;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -367,7 +367,7 @@ void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8_t col
|
||||||
for (int i = width; i > 0; i--) {
|
for (int i = width; i > 0; i--) {
|
||||||
*dst = colour32;
|
*dst = colour32;
|
||||||
/* Set the colour in the anim-buffer too */
|
/* Set the colour in the anim-buffer too */
|
||||||
*anim = colour | (DEFAULT_BRIGHTNESS << 8);
|
*anim = colour.p | (DEFAULT_BRIGHTNESS << 8);
|
||||||
dst++;
|
dst++;
|
||||||
anim++;
|
anim++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,9 +34,9 @@ public:
|
||||||
|
|
||||||
void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override;
|
void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override;
|
||||||
void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override;
|
void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override;
|
||||||
void SetPixel(void *video, int x, int y, uint8_t colour) override;
|
void SetPixel(void *video, int x, int y, PixelColour colour) override;
|
||||||
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash) override;
|
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash) override;
|
||||||
void DrawRect(void *video, int width, int height, uint8_t colour) override;
|
void DrawRect(void *video, int width, int height, PixelColour colour) override;
|
||||||
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
||||||
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
||||||
void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override;
|
void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override;
|
||||||
|
|
|
@ -18,22 +18,22 @@ void *Blitter_32bppBase::MoveTo(void *video, int x, int y)
|
||||||
return (uint32_t *)video + x + y * _screen.pitch;
|
return (uint32_t *)video + x + y * _screen.pitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_32bppBase::SetPixel(void *video, int x, int y, uint8_t colour)
|
void Blitter_32bppBase::SetPixel(void *video, int x, int y, PixelColour colour)
|
||||||
{
|
{
|
||||||
*((Colour *)video + x + y * _screen.pitch) = LookupColourInPalette(colour);
|
*((Colour *)video + x + y * _screen.pitch) = LookupColourInPalette(colour.p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_32bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash)
|
void Blitter_32bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash)
|
||||||
{
|
{
|
||||||
const Colour c = LookupColourInPalette(colour);
|
const Colour c = LookupColourInPalette(colour.p);
|
||||||
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
|
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
|
||||||
*((Colour *)video + x + y * _screen.pitch) = c;
|
*((Colour *)video + x + y * _screen.pitch) = c;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_32bppBase::DrawRect(void *video, int width, int height, uint8_t colour)
|
void Blitter_32bppBase::DrawRect(void *video, int width, int height, PixelColour colour)
|
||||||
{
|
{
|
||||||
Colour colour32 = LookupColourInPalette(colour);
|
Colour colour32 = LookupColourInPalette(colour.p);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
Colour *dst = (Colour *)video;
|
Colour *dst = (Colour *)video;
|
||||||
|
|
|
@ -19,9 +19,9 @@ class Blitter_32bppBase : public Blitter {
|
||||||
public:
|
public:
|
||||||
uint8_t GetScreenDepth() override { return 32; }
|
uint8_t GetScreenDepth() override { return 32; }
|
||||||
void *MoveTo(void *video, int x, int y) override;
|
void *MoveTo(void *video, int x, int y) override;
|
||||||
void SetPixel(void *video, int x, int y, uint8_t colour) override;
|
void SetPixel(void *video, int x, int y, PixelColour colour) override;
|
||||||
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash) override;
|
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash) override;
|
||||||
void DrawRect(void *video, int width, int height, uint8_t colour) override;
|
void DrawRect(void *video, int width, int height, PixelColour colour) override;
|
||||||
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
||||||
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
||||||
void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override;
|
void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override;
|
||||||
|
|
|
@ -27,7 +27,7 @@ static FBlitter_40bppAnim iFBlitter_40bppAnim;
|
||||||
static const Colour _black_colour(0, 0, 0);
|
static const Colour _black_colour(0, 0, 0);
|
||||||
|
|
||||||
|
|
||||||
void Blitter_40bppAnim::SetPixel(void *video, int x, int y, uint8_t colour)
|
void Blitter_40bppAnim::SetPixel(void *video, int x, int y, PixelColour colour)
|
||||||
{
|
{
|
||||||
if (_screen_disable_anim) {
|
if (_screen_disable_anim) {
|
||||||
Blitter_32bppOptimized::SetPixel(video, x, y, colour);
|
Blitter_32bppOptimized::SetPixel(video, x, y, colour);
|
||||||
|
@ -35,11 +35,11 @@ void Blitter_40bppAnim::SetPixel(void *video, int x, int y, uint8_t colour)
|
||||||
size_t y_offset = static_cast<size_t>(y) * _screen.pitch;
|
size_t y_offset = static_cast<size_t>(y) * _screen.pitch;
|
||||||
*((Colour *)video + x + y_offset) = _black_colour;
|
*((Colour *)video + x + y_offset) = _black_colour;
|
||||||
|
|
||||||
VideoDriver::GetInstance()->GetAnimBuffer()[((uint32_t *)video - (uint32_t *)_screen.dst_ptr) + x + y_offset] = colour;
|
VideoDriver::GetInstance()->GetAnimBuffer()[((uint32_t *)video - (uint32_t *)_screen.dst_ptr) + x + y_offset] = colour.p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_40bppAnim::DrawRect(void *video, int width, int height, uint8_t colour)
|
void Blitter_40bppAnim::DrawRect(void *video, int width, int height, PixelColour colour)
|
||||||
{
|
{
|
||||||
if (_screen_disable_anim) {
|
if (_screen_disable_anim) {
|
||||||
/* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */
|
/* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */
|
||||||
|
@ -56,7 +56,7 @@ void Blitter_40bppAnim::DrawRect(void *video, int width, int height, uint8_t col
|
||||||
|
|
||||||
for (int i = width; i > 0; i--) {
|
for (int i = width; i > 0; i--) {
|
||||||
*dst = _black_colour;
|
*dst = _black_colour;
|
||||||
*anim = colour;
|
*anim = colour.p;
|
||||||
dst++;
|
dst++;
|
||||||
anim++;
|
anim++;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ void Blitter_40bppAnim::DrawRect(void *video, int width, int height, uint8_t col
|
||||||
} while (--height);
|
} while (--height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_40bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash)
|
void Blitter_40bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash)
|
||||||
{
|
{
|
||||||
if (_screen_disable_anim) {
|
if (_screen_disable_anim) {
|
||||||
/* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */
|
/* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */
|
||||||
|
@ -78,7 +78,7 @@ void Blitter_40bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int
|
||||||
|
|
||||||
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
|
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
|
||||||
*((Colour *)video + x + y * _screen.pitch) = _black_colour;
|
*((Colour *)video + x + y * _screen.pitch) = _black_colour;
|
||||||
*(anim + x + y * _screen.pitch) = colour;
|
*(anim + x + y * _screen.pitch) = colour.p;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
class Blitter_40bppAnim : public Blitter_32bppOptimized {
|
class Blitter_40bppAnim : public Blitter_32bppOptimized {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void SetPixel(void *video, int x, int y, uint8_t colour) override;
|
void SetPixel(void *video, int x, int y, PixelColour colour) override;
|
||||||
void DrawRect(void *video, int width, int height, uint8_t colour) override;
|
void DrawRect(void *video, int width, int height, PixelColour colour) override;
|
||||||
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash) override;
|
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash) override;
|
||||||
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
||||||
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
||||||
void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override;
|
void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override;
|
||||||
|
|
|
@ -29,23 +29,23 @@ void *Blitter_8bppBase::MoveTo(void *video, int x, int y)
|
||||||
return (uint8_t *)video + x + y * _screen.pitch;
|
return (uint8_t *)video + x + y * _screen.pitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_8bppBase::SetPixel(void *video, int x, int y, uint8_t colour)
|
void Blitter_8bppBase::SetPixel(void *video, int x, int y, PixelColour colour)
|
||||||
{
|
{
|
||||||
*((uint8_t *)video + x + y * _screen.pitch) = colour;
|
*((uint8_t *)video + x + y * _screen.pitch) = colour.p;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash)
|
void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash)
|
||||||
{
|
{
|
||||||
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
|
this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) {
|
||||||
*((uint8_t *)video + x + y * _screen.pitch) = colour;
|
*((uint8_t *)video + x + y * _screen.pitch) = colour.p;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8_t colour)
|
void Blitter_8bppBase::DrawRect(void *video, int width, int height, PixelColour colour)
|
||||||
{
|
{
|
||||||
std::byte *p = static_cast<std::byte *>(video);
|
std::byte *p = static_cast<std::byte *>(video);
|
||||||
do {
|
do {
|
||||||
std::fill_n(p, width, static_cast<std::byte>(colour));
|
std::fill_n(p, width, static_cast<std::byte>(colour.p));
|
||||||
p += _screen.pitch;
|
p += _screen.pitch;
|
||||||
} while (--height);
|
} while (--height);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,9 @@ public:
|
||||||
uint8_t GetScreenDepth() override { return 8; }
|
uint8_t GetScreenDepth() override { return 8; }
|
||||||
void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override;
|
void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override;
|
||||||
void *MoveTo(void *video, int x, int y) override;
|
void *MoveTo(void *video, int x, int y) override;
|
||||||
void SetPixel(void *video, int x, int y, uint8_t colour) override;
|
void SetPixel(void *video, int x, int y, PixelColour colour) override;
|
||||||
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash) override;
|
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash) override;
|
||||||
void DrawRect(void *video, int width, int height, uint8_t colour) override;
|
void DrawRect(void *video, int width, int height, PixelColour colour) override;
|
||||||
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
void CopyFromBuffer(void *video, const void *src, int width, int height) override;
|
||||||
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
void CopyToBuffer(const void *video, void *dst, int width, int height) override;
|
||||||
void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override;
|
void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override;
|
||||||
|
|
|
@ -95,18 +95,18 @@ public:
|
||||||
* @param video The destination pointer (video-buffer).
|
* @param video The destination pointer (video-buffer).
|
||||||
* @param x The x position within video-buffer.
|
* @param x The x position within video-buffer.
|
||||||
* @param y The y position within video-buffer.
|
* @param y The y position within video-buffer.
|
||||||
* @param colour A 8bpp mapping colour.
|
* @param colour A pixel colour.
|
||||||
*/
|
*/
|
||||||
virtual void SetPixel(void *video, int x, int y, uint8_t colour) = 0;
|
virtual void SetPixel(void *video, int x, int y, PixelColour colour) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make a single horizontal line in a single colour on the video-buffer.
|
* Make a single horizontal line in a single colour on the video-buffer.
|
||||||
* @param video The destination pointer (video-buffer).
|
* @param video The destination pointer (video-buffer).
|
||||||
* @param width The length of the line.
|
* @param width The length of the line.
|
||||||
* @param height The height of the line.
|
* @param height The height of the line.
|
||||||
* @param colour A 8bpp mapping colour.
|
* @param colour A pixel colour.
|
||||||
*/
|
*/
|
||||||
virtual void DrawRect(void *video, int width, int height, uint8_t colour) = 0;
|
virtual void DrawRect(void *video, int width, int height, PixelColour colour) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw a line with a given colour.
|
* Draw a line with a given colour.
|
||||||
|
@ -117,11 +117,11 @@ public:
|
||||||
* @param y2 The y coordinate to where the lines goes.
|
* @param y2 The y coordinate to where the lines goes.
|
||||||
* @param screen_width The width of the screen you are drawing in (to avoid buffer-overflows).
|
* @param screen_width The width of the screen you are drawing in (to avoid buffer-overflows).
|
||||||
* @param screen_height The height of the screen you are drawing in (to avoid buffer-overflows).
|
* @param screen_height The height of the screen you are drawing in (to avoid buffer-overflows).
|
||||||
* @param colour A 8bpp mapping colour.
|
* @param colour A pixel colour.
|
||||||
* @param width Line width.
|
* @param width Line width.
|
||||||
* @param dash Length of dashes for dashed lines. 0 means solid line.
|
* @param dash Length of dashes for dashed lines. 0 means solid line.
|
||||||
*/
|
*/
|
||||||
virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash = 0) = 0;
|
virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash = 0) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy from a buffer to the screen.
|
* Copy from a buffer to the screen.
|
||||||
|
|
|
@ -20,9 +20,9 @@ public:
|
||||||
void DrawColourMappingRect(void *, int, int, PaletteID) override {};
|
void DrawColourMappingRect(void *, int, int, PaletteID) override {};
|
||||||
Sprite *Encode(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override;
|
Sprite *Encode(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override;
|
||||||
void *MoveTo(void *, int, int) override { return nullptr; };
|
void *MoveTo(void *, int, int) override { return nullptr; };
|
||||||
void SetPixel(void *, int, int, uint8_t) override {};
|
void SetPixel(void *, int, int, PixelColour) override {};
|
||||||
void DrawRect(void *, int, int, uint8_t) override {};
|
void DrawRect(void *, int, int, PixelColour) override {};
|
||||||
void DrawLine(void *, int, int, int, int, int, int, uint8_t, int, int) override {};
|
void DrawLine(void *, int, int, int, int, int, int, PixelColour, int, int) override {};
|
||||||
void CopyFromBuffer(void *, const void *, int, int) override {};
|
void CopyFromBuffer(void *, const void *, int, int) override {};
|
||||||
void CopyToBuffer(const void *, void *, int, int) override {};
|
void CopyToBuffer(const void *, void *, int, int) override {};
|
||||||
void CopyImageToBuffer(const void *, void *, int, int, int) override {};
|
void CopyImageToBuffer(const void *, void *, int, int, int) override {};
|
||||||
|
|
|
@ -60,8 +60,8 @@ public:
|
||||||
|
|
||||||
void DrawWidget(const Rect &r, WidgetID) const override
|
void DrawWidget(const Rect &r, WidgetID) const override
|
||||||
{
|
{
|
||||||
GfxFillRect(r.left, r.top, r.right, r.bottom, 4, FILLRECT_OPAQUE);
|
GfxFillRect(r.left, r.top, r.right, r.bottom, PixelColour{4}, FILLRECT_OPAQUE);
|
||||||
GfxFillRect(r.left, r.top, r.right, r.bottom, 0, FILLRECT_CHECKER);
|
GfxFillRect(r.left, r.top, r.right, r.bottom, PixelColour{0}, FILLRECT_CHECKER);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -385,10 +385,10 @@ bool HandleBootstrap()
|
||||||
/* Initialise the palette. The biggest step is 'faking' some recolour sprites.
|
/* Initialise the palette. The biggest step is 'faking' some recolour sprites.
|
||||||
* This way the mauve and gray colours work and we can show the user interface. */
|
* This way the mauve and gray colours work and we can show the user interface. */
|
||||||
GfxInitPalettes();
|
GfxInitPalettes();
|
||||||
static const int offsets[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0, 0, 0x04, 0x08 };
|
static const uint8_t offsets[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0, 0, 0x04, 0x08 };
|
||||||
for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) {
|
for (Colours i = COLOUR_BEGIN; i != COLOUR_END; i++) {
|
||||||
for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) {
|
for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) {
|
||||||
SetColourGradient(i, j, offsets[i] + j);
|
SetColourGradient(i, j, PixelColour(offsets[i] + j));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -956,7 +956,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
|
||||||
int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right;
|
int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right;
|
||||||
int sprite_width = sprite_left + sprite_right;
|
int sprite_width = sprite_left + sprite_right;
|
||||||
int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width);
|
int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width);
|
||||||
int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL);
|
PixelColour linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL);
|
||||||
|
|
||||||
auto badge_column_widths = badge_classes.GetColumnWidths();
|
auto badge_column_widths = badge_classes.GetColumnWidths();
|
||||||
|
|
||||||
|
|
|
@ -410,7 +410,7 @@ void VehicleCargoList::AgeCargo()
|
||||||
return (accepted && cp->first_station != current_station) ? MTA_DELIVER : MTA_KEEP;
|
return (accepted && cp->first_station != current_station) ? MTA_DELIVER : MTA_KEEP;
|
||||||
} else if (cargo_next == current_station) {
|
} else if (cargo_next == current_station) {
|
||||||
return MTA_DELIVER;
|
return MTA_DELIVER;
|
||||||
} else if (next_station.Contains(cargo_next.base())) {
|
} else if (next_station.Contains(cargo_next)) {
|
||||||
return MTA_KEEP;
|
return MTA_KEEP;
|
||||||
} else {
|
} else {
|
||||||
return MTA_TRANSFER;
|
return MTA_TRANSFER;
|
||||||
|
@ -470,7 +470,7 @@ bool VehicleCargoList::Stage(bool accepted, StationID current_station, StationID
|
||||||
new_shares.ChangeShare(current_station, INT_MIN);
|
new_shares.ChangeShare(current_station, INT_MIN);
|
||||||
StationIDStack excluded = next_station;
|
StationIDStack excluded = next_station;
|
||||||
while (!excluded.IsEmpty() && !new_shares.GetShares()->empty()) {
|
while (!excluded.IsEmpty() && !new_shares.GetShares()->empty()) {
|
||||||
new_shares.ChangeShare(StationID{excluded.Pop()}, INT_MIN);
|
new_shares.ChangeShare(excluded.Pop(), INT_MIN);
|
||||||
}
|
}
|
||||||
if (new_shares.GetShares()->empty()) {
|
if (new_shares.GetShares()->empty()) {
|
||||||
cargo_next = StationID::Invalid();
|
cargo_next = StationID::Invalid();
|
||||||
|
@ -743,7 +743,7 @@ uint StationCargoList::ShiftCargo(Taction action, StationIDStack next, bool incl
|
||||||
{
|
{
|
||||||
uint max_move = action.MaxMove();
|
uint max_move = action.MaxMove();
|
||||||
while (!next.IsEmpty()) {
|
while (!next.IsEmpty()) {
|
||||||
this->ShiftCargo(action, StationID{next.Pop()});
|
this->ShiftCargo(action, next.Pop());
|
||||||
if (action.MaxMove() == 0) break;
|
if (action.MaxMove() == 0) break;
|
||||||
}
|
}
|
||||||
if (include_invalid && action.MaxMove() > 0) {
|
if (include_invalid && action.MaxMove() > 0) {
|
||||||
|
@ -853,7 +853,7 @@ uint StationCargoList::Load(uint max_move, VehicleCargoList *dest, StationIDStac
|
||||||
*/
|
*/
|
||||||
uint StationCargoList::Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge)
|
uint StationCargoList::Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge)
|
||||||
{
|
{
|
||||||
return this->ShiftCargo(StationCargoReroute(this, dest, max_move, avoid, avoid2, ge), avoid.base(), false);
|
return this->ShiftCargo(StationCargoReroute(this, dest, max_move, avoid, avoid2, ge), avoid, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -555,7 +555,7 @@ public:
|
||||||
inline bool HasCargoFor(StationIDStack next) const
|
inline bool HasCargoFor(StationIDStack next) const
|
||||||
{
|
{
|
||||||
while (!next.IsEmpty()) {
|
while (!next.IsEmpty()) {
|
||||||
if (this->packets.find(StationID{next.Pop()}) != this->packets.end()) return true;
|
if (this->packets.find(next.Pop()) != this->packets.end()) return true;
|
||||||
}
|
}
|
||||||
/* Packets for StationID::Invalid() can go anywhere. */
|
/* Packets for StationID::Invalid() can go anywhere. */
|
||||||
return this->packets.find(StationID::Invalid()) != this->packets.end();
|
return this->packets.find(StationID::Invalid()) != this->packets.end();
|
||||||
|
|
|
@ -74,8 +74,8 @@ static const uint TOWN_PRODUCTION_DIVISOR = 256;
|
||||||
struct CargoSpec {
|
struct CargoSpec {
|
||||||
CargoLabel label; ///< Unique label of the cargo type.
|
CargoLabel label; ///< Unique label of the cargo type.
|
||||||
uint8_t bitnum = INVALID_CARGO_BITNUM; ///< Cargo bit number, is #INVALID_CARGO_BITNUM for a non-used spec.
|
uint8_t bitnum = INVALID_CARGO_BITNUM; ///< Cargo bit number, is #INVALID_CARGO_BITNUM for a non-used spec.
|
||||||
uint8_t legend_colour;
|
PixelColour legend_colour;
|
||||||
uint8_t rating_colour;
|
PixelColour rating_colour;
|
||||||
uint8_t weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg).
|
uint8_t weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg).
|
||||||
uint16_t multiplier = 0x100; ///< Capacity multiplier for vehicles. (8 fractional bits)
|
uint16_t multiplier = 0x100; ///< Capacity multiplier for vehicles. (8 fractional bits)
|
||||||
CargoClasses classes; ///< Classes of this cargo type. @see CargoClass
|
CargoClasses classes; ///< Classes of this cargo type. @see CargoClass
|
||||||
|
|
|
@ -69,36 +69,45 @@ static void DrawClearLandFence(const TileInfo *ti)
|
||||||
/* combine fences into one sprite object */
|
/* combine fences into one sprite object */
|
||||||
StartSpriteCombine();
|
StartSpriteCombine();
|
||||||
|
|
||||||
int maxz = GetSlopeMaxPixelZ(ti->tileh);
|
SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, 4}, {}};
|
||||||
|
|
||||||
|
bounds.extent.z += GetSlopeMaxPixelZ(ti->tileh);
|
||||||
|
|
||||||
uint fence_nw = GetFence(ti->tile, DIAGDIR_NW);
|
uint fence_nw = GetFence(ti->tile, DIAGDIR_NW);
|
||||||
if (fence_nw != 0) {
|
if (fence_nw != 0) {
|
||||||
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
|
bounds.offset.x = 0;
|
||||||
|
bounds.offset.y = -static_cast<int>(TILE_SIZE);
|
||||||
|
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
|
||||||
SpriteID sprite = _clear_land_fence_sprites[fence_nw - 1] + _fence_mod_by_tileh_nw[ti->tileh];
|
SpriteID sprite = _clear_land_fence_sprites[fence_nw - 1] + _fence_mod_by_tileh_nw[ti->tileh];
|
||||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y - 16, 16, 32, maxz - z + 4, ti->z + z, false, 0, 16, -z);
|
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint fence_ne = GetFence(ti->tile, DIAGDIR_NE);
|
uint fence_ne = GetFence(ti->tile, DIAGDIR_NE);
|
||||||
if (fence_ne != 0) {
|
if (fence_ne != 0) {
|
||||||
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
|
bounds.offset.x = -static_cast<int>(TILE_SIZE);
|
||||||
|
bounds.offset.y = 0;
|
||||||
|
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
|
||||||
SpriteID sprite = _clear_land_fence_sprites[fence_ne - 1] + _fence_mod_by_tileh_ne[ti->tileh];
|
SpriteID sprite = _clear_land_fence_sprites[fence_ne - 1] + _fence_mod_by_tileh_ne[ti->tileh];
|
||||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x - 16, ti->y, 32, 16, maxz - z + 4, ti->z + z, false, 16, 0, -z);
|
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint fence_sw = GetFence(ti->tile, DIAGDIR_SW);
|
uint fence_sw = GetFence(ti->tile, DIAGDIR_SW);
|
||||||
uint fence_se = GetFence(ti->tile, DIAGDIR_SE);
|
uint fence_se = GetFence(ti->tile, DIAGDIR_SE);
|
||||||
|
|
||||||
if (fence_sw != 0 || fence_se != 0) {
|
if (fence_sw != 0 || fence_se != 0) {
|
||||||
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
|
bounds.offset.x = 0;
|
||||||
|
bounds.offset.y = 0;
|
||||||
|
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
|
||||||
|
|
||||||
if (fence_sw != 0) {
|
if (fence_sw != 0) {
|
||||||
SpriteID sprite = _clear_land_fence_sprites[fence_sw - 1] + _fence_mod_by_tileh_sw[ti->tileh];
|
SpriteID sprite = _clear_land_fence_sprites[fence_sw - 1] + _fence_mod_by_tileh_sw[ti->tileh];
|
||||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
|
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fence_se != 0) {
|
if (fence_se != 0) {
|
||||||
SpriteID sprite = _clear_land_fence_sprites[fence_se - 1] + _fence_mod_by_tileh_se[ti->tileh];
|
SpriteID sprite = _clear_land_fence_sprites[fence_se - 1] + _fence_mod_by_tileh_se[ti->tileh];
|
||||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
|
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EndSpriteCombine();
|
EndSpriteCombine();
|
||||||
|
|
|
@ -141,6 +141,8 @@ void SetLocalCompany(CompanyID new_company)
|
||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
InvalidateWindowClassesData(WC_SIGN_LIST, -1);
|
InvalidateWindowClassesData(WC_SIGN_LIST, -1);
|
||||||
InvalidateWindowClassesData(WC_GOALS_LIST);
|
InvalidateWindowClassesData(WC_GOALS_LIST);
|
||||||
|
InvalidateWindowClassesData(WC_COMPANY_COLOUR, -1);
|
||||||
|
ResetVehicleColourMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -150,8 +152,8 @@ void SetLocalCompany(CompanyID new_company)
|
||||||
*/
|
*/
|
||||||
TextColour GetDrawStringCompanyColour(CompanyID company)
|
TextColour GetDrawStringCompanyColour(CompanyID company)
|
||||||
{
|
{
|
||||||
if (!Company::IsValidID(company)) return (TextColour)GetColourGradient(COLOUR_WHITE, SHADE_NORMAL) | TC_IS_PALETTE_COLOUR;
|
if (!Company::IsValidID(company)) return GetColourGradient(COLOUR_WHITE, SHADE_NORMAL).ToTextColour();
|
||||||
return (TextColour)GetColourGradient(_company_colours[company], SHADE_NORMAL) | TC_IS_PALETTE_COLOUR;
|
return GetColourGradient(_company_colours[company], SHADE_NORMAL).ToTextColour();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2369,7 +2369,7 @@ static bool ConFont(std::span<std::string_view> argv)
|
||||||
FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
|
FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
|
||||||
/* Make sure all non sprite fonts are loaded. */
|
/* Make sure all non sprite fonts are loaded. */
|
||||||
if (!setting->font.empty() && !fc->HasParent()) {
|
if (!setting->font.empty() && !fc->HasParent()) {
|
||||||
InitFontCache(fs == FS_MONO);
|
InitFontCache(fs);
|
||||||
fc = FontCache::Get(fs);
|
fc = FontCache::Get(fs);
|
||||||
}
|
}
|
||||||
IConsolePrint(CC_DEFAULT, "{} font:", FontSizeToName(fs));
|
IConsolePrint(CC_DEFAULT, "{} font:", FontSizeToName(fs));
|
||||||
|
|
|
@ -544,7 +544,7 @@ bool IsValidConsoleColour(TextColour c)
|
||||||
* colour gradient, so it must be one of those. */
|
* colour gradient, so it must be one of those. */
|
||||||
c &= ~TC_IS_PALETTE_COLOUR;
|
c &= ~TC_IS_PALETTE_COLOUR;
|
||||||
for (Colours i = COLOUR_BEGIN; i < COLOUR_END; i++) {
|
for (Colours i = COLOUR_BEGIN; i < COLOUR_END; i++) {
|
||||||
if (GetColourGradient(i, SHADE_NORMAL) == c) return true;
|
if (GetColourGradient(i, SHADE_NORMAL).p == c) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -28,15 +28,30 @@ inline int CentreBounds(int min, int max, int size)
|
||||||
return (min + max - size + 1) / 2;
|
return (min + max - size + 1) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Coordinates of a point in 2D */
|
/** A coordinate with two dimensons. */
|
||||||
struct Point {
|
template <typename T>
|
||||||
int x;
|
struct Coord2D {
|
||||||
int y;
|
T x = 0; ///< X coordinate.
|
||||||
|
T y = 0; ///< Y coordinate.
|
||||||
|
|
||||||
constexpr Point() : x(0), y(0) {}
|
constexpr Coord2D() = default;
|
||||||
constexpr Point(int x, int y) : x(x), y(y) {}
|
constexpr Coord2D(T x, T y) : x(x), y(y) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** A coordinate with three dimensions. */
|
||||||
|
template <typename T>
|
||||||
|
struct Coord3D {
|
||||||
|
T x = 0; ///< X coordinate.
|
||||||
|
T y = 0; ///< Y coordinate.
|
||||||
|
T z = 0; ///< Z coordinate.
|
||||||
|
|
||||||
|
constexpr Coord3D() = default;
|
||||||
|
constexpr Coord3D(T x, T y, T z) : x(x), y(y), z(z) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Coordinates of a point in 2D */
|
||||||
|
using Point = Coord2D<int>;
|
||||||
|
|
||||||
/** Dimensions (a width and height) of a rectangle in 2D */
|
/** Dimensions (a width and height) of a rectangle in 2D */
|
||||||
struct Dimension {
|
struct Dimension {
|
||||||
uint width;
|
uint width;
|
||||||
|
|
|
@ -113,13 +113,14 @@ struct SmallStackItem {
|
||||||
* index types of the same length.
|
* index types of the same length.
|
||||||
* @tparam Titem Value type to be used.
|
* @tparam Titem Value type to be used.
|
||||||
* @tparam Tindex Index type to use for the pool.
|
* @tparam Tindex Index type to use for the pool.
|
||||||
* @tparam Tinvalid Invalid item to keep at the bottom of each stack.
|
* @tparam Tinvalid_value Value to construct invalid item to keep at the bottom of each stack.
|
||||||
* @tparam Tgrowth_step Growth step for pool.
|
* @tparam Tgrowth_step Growth step for pool.
|
||||||
* @tparam Tmax_size Maximum size for pool.
|
* @tparam Tmax_size Maximum size for pool.
|
||||||
*/
|
*/
|
||||||
template <typename Titem, typename Tindex, Titem Tinvalid, Tindex Tgrowth_step, Tindex Tmax_size>
|
template <typename Titem, typename Tindex, auto Tinvalid_value, Tindex Tgrowth_step, Tindex Tmax_size>
|
||||||
class SmallStack : public SmallStackItem<Titem, Tindex> {
|
class SmallStack : public SmallStackItem<Titem, Tindex> {
|
||||||
public:
|
public:
|
||||||
|
static constexpr Titem Tinvalid{Tinvalid_value};
|
||||||
|
|
||||||
typedef SmallStackItem<Titem, Tindex> Item;
|
typedef SmallStackItem<Titem, Tindex> Item;
|
||||||
|
|
||||||
|
|
|
@ -413,7 +413,7 @@ struct DepotWindow : Window {
|
||||||
*/
|
*/
|
||||||
if (this->type == VEH_TRAIN && _consistent_train_width != 0) {
|
if (this->type == VEH_TRAIN && _consistent_train_width != 0) {
|
||||||
int w = ScaleSpriteTrad(2 * _consistent_train_width);
|
int w = ScaleSpriteTrad(2 * _consistent_train_width);
|
||||||
int col = GetColourGradient(wid->colour, SHADE_NORMAL);
|
PixelColour col = GetColourGradient(wid->colour, SHADE_NORMAL);
|
||||||
Rect image = ir.Indent(this->header_width, rtl).Indent(this->count_width, !rtl);
|
Rect image = ir.Indent(this->header_width, rtl).Indent(this->count_width, !rtl);
|
||||||
int first_line = w + (-this->hscroll->GetPosition()) % w;
|
int first_line = w + (-this->hscroll->GetPosition()) % w;
|
||||||
if (rtl) {
|
if (rtl) {
|
||||||
|
|
|
@ -215,7 +215,7 @@ void DisasterVehicle::UpdatePosition(int x, int y, int z)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zeppeliner handling, v->state states:
|
* Zeppeliner handling, v->state states:
|
||||||
* 0: Zeppeliner initialization has found a small airport, go there and crash
|
* 0: Zeppeliner initialization has found an airport, go there and crash
|
||||||
* 1: Create crash and animate falling down for extra dramatic effect
|
* 1: Create crash and animate falling down for extra dramatic effect
|
||||||
* 2: Create more smoke and leave debris on ground
|
* 2: Create more smoke and leave debris on ground
|
||||||
* 2: Clear the runway after some time and remove crashed zeppeliner
|
* 2: Clear the runway after some time and remove crashed zeppeliner
|
||||||
|
@ -263,7 +263,7 @@ static bool DisasterTick_Zeppeliner(DisasterVehicle *v)
|
||||||
|
|
||||||
if (IsValidTile(v->tile) && IsAirportTile(v->tile)) {
|
if (IsValidTile(v->tile) && IsAirportTile(v->tile)) {
|
||||||
Station *st = Station::GetByTile(v->tile);
|
Station *st = Station::GetByTile(v->tile);
|
||||||
st->airport.blocks.Reset(AirportBlock::RunwayIn);
|
st->airport.blocks.Reset({AirportBlock::Zeppeliner, AirportBlock::RunwayIn});
|
||||||
AI::NewEvent(GetTileOwner(v->tile), new ScriptEventDisasterZeppelinerCleared(st->index));
|
AI::NewEvent(GetTileOwner(v->tile), new ScriptEventDisasterZeppelinerCleared(st->index));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ static bool DisasterTick_Zeppeliner(DisasterVehicle *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsValidTile(v->tile) && IsAirportTile(v->tile)) {
|
if (IsValidTile(v->tile) && IsAirportTile(v->tile)) {
|
||||||
Station::GetByTile(v->tile)->airport.blocks.Set(AirportBlock::RunwayIn);
|
Station::GetByTile(v->tile)->airport.blocks.Reset({AirportBlock::Zeppeliner, AirportBlock::RunwayIn});
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -722,14 +722,14 @@ typedef void DisasterInitProc();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zeppeliner which crashes on a small airport if one found,
|
* Zeppeliner which crashes on an airport if one found,
|
||||||
* otherwise crashes on a random tile
|
* otherwise crashes on a random tile
|
||||||
*/
|
*/
|
||||||
static void Disaster_Zeppeliner_Init()
|
static void Disaster_Zeppeliner_Init()
|
||||||
{
|
{
|
||||||
if (!Vehicle::CanAllocateItem(2)) return;
|
if (!Vehicle::CanAllocateItem(2)) return;
|
||||||
|
|
||||||
/* Pick a random place, unless we find a small airport */
|
/* Pick a random place, unless we find an airport */
|
||||||
int x = TileX(RandomTile()) * TILE_SIZE + TILE_SIZE / 2;
|
int x = TileX(RandomTile()) * TILE_SIZE + TILE_SIZE / 2;
|
||||||
|
|
||||||
for (const Station *st : Station::Iterate()) {
|
for (const Station *st : Station::Iterate()) {
|
||||||
|
@ -992,9 +992,5 @@ void ReleaseDisasterVehicle(VehicleID vehicle)
|
||||||
|
|
||||||
void DisasterVehicle::UpdateDeltaXY()
|
void DisasterVehicle::UpdateDeltaXY()
|
||||||
{
|
{
|
||||||
this->x_offs = -1;
|
this->bounds = {{-1, -1, 0}, {2, 2, 5}, {}};
|
||||||
this->y_offs = -1;
|
|
||||||
this->x_extent = 2;
|
|
||||||
this->y_extent = 2;
|
|
||||||
this->z_extent = 5;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,8 @@ public:
|
||||||
|
|
||||||
void Draw(const Rect &full, const Rect &, bool, int, Colours bg_colour) const override
|
void Draw(const Rect &full, const Rect &, bool, int, Colours bg_colour) const override
|
||||||
{
|
{
|
||||||
uint8_t c1 = GetColourGradient(bg_colour, SHADE_DARK);
|
PixelColour c1 = GetColourGradient(bg_colour, SHADE_DARK);
|
||||||
uint8_t c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST);
|
PixelColour c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST);
|
||||||
|
|
||||||
int mid = CentreBounds(full.top, full.bottom, 0);
|
int mid = CentreBounds(full.top, full.bottom, 0);
|
||||||
GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1);
|
GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1);
|
||||||
|
|
|
@ -1067,6 +1067,7 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoType cargo_type, uint
|
||||||
|
|
||||||
uint amount = std::min(num_pieces, 0xFFFFu - it->waiting);
|
uint amount = std::min(num_pieces, 0xFFFFu - it->waiting);
|
||||||
it->waiting += amount;
|
it->waiting += amount;
|
||||||
|
it->GetOrCreateHistory()[THIS_MONTH].accepted += amount;
|
||||||
it->last_accepted = TimerGameEconomy::date;
|
it->last_accepted = TimerGameEconomy::date;
|
||||||
num_pieces -= amount;
|
num_pieces -= amount;
|
||||||
accepted += amount;
|
accepted += amount;
|
||||||
|
|
|
@ -619,11 +619,7 @@ bool EffectVehicle::Tick()
|
||||||
|
|
||||||
void EffectVehicle::UpdateDeltaXY()
|
void EffectVehicle::UpdateDeltaXY()
|
||||||
{
|
{
|
||||||
this->x_offs = 0;
|
this->bounds = {{}, {1, 1, 1}, {}};
|
||||||
this->y_offs = 0;
|
|
||||||
this->x_extent = 1;
|
|
||||||
this->y_extent = 1;
|
|
||||||
this->z_extent = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -248,27 +248,12 @@ static int GetPCPElevation(TileIndex tile, DiagDirection pcp_pos)
|
||||||
*/
|
*/
|
||||||
void DrawRailCatenaryOnTunnel(const TileInfo *ti)
|
void DrawRailCatenaryOnTunnel(const TileInfo *ti)
|
||||||
{
|
{
|
||||||
/* xmin, ymin, xmax + 1, ymax + 1 of BB */
|
|
||||||
static const int tunnel_wire_bb[4][4] = {
|
|
||||||
{ 0, 1, 16, 15 }, // NE
|
|
||||||
{ 1, 0, 15, 16 }, // SE
|
|
||||||
{ 0, 1, 16, 15 }, // SW
|
|
||||||
{ 1, 0, 15, 16 }, // NW
|
|
||||||
};
|
|
||||||
|
|
||||||
DiagDirection dir = GetTunnelBridgeDirection(ti->tile);
|
DiagDirection dir = GetTunnelBridgeDirection(ti->tile);
|
||||||
|
|
||||||
SpriteID wire_base = GetWireBase(ti->tile);
|
SpriteID wire_base = GetWireBase(ti->tile);
|
||||||
|
|
||||||
const SortableSpriteStruct *sss = &_rail_catenary_sprite_data_tunnel[dir];
|
const SortableSpriteStruct &sss = _rail_catenary_sprite_data_tunnel[dir];
|
||||||
const int *bb_data = tunnel_wire_bb[dir];
|
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, GetTilePixelZ(ti->tile), sss, IsTransparencySet(TO_CATENARY));
|
||||||
AddSortableSpriteToDraw(
|
|
||||||
wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
|
|
||||||
bb_data[2] - sss->x_offset, bb_data[3] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset + 1,
|
|
||||||
GetTilePixelZ(ti->tile) + sss->z_offset,
|
|
||||||
IsTransparencySet(TO_CATENARY),
|
|
||||||
bb_data[0] - sss->x_offset, bb_data[1] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -440,8 +425,8 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||||
continue; // No neighbour, go looking for a better position
|
continue; // No neighbour, go looking for a better position
|
||||||
}
|
}
|
||||||
|
|
||||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[temp], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE,
|
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[temp], PAL_NONE, x, y, elevation,
|
||||||
elevation, IsTransparencySet(TO_CATENARY), -1, -1);
|
{{-1, -1, 0}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {1, 1, 0}}, IsTransparencySet(TO_CATENARY));
|
||||||
|
|
||||||
break; // We already have drawn a pylon, bail out
|
break; // We already have drawn a pylon, bail out
|
||||||
}
|
}
|
||||||
|
@ -482,7 +467,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||||
|
|
||||||
assert(pcp_config != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that)
|
assert(pcp_config != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that)
|
||||||
assert(!IsSteepSlope(tileh[TS_HOME]));
|
assert(!IsSteepSlope(tileh[TS_HOME]));
|
||||||
const SortableSpriteStruct *sss = &_rail_catenary_sprite_data[_rail_wires[tileh_selector][t][pcp_config]];
|
const SortableSpriteStruct &sss = _rail_catenary_sprite_data[_rail_wires[tileh_selector][t][pcp_config]];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
|
* The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
|
||||||
|
@ -490,9 +475,8 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||||
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps, so we round the result up or
|
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps, so we round the result up or
|
||||||
* down to the nearest full height change.
|
* down to the nearest full height change.
|
||||||
*/
|
*/
|
||||||
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
|
int z = (GetSlopePixelZ(ti->x + sss.origin.x, ti->y + sss.origin.y, true) + 4) / 8 * 8;
|
||||||
sss->x_size, sss->y_size, sss->z_size, (GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset, true) + 4) / 8 * 8 + sss->z_offset,
|
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, z, sss, IsTransparencySet(TO_CATENARY));
|
||||||
IsTransparencySet(TO_CATENARY));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,13 +514,12 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
||||||
|
|
||||||
SpriteID wire_base = GetWireBase(end, TCX_ON_BRIDGE);
|
SpriteID wire_base = GetWireBase(end, TCX_ON_BRIDGE);
|
||||||
|
|
||||||
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
|
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x, ti->y, height, *sss, IsTransparencySet(TO_CATENARY));
|
||||||
sss->x_size, sss->y_size, sss->z_size, height + sss->z_offset,
|
|
||||||
IsTransparencySet(TO_CATENARY)
|
|
||||||
);
|
|
||||||
|
|
||||||
SpriteID pylon_base = GetPylonBase(end, TCX_ON_BRIDGE);
|
SpriteID pylon_base = GetPylonBase(end, TCX_ON_BRIDGE);
|
||||||
|
|
||||||
|
static constexpr SpriteBounds pylon_bounds{{-1, -1, 0}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {1, 1, 0}};
|
||||||
|
|
||||||
/* Finished with wires, draw pylons
|
/* Finished with wires, draw pylons
|
||||||
* every other tile needs a pylon on the northern end */
|
* every other tile needs a pylon on the northern end */
|
||||||
if (num % 2) {
|
if (num % 2) {
|
||||||
|
@ -545,7 +528,7 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
||||||
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos);
|
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos);
|
||||||
uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos];
|
uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos];
|
||||||
uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
|
uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
|
||||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
|
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, height, pylon_bounds, IsTransparencySet(TO_CATENARY));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* need a pylon on the southern end of the bridge */
|
/* need a pylon on the southern end of the bridge */
|
||||||
|
@ -555,7 +538,7 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
||||||
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos);
|
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos);
|
||||||
uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos];
|
uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos];
|
||||||
uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
|
uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
|
||||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
|
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, height, pylon_bounds, IsTransparencySet(TO_CATENARY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,17 +552,12 @@ void DrawRailCatenary(const TileInfo *ti)
|
||||||
switch (GetTileType(ti->tile)) {
|
switch (GetTileType(ti->tile)) {
|
||||||
case MP_RAILWAY:
|
case MP_RAILWAY:
|
||||||
if (IsRailDepot(ti->tile)) {
|
if (IsRailDepot(ti->tile)) {
|
||||||
const SortableSpriteStruct *sss = &_rail_catenary_sprite_data_depot[GetRailDepotDirection(ti->tile)];
|
const SortableSpriteStruct &sss = _rail_catenary_sprite_data_depot[GetRailDepotDirection(ti->tile)];
|
||||||
|
|
||||||
SpriteID wire_base = GetWireBase(ti->tile);
|
SpriteID wire_base = GetWireBase(ti->tile);
|
||||||
|
|
||||||
/* This wire is not visible with the default depot sprites */
|
/* This wire is not visible with the default depot sprites */
|
||||||
AddSortableSpriteToDraw(
|
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, GetTileMaxPixelZ(ti->tile), sss, IsTransparencySet(TO_CATENARY));
|
||||||
wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
|
|
||||||
sss->x_size, sss->y_size, sss->z_size,
|
|
||||||
GetTileMaxPixelZ(ti->tile) + sss->z_offset,
|
|
||||||
IsTransparencySet(TO_CATENARY)
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -84,7 +84,7 @@ struct EnginePreviewWindow : Window {
|
||||||
|
|
||||||
/* Get size of engine sprite, on loan from depot_gui.cpp */
|
/* Get size of engine sprite, on loan from depot_gui.cpp */
|
||||||
EngineID engine = static_cast<EngineID>(this->window_number);
|
EngineID engine = static_cast<EngineID>(this->window_number);
|
||||||
EngineImageType image_type = EIT_PURCHASE;
|
EngineImageType image_type = EIT_PREVIEW;
|
||||||
uint x, y;
|
uint x, y;
|
||||||
int x_offs, y_offs;
|
int x_offs, y_offs;
|
||||||
|
|
||||||
|
|
|
@ -126,10 +126,10 @@ void SetFont(FontSize fontsize, const std::string &font, uint size)
|
||||||
CheckForMissingGlyphs();
|
CheckForMissingGlyphs();
|
||||||
_fcsettings = std::move(backup);
|
_fcsettings = std::move(backup);
|
||||||
} else {
|
} else {
|
||||||
InitFontCache(true);
|
InitFontCache(fontsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadStringWidthTable(fontsize == FS_MONO);
|
LoadStringWidthTable(fontsize);
|
||||||
UpdateAllVirtCoords();
|
UpdateAllVirtCoords();
|
||||||
ReInitAllWindows(true);
|
ReInitAllWindows(true);
|
||||||
|
|
||||||
|
@ -213,15 +213,13 @@ std::string GetFontCacheFontName(FontSize fs)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (Re)initialize the font cache related things, i.e. load the non-sprite fonts.
|
* (Re)initialize the font cache related things, i.e. load the non-sprite fonts.
|
||||||
* @param monospace Whether to initialise the monospace or regular fonts.
|
* @param fontsizes Font sizes to be initialised.
|
||||||
*/
|
*/
|
||||||
void InitFontCache(bool monospace)
|
void InitFontCache(FontSizes fontsizes)
|
||||||
{
|
{
|
||||||
FontCache::InitializeFontCaches();
|
FontCache::InitializeFontCaches();
|
||||||
|
|
||||||
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
|
for (FontSize fs : fontsizes) {
|
||||||
if (monospace != (fs == FS_MONO)) continue;
|
|
||||||
|
|
||||||
FontCache *fc = FontCache::Get(fs);
|
FontCache *fc = FontCache::Get(fs);
|
||||||
if (fc->HasParent()) delete fc;
|
if (fc->HasParent()) delete fc;
|
||||||
|
|
||||||
|
|
|
@ -70,16 +70,6 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual int GetFontSize() const { return this->height; }
|
virtual int GetFontSize() const { return this->height; }
|
||||||
|
|
||||||
/**
|
|
||||||
* Map a SpriteID to the key
|
|
||||||
* @param key The key to map to.
|
|
||||||
* @param sprite The sprite that is being mapped.
|
|
||||||
*/
|
|
||||||
virtual void SetUnicodeGlyph(char32_t key, SpriteID sprite) = 0;
|
|
||||||
|
|
||||||
/** Initialize the glyph map */
|
|
||||||
virtual void InitializeUnicodeGlyphMap() = 0;
|
|
||||||
|
|
||||||
/** Clear the font cache. */
|
/** Clear the font cache. */
|
||||||
virtual void ClearFontCache() = 0;
|
virtual void ClearFontCache() = 0;
|
||||||
|
|
||||||
|
@ -153,23 +143,9 @@ public:
|
||||||
virtual bool IsBuiltInFont() = 0;
|
virtual bool IsBuiltInFont() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Map a SpriteID to the font size and key */
|
inline void ClearFontCache(FontSizes fontsizes)
|
||||||
inline void SetUnicodeGlyph(FontSize size, char32_t key, SpriteID sprite)
|
|
||||||
{
|
{
|
||||||
FontCache::Get(size)->SetUnicodeGlyph(key, sprite);
|
for (FontSize fs : fontsizes) {
|
||||||
}
|
|
||||||
|
|
||||||
/** Initialize the glyph map */
|
|
||||||
inline void InitializeUnicodeGlyphMap()
|
|
||||||
{
|
|
||||||
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
|
|
||||||
FontCache::Get(fs)->InitializeUnicodeGlyphMap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void ClearFontCache()
|
|
||||||
{
|
|
||||||
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
|
|
||||||
FontCache::Get(fs)->ClearFontCache();
|
FontCache::Get(fs)->ClearFontCache();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,10 +207,14 @@ inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs)
|
||||||
|
|
||||||
uint GetFontCacheFontSize(FontSize fs);
|
uint GetFontCacheFontSize(FontSize fs);
|
||||||
std::string GetFontCacheFontName(FontSize fs);
|
std::string GetFontCacheFontName(FontSize fs);
|
||||||
void InitFontCache(bool monospace);
|
void InitFontCache(FontSizes fontsizes);
|
||||||
void UninitFontCache();
|
void UninitFontCache();
|
||||||
|
|
||||||
bool GetFontAAState();
|
bool GetFontAAState();
|
||||||
void SetFont(FontSize fontsize, const std::string &font, uint size);
|
void SetFont(FontSize fontsize, const std::string &font, uint size);
|
||||||
|
|
||||||
|
/* Implemented in spritefontcache.cpp */
|
||||||
|
void InitializeUnicodeGlyphMap();
|
||||||
|
void SetUnicodeGlyph(FontSize size, char32_t key, SpriteID sprite);
|
||||||
|
|
||||||
#endif /* FONTCACHE_H */
|
#endif /* FONTCACHE_H */
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../stdafx.h"
|
#include "../stdafx.h"
|
||||||
#include "../fontcache.h"
|
#include "../fontcache.h"
|
||||||
#include "../gfx_layout.h"
|
#include "../gfx_layout.h"
|
||||||
|
#include "../string_func.h"
|
||||||
#include "../zoom_func.h"
|
#include "../zoom_func.h"
|
||||||
#include "spritefontcache.h"
|
#include "spritefontcache.h"
|
||||||
|
|
||||||
|
@ -31,41 +32,43 @@ static int ScaleFontTrad(int value)
|
||||||
return UnScaleByZoom(value * ZOOM_BASE, _font_zoom);
|
return UnScaleByZoom(value * ZOOM_BASE, _font_zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static std::array<std::unordered_map<char32_t, SpriteID>, FS_END> _char_maps{}; ///< Glyph map for each font size.
|
||||||
* Create a new sprite font cache.
|
|
||||||
* @param fs The font size to create the cache for.
|
|
||||||
*/
|
|
||||||
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs)
|
|
||||||
{
|
|
||||||
this->InitializeUnicodeGlyphMap();
|
|
||||||
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
|
|
||||||
this->ascender = (this->height - ScaleFontTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get SpriteID associated with a character.
|
* Get SpriteID associated with a character.
|
||||||
* @param key Character to find.
|
* @param key Character to find.
|
||||||
* @return SpriteID for character, or 0 if not present.
|
* @return SpriteID for character, or 0 if not present.
|
||||||
*/
|
*/
|
||||||
SpriteID SpriteFontCache::GetUnicodeGlyph(char32_t key)
|
static SpriteID GetUnicodeGlyph(FontSize fs, char32_t key)
|
||||||
{
|
{
|
||||||
const auto found = this->char_map.find(key);
|
auto found = _char_maps[fs].find(key);
|
||||||
if (found == std::end(this->char_map)) return 0;
|
if (found != std::end(_char_maps[fs])) return found->second;
|
||||||
return found->second;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteFontCache::SetUnicodeGlyph(char32_t key, SpriteID sprite)
|
/**
|
||||||
|
* Set the SpriteID for a unicode character.
|
||||||
|
* @param fs Font size to set.
|
||||||
|
* @param key Unicode character to set.
|
||||||
|
* @param sprite SpriteID of character.
|
||||||
|
*/
|
||||||
|
void SetUnicodeGlyph(FontSize fs, char32_t key, SpriteID sprite)
|
||||||
{
|
{
|
||||||
this->char_map[key] = sprite;
|
_char_maps[fs][key] = sprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteFontCache::InitializeUnicodeGlyphMap()
|
/**
|
||||||
|
* Initialize the glyph map for a font size.
|
||||||
|
* This populates the glyph map with the baseset font sprites.
|
||||||
|
* @param fs Font size to initialize.
|
||||||
|
*/
|
||||||
|
void InitializeUnicodeGlyphMap(FontSize fs)
|
||||||
{
|
{
|
||||||
/* Clear out existing glyph map if it exists */
|
/* Clear out existing glyph map if it exists */
|
||||||
this->char_map.clear();
|
_char_maps[fs].clear();
|
||||||
|
|
||||||
SpriteID base;
|
SpriteID base;
|
||||||
switch (this->fs) {
|
switch (fs) {
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
case FS_MONO: // Use normal as default for mono spaced font
|
case FS_MONO: // Use normal as default for mono spaced font
|
||||||
case FS_NORMAL: base = SPR_ASCII_SPACE; break;
|
case FS_NORMAL: base = SPR_ASCII_SPACE; break;
|
||||||
|
@ -76,24 +79,45 @@ void SpriteFontCache::InitializeUnicodeGlyphMap()
|
||||||
for (uint i = ASCII_LETTERSTART; i < 256; i++) {
|
for (uint i = ASCII_LETTERSTART; i < 256; i++) {
|
||||||
SpriteID sprite = base + i - ASCII_LETTERSTART;
|
SpriteID sprite = base + i - ASCII_LETTERSTART;
|
||||||
if (!SpriteExists(sprite)) continue;
|
if (!SpriteExists(sprite)) continue;
|
||||||
this->SetUnicodeGlyph(i, sprite);
|
SetUnicodeGlyph(fs, i, sprite);
|
||||||
this->SetUnicodeGlyph(i + SCC_SPRITE_START, sprite);
|
SetUnicodeGlyph(fs, i + SCC_SPRITE_START, sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Modify map to move non-standard glyphs to a better unicode codepoint. */
|
||||||
for (const auto &unicode_map : _default_unicode_map) {
|
for (const auto &unicode_map : _default_unicode_map) {
|
||||||
uint8_t key = unicode_map.key;
|
uint8_t key = unicode_map.key;
|
||||||
if (key == CLRA) {
|
if (key == CLRA) {
|
||||||
/* Clear the glyph. This happens if the glyph at this code point
|
/* Clear the glyph. This happens if the glyph at this code point
|
||||||
* is non-standard and should be accessed by an SCC_xxx enum
|
* is non-standard and should be accessed by an SCC_xxx enum
|
||||||
* entry only. */
|
* entry only. */
|
||||||
this->SetUnicodeGlyph(unicode_map.code, 0);
|
SetUnicodeGlyph(fs, unicode_map.code, 0);
|
||||||
} else {
|
} else {
|
||||||
SpriteID sprite = base + key - ASCII_LETTERSTART;
|
SpriteID sprite = base + key - ASCII_LETTERSTART;
|
||||||
this->SetUnicodeGlyph(unicode_map.code, sprite);
|
SetUnicodeGlyph(fs, unicode_map.code, sprite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the glyph map.
|
||||||
|
*/
|
||||||
|
void InitializeUnicodeGlyphMap()
|
||||||
|
{
|
||||||
|
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
|
||||||
|
InitializeUnicodeGlyphMap(fs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new sprite font cache.
|
||||||
|
* @param fs The font size to create the cache for.
|
||||||
|
*/
|
||||||
|
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs)
|
||||||
|
{
|
||||||
|
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
|
||||||
|
this->ascender = (this->height - ScaleFontTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
void SpriteFontCache::ClearFontCache()
|
void SpriteFontCache::ClearFontCache()
|
||||||
{
|
{
|
||||||
Layouter::ResetFontCache(this->fs);
|
Layouter::ResetFontCache(this->fs);
|
||||||
|
@ -104,21 +128,21 @@ void SpriteFontCache::ClearFontCache()
|
||||||
const Sprite *SpriteFontCache::GetGlyph(GlyphID key)
|
const Sprite *SpriteFontCache::GetGlyph(GlyphID key)
|
||||||
{
|
{
|
||||||
SpriteID sprite = static_cast<SpriteID>(key & ~SPRITE_GLYPH);
|
SpriteID sprite = static_cast<SpriteID>(key & ~SPRITE_GLYPH);
|
||||||
if (sprite == 0) sprite = this->GetUnicodeGlyph('?');
|
if (sprite == 0) sprite = GetUnicodeGlyph(this->fs, '?');
|
||||||
return GetSprite(sprite, SpriteType::Font);
|
return GetSprite(sprite, SpriteType::Font);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint SpriteFontCache::GetGlyphWidth(GlyphID key)
|
uint SpriteFontCache::GetGlyphWidth(GlyphID key)
|
||||||
{
|
{
|
||||||
SpriteID sprite = static_cast<SpriteID>(key & ~SPRITE_GLYPH);
|
SpriteID sprite = static_cast<SpriteID>(key & ~SPRITE_GLYPH);
|
||||||
if (sprite == 0) sprite = this->GetUnicodeGlyph('?');
|
if (sprite == 0) sprite = GetUnicodeGlyph(this->fs, '?');
|
||||||
return SpriteExists(sprite) ? GetSprite(sprite, SpriteType::Font)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
|
return SpriteExists(sprite) ? GetSprite(sprite, SpriteType::Font)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GlyphID SpriteFontCache::MapCharToGlyph(char32_t key, [[maybe_unused]] bool allow_fallback)
|
GlyphID SpriteFontCache::MapCharToGlyph(char32_t key, [[maybe_unused]] bool allow_fallback)
|
||||||
{
|
{
|
||||||
assert(IsPrintable(key));
|
assert(IsPrintable(key));
|
||||||
SpriteID sprite = this->GetUnicodeGlyph(key);
|
SpriteID sprite = GetUnicodeGlyph(this->fs, key);
|
||||||
if (sprite == 0) return 0;
|
if (sprite == 0) return 0;
|
||||||
return SPRITE_GLYPH | sprite;
|
return SPRITE_GLYPH | sprite;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,15 +10,12 @@
|
||||||
#ifndef SPRITEFONTCACHE_H
|
#ifndef SPRITEFONTCACHE_H
|
||||||
#define SPRITEFONTCACHE_H
|
#define SPRITEFONTCACHE_H
|
||||||
|
|
||||||
#include "../string_func.h"
|
|
||||||
#include "../fontcache.h"
|
#include "../fontcache.h"
|
||||||
|
|
||||||
/** Font cache for fonts that are based on a freetype font. */
|
/** Font cache for fonts that are based on a freetype font. */
|
||||||
class SpriteFontCache : public FontCache {
|
class SpriteFontCache : public FontCache {
|
||||||
public:
|
public:
|
||||||
SpriteFontCache(FontSize fs);
|
SpriteFontCache(FontSize fs);
|
||||||
void SetUnicodeGlyph(char32_t key, SpriteID sprite) override;
|
|
||||||
void InitializeUnicodeGlyphMap() override;
|
|
||||||
void ClearFontCache() override;
|
void ClearFontCache() override;
|
||||||
const Sprite *GetGlyph(GlyphID key) override;
|
const Sprite *GetGlyph(GlyphID key) override;
|
||||||
uint GetGlyphWidth(GlyphID key) override;
|
uint GetGlyphWidth(GlyphID key) override;
|
||||||
|
@ -26,10 +23,6 @@ public:
|
||||||
GlyphID MapCharToGlyph(char32_t key, bool allow_fallback = true) override;
|
GlyphID MapCharToGlyph(char32_t key, bool allow_fallback = true) override;
|
||||||
std::string GetFontName() override { return "sprite"; }
|
std::string GetFontName() override { return "sprite"; }
|
||||||
bool IsBuiltInFont() override { return true; }
|
bool IsBuiltInFont() override { return true; }
|
||||||
|
|
||||||
private:
|
|
||||||
std::unordered_map<char32_t, SpriteID> char_map{}; ///< Mapping of characters to sprite IDs.
|
|
||||||
SpriteID GetUnicodeGlyph(char32_t key);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SPRITEFONTCACHE_H */
|
#endif /* SPRITEFONTCACHE_H */
|
||||||
|
|
|
@ -46,8 +46,6 @@ public:
|
||||||
TrueTypeFontCache(FontSize fs, int pixels);
|
TrueTypeFontCache(FontSize fs, int pixels);
|
||||||
virtual ~TrueTypeFontCache();
|
virtual ~TrueTypeFontCache();
|
||||||
int GetFontSize() const override { return this->used_size; }
|
int GetFontSize() const override { return this->used_size; }
|
||||||
void SetUnicodeGlyph(char32_t key, SpriteID sprite) override { this->parent->SetUnicodeGlyph(key, sprite); }
|
|
||||||
void InitializeUnicodeGlyphMap() override { this->parent->InitializeUnicodeGlyphMap(); }
|
|
||||||
const Sprite *GetGlyph(GlyphID key) override;
|
const Sprite *GetGlyph(GlyphID key) override;
|
||||||
void ClearFontCache() override;
|
void ClearFontCache() override;
|
||||||
uint GetGlyphWidth(GlyphID key) override;
|
uint GetGlyphWidth(GlyphID key) override;
|
||||||
|
|
|
@ -867,9 +867,9 @@ struct FrametimeGraphWindow : Window {
|
||||||
const int x_max = r.right;
|
const int x_max = r.right;
|
||||||
const int y_zero = r.top + (int)this->graph_size.height;
|
const int y_zero = r.top + (int)this->graph_size.height;
|
||||||
const int y_max = r.top;
|
const int y_max = r.top;
|
||||||
const int c_grid = PC_DARK_GREY;
|
const PixelColour c_grid = PC_DARK_GREY;
|
||||||
const int c_lines = PC_BLACK;
|
const PixelColour c_lines = PC_BLACK;
|
||||||
const int c_peak = PC_DARK_RED;
|
const PixelColour c_peak = PC_DARK_RED;
|
||||||
|
|
||||||
const TimingMeasurement draw_horz_scale = (TimingMeasurement)this->horizontal_scale * TIMESTAMP_PRECISION / 2;
|
const TimingMeasurement draw_horz_scale = (TimingMeasurement)this->horizontal_scale * TIMESTAMP_PRECISION / 2;
|
||||||
const TimingMeasurement draw_vert_scale = (TimingMeasurement)this->vertical_scale;
|
const TimingMeasurement draw_vert_scale = (TimingMeasurement)this->vertical_scale;
|
||||||
|
@ -959,7 +959,7 @@ struct FrametimeGraphWindow : Window {
|
||||||
|
|
||||||
/* If the peak value is significantly larger than the average, mark and label it */
|
/* If the peak value is significantly larger than the average, mark and label it */
|
||||||
if (points_drawn > 0 && peak_value > TIMESTAMP_PRECISION / 100 && 2 * peak_value > 3 * value_sum / points_drawn) {
|
if (points_drawn > 0 && peak_value > TIMESTAMP_PRECISION / 100 && 2 * peak_value > 3 * value_sum / points_drawn) {
|
||||||
TextColour tc_peak = (TextColour)(TC_IS_PALETTE_COLOUR | c_peak);
|
TextColour tc_peak = c_peak.ToTextColour();
|
||||||
GfxFillRect(peak_point.x - 1, peak_point.y - 1, peak_point.x + 1, peak_point.y + 1, c_peak);
|
GfxFillRect(peak_point.x - 1, peak_point.y - 1, peak_point.x + 1, peak_point.y + 1, c_peak);
|
||||||
uint64_t value = peak_value * 1000 / TIMESTAMP_PRECISION;
|
uint64_t value = peak_value * 1000 / TIMESTAMP_PRECISION;
|
||||||
int label_y = std::max(y_max, peak_point.y - GetCharacterHeight(FS_SMALL));
|
int label_y = std::max(y_max, peak_point.y - GetCharacterHeight(FS_SMALL));
|
||||||
|
|
62
src/gfx.cpp
62
src/gfx.cpp
|
@ -8,6 +8,7 @@
|
||||||
/** @file gfx.cpp Handling of drawing text and other gfx related stuff. */
|
/** @file gfx.cpp Handling of drawing text and other gfx related stuff. */
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
#include "gfx_func.h"
|
||||||
#include "gfx_layout.h"
|
#include "gfx_layout.h"
|
||||||
#include "progress.h"
|
#include "progress.h"
|
||||||
#include "zoom_func.h"
|
#include "zoom_func.h"
|
||||||
|
@ -112,7 +113,7 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo)
|
||||||
* FILLRECT_CHECKER: Like FILLRECT_OPAQUE, but only draw every second pixel (used to grey out things)
|
* FILLRECT_CHECKER: Like FILLRECT_OPAQUE, but only draw every second pixel (used to grey out things)
|
||||||
* FILLRECT_RECOLOUR: Apply a recolour sprite to every pixel in the rectangle currently on screen
|
* FILLRECT_RECOLOUR: Apply a recolour sprite to every pixel in the rectangle currently on screen
|
||||||
*/
|
*/
|
||||||
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode)
|
void GfxFillRect(int left, int top, int right, int bottom, const std::variant<PixelColour, PaletteID> &colour, FillRectMode mode)
|
||||||
{
|
{
|
||||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
const DrawPixelInfo *dpi = _cur_dpi;
|
const DrawPixelInfo *dpi = _cur_dpi;
|
||||||
|
@ -141,17 +142,18 @@ void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectM
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
default: // FILLRECT_OPAQUE
|
default: // FILLRECT_OPAQUE
|
||||||
blitter->DrawRect(dst, right, bottom, (uint8_t)colour);
|
blitter->DrawRect(dst, right, bottom, std::get<PixelColour>(colour));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILLRECT_RECOLOUR:
|
case FILLRECT_RECOLOUR:
|
||||||
blitter->DrawColourMappingRect(dst, right, bottom, GB(colour, 0, PALETTE_WIDTH));
|
blitter->DrawColourMappingRect(dst, right, bottom, GB(std::get<PaletteID>(colour), 0, PALETTE_WIDTH));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILLRECT_CHECKER: {
|
case FILLRECT_CHECKER: {
|
||||||
uint8_t bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
|
uint8_t bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
|
||||||
|
PixelColour pc = std::get<PixelColour>(colour);
|
||||||
do {
|
do {
|
||||||
for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, (uint8_t)colour);
|
for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, pc);
|
||||||
dst = blitter->MoveTo(dst, 0, 1);
|
dst = blitter->MoveTo(dst, 0, 1);
|
||||||
} while (--bottom > 0);
|
} while (--bottom > 0);
|
||||||
break;
|
break;
|
||||||
|
@ -208,7 +210,7 @@ static std::vector<LineSegment> MakePolygonSegments(std::span<const Point> shape
|
||||||
* FILLRECT_CHECKER: Fill every other pixel with the specified colour, in a checkerboard pattern.
|
* FILLRECT_CHECKER: Fill every other pixel with the specified colour, in a checkerboard pattern.
|
||||||
* FILLRECT_RECOLOUR: Apply a recolour sprite to every pixel in the polygon.
|
* FILLRECT_RECOLOUR: Apply a recolour sprite to every pixel in the polygon.
|
||||||
*/
|
*/
|
||||||
void GfxFillPolygon(std::span<const Point> shape, int colour, FillRectMode mode)
|
void GfxFillPolygon(std::span<const Point> shape, const std::variant<PixelColour, PaletteID> &colour, FillRectMode mode)
|
||||||
{
|
{
|
||||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
const DrawPixelInfo *dpi = _cur_dpi;
|
const DrawPixelInfo *dpi = _cur_dpi;
|
||||||
|
@ -277,18 +279,20 @@ void GfxFillPolygon(std::span<const Point> shape, int colour, FillRectMode mode)
|
||||||
void *dst = blitter->MoveTo(dpi->dst_ptr, x1, y);
|
void *dst = blitter->MoveTo(dpi->dst_ptr, x1, y);
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
default: // FILLRECT_OPAQUE
|
default: // FILLRECT_OPAQUE
|
||||||
blitter->DrawRect(dst, x2 - x1, 1, (uint8_t)colour);
|
blitter->DrawRect(dst, x2 - x1, 1, std::get<PixelColour>(colour));
|
||||||
break;
|
break;
|
||||||
case FILLRECT_RECOLOUR:
|
case FILLRECT_RECOLOUR:
|
||||||
blitter->DrawColourMappingRect(dst, x2 - x1, 1, GB(colour, 0, PALETTE_WIDTH));
|
blitter->DrawColourMappingRect(dst, x2 - x1, 1, GB(std::get<PaletteID>(colour), 0, PALETTE_WIDTH));
|
||||||
break;
|
break;
|
||||||
case FILLRECT_CHECKER:
|
case FILLRECT_CHECKER: {
|
||||||
/* Fill every other pixel, offset such that the sum of filled pixels' X and Y coordinates is odd.
|
/* Fill every other pixel, offset such that the sum of filled pixels' X and Y coordinates is odd.
|
||||||
* This creates a checkerboard effect. */
|
* This creates a checkerboard effect. */
|
||||||
|
PixelColour pc = std::get<PixelColour>(colour);
|
||||||
for (int x = (x1 + y) & 1; x < x2 - x1; x += 2) {
|
for (int x = (x1 + y) & 1; x < x2 - x1; x += 2) {
|
||||||
blitter->SetPixel(dst, x, 0, (uint8_t)colour);
|
blitter->SetPixel(dst, x, 0, pc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,7 +315,7 @@ void GfxFillPolygon(std::span<const Point> shape, int colour, FillRectMode mode)
|
||||||
* @param width Width of the line.
|
* @param width Width of the line.
|
||||||
* @param dash Length of dashes for dashed lines. 0 means solid line.
|
* @param dash Length of dashes for dashed lines. 0 means solid line.
|
||||||
*/
|
*/
|
||||||
static inline void GfxDoDrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash = 0)
|
static inline void GfxDoDrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, PixelColour colour, int width, int dash = 0)
|
||||||
{
|
{
|
||||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
|
|
||||||
|
@ -384,7 +388,7 @@ static inline bool GfxPreprocessLine(DrawPixelInfo *dpi, int &x, int &y, int &x2
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxDrawLine(int x, int y, int x2, int y2, int colour, int width, int dash)
|
void GfxDrawLine(int x, int y, int x2, int y2, PixelColour colour, int width, int dash)
|
||||||
{
|
{
|
||||||
DrawPixelInfo *dpi = _cur_dpi;
|
DrawPixelInfo *dpi = _cur_dpi;
|
||||||
if (GfxPreprocessLine(dpi, x, y, x2, y2, width)) {
|
if (GfxPreprocessLine(dpi, x, y, x2, y2, width)) {
|
||||||
|
@ -392,7 +396,7 @@ void GfxDrawLine(int x, int y, int x2, int y2, int colour, int width, int dash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxDrawLineUnscaled(int x, int y, int x2, int y2, int colour)
|
void GfxDrawLineUnscaled(int x, int y, int x2, int y2, PixelColour colour)
|
||||||
{
|
{
|
||||||
DrawPixelInfo *dpi = _cur_dpi;
|
DrawPixelInfo *dpi = _cur_dpi;
|
||||||
if (GfxPreprocessLine(dpi, x, y, x2, y2, 1)) {
|
if (GfxPreprocessLine(dpi, x, y, x2, y2, 1)) {
|
||||||
|
@ -433,7 +437,7 @@ void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3)
|
||||||
* ....V.
|
* ....V.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const uint8_t colour = PC_WHITE;
|
static constexpr PixelColour colour = PC_WHITE;
|
||||||
|
|
||||||
GfxDrawLineUnscaled(x, y, x + dx1, y + dy1, colour);
|
GfxDrawLineUnscaled(x, y, x + dx1, y + dy1, colour);
|
||||||
GfxDrawLineUnscaled(x, y, x + dx2, y + dy2, colour);
|
GfxDrawLineUnscaled(x, y, x + dx2, y + dy2, colour);
|
||||||
|
@ -454,7 +458,7 @@ void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3)
|
||||||
* @param width Width of the outline.
|
* @param width Width of the outline.
|
||||||
* @param dash Length of dashes for dashed lines. 0 means solid lines.
|
* @param dash Length of dashes for dashed lines. 0 means solid lines.
|
||||||
*/
|
*/
|
||||||
void DrawRectOutline(const Rect &r, int colour, int width, int dash)
|
void DrawRectOutline(const Rect &r, PixelColour colour, int width, int dash)
|
||||||
{
|
{
|
||||||
GfxDrawLine(r.left, r.top, r.right, r.top, colour, width, dash);
|
GfxDrawLine(r.left, r.top, r.right, r.top, colour, width, dash);
|
||||||
GfxDrawLine(r.left, r.top, r.left, r.bottom, colour, width, dash);
|
GfxDrawLine(r.left, r.top, r.left, r.bottom, colour, width, dash);
|
||||||
|
@ -476,7 +480,7 @@ static void SetColourRemap(TextColour colour)
|
||||||
bool raw_colour = (colour & TC_IS_PALETTE_COLOUR) != 0;
|
bool raw_colour = (colour & TC_IS_PALETTE_COLOUR) != 0;
|
||||||
colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR | TC_FORCED);
|
colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR | TC_FORCED);
|
||||||
|
|
||||||
_string_colourremap[1] = raw_colour ? (uint8_t)colour : _string_colourmap[colour];
|
_string_colourremap[1] = raw_colour ? (uint8_t)colour : _string_colourmap[colour].p;
|
||||||
_string_colourremap[2] = no_shade ? 0 : 1;
|
_string_colourremap[2] = no_shade ? 0 : 1;
|
||||||
_colour_remap_ptr = _string_colourremap;
|
_colour_remap_ptr = _string_colourremap;
|
||||||
}
|
}
|
||||||
|
@ -579,10 +583,11 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||||
|
|
||||||
const uint shadow_offset = ScaleGUITrad(1);
|
const uint shadow_offset = ScaleGUITrad(1);
|
||||||
|
|
||||||
auto draw_line = [&](const ParagraphLayouter::Line &line, bool do_shadow, int left, int min_x, int max_x, bool truncation) {
|
auto draw_line = [&](const ParagraphLayouter::Line &line, bool do_shadow, int left, int min_x, int max_x, bool truncation, TextColour initial_colour) {
|
||||||
const DrawPixelInfo *dpi = _cur_dpi;
|
const DrawPixelInfo *dpi = _cur_dpi;
|
||||||
int dpi_left = dpi->left;
|
int dpi_left = dpi->left;
|
||||||
int dpi_right = dpi->left + dpi->width - 1;
|
int dpi_right = dpi->left + dpi->width - 1;
|
||||||
|
TextColour last_colour = initial_colour;
|
||||||
|
|
||||||
for (int run_index = 0; run_index < line.CountRuns(); run_index++) {
|
for (int run_index = 0; run_index < line.CountRuns(); run_index++) {
|
||||||
const ParagraphLayouter::VisualRun &run = line.GetVisualRun(run_index);
|
const ParagraphLayouter::VisualRun &run = line.GetVisualRun(run_index);
|
||||||
|
@ -592,10 +597,12 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||||
|
|
||||||
FontCache *fc = f->fc;
|
FontCache *fc = f->fc;
|
||||||
TextColour colour = f->colour;
|
TextColour colour = f->colour;
|
||||||
if (colour == TC_INVALID || HasFlag(default_colour, TC_FORCED)) colour = default_colour;
|
if (colour == TC_INVALID || HasFlag(initial_colour, TC_FORCED)) colour = initial_colour;
|
||||||
bool colour_has_shadow = (colour & TC_NO_SHADE) == 0 && colour != TC_BLACK;
|
bool colour_has_shadow = (colour & TC_NO_SHADE) == 0 && colour != TC_BLACK;
|
||||||
SetColourRemap(do_shadow ? TC_BLACK : colour); // the last run also sets the colour for the truncation dots
|
/* Update the last colour for the truncation ellipsis. */
|
||||||
|
last_colour = colour;
|
||||||
if (do_shadow && (!fc->GetDrawGlyphShadow() || !colour_has_shadow)) continue;
|
if (do_shadow && (!fc->GetDrawGlyphShadow() || !colour_has_shadow)) continue;
|
||||||
|
SetColourRemap(do_shadow ? TC_BLACK : colour);
|
||||||
|
|
||||||
for (int i = 0; i < run.GetGlyphCount(); i++) {
|
for (int i = 0; i < run.GetGlyphCount(); i++) {
|
||||||
GlyphID glyph = glyphs[i];
|
GlyphID glyph = glyphs[i];
|
||||||
|
@ -619,20 +626,21 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||||
GfxMainBlitter(sprite, begin_x + (do_shadow ? shadow_offset : 0), top + (do_shadow ? shadow_offset : 0), BlitterMode::ColourRemap);
|
GfxMainBlitter(sprite, begin_x + (do_shadow ? shadow_offset : 0), top + (do_shadow ? shadow_offset : 0), BlitterMode::ColourRemap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return last_colour;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Draw shadow, then foreground */
|
/* Draw shadow, then foreground */
|
||||||
for (bool do_shadow : {true, false}) {
|
for (bool do_shadow : {true, false}) {
|
||||||
draw_line(line, do_shadow, left - offset_x, min_x, max_x, truncation);
|
TextColour colour = draw_line(line, do_shadow, left - offset_x, min_x, max_x, truncation, default_colour);
|
||||||
|
|
||||||
if (truncation) {
|
if (truncation) {
|
||||||
int x = (_current_text_dir == TD_RTL) ? left : (right - truncation_width);
|
int x = (_current_text_dir == TD_RTL) ? left : (right - truncation_width);
|
||||||
draw_line(*truncation_layout->front(), do_shadow, x, INT32_MIN, INT32_MAX, false);
|
draw_line(*truncation_layout->front(), do_shadow, x, INT32_MIN, INT32_MAX, false, colour);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (underline) {
|
if (underline) {
|
||||||
GfxFillRect(left, y + h, right, y + h + WidgetDimensions::scaled.bevel.top - 1, _string_colourremap[1]);
|
GfxFillRect(left, y + h, right, y + h + WidgetDimensions::scaled.bevel.top - 1, PixelColour{_string_colourremap[1]});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (align & SA_HOR_MASK) == SA_RIGHT ? left : right;
|
return (align & SA_HOR_MASK) == SA_RIGHT ? left : right;
|
||||||
|
@ -1240,14 +1248,14 @@ static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode,
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize _stringwidth_table cache
|
* Initialize _stringwidth_table cache for the specified font sizes.
|
||||||
* @param monospace Whether to load the monospace cache or the normal fonts.
|
* @param fontsizes Font sizes to initialise.
|
||||||
*/
|
*/
|
||||||
void LoadStringWidthTable(bool monospace)
|
void LoadStringWidthTable(FontSizes fontsizes)
|
||||||
{
|
{
|
||||||
ClearFontCache();
|
ClearFontCache(fontsizes);
|
||||||
|
|
||||||
for (FontSize fs = monospace ? FS_MONO : FS_BEGIN; fs < (monospace ? FS_END : FS_MONO); fs++) {
|
for (FontSize fs : fontsizes) {
|
||||||
for (uint i = 0; i != 224; i++) {
|
for (uint i = 0; i != 224; i++) {
|
||||||
_stringwidth_table[fs][i] = GetGlyphWidth(fs, i + 32);
|
_stringwidth_table[fs][i] = GetGlyphWidth(fs, i + 32);
|
||||||
}
|
}
|
||||||
|
@ -1812,7 +1820,7 @@ bool AdjustGUIZoom(bool automatic)
|
||||||
if (old_font_zoom != _font_zoom) {
|
if (old_font_zoom != _font_zoom) {
|
||||||
GfxClearFontSpriteCache();
|
GfxClearFontSpriteCache();
|
||||||
}
|
}
|
||||||
ClearFontCache();
|
ClearFontCache(FONTSIZES_ALL);
|
||||||
LoadStringWidthTable();
|
LoadStringWidthTable();
|
||||||
|
|
||||||
SetupWidgetDimensions();
|
SetupWidgetDimensions();
|
||||||
|
|
|
@ -75,6 +75,7 @@ void HandleTextInput(std::string_view str, bool marked = false,
|
||||||
std::optional<size_t> insert_location = std::nullopt, std::optional<size_t> replacement_end = std::nullopt);
|
std::optional<size_t> insert_location = std::nullopt, std::optional<size_t> replacement_end = std::nullopt);
|
||||||
void HandleCtrlChanged();
|
void HandleCtrlChanged();
|
||||||
void HandleMouseEvents();
|
void HandleMouseEvents();
|
||||||
|
void HandleGamepadScrolling(int stick_x, int stick_y, int max_axis_value);
|
||||||
void UpdateWindows();
|
void UpdateWindows();
|
||||||
void ChangeGameSpeed(bool enable_fast_forward);
|
void ChangeGameSpeed(bool enable_fast_forward);
|
||||||
|
|
||||||
|
@ -103,11 +104,11 @@ bool DrawStringMultiLineWithClipping(int left, int right, int top, int bottom, s
|
||||||
|
|
||||||
void DrawCharCentered(char32_t c, const Rect &r, TextColour colour);
|
void DrawCharCentered(char32_t c, const Rect &r, TextColour colour);
|
||||||
|
|
||||||
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode = FILLRECT_OPAQUE);
|
void GfxFillRect(int left, int top, int right, int bottom, const std::variant<PixelColour, PaletteID> &colour, FillRectMode mode = FILLRECT_OPAQUE);
|
||||||
void GfxFillPolygon(std::span<const Point> shape, int colour, FillRectMode mode = FILLRECT_OPAQUE);
|
void GfxFillPolygon(std::span<const Point> shape, const std::variant<PixelColour, PaletteID> &colour, FillRectMode mode = FILLRECT_OPAQUE);
|
||||||
void GfxDrawLine(int left, int top, int right, int bottom, int colour, int width = 1, int dash = 0);
|
void GfxDrawLine(int left, int top, int right, int bottom, PixelColour colour, int width = 1, int dash = 0);
|
||||||
void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
|
void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
|
||||||
void DrawRectOutline(const Rect &r, int colour, int width = 1, int dash = 0);
|
void DrawRectOutline(const Rect &r, PixelColour colour, int width = 1, int dash = 0);
|
||||||
|
|
||||||
/* Versions of DrawString/DrawStringMultiLine that accept a Rect instead of separate left, right, top and bottom parameters. */
|
/* Versions of DrawString/DrawStringMultiLine that accept a Rect instead of separate left, right, top and bottom parameters. */
|
||||||
inline int DrawString(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL)
|
inline int DrawString(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL)
|
||||||
|
@ -135,7 +136,7 @@ inline bool DrawStringMultiLineWithClipping(const Rect &r, std::string_view str,
|
||||||
return DrawStringMultiLineWithClipping(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize);
|
return DrawStringMultiLineWithClipping(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FILLRECT_OPAQUE)
|
inline void GfxFillRect(const Rect &r, const std::variant<PixelColour, PaletteID> &colour, FillRectMode mode = FILLRECT_OPAQUE)
|
||||||
{
|
{
|
||||||
GfxFillRect(r.left, r.top, r.right, r.bottom, colour, mode);
|
GfxFillRect(r.left, r.top, r.right, r.bottom, colour, mode);
|
||||||
}
|
}
|
||||||
|
@ -149,7 +150,7 @@ int GetStringHeight(StringID str, int maxw);
|
||||||
int GetStringLineCount(std::string_view str, int maxw);
|
int GetStringLineCount(std::string_view str, int maxw);
|
||||||
Dimension GetStringMultiLineBoundingBox(StringID str, const Dimension &suggestion);
|
Dimension GetStringMultiLineBoundingBox(StringID str, const Dimension &suggestion);
|
||||||
Dimension GetStringMultiLineBoundingBox(std::string_view str, const Dimension &suggestion, FontSize fontsize = FS_NORMAL);
|
Dimension GetStringMultiLineBoundingBox(std::string_view str, const Dimension &suggestion, FontSize fontsize = FS_NORMAL);
|
||||||
void LoadStringWidthTable(bool monospace = false);
|
void LoadStringWidthTable(FontSizes fontsizes = FONTSIZES_REQUIRED);
|
||||||
|
|
||||||
void DrawDirtyBlocks();
|
void DrawDirtyBlocks();
|
||||||
void AddDirtyBlock(int left, int top, int right, int bottom);
|
void AddDirtyBlock(int left, int top, int right, int bottom);
|
||||||
|
|
|
@ -245,7 +245,6 @@ using Colour = std::conditional_t<std::endian::native == std::endian::little, Co
|
||||||
|
|
||||||
static_assert(sizeof(Colour) == sizeof(uint32_t));
|
static_assert(sizeof(Colour) == sizeof(uint32_t));
|
||||||
|
|
||||||
|
|
||||||
/** Available font sizes */
|
/** Available font sizes */
|
||||||
enum FontSize : uint8_t {
|
enum FontSize : uint8_t {
|
||||||
FS_NORMAL, ///< Index of the normal font in the font tables.
|
FS_NORMAL, ///< Index of the normal font in the font tables.
|
||||||
|
@ -258,6 +257,13 @@ enum FontSize : uint8_t {
|
||||||
};
|
};
|
||||||
DECLARE_INCREMENT_DECREMENT_OPERATORS(FontSize)
|
DECLARE_INCREMENT_DECREMENT_OPERATORS(FontSize)
|
||||||
|
|
||||||
|
using FontSizes = EnumBitSet<FontSize, uint8_t>;
|
||||||
|
|
||||||
|
/** Mask of all possible font sizes. */
|
||||||
|
constexpr FontSizes FONTSIZES_ALL{FS_NORMAL, FS_SMALL, FS_LARGE, FS_MONO};
|
||||||
|
/** Mask of font sizes required to be present. */
|
||||||
|
constexpr FontSizes FONTSIZES_REQUIRED{FS_NORMAL, FS_SMALL, FS_LARGE};
|
||||||
|
|
||||||
inline std::string_view FontSizeToName(FontSize fs)
|
inline std::string_view FontSizeToName(FontSize fs)
|
||||||
{
|
{
|
||||||
static const std::string_view SIZE_TO_NAME[] = { "medium", "small", "large", "mono" };
|
static const std::string_view SIZE_TO_NAME[] = { "medium", "small", "large", "mono" };
|
||||||
|
@ -396,4 +402,14 @@ enum StringAlignment : uint8_t {
|
||||||
};
|
};
|
||||||
DECLARE_ENUM_AS_BIT_SET(StringAlignment)
|
DECLARE_ENUM_AS_BIT_SET(StringAlignment)
|
||||||
|
|
||||||
|
/** Colour for pixel/line drawing. */
|
||||||
|
struct PixelColour {
|
||||||
|
uint8_t p; ///< Palette index.
|
||||||
|
|
||||||
|
constexpr PixelColour() : p(0) {}
|
||||||
|
explicit constexpr PixelColour(uint8_t p) : p(p) {}
|
||||||
|
|
||||||
|
constexpr inline TextColour ToTextColour() const { return static_cast<TextColour>(this->p) | TC_IS_PALETTE_COLOUR; }
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* GFX_TYPE_H */
|
#endif /* GFX_TYPE_H */
|
||||||
|
|
|
@ -245,7 +245,7 @@ static void RealChangeBlitter(std::string_view repl_blitter)
|
||||||
|
|
||||||
/* Clear caches that might have sprites for another blitter. */
|
/* Clear caches that might have sprites for another blitter. */
|
||||||
VideoDriver::GetInstance()->ClearSystemSprites();
|
VideoDriver::GetInstance()->ClearSystemSprites();
|
||||||
ClearFontCache();
|
ClearFontCache(FONTSIZES_ALL);
|
||||||
GfxClearSpriteCache();
|
GfxClearSpriteCache();
|
||||||
ReInitAllWindows(false);
|
ReInitAllWindows(false);
|
||||||
}
|
}
|
||||||
|
@ -326,7 +326,7 @@ void CheckBlitter()
|
||||||
{
|
{
|
||||||
if (!SwitchNewGRFBlitter()) return;
|
if (!SwitchNewGRFBlitter()) return;
|
||||||
|
|
||||||
ClearFontCache();
|
ClearFontCache(FONTSIZES_ALL);
|
||||||
GfxClearSpriteCache();
|
GfxClearSpriteCache();
|
||||||
ReInitAllWindows(false);
|
ReInitAllWindows(false);
|
||||||
}
|
}
|
||||||
|
@ -338,7 +338,7 @@ void GfxLoadSprites()
|
||||||
|
|
||||||
SwitchNewGRFBlitter();
|
SwitchNewGRFBlitter();
|
||||||
VideoDriver::GetInstance()->ClearSystemSprites();
|
VideoDriver::GetInstance()->ClearSystemSprites();
|
||||||
ClearFontCache();
|
ClearFontCache(FONTSIZES_ALL);
|
||||||
GfxInitSpriteMem();
|
GfxInitSpriteMem();
|
||||||
LoadSpriteTables();
|
LoadSpriteTables();
|
||||||
GfxInitPalettes();
|
GfxInitPalettes();
|
||||||
|
|
|
@ -165,11 +165,11 @@ struct ValuesInterval {
|
||||||
struct BaseGraphWindow : Window {
|
struct BaseGraphWindow : Window {
|
||||||
protected:
|
protected:
|
||||||
static const int GRAPH_MAX_DATASETS = 64;
|
static const int GRAPH_MAX_DATASETS = 64;
|
||||||
static const int GRAPH_BASE_COLOUR = GREY_SCALE(2);
|
static constexpr PixelColour GRAPH_BASE_COLOUR = GREY_SCALE(2);
|
||||||
static const int GRAPH_GRID_COLOUR = GREY_SCALE(3);
|
static constexpr PixelColour GRAPH_GRID_COLOUR = GREY_SCALE(3);
|
||||||
static const int GRAPH_AXIS_LINE_COLOUR = GREY_SCALE(1);
|
static constexpr PixelColour GRAPH_AXIS_LINE_COLOUR = GREY_SCALE(1);
|
||||||
static const int GRAPH_ZERO_LINE_COLOUR = GREY_SCALE(8);
|
static constexpr PixelColour GRAPH_ZERO_LINE_COLOUR = GREY_SCALE(8);
|
||||||
static const int GRAPH_YEAR_LINE_COLOUR = GREY_SCALE(5);
|
static constexpr PixelColour GRAPH_YEAR_LINE_COLOUR = GREY_SCALE(5);
|
||||||
static const int GRAPH_NUM_MONTHS = 24; ///< Number of months displayed in the graph.
|
static const int GRAPH_NUM_MONTHS = 24; ///< Number of months displayed in the graph.
|
||||||
static const int GRAPH_PAYMENT_RATE_STEPS = 20; ///< Number of steps on Payment rate graph.
|
static const int GRAPH_PAYMENT_RATE_STEPS = 20; ///< Number of steps on Payment rate graph.
|
||||||
static const int PAYMENT_GRAPH_X_STEP_DAYS = 10; ///< X-axis step label for cargo payment rates "Days in transit".
|
static const int PAYMENT_GRAPH_X_STEP_DAYS = 10; ///< X-axis step label for cargo payment rates "Days in transit".
|
||||||
|
@ -182,8 +182,9 @@ protected:
|
||||||
static const int MIN_GRAPH_NUM_LINES_Y = 9; ///< Minimal number of horizontal lines to draw.
|
static const int MIN_GRAPH_NUM_LINES_Y = 9; ///< Minimal number of horizontal lines to draw.
|
||||||
static const int MIN_GRID_PIXEL_SIZE = 20; ///< Minimum distance between graph lines.
|
static const int MIN_GRID_PIXEL_SIZE = 20; ///< Minimum distance between graph lines.
|
||||||
|
|
||||||
uint64_t excluded_data = 0; ///< bitmask of the datasets that shouldn't be displayed.
|
uint64_t excluded_data = 0; ///< bitmask of datasets hidden by the player.
|
||||||
uint64_t excluded_range = 0; ///< bitmask of ranges that should not be displayed.
|
uint64_t excluded_range = 0; ///< bitmask of ranges hidden by the player.
|
||||||
|
uint64_t masked_range = 0; ///< bitmask of ranges that are not available for the current data.
|
||||||
uint8_t num_on_x_axis = 0;
|
uint8_t num_on_x_axis = 0;
|
||||||
uint8_t num_vert_lines = GRAPH_NUM_MONTHS;
|
uint8_t num_vert_lines = GRAPH_NUM_MONTHS;
|
||||||
|
|
||||||
|
@ -203,7 +204,7 @@ protected:
|
||||||
|
|
||||||
struct DataSet {
|
struct DataSet {
|
||||||
std::array<OverflowSafeInt64, GRAPH_NUM_MONTHS> values;
|
std::array<OverflowSafeInt64, GRAPH_NUM_MONTHS> values;
|
||||||
uint8_t colour;
|
PixelColour colour;
|
||||||
uint8_t exclude_bit;
|
uint8_t exclude_bit;
|
||||||
uint8_t range_bit;
|
uint8_t range_bit;
|
||||||
uint8_t dash;
|
uint8_t dash;
|
||||||
|
@ -216,13 +217,20 @@ protected:
|
||||||
uint8_t highlight_range = UINT8_MAX; ///< Data range that should be highlighted, or UINT8_MAX for none.
|
uint8_t highlight_range = UINT8_MAX; ///< Data range that should be highlighted, or UINT8_MAX for none.
|
||||||
bool highlight_state = false; ///< Current state of highlight, toggled every TIMER_BLINK_INTERVAL period.
|
bool highlight_state = false; ///< Current state of highlight, toggled every TIMER_BLINK_INTERVAL period.
|
||||||
|
|
||||||
template <typename Tprojection>
|
struct BaseFiller {
|
||||||
struct Filler {
|
|
||||||
DataSet &dataset; ///< Dataset to fill.
|
DataSet &dataset; ///< Dataset to fill.
|
||||||
|
|
||||||
|
inline void MakeZero(uint i) const { this->dataset.values[i] = 0; }
|
||||||
|
inline void MakeInvalid(uint i) const { this->dataset.values[i] = INVALID_DATAPOINT; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Tprojection>
|
||||||
|
struct Filler : BaseFiller {
|
||||||
const Tprojection &proj; ///< Projection to apply.
|
const Tprojection &proj; ///< Projection to apply.
|
||||||
|
|
||||||
|
constexpr Filler(DataSet &dataset, const Tprojection &proj) : BaseFiller(dataset), proj(proj) {}
|
||||||
|
|
||||||
inline void Fill(uint i, const auto &data) const { this->dataset.values[i] = std::invoke(this->proj, data); }
|
inline void Fill(uint i, const auto &data) const { this->dataset.values[i] = std::invoke(this->proj, data); }
|
||||||
inline void MakeInvalid(uint i) const { this->dataset.values[i] = INVALID_DATAPOINT; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -390,7 +398,7 @@ protected:
|
||||||
|
|
||||||
/* Draw the grid lines. */
|
/* Draw the grid lines. */
|
||||||
int gridline_width = WidgetDimensions::scaled.bevel.top;
|
int gridline_width = WidgetDimensions::scaled.bevel.top;
|
||||||
int grid_colour = GRAPH_GRID_COLOUR;
|
PixelColour grid_colour = GRAPH_GRID_COLOUR;
|
||||||
|
|
||||||
/* Don't draw the first line, as that's where the axis will be. */
|
/* Don't draw the first line, as that's where the axis will be. */
|
||||||
if (rtl) {
|
if (rtl) {
|
||||||
|
@ -516,7 +524,7 @@ protected:
|
||||||
uint pointoffs1 = pointwidth / 2;
|
uint pointoffs1 = pointwidth / 2;
|
||||||
uint pointoffs2 = pointwidth - pointoffs1;
|
uint pointoffs2 = pointwidth - pointoffs1;
|
||||||
|
|
||||||
auto draw_dataset = [&](const DataSet &dataset, uint8_t colour) {
|
auto draw_dataset = [&](const DataSet &dataset, PixelColour colour) {
|
||||||
if (HasBit(this->excluded_data, dataset.exclude_bit)) return;
|
if (HasBit(this->excluded_data, dataset.exclude_bit)) return;
|
||||||
if (HasBit(this->excluded_range, dataset.range_bit)) return;
|
if (HasBit(this->excluded_range, dataset.range_bit)) return;
|
||||||
|
|
||||||
|
@ -675,13 +683,17 @@ public:
|
||||||
uint index = 0;
|
uint index = 0;
|
||||||
Rect line = r.WithHeight(line_height);
|
Rect line = r.WithHeight(line_height);
|
||||||
for (const auto &str : this->ranges) {
|
for (const auto &str : this->ranges) {
|
||||||
bool lowered = !HasBit(this->excluded_range, index);
|
bool lowered = !HasBit(this->excluded_range, index) && !HasBit(this->masked_range, index);
|
||||||
|
|
||||||
/* Redraw frame if lowered */
|
/* Redraw frame if lowered */
|
||||||
if (lowered) DrawFrameRect(line, COLOUR_BROWN, FrameFlag::Lowered);
|
if (lowered) DrawFrameRect(line, COLOUR_BROWN, FrameFlag::Lowered);
|
||||||
|
|
||||||
const Rect text = line.Shrink(WidgetDimensions::scaled.framerect);
|
const Rect text = line.Shrink(WidgetDimensions::scaled.framerect);
|
||||||
DrawString(text, str, TC_BLACK, SA_CENTER, false, FS_SMALL);
|
DrawString(text, str, (this->highlight_state && this->highlight_range == index) ? TC_WHITE : TC_BLACK, SA_CENTER, false, FS_SMALL);
|
||||||
|
|
||||||
|
if (HasBit(this->masked_range, index)) {
|
||||||
|
GfxFillRect(line.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(COLOUR_BROWN, SHADE_DARKER), FILLRECT_CHECKER);
|
||||||
|
}
|
||||||
|
|
||||||
line = line.Translate(0, line_height);
|
line = line.Translate(0, line_height);
|
||||||
++index;
|
++index;
|
||||||
|
@ -704,6 +716,7 @@ public:
|
||||||
case WID_GRAPH_RANGE_MATRIX: {
|
case WID_GRAPH_RANGE_MATRIX: {
|
||||||
int row = GetRowFromWidget(pt.y, widget, 0, GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical());
|
int row = GetRowFromWidget(pt.y, widget, 0, GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical());
|
||||||
|
|
||||||
|
if (HasBit(this->masked_range, row)) break;
|
||||||
ToggleBit(this->excluded_range, row);
|
ToggleBit(this->excluded_range, row);
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
break;
|
break;
|
||||||
|
@ -1115,6 +1128,7 @@ struct BaseCargoGraphWindow : BaseGraphWindow {
|
||||||
{
|
{
|
||||||
this->CreateNestedTree();
|
this->CreateNestedTree();
|
||||||
|
|
||||||
|
this->excluded_range = this->masked_range;
|
||||||
this->cargo_types = this->GetCargoTypes(number);
|
this->cargo_types = this->GetCargoTypes(number);
|
||||||
|
|
||||||
this->vscroll = this->GetScrollbar(WID_GRAPH_MATRIX_SCROLLBAR);
|
this->vscroll = this->GetScrollbar(WID_GRAPH_MATRIX_SCROLLBAR);
|
||||||
|
@ -1208,7 +1222,7 @@ struct BaseCargoGraphWindow : BaseGraphWindow {
|
||||||
/* Cargo-colour box with outline */
|
/* Cargo-colour box with outline */
|
||||||
const Rect cargo = text.WithWidth(this->legend_width, rtl);
|
const Rect cargo = text.WithWidth(this->legend_width, rtl);
|
||||||
GfxFillRect(cargo, PC_BLACK);
|
GfxFillRect(cargo, PC_BLACK);
|
||||||
uint8_t pc = cs->legend_colour;
|
PixelColour pc = cs->legend_colour;
|
||||||
if (this->highlight_data == cs->Index()) pc = this->highlight_state ? PC_WHITE : PC_BLACK;
|
if (this->highlight_data == cs->Index()) pc = this->highlight_state ? PC_WHITE : PC_BLACK;
|
||||||
GfxFillRect(cargo.Shrink(WidgetDimensions::scaled.bevel), pc);
|
GfxFillRect(cargo.Shrink(WidgetDimensions::scaled.bevel), pc);
|
||||||
|
|
||||||
|
@ -1485,8 +1499,8 @@ struct PerformanceRatingDetailWindow : Window {
|
||||||
ScoreID score_type = (ScoreID)(widget - WID_PRD_SCORE_FIRST);
|
ScoreID score_type = (ScoreID)(widget - WID_PRD_SCORE_FIRST);
|
||||||
|
|
||||||
/* The colours used to show how the progress is going */
|
/* The colours used to show how the progress is going */
|
||||||
int colour_done = GetColourGradient(COLOUR_GREEN, SHADE_NORMAL);
|
PixelColour colour_done = GetColourGradient(COLOUR_GREEN, SHADE_NORMAL);
|
||||||
int colour_notdone = GetColourGradient(COLOUR_RED, SHADE_NORMAL);
|
PixelColour colour_notdone = GetColourGradient(COLOUR_RED, SHADE_NORMAL);
|
||||||
|
|
||||||
/* Draw all the score parts */
|
/* Draw all the score parts */
|
||||||
int64_t val = _score_part[company][score_type];
|
int64_t val = _score_part[company][score_type];
|
||||||
|
@ -1608,7 +1622,9 @@ CompanyID PerformanceRatingDetailWindow::company = CompanyID::Invalid();
|
||||||
struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
||||||
static inline constexpr StringID RANGE_LABELS[] = {
|
static inline constexpr StringID RANGE_LABELS[] = {
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED,
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED,
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED,
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED,
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline CargoTypes excluded_cargo_types{};
|
static inline CargoTypes excluded_cargo_types{};
|
||||||
|
@ -1623,6 +1639,10 @@ struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
||||||
this->draw_dates = !TimerGameEconomy::UsingWallclockUnits();
|
this->draw_dates = !TimerGameEconomy::UsingWallclockUnits();
|
||||||
this->ranges = RANGE_LABELS;
|
this->ranges = RANGE_LABELS;
|
||||||
|
|
||||||
|
const Industry *i = Industry::Get(window_number);
|
||||||
|
if (!i->IsCargoProduced()) this->masked_range = (1U << 0) | (1U << 1);
|
||||||
|
if (!i->IsCargoAccepted()) this->masked_range = (1U << 2) | (1U << 3);
|
||||||
|
|
||||||
this->InitializeWindow(window_number, STR_GRAPH_LAST_24_MINUTES_TIME_LABEL);
|
this->InitializeWindow(window_number, STR_GRAPH_LAST_24_MINUTES_TIME_LABEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1630,6 +1650,9 @@ struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
||||||
{
|
{
|
||||||
CargoTypes cargo_types{};
|
CargoTypes cargo_types{};
|
||||||
const Industry *i = Industry::Get(window_number);
|
const Industry *i = Industry::Get(window_number);
|
||||||
|
for (const auto &a : i->accepted) {
|
||||||
|
if (IsValidCargoType(a.cargo)) SetBit(cargo_types, a.cargo);
|
||||||
|
}
|
||||||
for (const auto &p : i->produced) {
|
for (const auto &p : i->produced) {
|
||||||
if (IsValidCargoType(p.cargo)) SetBit(cargo_types, p.cargo);
|
if (IsValidCargoType(p.cargo)) SetBit(cargo_types, p.cargo);
|
||||||
}
|
}
|
||||||
|
@ -1643,7 +1666,7 @@ struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
||||||
|
|
||||||
std::string GetWidgetString(WidgetID widget, StringID stringid) const override
|
std::string GetWidgetString(WidgetID widget, StringID stringid) const override
|
||||||
{
|
{
|
||||||
if (widget == WID_GRAPH_CAPTION) return GetString(STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION, this->window_number);
|
if (widget == WID_GRAPH_CAPTION) return GetString(STR_GRAPH_INDUSTRY_CAPTION, this->window_number);
|
||||||
|
|
||||||
return this->Window::GetWidgetString(widget, stringid);
|
return this->Window::GetWidgetString(widget, stringid);
|
||||||
}
|
}
|
||||||
|
@ -1691,6 +1714,33 @@ struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
||||||
FillFromHistory<GRAPH_NUM_MONTHS>(p.history, i->valid_history, produced_filler, transported_filler);
|
FillFromHistory<GRAPH_NUM_MONTHS>(p.history, i->valid_history, produced_filler, transported_filler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto &a : i->accepted) {
|
||||||
|
if (!IsValidCargoType(a.cargo)) continue;
|
||||||
|
const CargoSpec *cs = CargoSpec::Get(a.cargo);
|
||||||
|
|
||||||
|
this->data.reserve(this->data.size() + 2);
|
||||||
|
|
||||||
|
DataSet &accepted = this->data.emplace_back();
|
||||||
|
accepted.colour = cs->legend_colour;
|
||||||
|
accepted.exclude_bit = cs->Index();
|
||||||
|
accepted.range_bit = 2;
|
||||||
|
accepted.dash = 1;
|
||||||
|
auto accepted_filler = Filler{accepted, &Industry::AcceptedHistory::accepted};
|
||||||
|
|
||||||
|
DataSet &waiting = this->data.emplace_back();
|
||||||
|
waiting.colour = cs->legend_colour;
|
||||||
|
waiting.exclude_bit = cs->Index();
|
||||||
|
waiting.range_bit = 3;
|
||||||
|
waiting.dash = 4;
|
||||||
|
auto waiting_filler = Filler{waiting, &Industry::AcceptedHistory::waiting};
|
||||||
|
|
||||||
|
if (a.history == nullptr) {
|
||||||
|
FillFromEmpty<GRAPH_NUM_MONTHS>(i->valid_history, accepted_filler, waiting_filler);
|
||||||
|
} else {
|
||||||
|
FillFromHistory<GRAPH_NUM_MONTHS>(*a.history, i->valid_history, accepted_filler, waiting_filler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -305,7 +305,7 @@ private:
|
||||||
|
|
||||||
const int offset = (rtl ? -(int)this->column_size[VGC_FOLD].width : (int)this->column_size[VGC_FOLD].width) / 2;
|
const int offset = (rtl ? -(int)this->column_size[VGC_FOLD].width : (int)this->column_size[VGC_FOLD].width) / 2;
|
||||||
const int level_width = rtl ? -WidgetDimensions::scaled.hsep_indent : WidgetDimensions::scaled.hsep_indent;
|
const int level_width = rtl ? -WidgetDimensions::scaled.hsep_indent : WidgetDimensions::scaled.hsep_indent;
|
||||||
const int linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL);
|
const PixelColour linecolour = GetColourGradient(COLOUR_ORANGE, SHADE_NORMAL);
|
||||||
|
|
||||||
if (indent > 0) {
|
if (indent > 0) {
|
||||||
/* Draw tree continuation lines. */
|
/* Draw tree continuation lines. */
|
||||||
|
|
|
@ -77,10 +77,27 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> {
|
||||||
HistoryData<ProducedHistory> history{}; ///< History of cargo produced and transported for this month and 24 previous months
|
HistoryData<ProducedHistory> history{}; ///< History of cargo produced and transported for this month and 24 previous months
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AcceptedHistory {
|
||||||
|
uint16_t accepted = 0; /// Total accepted.
|
||||||
|
uint16_t waiting = 0; /// Average waiting.
|
||||||
|
};
|
||||||
|
|
||||||
struct AcceptedCargo {
|
struct AcceptedCargo {
|
||||||
CargoType cargo = 0; ///< Cargo type
|
CargoType cargo = 0; ///< Cargo type
|
||||||
uint16_t waiting = 0; ///< Amount of cargo waiting to processed
|
uint16_t waiting = 0; ///< Amount of cargo waiting to processed
|
||||||
|
uint32_t accumulated_waiting = 0; ///< Accumulated waiting total over the last month, used to calculate average.
|
||||||
TimerGameEconomy::Date last_accepted{}; ///< Last day cargo was accepted by this industry
|
TimerGameEconomy::Date last_accepted{}; ///< Last day cargo was accepted by this industry
|
||||||
|
std::unique_ptr<HistoryData<AcceptedHistory>> history{}; ///< History of accepted and waiting cargo.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get history data, creating it if necessary.
|
||||||
|
* @return Accepted history data.
|
||||||
|
*/
|
||||||
|
inline HistoryData<AcceptedHistory> &GetOrCreateHistory()
|
||||||
|
{
|
||||||
|
if (this->history == nullptr) this->history = std::make_unique<HistoryData<AcceptedHistory>>();
|
||||||
|
return *this->history;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
using ProducedCargoes = std::vector<ProducedCargo>;
|
using ProducedCargoes = std::vector<ProducedCargo>;
|
||||||
|
@ -151,7 +168,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> {
|
||||||
*/
|
*/
|
||||||
inline const AcceptedCargo &GetAccepted(size_t slot) const
|
inline const AcceptedCargo &GetAccepted(size_t slot) const
|
||||||
{
|
{
|
||||||
static const AcceptedCargo empty{INVALID_CARGO, 0, {}};
|
static const AcceptedCargo empty{INVALID_CARGO, 0, 0, {}, {}};
|
||||||
return slot < this->accepted.size() ? this->accepted[slot] : empty;
|
return slot < this->accepted.size() ? this->accepted[slot] : empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -374,13 +374,7 @@ static void DrawTile_Industry(TileInfo *ti)
|
||||||
image = dits->building.sprite;
|
image = dits->building.sprite;
|
||||||
if (image != 0) {
|
if (image != 0) {
|
||||||
AddSortableSpriteToDraw(image, SpriteLayoutPaletteTransform(image, dits->building.pal, GetColourPalette(ind->random_colour)),
|
AddSortableSpriteToDraw(image, SpriteLayoutPaletteTransform(image, dits->building.pal, GetColourPalette(ind->random_colour)),
|
||||||
ti->x + dits->subtile_x,
|
*ti, *dits, IsTransparencySet(TO_INDUSTRIES));
|
||||||
ti->y + dits->subtile_y,
|
|
||||||
dits->width,
|
|
||||||
dits->height,
|
|
||||||
dits->dz,
|
|
||||||
ti->z,
|
|
||||||
IsTransparencySet(TO_INDUSTRIES));
|
|
||||||
|
|
||||||
if (IsTransparencySet(TO_INDUSTRIES)) return;
|
if (IsTransparencySet(TO_INDUSTRIES)) return;
|
||||||
}
|
}
|
||||||
|
@ -1245,6 +1239,10 @@ void OnTick_Industry()
|
||||||
|
|
||||||
for (Industry *i : Industry::Iterate()) {
|
for (Industry *i : Industry::Iterate()) {
|
||||||
ProduceIndustryGoods(i);
|
ProduceIndustryGoods(i);
|
||||||
|
|
||||||
|
if ((TimerGameTick::counter + i->index) % Ticks::DAY_TICKS == 0) {
|
||||||
|
for (auto &a : i->accepted) a.accumulated_waiting += a.waiting;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2505,6 +2503,14 @@ static void UpdateIndustryStatistics(Industry *i)
|
||||||
RotateHistory(p.history);
|
RotateHistory(p.history);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto &a : i->accepted) {
|
||||||
|
if (!IsValidCargoType(a.cargo)) continue;
|
||||||
|
if (a.history == nullptr) continue;
|
||||||
|
|
||||||
|
(*a.history)[THIS_MONTH].waiting = GetAndResetAccumulatedAverage<uint16_t>(a.accumulated_waiting);
|
||||||
|
RotateHistory(*a.history);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -27,6 +27,4 @@ DEF_CMD_TRAIT(CMD_INDUSTRY_SET_EXCLUSIVITY, CmdIndustrySetExclusivity, CommandFl
|
||||||
DEF_CMD_TRAIT(CMD_INDUSTRY_SET_TEXT, CmdIndustrySetText, CommandFlags({CommandFlag::Deity, CommandFlag::StrCtrl}), CMDT_OTHER_MANAGEMENT)
|
DEF_CMD_TRAIT(CMD_INDUSTRY_SET_TEXT, CmdIndustrySetText, CommandFlags({CommandFlag::Deity, CommandFlag::StrCtrl}), CMDT_OTHER_MANAGEMENT)
|
||||||
DEF_CMD_TRAIT(CMD_INDUSTRY_SET_PRODUCTION, CmdIndustrySetProduction, CommandFlag::Deity, CMDT_OTHER_MANAGEMENT)
|
DEF_CMD_TRAIT(CMD_INDUSTRY_SET_PRODUCTION, CmdIndustrySetProduction, CommandFlag::Deity, CMDT_OTHER_MANAGEMENT)
|
||||||
|
|
||||||
void CcBuildIndustry(Commands cmd, const CommandCost &result, TileIndex tile, IndustryType indtype, uint32_t, bool, uint32_t);
|
|
||||||
|
|
||||||
#endif /* INDUSTRY_CMD_H */
|
#endif /* INDUSTRY_CMD_H */
|
||||||
|
|
|
@ -257,25 +257,6 @@ void SortIndustryTypes()
|
||||||
std::sort(_sorted_industry_types.begin(), _sorted_industry_types.end(), IndustryTypeNameSorter);
|
std::sort(_sorted_industry_types.begin(), _sorted_industry_types.end(), IndustryTypeNameSorter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Command callback. In case of failure to build an industry, show an error message.
|
|
||||||
* @param result Result of the command.
|
|
||||||
* @param tile Tile where the industry is placed.
|
|
||||||
* @param indtype Industry type.
|
|
||||||
*/
|
|
||||||
void CcBuildIndustry(Commands, const CommandCost &result, TileIndex tile, IndustryType indtype, uint32_t, bool, uint32_t)
|
|
||||||
{
|
|
||||||
if (result.Succeeded()) return;
|
|
||||||
|
|
||||||
if (indtype < NUM_INDUSTRYTYPES) {
|
|
||||||
const IndustrySpec *indsp = GetIndustrySpec(indtype);
|
|
||||||
if (indsp->enabled) {
|
|
||||||
ShowErrorMessage(GetEncodedString(STR_ERROR_CAN_T_BUILD_HERE, indsp->name),
|
|
||||||
GetEncodedString(result.GetErrorMessage()), WL_INFO, TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static constexpr NWidgetPart _nested_build_industry_widgets[] = {
|
static constexpr NWidgetPart _nested_build_industry_widgets[] = {
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
|
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
|
||||||
|
@ -745,7 +726,7 @@ public:
|
||||||
AutoRestoreBackup backup_generating_world(_generating_world, true);
|
AutoRestoreBackup backup_generating_world(_generating_world, true);
|
||||||
AutoRestoreBackup backup_ignore_industry_restritions(_ignore_industry_restrictions, true);
|
AutoRestoreBackup backup_ignore_industry_restritions(_ignore_industry_restrictions, true);
|
||||||
|
|
||||||
Command<CMD_BUILD_INDUSTRY>::Post(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY, &CcBuildIndustry, tile, this->selected_type, layout_index, false, seed);
|
Command<CMD_BUILD_INDUSTRY>::Post(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY, tile, this->selected_type, layout_index, false, seed);
|
||||||
} else {
|
} else {
|
||||||
success = Command<CMD_BUILD_INDUSTRY>::Post(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY, tile, this->selected_type, layout_index, false, seed);
|
success = Command<CMD_BUILD_INDUSTRY>::Post(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY, tile, this->selected_type, layout_index, false, seed);
|
||||||
}
|
}
|
||||||
|
@ -845,7 +826,7 @@ public:
|
||||||
nvp->InitializeViewport(this, Industry::Get(window_number)->location.GetCenterTile(), ScaleZoomGUI(ZoomLevel::Industry));
|
nvp->InitializeViewport(this, Industry::Get(window_number)->location.GetCenterTile(), ScaleZoomGUI(ZoomLevel::Industry));
|
||||||
|
|
||||||
const Industry *i = Industry::Get(window_number);
|
const Industry *i = Industry::Get(window_number);
|
||||||
if (!i->IsCargoProduced()) this->DisableWidget(WID_IV_GRAPH);
|
if (!i->IsCargoProduced() && !i->IsCargoAccepted()) this->DisableWidget(WID_IV_GRAPH);
|
||||||
|
|
||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
}
|
}
|
||||||
|
@ -1242,7 +1223,7 @@ static constexpr NWidgetPart _nested_industry_view_widgets[] = {
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
NWidget(WWT_PUSHTXTBTN, COLOUR_CREAM, WID_IV_DISPLAY), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_INDUSTRY_DISPLAY_CHAIN, STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP),
|
NWidget(WWT_PUSHTXTBTN, COLOUR_CREAM, WID_IV_DISPLAY), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_INDUSTRY_DISPLAY_CHAIN, STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP),
|
||||||
NWidget(WWT_PUSHTXTBTN, COLOUR_CREAM, WID_IV_GRAPH), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_INDUSTRY_VIEW_PRODUCTION_GRAPH, STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP),
|
NWidget(WWT_PUSHTXTBTN, COLOUR_CREAM, WID_IV_GRAPH), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_INDUSTRY_VIEW_CARGO_GRAPH, STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP),
|
||||||
NWidget(WWT_RESIZEBOX, COLOUR_CREAM),
|
NWidget(WWT_RESIZEBOX, COLOUR_CREAM),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
};
|
};
|
||||||
|
@ -2005,8 +1986,8 @@ struct CargoesField {
|
||||||
static Dimension cargo_space;
|
static Dimension cargo_space;
|
||||||
static Dimension cargo_stub;
|
static Dimension cargo_stub;
|
||||||
|
|
||||||
static const int INDUSTRY_LINE_COLOUR;
|
static const PixelColour INDUSTRY_LINE_COLOUR;
|
||||||
static const int CARGO_LINE_COLOUR;
|
static const PixelColour CARGO_LINE_COLOUR;
|
||||||
|
|
||||||
static int small_height, normal_height;
|
static int small_height, normal_height;
|
||||||
static int cargo_field_width;
|
static int cargo_field_width;
|
||||||
|
@ -2414,8 +2395,8 @@ int CargoesField::vert_inter_industry_space; ///< Amount of space between two in
|
||||||
|
|
||||||
int CargoesField::blob_distance; ///< Distance of the industry legend colour from the edge of the industry box.
|
int CargoesField::blob_distance; ///< Distance of the industry legend colour from the edge of the industry box.
|
||||||
|
|
||||||
const int CargoesField::INDUSTRY_LINE_COLOUR = PC_YELLOW; ///< Line colour of the industry type box.
|
const PixelColour CargoesField::INDUSTRY_LINE_COLOUR = PC_YELLOW; ///< Line colour of the industry type box.
|
||||||
const int CargoesField::CARGO_LINE_COLOUR = PC_YELLOW; ///< Line colour around the cargo.
|
const PixelColour CargoesField::CARGO_LINE_COLOUR = PC_YELLOW; ///< Line colour around the cargo.
|
||||||
|
|
||||||
/** A single row of #CargoesField. */
|
/** A single row of #CargoesField. */
|
||||||
struct CargoesRow {
|
struct CargoesRow {
|
||||||
|
|
|
@ -119,7 +119,7 @@ struct IndustrySpec {
|
||||||
IndustryLifeTypes life_type; ///< This is also known as Industry production flag, in newgrf specs
|
IndustryLifeTypes life_type; ///< This is also known as Industry production flag, in newgrf specs
|
||||||
LandscapeTypes climate_availability; ///< Bitmask, giving landscape enums as bit position
|
LandscapeTypes climate_availability; ///< Bitmask, giving landscape enums as bit position
|
||||||
IndustryBehaviours behaviour; ///< How this industry will behave, and how others entities can use it
|
IndustryBehaviours behaviour; ///< How this industry will behave, and how others entities can use it
|
||||||
uint8_t map_colour; ///< colour used for the small map
|
PixelColour map_colour; ///< colour used for the small map
|
||||||
StringID name; ///< Displayed name of the industry
|
StringID name; ///< Displayed name of the industry
|
||||||
StringID new_industry_text; ///< Message appearing when the industry is built
|
StringID new_industry_text; ///< Message appearing when the industry is built
|
||||||
StringID closure_text; ///< Message appearing when the industry closes
|
StringID closure_text; ///< Message appearing when the industry closes
|
||||||
|
|
|
@ -450,9 +450,8 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||||
if (IsSteepSlope(ti->tileh)) {
|
if (IsSteepSlope(ti->tileh)) {
|
||||||
if (!IsNonContinuousFoundation(f)) {
|
if (!IsNonContinuousFoundation(f)) {
|
||||||
/* Lower part of foundation */
|
/* Lower part of foundation */
|
||||||
AddSortableSpriteToDraw(
|
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||||
leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z
|
AddSortableSpriteToDraw(leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, *ti, bounds);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Corner highest_corner = GetHighestSlopeCorner(ti->tileh);
|
Corner highest_corner = GetHighestSlopeCorner(ti->tileh);
|
||||||
|
@ -462,24 +461,25 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||||
/* inclined foundation */
|
/* inclined foundation */
|
||||||
uint8_t inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
uint8_t inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
||||||
|
|
||||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
|
SpriteBounds bounds{{}, {1, 1, TILE_HEIGHT}, {}};
|
||||||
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
|
if (f == FOUNDATION_INCLINED_X) bounds.extent.x = TILE_SIZE;
|
||||||
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
|
if (f == FOUNDATION_INCLINED_Y) bounds.extent.y = TILE_SIZE;
|
||||||
TILE_HEIGHT, ti->z
|
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, *ti, bounds);
|
||||||
);
|
|
||||||
OffsetGroundSprite(0, 0);
|
OffsetGroundSprite(0, 0);
|
||||||
} else if (IsLeveledFoundation(f)) {
|
} else if (IsLeveledFoundation(f)) {
|
||||||
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z - TILE_HEIGHT);
|
static constexpr SpriteBounds bounds{{0, 0, -(int)TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||||
|
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, *ti, bounds);
|
||||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||||
} else if (f == FOUNDATION_STEEP_LOWER) {
|
} else if (f == FOUNDATION_STEEP_LOWER) {
|
||||||
/* one corner raised */
|
/* one corner raised */
|
||||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||||
} else {
|
} else {
|
||||||
/* halftile foundation */
|
/* halftile foundation */
|
||||||
int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
int8_t x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
||||||
int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
int8_t y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
||||||
|
|
||||||
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z + TILE_HEIGHT);
|
SpriteBounds bounds{{x_bb, y_bb, TILE_HEIGHT}, {TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1}, {}};
|
||||||
|
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, *ti, bounds);
|
||||||
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
||||||
* RemapCoords() but without zoom scaling. */
|
* RemapCoords() but without zoom scaling. */
|
||||||
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
||||||
|
@ -488,15 +488,17 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||||
} else {
|
} else {
|
||||||
if (IsLeveledFoundation(f)) {
|
if (IsLeveledFoundation(f)) {
|
||||||
/* leveled foundation */
|
/* leveled foundation */
|
||||||
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
|
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||||
|
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, *ti, bounds);
|
||||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||||
} else if (IsNonContinuousFoundation(f)) {
|
} else if (IsNonContinuousFoundation(f)) {
|
||||||
/* halftile foundation */
|
/* halftile foundation */
|
||||||
Corner halftile_corner = GetHalftileFoundationCorner(f);
|
Corner halftile_corner = GetHalftileFoundationCorner(f);
|
||||||
int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
int8_t x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
||||||
int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
int8_t y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
||||||
|
|
||||||
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z);
|
SpriteBounds bounds{{x_bb, y_bb, 0}, {TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1}, {}};
|
||||||
|
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, *ti, bounds);
|
||||||
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
||||||
* RemapCoords() but without zoom scaling. */
|
* RemapCoords() but without zoom scaling. */
|
||||||
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
||||||
|
@ -511,17 +513,17 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||||
/* tile-slope = sloped along X/Y, foundation-slope = three corners raised */
|
/* tile-slope = sloped along X/Y, foundation-slope = three corners raised */
|
||||||
spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0);
|
spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0);
|
||||||
}
|
}
|
||||||
AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
|
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||||
|
AddSortableSpriteToDraw(spr, PAL_NONE, *ti, bounds);
|
||||||
OffsetGroundSprite(0, 0);
|
OffsetGroundSprite(0, 0);
|
||||||
} else {
|
} else {
|
||||||
/* inclined foundation */
|
/* inclined foundation */
|
||||||
uint8_t inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
uint8_t inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
||||||
|
|
||||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
|
SpriteBounds bounds{{}, {1, 1, TILE_HEIGHT}, {}};
|
||||||
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
|
if (f == FOUNDATION_INCLINED_X) bounds.extent.x = TILE_SIZE;
|
||||||
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
|
if (f == FOUNDATION_INCLINED_Y) bounds.extent.y = TILE_SIZE;
|
||||||
TILE_HEIGHT, ti->z
|
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, *ti, bounds);
|
||||||
);
|
|
||||||
OffsetGroundSprite(0, 0);
|
OffsetGroundSprite(0, 0);
|
||||||
}
|
}
|
||||||
ti->z += ApplyPixelFoundationToSlope(f, ti->tileh);
|
ti->z += ApplyPixelFoundationToSlope(f, ti->tileh);
|
||||||
|
|
|
@ -635,9 +635,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mos
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para este tipo de carga
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para este tipo de carga
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Histórico da Produção
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico de Carga
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Entregue
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Aguardando
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar avaliações detalhadas de desempenho
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar avaliações detalhadas de desempenho
|
||||||
|
|
||||||
|
@ -4025,8 +4027,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produç
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de Produção
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfico da Carga
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar gráfico do histórico de produção da indústria
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostrar o gráfico do histórico de carga da indústria
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente!
|
||||||
|
|
||||||
|
|
|
@ -628,7 +628,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скри
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Активирай/деактивирай графиката за видовете товар
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Активирай/деактивирай графиката за видовете товар
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - История на производството
|
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Покажи подробен рейтинг на представянето
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Покажи подробен рейтинг на представянето
|
||||||
|
|
||||||
|
@ -3967,8 +3966,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Прои
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено последната минута:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено последната минута:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% превозено)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% превозено)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Центриране камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Центриране камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Производствена графика
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Показва графиката на производствената история на индустрията
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация!
|
||||||
|
|
||||||
|
|
|
@ -635,7 +635,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}No mostr
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostra/amaga el tipus de càrrega al gràfic
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostra/amaga el tipus de càrrega al gràfic
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de producció
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produït
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produït
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportat
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportat
|
||||||
|
|
||||||
|
@ -4025,8 +4024,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producci
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producció durant l'últim minut:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producció durant l'últim minut:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportat)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportat)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc de la indústria. Amb Ctrl+clic, s'obre una vista nova centrada al lloc on és la indústria.
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc de la indústria. Amb Ctrl+clic, s'obre una vista nova centrada al lloc on és la indústria.
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gràfic de producció
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostra el gràfic de l'evolució de la producció de la indústria.
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}{NBSP}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}{NBSP}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!
|
||||||
|
|
||||||
|
@ -5002,6 +4999,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Es neces
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreny inclinat en direcció incorrecta
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreny inclinat en direcció incorrecta
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Això no es pot fer...
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}Això no es pot fer...
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}L'edifici s'ha d'enderrocar primer
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}L'edifici s'ha d'enderrocar primer
|
||||||
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... l'edifici està protegit
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}No es pot netejar aquesta àrea...
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}No es pot netejar aquesta àrea...
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... lloc inadequat
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}... lloc inadequat
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}... ja construït
|
STR_ERROR_ALREADY_BUILT :{WHITE}... ja construït
|
||||||
|
|
|
@ -720,7 +720,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Skryje v
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Zobrazit nebo skrýt graf pro určitý druh nákladu
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Zobrazit nebo skrýt graf pro určitý druh nákladu
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historie produkce
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Vyprodukováno
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Vyprodukováno
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Přepraveno
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Přepraveno
|
||||||
|
|
||||||
|
@ -4069,8 +4068,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkce
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produkce v minulé minutě:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produkce v minulé minutě:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% přepraveno)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% přepraveno)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na průmysl. Ctrl+Klik otevře nový pohled na umístění průmyslu
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na průmysl. Ctrl+Klik otevře nový pohled na umístění průmyslu
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graf výroby
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Zobrazí graf historie produkce průmyslu
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!
|
||||||
|
|
||||||
|
|
|
@ -633,7 +633,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Vis inte
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Skift grafen for denne lasttype til/fra
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Skift grafen for denne lasttype til/fra
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorie
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produceret
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produceret
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporteret
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporteret
|
||||||
|
|
||||||
|
@ -4013,8 +4012,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion sidste minut:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion sidste minut:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporteret)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporteret)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over industriens lokalitet. Ctrl+Klik åbner et nyt vindue ved industriens lokalitet.
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over industriens lokalitet. Ctrl+Klik åbner et nyt vindue ved industriens lokalitet.
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktionsgraf
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Viser grafen over industriens produktionshistorie
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning!
|
||||||
|
|
||||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Geen vra
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor dit vrachttype weergeven-verbergen
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor dit vrachttype weergeven-verbergen
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Productiegeschiedenis
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Geproduceerd
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Geproduceerd
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Vervoerd
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Vervoerd
|
||||||
|
|
||||||
|
@ -4024,8 +4023,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Productie vorige minuut:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Productie vorige minuut:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% vervoerd)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% vervoerd)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Productiegrafiek
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Geeft de grafiek weer van de productiegeschiedenis van de industrie
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd!
|
||||||
|
|
||||||
|
|
|
@ -634,9 +634,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Delivered
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Waiting
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
|
||||||
|
|
||||||
|
@ -1698,6 +1700,25 @@ STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Zoom map
|
||||||
STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Scroll map
|
STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Scroll map
|
||||||
STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Off
|
STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Off
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_STICK_SELECTION :Gamepad stick for scrolling: {STRING2}
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_STICK_SELECTION_HELPTEXT :Select which analog stick to use for map scrolling
|
||||||
|
###length 3
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_STICK_DISABLED :Disabled
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_STICK_LEFT :Left stick
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_STICK_RIGHT :Right stick
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_DEADZONE :Gamepad deadzone: {STRING2}%
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_DEADZONE_HELPTEXT :Minimum stick movement required before scrolling starts (0-100%)
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_SENSITIVITY :Gamepad sensitivity: {STRING2}
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_SENSITIVITY_HELPTEXT :Control the sensitivity of gamepad analog stick scrolling
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_INVERT_X :Invert gamepad X-axis: {STRING2}
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_INVERT_X_HELPTEXT :Invert the horizontal axis movement of the gamepad analog stick
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_INVERT_Y :Invert gamepad Y-axis: {STRING2}
|
||||||
|
STR_CONFIG_SETTING_GAMEPAD_INVERT_Y_HELPTEXT :Invert the vertical axis movement of the gamepad analog stick
|
||||||
|
|
||||||
STR_CONFIG_SETTING_OSK_ACTIVATION :On screen keyboard: {STRING2}
|
STR_CONFIG_SETTING_OSK_ACTIVATION :On screen keyboard: {STRING2}
|
||||||
STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Select the method to open the on screen keyboard for entering text into editboxes only using the pointing device. This is meant for small devices without actual keyboard
|
STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Select the method to open the on screen keyboard for entering text into editboxes only using the pointing device. This is meant for small devices without actual keyboard
|
||||||
###length 4
|
###length 4
|
||||||
|
@ -4024,8 +4045,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{RAW_STRING}{BLACK} ({COMMA}% transported)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{RAW_STRING}{BLACK} ({COMMA}% transported)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Cargo Graph
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry cargo history
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
||||||
|
|
||||||
|
|
|
@ -634,9 +634,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Delivered
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Waiting
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
|
||||||
|
|
||||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Cargo Graph
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry cargo history
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
||||||
|
|
||||||
|
@ -5001,6 +5003,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Flat lan
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land sloped in wrong direction
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land sloped in wrong direction
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Can't do this...
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}Can't do this...
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
|
||||||
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... building is protected
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area...
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area...
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... site unsuitable
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}... site unsuitable
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}... already built
|
STR_ERROR_ALREADY_BUILT :{WHITE}... already built
|
||||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
||||||
|
|
||||||
|
@ -4024,8 +4023,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
||||||
|
|
||||||
|
@ -5001,6 +4998,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Flat lan
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land sloped in wrong direction
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land sloped in wrong direction
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Can't do this...
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}Can't do this...
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
|
||||||
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... building is protected
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area...
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area...
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... site unsuitable
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}... site unsuitable
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}... already built
|
STR_ERROR_ALREADY_BUILT :{WHITE}... already built
|
||||||
|
|
|
@ -634,9 +634,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Älä n
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Valitse, näytetäänkö tämän rahdin kuvaaja
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Valitse, näytetäänkö tämän rahdin kuvaaja
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} – Tuotantohistoria
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} – rahtihistoria
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Tuotettu
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Tuotettu
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Kuljetettu
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Kuljetettu
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Toimitettu
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Odottava
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näytä tarkat suorituskykyarviot
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näytä tarkat suorituskykyarviot
|
||||||
|
|
||||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Tuotanto
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Tuotanto viime minuutissa:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Tuotanto viime minuutissa:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% kuljetettu)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% kuljetettu)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä tuotantolaitoksen sijaintiin. Ctrl+napsautus avataksesi uuden näkymäikkunan laitoksen sijaintiin
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä tuotantolaitoksen sijaintiin. Ctrl+napsautus avataksesi uuden näkymäikkunan laitoksen sijaintiin
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Tuotannon kuvaaja
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Rahdin kuvaaja
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Näyttää tuotantohistorian kuvaajana
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Näyttää tuotantolaitoksen rahtihistorian kuvaajana
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}{NBSP}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}{NBSP}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa välittömästä lakkautuksesta!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa välittömästä lakkautuksesta!
|
||||||
|
|
||||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}N'affich
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Afficher/Cacher le type de marchandise
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Afficher/Cacher le type de marchandise
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historique de production
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produit
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produit
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporté
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporté
|
||||||
|
|
||||||
|
@ -4002,8 +4001,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production la minute précédente{NBSP}:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production la minute précédente{NBSP}:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transporté{P "" s})
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transporté{P "" s})
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur l'industrie. Ctrl-clic pour ouvrir une nouvelle vue sur l'industrie.
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur l'industrie. Ctrl-clic pour ouvrir une nouvelle vue sur l'industrie.
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graphe de production
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Affiche le graphe de l'historique de la production des industries
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}!
|
||||||
|
|
||||||
|
|
|
@ -635,7 +635,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Non amos
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Amosar/ocultar gráfica para o tipo de carga
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Amosar/ocultar gráfica para o tipo de carga
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de produción
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
||||||
|
|
||||||
|
@ -4025,8 +4024,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produci
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción no último minuto:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción no último minuto:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na localización da industria. Ctrl+Clic abre unha nova fiestra na localización da industria
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na localización da industria. Ctrl+Clic abre unha nova fiestra na localización da industria
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de produción
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Amosa o gráfico co histórico de produción industrial
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente
|
||||||
|
|
||||||
|
|
|
@ -627,7 +627,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Zeige ke
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Diagramm für diesen Frachttyp ein/aus
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Diagramm für diesen Frachttyp ein/aus
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorie
|
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Zeige detailierte Leistungsaufschlüsselung
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Zeige detailierte Leistungsaufschlüsselung
|
||||||
|
|
||||||
|
@ -3958,8 +3957,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion in der letzten Minute:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion in der letzten Minute:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% befördert)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% befördert)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptansicht auf den Industriestandort zentrieren. Mit Strg+Klick wird eine neue Zusatzansicht auf den Industriestandort geöffnet
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptansicht auf den Industriestandort zentrieren. Mit Strg+Klick wird eine neue Zusatzansicht auf den Industriestandort geöffnet
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktionsgraph
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Zeigt den Graphen der Produktionshistorie der Industrie an
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen!
|
||||||
|
|
||||||
|
|
|
@ -727,9 +727,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Εμφά
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Εναλλαγή γραφήματος αυτού του τύπου φορτίου
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Εναλλαγή γραφήματος αυτού του τύπου φορτίου
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Ιστορικό Παραγωγής
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Ιστορικό φορτίου
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Παράχθηκε/αν
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Παράχθηκε/αν
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Μεταφέρθηκε/αν
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Μεταφέρθηκε/αν
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Παραδόθηκε
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Αναμονή
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Εμφάνιση λεπτομεριών αποδόσεων
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Εμφάνιση λεπτομεριών αποδόσεων
|
||||||
|
|
||||||
|
@ -4118,8 +4120,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Παρα
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην περιοχή της βιομηχανίας
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην περιοχή της βιομηχανίας
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Γράφημα Παραγωγής
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Γράφημα φορτίου
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Εμφανίζει το γράφημα ιστορικού παραγωγής της βιομηχανίας
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Εμφανίζει το γράφημα του ιστορικού του φορτίου της βιομηχανίας
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο!
|
||||||
|
|
||||||
|
|
|
@ -697,7 +697,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ne mutas
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Adott rakomány grafikonjának mutatása be/ki
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Adott rakomány grafikonjának mutatása be/ki
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Termelési előzmények
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Előállított
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Előállított
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Szállítva
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Szállítva
|
||||||
|
|
||||||
|
@ -4088,8 +4087,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Múlt ha
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Termelés az elmúlt percben:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Termelés az elmúlt percben:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% elszállítva)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% elszállítva)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintással új nézet nyílik a gazdasági épület helyzeténél
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintással új nézet nyílik a gazdasági épület helyzeténél
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Termelési grafikon
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Megjeleníti az ipar termelési történetének grafikonját
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását!
|
||||||
|
|
||||||
|
|
|
@ -635,9 +635,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}화물
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}이 화물의 그래프를 표시하거나 숨깁니다
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}이 화물의 그래프를 표시하거나 숨깁니다
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 생산량 이력
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - 화물 그래프
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :생산량
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :생산량
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :수송량
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :수송량
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :수송됨
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :대기 중
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}상세 성취도를 봅니다.
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}상세 성취도를 봅니다.
|
||||||
|
|
||||||
|
@ -4025,8 +4027,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}지난
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}지난 1분간 생산량:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}지난 1분간 생산량:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 수송됨)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 수송됨)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산업시설로 이동합니다. CTRL+클릭하면 이 산업시설을 기준으로 새로운 외부 화면을 엽니다
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산업시설로 이동합니다. CTRL+클릭하면 이 산업시설을 기준으로 새로운 외부 화면을 엽니다
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}생산량 그래프
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}화물 그래프
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}산업시설 생산량 이력 그래프를 보여줍니다
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}산업시설 화물 이력 그래프를 보여줍니다
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다!
|
||||||
|
|
||||||
|
@ -5002,6 +5004,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}평지
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}잘못된 방향으로 땅이 기울어졌습니다
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}잘못된 방향으로 땅이 기울어졌습니다
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}그렇게 할 수 없습니다...
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}그렇게 할 수 없습니다...
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}건물을 먼저 제거해야 합니다
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}건물을 먼저 제거해야 합니다
|
||||||
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... 건물이 보호되어 있습니다
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}이 지역을 파괴할 수 없습니다...
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}이 지역을 파괴할 수 없습니다...
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 알맞지 않은 장소입니다
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 알맞지 않은 장소입니다
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}... 이미 지어져있습니다
|
STR_ERROR_ALREADY_BUILT :{WHITE}... 이미 지어져있습니다
|
||||||
|
|
|
@ -635,7 +635,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Nerādī
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Paslēgt kravas veida diagrammu
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Paslēgt kravas veida diagrammu
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Ražošanas Vēsture
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Saražots
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Saražots
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Pārvadāts
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Pārvadāts
|
||||||
|
|
||||||
|
@ -4021,8 +4020,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Iepriek
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Ražošanas pēdējā minūtē:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Ražošanas pēdējā minūtē:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (pārvadāti {COMMA}%)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (pārvadāti {COMMA}%)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz ražotni. Ctrl+klikšķis atvērs skatu uz ražotni jaunā skatlaukā
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz ražotni. Ctrl+klikšķis atvērs skatu uz ražotni jaunā skatlaukā
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Ražošanas Grafiks
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Parāda nozares ražošanas vēstures grafiku
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu!
|
||||||
|
|
||||||
|
|
|
@ -633,7 +633,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Keng Wue
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schalt d'Grafik fir de Wuerentyp em
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schalt d'Grafik fir de Wuerentyp em
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktiounshistorie
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzéiert
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzéiert
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportéiert
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportéiert
|
||||||
|
|
||||||
|
@ -3994,8 +3993,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktioun déi läscht Minutt:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktioun déi läscht Minutt:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportéiert)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportéiert)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréiert d'Siicht op d'Industrie. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréiert d'Siicht op d'Industrie. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktiounsgrafik
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Weist d'Grafik vun der Industrieproduktiounshistorie un
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt
|
||||||
|
|
||||||
|
|
|
@ -635,7 +635,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Skjul al
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Vis/skjul graf for en bestemt varetype
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Vis/skjul graf for en bestemt varetype
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produksjonshistorikk
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produsert
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produsert
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportert
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportert
|
||||||
|
|
||||||
|
@ -4025,8 +4024,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produksj
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produksjon forrige minutt:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produksjon forrige minutt:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportert)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportert)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på industrilokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på industrilokasjon
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på industrilokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på industrilokasjon
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graf over produksjon
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Viser grafen for industriell produksjonshistorikk
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse!
|
||||||
|
|
||||||
|
|
|
@ -1013,7 +1013,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ukryj ws
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu danego typu ładunku
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu danego typu ładunku
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historia Produkcji
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Wyprodukowano
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Wyprodukowano
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Przetransportowano
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Przetransportowano
|
||||||
|
|
||||||
|
@ -4404,8 +4403,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Wyproduk
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Wyprodukowano w poprzedniej minucie:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Wyprodukowano w poprzedniej minucie:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% przetransportowano)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% przetransportowano)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Wyśrodkuj widok główny na lokalizacji przedsiębiorstwa. Użyj Ctrl, aby otworzyć nowy podgląd na jego lokalizację
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Wyśrodkuj widok główny na lokalizacji przedsiębiorstwa. Użyj Ctrl, aby otworzyć nowy podgląd na jego lokalizację
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Wykres Produkcji
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Wyświetl wykres historii produkcji tego przedsiębiorstwa
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację!
|
||||||
|
|
||||||
|
|
|
@ -635,9 +635,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mos
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alternar o gráfico para este tipo de carga
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alternar o gráfico para este tipo de carga
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Histórico da Produção
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico da Carga
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Entregue
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Em Espera
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir classificações detalhadas de desempenho
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir classificações detalhadas de desempenho
|
||||||
|
|
||||||
|
@ -647,7 +649,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Alternar
|
||||||
|
|
||||||
# Company league window
|
# Company league window
|
||||||
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Classificação de Empresas
|
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Classificação de Empresas
|
||||||
STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} "{STRING}"
|
STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} “{STRING}”
|
||||||
STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM}
|
STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM}
|
||||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Engenheiro
|
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Engenheiro
|
||||||
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Gestor de Tráfego
|
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Gestor de Tráfego
|
||||||
|
@ -3441,20 +3443,20 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Mudar al
|
||||||
STR_GENERATION_WORLD :{WHITE}A Gerar Mundo...
|
STR_GENERATION_WORLD :{WHITE}A Gerar Mundo...
|
||||||
STR_GENERATION_ABORT :{BLACK}Cancelar
|
STR_GENERATION_ABORT :{BLACK}Cancelar
|
||||||
STR_GENERATION_ABORT_CAPTION :{WHITE}Cancelar criação do mundo
|
STR_GENERATION_ABORT_CAPTION :{WHITE}Cancelar criação do mundo
|
||||||
STR_GENERATION_ABORT_MESSAGE :{YELLOW}Quer mesmo cancelar a criação?
|
STR_GENERATION_ABORT_MESSAGE :{YELLOW}Quer mesmo cancelar o processo de geração?
|
||||||
STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo
|
STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo
|
||||||
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
|
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
|
||||||
STR_GENERATION_WORLD_GENERATION :{BLACK}A gerar mundo
|
STR_GENERATION_WORLD_GENERATION :{BLACK}A gerar mundo
|
||||||
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Geração de paisagem
|
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}A gerar paisagem
|
||||||
STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar rios
|
STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar rios
|
||||||
STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas
|
STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas
|
||||||
STR_GENERATION_TOWN_GENERATION :{BLACK}Geração de localidades
|
STR_GENERATION_TOWN_GENERATION :{BLACK}A gerar localidades
|
||||||
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Geração de indústrias
|
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}A gerar indústrias
|
||||||
STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração inamovível
|
STR_GENERATION_OBJECT_GENERATION :{BLACK}A gerar objetos
|
||||||
STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores
|
STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores
|
||||||
STR_GENERATION_SETTINGUP_GAME :{BLACK}Definindo jogo
|
STR_GENERATION_SETTINGUP_GAME :{BLACK}A configurar jogo
|
||||||
STR_GENERATION_PREPARING_TILELOOP :{BLACK}A preparar o terreno
|
STR_GENERATION_PREPARING_TILELOOP :{BLACK}A preparar o terreno
|
||||||
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script a correr
|
STR_GENERATION_PREPARING_SCRIPT :{BLACK}A correr script
|
||||||
STR_GENERATION_PREPARING_GAME :{BLACK}A preparar jogo
|
STR_GENERATION_PREPARING_GAME :{BLACK}A preparar jogo
|
||||||
|
|
||||||
STR_TOWN_DATA_ERROR_LOAD_FAILED :{WHITE}Falha ao carregar dados da localidade
|
STR_TOWN_DATA_ERROR_LOAD_FAILED :{WHITE}Falha ao carregar dados da localidade
|
||||||
|
@ -4025,8 +4027,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produç
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização da indústria. Ctrl+Clique para abrir um novo visualizador na localização da indústria
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização da indústria. Ctrl+Clique para abrir um novo visualizador na localização da indústria
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de Produção
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfico da Carga
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar gráfico do histórico de produção da indústria
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostra o gráfico do histórico da carga desta indústria
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente!
|
||||||
|
|
||||||
|
|
|
@ -3976,8 +3976,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producț
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producție în ultimul minut:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producție în ultimul minut:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportat)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportat)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrează imaginea pe locația industriei. Ctrl+Click pentru a deshide o fereastra cu locația industriei
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrează imaginea pe locația industriei. Ctrl+Click pentru a deshide o fereastra cu locația industriei
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Grafic de producție
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Arată graficul de producție istoric al industriei
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producției: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producției: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunțat închiderea iminentă!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunțat închiderea iminentă!
|
||||||
|
|
||||||
|
|
|
@ -772,9 +772,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скры
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Включить/отключить отображение груза на графике
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Включить/отключить отображение груза на графике
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}График производительности: {INDUSTRY}
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Продукция
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Произведено
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Произведено
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Доставлено
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :В ожидании
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Показать составляющие части рейтинга
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Показать составляющие части рейтинга
|
||||||
|
|
||||||
|
@ -4199,8 +4201,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Прои
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено за минуту:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено за минуту:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показать предприятие в основном окне. Ctrl+щелчок{NBSP}- показать в дополнительном окне.
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показать предприятие в основном окне. Ctrl+щелчок{NBSP}- показать в дополнительном окне.
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}График производительности
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}График доставки
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Показать график производительности этого предприятия
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Показать график продукции предприятия
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается!
|
||||||
|
|
||||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}在货
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切换显示货物
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切换显示货物
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 产量历史
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已生产
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已生产
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已运输
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已运输
|
||||||
|
|
||||||
|
@ -4024,8 +4023,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK}(已运输 {COMMA}%)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK}(已运输 {COMMA}%)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前工业的位置。按住 <Ctrl> 键点选会在新视点中显示工业位置
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前工业的位置。按住 <Ctrl> 键点选会在新视点中显示工业位置
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}产量图表
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}显示工业产量历史图表
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级:{YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级:{YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭!
|
||||||
|
|
||||||
|
@ -5001,6 +4998,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}需要
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}土地倾斜的方向不对
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}土地倾斜的方向不对
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}不能这样做……
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}不能这样做……
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必须先摧毁建筑
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必须先摧毁建筑
|
||||||
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}……建筑物被保护
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}无法清除这个区域……
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}无法清除这个区域……
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}……地点不合适
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}……地点不合适
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}……已经建成
|
STR_ERROR_ALREADY_BUILT :{WHITE}……已经建成
|
||||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Oculta t
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alterna entre mostrar/ocultar la gráfica para este tipo de carga
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alterna entre mostrar/ocultar la gráfica para este tipo de carga
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de Producción
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
||||||
|
|
||||||
|
@ -4011,8 +4010,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producci
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción el minuto anterior:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción el minuto anterior:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal sobre la industria. Ctrl+clic abre un punto de vista en dicha posición
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal sobre la industria. Ctrl+clic abre un punto de vista en dicha posición
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de Producción
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Muestra el gráfico del historial de producción de la industria
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente!
|
||||||
|
|
||||||
|
|
|
@ -635,7 +635,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ocultar
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar u ocultar gráfica de este tipo de carga
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar u ocultar gráfica de este tipo de carga
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de producción
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
|
||||||
|
|
||||||
|
@ -4025,8 +4024,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producci
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción último minuto:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción último minuto:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportad{G 0 o a o a}{P 0 "" s})
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportad{G 0 o a o a}{P 0 "" s})
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar vista en la industria. Ctrl+Clic abre una vista aparte en su ubicación
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar vista en la industria. Ctrl+Clic abre una vista aparte en su ubicación
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfica de producción
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar la gráfica histórica de producción de la industria
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente!
|
||||||
|
|
||||||
|
|
|
@ -633,7 +633,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Visa ing
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Slå på/av denna godstyps graf
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Slå på/av denna godstyps graf
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorik
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producerat
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producerat
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporterat
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporterat
|
||||||
|
|
||||||
|
@ -4001,8 +4000,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion förra minuten:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion förra minuten:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporterat)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporterat)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför industrin. Ctrl+Klick för att öppna en ny fönstervy industrins läge
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför industrin. Ctrl+Klick för att öppna en ny fönstervy industrins läge
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktionsgraf
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Visar en graf över den historiska industriproduktionen
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga!
|
||||||
|
|
||||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}於貨
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切換該貨物類型圖示
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切換該貨物類型圖示
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 產量歷史
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已產出
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已產出
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已運送
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已運送
|
||||||
|
|
||||||
|
@ -1356,8 +1355,8 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :可以在建築
|
||||||
STR_CONFIG_SETTING_CATCHMENT :容許更真實的服務範圍設定:{STRING}
|
STR_CONFIG_SETTING_CATCHMENT :容許更真實的服務範圍設定:{STRING}
|
||||||
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :使車站和機場的服務範圍根據其種類和大小而改變。
|
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :使車站和機場的服務範圍根據其種類和大小而改變。
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :公司車站可以為自帶車站的工業設施提供服務:{STRING}
|
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :公司車站可以服務附設車站的工業設施:{STRING}
|
||||||
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :啟用後,公司車站可以為附近自帶車站的工業設施(如油井)提供服務。禁用後,這些工業設施只能由其自帶的車站提供服務,並且這些車站不會提供除了該工業設施以外的產品
|
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :啟用後,公司車站可以為附近附設車站的工業(如鑽油平台)提供服務。停用後,這些工業只能由其附設的車站提供服務,並且附設車站不會提供除了該工業設施以外的任何服務
|
||||||
|
|
||||||
STR_CONFIG_SETTING_EXTRADYNAMITE :允許移除更多市鎮擁有的道路、橋樑及隧道:{STRING}
|
STR_CONFIG_SETTING_EXTRADYNAMITE :允許移除更多市鎮擁有的道路、橋樑及隧道:{STRING}
|
||||||
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :使玩家更容易地移除市鎮擁有的基礎建設和建築物。
|
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :使玩家更容易地移除市鎮擁有的基礎建設和建築物。
|
||||||
|
@ -4024,8 +4023,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分鐘產量︰
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分鐘產量︰
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (運送了 {COMMA}%)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (運送了 {COMMA}%)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工業置於畫面正中央。按住 <Ctrl> 點選可於工業位置開啟新檢視視窗
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工業置於畫面正中央。按住 <Ctrl> 點選可於工業位置開啟新檢視視窗
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}產量圖表
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}顯示工業產量歷史圖表
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉!
|
||||||
|
|
||||||
|
@ -5001,7 +4998,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}需要
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}地面斜坡方向不對
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}地面斜坡方向不對
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}不能執行以下動作...
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}不能執行以下動作...
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必須先摧毀建築物
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必須先摧毀建築物
|
||||||
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}……建築物受到保護
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}……建築物被保護
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}不能清除這個地段...
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}不能清除這個地段...
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 地點不適合
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 地點不適合
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}……經已建成
|
STR_ERROR_ALREADY_BUILT :{WHITE}……經已建成
|
||||||
|
|
|
@ -770,7 +770,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Не п
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Ввімк/вимик графік типів вантажу
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Ввімк/вимик графік типів вантажу
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Історія виробництва
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Вироблено
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Вироблено
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
|
||||||
|
|
||||||
|
@ -4150,8 +4149,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Виро
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Вироблено за минулу хвилину:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Вироблено за минулу хвилину:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показати підприємство у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на підприємство
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показати підприємство у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на підприємство
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Графік продуктивності
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Відобразити графік продуктивності підприємства
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття!
|
||||||
|
|
||||||
|
|
|
@ -267,6 +267,7 @@ STR_UNITS_YEARS :{NUM}{NBSP}năm
|
||||||
STR_UNITS_PERIODS :{NUM}{NBSP}kỳ
|
STR_UNITS_PERIODS :{NUM}{NBSP}kỳ
|
||||||
|
|
||||||
STR_LIST_SEPARATOR :,{SPACE}
|
STR_LIST_SEPARATOR :,{SPACE}
|
||||||
|
STR_TRUNCATION_ELLIPSIS :...
|
||||||
|
|
||||||
# Common window strings
|
# Common window strings
|
||||||
STR_LIST_FILTER_TITLE :{BLACK}Lọc:
|
STR_LIST_FILTER_TITLE :{BLACK}Lọc:
|
||||||
|
@ -285,7 +286,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Đóng c
|
||||||
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Tiêu đề cửa sổ - kéo nó để di chuyển cửa số
|
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Tiêu đề cửa sổ - kéo nó để di chuyển cửa số
|
||||||
STR_TOOLTIP_SHADE :{BLACK}Thu gọn cửa sổ - Chỉ hiển thị thanh tiêu đề
|
STR_TOOLTIP_SHADE :{BLACK}Thu gọn cửa sổ - Chỉ hiển thị thanh tiêu đề
|
||||||
STR_TOOLTIP_DEBUG :{BLACK}Hiện thông tin debug của NewGRF
|
STR_TOOLTIP_DEBUG :{BLACK}Hiện thông tin debug của NewGRF
|
||||||
STR_TOOLTIP_DEFSIZE :{BLACK}Chuyển cửa sổ về kích thước mặc định. Ctrl+Click để lưu kích thước hiện tại làm mặc định
|
STR_TOOLTIP_DEFSIZE :{BLACK}Chuyển cửa sổ về kích thước mặc định. Ctrl+Click để lưu kích thước hiện tại làm mặc định. Ctri+Click kép để thiết lập lại mặc định cũ.
|
||||||
STR_TOOLTIP_STICKY :{BLACK}Đánh dấu không-thể-đóng khi bấm nút "Đóng Tất Cả Cửa Sổ". Ctrl+Click để lưu thành trạng thái mặc định
|
STR_TOOLTIP_STICKY :{BLACK}Đánh dấu không-thể-đóng khi bấm nút "Đóng Tất Cả Cửa Sổ". Ctrl+Click để lưu thành trạng thái mặc định
|
||||||
STR_TOOLTIP_RESIZE :{BLACK}Click và kéo để thay đổi kích thước cửa sổ
|
STR_TOOLTIP_RESIZE :{BLACK}Click và kéo để thay đổi kích thước cửa sổ
|
||||||
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bật kích cỡ cửa sổ lớn/nhỏ
|
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bật kích cỡ cửa sổ lớn/nhỏ
|
||||||
|
@ -451,6 +452,12 @@ STR_SETTINGS_MENU_SANDBOX_OPTIONS :Tuỳ chọn Sa
|
||||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Thiết lập hiệu ứng trong suốt
|
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Thiết lập hiệu ứng trong suốt
|
||||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Hiển thị tên thị trấn
|
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Hiển thị tên thị trấn
|
||||||
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Hiển thị tên nhà ga
|
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Hiển thị tên nhà ga
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_TRAIN :Ga tàu
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_LORRY :Trạm xe tải
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_BUS :Trạm xe buýt
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_SHIP :Cảng
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_PLANE :Sân bay
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_GHOST :Trạm ma
|
||||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Hiển thị tên điểm mốc
|
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Hiển thị tên điểm mốc
|
||||||
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Hiển thị ký hiệu
|
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Hiển thị ký hiệu
|
||||||
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Hiển thị biển hiệu và tên của đối thủ
|
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Hiển thị biển hiệu và tên của đối thủ
|
||||||
|
@ -627,9 +634,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Không h
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Bật/tắt đồ thị cho hàng hóa này
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Bật/tắt đồ thị cho hàng hóa này
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Lịch Sử Sản Xuất
|
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Lịch sử hàng hóa
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Đã cung cấp
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Đã cung cấp
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Đã vận chuyển
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Đã vận chuyển
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Đã giao
|
||||||
|
STR_GRAPH_INDUSTRY_RANGE_WAITING :Đang chờ...
|
||||||
|
|
||||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Hiện chi tiết đánh giá chỉ số năng suất
|
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Hiện chi tiết đánh giá chỉ số năng suất
|
||||||
|
|
||||||
|
@ -831,7 +840,7 @@ STR_STATUSBAR_INFINITE_MONEY :{WHITE}(tiền
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp
|
STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp
|
||||||
STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Danh sách những tin tức gần đây
|
STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Danh sách những tin tức gần đây
|
||||||
STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING}
|
STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING}
|
||||||
|
|
||||||
STR_NEWS_MESSAGE_CAPTION :{WHITE}Thông Điệp
|
STR_NEWS_MESSAGE_CAPTION :{WHITE}Thông Điệp
|
||||||
|
|
||||||
|
@ -959,11 +968,14 @@ STR_GAME_OPTIONS_TAB_SOUND :Âm thanh
|
||||||
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Lựa chọn thiết lập cho âm thanh và nhạc
|
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Lựa chọn thiết lập cho âm thanh và nhạc
|
||||||
STR_GAME_OPTIONS_TAB_SOCIAL :Xã hội
|
STR_GAME_OPTIONS_TAB_SOCIAL :Xã hội
|
||||||
STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Chọn thiết lập các tích hợp xã hội
|
STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Chọn thiết lập các tích hợp xã hội
|
||||||
|
STR_GAME_OPTIONS_TAB_ADVANCED :Tùy chọn nâng cao
|
||||||
|
STR_GAME_OPTIONS_TAB_ADVANCED_TOOLTIP :Thay đổi tùy chọn nâng cao
|
||||||
|
|
||||||
STR_GAME_OPTIONS_VOLUME :Âm lượng
|
STR_GAME_OPTIONS_VOLUME :Âm lượng
|
||||||
STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh
|
STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh
|
||||||
STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc
|
STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc
|
||||||
|
|
||||||
|
STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||||
|
|
||||||
STR_GAME_OPTIONS_VOLUME_MARK :{NUM}%
|
STR_GAME_OPTIONS_VOLUME_MARK :{NUM}%
|
||||||
|
|
||||||
|
@ -1017,6 +1029,7 @@ STR_GAME_OPTIONS_CURRENCY_IDR :Rupiah Indonesi
|
||||||
STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia
|
STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia
|
||||||
STR_GAME_OPTIONS_CURRENCY_LVL :Lát-vi-a Lats
|
STR_GAME_OPTIONS_CURRENCY_LVL :Lát-vi-a Lats
|
||||||
STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Bồ Đào Nha
|
STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Bồ Đào Nha
|
||||||
|
STR_GAME_OPTIONS_CURRENCY_UAH :Hryvnia Ukraina
|
||||||
|
|
||||||
STR_GAME_OPTIONS_AUTOSAVE_FRAME :Lưu tự động
|
STR_GAME_OPTIONS_AUTOSAVE_FRAME :Lưu tự động
|
||||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :Lựa chọn khoảng thời gian tự động lưu
|
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :Lựa chọn khoảng thời gian tự động lưu
|
||||||
|
@ -1050,6 +1063,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :Đánh dấu v
|
||||||
|
|
||||||
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Trình điều khiển hiện tại: {STRING}
|
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Trình điều khiển hiện tại: {STRING}
|
||||||
|
|
||||||
|
STR_GAME_OPTIONS_INTERFACE :Giao diện
|
||||||
|
|
||||||
STR_GAME_OPTIONS_GUI_SCALE_FRAME :Kích thước giao diện
|
STR_GAME_OPTIONS_GUI_SCALE_FRAME :Kích thước giao diện
|
||||||
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Kéo thanh trượt để điều chỉnh kích thước giao diện. Giữ Ctrl để điều chỉnh liên tục
|
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Kéo thanh trượt để điều chỉnh kích thước giao diện. Giữ Ctrl để điều chỉnh liên tục
|
||||||
|
@ -1074,6 +1088,7 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :Sẽ mở trìn
|
||||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Xem trước kết quả khảo sát
|
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Xem trước kết quả khảo sát
|
||||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Hiển thị kết quả khảo sát ở ván chơi hiện tại
|
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Hiển thị kết quả khảo sát ở ván chơi hiện tại
|
||||||
|
|
||||||
|
STR_GAME_OPTIONS_DISPLAY :Hiển thị
|
||||||
|
|
||||||
STR_GAME_OPTIONS_REFRESH_RATE :Tần số quét màn hình
|
STR_GAME_OPTIONS_REFRESH_RATE :Tần số quét màn hình
|
||||||
STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Chọn tần số quét màn hình
|
STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Chọn tần số quét màn hình
|
||||||
|
@ -1095,7 +1110,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Thông tin thê
|
||||||
STR_GAME_OPTIONS_ONLINE_CONTENT :Tải Nội Dung
|
STR_GAME_OPTIONS_ONLINE_CONTENT :Tải Nội Dung
|
||||||
STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kiểm tra những nội dung mới & cập nhật để tải về
|
STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kiểm tra những nội dung mới & cập nhật để tải về
|
||||||
|
|
||||||
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(không có plugins được cài đặt để tích hợp vào nền tảng xã hội)
|
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :(không có plugins được cài đặt để tích hợp vào nền tảng xã hội)
|
||||||
|
|
||||||
STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING})
|
STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING})
|
||||||
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Nền tảng:
|
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Nền tảng:
|
||||||
|
@ -1289,6 +1304,9 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lãi xuất vay
|
||||||
STR_CONFIG_SETTING_RUNNING_COSTS :Chi phí hoạt động: {STRING}
|
STR_CONFIG_SETTING_RUNNING_COSTS :Chi phí hoạt động: {STRING}
|
||||||
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Thiết lập mức độ tính chi phí bảo trì và vận hành đối với phương tiện và hạ tầng giao thông
|
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Thiết lập mức độ tính chi phí bảo trì và vận hành đối với phương tiện và hạ tầng giao thông
|
||||||
###length 3
|
###length 3
|
||||||
|
STR_CONFIG_SETTING_RUNNING_COSTS_LOW :Thấp
|
||||||
|
STR_CONFIG_SETTING_RUNNING_COSTS_MEDIUM :Trung bình
|
||||||
|
STR_CONFIG_SETTING_RUNNING_COSTS_HIGH :Cao
|
||||||
|
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Tốc độ xây dựng: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Tốc độ xây dựng: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Giới hạn hành động xây dựng của AI
|
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Giới hạn hành động xây dựng của AI
|
||||||
|
@ -1311,6 +1329,9 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Không có tr
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Chi phí xây dựng: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Chi phí xây dựng: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Thiết lập mức độ xây dựng và chi phí mua sắm
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Thiết lập mức độ xây dựng và chi phí mua sắm
|
||||||
###length 3
|
###length 3
|
||||||
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_LOW :Thấp
|
||||||
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_MEDIUM :Trung bình
|
||||||
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HIGH :Cao
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RECESSIONS :Suy thoái: {STRING}
|
STR_CONFIG_SETTING_RECESSIONS :Suy thoái: {STRING}
|
||||||
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Nếu bật, thì các đợt suy thoái sẽ xảy ra vài năm một lần. Trong suy thoái tất cả sản xuất sẽ giảm mạnh (và sẽ trở lại như cũ sau khi suy thoái kết thúc)
|
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Nếu bật, thì các đợt suy thoái sẽ xảy ra vài năm một lần. Trong suy thoái tất cả sản xuất sẽ giảm mạnh (và sẽ trở lại như cũ sau khi suy thoái kết thúc)
|
||||||
|
@ -1980,8 +2001,12 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :không cho phé
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :cho phép
|
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :cho phép
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :cho phép, tùy chọn bố trí đô thị
|
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :cho phép, tùy chọn bố trí đô thị
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER :Đật từng ngôi nhà: {STRING}
|
||||||
STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT :Bật tùy chọn này cho phép người chơi đặt nhà cửa bằng tay
|
STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT :Bật tùy chọn này cho phép người chơi đặt nhà cửa bằng tay
|
||||||
###length 3
|
###length 3
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_FORBIDDEN :Không cho phép
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_ALLOWED :Cho phép
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_FULLY_CONSTRUCTED :Cho phép, đã hoàn thành thi công
|
||||||
|
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Nhu cầu vận chuyển hàng đô thị: {STRING}
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Nhu cầu vận chuyển hàng đô thị: {STRING}
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Lượng hàng hoá cần vận chuyển ở trong đô thị, tỉ lệ với tổng dân số của độ thị.{}Tăng tỉ lệ bình phương: một đô thị to gấp 2 sẽ tăng 4 lần số hành khách.{}Tăng tỉ lệ thuận: một đô thị tăng gấp 2 sẽ tăng gấp 2 lần số hành khách
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Lượng hàng hoá cần vận chuyển ở trong đô thị, tỉ lệ với tổng dân số của độ thị.{}Tăng tỉ lệ bình phương: một đô thị to gấp 2 sẽ tăng 4 lần số hành khách.{}Tăng tỉ lệ thuận: một đô thị tăng gấp 2 sẽ tăng gấp 2 lần số hành khách
|
||||||
|
@ -2010,7 +2035,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT :Giới hạn s
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Số lượng cửa sổ chưa neo (tối đa) trước khi tự động đóng để nhường chỗ khi mở cửa sổ mới
|
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Số lượng cửa sổ chưa neo (tối đa) trước khi tự động đóng để nhường chỗ khi mở cửa sổ mới
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :tắt
|
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :Tắt
|
||||||
|
|
||||||
STR_CONFIG_SETTING_ZOOM_MIN :Độ phóng to tối đa: {STRING}
|
STR_CONFIG_SETTING_ZOOM_MIN :Độ phóng to tối đa: {STRING}
|
||||||
STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Độ phóng to tối đa của cửa sổ. Độ càng cao thì yêu cầu bộ nhớ càng nhiều
|
STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Độ phóng to tối đa của cửa sổ. Độ càng cao thì yêu cầu bộ nhớ càng nhiều
|
||||||
|
@ -2062,9 +2087,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Loại hàng h
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Chế độ phân phối đối với các loại hàng hóa mặc định: {STRING}
|
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Chế độ phân phối đối với các loại hàng hóa mặc định: {STRING}
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Không đối xứng" có nghĩa là số lượng hàng hóa tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là những loại hàng hóa đó sẽ không được phân phối tự động
|
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Không đối xứng" có nghĩa là số lượng hàng hóa tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là những loại hàng hóa đó sẽ không được phân phối tự động
|
||||||
###length 3
|
###length 3
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :bằng tay
|
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Bằng tay
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :bất đối xứng
|
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Bất đối xứng
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :đối xứng
|
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Đối xứng
|
||||||
|
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Độ chính xác phân phối: {STRING}
|
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Độ chính xác phân phối: {STRING}
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mức chính xác tính toán đồ thị, nếu giá trị càng cao càng tốn CPU và trò chơi có thể chậm phản ứng, tuy nhiên giá trị thấp sẽ khiến việc phân phối sẽ giảm sự chính xác và bạn sẽ thấy sự khác biệt là hàng hóa không gửi đến chỗ cần đến
|
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mức chính xác tính toán đồ thị, nếu giá trị càng cao càng tốn CPU và trò chơi có thể chậm phản ứng, tuy nhiên giá trị thấp sẽ khiến việc phân phối sẽ giảm sự chính xác và bạn sẽ thấy sự khác biệt là hàng hóa không gửi đến chỗ cần đến
|
||||||
|
@ -2125,7 +2150,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
|
||||||
STR_CONFIG_SETTING_LOCALISATION :Tiêu Chuẩn Đo Lường
|
STR_CONFIG_SETTING_LOCALISATION :Tiêu Chuẩn Đo Lường
|
||||||
STR_CONFIG_SETTING_GRAPHICS :Đồ họa
|
STR_CONFIG_SETTING_GRAPHICS :Đồ họa
|
||||||
STR_CONFIG_SETTING_SOUND :Âm thanh
|
STR_CONFIG_SETTING_SOUND :Âm thanh
|
||||||
STR_CONFIG_SETTING_INTERFACE :Giao Diện
|
STR_CONFIG_SETTING_INTERFACE :Giao diện
|
||||||
STR_CONFIG_SETTING_INTERFACE_GENERAL :Tổng quát
|
STR_CONFIG_SETTING_INTERFACE_GENERAL :Tổng quát
|
||||||
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Vùng nhìn
|
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Vùng nhìn
|
||||||
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Xây Dựng
|
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Xây Dựng
|
||||||
|
@ -2179,6 +2204,8 @@ STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... khô
|
||||||
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... trình điều khiển GPU đã làm trò chơi bị lỗi. Tăng tốc phần cứng đã được tắt
|
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... trình điều khiển GPU đã làm trò chơi bị lỗi. Tăng tốc phần cứng đã được tắt
|
||||||
|
|
||||||
# Intro window
|
# Intro window
|
||||||
|
STR_INTRO_CAPTION :{WHITE}OpenTTD
|
||||||
|
STR_INTRO_VERSION :OpenTTD {REV}
|
||||||
|
|
||||||
STR_INTRO_NEW_GAME :{BLACK}Màn Chơi Mới
|
STR_INTRO_NEW_GAME :{BLACK}Màn Chơi Mới
|
||||||
STR_INTRO_LOAD_GAME :{BLACK}Nạp Ván Chơi
|
STR_INTRO_LOAD_GAME :{BLACK}Nạp Ván Chơi
|
||||||
|
@ -2312,16 +2339,19 @@ STR_FACE_SIMPLE_TOOLTIP :{BLACK}Trình c
|
||||||
STR_FACE_LOAD :{BLACK}Nạp
|
STR_FACE_LOAD :{BLACK}Nạp
|
||||||
STR_FACE_LOAD_TOOLTIP :{BLACK}Chọn vẻ mặt ưa thích
|
STR_FACE_LOAD_TOOLTIP :{BLACK}Chọn vẻ mặt ưa thích
|
||||||
STR_FACE_LOAD_DONE :{WHITE}Vẻ mặt ưa thích đã được nạp từ file thiết lập của OpenTTD.
|
STR_FACE_LOAD_DONE :{WHITE}Vẻ mặt ưa thích đã được nạp từ file thiết lập của OpenTTD.
|
||||||
STR_FACE_FACECODE :{BLACK}Khuôn mặt thứ.
|
STR_FACE_FACECODE :{BLACK}Mã số khuôn mặt
|
||||||
STR_FACE_FACECODE_TOOLTIP :{BLACK}Xem và/hoặc sửa số vẻ mặt của chủ tịch công ty
|
STR_FACE_FACECODE_TOOLTIP :{BLACK}Xem và/hoặc sửa mã số gương mặt của chủ tịch công ty
|
||||||
STR_FACE_FACECODE_CAPTION :{WHITE}Xem và/hoặc chọn số bộ mặt người chơi
|
STR_FACE_FACECODE_CAPTION :{WHITE}Xem và/hoặc chọn mã số gương mặt người chơi
|
||||||
STR_FACE_FACECODE_SET :{WHITE}Mã số gương mặt mới được thiết lập.
|
STR_FACE_FACECODE_SET :{WHITE}Gương mặt người chơi mới được thiết lập.
|
||||||
STR_FACE_FACECODE_ERR :{WHITE}Không thể thiết lập mã số gương mặt - mã số phải trong khoảng từ 0 đến 4,294,967,295!
|
STR_FACE_FACECODE_ERR :{WHITE}Không thể thiết lập mã số gương mặt - Nhãn và mã số phải hợp lệ
|
||||||
STR_FACE_SAVE :{BLACK}Lưu
|
STR_FACE_SAVE :{BLACK}Lưu
|
||||||
STR_FACE_SAVE_TOOLTIP :{BLACK}Lưu gương mặt yêu thích
|
STR_FACE_SAVE_TOOLTIP :{BLACK}Lưu gương mặt yêu thích
|
||||||
STR_FACE_SAVE_DONE :{WHITE}Gương mặt yêu thích này sẽ được lưu lại trong tập tin cấu hình OpenTTD .
|
STR_FACE_SAVE_DONE :{WHITE}Gương mặt yêu thích này sẽ được lưu lại trong tập tin cấu hình OpenTTD .
|
||||||
|
STR_FACE_SETTING_TOGGLE :{STRING} {ORANGE}{STRING}
|
||||||
|
STR_FACE_SETTING_NUMERIC :{STRING} {ORANGE}{NUM} / {NUM}
|
||||||
STR_FACE_YES :Đồng ý
|
STR_FACE_YES :Đồng ý
|
||||||
STR_FACE_NO :Không
|
STR_FACE_NO :Không
|
||||||
|
STR_FACE_STYLE :Kiểu:
|
||||||
STR_FACE_HAIR :Tóc:
|
STR_FACE_HAIR :Tóc:
|
||||||
STR_FACE_EYEBROWS :Lông mày:
|
STR_FACE_EYEBROWS :Lông mày:
|
||||||
STR_FACE_EYECOLOUR :Màu mắt:
|
STR_FACE_EYECOLOUR :Màu mắt:
|
||||||
|
@ -2608,7 +2638,7 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} r
|
||||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} đã đổi tên thành {STRING}
|
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} đã đổi tên thành {STRING}
|
||||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} tặng {CURRENCY_LONG} cho {STRING}
|
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} tặng {CURRENCY_LONG} cho {STRING}
|
||||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server kết thúc phiên
|
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server kết thúc phiên
|
||||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server khởi động lại...{}Xin chờ...
|
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server khởi động lại...{}{}Xin chờ...
|
||||||
STR_NETWORK_MESSAGE_KICKED :*** {STRING} đã bị đá khỏi ván chơi. Lý do: ({STRING})
|
STR_NETWORK_MESSAGE_KICKED :*** {STRING} đã bị đá khỏi ván chơi. Lý do: ({STRING})
|
||||||
|
|
||||||
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Đăng ký server thất bại
|
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Đăng ký server thất bại
|
||||||
|
@ -2794,6 +2824,10 @@ STR_PICKER_MODE_USED_TOOLTIP :Bật/tắt hi
|
||||||
STR_PICKER_MODE_SAVED :Đã lưu
|
STR_PICKER_MODE_SAVED :Đã lưu
|
||||||
STR_PICKER_MODE_SAVED_TOOLTIP :Bật/tắt hiển thị những hạng mục được lưu
|
STR_PICKER_MODE_SAVED_TOOLTIP :Bật/tắt hiển thị những hạng mục được lưu
|
||||||
|
|
||||||
|
STR_PICKER_PREVIEW_SHRINK :-
|
||||||
|
STR_PICKER_PREVIEW_SHRINK_TOOLTIP :Giảm chiều cao của ảnh xem trước. Ctrl+Click để giảm đến mức tối thiểu
|
||||||
|
STR_PICKER_PREVIEW_EXPAND :+
|
||||||
|
STR_PICKER_PREVIEW_EXPAND_TOOLTIP :Tăng chiều cao của ảnh xem trước. Ctrl+Click để tăng đến mức tối đa
|
||||||
|
|
||||||
STR_PICKER_STATION_CLASS_TOOLTIP :Chọn loại ga bến cần hiển thị
|
STR_PICKER_STATION_CLASS_TOOLTIP :Chọn loại ga bến cần hiển thị
|
||||||
STR_PICKER_STATION_TYPE_TOOLTIP :Chọn loại ga bến để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu
|
STR_PICKER_STATION_TYPE_TOOLTIP :Chọn loại ga bến để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu
|
||||||
|
@ -2817,6 +2851,7 @@ STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Năm: {O
|
||||||
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Năm: {ORANGE}Đến {NUM}
|
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Năm: {ORANGE}Đến {NUM}
|
||||||
STR_HOUSE_PICKER_SIZE :{BLACK}Kích thước: {ORANGE}{NUM}x{NUM} ô
|
STR_HOUSE_PICKER_SIZE :{BLACK}Kích thước: {ORANGE}{NUM}x{NUM} ô
|
||||||
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Hàng hóa được chấp nhận: {ORANGE}
|
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Hàng hóa được chấp nhận: {ORANGE}
|
||||||
|
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Hàng hóa cung cấp: {ORANGE}{CARGO_LIST}
|
||||||
|
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE1 :Ngoài rìa
|
STR_HOUSE_PICKER_CLASS_ZONE1 :Ngoài rìa
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE2 :Ngoại ô
|
STR_HOUSE_PICKER_CLASS_ZONE2 :Ngoại ô
|
||||||
|
@ -2825,6 +2860,7 @@ STR_HOUSE_PICKER_CLASS_ZONE4 :Phía trong ngo
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE5 :Nội thành
|
STR_HOUSE_PICKER_CLASS_ZONE5 :Nội thành
|
||||||
|
|
||||||
STR_HOUSE_PICKER_PROTECT_TITLE :Ngăn chặn nâng cấp
|
STR_HOUSE_PICKER_PROTECT_TITLE :Ngăn chặn nâng cấp
|
||||||
|
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Chọn nếu ngôi nhà này có được bảo vệ khỏi việc bị thay thế hay không khi thị trấn phát triển
|
||||||
STR_HOUSE_PICKER_PROTECT_OFF :Tắt
|
STR_HOUSE_PICKER_PROTECT_OFF :Tắt
|
||||||
STR_HOUSE_PICKER_PROTECT_ON :Bật
|
STR_HOUSE_PICKER_PROTECT_ON :Bật
|
||||||
|
|
||||||
|
@ -3032,6 +3068,11 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Chọn q
|
||||||
STR_FOUND_TOWN_CITY :{BLACK}Đô thị
|
STR_FOUND_TOWN_CITY :{BLACK}Đô thị
|
||||||
STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Thành phố phát triển nhanh hơn thị trấn{}Tuỳ thuộc thiết lập, chúng lớn hơn khi khai sinh
|
STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Thành phố phát triển nhanh hơn thị trấn{}Tuỳ thuộc thiết lập, chúng lớn hơn khi khai sinh
|
||||||
|
|
||||||
|
STR_FOUND_TOWN_EXPAND_MODE :{YELLOW}Mở rộng thị trấn:
|
||||||
|
STR_FOUND_TOWN_EXPAND_BUILDINGS :Công trình
|
||||||
|
STR_FOUND_TOWN_EXPAND_BUILDINGS_TOOLTIP :Tăng số công trình của thị trấn
|
||||||
|
STR_FOUND_TOWN_EXPAND_ROADS :Đường sá
|
||||||
|
STR_FOUND_TOWN_EXPAND_ROADS_TOOLTIP :Tăng số đường sá của thị trấn
|
||||||
|
|
||||||
STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Quy hoạch đường đô thị:
|
STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Quy hoạch đường đô thị:
|
||||||
STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Chọn để quy hoạch đường bộ trong đô thị
|
STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Chọn để quy hoạch đường bộ trong đô thị
|
||||||
|
@ -3104,6 +3145,8 @@ STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Kiểu x
|
||||||
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Giới hạn tốc độ đường ray: {LTBLUE}{VELOCITY}
|
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Giới hạn tốc độ đường ray: {LTBLUE}{VELOCITY}
|
||||||
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Hạn chế tốc độ đường bộ: {LTBLUE}{VELOCITY}
|
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Hạn chế tốc độ đường bộ: {LTBLUE}{VELOCITY}
|
||||||
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tốc độ xe điện giới hạn: {LTBLUE}{VELOCITY}
|
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tốc độ xe điện giới hạn: {LTBLUE}{VELOCITY}
|
||||||
|
STR_LAND_AREA_INFORMATION_TOWN_CAN_UPGRADE :{BLACK}Nâng cấp thị trấn: {LTBLUE}Có thể
|
||||||
|
STR_LAND_AREA_INFORMATION_TOWN_CANNOT_UPGRADE :{BLACK}Nâng cấp thị trấn: {LTBLUE}Không thể
|
||||||
|
|
||||||
# Description of land area of different tiles
|
# Description of land area of different tiles
|
||||||
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Đá
|
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Đá
|
||||||
|
@ -3112,6 +3155,9 @@ STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Đất trống
|
||||||
STR_LAI_CLEAR_DESCRIPTION_GRASS :Bãi cỏ
|
STR_LAI_CLEAR_DESCRIPTION_GRASS :Bãi cỏ
|
||||||
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Cánh đồng
|
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Cánh đồng
|
||||||
STR_LAI_CLEAR_DESCRIPTION_DESERT :Hoang mạc
|
STR_LAI_CLEAR_DESCRIPTION_DESERT :Hoang mạc
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROCKS :Đá có tuyết phủ
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROUGH_LAND :Đất gồ ghề có tuyết phủ
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_SNOWY_GRASS :Cỏ có tuyết phủ
|
||||||
|
|
||||||
STR_LAI_RAIL_DESCRIPTION_TRACK :Đường ray
|
STR_LAI_RAIL_DESCRIPTION_TRACK :Đường ray
|
||||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Đường ray với đèn hiệu khóa
|
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Đường ray với đèn hiệu khóa
|
||||||
|
@ -3580,17 +3626,17 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Đã t
|
||||||
STR_NEWGRF_LIST_MISSING :{RED}Thiếu files
|
STR_NEWGRF_LIST_MISSING :{RED}Thiếu files
|
||||||
|
|
||||||
# NewGRF 'it's broken' warnings
|
# NewGRF 'it's broken' warnings
|
||||||
STR_NEWGRF_BROKEN :{WHITE}Hoạt động của NewGRF '{0:STRING}' có thể gây mất đồng bộ hoặc bị treo.
|
STR_NEWGRF_BROKEN :{WHITE}Hoạt động của NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' có thể gây mất đồng bộ hoặc bị treo.
|
||||||
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Trạng thái đầu kéo '{1:ENGINE}' được thay đổi khi không ở trong xưởng sửa chữa.
|
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Trạng thái đầu kéo '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' được thay đổi khi không ở trong xưởng sửa chữa.
|
||||||
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Nó cắt ngắn độ dài của đoàn tàu '{1:ENGINE}' nếu không ở trong xưởng.
|
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Nó cắt ngắn độ dài của đoàn tàu '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' nếu không ở trong xưởng.
|
||||||
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Sức chứa của phương tiện bị thay đổi '{1:ENGINE}' khi không ở trong xưởng hoặc vì cải biến
|
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Sức chứa của phương tiện bị thay đổi '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' khi không ở trong xưởng hoặc vì cải biến
|
||||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Đoàn tàu '{VEHICLE}' của '{COMPANY}' có độ dài không hợp lệ. Sự cố có thể có căn nguyên từ NewGRFs. Ván chơi có thể mất đồng bộ hoặc bị treo
|
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Đoàn tàu '{VEHICLE}' của '{COMPANY}' có độ dài không hợp lệ. Sự cố có thể có căn nguyên từ NewGRFs. Ván chơi có thể mất đồng bộ hoặc bị treo
|
||||||
|
|
||||||
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' không hợp lệ.
|
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' không hợp lệ.
|
||||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Danh mục hàng hoá/cải biến được cho '{1:ENGINE}' khác với danh mục mua được sau khi đã có. Việc này khiến cho việc tự thay thế hay là tự cải biến không chính xác.
|
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Danh mục hàng hoá/cải biến được cho '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' khác với danh mục mua được sau khi đã có. Việc này khiến cho việc tự thay thế hay là tự cải biến không chính xác.
|
||||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' gây ra một vòng lặp vô tận khi gọi hàm callback.
|
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' gây ra một vòng lặp vô tận khi gọi hàm callback.
|
||||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Hàm callback {1:HEX} gửi trả kết quả sai/không rõ {2:HEX}
|
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Hàm callback {1:HEX} gửi trả kết quả sai/không rõ {2:HEX}
|
||||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' trả về loại hàng hoá sản xuất không hợp lệ khi gọi lại tại {2:HEX}
|
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' trả về loại hàng hoá sản xuất không hợp lệ khi gọi lại tại {2:HEX}
|
||||||
|
|
||||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||||
STR_NEWGRF_INVALID_CARGO :<sai kiểu hàng>
|
STR_NEWGRF_INVALID_CARGO :<sai kiểu hàng>
|
||||||
|
@ -3651,6 +3697,10 @@ STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Đổi t
|
||||||
|
|
||||||
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Mở rộng
|
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Mở rộng
|
||||||
STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Tăng quy mô đô thị
|
STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Tăng quy mô đô thị
|
||||||
|
STR_TOWN_VIEW_EXPAND_BUILDINGS_BUTTON :{BLACK}Mở rộng công trình
|
||||||
|
STR_TOWN_VIEW_EXPAND_BUILDINGS_TOOLTIP :{BLACK}Tăng số công trình của thị trấn
|
||||||
|
STR_TOWN_VIEW_EXPAND_ROADS_BUTTON :{BLACK}Mở rộng đường
|
||||||
|
STR_TOWN_VIEW_EXPAND_ROADS_TOOLTIP :{BLACK}Tăng số đường sá của thị trấn
|
||||||
STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Xoá
|
STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Xoá
|
||||||
STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Xoá bỏ đô thị này hoàn toàn
|
STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Xoá bỏ đô thị này hoàn toàn
|
||||||
|
|
||||||
|
@ -3976,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Sản l
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Sản lượng phút trước:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Sản lượng phút trước:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% đã vận chuyển)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% đã vận chuyển)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị trí trung tâm của nhà máy. Ctrl+Click mở cửa sổ mới để xem
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị trí trung tâm của nhà máy. Ctrl+Click mở cửa sổ mới để xem
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Biểu Đồ Sản Xuất
|
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Đồ thị hàng hóa
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Hiển thị biểu đồ lịch sử sản xuất của nhà máy
|
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Xem đồ thị lịch sử kinh doanh hàng hóa
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa!
|
||||||
|
|
||||||
|
@ -4389,10 +4439,10 @@ STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Hiện l
|
||||||
STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Hiện lộ trình máy bay. Ctrl+Click để hiện lịch trình
|
STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Hiện lộ trình máy bay. Ctrl+Click để hiện lịch trình
|
||||||
|
|
||||||
###length VEHICLE_TYPES
|
###length VEHICLE_TYPES
|
||||||
STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu hoả
|
STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu hoả. Ctrl+Click vào để hiện nhóm của tàu hỏa
|
||||||
STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết xe
|
STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết xe. Ctrl+Click để hiện nhóm phương tiện
|
||||||
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu thuỷ
|
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu thuỷ. Ctrl+Click vào để hiện nhóm của tàu thủy
|
||||||
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết máy bay
|
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết máy bay. Ctrl+Click để hiện nhóm của máy bay
|
||||||
|
|
||||||
###length VEHICLE_TYPES
|
###length VEHICLE_TYPES
|
||||||
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Tác động đến tàu hỏa hiện tại - bấm để dừng/chạy tàu hỏa
|
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Tác động đến tàu hỏa hiện tại - bấm để dừng/chạy tàu hỏa
|
||||||
|
@ -4647,55 +4697,56 @@ STR_ORDER_ROAD_VEHICLE_DEPOT :Xưởng xe
|
||||||
STR_ORDER_SHIP_DEPOT :Xưởng tàu thuỷ
|
STR_ORDER_SHIP_DEPOT :Xưởng tàu thuỷ
|
||||||
###next-name-looks-similar
|
###next-name-looks-similar
|
||||||
|
|
||||||
|
STR_ORDER_GO_TO_NEAREST_HANGAR_FORMAT :{STRING} xưởng sân bay gần nhất
|
||||||
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} gần {STRING} nhất
|
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} gần {STRING} nhất
|
||||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||||
|
|
||||||
STR_ORDER_REFIT_ORDER :(Cải biến thành {STRING})
|
STR_ORDER_REFIT_ORDER :{SPACE}(Cải biến thành {STRING})
|
||||||
STR_ORDER_REFIT_STOP_ORDER :(Cải biến thành {STRING} và dừng)
|
STR_ORDER_REFIT_STOP_ORDER :{SPACE}(Cải biến thành {STRING} và dừng)
|
||||||
STR_ORDER_STOP_ORDER :(Dừng)
|
STR_ORDER_STOP_ORDER :{SPACE}(Dừng)
|
||||||
|
|
||||||
STR_ORDER_WAIT_TO_UNBUNCH :(Chờ để gỡ gộp)
|
STR_ORDER_WAIT_TO_UNBUNCH :{SPACE}(Chờ để gỡ gộp)
|
||||||
|
|
||||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION}
|
STR_ORDER_GO_TO_STATION :{STRING} {STATION}
|
||||||
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION}
|
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION}
|
||||||
|
|
||||||
STR_ORDER_IMPLICIT :(Chạy ngầm)
|
STR_ORDER_IMPLICIT :{SPACE}(Chạy ngầm)
|
||||||
|
|
||||||
STR_ORDER_FULL_LOAD :(Bốc đầy hàng)
|
STR_ORDER_FULL_LOAD :{SPACE}(Bốc đầy hàng)
|
||||||
STR_ORDER_FULL_LOAD_ANY :(Bốc đủ bất kỳ hàng nào)
|
STR_ORDER_FULL_LOAD_ANY :{SPACE}(Bốc đủ bất kỳ hàng nào)
|
||||||
STR_ORDER_NO_LOAD :(Không bốc xếp)
|
STR_ORDER_NO_LOAD :{SPACE}(Không bốc xếp)
|
||||||
STR_ORDER_UNLOAD :(Dỡ và lấy hàng khác)
|
STR_ORDER_UNLOAD :{SPACE}(Dỡ và lấy hàng khác)
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD :(Dỡ tất hàng và chờ bốc đầy hàng)
|
STR_ORDER_UNLOAD_FULL_LOAD :{SPACE}(Dỡ tất hàng và chờ bốc đầy hàng)
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Dỡ tất hàng và chờ bốc đủ bất kỳ hàng nào)
|
STR_ORDER_UNLOAD_FULL_LOAD_ANY :{SPACE}(Dỡ tất hàng và chờ bốc đủ bất kỳ hàng nào)
|
||||||
STR_ORDER_UNLOAD_NO_LOAD :(Dỡ tất hàng và để trống)
|
STR_ORDER_UNLOAD_NO_LOAD :{SPACE}(Dỡ tất hàng và để trống)
|
||||||
STR_ORDER_TRANSFER :(Trung chuyển hàng và lấy hàng khác)
|
STR_ORDER_TRANSFER :{SPACE}(Trung chuyển hàng và lấy hàng khác)
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD :(Trung chuyển và chờ bốc đầy hàng)
|
STR_ORDER_TRANSFER_FULL_LOAD :{SPACE}(Trung chuyển và chờ bốc đầy hàng)
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Trung chuyển và chờ bốc đủ hàng bất kỳ)
|
STR_ORDER_TRANSFER_FULL_LOAD_ANY :{SPACE}(Trung chuyển và chờ bốc đủ hàng bất kỳ)
|
||||||
STR_ORDER_TRANSFER_NO_LOAD :(Trung chuyển và để trống)
|
STR_ORDER_TRANSFER_NO_LOAD :{SPACE}(Trung chuyển và để trống)
|
||||||
STR_ORDER_NO_UNLOAD :(Không dỡ và lấy hàng)
|
STR_ORDER_NO_UNLOAD :{SPACE}(Không dỡ và lấy hàng)
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD :(Không dỡ và chờ lấy thêm đầy hàng)
|
STR_ORDER_NO_UNLOAD_FULL_LOAD :{SPACE}(Không dỡ và chờ lấy thêm đầy hàng)
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Không dỡ và chờ lấy đủ hàng bất kỳ)
|
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :{SPACE}(Không dỡ và chờ lấy đủ hàng bất kỳ)
|
||||||
STR_ORDER_NO_UNLOAD_NO_LOAD :(Không bốc hàng và không dỡ hàng)
|
STR_ORDER_NO_UNLOAD_NO_LOAD :{SPACE}(Không bốc hàng và không dỡ hàng)
|
||||||
|
|
||||||
STR_ORDER_AUTO_REFIT :(Tự cải biến thành {STRING})
|
STR_ORDER_AUTO_REFIT :{SPACE}(Tự cải biến thành {STRING})
|
||||||
STR_ORDER_FULL_LOAD_REFIT :(Tự cải biến và chất đầy {STRING})
|
STR_ORDER_FULL_LOAD_REFIT :{SPACE}(Tự cải biến và chất đầy {STRING})
|
||||||
STR_ORDER_FULL_LOAD_ANY_REFIT :(Tự cải biến và chất đầy bất kỳ {STRING})
|
STR_ORDER_FULL_LOAD_ANY_REFIT :{SPACE}(Tự cải biến và chất đầy bất kỳ {STRING})
|
||||||
STR_ORDER_UNLOAD_REFIT :(Dỡ hàng và tự cải biến để lấy {STRING})
|
STR_ORDER_UNLOAD_REFIT :{SPACE}(Dỡ hàng và tự cải biến để lấy {STRING})
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Dỡ hàng và tự cải biến đề bốc đầy {STRING})
|
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Dỡ hàng và tự cải biến đề bốc đầy {STRING})
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
|
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
|
||||||
STR_ORDER_TRANSFER_REFIT :(Trung chuyển và tự cải biến để lấy {STRING})
|
STR_ORDER_TRANSFER_REFIT :{SPACE}(Trung chuyển và tự cải biến để lấy {STRING})
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Trung chuyển và tự cải biến đề bốc đầy {STRING})
|
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :{SPACE}(Trung chuyển và tự cải biến đề bốc đầy {STRING})
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Trung chuyển và tự cải biến để bốc đầy bất kỳ {STRING})
|
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :{SPACE}(Trung chuyển và tự cải biến để bốc đầy bất kỳ {STRING})
|
||||||
STR_ORDER_NO_UNLOAD_REFIT :(Không dỡ hàng và tự cái biến để lấy {STRING})
|
STR_ORDER_NO_UNLOAD_REFIT :{SPACE}(Không dỡ hàng và tự cái biến để lấy {STRING})
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Không dỡ hàng và tự cải biến để bốc đầy {STRING})
|
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Không dỡ hàng và tự cải biến để bốc đầy {STRING})
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Không dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
|
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Không dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
|
||||||
|
|
||||||
STR_ORDER_AUTO_REFIT_ANY :hàng hóa sẵn có
|
STR_ORDER_AUTO_REFIT_ANY :hàng hóa sẵn có
|
||||||
|
|
||||||
###length 3
|
###length 3
|
||||||
STR_ORDER_STOP_LOCATION_NEAR_END :[đỗ ở đầu gần]
|
STR_ORDER_STOP_LOCATION_NEAR_END :{SPACE}[đỗ ở đầu gần]
|
||||||
STR_ORDER_STOP_LOCATION_MIDDLE :[đỗ ở giữa]
|
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[đỗ ở giữa]
|
||||||
STR_ORDER_STOP_LOCATION_FAR_END :[đỗ ở đầu xa]
|
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[đỗ ở đầu xa]
|
||||||
|
|
||||||
STR_ORDER_OUT_OF_RANGE :{RED} (Điểm đến kế tiếp ngoài tầm xa)
|
STR_ORDER_OUT_OF_RANGE :{RED} (Điểm đến kế tiếp ngoài tầm xa)
|
||||||
|
|
||||||
|
@ -4715,14 +4766,15 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Lịch t
|
||||||
STR_TIMETABLE_NO_TRAVEL :Không di chuyển
|
STR_TIMETABLE_NO_TRAVEL :Không di chuyển
|
||||||
STR_TIMETABLE_NOT_TIMETABLEABLE :Hành trình (tự động; tính thời gian theo lịch trình thủ công kế tiếp)
|
STR_TIMETABLE_NOT_TIMETABLEABLE :Hành trình (tự động; tính thời gian theo lịch trình thủ công kế tiếp)
|
||||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Di chuyển (không bó buộc theo lịch trình)
|
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Di chuyển (không bó buộc theo lịch trình)
|
||||||
|
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Hành trình với tốc độ tối đa là {VELOCITY} (chưa dựng lịch trình)
|
||||||
STR_TIMETABLE_TRAVEL_FOR :Di chuyển trong {STRING}
|
STR_TIMETABLE_TRAVEL_FOR :Di chuyển trong {STRING}
|
||||||
STR_TIMETABLE_TRAVEL_FOR_SPEED :Lộ trình {STRING} với tốc độ tối đa {VELOCITY}
|
STR_TIMETABLE_TRAVEL_FOR_SPEED :Lộ trình {STRING} với tốc độ tối đa {VELOCITY}
|
||||||
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình)
|
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình)
|
||||||
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình) với tốc độ đối đa {VELOCITY}
|
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình) với tốc độ đối đa {VELOCITY}
|
||||||
STR_TIMETABLE_STAY_FOR_ESTIMATED :(ở lại {STRING}, chưa có lịch trình)
|
STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(ở lại {STRING}, chưa có lịch trình)
|
||||||
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(di chuyển đến {STRING}, chưa có lịch trình)
|
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(di chuyển đến {STRING}, chưa có lịch trình)
|
||||||
STR_TIMETABLE_STAY_FOR :và ở lại trong {STRING}
|
STR_TIMETABLE_STAY_FOR :{SPACE}và ở lại trong {STRING}
|
||||||
STR_TIMETABLE_AND_TRAVEL_FOR :và di chuyển trong {STRING}
|
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}và di chuyển trong {STRING}
|
||||||
|
|
||||||
STR_TIMETABLE_APPROX_TIME :{BLACK}Lịch trình này sẽ mất khoảng {STRING} để hoàn thành
|
STR_TIMETABLE_APPROX_TIME :{BLACK}Lịch trình này sẽ mất khoảng {STRING} để hoàn thành
|
||||||
STR_TIMETABLE_TOTAL_TIME :{BLACK}Lịch trình này sẽ mất {STRING} để hoàn thành
|
STR_TIMETABLE_TOTAL_TIME :{BLACK}Lịch trình này sẽ mất {STRING} để hoàn thành
|
||||||
|
@ -4741,12 +4793,14 @@ STR_TIMETABLE_START_SECONDS_QUERY :Số giây cho
|
||||||
|
|
||||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Đổi thời gian
|
STR_TIMETABLE_CHANGE_TIME :{BLACK}Đổi thời gian
|
||||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Thay đổi thời lượng của điểm lộ trình được phép sử dụng. Ctrl+Click đặt thời gian cho mọi lộ trình
|
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Thay đổi thời lượng của điểm lộ trình được phép sử dụng. Ctrl+Click đặt thời gian cho mọi lộ trình
|
||||||
|
STR_TIMETABLE_CHANGE_TIME_QUERY :Thay đổi thời gian
|
||||||
|
|
||||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Xoá thời gian
|
STR_TIMETABLE_CLEAR_TIME :{BLACK}Xoá thời gian
|
||||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Xóa thời lượng áp dụng cho điểm lộ trình. Ctrl+Click xoá tất cả thời gian cho mọi lộ trình
|
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Xóa thời lượng áp dụng cho điểm lộ trình. Ctrl+Click xoá tất cả thời gian cho mọi lộ trình
|
||||||
|
|
||||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Thay Đổi Giới Hạn Tốc Độ
|
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Thay Đổi Giới Hạn Tốc Độ
|
||||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Thay đổi tốc độ tối đa của lộ trình được chọn. Ctrl+Click đặt tốc độ cho mọi lộ trình
|
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Thay đổi tốc độ tối đa của lộ trình được chọn. Ctrl+Click đặt tốc độ cho mọi lộ trình
|
||||||
|
STR_TIMETABLE_CHANGE_SPEED_QUERY :Thay đổi giới hạn tốc độ
|
||||||
|
|
||||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Xóa Giới Hạn Tốc Độ
|
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Xóa Giới Hạn Tốc Độ
|
||||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Xóa tốc độ đối đa đối với lộ trình được chọn. Ctrl+Click xoá tốc độ cho mọi lộ trình
|
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Xóa tốc độ đối đa đối với lộ trình được chọn. Ctrl+Click xoá tốc độ cho mọi lộ trình
|
||||||
|
@ -4910,7 +4964,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<không có s
|
||||||
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Lưu ván chơi sẽ không có xe điện. Những công trình cho xe điện sẽ bị xoá bỏ
|
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Lưu ván chơi sẽ không có xe điện. Những công trình cho xe điện sẽ bị xoá bỏ
|
||||||
|
|
||||||
# Map generation messages
|
# Map generation messages
|
||||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Sinh bản đồ bị ngưng...{}... không có nơi đặt đô thị
|
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Sinh bản đồ bị ngưng...{}{}... không có nơi đặt đô thị
|
||||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... không có đô thị nào ở màn chơi kịch bản này
|
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... không có đô thị nào ở màn chơi kịch bản này
|
||||||
|
|
||||||
STR_ERROR_PNGMAP :{WHITE}Không thể nạp nền từ file PNG...
|
STR_ERROR_PNGMAP :{WHITE}Không thể nạp nền từ file PNG...
|
||||||
|
@ -4949,6 +5003,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Yêu c
|
||||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tạo dốc bị sai hướng
|
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tạo dốc bị sai hướng
|
||||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Không làm thế này được...
|
STR_ERROR_CAN_T_DO_THIS :{WHITE}Không làm thế này được...
|
||||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Cần giải toả nhà cửa trước
|
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Cần giải toả nhà cửa trước
|
||||||
|
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... công trình được bảo vệ
|
||||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Không thể dọn dẹp khu vực này...
|
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Không thể dọn dẹp khu vực này...
|
||||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... điểm không phù hợp
|
STR_ERROR_SITE_UNSUITABLE :{WHITE}... điểm không phù hợp
|
||||||
STR_ERROR_ALREADY_BUILT :{WHITE}... đã xây rồi
|
STR_ERROR_ALREADY_BUILT :{WHITE}... đã xây rồi
|
||||||
|
@ -5001,7 +5056,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... quá
|
||||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... quá nhiều đô thị
|
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... quá nhiều đô thị
|
||||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... không còn khoảng trống nào trên bản đồ
|
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... không còn khoảng trống nào trên bản đồ
|
||||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Xây dựng cầu đường đang tiến hành
|
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Xây dựng cầu đường đang tiến hành
|
||||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Không thể xoá đo thị này...{}Có một ga, bến hoặc xưởng thuộc đô thị hoặc là 1 ô đất của đô thị không thể xoá được.
|
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Không thể xoá đo thị này...{}{}Có một ga, bến hoặc xưởng thuộc đô thị hoặc là 1 ô đất của đô thị không thể xoá được.
|
||||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... không có nơi nào hợp lý để dựng tượng đài ở trung tâm đô thị này
|
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... không có nơi nào hợp lý để dựng tượng đài ở trung tâm đô thị này
|
||||||
STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Không thể xây dựng nhà...
|
STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Không thể xây dựng nhà...
|
||||||
|
|
||||||
|
@ -5828,6 +5883,7 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}tỷ
|
||||||
STR_CURRENCY_SHORT_TERA :{NBSP}ktỷ
|
STR_CURRENCY_SHORT_TERA :{NBSP}ktỷ
|
||||||
|
|
||||||
STR_JUST_CARGO :{CARGO_LONG}
|
STR_JUST_CARGO :{CARGO_LONG}
|
||||||
|
STR_JUST_LEFT_ARROW :{LEFT_ARROW}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
STR_JUST_CHECKMARK :{CHECKMARK}
|
STR_JUST_CHECKMARK :{CHECKMARK}
|
||||||
STR_JUST_COMMA :{COMMA}
|
STR_JUST_COMMA :{COMMA}
|
||||||
|
@ -5867,3 +5923,11 @@ STR_SHIP :{BLACK}{SHIP}
|
||||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||||
|
|
||||||
STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING}
|
STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING}
|
||||||
|
STR_BADGE_CONFIG_MENU_TOOLTIP :Mở thiết lập phù hiệu
|
||||||
|
STR_BADGE_CONFIG_RESET :Thiêt lập lại
|
||||||
|
STR_BADGE_CONFIG_ICONS :{WHITE}Ảnh phù hiệu
|
||||||
|
STR_BADGE_CONFIG_FILTERS :{WHITE}Bộ lọc phù hiệu
|
||||||
|
STR_BADGE_CONFIG_PREVIEW :Ảnh xem trước
|
||||||
|
STR_BADGE_CONFIG_NAME :Tên
|
||||||
|
STR_BADGE_FILTER_ANY_LABEL :Bất cứ {STRING} nào
|
||||||
|
STR_BADGE_FILTER_IS_LABEL :{STRING} là {STRING}
|
||||||
|
|
|
@ -633,7 +633,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Peidio a
|
||||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toglu'r graff ar gyfer y math llwyth yma
|
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toglu'r graff ar gyfer y math llwyth yma
|
||||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||||
|
|
||||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Hanes Cynhyrchu
|
|
||||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Cynhyrchwyd
|
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Cynhyrchwyd
|
||||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Cludwyd
|
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Cludwyd
|
||||||
|
|
||||||
|
@ -3994,8 +3993,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Cynnyrch
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Cynnyrch y munud olaf:
|
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Cynnyrch y munud olaf:
|
||||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% wedi'i gludo)
|
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% wedi'i gludo)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar y diwydiant. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar y diwydiant. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graff Cynhyrchiant
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Dangos graff o hanes cynhyrchu diwydiant
|
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}%
|
||||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau!
|
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau!
|
||||||
|
|
||||||
|
|
|
@ -30,26 +30,26 @@
|
||||||
* Colours for the various "load" states of links. Ordered from "unused" to
|
* Colours for the various "load" states of links. Ordered from "unused" to
|
||||||
* "overloaded".
|
* "overloaded".
|
||||||
*/
|
*/
|
||||||
const uint8_t LinkGraphOverlay::LINK_COLOURS[][12] = {
|
const PixelColour LinkGraphOverlay::LINK_COLOURS[][12] = {
|
||||||
{
|
{
|
||||||
0x0f, 0xd1, 0xd0, 0x57,
|
PixelColour{0x0f}, PixelColour{0xd1}, PixelColour{0xd0}, PixelColour{0x57},
|
||||||
0x55, 0x53, 0xbf, 0xbd,
|
PixelColour{0x55}, PixelColour{0x53}, PixelColour{0xbf}, PixelColour{0xbd},
|
||||||
0xba, 0xb9, 0xb7, 0xb5
|
PixelColour{0xba}, PixelColour{0xb9}, PixelColour{0xb7}, PixelColour{0xb5}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x0f, 0xd1, 0xd0, 0x57,
|
PixelColour{0x0f}, PixelColour{0xd1}, PixelColour{0xd0}, PixelColour{0x57},
|
||||||
0x55, 0x53, 0x96, 0x95,
|
PixelColour{0x55}, PixelColour{0x53}, PixelColour{0x96}, PixelColour{0x95},
|
||||||
0x94, 0x93, 0x92, 0x91
|
PixelColour{0x94}, PixelColour{0x93}, PixelColour{0x92}, PixelColour{0x91}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x0f, 0x0b, 0x09, 0x07,
|
PixelColour{0x0f}, PixelColour{0x0b}, PixelColour{0x09}, PixelColour{0x07},
|
||||||
0x05, 0x03, 0xbf, 0xbd,
|
PixelColour{0x05}, PixelColour{0x03}, PixelColour{0xbf}, PixelColour{0xbd},
|
||||||
0xba, 0xb9, 0xb7, 0xb5
|
PixelColour{0xba}, PixelColour{0xb9}, PixelColour{0xb7}, PixelColour{0xb5}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x0f, 0x0b, 0x0a, 0x09,
|
PixelColour{0x0f}, PixelColour{0x0b}, PixelColour{0x0a}, PixelColour{0x09},
|
||||||
0x08, 0x07, 0x06, 0x05,
|
PixelColour{0x08}, PixelColour{0x07}, PixelColour{0x06}, PixelColour{0x05},
|
||||||
0x04, 0x03, 0x02, 0x01
|
PixelColour{0x04}, PixelColour{0x03}, PixelColour{0x02}, PixelColour{0x01}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ void LinkGraphOverlay::DrawLinks(const DrawPixelInfo *dpi) const
|
||||||
void LinkGraphOverlay::DrawContent(Point pta, Point ptb, const LinkProperties &cargo) const
|
void LinkGraphOverlay::DrawContent(Point pta, Point ptb, const LinkProperties &cargo) const
|
||||||
{
|
{
|
||||||
uint usage_or_plan = std::min(cargo.capacity * 2 + 1, cargo.Usage());
|
uint usage_or_plan = std::min(cargo.capacity * 2 + 1, cargo.Usage());
|
||||||
int colour = LinkGraphOverlay::LINK_COLOURS[_settings_client.gui.linkgraph_colours][usage_or_plan * lengthof(LinkGraphOverlay::LINK_COLOURS[0]) / (cargo.capacity * 2 + 2)];
|
PixelColour colour = LinkGraphOverlay::LINK_COLOURS[_settings_client.gui.linkgraph_colours][usage_or_plan * lengthof(LinkGraphOverlay::LINK_COLOURS[0]) / (cargo.capacity * 2 + 2)];
|
||||||
int width = ScaleGUITrad(this->scale);
|
int width = ScaleGUITrad(this->scale);
|
||||||
int dash = cargo.shared ? width * 4 : 0;
|
int dash = cargo.shared ? width * 4 : 0;
|
||||||
|
|
||||||
|
@ -345,7 +345,7 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const
|
||||||
* @param colour Colour with which the vertex will be filled.
|
* @param colour Colour with which the vertex will be filled.
|
||||||
* @param border_colour Colour for the border of the vertex.
|
* @param border_colour Colour for the border of the vertex.
|
||||||
*/
|
*/
|
||||||
/* static */ void LinkGraphOverlay::DrawVertex(int x, int y, int size, int colour, int border_colour)
|
/* static */ void LinkGraphOverlay::DrawVertex(int x, int y, int size, PixelColour colour, PixelColour border_colour)
|
||||||
{
|
{
|
||||||
size--;
|
size--;
|
||||||
int w1 = size / 2;
|
int w1 = size / 2;
|
||||||
|
@ -607,7 +607,7 @@ void LinkGraphLegendWindow::DrawWidget(const Rect &r, WidgetID widget) const
|
||||||
DrawCompanyIcon(cid, CentreBounds(br.left, br.right, sprite_size.width), CentreBounds(br.top, br.bottom, sprite_size.height));
|
DrawCompanyIcon(cid, CentreBounds(br.left, br.right, sprite_size.width), CentreBounds(br.top, br.bottom, sprite_size.height));
|
||||||
}
|
}
|
||||||
if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) {
|
if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) {
|
||||||
uint8_t colour = LinkGraphOverlay::LINK_COLOURS[_settings_client.gui.linkgraph_colours][widget - WID_LGL_SATURATION_FIRST];
|
PixelColour colour = LinkGraphOverlay::LINK_COLOURS[_settings_client.gui.linkgraph_colours][widget - WID_LGL_SATURATION_FIRST];
|
||||||
GfxFillRect(br, colour);
|
GfxFillRect(br, colour);
|
||||||
StringID str = STR_NULL;
|
StringID str = STR_NULL;
|
||||||
if (widget == WID_LGL_SATURATION_FIRST) {
|
if (widget == WID_LGL_SATURATION_FIRST) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ public:
|
||||||
typedef std::map<StationID, StationLinkMap> LinkMap;
|
typedef std::map<StationID, StationLinkMap> LinkMap;
|
||||||
typedef std::vector<std::pair<StationID, uint> > StationSupplyList;
|
typedef std::vector<std::pair<StationID, uint> > StationSupplyList;
|
||||||
|
|
||||||
static const uint8_t LINK_COLOURS[][12];
|
static const PixelColour LINK_COLOURS[][12];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a link graph overlay for the specified window.
|
* Create a link graph overlay for the specified window.
|
||||||
|
@ -95,7 +95,7 @@ protected:
|
||||||
void RebuildCache();
|
void RebuildCache();
|
||||||
|
|
||||||
static void AddStats(CargoType new_cargo, uint new_cap, uint new_usg, uint new_flow, uint32_t time, bool new_shared, LinkProperties &cargo);
|
static void AddStats(CargoType new_cargo, uint new_cap, uint new_usg, uint new_flow, uint32_t time, bool new_shared, LinkProperties &cargo);
|
||||||
static void DrawVertex(int x, int y, int size, int colour, int border_colour);
|
static void DrawVertex(int x, int y, int size, PixelColour colour, PixelColour border_colour);
|
||||||
};
|
};
|
||||||
|
|
||||||
void ShowLinkGraphLegend();
|
void ShowLinkGraphLegend();
|
||||||
|
|
|
@ -42,13 +42,13 @@ LinkGraphJob::LinkGraphJob(const LinkGraph &orig) :
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erase all flows originating at a specific node.
|
* Erase all flows originating at a specific station.
|
||||||
* @param from Node to erase flows for.
|
* @param from StationID to erase flows for.
|
||||||
*/
|
*/
|
||||||
void LinkGraphJob::EraseFlows(NodeID from)
|
void LinkGraphJob::EraseFlows(StationID from)
|
||||||
{
|
{
|
||||||
for (NodeID node_id = 0; node_id < this->Size(); ++node_id) {
|
for (NodeID node_id = 0; node_id < this->Size(); ++node_id) {
|
||||||
(*this)[node_id].flows.erase(StationID{from});
|
(*this)[node_id].flows.erase(from);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ LinkGraphJob::~LinkGraphJob()
|
||||||
/* The station can have been deleted. Remove all flows originating from it then. */
|
/* The station can have been deleted. Remove all flows originating from it then. */
|
||||||
Station *st = Station::GetIfValid(from.base.station);
|
Station *st = Station::GetIfValid(from.base.station);
|
||||||
if (st == nullptr) {
|
if (st == nullptr) {
|
||||||
this->EraseFlows(node_id);
|
this->EraseFlows(from.base.station);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ LinkGraphJob::~LinkGraphJob()
|
||||||
* sure that everything is still consistent or ignore it otherwise. */
|
* sure that everything is still consistent or ignore it otherwise. */
|
||||||
GoodsEntry &ge = st->goods[this->Cargo()];
|
GoodsEntry &ge = st->goods[this->Cargo()];
|
||||||
if (ge.link_graph != this->link_graph.index || ge.node != node_id) {
|
if (ge.link_graph != this->link_graph.index || ge.node != node_id) {
|
||||||
this->EraseFlows(node_id);
|
this->EraseFlows(from.base.station);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ LinkGraphJob::~LinkGraphJob()
|
||||||
/* Delete old flows for source stations which have been deleted
|
/* Delete old flows for source stations which have been deleted
|
||||||
* from the new flows. This avoids flow cycles between old and
|
* from the new flows. This avoids flow cycles between old and
|
||||||
* new flows. */
|
* new flows. */
|
||||||
while (!erased.IsEmpty()) geflows.erase(StationID{erased.Pop()});
|
while (!erased.IsEmpty()) geflows.erase(erased.Pop());
|
||||||
} else if ((*lg)[node_id][dest_id].last_unrestricted_update == EconomyTime::INVALID_DATE) {
|
} else if ((*lg)[node_id][dest_id].last_unrestricted_update == EconomyTime::INVALID_DATE) {
|
||||||
/* Edge is fully restricted. */
|
/* Edge is fully restricted. */
|
||||||
flows.RestrictFlows(to);
|
flows.RestrictFlows(to);
|
||||||
|
|
|
@ -167,7 +167,7 @@ protected:
|
||||||
std::atomic<bool> job_completed = false; ///< Is the job still running. This is accessed by multiple threads and reads may be stale.
|
std::atomic<bool> job_completed = false; ///< Is the job still running. This is accessed by multiple threads and reads may be stale.
|
||||||
std::atomic<bool> job_aborted = false; ///< Has the job been aborted. This is accessed by multiple threads and reads may be stale.
|
std::atomic<bool> job_aborted = false; ///< Has the job been aborted. This is accessed by multiple threads and reads may be stale.
|
||||||
|
|
||||||
void EraseFlows(NodeID from);
|
void EraseFlows(StationID from);
|
||||||
void JoinThread();
|
void JoinThread();
|
||||||
void SpawnThread();
|
void SpawnThread();
|
||||||
|
|
||||||
|
|
|
@ -556,7 +556,7 @@ void SetupColoursAndInitialWindow()
|
||||||
const uint8_t *b = GetNonSprite(GetColourPalette(i), SpriteType::Recolour) + 1;
|
const uint8_t *b = GetNonSprite(GetColourPalette(i), SpriteType::Recolour) + 1;
|
||||||
assert(b != nullptr);
|
assert(b != nullptr);
|
||||||
for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) {
|
for (ColourShade j = SHADE_BEGIN; j < SHADE_END; j++) {
|
||||||
SetColourGradient(i, j, b[0xC6 + j]);
|
SetColourGradient(i, j, PixelColour{b[0xC6 + j]});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#define HISTORY_FUNC_HPP
|
#define HISTORY_FUNC_HPP
|
||||||
|
|
||||||
#include "../core/bitmath_func.hpp"
|
#include "../core/bitmath_func.hpp"
|
||||||
|
#include "../core/math_func.hpp"
|
||||||
|
#include "../timer/timer_game_economy.h"
|
||||||
#include "history_type.hpp"
|
#include "history_type.hpp"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,6 +36,19 @@ void RotateHistory(HistoryData<T> &history)
|
||||||
history[THIS_MONTH] = {};
|
history[THIS_MONTH] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an average value for the previous month, as reset for the next month.
|
||||||
|
* @param total Accrued total to average. Will be reset to zero.
|
||||||
|
* @return Average value for the month.
|
||||||
|
*/
|
||||||
|
template <typename T, typename Taccrued>
|
||||||
|
T GetAndResetAccumulatedAverage(Taccrued &total)
|
||||||
|
{
|
||||||
|
T result = ClampTo<T>(total / std::max(1U, TimerGameEconomy::days_since_last_month));
|
||||||
|
total = 0;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill some data with historical data.
|
* Fill some data with historical data.
|
||||||
* @param history Historical data to fill from.
|
* @param history Historical data to fill from.
|
||||||
|
@ -53,4 +68,21 @@ void FillFromHistory(const HistoryData<T> &history, ValidHistoryMask valid_histo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fill some data with empty records.
|
||||||
|
* @param valid_history Mask of valid history records.
|
||||||
|
* @param fillers Fillers to fill with history data.
|
||||||
|
*/
|
||||||
|
template <uint N, typename... Tfillers>
|
||||||
|
void FillFromEmpty(ValidHistoryMask valid_history, Tfillers... fillers)
|
||||||
|
{
|
||||||
|
for (uint i = 0; i != N; ++i) {
|
||||||
|
if (HasBit(valid_history, N - i)) {
|
||||||
|
(fillers.MakeZero(i), ...);
|
||||||
|
} else {
|
||||||
|
(fillers.MakeInvalid(i), ...);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* HISTORY_FUNC_HPP */
|
#endif /* HISTORY_FUNC_HPP */
|
||||||
|
|
|
@ -79,7 +79,6 @@ static constexpr auto _callback_tuple = std::make_tuple(
|
||||||
&CcCreateGroup,
|
&CcCreateGroup,
|
||||||
&CcFoundRandomTown,
|
&CcFoundRandomTown,
|
||||||
&CcRoadStop,
|
&CcRoadStop,
|
||||||
&CcBuildIndustry,
|
|
||||||
&CcStartStopVehicle,
|
&CcStartStopVehicle,
|
||||||
&CcGame,
|
&CcGame,
|
||||||
&CcAddVehicleNewGroup
|
&CcAddVehicleNewGroup
|
||||||
|
|
|
@ -97,11 +97,11 @@ static ChangeInfoResult CargoReserveInfo(uint first, uint last, int prop, ByteRe
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x13: // Colour for station rating bars
|
case 0x13: // Colour for station rating bars
|
||||||
cs->rating_colour = buf.ReadByte();
|
cs->rating_colour = PixelColour{buf.ReadByte()};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x14: // Colour for cargo graph
|
case 0x14: // Colour for cargo graph
|
||||||
cs->legend_colour = buf.ReadByte();
|
cs->legend_colour = PixelColour{buf.ReadByte()};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x15: // Freight status
|
case 0x15: // Freight status
|
||||||
|
|
|
@ -565,7 +565,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint first, uint last, int prop, By
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x19: // Map colour
|
case 0x19: // Map colour
|
||||||
indsp->map_colour = buf.ReadByte();
|
indsp->map_colour = PixelColour{buf.ReadByte()};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1A: // Special industry flags to define special behavior
|
case 0x1A: // Special industry flags to define special behavior
|
||||||
|
|
|
@ -121,7 +121,7 @@ static ChangeInfoResult RailTypeChangeInfo(uint first, uint last, int prop, Byte
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x16: // Map colour
|
case 0x16: // Map colour
|
||||||
rti->map_colour = buf.ReadByte();
|
rti->map_colour = PixelColour{buf.ReadByte()};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x17: // Introduction date
|
case 0x17: // Introduction date
|
||||||
|
|
|
@ -109,7 +109,7 @@ static ChangeInfoResult RoadTypeChangeInfo(uint first, uint last, int prop, Byte
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x16: // Map colour
|
case 0x16: // Map colour
|
||||||
rti->map_colour = buf.ReadByte();
|
rti->map_colour = PixelColour{buf.ReadByte()};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x17: // Introduction date
|
case 0x17: // Introduction date
|
||||||
|
|
|
@ -90,12 +90,12 @@ static ChangeInfoResult StationChangeInfo(uint first, uint last, int prop, ByteR
|
||||||
|
|
||||||
/* no relative bounding box support */
|
/* no relative bounding box support */
|
||||||
DrawTileSeqStruct &dtss = tmp_layout.emplace_back();
|
DrawTileSeqStruct &dtss = tmp_layout.emplace_back();
|
||||||
dtss.delta_x = delta_x;
|
dtss.origin.x = delta_x;
|
||||||
dtss.delta_y = buf.ReadByte();
|
dtss.origin.y = buf.ReadByte();
|
||||||
dtss.delta_z = buf.ReadByte();
|
dtss.origin.z = buf.ReadByte();
|
||||||
dtss.size_x = buf.ReadByte();
|
dtss.extent.x = buf.ReadByte();
|
||||||
dtss.size_y = buf.ReadByte();
|
dtss.extent.y = buf.ReadByte();
|
||||||
dtss.size_z = buf.ReadByte();
|
dtss.extent.z = buf.ReadByte();
|
||||||
|
|
||||||
ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image);
|
ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image);
|
||||||
/* On error, bail out immediately. Temporary GRF data was already freed */
|
/* On error, bail out immediately. Temporary GRF data was already freed */
|
||||||
|
|
|
@ -207,15 +207,15 @@ bool ReadSpriteLayout(ByteReader &buf, uint num_building_sprites, bool use_cur_s
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
seq->delta_x = buf.ReadByte();
|
seq->origin.x = buf.ReadByte();
|
||||||
seq->delta_y = buf.ReadByte();
|
seq->origin.y = buf.ReadByte();
|
||||||
|
|
||||||
if (!no_z_position) seq->delta_z = buf.ReadByte();
|
if (!no_z_position) seq->origin.z = buf.ReadByte();
|
||||||
|
|
||||||
if (seq->IsParentSprite()) {
|
if (seq->IsParentSprite()) {
|
||||||
seq->size_x = buf.ReadByte();
|
seq->extent.x = buf.ReadByte();
|
||||||
seq->size_y = buf.ReadByte();
|
seq->extent.y = buf.ReadByte();
|
||||||
seq->size_z = buf.ReadByte();
|
seq->extent.z = buf.ReadByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1);
|
ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1);
|
||||||
|
|
|
@ -609,7 +609,7 @@ SpriteLayoutProcessor::SpriteLayoutProcessor(const NewGRFSpriteLayout &raw_layou
|
||||||
* Also include the groundsprite into the sequence for easier processing. */
|
* Also include the groundsprite into the sequence for easier processing. */
|
||||||
DrawTileSeqStruct © = this->result_seq.emplace_back();
|
DrawTileSeqStruct © = this->result_seq.emplace_back();
|
||||||
copy.image = this->raw_layout->ground;
|
copy.image = this->raw_layout->ground;
|
||||||
copy.delta_z = static_cast<int8_t>(0x80);
|
copy.origin.z = static_cast<int8_t>(0x80);
|
||||||
|
|
||||||
this->result_seq.insert(this->result_seq.end(), this->raw_layout->seq.begin(), this->raw_layout->seq.end());
|
this->result_seq.insert(this->result_seq.end(), this->raw_layout->seq.begin(), this->raw_layout->seq.end());
|
||||||
|
|
||||||
|
@ -692,13 +692,13 @@ void SpriteLayoutProcessor::ProcessRegisters(const ResolverObject &object, uint8
|
||||||
|
|
||||||
if (result.IsParentSprite()) {
|
if (result.IsParentSprite()) {
|
||||||
if (flags & TLF_BB_XY_OFFSET) {
|
if (flags & TLF_BB_XY_OFFSET) {
|
||||||
result.delta_x += object.GetRegister(regs->delta.parent[0]);
|
result.origin.x += object.GetRegister(regs->delta.parent[0]);
|
||||||
result.delta_y += object.GetRegister(regs->delta.parent[1]);
|
result.origin.y += object.GetRegister(regs->delta.parent[1]);
|
||||||
}
|
}
|
||||||
if (flags & TLF_BB_Z_OFFSET) result.delta_z += object.GetRegister(regs->delta.parent[2]);
|
if (flags & TLF_BB_Z_OFFSET) result.origin.z += object.GetRegister(regs->delta.parent[2]);
|
||||||
} else {
|
} else {
|
||||||
if (flags & TLF_CHILD_X_OFFSET) result.delta_x += object.GetRegister(regs->delta.child[0]);
|
if (flags & TLF_CHILD_X_OFFSET) result.origin.x += object.GetRegister(regs->delta.child[0]);
|
||||||
if (flags & TLF_CHILD_Y_OFFSET) result.delta_y += object.GetRegister(regs->delta.child[1]);
|
if (flags & TLF_CHILD_Y_OFFSET) result.origin.y += object.GetRegister(regs->delta.child[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -476,13 +476,7 @@ static void DrawTile_Object(TileInfo *ti)
|
||||||
|
|
||||||
if (!IsInvisibilitySet(TO_STRUCTURES)) {
|
if (!IsInvisibilitySet(TO_STRUCTURES)) {
|
||||||
for (const DrawTileSeqStruct &dtss : dts->GetSequence()) {
|
for (const DrawTileSeqStruct &dtss : dts->GetSequence()) {
|
||||||
AddSortableSpriteToDraw(
|
AddSortableSpriteToDraw(dtss.image.sprite, palette, *ti, dtss, IsTransparencySet(TO_STRUCTURES));
|
||||||
dtss.image.sprite, palette,
|
|
||||||
ti->x + dtss.delta_x, ti->y + dtss.delta_y,
|
|
||||||
dtss.size_x, dtss.size_y,
|
|
||||||
dtss.size_z, ti->z + dtss.delta_z,
|
|
||||||
IsTransparencySet(TO_STRUCTURES)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -700,7 +700,7 @@ int openttd_main(std::span<std::string_view> arguments)
|
||||||
InitializeLanguagePacks();
|
InitializeLanguagePacks();
|
||||||
|
|
||||||
/* Initialize the font cache */
|
/* Initialize the font cache */
|
||||||
InitFontCache(false);
|
InitFontCache(FONTSIZES_REQUIRED);
|
||||||
|
|
||||||
/* This must be done early, since functions use the SetWindowDirty* calls */
|
/* This must be done early, since functions use the SetWindowDirty* calls */
|
||||||
InitWindowSystem();
|
InitWindowSystem();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue