Merge Android changes from branch 1.6
This commit is contained in:
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir -p ../translations/lang
|
||||
git diff 1.6/master -- src/lang/english.txt | tail -n +5 | grep '^[+]' | cut -b 2- | \
|
||||
grep -v "^STR_TABLET_CLOSE\b" | \
|
||||
grep -v "^STR_TABLET_SHIFT\b" | \
|
||||
grep -v "^STR_TABLET_CTRL\b" | \
|
||||
cat > ../translations/lang/english.txt
|
||||
|
||||
for f in src/lang/*.txt; do
|
||||
[ "$f" = src/lang/english.txt ] && continue
|
||||
rm -f ../translations/lang/`basename $f`
|
||||
cat ../translations/lang/english.txt | grep '^STR' | while read name text; do
|
||||
grep "^$name\b" $f >> ../translations/lang/`basename $f`
|
||||
done
|
||||
done
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
for f in ../translations/lang/*.txt; do
|
||||
[ "$f" = ../translations/lang/english.txt ] && continue
|
||||
out=src/lang/`basename $f`
|
||||
grep "^# Android strings" $out > /dev/null || [ -z "`tail -c 2 $out`" ] || echo >> $out
|
||||
{ grep -v "^# Android strings" $out ; echo "# Android strings" ; } > $out.new
|
||||
mv -f $out.new $out
|
||||
cat $f | grep '^STR' | while read name text; do
|
||||
{ grep -v "^$name\b" $out ; printf "%-64s%s\n" "$name" "$text" ; } > $out.new
|
||||
mv -f $out.new $out
|
||||
done
|
||||
done
|
||||
+1
-1
@@ -1048,7 +1048,7 @@ check_params() {
|
||||
# of the tags folder, the folder of the tag does not have a .svn folder
|
||||
# anymore and this fails to detect the subversion repository checkout.
|
||||
log 1 "checking revision... svn detection (tag)"
|
||||
elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then
|
||||
elif [ -e "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then
|
||||
log 1 "checking revision... git detection"
|
||||
elif [ -d "$ROOT_DIR/.hg" ] && [ -n "`HGPLAIN= hg help 2>/dev/null`" ]; then
|
||||
log 1 "checking revision... hg detection"
|
||||
|
||||
@@ -127,7 +127,7 @@ AWKCOMMAND='
|
||||
if ($0 == "WINCE" && "'$os'" != "WINCE") { next; }
|
||||
if ($0 == "MSVC" && "'$os'" != "MSVC") { next; }
|
||||
if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; }
|
||||
if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; }
|
||||
if ($0 == "LIBTIMIDITY" && "'$libtimidity_config'" == "" ) { next; }
|
||||
if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; }
|
||||
if ($0 == "SSE" && "'$with_sse'" != "1") { next; }
|
||||
|
||||
|
||||
+7
-6
@@ -70,7 +70,11 @@ ROOT_DIR=`pwd`
|
||||
# Determine if we are using a modified version
|
||||
# Assume the dir is not modified
|
||||
MODIFIED="0"
|
||||
if [ -d "$ROOT_DIR/.svn" ] || [ -d "$ROOT_DIR/../.svn" ]; then
|
||||
if [ -f "$ROOT_DIR/.ottdrev" ]; then
|
||||
# We are an exported source bundle
|
||||
cat $ROOT_DIR/.ottdrev
|
||||
exit
|
||||
elif [ -d "$ROOT_DIR/.svn" ] || [ -d "$ROOT_DIR/../.svn" ]; then
|
||||
# We are an svn checkout
|
||||
if [ -n "`svnversion | grep 'M'`" ]; then
|
||||
MODIFIED="2"
|
||||
@@ -84,7 +88,7 @@ if [ -d "$ROOT_DIR/.svn" ] || [ -d "$ROOT_DIR/../.svn" ]; then
|
||||
else
|
||||
REV="r$REV_NR"
|
||||
fi
|
||||
elif [ -d "$ROOT_DIR/.git" ]; then
|
||||
elif [ -e "$ROOT_DIR/.git" ]; then
|
||||
# We are a git checkout
|
||||
# Refresh the index to make sure file stat info is in sync, then look for modifications
|
||||
git update-index --refresh >/dev/null
|
||||
@@ -122,10 +126,6 @@ elif [ -d "$ROOT_DIR/.hg" ]; then
|
||||
# No rev? Maybe it is a custom hgsubversion clone
|
||||
REV_NR=`LC_ALL=C HGPLAIN= hg parent --template="{svnrev}"`
|
||||
fi
|
||||
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
||||
# We are an exported source bundle
|
||||
cat $ROOT_DIR/.ottdrev
|
||||
exit
|
||||
else
|
||||
# We don't know
|
||||
MODIFIED="1"
|
||||
@@ -134,6 +134,7 @@ else
|
||||
REV_NR=""
|
||||
fi
|
||||
|
||||
MODIFIED="0" # This prevents Andorid build from connecting to a public servers
|
||||
if [ "$MODIFIED" -eq "2" ]; then
|
||||
REV="${REV}M"
|
||||
fi
|
||||
|
||||
@@ -626,6 +626,7 @@
|
||||
<ClInclude Include="..\src\tilehighlight_type.h" />
|
||||
<ClInclude Include="..\src\tilematrix_type.hpp" />
|
||||
<ClInclude Include="..\src\timetable.h" />
|
||||
<ClInclude Include="..\src\toolbar_type.h" />
|
||||
<ClInclude Include="..\src\toolbar_gui.h" />
|
||||
<ClInclude Include="..\src\town.h" />
|
||||
<ClInclude Include="..\src\town_type.h" />
|
||||
|
||||
@@ -1107,6 +1107,9 @@
|
||||
<ClInclude Include="..\src\timetable.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\toolbar_type.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\toolbar_gui.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -1778,6 +1778,10 @@
|
||||
RelativePath=".\..\src\timetable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\toolbar_type.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\toolbar_gui.h"
|
||||
>
|
||||
|
||||
@@ -1775,6 +1775,10 @@
|
||||
RelativePath=".\..\src\timetable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\toolbar_type.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\toolbar_gui.h"
|
||||
>
|
||||
|
||||
+14
-1
@@ -93,6 +93,7 @@ tgp.cpp
|
||||
tile_map.cpp
|
||||
tilearea.cpp
|
||||
townname.cpp
|
||||
tutorial_gui.cpp
|
||||
#if WIN32
|
||||
#else
|
||||
#if WINCE
|
||||
@@ -143,6 +144,7 @@ base_media_func.h
|
||||
base_station_base.h
|
||||
bmp.h
|
||||
bridge.h
|
||||
build_confirmation_func.h
|
||||
cargo_type.h
|
||||
cargoaction.h
|
||||
cargomonitor.h
|
||||
@@ -365,6 +367,7 @@ tilehighlight_func.h
|
||||
tilehighlight_type.h
|
||||
tilematrix_type.hpp
|
||||
timetable.h
|
||||
toolbar_type.h
|
||||
toolbar_gui.h
|
||||
town.h
|
||||
town_type.h
|
||||
@@ -451,6 +454,7 @@ airport_gui.cpp
|
||||
autoreplace_gui.cpp
|
||||
bootstrap_gui.cpp
|
||||
bridge_gui.cpp
|
||||
build_confirmation_gui.cpp
|
||||
build_vehicle_gui.cpp
|
||||
cheat_gui.cpp
|
||||
company_gui.cpp
|
||||
@@ -906,6 +910,12 @@ script/api/script_window.cpp
|
||||
# Blitters
|
||||
#if DEDICATED
|
||||
#else
|
||||
blitter/16bpp_base.cpp
|
||||
blitter/16bpp_base.hpp
|
||||
blitter/16bpp_anim.cpp
|
||||
blitter/16bpp_anim.hpp
|
||||
blitter/16bpp_simple.cpp
|
||||
blitter/16bpp_simple.hpp
|
||||
blitter/32bpp_anim.cpp
|
||||
blitter/32bpp_anim.hpp
|
||||
#if SSE
|
||||
@@ -1113,7 +1123,10 @@ music/null_m.cpp
|
||||
#else
|
||||
#if MORPHOS
|
||||
#else
|
||||
music/extmidi.cpp
|
||||
#if LIBTIMIDITY
|
||||
#else
|
||||
music/extmidi.cpp
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
|
||||
+49
-46
@@ -109,7 +109,7 @@ struct AIListWindow : public Window {
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
if (widget == WID_AIL_LIST) {
|
||||
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
|
||||
resize->width = 1;
|
||||
resize->height = this->line_height;
|
||||
@@ -122,16 +122,16 @@ struct AIListWindow : public Window {
|
||||
switch (widget) {
|
||||
case WID_AIL_LIST: {
|
||||
/* Draw a list of all available AIs. */
|
||||
int y = this->GetWidget<NWidgetBase>(WID_AIL_LIST)->pos_y;
|
||||
int y = Center(r.top, this->line_height);
|
||||
/* First AI in the list is hardcoded to random */
|
||||
if (this->vscroll->IsVisible(0)) {
|
||||
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y + WD_MATRIX_TOP, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE);
|
||||
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE);
|
||||
y += this->line_height;
|
||||
}
|
||||
ScriptInfoList::const_iterator it = this->info_list->begin();
|
||||
for (int i = 1; it != this->info_list->end(); i++, it++) {
|
||||
if (this->vscroll->IsVisible(i)) {
|
||||
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE);
|
||||
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE);
|
||||
y += this->line_height;
|
||||
}
|
||||
}
|
||||
@@ -347,7 +347,7 @@ struct AISettingsWindow : public Window {
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
if (widget == WID_AIS_BACKGROUND) {
|
||||
this->line_height = max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
|
||||
resize->width = 1;
|
||||
resize->height = this->line_height;
|
||||
@@ -369,7 +369,6 @@ struct AISettingsWindow : public Window {
|
||||
uint text_left = r.left + (rtl ? WD_FRAMERECT_LEFT : SETTING_BUTTON_WIDTH + 8);
|
||||
uint text_right = r.right - (rtl ? SETTING_BUTTON_WIDTH + 8 : WD_FRAMERECT_RIGHT);
|
||||
|
||||
|
||||
int y = r.top;
|
||||
int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2;
|
||||
int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2;
|
||||
@@ -414,7 +413,7 @@ struct AISettingsWindow : public Window {
|
||||
}
|
||||
}
|
||||
|
||||
DrawString(text_left, text_right, y + text_y_offset, str, colour);
|
||||
DrawString(text_left, text_right, Center(y, this->line_height), str, colour);
|
||||
y += this->line_height;
|
||||
}
|
||||
}
|
||||
@@ -662,39 +661,41 @@ static const NWidgetPart _nested_ai_config_widgets[] = {
|
||||
NWidget(WWT_CAPTION, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_MAUVE, WID_AIC_BACKGROUND),
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 4, 4),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_DECREASE), SetFill(0, 1), SetDataTip(AWV_DECREASE, STR_NULL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_INCREASE), SetFill(0, 1), SetDataTip(AWV_INCREASE, STR_NULL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(6, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_MAUVE, WID_AIC_NUMBER), SetDataTip(STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS, STR_NULL), SetFill(1, 0), SetPadding(1, 0, 0, 0),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(7, 7, 7),
|
||||
NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_AI, STR_NULL), SetPadding(0, 5, 0, 5),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_LIST), SetMinimalSize(288, 112), SetFill(1, 0), SetMatrixDataTip(1, 8, STR_AI_CONFIG_AILIST_TOOLTIP), SetScrollbar(WID_AIC_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_AIC_SCROLLBAR),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_UP), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_UP, STR_AI_CONFIG_MOVE_UP_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_DOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_DOWN, STR_AI_CONFIG_MOVE_DOWN_TOOLTIP),
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 4, 4),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_DECREASE), SetFill(0, 1), SetDataTip(AWV_DECREASE, STR_NULL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_INCREASE), SetFill(0, 1), SetDataTip(AWV_INCREASE, STR_NULL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(6, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_MAUVE, WID_AIC_NUMBER), SetDataTip(STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS, STR_NULL), SetFill(1, 0), SetPadding(1, 0, 0, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_UP), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_UP, STR_AI_CONFIG_MOVE_UP_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_DOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_DOWN, STR_AI_CONFIG_MOVE_DOWN_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 9),
|
||||
NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT, STR_NULL), SetPadding(0, 5, 4, 5),
|
||||
NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetSizingType(NWST_STEP), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 12), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_AI, STR_NULL), SetPadding(0, 5, 0, 5),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_LIST), SetMinimalSize(288, 112), SetFill(1, 0), SetMatrixDataTip(1, 8, STR_AI_CONFIG_AILIST_TOOLTIP), SetScrollbar(WID_AIC_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_AIC_SCROLLBAR),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 9),
|
||||
NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT, STR_NULL), SetPadding(0, 5, 4, 5),
|
||||
NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 12), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
@@ -759,12 +760,12 @@ struct AIConfigWindow : public Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_AIC_GAMELIST:
|
||||
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
size->height = 1 * this->line_height;
|
||||
this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
size->height = this->line_height;
|
||||
break;
|
||||
|
||||
case WID_AIC_LIST:
|
||||
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
size->height = 8 * this->line_height;
|
||||
break;
|
||||
|
||||
@@ -818,14 +819,14 @@ struct AIConfigWindow : public Window {
|
||||
text = STR_JUST_RAW_STRING;
|
||||
}
|
||||
|
||||
DrawString(r.left + 10, r.right - 10, r.top + WD_MATRIX_TOP, text,
|
||||
DrawString(r.left + 10, r.right - 10, Center(r.top, this->line_height), text,
|
||||
(this->selected_slot == OWNER_DEITY) ? TC_WHITE : (IsEditable(OWNER_DEITY) ? TC_ORANGE : TC_SILVER));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_AIC_LIST: {
|
||||
int y = r.top;
|
||||
int y = Center(r.top, this->line_height);
|
||||
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < MAX_COMPANIES; i++) {
|
||||
StringID text;
|
||||
|
||||
@@ -837,7 +838,7 @@ struct AIConfigWindow : public Window {
|
||||
} else {
|
||||
text = STR_AI_CONFIG_RANDOM_AI;
|
||||
}
|
||||
DrawString(r.left + 10, r.right - 10, y + WD_MATRIX_TOP, text,
|
||||
DrawString(r.left + 10, r.right - 10, y, text,
|
||||
(this->selected_slot == i) ? TC_WHITE : (IsEditable((CompanyID)i) ? TC_ORANGE : TC_SILVER));
|
||||
y += this->line_height;
|
||||
}
|
||||
@@ -1090,7 +1091,7 @@ struct AIDebugWindow : public Window {
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
if (widget == WID_AID_LOG_PANEL) {
|
||||
resize->height = FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||
resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL);
|
||||
size->height = 14 * resize->height + this->top_offset + this->bottom_offset;
|
||||
}
|
||||
}
|
||||
@@ -1106,6 +1107,8 @@ struct AIDebugWindow : public Window {
|
||||
|
||||
bool dirty = false;
|
||||
|
||||
Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
|
||||
uint offset_y = Center(0, GetMinSizing(NWST_STEP, d.height + WD_MATRIX_TOP + WD_MATRIX_BOTTOM + 1), d.height);
|
||||
/* Paint the company icons */
|
||||
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
||||
NWidgetCore *button = this->GetWidget<NWidgetCore>(i + WID_AID_COMPANY_BUTTON_START);
|
||||
@@ -1126,7 +1129,7 @@ struct AIDebugWindow : public Window {
|
||||
if (!valid) continue;
|
||||
|
||||
byte offset = (i == ai_debug_company) ? 1 : 0;
|
||||
DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget<NWidgetBase>(WID_AID_COMPANY_BUTTON_START + i)->pos_y + 2 + offset);
|
||||
DrawCompanyIcon(i, Center(button->pos_x + offset, button->current_x, d.width), button->pos_y + offset + offset_y);
|
||||
}
|
||||
|
||||
/* Set button colour for Game Script. */
|
||||
@@ -1205,7 +1208,7 @@ struct AIDebugWindow : public Window {
|
||||
ScriptLog::LogData *log = this->GetLogPointer();
|
||||
if (log == NULL) return;
|
||||
|
||||
int y = this->top_offset;
|
||||
int y = Center(this->top_offset, this->resize.step_height);
|
||||
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < log->used; i++) {
|
||||
int pos = (i + log->pos + 1 - log->used + log->count) % log->count;
|
||||
if (log->lines[pos] == NULL) break;
|
||||
|
||||
+62
-37
@@ -28,6 +28,8 @@
|
||||
#include "hotkeys.h"
|
||||
#include "vehicle_func.h"
|
||||
#include "gui.h"
|
||||
#include "command_func.h"
|
||||
#include "build_confirmation_func.h"
|
||||
|
||||
#include "widgets/airport_widget.h"
|
||||
|
||||
@@ -79,6 +81,7 @@ struct BuildAirToolbarWindow : Window {
|
||||
|
||||
~BuildAirToolbarWindow()
|
||||
{
|
||||
if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
|
||||
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
|
||||
}
|
||||
|
||||
@@ -113,13 +116,13 @@ struct BuildAirToolbarWindow : Window {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
virtual void OnPlaceObject(Point pt, TileIndex tile)
|
||||
{
|
||||
switch (this->last_user_action) {
|
||||
case WID_AT_AIRPORT:
|
||||
PlaceAirport(tile);
|
||||
case WID_AT_AIRPORT: {
|
||||
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_STATION);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_AT_DEMOLISH:
|
||||
PlaceProc_DemolishArea(tile);
|
||||
@@ -127,6 +130,7 @@ struct BuildAirToolbarWindow : Window {
|
||||
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
MoveAllWindowsOffScreen();
|
||||
}
|
||||
|
||||
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
|
||||
@@ -136,17 +140,29 @@ struct BuildAirToolbarWindow : Window {
|
||||
|
||||
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
|
||||
{
|
||||
if (pt.x != -1 && select_proc == DDSP_DEMOLISH_AREA) {
|
||||
GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
|
||||
if (pt.x == -1) return;
|
||||
MoveAllHiddenWindowsBackToScreen();
|
||||
switch (select_proc) {
|
||||
case DDSP_BUILD_STATION:
|
||||
assert(start_tile == end_tile);
|
||||
PlaceAirport(end_tile);
|
||||
break;
|
||||
case DDSP_DEMOLISH_AREA:
|
||||
GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
|
||||
break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnPlaceObjectAbort()
|
||||
{
|
||||
MoveAllHiddenWindowsBackToScreen();
|
||||
this->RaiseButtons();
|
||||
|
||||
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_AIR);
|
||||
DeleteWindowById(WC_SELECT_STATION, 0);
|
||||
if (!ConfirmationWindowShown()) {
|
||||
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_AIR);
|
||||
DeleteWindowById(WC_SELECT_STATION, 0);
|
||||
}
|
||||
ResetObjectToPlace();
|
||||
}
|
||||
|
||||
static HotkeyList hotkeys;
|
||||
@@ -204,7 +220,7 @@ Window *ShowBuildAirToolbar()
|
||||
{
|
||||
if (!Company::IsValidID(_local_company)) return NULL;
|
||||
|
||||
DeleteWindowByClass(WC_BUILD_TOOLBAR);
|
||||
DeleteToolbarLinkedWindows();
|
||||
return AllocateWindowDescFront<BuildAirToolbarWindow>(&_air_toolbar_desc, TRANSPORT_AIR);
|
||||
}
|
||||
|
||||
@@ -305,6 +321,7 @@ public:
|
||||
d.width += padding.width;
|
||||
d.height += padding.height;
|
||||
*size = maxdim(*size, d);
|
||||
size->height = GetMinSizing(NWST_STEP, size->height);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -316,7 +333,7 @@ public:
|
||||
size->width = max(size->width, GetStringBoundingBox(as->name).width);
|
||||
}
|
||||
|
||||
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
size->height = 5 * this->line_height;
|
||||
break;
|
||||
}
|
||||
@@ -368,7 +385,9 @@ public:
|
||||
if (!as->IsAvailable()) {
|
||||
GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->line_height - 2, PC_BLACK, FILLRECT_CHECKER);
|
||||
}
|
||||
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, as->name, ((int)i == _selected_airport_index) ? TC_WHITE : TC_BLACK);
|
||||
|
||||
DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, Center(y, this->line_height), as->name, ((int)i == _selected_airport_index) ? TC_WHITE : TC_BLACK);
|
||||
|
||||
y += this->line_height;
|
||||
}
|
||||
break;
|
||||
@@ -554,35 +573,41 @@ static const NWidgetPart _nested_build_airport_widgets[] = {
|
||||
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),
|
||||
NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_AIRPORT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 0), SetPIP(2, 0, 2),
|
||||
NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_AIRPORT_CLASS_LABEL, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_AP_CLASS_DROPDOWN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_STATION_BUILD_AIRPORT_TOOLTIP),
|
||||
NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_AIRPORT_SPRITE), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_AP_AIRPORT_LIST), SetFill(1, 0), SetMatrixDataTip(1, 5, STR_STATION_BUILD_AIRPORT_TOOLTIP), SetScrollbar(WID_AP_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_AP_SCROLLBAR),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
/* Airport dropdown selector and picture. */
|
||||
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 0), SetPIP(2, 0, 2),
|
||||
NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetSizingType(NWST_STEP), SetDataTip(STR_STATION_BUILD_AIRPORT_CLASS_LABEL, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_AP_CLASS_DROPDOWN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_STATION_BUILD_AIRPORT_TOOLTIP),
|
||||
NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_AIRPORT_SPRITE), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_DECREASE), SetMinimalSize(12, 0), SetDataTip(AWV_DECREASE, STR_NULL),
|
||||
NWidget(WWT_LABEL, COLOUR_GREY, WID_AP_LAYOUT_NUM), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NULL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_INCREASE), SetMinimalSize(12, 0), SetDataTip(AWV_INCREASE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_EXTRA_TEXT), SetFill(1, 0), SetMinimalSize(150, 0),
|
||||
EndContainer(),
|
||||
/* Bottom panel. */
|
||||
NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_AP_BOTTOMPANEL), SetPIP(2, 2, 2),
|
||||
NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(14, 0), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AP_BTN_DONTHILIGHT), SetMinimalSize(60, 12), SetFill(1, 0),
|
||||
SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AP_BTN_DOHILIGHT), SetMinimalSize(60, 12), SetFill(1, 0),
|
||||
SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP),
|
||||
/* Airport parameters and info. */
|
||||
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 0), SetPIP(2, 0, 2),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_AP_AIRPORT_LIST), SetFill(1, 0), SetMatrixDataTip(1, 5, STR_STATION_BUILD_AIRPORT_TOOLTIP), SetScrollbar(WID_AP_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_AP_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(14, 0), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_DECREASE), SetSizingType(NWST_STEP), SetMinimalSize(12, 0), SetDataTip(AWV_DECREASE, STR_NULL),
|
||||
NWidget(WWT_LABEL, COLOUR_GREY, WID_AP_LAYOUT_NUM), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NULL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_INCREASE), SetSizingType(NWST_STEP), SetMinimalSize(12, 0), SetDataTip(AWV_INCREASE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_EXTRA_TEXT), SetFill(1, 0), SetMinimalSize(150, 0),
|
||||
EndContainer(),
|
||||
/* Bottom panel. */
|
||||
NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_AP_BOTTOMPANEL), SetPIP(2, 2, 2),
|
||||
NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(14, 0), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AP_BTN_DONTHILIGHT), SetMinimalSize(60, 12), SetFill(1, 0),
|
||||
SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AP_BTN_DOHILIGHT), SetMinimalSize(60, 12), SetFill(1, 0),
|
||||
SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(14, 0), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10), SetResize(0, 1), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10), SetResize(0, 1), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
|
||||
+29
-34
@@ -22,6 +22,7 @@
|
||||
#include "window_gui.h"
|
||||
#include "engine_gui.h"
|
||||
#include "settings_func.h"
|
||||
#include "settings_gui.h"
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "rail_gui.h"
|
||||
#include "widgets/dropdown_func.h"
|
||||
@@ -242,7 +243,7 @@ public:
|
||||
switch (widget) {
|
||||
case WID_RV_SORT_ASCENDING_DESCENDING: {
|
||||
Dimension d = GetStringBoundingBox(this->GetWidget<NWidgetCore>(widget)->widget_data);
|
||||
d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better.
|
||||
d.width += padding.width + Window::SortButtonWidth();
|
||||
d.height += padding.height;
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
@@ -251,7 +252,7 @@ public:
|
||||
case WID_RV_LEFT_MATRIX:
|
||||
case WID_RV_RIGHT_MATRIX:
|
||||
resize->height = GetEngineListHeight((VehicleType)this->window_number);
|
||||
size->height = (this->window_number <= VEH_ROAD ? 8 : 4) * resize->height;
|
||||
size->height = (widget == WID_RV_RIGHT_MATRIX ? 3 : 4) * resize->height;
|
||||
break;
|
||||
|
||||
case WID_RV_LEFT_DETAILS:
|
||||
@@ -298,6 +299,7 @@ public:
|
||||
d = maxdim(d, GetStringBoundingBox(rti->strings.replace_text));
|
||||
}
|
||||
d.width += padding.width;
|
||||
d.width += SETTING_BUTTON_HEIGHT;
|
||||
d.height += padding.height;
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
@@ -309,6 +311,7 @@ public:
|
||||
d = maxdim(d, GetStringBoundingBox(_start_replace_dropdown[i]));
|
||||
}
|
||||
d.width += padding.width;
|
||||
d.width += SETTING_BUTTON_HEIGHT;
|
||||
d.height += padding.height;
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
@@ -376,7 +379,7 @@ public:
|
||||
str = STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED;
|
||||
}
|
||||
|
||||
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_BLACK, SA_HOR_CENTER);
|
||||
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, Center(r.top + WD_FRAMERECT_TOP, r.bottom - r.top - WD_FRAMERECT_TOP), str, TC_BLACK, SA_HOR_CENTER);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -598,33 +601,27 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_LEFT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_LEFT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_LEFT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_LEFT_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 1),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_RV_SHOW_HIDDEN_ENGINES), SetDataTip(STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN, STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_RV_SHOW_HIDDEN_ENGINES), SetDataTip(STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN, STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_RIGHT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_RIGHT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_RIGHT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_RIGHT_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_WAGONREMOVE_TOGGLE), SetMinimalSize(138, 12), SetDataTip(STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP), SetFill(1, 0), SetResize(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_LEFT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_LEFT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_LEFT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_LEFT_SCROLLBAR),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_RIGHT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_RIGHT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_RIGHT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_RIGHT_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_TRAIN_WAGONREMOVE_TOGGLE), SetMinimalSize(138, 12), SetDataTip(STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP), SetFill(1, 0), SetResize(1, 0),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
@@ -660,28 +657,26 @@ static const NWidgetPart _nested_replace_vehicle_widgets[] = {
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_LEFT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_LEFT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_LEFT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_LEFT_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(228, 92), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_RV_SHOW_HIDDEN_ENGINES), SetDataTip(STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN, STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_RV_SHOW_HIDDEN_ENGINES), SetDataTip(STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN, STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_RIGHT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_RIGHT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_RIGHT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_RIGHT_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(228, 92), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_LEFT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_LEFT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_LEFT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_LEFT_SCROLLBAR),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_RIGHT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_RIGHT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_RIGHT_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_RIGHT_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(228, 92), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(228, 92), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_PUSHBUTTON_DROPDOWN, COLOUR_GREY, WID_RV_START_REPLACE), SetMinimalSize(139, 12), SetDataTip(STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_INFO_TAB), SetMinimalSize(167, 12), SetDataTip(0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB), SetResize(1, 0), EndContainer(),
|
||||
|
||||
@@ -0,0 +1,386 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file 16bpp_anim.cpp Implementation of the optimized 32 bpp blitter with animation support. */
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "../video/video_driver.hpp"
|
||||
#include "../zoom_func.h"
|
||||
#include "16bpp_anim.hpp"
|
||||
|
||||
#include "../table/sprites.h"
|
||||
|
||||
/** Instantiation of the 16bpp with animation blitter factory. */
|
||||
static FBlitter_16bppAnim iFBlitter_16bppAnim;
|
||||
|
||||
template <BlitterMode mode>
|
||||
void Blitter_16bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom)
|
||||
{
|
||||
const Pixel *src, *src_line;
|
||||
Colour16 *dst, *dst_line;
|
||||
Anim *anim, *anim_line;
|
||||
|
||||
/* Find where to start reading in the source sprite */
|
||||
src_line = (const Pixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
|
||||
dst_line = (Colour16 *)bp->dst + bp->top * bp->pitch + bp->left;
|
||||
anim_line = this->anim_buf + ((Colour16 *)bp->dst - (Colour16 *)_screen.dst_ptr) + bp->top * this->anim_buf_width + bp->left;
|
||||
|
||||
for (int y = 0; y < bp->height; y++) {
|
||||
dst = dst_line;
|
||||
dst_line += bp->pitch;
|
||||
|
||||
src = src_line;
|
||||
src_line += bp->sprite_width * ScaleByZoom(1, zoom);
|
||||
|
||||
anim = anim_line;
|
||||
anim_line += this->anim_buf_width;
|
||||
|
||||
for (int x = 0; x < bp->width; x++) {
|
||||
switch (mode) {
|
||||
case BM_COLOUR_REMAP:
|
||||
/* In case the m-channel is zero, do not remap this pixel in any way */
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
if (src->m == 0) {
|
||||
if (src->a != 0) *dst = ComposeColourPA(src->c, src->a, *dst);
|
||||
} else {
|
||||
uint8 r = bp->remap[src->m];
|
||||
if (r != 0) {
|
||||
*dst = ComposeColourPA(AdjustBrightness(LookupColourInPalette(r), src->v), src->a, *dst);
|
||||
if (src->a == 15 && r >= PALETTE_ANIM_START) {
|
||||
anim->m = r - PALETTE_ANIM_START + 1;
|
||||
anim->v = src->v >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
|
||||
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
|
||||
* we produce a result the newgrf maker didn't expect ;) */
|
||||
|
||||
/* Make the current colour a bit more black, so it looks like this image is transparent */
|
||||
if (src->a != 0) *dst = MakeTransparent(*dst, 192);
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (src->a == 15 && src->m >= PALETTE_ANIM_START) {
|
||||
*dst = AdjustBrightness(LookupColourInPalette(src->m), src->v);
|
||||
anim->m = src->m - PALETTE_ANIM_START + 1;
|
||||
anim->v = src->v >> 1;
|
||||
} else {
|
||||
if (src->a != 0) {
|
||||
if (src->m >= PALETTE_ANIM_START) {
|
||||
*dst = ComposeColourPANoCheck(AdjustBrightness(LookupColourInPalette(src->m), src->v), src->a, *dst);
|
||||
} else {
|
||||
*dst = ComposeColourPA(src->c, src->a, *dst);
|
||||
}
|
||||
}
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
dst++;
|
||||
src += ScaleByZoom(1, zoom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
|
||||
{
|
||||
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 Draw() */
|
||||
Blitter_16bppOptimized::Draw(bp, mode, zoom);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
default: NOT_REACHED();
|
||||
case BM_NORMAL: Draw<BM_NORMAL> (bp, zoom); return;
|
||||
case BM_COLOUR_REMAP: Draw<BM_COLOUR_REMAP>(bp, zoom); return;
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT> (bp, zoom); return;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::DrawColourMappingRect(void *dst, int width, int height, PaletteID pal)
|
||||
{
|
||||
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 DrawColourMappingRect() */
|
||||
Blitter_16bppOptimized::DrawColourMappingRect(dst, width, height, pal);
|
||||
return;
|
||||
}
|
||||
|
||||
Colour16 *udst = (Colour16 *)dst;
|
||||
Anim *anim;
|
||||
|
||||
anim = this->anim_buf + ((Colour16 *)dst - (Colour16 *)_screen.dst_ptr);
|
||||
|
||||
if (pal == PALETTE_TO_TRANSPARENT) {
|
||||
do {
|
||||
for (int i = 0; i != width; i++) {
|
||||
*udst = MakeTransparent(*udst, 154);
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
udst++;
|
||||
anim++;
|
||||
}
|
||||
udst = udst - width + _screen.pitch;
|
||||
anim = anim - width + this->anim_buf_width;
|
||||
} while (--height);
|
||||
return;
|
||||
}
|
||||
if (pal == PALETTE_NEWSPAPER) {
|
||||
do {
|
||||
for (int i = 0; i != width; i++) {
|
||||
*udst = MakeGrey(*udst);
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
udst++;
|
||||
anim++;
|
||||
}
|
||||
udst = udst - width + _screen.pitch;
|
||||
anim = anim - width + this->anim_buf_width;
|
||||
} while (--height);
|
||||
return;
|
||||
}
|
||||
|
||||
DEBUG(misc, 0, "16bpp blitter doesn't know how to draw this colour table ('%d')", pal);
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::SetPixel(void *video, int x, int y, uint8 colour)
|
||||
{
|
||||
*((Colour16 *)video + x + y * _screen.pitch) = LookupColourInPalette(colour);
|
||||
|
||||
/* Set the colour in the anim-buffer too, if we are rendering to the screen */
|
||||
if (_screen_disable_anim) return;
|
||||
Anim *anim = this->anim_buf + ((Colour16 *)video - (Colour16 *)_screen.dst_ptr) + x + y * this->anim_buf_width;
|
||||
if (colour >= PALETTE_ANIM_START) {
|
||||
anim->m = colour - PALETTE_ANIM_START + 1;
|
||||
anim->v = DEFAULT_BRIGHTNESS >> 1;
|
||||
} else {
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::DrawRect(void *video, int width, int height, uint8 colour)
|
||||
{
|
||||
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() */
|
||||
Blitter_16bppOptimized::DrawRect(video, width, height, colour);
|
||||
return;
|
||||
}
|
||||
|
||||
Colour16 colour16 = LookupColourInPalette(colour);
|
||||
Anim *anim_line = this->anim_buf + ((Colour16 *)video - (Colour16 *)_screen.dst_ptr);
|
||||
|
||||
do {
|
||||
Colour16 *dst = (Colour16 *)video;
|
||||
Anim *anim = anim_line;
|
||||
|
||||
for (int i = width; i > 0; i--) {
|
||||
*dst = colour16;
|
||||
/* Set the colour in the anim-buffer too */
|
||||
if (colour >= PALETTE_ANIM_START) {
|
||||
anim->m = colour - PALETTE_ANIM_START + 1;
|
||||
anim->v = DEFAULT_BRIGHTNESS >> 1;
|
||||
} else {
|
||||
anim->m = 0;
|
||||
anim->v = 0;
|
||||
}
|
||||
dst++;
|
||||
anim++;
|
||||
}
|
||||
video = (Colour16 *)video + _screen.pitch;
|
||||
anim_line += this->anim_buf_width;
|
||||
} while (--height);
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::CopyFromBuffer(void *video, const void *src, int width, int height)
|
||||
{
|
||||
assert(!_screen_disable_anim);
|
||||
assert(video >= _screen.dst_ptr && video <= (Colour16 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
|
||||
Colour16 *dst = (Colour16 *)video;
|
||||
const uint8 *usrc = (const uint8 *)src;
|
||||
Anim *anim_line = this->anim_buf + ((Colour16 *)video - (Colour16 *)_screen.dst_ptr);
|
||||
|
||||
for (; height > 0; height--) {
|
||||
/* We need to keep those for palette animation. */
|
||||
Colour16 *dst_pal = dst;
|
||||
Anim *anim_pal = anim_line;
|
||||
|
||||
memcpy(dst, usrc, width * sizeof(Colour16));
|
||||
usrc += width * sizeof(Colour16);
|
||||
dst += _screen.pitch;
|
||||
/* Copy back the anim-buffer */
|
||||
memcpy(anim_line, usrc, width * sizeof(Anim));
|
||||
usrc += width * sizeof(Anim);
|
||||
anim_line += this->anim_buf_width;
|
||||
|
||||
/* Okay, it is *very* likely that the image we stored is using
|
||||
* the wrong palette animated colours. There are two things we
|
||||
* can do to fix this. The first is simply reviewing the whole
|
||||
* screen after we copied the buffer, i.e. run PaletteAnimate,
|
||||
* however that forces a full screen redraw which is expensive
|
||||
* for just the cursor. This just copies the implementation of
|
||||
* palette animation, much cheaper though slightly nastier. */
|
||||
for (int i = 0; i < width; i++) {
|
||||
uint8 colour = anim_pal->m;
|
||||
if (colour) {
|
||||
/* Update this pixel */
|
||||
*dst_pal = AdjustBrightness(LookupColourInPalette(colour + PALETTE_ANIM_START - 1), anim_pal->v << 1);
|
||||
}
|
||||
dst_pal++;
|
||||
anim_pal++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::CopyToBuffer(const void *video, void *dst, int width, int height)
|
||||
{
|
||||
assert(!_screen_disable_anim);
|
||||
assert(video >= _screen.dst_ptr && video <= (Colour16 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
|
||||
uint8 *udst = (uint8 *)dst;
|
||||
const Colour16 *src = (const Colour16 *)video;
|
||||
const Anim *anim_line = this->anim_buf + ((const Colour16 *)video - (Colour16 *)_screen.dst_ptr);
|
||||
|
||||
for (; height > 0; height--) {
|
||||
memcpy(udst, src, width * sizeof(Colour16));
|
||||
src += _screen.pitch;
|
||||
udst += width * sizeof(Colour16);
|
||||
/* Copy the anim-buffer */
|
||||
memcpy(udst, anim_line, width * sizeof(Anim));
|
||||
udst += width * sizeof(Anim);
|
||||
anim_line += this->anim_buf_width;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::ScrollBuffer(void *video, int &left_ref, int &top_ref, int &width_ref, int &height_ref, int scroll_x, int scroll_y)
|
||||
{
|
||||
assert(!_screen_disable_anim);
|
||||
assert(video >= _screen.dst_ptr && video <= (Colour16 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
|
||||
const Anim *src;
|
||||
Anim *dst;
|
||||
int left = left_ref, top = top_ref, width = width_ref, height = height_ref;
|
||||
|
||||
/* We need to scroll the anim-buffer too */
|
||||
if (scroll_y > 0) {
|
||||
/* Calculate pointers */
|
||||
dst = this->anim_buf + left + (top + height - 1) * this->anim_buf_width;
|
||||
src = dst - scroll_y * this->anim_buf_width;
|
||||
|
||||
/* Decrease height and increase top */
|
||||
top += scroll_y;
|
||||
height -= scroll_y;
|
||||
assert(height > 0);
|
||||
|
||||
/* Adjust left & width */
|
||||
if (scroll_x >= 0) {
|
||||
dst += scroll_x;
|
||||
left += scroll_x;
|
||||
width -= scroll_x;
|
||||
} else {
|
||||
src -= scroll_x;
|
||||
width += scroll_x;
|
||||
}
|
||||
|
||||
for (int h = height; h > 0; h--) {
|
||||
memcpy(dst, src, width * sizeof(Anim));
|
||||
src -= this->anim_buf_width;
|
||||
dst -= this->anim_buf_width;
|
||||
}
|
||||
} else {
|
||||
/* Calculate pointers */
|
||||
dst = this->anim_buf + left + top * this->anim_buf_width;
|
||||
src = dst - scroll_y * this->anim_buf_width;
|
||||
|
||||
/* Decrease height. (scroll_y is <=0). */
|
||||
height += scroll_y;
|
||||
assert(height > 0);
|
||||
|
||||
/* Adjust left & width */
|
||||
if (scroll_x >= 0) {
|
||||
dst += scroll_x;
|
||||
left += scroll_x;
|
||||
width -= scroll_x;
|
||||
} else {
|
||||
src -= scroll_x;
|
||||
width += scroll_x;
|
||||
}
|
||||
|
||||
/* the y-displacement may be 0 therefore we have to use memmove,
|
||||
* because source and destination may overlap */
|
||||
for (int h = height; h > 0; h--) {
|
||||
memmove(dst, src, width * sizeof(Anim));
|
||||
src += _screen.pitch;
|
||||
dst += _screen.pitch;
|
||||
}
|
||||
}
|
||||
|
||||
Blitter_16bppOptimized::ScrollBuffer(video, left_ref, top_ref, width_ref, height_ref, scroll_x, scroll_y);
|
||||
}
|
||||
|
||||
int Blitter_16bppAnim::BufferSize(int width, int height)
|
||||
{
|
||||
return width * height * (sizeof(Anim) + sizeof(Colour16));
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::PaletteAnimate(const Palette &palette)
|
||||
{
|
||||
assert(!_screen_disable_anim);
|
||||
|
||||
/* If first_dirty is 0, it is for 8bpp indication to send the new
|
||||
* palette. However, only the animation colours might possibly change.
|
||||
* Especially when going between toyland and non-toyland. */
|
||||
assert(palette.first_dirty == PALETTE_ANIM_START || palette.first_dirty == 0);
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
this->palette[i] = To16(palette.palette[i]);
|
||||
}
|
||||
|
||||
const Anim *anim = this->anim_buf;
|
||||
Colour16 *dst = (Colour16 *)_screen.dst_ptr;
|
||||
|
||||
/* Let's walk the anim buffer and try to find the pixels */
|
||||
for (int y = this->anim_buf_height; y != 0 ; y--) {
|
||||
for (int x = this->anim_buf_width; x != 0 ; x--) {
|
||||
uint8 colour = anim->m;
|
||||
if (colour) {
|
||||
/* Update this pixel */
|
||||
*dst = AdjustBrightness(LookupColourInPalette(colour + PALETTE_ANIM_START - 1), anim->v << 1);
|
||||
}
|
||||
dst++;
|
||||
anim++;
|
||||
}
|
||||
dst += _screen.pitch - this->anim_buf_width;
|
||||
}
|
||||
|
||||
/* Make sure the backend redraws the whole screen */
|
||||
VideoDriver::GetInstance()->MakeDirty(0, 0, _screen.width, _screen.height);
|
||||
}
|
||||
|
||||
Blitter::PaletteAnimation Blitter_16bppAnim::UsePaletteAnimation()
|
||||
{
|
||||
return Blitter::PALETTE_ANIMATION_BLITTER;
|
||||
}
|
||||
|
||||
void Blitter_16bppAnim::PostResize()
|
||||
{
|
||||
if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) {
|
||||
/* The size of the screen changed; we can assume we can wipe all data from our buffer */
|
||||
free(this->anim_buf);
|
||||
this->anim_buf = CallocT<Anim>(_screen.width * _screen.height);
|
||||
this->anim_buf_width = _screen.width;
|
||||
this->anim_buf_height = _screen.height;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file 16bpp_anim.hpp A 16 bpp blitter with animation support. */
|
||||
|
||||
#ifndef BLITTER_16BPP_ANIM_HPP
|
||||
#define BLITTER_16BPP_ANIM_HPP
|
||||
|
||||
#include "16bpp_simple.hpp"
|
||||
|
||||
class Blitter_16bppOptimized: public Blitter_16bppSimple {
|
||||
// TODO: implement that
|
||||
};
|
||||
|
||||
/** The optimised 16 bpp blitter with palette animation. */
|
||||
class Blitter_16bppAnim : public Blitter_16bppOptimized {
|
||||
protected:
|
||||
// PALETTE_ANIM_SIZE is less than 32, so we'll use 5 bits for color index, and 3 bits for brightness, losing 1 bit compared to struct Pixel
|
||||
struct Anim {
|
||||
unsigned m : 5 __attribute__((packed)); ///< Color index channel, packed 5 bits, 0 = no animation, 1 = PALETTE_ANIM_START
|
||||
unsigned v : 3 __attribute__((packed)); ///< Brightness-channel, packed 3 bits
|
||||
};
|
||||
|
||||
Anim *anim_buf; ///< In this buffer we keep track of the 8bpp indexes so we can do palette animation
|
||||
int anim_buf_width; ///< The width of the animation buffer.
|
||||
int anim_buf_height; ///< The height of the animation buffer.
|
||||
Colour16 palette[256]; ///< The current palette.
|
||||
|
||||
public:
|
||||
Blitter_16bppAnim() :
|
||||
anim_buf(NULL),
|
||||
anim_buf_width(0),
|
||||
anim_buf_height(0)
|
||||
{}
|
||||
|
||||
/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
|
||||
/* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal);
|
||||
/* virtual */ void SetPixel(void *video, int x, int y, uint8 colour);
|
||||
/* virtual */ void DrawRect(void *video, int width, int height, uint8 colour);
|
||||
/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
|
||||
/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
|
||||
/* virtual */ void ScrollBuffer(void *video, int &left_ref, int &top_ref, int &width_ref, int &height_ref, int scroll_x, int scroll_y);
|
||||
/* virtual */ int BufferSize(int width, int height);
|
||||
/* virtual */ void PaletteAnimate(const Palette &palette);
|
||||
/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
|
||||
/* virtual */ int GetBytesPerPixel() { return 3; }
|
||||
|
||||
/* virtual */ const char *GetName() { return "16bpp-anim"; }
|
||||
/* virtual */ void PostResize();
|
||||
|
||||
/**
|
||||
* Look up the colour in the current palette.
|
||||
*/
|
||||
inline Colour16 LookupColourInPalette(uint8 index)
|
||||
{
|
||||
return this->palette[index];
|
||||
}
|
||||
|
||||
template <BlitterMode mode> void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom);
|
||||
};
|
||||
|
||||
/** Factory for the 16bpp blitter with animation. */
|
||||
class FBlitter_16bppAnim : public BlitterFactory {
|
||||
public:
|
||||
FBlitter_16bppAnim() : BlitterFactory("16bpp-anim-broken", "16bpp Animation Blitter, currently broken (palette animation)") {}
|
||||
/* virtual */ Blitter *CreateInstance() { return new Blitter_16bppAnim(); }
|
||||
};
|
||||
|
||||
#endif /* BLITTER_16BPP_ANIM_HPP */
|
||||
@@ -0,0 +1,147 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file 16bpp_base.cpp Implementation of base for 32 bpp blitters. */
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "16bpp_base.hpp"
|
||||
|
||||
void *Blitter_16bppBase::MoveTo(void *video, int x, int y)
|
||||
{
|
||||
return (uint16 *)video + x + y * _screen.pitch;
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::SetPixel(void *video, int x, int y, uint8 colour)
|
||||
{
|
||||
*((Colour16 *)video + x + y * _screen.pitch) = LookupColourInPalette(colour);
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::DrawRect(void *video, int width, int height, uint8 colour)
|
||||
{
|
||||
Colour16 target = LookupColourInPalette(colour);
|
||||
|
||||
do {
|
||||
Colour16 *dst = (Colour16 *)video;
|
||||
for (int i = width; i > 0; i--) {
|
||||
*dst = target;
|
||||
dst++;
|
||||
}
|
||||
video = (uint16 *)video + _screen.pitch;
|
||||
} while (--height);
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::CopyFromBuffer(void *video, const void *src, int width, int height)
|
||||
{
|
||||
uint16 *dst = (uint16 *)video;
|
||||
const uint16 *usrc = (const uint16 *)src;
|
||||
|
||||
for (; height > 0; height--) {
|
||||
memcpy(dst, usrc, width * sizeof(uint16));
|
||||
usrc += width;
|
||||
dst += _screen.pitch;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::CopyToBuffer(const void *video, void *dst, int width, int height)
|
||||
{
|
||||
uint16 *udst = (uint16 *)dst;
|
||||
const uint16 *src = (const uint16 *)video;
|
||||
|
||||
for (; height > 0; height--) {
|
||||
memcpy(udst, src, width * sizeof(uint16));
|
||||
src += _screen.pitch;
|
||||
udst += width;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
|
||||
{
|
||||
uint16 *udst = (uint16 *)dst;
|
||||
const uint16 *src = (const uint16 *)video;
|
||||
|
||||
for (; height > 0; height--) {
|
||||
memcpy(udst, src, width * sizeof(uint16));
|
||||
src += _screen.pitch;
|
||||
udst += dst_pitch;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
|
||||
{
|
||||
const Colour16 *src;
|
||||
Colour16 *dst;
|
||||
|
||||
if (scroll_y > 0) {
|
||||
/* Calculate pointers */
|
||||
dst = (Colour16 *)video + left + (top + height - 1) * _screen.pitch;
|
||||
src = dst - scroll_y * _screen.pitch;
|
||||
|
||||
/* Decrease height and increase top */
|
||||
top += scroll_y;
|
||||
height -= scroll_y;
|
||||
assert(height > 0);
|
||||
|
||||
/* Adjust left & width */
|
||||
if (scroll_x >= 0) {
|
||||
dst += scroll_x;
|
||||
left += scroll_x;
|
||||
width -= scroll_x;
|
||||
} else {
|
||||
src -= scroll_x;
|
||||
width += scroll_x;
|
||||
}
|
||||
|
||||
for (int h = height; h > 0; h--) {
|
||||
memcpy(dst, src, width * sizeof(Colour16));
|
||||
src -= _screen.pitch;
|
||||
dst -= _screen.pitch;
|
||||
}
|
||||
} else {
|
||||
/* Calculate pointers */
|
||||
dst = (Colour16 *)video + left + top * _screen.pitch;
|
||||
src = dst - scroll_y * _screen.pitch;
|
||||
|
||||
/* Decrease height. (scroll_y is <=0). */
|
||||
height += scroll_y;
|
||||
assert(height > 0);
|
||||
|
||||
/* Adjust left & width */
|
||||
if (scroll_x >= 0) {
|
||||
dst += scroll_x;
|
||||
left += scroll_x;
|
||||
width -= scroll_x;
|
||||
} else {
|
||||
src -= scroll_x;
|
||||
width += scroll_x;
|
||||
}
|
||||
|
||||
/* the y-displacement may be 0 therefore we have to use memmove,
|
||||
* because source and destination may overlap */
|
||||
for (int h = height; h > 0; h--) {
|
||||
memmove(dst, src, width * sizeof(Colour16));
|
||||
src += _screen.pitch;
|
||||
dst += _screen.pitch;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int Blitter_16bppBase::BufferSize(int width, int height)
|
||||
{
|
||||
return width * height * sizeof(Colour16);
|
||||
}
|
||||
|
||||
void Blitter_16bppBase::PaletteAnimate(const Palette &palette)
|
||||
{
|
||||
/* By default, 16bpp doesn't have palette animation */
|
||||
}
|
||||
|
||||
Blitter::PaletteAnimation Blitter_16bppBase::UsePaletteAnimation()
|
||||
{
|
||||
return Blitter::PALETTE_ANIMATION_NONE;
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file 16bpp_base.hpp Base for all 16 bits blitters. */
|
||||
|
||||
#ifndef BLITTER_16BPP_BASE_HPP
|
||||
#define BLITTER_16BPP_BASE_HPP
|
||||
|
||||
#include "base.hpp"
|
||||
#include "../core/bitmath_func.hpp"
|
||||
#include "../core/math_func.hpp"
|
||||
#include "../gfx_func.h"
|
||||
|
||||
/** Base for all 16bpp blitters. */
|
||||
class Blitter_16bppBase : public Blitter {
|
||||
public:
|
||||
|
||||
// TODO: GCC-specific attributes
|
||||
struct Colour16 {
|
||||
unsigned b : 5 __attribute__((packed)); ///< Blue-channel, packed 5 bits
|
||||
unsigned g : 6 __attribute__((packed)); ///< Green-channel, packed 6 bits
|
||||
unsigned r : 5 __attribute__((packed)); ///< Red-channel, packed 5 bits
|
||||
Colour16(uint8 r = 0, uint8 g = 0, uint8 b = 0):
|
||||
b(b), g(g), r(r)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
struct Pixel {
|
||||
Colour16 c;
|
||||
unsigned a : 4 __attribute__((packed)); ///< Alpha-channel, packed 4 bits
|
||||
unsigned v : 4 __attribute__((packed)); ///< Brightness-channel, packed 4 bits
|
||||
unsigned m : 8 __attribute__((packed)); ///< Remap-channel, cannot pack it, because it's palette lookup index, so it must be in range 0-255
|
||||
};
|
||||
|
||||
/* virtual */ uint8 GetScreenDepth() { return 16; }
|
||||
/* virtual */ void *MoveTo(void *video, int x, int y);
|
||||
/* virtual */ void SetPixel(void *video, int x, int y, uint8 colour);
|
||||
/* virtual */ void DrawRect(void *video, int width, int height, uint8 colour);
|
||||
/* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
|
||||
/* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
|
||||
/* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
|
||||
/* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
|
||||
/* virtual */ int BufferSize(int width, int height);
|
||||
/* virtual */ void PaletteAnimate(const Palette &palette);
|
||||
/* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
|
||||
/* virtual */ int GetBytesPerPixel() { return 2; }
|
||||
|
||||
|
||||
/**
|
||||
* Convert from rgb values to screen native 16bpp colour
|
||||
*/
|
||||
static inline Colour16 To16(uint8 r, uint8 g, uint8 b)
|
||||
{
|
||||
return Colour16(r >> 3, g >> 2, b >> 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert from 32bpp colour to screen native 16bpp colour
|
||||
*/
|
||||
static inline Colour16 To16(Colour c)
|
||||
{
|
||||
return To16(c.r, c.g, c.b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up the colour in the current palette.
|
||||
*/
|
||||
static inline Colour LookupColourInPalette32(uint index)
|
||||
{
|
||||
return _cur_palette.palette[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up the colour in the current palette.
|
||||
*/
|
||||
static inline Colour16 LookupColourInPalette(uint index)
|
||||
{
|
||||
return To16(LookupColourInPalette32(index));
|
||||
}
|
||||
|
||||
/**
|
||||
* Compose a colour based on RGBA values and the current pixel value.
|
||||
* @param r range is from 0 to 31.
|
||||
* @param g range is from 0 to 63.
|
||||
* @param b range is from 0 to 31.
|
||||
* @param a range is from 0 to 15.
|
||||
*/
|
||||
static inline Colour16 ComposeColourRGBANoCheck(uint8 r, uint8 g, uint8 b, uint8 a, Colour16 current)
|
||||
{
|
||||
/* The 16 is wrong, it should be 15, but 16 is much faster... */
|
||||
return Colour16 ( ((int)(r - current.r) * a) / 16 + current.r,
|
||||
((int)(g - current.g) * a) / 16 + current.g,
|
||||
((int)(b - current.b) * a) / 16 + current.b );
|
||||
}
|
||||
|
||||
/**
|
||||
* Compose a colour based on RGBA values and the current pixel value.
|
||||
* Handles fully transparent and solid pixels in a special (faster) way.
|
||||
* @param r range is from 0 to 31.
|
||||
* @param g range is from 0 to 63.
|
||||
* @param b range is from 0 to 31.
|
||||
* @param a range is from 0 to 15.
|
||||
*/
|
||||
static inline Colour16 ComposeColourRGBA(uint8 r, uint8 g, uint8 b, uint8 a, Colour16 current)
|
||||
{
|
||||
if (a == 0) return current;
|
||||
if (a >= 15) return Colour16(r, g, b);
|
||||
|
||||
return ComposeColourRGBANoCheck(r, g, b, a, current);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compose a colour based on Pixel value, alpha value, and the current pixel value.
|
||||
* @param a range is from 0 to 16.
|
||||
*/
|
||||
static inline Colour16 ComposeColourPANoCheck(Colour16 colour, uint8 a, Colour16 current)
|
||||
{
|
||||
return ComposeColourRGBANoCheck(colour.r, colour.g, colour.b, a, current);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compose a colour based on Pixel value, alpha value, and the current pixel value.
|
||||
* Handles fully transparent and solid pixels in a special (faster) way.
|
||||
* @param a range is from 0 to 15.
|
||||
*/
|
||||
static inline Colour16 ComposeColourPA(Colour16 colour, uint8 a, Colour16 current)
|
||||
{
|
||||
if (a == 0) return current;
|
||||
if (a >= 15) return colour;
|
||||
|
||||
return ComposeColourPANoCheck(colour, a, current);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a pixel looks like it is transparent.
|
||||
* @param colour the colour already on the screen.
|
||||
* @param nom the amount of transparency, nominator, makes colour lighter.
|
||||
* @param denom denominator, makes colour darker.
|
||||
* @return the new colour for the screen.
|
||||
*/
|
||||
static inline Colour16 MakeTransparent(Colour16 colour, uint nom, uint denom = 256)
|
||||
{
|
||||
uint r = colour.r;
|
||||
uint g = colour.g;
|
||||
uint b = colour.b;
|
||||
|
||||
return Colour16( r * nom / denom,
|
||||
g * nom / denom,
|
||||
b * nom / denom );
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a colour grey - based.
|
||||
* @param colour the colour to make grey.
|
||||
* @return the new colour, now grey.
|
||||
*/
|
||||
static inline Colour16 MakeGrey(Colour16 colour)
|
||||
{
|
||||
uint8 r = colour.r;
|
||||
uint8 g = colour.g;
|
||||
uint8 b = colour.b;
|
||||
|
||||
/* To avoid doubles and stuff, multiple it with a total of 65536 (16bits), then
|
||||
* divide by it to normalize the value to a byte again. See heightmap.cpp for
|
||||
* information about the formula. */
|
||||
uint grey = (((r << 3) * 19595) + ((g << 2) * 38470) + ((b << 3) * 7471)) / 65536;
|
||||
|
||||
return To16(grey, grey, grey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a colour dark grey, for specialized 32bpp remapping.
|
||||
* @param r red component
|
||||
* @param g green component
|
||||
* @param b blue component
|
||||
* @return the brightness value of the new colour, now dark grey.
|
||||
*/
|
||||
static inline uint8 MakeDark(Colour16 colour)
|
||||
{
|
||||
uint8 r = colour.r;
|
||||
uint8 g = colour.g;
|
||||
uint8 b = colour.b;
|
||||
|
||||
/* Magic-numbers are ~66% of those used in MakeGrey() */
|
||||
return (((r << 3) * 13063) + ((g << 2) * 25647) + ((b << 3) * 4981)) / 65536;
|
||||
}
|
||||
|
||||
enum { DEFAULT_BRIGHTNESS = 8 };
|
||||
|
||||
/**
|
||||
* @param brightness range is from 0 to 15.
|
||||
*/
|
||||
static inline Colour16 AdjustBrightness(Colour16 colour, uint8 brightness)
|
||||
{
|
||||
/* Shortcut for normal brightness */
|
||||
if (brightness == DEFAULT_BRIGHTNESS) return colour;
|
||||
|
||||
uint16 ob = 0;
|
||||
uint16 r = colour.r * brightness / DEFAULT_BRIGHTNESS;
|
||||
uint16 g = colour.g * brightness / DEFAULT_BRIGHTNESS;
|
||||
uint16 b = colour.b * brightness / DEFAULT_BRIGHTNESS;
|
||||
|
||||
/* Sum overbright */
|
||||
if (r > 31) ob += r - 31;
|
||||
if (g > 63) ob += g - 63;
|
||||
if (b > 31) ob += b - 31;
|
||||
|
||||
if (ob == 0) return Colour16(r, g, b);
|
||||
|
||||
/* Reduce overbright strength */
|
||||
ob /= 2;
|
||||
return Colour16( r >= 31 ? 31 : min(r + ob * (31 - r) / 32, 31),
|
||||
g >= 63 ? 63 : min(g + ob * (63 - g) / 64, 63),
|
||||
b >= 31 ? 31 : min(b + ob * (31 - b) / 32, 31) );
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* BLITTER_16BPP_BASE_HPP */
|
||||
@@ -0,0 +1,173 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file 32bpp_simple.cpp Implementation of the simple 32 bpp blitter. */
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "../zoom_func.h"
|
||||
#include "16bpp_simple.hpp"
|
||||
|
||||
#include "../table/sprites.h"
|
||||
|
||||
/** Instantiation of the simple 16bpp blitter factory. */
|
||||
static FBlitter_16bppSimple iFBlitter_16bppSimple;
|
||||
|
||||
template <BlitterMode mode>
|
||||
void Blitter_16bppSimple::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom)
|
||||
{
|
||||
const Pixel *src, *src_line;
|
||||
Colour16 *dst, *dst_line;
|
||||
|
||||
/* Find where to start reading in the source sprite */
|
||||
src_line = (const Pixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
|
||||
dst_line = (Colour16 *)bp->dst + bp->top * bp->pitch + bp->left;
|
||||
|
||||
for (int y = 0; y < bp->height; y++) {
|
||||
dst = dst_line;
|
||||
dst_line += bp->pitch;
|
||||
|
||||
src = src_line;
|
||||
src_line += bp->sprite_width * ScaleByZoom(1, zoom);
|
||||
|
||||
for (int x = 0; x < bp->width; x++) {
|
||||
switch (mode) {
|
||||
case BM_COLOUR_REMAP:
|
||||
/* In case the m-channel is zero, do not remap this pixel in any way */
|
||||
if (src->m == 0) {
|
||||
if (src->a != 0) *dst = ComposeColourPA(src->c, src->a, *dst);
|
||||
} else {
|
||||
if (bp->remap[src->m] != 0) *dst = ComposeColourPA(AdjustBrightness(LookupColourInPalette(bp->remap[src->m]), src->v), src->a, *dst);
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_CRASH_REMAP:
|
||||
if (src->m == 0) {
|
||||
if (src->a != 0) {
|
||||
uint8 g = MakeDark(src->c);
|
||||
*dst = ComposeColourRGBA(g, g, g, src->a, *dst);
|
||||
}
|
||||
} else {
|
||||
if (bp->remap[src->m] != 0) *dst = ComposeColourPA(AdjustBrightness(LookupColourInPalette(bp->remap[src->m]), src->v), src->a, *dst);
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
|
||||
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
|
||||
* we produce a result the newgrf maker didn't expect ;) */
|
||||
|
||||
/* Make the current colour a bit more black, so it looks like this image is transparent */
|
||||
if (src->a != 0) *dst = MakeTransparent(*dst, 192);
|
||||
break;
|
||||
|
||||
case BM_BLACK_REMAP:
|
||||
if (src->a != 0) {
|
||||
*dst = Colour16(0, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (src->a != 0) *dst = ComposeColourPA(src->c, src->a, *dst);
|
||||
break;
|
||||
}
|
||||
dst++;
|
||||
src += ScaleByZoom(1, zoom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
|
||||
{
|
||||
switch (mode) {
|
||||
default: NOT_REACHED();
|
||||
case BM_NORMAL: Draw<BM_NORMAL> (bp, zoom); return;
|
||||
case BM_COLOUR_REMAP: Draw<BM_COLOUR_REMAP>(bp, zoom); return;
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT> (bp, zoom); return;
|
||||
case BM_CRASH_REMAP: Draw<BM_CRASH_REMAP> (bp, zoom); return;
|
||||
case BM_BLACK_REMAP: Draw<BM_BLACK_REMAP> (bp, zoom); return;
|
||||
}
|
||||
}
|
||||
|
||||
void Blitter_16bppSimple::DrawColourMappingRect(void *dst, int width, int height, PaletteID pal)
|
||||
{
|
||||
Colour16 *udst = (Colour16 *)dst;
|
||||
|
||||
if (pal == PALETTE_TO_TRANSPARENT) {
|
||||
do {
|
||||
for (int i = 0; i != width; i++) {
|
||||
*udst = MakeTransparent(*udst, 154);
|
||||
udst++;
|
||||
}
|
||||
udst = udst - width + _screen.pitch;
|
||||
} while (--height);
|
||||
return;
|
||||
}
|
||||
if (pal == PALETTE_NEWSPAPER) {
|
||||
do {
|
||||
for (int i = 0; i != width; i++) {
|
||||
*udst = MakeGrey(*udst);
|
||||
udst++;
|
||||
}
|
||||
udst = udst - width + _screen.pitch;
|
||||
} while (--height);
|
||||
return;
|
||||
}
|
||||
|
||||
DEBUG(misc, 0, "16bpp blitter doesn't know how to draw this colour table ('%d')", pal);
|
||||
}
|
||||
|
||||
Sprite *Blitter_16bppSimple::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator)
|
||||
{
|
||||
Pixel *dst;
|
||||
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite->height * (size_t)sprite->width * sizeof(Pixel));
|
||||
|
||||
dest_sprite->height = sprite->height;
|
||||
dest_sprite->width = sprite->width;
|
||||
dest_sprite->x_offs = sprite->x_offs;
|
||||
dest_sprite->y_offs = sprite->y_offs;
|
||||
|
||||
dst = (Pixel *)dest_sprite->data;
|
||||
SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite->data;
|
||||
|
||||
for (int i = 0; i < sprite->height * sprite->width; i++) {
|
||||
if (src->m == 0) {
|
||||
dst[i].c = To16(src->r, src->g, src->b);
|
||||
dst[i].a = src->a / 16;
|
||||
dst[i].m = 0;
|
||||
dst[i].v = 0;
|
||||
} else {
|
||||
/* Get brightest value */
|
||||
uint8 rgb_max = max(src->r, max(src->g, src->b));
|
||||
#if 0
|
||||
/* Pre-convert the mapping channel to a RGB value,
|
||||
use 32bpp AdjustBrightness() variant for better colors,
|
||||
because this function is not called each frame */
|
||||
if (rgb_max == 0) rgb_max = Blitter_32bppBase::DEFAULT_BRIGHTNESS;
|
||||
dst[i].c = To16(Blitter_32bppBase::AdjustBrightness(LookupColourInPalette32(src->m), rgb_max));
|
||||
dst[i].v = rgb_max / 16;
|
||||
#endif
|
||||
rgb_max /= 16;
|
||||
|
||||
/* Black pixel (8bpp or old 32bpp image), so use default value */
|
||||
if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS;
|
||||
|
||||
/* Pre-convert the mapping channel to a RGB value,
|
||||
use 32bpp AdjustBrightness() variant for better colors,
|
||||
because this function is not called each frame */
|
||||
dst[i].c = AdjustBrightness(LookupColourInPalette(src->m), rgb_max);
|
||||
dst[i].v = rgb_max;
|
||||
|
||||
dst[i].a = src->a / 16;
|
||||
dst[i].m = src->m;
|
||||
}
|
||||
src++;
|
||||
}
|
||||
|
||||
return dest_sprite;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file 16bpp_simple.hpp Simple 16 bpp blitter. */
|
||||
|
||||
#ifndef BLITTER_16BPP_SIMPLE_HPP
|
||||
#define BLITTER_16BPP_SIMPLE_HPP
|
||||
|
||||
#include "16bpp_base.hpp"
|
||||
#include "factory.hpp"
|
||||
|
||||
/** The most trivial 32 bpp blitter (without palette animation). */
|
||||
class Blitter_16bppSimple : public Blitter_16bppBase {
|
||||
public:
|
||||
/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
|
||||
/* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal);
|
||||
/* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator);
|
||||
template <BlitterMode mode> void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom);
|
||||
|
||||
/* virtual */ const char *GetName() { return "16bpp-simple"; }
|
||||
};
|
||||
|
||||
/** Factory for the simple 16 bpp blitter. */
|
||||
class FBlitter_16bppSimple : public BlitterFactory {
|
||||
public:
|
||||
FBlitter_16bppSimple() : BlitterFactory("16bpp-simple", "16bpp Simple Blitter (no palette animation)") {}
|
||||
/* virtual */ Blitter *CreateInstance() { return new Blitter_16bppSimple(); }
|
||||
};
|
||||
|
||||
#endif /* BLITTER_16BPP_SIMPLE_HPP */
|
||||
+6
-1
@@ -24,6 +24,7 @@
|
||||
#include "cmd_helper.h"
|
||||
#include "tunnelbridge_map.h"
|
||||
#include "road_gui.h"
|
||||
#include "tilehighlight_func.h"
|
||||
|
||||
#include "widgets/bridge_widget.h"
|
||||
|
||||
@@ -198,6 +199,7 @@ public:
|
||||
sprite_dim.height++; // Sprite is rendered one pixel down in the matrix field.
|
||||
text_dim.height++; // Allowing the bottom row pixels to be rendered on the edge of the matrix field.
|
||||
resize->height = max(sprite_dim.height, text_dim.height) + 2; // Max of both sizes + account for matrix edges.
|
||||
resize->height = GetMinSizing(NWST_STEP, resize->height);
|
||||
|
||||
this->bridgetext_offset = WD_MATRIX_LEFT + sprite_dim.width + 1; // Left edge of text, 1 pixel distance from the sprite.
|
||||
size->width = this->bridgetext_offset + text_dim.width + WD_MATRIX_RIGHT;
|
||||
@@ -233,7 +235,8 @@ public:
|
||||
SetDParam(1, b->speed);
|
||||
SetDParam(0, b->material);
|
||||
|
||||
DrawSprite(b->sprite, b->pal, r.left + WD_MATRIX_LEFT, y + this->resize.step_height - 1 - GetSpriteSize(b->sprite).height);
|
||||
uint y_sprite = Center(y, this->resize.step_height, GetSpriteSize(b->sprite).height);
|
||||
DrawSprite(b->sprite, b->pal, r.left + WD_MATRIX_LEFT, y_sprite);
|
||||
DrawStringMultiLine(r.left + this->bridgetext_offset, r.right, y + 2, y + this->resize.step_height,
|
||||
_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO);
|
||||
y += this->resize.step_height;
|
||||
@@ -430,6 +433,8 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||
new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl);
|
||||
} else {
|
||||
delete bl;
|
||||
SetSelectionTilesDirty();
|
||||
_thd.Reset();
|
||||
ShowErrorMessage(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, errmsg, WL_INFO, TileX(end) * TILE_SIZE, TileY(end) * TILE_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file build_confirmation_func.h Transparent confirmation dialog for building anything on the map. */
|
||||
|
||||
#ifndef BUILD_CONFIRMATION_FUNC_H
|
||||
#define BUILD_CONFIRMATION_FUNC_H
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "window_func.h"
|
||||
#include "widget_type.h"
|
||||
|
||||
|
||||
void ShowBuildConfirmationWindow();
|
||||
void HideBuildConfirmationWindow();
|
||||
bool ConfirmationWindowShown();
|
||||
bool BuildConfirmationWindowProcessViewportClick();
|
||||
bool ConfirmationWindowEstimatingCost();
|
||||
void ConfirmationWindowSetEstimatedCost(Money cost);
|
||||
|
||||
#endif /* BUILD_CONFIRMATION_FUNC_H */
|
||||
@@ -0,0 +1,304 @@
|
||||
/* $Id$ */
|
||||
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file build_confirmation_gui.cpp Transparent confirmation dialog for building anything on the map. */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "string_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "window_func.h"
|
||||
#include "widget_type.h"
|
||||
#include "window_gui.h"
|
||||
#include "gfx_func.h"
|
||||
#include "tilehighlight_func.h"
|
||||
#include "viewport_func.h"
|
||||
#include "zoom_func.h"
|
||||
#include "settings_type.h"
|
||||
#include "station_gui.h"
|
||||
#include "build_confirmation_func.h"
|
||||
#include "widgets/build_confirmation_widget.h"
|
||||
#include "widgets/misc_widget.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
static const NWidgetPart _nested_build_info_widgets[] = {
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_TT_BACKGROUND), SetMinimalSize(200, 32), EndContainer(),
|
||||
};
|
||||
|
||||
static WindowDesc _build_info_desc(
|
||||
WDP_MANUAL, NULL, 0, 0, // Coordinates and sizes are not used,
|
||||
WC_TOOLTIPS, WC_NONE,
|
||||
WDF_NO_FOCUS,
|
||||
_nested_build_info_widgets, lengthof(_nested_build_info_widgets)
|
||||
);
|
||||
|
||||
/** Window for displaying accepted goods for a station. */
|
||||
struct BuildInfoWindow : public Window
|
||||
{
|
||||
StationCoverageType sct;
|
||||
bool station;
|
||||
static Money cost;
|
||||
|
||||
static void show()
|
||||
{
|
||||
bool station = _settings_client.gui.station_show_coverage; // Station info is inaccurate when station coverage area option is disabled
|
||||
StationCoverageType sct = SCT_ALL;
|
||||
if (FindWindowByClass(WC_BUILD_STATION) != NULL) sct = SCT_ALL;
|
||||
else if (FindWindowByClass(WC_BUS_STATION) != NULL) sct = SCT_PASSENGERS_ONLY;
|
||||
else if (FindWindowByClass(WC_TRUCK_STATION) != NULL) sct = SCT_NON_PASSENGERS_ONLY;
|
||||
else station = false;
|
||||
new BuildInfoWindow(station, sct);
|
||||
}
|
||||
|
||||
BuildInfoWindow(bool station, StationCoverageType sct) : Window(&_build_info_desc)
|
||||
{
|
||||
this->station = station;
|
||||
this->sct = sct;
|
||||
this->InitNested();
|
||||
|
||||
CLRBITS(this->flags, WF_WHITE_BORDER);
|
||||
}
|
||||
|
||||
virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number)
|
||||
{
|
||||
Point pt;
|
||||
pt.y = GetMainViewTop();
|
||||
pt.x = _screen.width - sm_width - FindWindowById(WC_MAIN_TOOLBAR, 0)->width;
|
||||
return pt;
|
||||
}
|
||||
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
size->width = GetStringBoundingBox(STR_STATION_BUILD_COVERAGE_AREA_TITLE).width * 2.5;
|
||||
size->height = GetStringHeight(STR_STATION_BUILD_COVERAGE_AREA_TITLE, size->width) * (this->station ? 3 : 1);
|
||||
|
||||
/* Increase slightly to have some space around the box. */
|
||||
size->width += 2 + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
size->height += 2 + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
}
|
||||
|
||||
virtual void DrawWidget(const Rect &r, int widget) const
|
||||
{
|
||||
/* There is only one widget. */
|
||||
GfxFillRect(r.left, r.top, r.right, r.bottom, PC_BLACK);
|
||||
GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, PC_LIGHT_YELLOW);
|
||||
|
||||
int top = r.top + WD_FRAMERECT_TOP;
|
||||
Money cost = BuildInfoWindow::cost;
|
||||
StringID msg = STR_MESSAGE_ESTIMATED_COST;
|
||||
SetDParam(0, cost);
|
||||
if (cost < 0) {
|
||||
msg = STR_MESSAGE_ESTIMATED_INCOME;
|
||||
SetDParam(0, -cost);
|
||||
}
|
||||
top = DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, top, INT32_MAX, msg);
|
||||
|
||||
if (!this->station) return;
|
||||
|
||||
top = DrawStationCoverageAreaText(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, top, sct, _thd.outersize.x / TILE_SIZE / 2, false);
|
||||
if (top - r.top <= GetStringHeight(STR_STATION_BUILD_COVERAGE_AREA_TITLE, r.right - r.left) * 1.5) {
|
||||
DrawStationCoverageAreaText(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, top, sct, _thd.outersize.x / TILE_SIZE / 2, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Money BuildInfoWindow::cost = 0;
|
||||
|
||||
/** GUI for confirming building actions. */
|
||||
struct BuildConfirmationWindow : Window {
|
||||
|
||||
// TODO: show estimated price
|
||||
static bool shown; ///< Just to speed up window hiding, HideBuildConfirmationWindow() is called very often.
|
||||
static bool estimating_cost; ///< Calculate action cost instead of executing action.
|
||||
Point selstart; ///< The selection start on the viewport.
|
||||
Point selend; ///< The selection end on the viewport.
|
||||
|
||||
BuildConfirmationWindow(WindowDesc *desc) : Window(desc)
|
||||
{
|
||||
// Save tile selection points, they will be reset by subsequent code, and we must keep them
|
||||
selstart = _thd.selstart;
|
||||
selend = _thd.selend;
|
||||
|
||||
this->InitNested(0);
|
||||
|
||||
Point pt;
|
||||
const Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
|
||||
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_BC_OK);
|
||||
|
||||
pt.x = w->viewport->scrollpos_x + ScaleByZoom(_cursor.pos.x - nvp->current_x / 2, w->viewport->zoom);
|
||||
pt.y = w->viewport->scrollpos_y + ScaleByZoom(_cursor.pos.y - nvp->current_y / 4, w->viewport->zoom);
|
||||
|
||||
nvp->InitializeViewport(this, 0, w->viewport->zoom);
|
||||
nvp->disp_flags |= ND_SHADE_DIMMED;
|
||||
|
||||
this->viewport->scrollpos_x = pt.x;
|
||||
this->viewport->scrollpos_y = pt.y;
|
||||
this->viewport->dest_scrollpos_x = this->viewport->scrollpos_x;
|
||||
this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y;
|
||||
|
||||
BuildConfirmationWindow::shown = true;
|
||||
BuildConfirmationWindow::estimating_cost = true;
|
||||
ConfirmationWindowSetEstimatedCost(0); // Clear old value, just in case
|
||||
// This is a hack - we invoke the build command with estimating_cost flag, which is equal to _shift_pressed,
|
||||
// then we select last build tool, restore viewport selection, and hide all windows, which pop up when command is invoked,
|
||||
// and all that just to get cost estimate value.
|
||||
ConfirmPlacingObject();
|
||||
ToolbarSelectLastTool();
|
||||
_thd.selstart = selstart;
|
||||
_thd.selend = selend;
|
||||
BuildConfirmationWindow::estimating_cost = false;
|
||||
MoveAllWindowsOffScreen();
|
||||
}
|
||||
|
||||
~BuildConfirmationWindow()
|
||||
{
|
||||
BuildConfirmationWindow::shown = false;
|
||||
}
|
||||
|
||||
void OnClick(Point pt, int widget, int click_count)
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_BC_OK:
|
||||
if (pt.y <= (int)GetWidget<NWidgetViewport>(WID_BC_OK)->current_y / 2) {
|
||||
_thd.selstart = selstart;
|
||||
_thd.selend = selend;
|
||||
ConfirmPlacingObject();
|
||||
ToolbarSelectLastTool();
|
||||
} else {
|
||||
ResetObjectToPlace();
|
||||
}
|
||||
break;
|
||||
}
|
||||
HideBuildConfirmationWindow(); // this == NULL after this call
|
||||
}
|
||||
|
||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_BC_OK:
|
||||
size->width = GetMinSizing(NWST_BUTTON) * 2;
|
||||
size->height = GetMinSizing(NWST_BUTTON) * 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnPaint()
|
||||
{
|
||||
this->DrawWidgets();
|
||||
|
||||
DrawButtonFrame(0, 0, this->width - 1, this->height / 2 - 2, STR_BUTTON_OK);
|
||||
DrawButtonFrame(0, this->height / 2, this->width - 1, this->height / 2 - 1, STR_BUTTON_CANCEL);
|
||||
}
|
||||
|
||||
void DrawButtonFrame(int x, int y, int w, int h, int str)
|
||||
{
|
||||
DrawFrameRect(x, y, x + w, y + h, COLOUR_GREY, FR_BORDERONLY);
|
||||
Dimension d = GetStringBoundingBox(str);
|
||||
DrawFrameRect(x + w / 2 - d.width / 2 - 1,
|
||||
Center(y, h) - 2,
|
||||
x + w / 2 + d.width / 2 + 1,
|
||||
Center(y, h) + d.height,
|
||||
COLOUR_GREY, FR_NONE);
|
||||
DrawString(x, x + w, Center(y, h), str, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
}
|
||||
};
|
||||
|
||||
bool BuildConfirmationWindow::shown = false;
|
||||
bool BuildConfirmationWindow::estimating_cost = false;
|
||||
|
||||
static const NWidgetPart _nested_build_confirmation_widgets[] = {
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BC_PANEL),
|
||||
NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_BC_OK), SetSizingType(NWST_VIEWPORT), SetResize(1, 1), SetFill(1, 1), //SetPadding(2, 2, 2, 2),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
static WindowDesc _build_confirmation_desc(
|
||||
WDP_MANUAL, "build_confirmation", 0, 0,
|
||||
WC_BUILD_CONFIRMATION, WC_NONE,
|
||||
0,
|
||||
_nested_build_confirmation_widgets, lengthof(_nested_build_confirmation_widgets)
|
||||
);
|
||||
|
||||
/**
|
||||
* Show build confirmation window under the mouse cursor
|
||||
*/
|
||||
void ShowBuildConfirmationWindow()
|
||||
{
|
||||
if (ConfirmationWindowEstimatingCost()) return; // Special case, ignore recursive call
|
||||
|
||||
HideBuildConfirmationWindow();
|
||||
|
||||
if (!_settings_client.gui.build_confirmation || _shift_pressed) {
|
||||
ConfirmPlacingObject();
|
||||
return;
|
||||
}
|
||||
|
||||
BuildConfirmationWindow *w = new BuildConfirmationWindow(&_build_confirmation_desc);
|
||||
|
||||
int old_left = w->left;
|
||||
int old_top = w->top;
|
||||
w->left = _cursor.pos.x - w->width / 2;
|
||||
w->top = _cursor.pos.y - w->height / 4;
|
||||
w->viewport->left += w->left - old_left;
|
||||
w->viewport->top += w->top - old_top;
|
||||
w->SetDirty();
|
||||
SetDirtyBlocks(0, 0, _screen.width, _screen.height); // I don't know what does this do, but it looks important
|
||||
|
||||
BuildInfoWindow::show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy build confirmation window, this does not cancel current action
|
||||
*/
|
||||
void HideBuildConfirmationWindow()
|
||||
{
|
||||
if (ConfirmationWindowEstimatingCost()) return; // Special case, ignore recursive call
|
||||
|
||||
if (!BuildConfirmationWindow::shown) return;
|
||||
|
||||
DeleteWindowById(WC_BUILD_CONFIRMATION, 0);
|
||||
DeleteWindowById(WC_TOOLTIPS, 0);
|
||||
}
|
||||
|
||||
bool ConfirmationWindowShown()
|
||||
{
|
||||
return BuildConfirmationWindow::shown;
|
||||
}
|
||||
|
||||
bool BuildConfirmationWindowProcessViewportClick()
|
||||
{
|
||||
if (!BuildConfirmationWindow::shown) return false;
|
||||
|
||||
Window *w = FindWindowById(WC_BUILD_CONFIRMATION, 0);
|
||||
if (w != NULL && IsInsideBS(_cursor.pos.x, w->left, w->width) && IsInsideBS(_cursor.pos.y, w->top, w->height)) {
|
||||
Point pt;
|
||||
pt.x = _cursor.pos.x - w->left;
|
||||
pt.y = _cursor.pos.y - w->top;
|
||||
w->OnClick(pt, WID_BC_OK, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
HideBuildConfirmationWindow();
|
||||
|
||||
_thd.new_outersize = _thd.outersize; // Revert station catchment area highlight, which is getting set to zero inside drawing funcs
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ConfirmationWindowEstimatingCost()
|
||||
{
|
||||
return BuildConfirmationWindow::estimating_cost;
|
||||
}
|
||||
|
||||
void ConfirmationWindowSetEstimatedCost(Money cost)
|
||||
{
|
||||
BuildInfoWindow::cost = cost;
|
||||
}
|
||||
+21
-14
@@ -46,7 +46,8 @@
|
||||
*/
|
||||
uint GetEngineListHeight(VehicleType type)
|
||||
{
|
||||
return max<uint>(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height);
|
||||
uint size = max<uint>(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height);
|
||||
return GetMinSizing(NWST_STEP, size);
|
||||
}
|
||||
|
||||
static const NWidgetPart _nested_build_vehicle_widgets[] = {
|
||||
@@ -57,25 +58,30 @@ static const NWidgetPart _nested_build_vehicle_widgets[] = {
|
||||
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
|
||||
NWidget(WWT_STICKYBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetSizingType(NWST_STEP),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA), SetSizingType(NWST_STEP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BV_SHOW_HIDDEN_ENGINES), SetSizingType(NWST_STEP),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_CARGO_FILTER_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA), SetSizingType(NWST_STEP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
/* Vehicle list. */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BV_SHOW_HIDDEN_ENGINES),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_CARGO_FILTER_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_BV_LIST), SetResize(1, 1), SetFill(1, 0), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_BV_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BV_SCROLLBAR),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
/* Panel with details. */
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BV_PANEL), SetMinimalSize(240, 122), SetResize(1, 1), EndContainer(),
|
||||
EndContainer(),
|
||||
/* Vehicle list. */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_BV_LIST), SetResize(1, 1), SetFill(1, 0), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_BV_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BV_SCROLLBAR),
|
||||
EndContainer(),
|
||||
/* Panel with details. */
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BV_PANEL), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
|
||||
/* Build/rename buttons, resize button. */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BV_BUILD_SEL),
|
||||
@@ -1393,6 +1399,7 @@ struct BuildVehicleWindow : Window {
|
||||
Dimension d = GetStringBoundingBox(this->GetWidget<NWidgetCore>(widget)->widget_data);
|
||||
d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better.
|
||||
d.height += padding.height;
|
||||
d.height = GetMinSizing(NWST_STEP, d.height);
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
}
|
||||
|
||||
+11
-1
@@ -26,6 +26,9 @@
|
||||
#include "signal_func.h"
|
||||
#include "core/backup_type.hpp"
|
||||
#include "object_base.h"
|
||||
#include "string_func.h"
|
||||
#include "tilehighlight_func.h"
|
||||
#include "build_confirmation_func.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
@@ -551,11 +554,18 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
|
||||
* However, in case of incoming network commands,
|
||||
* map generation or the pause button we do want
|
||||
* to execute. */
|
||||
bool estimate_only = _shift_pressed && IsLocalCompany() &&
|
||||
bool estimate_only = (_shift_pressed || ConfirmationWindowEstimatingCost()) &&
|
||||
IsLocalCompany() &&
|
||||
!_generating_world &&
|
||||
!(cmd & CMD_NETWORK_COMMAND) &&
|
||||
(cmd & CMD_ID_MASK) != CMD_PAUSE;
|
||||
|
||||
if (ConfirmationWindowEstimatingCost() && !estimate_only) {
|
||||
// We cannot estimate cost, so abort the command - it will be repeated by confirmation dialog later
|
||||
ShowEstimatedCostOrIncome(0, 0, 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* We're only sending the command, so don't do
|
||||
* fancy things for 'success'. */
|
||||
bool only_sending = _networking && !(cmd & CMD_NETWORK_COMMAND);
|
||||
|
||||
+4
-1
@@ -904,7 +904,10 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
Game::NewEvent(new ScriptEventCompanyBankrupt(c_index));
|
||||
CompanyAdminRemove(c_index, (CompanyRemoveReason)reason);
|
||||
|
||||
if (StoryPage::GetNumItems() == 0 || Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
|
||||
if (StoryPage::GetNumItems() == 0 || Goal::GetNumItems() == 0) {
|
||||
InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
|
||||
InvalidateWindowData(WC_MAIN_TOOLBAR_RIGHT, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
+110
-95
@@ -35,6 +35,7 @@
|
||||
#include "road_func.h"
|
||||
#include "water.h"
|
||||
#include "station_func.h"
|
||||
#include "widget_type.h"
|
||||
#include "zoom_func.h"
|
||||
|
||||
#include "widgets/company_widget.h"
|
||||
@@ -529,7 +530,7 @@ public:
|
||||
|
||||
uint Height(uint width) const
|
||||
{
|
||||
return max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2);
|
||||
return GetMinSizing(NWST_STEP, max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2));
|
||||
}
|
||||
|
||||
bool Selectable() const
|
||||
@@ -930,102 +931,112 @@ static const NWidgetPart _nested_select_company_manager_face_widgets[] = {
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON), SetFill(1, 0), SetDataTip(STR_FACE_ADVANCED, STR_FACE_ADVANCED_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_MALEFEMALE), // Simple male/female face setting.
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON), SetFill(1, 0), SetDataTip(STR_FACE_ADVANCED, STR_FACE_ADVANCED_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_MALEFEMALE), // Simple male/female face setting.
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_PARTS), // Advanced face parts setting.
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE2), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE2), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_EUR), SetFill(1, 0), SetDataTip(STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_AFR), SetFill(1, 0), SetDataTip(STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_PARTS), // Advanced face parts setting.
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetDataTip(STR_EMPTY, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetDataTip(STR_EMPTY, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetDataTip(STR_EMPTY, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetDataTip(STR_EMPTY, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetDataTip(STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetDataTip(STR_EMPTY, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetDataTip(STR_EMPTY, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetDataTip(STR_EMPTY, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE2), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE2), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_EUR), SetFill(1, 0), SetDataTip(STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_AFR), SetFill(1, 0), SetDataTip(STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
@@ -1075,7 +1086,7 @@ class SelectCompanyManagerFaceWindow : public Window
|
||||
|
||||
/* Draw the value/bool in white (0xC). If the button clicked adds 1px to x and y text coordinates (IsWindowWidgetLowered()). */
|
||||
DrawString(nwi_widget->pos_x + nwi_widget->IsLowered(), nwi_widget->pos_x + nwi_widget->current_x - 1 - nwi_widget->IsLowered(),
|
||||
nwi_widget->pos_y + 1 + nwi_widget->IsLowered(), str, TC_WHITE, SA_HOR_CENTER);
|
||||
Center(nwi_widget->pos_y + nwi_widget->IsLowered(), nwi_widget->current_y), str, TC_WHITE, SA_HOR_CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1125,6 +1136,10 @@ public:
|
||||
Dimension yesno_dim = maxdim(GetStringBoundingBox(STR_FACE_YES), GetStringBoundingBox(STR_FACE_NO));
|
||||
yesno_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
yesno_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
|
||||
yesno_dim.width = GetMinSizing(NWST_STEP, yesno_dim.width);
|
||||
yesno_dim.height = GetMinSizing(NWST_STEP, yesno_dim.height);
|
||||
|
||||
/* Size of the number button + arrows. */
|
||||
Dimension number_dim = {0, 0};
|
||||
for (int val = 1; val <= 12; val++) {
|
||||
@@ -1268,12 +1283,12 @@ public:
|
||||
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
|
||||
case WID_SCMF_TIE_EARRING_TEXT: {
|
||||
StringID str = PART_TEXTS_IS_FEMALE[(widget - WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT) * 2 + this->is_female];
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_GOLD, SA_RIGHT);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), str, TC_GOLD, SA_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_SCMF_LIPS_MOUSTACHE_TEXT:
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, (this->is_moust_male) ? STR_FACE_MOUSTACHE : STR_FACE_LIPS, TC_GOLD, SA_RIGHT);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), (this->is_moust_male) ? STR_FACE_MOUSTACHE : STR_FACE_LIPS, TC_GOLD, SA_RIGHT);
|
||||
break;
|
||||
|
||||
case WID_SCMF_HAS_GLASSES_TEXT:
|
||||
@@ -1285,7 +1300,7 @@ public:
|
||||
case WID_SCMF_CHIN_TEXT:
|
||||
case WID_SCMF_JACKET_TEXT:
|
||||
case WID_SCMF_COLLAR_TEXT:
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, PART_TEXTS[widget - WID_SCMF_HAS_GLASSES_TEXT], TC_GOLD, SA_RIGHT);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), PART_TEXTS[widget - WID_SCMF_HAS_GLASSES_TEXT], TC_GOLD, SA_RIGHT);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
@@ -417,6 +417,20 @@ DEF_CONSOLE_CMD(ConListFiles)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Open the cheat window. */
|
||||
DEF_CONSOLE_CMD(ConOpenCheats)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Open the cheat window. Usage: 'open_cheats'");
|
||||
return true;
|
||||
}
|
||||
|
||||
extern void ShowCheatWindow();
|
||||
ShowCheatWindow();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Change the dir via console */
|
||||
DEF_CONSOLE_CMD(ConChangeDirectory)
|
||||
{
|
||||
@@ -1921,6 +1935,8 @@ void IConsoleStdLibRegister()
|
||||
IConsoleCmdRegister("save", ConSave);
|
||||
IConsoleCmdRegister("saveconfig", ConSaveConfig);
|
||||
IConsoleCmdRegister("ls", ConListFiles);
|
||||
IConsoleCmdRegister("open_cheats", ConOpenCheats);
|
||||
IConsoleCmdRegister("cheats", ConOpenCheats);
|
||||
IConsoleCmdRegister("cd", ConChangeDirectory);
|
||||
IConsoleCmdRegister("pwd", ConPrintWorkingDirectory);
|
||||
IConsoleCmdRegister("clear", ConClearBuffer);
|
||||
|
||||
+33
-2
@@ -22,6 +22,7 @@
|
||||
#include "console_func.h"
|
||||
#include "rev.h"
|
||||
#include "video/video_driver.hpp"
|
||||
#include "textbuf_gui.h"
|
||||
|
||||
#include "widgets/console_widget.h"
|
||||
|
||||
@@ -29,6 +30,10 @@
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include <SDL_screenkeyboard.h>
|
||||
#endif
|
||||
|
||||
static const uint ICON_HISTORY_SIZE = 20;
|
||||
static const uint ICON_LINE_SPACING = 2;
|
||||
static const uint ICON_RIGHT_BORDERWIDTH = 10;
|
||||
@@ -229,6 +234,16 @@ struct IConsoleWindow : Window
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnQueryTextFinished(char *str)
|
||||
{
|
||||
_focused_window = this;
|
||||
|
||||
if (str == NULL) return;
|
||||
|
||||
_iconsole_cmdline.Assign(str);
|
||||
this->OnKeyPress(0, WKC_RETURN);
|
||||
}
|
||||
|
||||
virtual void OnHundredthTick()
|
||||
{
|
||||
if (IConsoleLine::Truncate() &&
|
||||
@@ -430,9 +445,25 @@ void IConsoleSwitch()
|
||||
{
|
||||
switch (_iconsole_mode) {
|
||||
case ICONSOLE_CLOSED:
|
||||
new IConsoleWindow();
|
||||
#ifdef __ANDROID__
|
||||
{
|
||||
char buf[1024] = "";
|
||||
for (const IConsoleLine *print = IConsoleLine::Get(0); print != NULL; print = print->previous) {
|
||||
if (print->buffer && print->buffer[0]) {
|
||||
strecat(buf, print->buffer, lastof(buf));
|
||||
strecat(buf, "\n", lastof(buf));
|
||||
}
|
||||
}
|
||||
strecat(buf, "\n\n\n\n\n\n\n\n", lastof(buf)); // Move all text to top
|
||||
SDL_ANDROID_SetScreenKeyboardHintMesage(buf);
|
||||
char text[512] = "";
|
||||
SDL_ANDROID_GetScreenKeyboardTextInput(text, sizeof(text) - 1); /* Invoke Android built-in screen keyboard */
|
||||
IConsoleCmdExec(text);
|
||||
}
|
||||
#else
|
||||
new IConsoleWindow();
|
||||
#endif
|
||||
break;
|
||||
|
||||
case ICONSOLE_OPENED: case ICONSOLE_FULL:
|
||||
DeleteWindowById(WC_CONSOLE, 0);
|
||||
break;
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
#include "string_func.h"
|
||||
#include "fileio_func.h"
|
||||
#include "settings_type.h"
|
||||
#ifdef __ANDROID__
|
||||
#include <android/log.h>
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
|
||||
@@ -109,6 +112,9 @@ char *DumpDebugFacilityNames(char *buf, char *last)
|
||||
*/
|
||||
static void debug_print(const char *dbg, const char *buf)
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
__android_log_print(ANDROID_LOG_INFO, "OpenTTD", "[%s] %s", dbg, buf);
|
||||
#endif
|
||||
#if defined(ENABLE_NETWORK)
|
||||
if (_debug_socket != INVALID_SOCKET) {
|
||||
char buf2[1024 + 32];
|
||||
|
||||
+13
-10
@@ -62,8 +62,8 @@ static const NWidgetPart _nested_train_depot_widgets[] = {
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_SELL_CHAIN),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_D_SELL_CHAIN), SetDataTip(SPR_SELL_CHAIN_TRAIN, STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP), SetResize(0, 1), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_SELL_ALL), SetDataTip(0x0, STR_NULL),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_AUTOREPLACE), SetDataTip(0x0, STR_NULL),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_SELL_ALL), SetResize(0, 1), SetFill(0, 1), SetDataTip(0x0, STR_NULL),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_AUTOREPLACE), SetResize(0, 1), SetFill(0, 1), SetDataTip(0x0, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_D_V_SCROLL),
|
||||
EndContainer(),
|
||||
@@ -299,7 +299,7 @@ struct DepotWindow : Window {
|
||||
/* Length of consist in tiles with 1 fractional digit (rounded up) */
|
||||
SetDParam(0, CeilDiv(u->gcache.cached_total_length * 10, TILE_SIZE));
|
||||
SetDParam(1, 1);
|
||||
DrawString(rtl ? left + WD_FRAMERECT_LEFT : right - this->count_width, rtl ? left + this->count_width : right - WD_FRAMERECT_RIGHT, y + (this->resize.step_height - FONT_HEIGHT_SMALL) / 2, STR_TINY_BLACK_DECIMAL, TC_FROMSTRING, SA_RIGHT); // Draw the counter
|
||||
DrawString(rtl ? left + WD_FRAMERECT_LEFT : right - this->count_width, rtl ? left + this->count_width : right - WD_FRAMERECT_RIGHT, Center(y, this->resize.step_height, FONT_HEIGHT_SMALL), STR_TINY_BLACK_DECIMAL, TC_FROMSTRING, SA_RIGHT); // Draw the counter
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -309,26 +309,28 @@ struct DepotWindow : Window {
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
|
||||
uint diff_x, diff_y;
|
||||
uint diff_x, y_sprite, y_num;
|
||||
if (v->IsGroundVehicle()) {
|
||||
/* Arrange unitnumber and flag horizontally */
|
||||
diff_x = this->flag_width + WD_FRAMERECT_LEFT;
|
||||
diff_y = (this->resize.step_height - this->flag_height) / 2 - 2;
|
||||
y_sprite = Center(y, this->resize.step_height, this->flag_height);
|
||||
y_num = Center(y, this->resize.step_height);
|
||||
} else {
|
||||
/* Arrange unitnumber and flag vertically */
|
||||
diff_x = WD_FRAMERECT_LEFT;
|
||||
diff_y = FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||
y_num = Center(y, this->resize.step_height, FONT_HEIGHT_NORMAL + this->flag_height + 2);
|
||||
y_sprite = y_num + FONT_HEIGHT_NORMAL;
|
||||
}
|
||||
int text_left = rtl ? right - this->header_width - 1 : left + diff_x;
|
||||
int text_right = rtl ? right - diff_x : left + this->header_width - 1;
|
||||
|
||||
if (free_wagon) {
|
||||
DrawString(text_left, text_right, y + 2, STR_DEPOT_NO_ENGINE);
|
||||
DrawString(text_left, text_right, Center(y, this->resize.step_height), STR_DEPOT_NO_ENGINE);
|
||||
} else {
|
||||
DrawSprite((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, rtl ? right - this->flag_width : left + WD_FRAMERECT_LEFT, y + diff_y);
|
||||
DrawSprite((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, rtl ? right - this->flag_width : left + WD_FRAMERECT_LEFT, y_sprite);
|
||||
|
||||
SetDParam(0, v->unitnumber);
|
||||
DrawString(text_left, text_right, y + 2, (uint16)(v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? STR_BLACK_COMMA : STR_RED_COMMA);
|
||||
DrawString(text_left, text_right, y_num, (uint16)(v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? STR_BLACK_COMMA : STR_RED_COMMA);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,7 +347,7 @@ struct DepotWindow : Window {
|
||||
uint16 num = this->vscroll->GetPosition() * this->num_columns;
|
||||
int maxval = min(this->vehicle_list.Length(), num + (rows_in_display * this->num_columns));
|
||||
int y;
|
||||
for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows
|
||||
for (y = r.top; num < maxval; y += this->resize.step_height) { // Draw the rows
|
||||
for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) {
|
||||
/* Draw all vehicles in the current row */
|
||||
const Vehicle *v = this->vehicle_list[num];
|
||||
@@ -624,6 +626,7 @@ struct DepotWindow : Window {
|
||||
int base_width = this->count_width + this->header_width;
|
||||
|
||||
resize->height = max<uint>(GetVehicleImageCellSize(this->type, EIT_IN_DEPOT).height, min_height);
|
||||
resize->height = GetMinSizing(NWST_STEP, resize->height);
|
||||
if (this->type == VEH_TRAIN) {
|
||||
resize->width = 1;
|
||||
size->width = base_width + 2 * ScaleGUITrad(29); // about 2 parts
|
||||
|
||||
+78
-28
@@ -27,6 +27,7 @@
|
||||
#include "hotkeys.h"
|
||||
#include "gui.h"
|
||||
#include "zoom_func.h"
|
||||
#include "build_confirmation_func.h"
|
||||
|
||||
#include "widgets/dock_widget.h"
|
||||
|
||||
@@ -105,6 +106,7 @@ struct BuildDocksToolbarWindow : Window {
|
||||
|
||||
~BuildDocksToolbarWindow()
|
||||
{
|
||||
if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
|
||||
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
|
||||
}
|
||||
|
||||
@@ -146,7 +148,7 @@ struct BuildDocksToolbarWindow : Window {
|
||||
|
||||
case WID_DT_DEPOT: // Build depot button
|
||||
if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
|
||||
if (HandlePlacePushButton(this, WID_DT_DEPOT, SPR_CURSOR_SHIP_DEPOT, HT_RECT)) ShowBuildDocksDepotPicker(this);
|
||||
if (HandlePlacePushButton(this, WID_DT_DEPOT, SPR_CURSOR_SHIP_DEPOT, HT_RECT | HT_SCROLL_VIEWPORT)) ShowBuildDocksDepotPicker(this);
|
||||
break;
|
||||
|
||||
case WID_DT_STATION: // Build station button
|
||||
@@ -156,7 +158,7 @@ struct BuildDocksToolbarWindow : Window {
|
||||
|
||||
case WID_DT_BUOY: // Build buoy button
|
||||
if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
|
||||
HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT);
|
||||
HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT | HT_SCROLL_VIEWPORT);
|
||||
break;
|
||||
|
||||
case WID_DT_RIVER: // Build river button (in scenario editor)
|
||||
@@ -181,33 +183,21 @@ struct BuildDocksToolbarWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_DT_LOCK: // Build lock button
|
||||
DoCommandP(tile, 0, 0, CMD_BUILD_LOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_LOCKS), CcBuildDocks);
|
||||
/* Reuse DDSP_REMOVE_TRUCKSTOP. */
|
||||
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_REMOVE_TRUCKSTOP);
|
||||
break;
|
||||
|
||||
case WID_DT_DEMOLISH: // Demolish aka dynamite button
|
||||
PlaceProc_DemolishArea(tile);
|
||||
break;
|
||||
|
||||
case WID_DT_STATION: // Build station button
|
||||
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_STATION);
|
||||
break;
|
||||
|
||||
case WID_DT_DEPOT: // Build depot button
|
||||
DoCommandP(tile, _ship_depot_direction, 0, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_SHIP_DEPOT), CcBuildDocks);
|
||||
break;
|
||||
|
||||
case WID_DT_STATION: { // Build station button
|
||||
uint32 p2 = (uint32)INVALID_STATION << 16; // no station to join
|
||||
|
||||
/* tile is always the land tile, so need to evaluate _thd.pos */
|
||||
CommandContainer cmdcont = { tile, _ctrl_pressed, p2, CMD_BUILD_DOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_DOCK_HERE), CcBuildDocks, "" };
|
||||
|
||||
/* Determine the watery part of the dock. */
|
||||
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
|
||||
TileIndex tile_to = (dir != INVALID_DIAGDIR ? TileAddByDiagDir(tile, ReverseDiagDir(dir)) : tile);
|
||||
|
||||
ShowSelectStationIfNeeded(cmdcont, TileArea(tile, tile_to));
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_DT_BUOY: // Build buoy button
|
||||
DoCommandP(tile, 0, 0, CMD_BUILD_BUOY | CMD_MSG(STR_ERROR_CAN_T_POSITION_BUOY_HERE), CcBuildDocks);
|
||||
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
|
||||
break;
|
||||
|
||||
case WID_DT_RIVER: // Build river button (in scenario editor)
|
||||
@@ -215,16 +205,26 @@ struct BuildDocksToolbarWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_DT_BUILD_AQUEDUCT: // Build aqueduct button
|
||||
DoCommandP(tile, GetOtherAqueductEnd(tile), TRANSPORT_WATER << 15, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE), CcBuildBridge);
|
||||
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_BRIDGE);
|
||||
break;
|
||||
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
MoveAllWindowsOffScreen();
|
||||
}
|
||||
|
||||
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
|
||||
{
|
||||
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
|
||||
switch (last_clicked_widget) {
|
||||
case WID_DT_BUILD_AQUEDUCT:
|
||||
case WID_DT_LOCK:
|
||||
case WID_DT_STATION:
|
||||
this->OnPlacePresize(pt, TileVirtXY(pt.x, pt.y));
|
||||
break;
|
||||
default:
|
||||
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
|
||||
@@ -240,24 +240,73 @@ struct BuildDocksToolbarWindow : Window {
|
||||
case DDSP_CREATE_RIVER:
|
||||
DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcPlaySound_SPLAT_WATER);
|
||||
break;
|
||||
case DDSP_BUILD_STATION: {
|
||||
uint32 p2 = (uint32)INVALID_STATION << 16; // no station to join
|
||||
|
||||
/* Tile is always the land tile, so need to evaluate _thd.pos. */
|
||||
CommandContainer cmdcont = { start_tile, _ctrl_pressed, p2, CMD_BUILD_DOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_DOCK_HERE), CcBuildDocks, "" };
|
||||
|
||||
//SetObjectToPlace(SPR_CURSOR_DOCK, PAL_NONE, HT_SPECIAL, this->window_class, this->window_number);
|
||||
ShowSelectStationIfNeeded(cmdcont, TileArea(start_tile, end_tile));
|
||||
VpStartPreSizing();
|
||||
break;
|
||||
}
|
||||
|
||||
case DDSP_BUILD_BRIDGE:
|
||||
DoCommandP(start_tile, GetOtherAqueductEnd(start_tile), TRANSPORT_WATER << 15, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE), CcBuildBridge);
|
||||
VpStartPreSizing();
|
||||
break;
|
||||
|
||||
case DDSP_REMOVE_TRUCKSTOP: { // Reusing for locks.
|
||||
TileIndex middle_tile = start_tile;
|
||||
if (start_tile != end_tile) middle_tile = TileAddByDiagDir(start_tile, DiagdirBetweenTiles(start_tile, end_tile));
|
||||
DoCommandP(middle_tile, 0, 0, CMD_BUILD_LOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_LOCKS), CcBuildDocks);
|
||||
VpStartPreSizing();
|
||||
break;
|
||||
}
|
||||
|
||||
case DDSP_SINGLE_TILE:
|
||||
assert(start_tile == end_tile);
|
||||
switch (last_clicked_widget) {
|
||||
case WID_DT_BUOY:
|
||||
DoCommandP(end_tile, 0, 0, CMD_BUILD_BUOY | CMD_MSG(STR_ERROR_CAN_T_POSITION_BUOY_HERE), CcBuildDocks);
|
||||
break;
|
||||
case WID_DT_DEPOT: // Build depot button
|
||||
DoCommandP(end_tile, _ship_depot_direction, 0, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_SHIP_DEPOT), CcBuildDocks);
|
||||
break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
|
||||
default: break;
|
||||
}
|
||||
MoveAllHiddenWindowsBackToScreen();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnPlaceObjectAbort()
|
||||
{
|
||||
MoveAllHiddenWindowsBackToScreen();
|
||||
this->RaiseButtons();
|
||||
|
||||
if (ConfirmationWindowShown() && _ctrl_pressed) return;
|
||||
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_WATER);
|
||||
DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER);
|
||||
DeleteWindowById(WC_SELECT_STATION, 0);
|
||||
DeleteWindowByClass(WC_BUILD_BRIDGE);
|
||||
}
|
||||
|
||||
virtual void SelectLastTool()
|
||||
{
|
||||
// User misplaced something - activate last selected tool again
|
||||
if (this->last_clicked_widget == WIDGET_LIST_END)
|
||||
return;
|
||||
Point dummy = {0, 0};
|
||||
this->RaiseWidget(this->last_clicked_widget);
|
||||
this->OnClick(dummy, this->last_clicked_widget, 0);
|
||||
}
|
||||
|
||||
virtual void OnPlacePresize(Point pt, TileIndex tile_from)
|
||||
{
|
||||
if (!IsValidTile(tile_from)) return;
|
||||
TileIndex tile_to = tile_from;
|
||||
|
||||
if (this->last_clicked_widget == WID_DT_BUILD_AQUEDUCT) {
|
||||
@@ -347,7 +396,7 @@ Window *ShowBuildDocksToolbar()
|
||||
{
|
||||
if (!Company::IsValidID(_local_company)) return NULL;
|
||||
|
||||
DeleteWindowByClass(WC_BUILD_TOOLBAR);
|
||||
DeleteToolbarLinkedWindows();
|
||||
return AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_toolbar_desc, TRANSPORT_WATER);
|
||||
}
|
||||
|
||||
@@ -373,7 +422,7 @@ static const NWidgetPart _nested_build_docks_scen_toolbar_widgets[] = {
|
||||
|
||||
/** Window definition for the build docks in scenario editor window. */
|
||||
static WindowDesc _build_docks_scen_toolbar_desc(
|
||||
WDP_AUTO, "toolbar_water_scen", 0, 0,
|
||||
WDP_ALIGN_TOOLBAR, "toolbar_water_scen", 0, 0,
|
||||
WC_SCEN_BUILD_TOOLBAR, WC_NONE,
|
||||
WDF_CONSTRUCTION,
|
||||
_nested_build_docks_scen_toolbar_widgets, lengthof(_nested_build_docks_scen_toolbar_widgets)
|
||||
@@ -386,6 +435,7 @@ static WindowDesc _build_docks_scen_toolbar_desc(
|
||||
*/
|
||||
Window *ShowBuildDocksScenToolbar()
|
||||
{
|
||||
DeleteToolbarLinkedWindows();
|
||||
return AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_scen_toolbar_desc, TRANSPORT_WATER);
|
||||
}
|
||||
|
||||
@@ -556,10 +606,10 @@ static const NWidgetPart _nested_build_docks_depot_widgets[] = {
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 3),
|
||||
NWidget(NWID_HORIZONTAL_LTR),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(3, 0),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_X), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_X), SetSizingType(NWST_BUTTON), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(2, 0),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_Y), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_Y), SetSizingType(NWST_BUTTON), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(3, 0),
|
||||
EndContainer(),
|
||||
|
||||
+3
-1
@@ -1692,7 +1692,9 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
}
|
||||
}
|
||||
|
||||
amount_unloaded = v->cargo.Unload(amount_unloaded, &ge->cargo, payment);
|
||||
if (payment != NULL) {
|
||||
amount_unloaded = v->cargo.Unload(amount_unloaded, &ge->cargo, payment);
|
||||
}
|
||||
remaining = v->cargo.UnloadCount() > 0;
|
||||
if (amount_unloaded > 0) {
|
||||
dirty_vehicle = true;
|
||||
|
||||
@@ -292,7 +292,11 @@ static const char * const _subdirs[] = {
|
||||
"ai" PATHSEP "library" PATHSEP,
|
||||
"game" PATHSEP,
|
||||
"game" PATHSEP "library" PATHSEP,
|
||||
#ifdef __ANDROID__
|
||||
"screenshot" PATHSEP,
|
||||
#else
|
||||
"screenshot" PATHSEP,
|
||||
#endif
|
||||
};
|
||||
assert_compile(lengthof(_subdirs) == NUM_SUBDIRS);
|
||||
|
||||
@@ -1315,6 +1319,21 @@ void DeterminePaths(const char *exe)
|
||||
_searchpaths[SP_AUTODOWNLOAD_DIR] = NULL;
|
||||
}
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
#ifdef __ANDROID__
|
||||
// Copy savegames from "full" OpenTTD to "lite" save directory
|
||||
char curdir[PATH_MAX];
|
||||
if (getcwd(curdir, sizeof(curdir)) && strstr(curdir, "org.openttd.sdl.lowmem")) {
|
||||
// No, I won't implement file copying in C, shell script is just fine for this job
|
||||
DEBUG(misc, 1, "Copying savegames from ../../org.openttd.sdl/files/.openttd/save to %s", curdir);
|
||||
system("cd ../../org.openttd.sdl/files/.openttd/save && "
|
||||
"for F in *.sav ; do "
|
||||
"ls \"../../../../org.openttd.sdl.lowmem/files/.openttd/save/$F\" || "
|
||||
"cat \"$F\" > \"../../../../org.openttd.sdl.lowmem/files/.openttd/save/$F\" ; "
|
||||
"done");
|
||||
chdir(curdir);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+38
-4
@@ -35,11 +35,15 @@
|
||||
#include "table/strings.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
#ifdef __ANDROID__
|
||||
#include <SDL_android.h>
|
||||
#endif
|
||||
|
||||
LoadCheckData _load_check_data; ///< Data loaded from save during SL_LOAD_CHECK.
|
||||
|
||||
static bool _fios_path_changed;
|
||||
static bool _savegame_sort_dirty;
|
||||
static const char *NETWORK_SAVE_FILENAME = "network-save.sav";
|
||||
|
||||
|
||||
/**
|
||||
@@ -106,6 +110,9 @@ static const NWidgetPart _nested_load_dialog_widgets[] = {
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_NEWGRF_INFO), SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_NULL), SetFill(1, 0), SetResize(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_LOAD_BUTTON), SetDataTip(STR_SAVELOAD_LOAD_BUTTON, STR_SAVELOAD_LOAD_TOOLTIP), SetFill(1, 0), SetResize(1, 0),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_LOAD_NETWORK_BUTTON), SetDataTip(STR_SAVELOAD_LOAD_NETWORK_BUTTON, STR_SAVELOAD_LOAD_NETWORK_TOOLTIP), SetFill(1, 0), SetResize(1, 0),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -179,7 +186,7 @@ static const NWidgetPart _nested_save_dialog_widgets[] = {
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SL_DETAILS), SetResize(1, 1), SetFill(1, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetResize(1, 0), SetFill(1, 1),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SL_SAVE_NETWORK_BUTTON), SetDataTip(STR_SAVELOAD_SAVE_NETWORK_BUTTON, STR_SAVELOAD_SAVE_NETWORK_TOOLTIP), SetFill(1, 1), SetResize(1, 0),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -296,6 +303,7 @@ public:
|
||||
this->FinishInitNested(0);
|
||||
|
||||
this->LowerWidget(WID_SL_DRIVES_DIRECTORIES_LIST);
|
||||
if (mode == SLD_SAVE_GAME) this->SetWidgetLoweredState(WID_SL_SAVE_NETWORK_BUTTON, _settings_client.gui.save_to_network);
|
||||
|
||||
/* pause is only used in single-player, non-editor mode, non-menu mode. It
|
||||
* will be unpaused in the WE_DESTROY event handler. */
|
||||
@@ -375,7 +383,7 @@ public:
|
||||
if (item == this->selected) {
|
||||
GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE);
|
||||
}
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[GetDetailedFileType(item->type)]);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(y, this->resize.step_height), item->title, _fios_colours[GetDetailedFileType(item->type)]);
|
||||
y += this->resize.step_height;
|
||||
if (y >= this->vscroll->GetCapacity() * this->resize.step_height + r.top + WD_FRAMERECT_TOP) break;
|
||||
}
|
||||
@@ -486,8 +494,8 @@ public:
|
||||
break;
|
||||
|
||||
case WID_SL_DRIVES_DIRECTORIES_LIST:
|
||||
resize->height = FONT_HEIGHT_NORMAL;
|
||||
size->height = resize->height * 10 + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
|
||||
size->height = resize->height * 5 + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
break;
|
||||
case WID_SL_SORT_BYNAME:
|
||||
case WID_SL_SORT_BYDATE: {
|
||||
@@ -638,6 +646,32 @@ public:
|
||||
/* Note, this is also called via the OSK; and we need to lower the button. */
|
||||
this->HandleButtonClick(WID_SL_SAVE_GAME);
|
||||
break;
|
||||
|
||||
case WID_SL_SAVE_NETWORK_BUTTON:
|
||||
_settings_client.gui.save_to_network = !_settings_client.gui.save_to_network;
|
||||
this->SetWidgetLoweredState(WID_SL_SAVE_NETWORK_BUTTON, _settings_client.gui.save_to_network);
|
||||
this->SetDirty();
|
||||
break;
|
||||
|
||||
case WID_SL_LOAD_NETWORK_BUTTON: {
|
||||
char savePath[PATH_MAX];
|
||||
FiosMakeSavegameName(savePath, NETWORK_SAVE_FILENAME, lastof(savePath));
|
||||
#ifdef __ANDROID__
|
||||
if (!SDL_ANDROID_CloudLoad(savePath, NULL, "OpenTTD")) {
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
_load_check_data.Clear();
|
||||
SaveOrLoadResult res = SaveOrLoad(savePath, SL_LOAD_CHECK, SAVE_DIR, false);
|
||||
if (res == SL_OK && !_load_check_data.HasErrors()) {
|
||||
strecpy(_file_to_saveload.name, savePath, lastof(_file_to_saveload.name));
|
||||
strecpy(_file_to_saveload.title, "", lastof(_file_to_saveload.title));
|
||||
if (!_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs()) {
|
||||
_switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD_GAME;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -383,7 +383,7 @@ static void LoadFreeTypeFont(FontSize fs)
|
||||
return;
|
||||
|
||||
found_face:
|
||||
new FreeTypeFontCache(fs, face, settings->size);
|
||||
new FreeTypeFontCache(fs, face, RescaleFrom854x480(settings->size));
|
||||
}
|
||||
|
||||
|
||||
@@ -460,7 +460,7 @@ static void *AllocateFont(size_t size)
|
||||
static bool GetFontAAState(FontSize size)
|
||||
{
|
||||
/* AA is only supported for 32 bpp */
|
||||
if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false;
|
||||
if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32 && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 16) return false;
|
||||
|
||||
switch (size) {
|
||||
default: NOT_REACHED();
|
||||
|
||||
+14
-7
@@ -632,7 +632,8 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
if (split != NULL) *split = '\0';
|
||||
|
||||
/* First create a pattern to match the wanted language. */
|
||||
FcPattern *pat = FcNameParse((FcChar8*)lang);
|
||||
//FcPattern *pat = FcNameParse((FcChar8*)lang);
|
||||
FcPattern *pat = FcPatternCreate();
|
||||
/* We only want to know the filename. */
|
||||
FcObjectSet *os = FcObjectSetBuild(FC_FILE, FC_SPACING, FC_SLANT, FC_WEIGHT, NULL);
|
||||
/* Get the list of filenames matching the wanted language. */
|
||||
@@ -645,6 +646,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
if (fs != NULL) {
|
||||
int best_weight = -1;
|
||||
const char *best_font = NULL;
|
||||
int best_missing_glypths = 65536;
|
||||
|
||||
for (int i = 0; i < fs->nfont; i++) {
|
||||
FcPattern *font = fs->fonts[i];
|
||||
@@ -654,28 +656,32 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
if (res != FcResultMatch || file == NULL) {
|
||||
continue;
|
||||
}
|
||||
DEBUG(freetype, 1, "Got font %s", file);
|
||||
int missing = 0;
|
||||
|
||||
/* Get a font with the right spacing .*/
|
||||
int value = 0;
|
||||
FcPatternGetInteger(font, FC_SPACING, 0, &value);
|
||||
if (callback->Monospace() != (value == FC_MONO) && value != FC_DUAL) continue;
|
||||
if (callback->Monospace() != (value == FC_MONO) && value != FC_DUAL) missing += 1;
|
||||
|
||||
/* Do not use those that explicitly say they're slanted. */
|
||||
FcPatternGetInteger(font, FC_SLANT, 0, &value);
|
||||
if (value != 0) continue;
|
||||
if (value != 0) missing += 1;
|
||||
|
||||
/* We want the fatter font as they look better at small sizes. */
|
||||
FcPatternGetInteger(font, FC_WEIGHT, 0, &value);
|
||||
if (value <= best_weight) continue;
|
||||
if (value <= best_weight) missing += 1;
|
||||
|
||||
callback->SetFontNames(settings, (const char*)file);
|
||||
|
||||
bool missing = callback->FindMissingGlyphs(NULL);
|
||||
DEBUG(freetype, 1, "Font \"%s\" misses%s glyphs", file, missing ? "" : " no");
|
||||
missing = callback->FindMissingGlyphs(NULL);
|
||||
DEBUG(freetype, 1, "Font \"%s\" misses %d glyphs for lang %s", file, missing, lang);
|
||||
|
||||
if (!missing) {
|
||||
if (missing < best_missing_glypths) {
|
||||
best_weight = value;
|
||||
best_font = (const char *)file;
|
||||
best_missing_glypths = missing;
|
||||
if (missing == 0) break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -683,6 +689,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
ret = true;
|
||||
callback->SetFontNames(settings, best_font);
|
||||
InitFreeType(callback->Monospace());
|
||||
DEBUG(freetype, 1, "Selected font %s for lang %s", best_font, lang);
|
||||
}
|
||||
|
||||
/* Clean up the list of filenames. */
|
||||
|
||||
+29
-18
@@ -29,6 +29,7 @@
|
||||
#include "saveload/saveload.h"
|
||||
#include "progress.h"
|
||||
#include "error.h"
|
||||
#include "settings_gui.h"
|
||||
|
||||
#include "widgets/genworld_widget.h"
|
||||
|
||||
@@ -63,20 +64,20 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = {
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_BROWN),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
/* Landscape selection. */
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(10, 0, 10),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_TEMPERATE), SetDataTip(SPR_SELECT_TEMPERATE, STR_INTRO_TOOLTIP_TEMPERATE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_ARCTIC), SetDataTip(SPR_SELECT_SUB_ARCTIC, STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_TROPICAL), SetDataTip(SPR_SELECT_SUB_TROPICAL, STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_TOYLAND), SetDataTip(SPR_SELECT_TOYLAND, STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 11),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(10, 5, 10),
|
||||
/* Landscape selection. */
|
||||
NWidget(NWID_VERTICAL), SetPIP(10, 0, 10),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_TEMPERATE), SetDataTip(SPR_SELECT_TEMPERATE, STR_INTRO_TOOLTIP_TEMPERATE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_ARCTIC), SetDataTip(SPR_SELECT_SUB_ARCTIC, STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_TROPICAL), SetDataTip(SPR_SELECT_SUB_TROPICAL, STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_GL_TOYLAND), SetDataTip(SPR_SELECT_TOYLAND, STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0),
|
||||
/* Left column with labels. */
|
||||
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
|
||||
@@ -169,7 +170,7 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = {
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 9), SetFill(1, 1),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
@@ -458,6 +459,7 @@ struct GenerateLandscapeWindow : public Window {
|
||||
case WID_GL_MAPSIZE_Y_PULLDOWN:
|
||||
SetDParamMaxValue(0, MAX_MAP_SIZE);
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT));
|
||||
size->width = size->width + GetMinSizing(NWST_BUTTON);
|
||||
break;
|
||||
|
||||
case WID_GL_SNOW_LEVEL_TEXT:
|
||||
@@ -468,7 +470,8 @@ struct GenerateLandscapeWindow : public Window {
|
||||
case WID_GL_HEIGHTMAP_SIZE_TEXT:
|
||||
SetDParam(0, this->x);
|
||||
SetDParam(1, this->y);
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_HEIGHTMAP_SIZE));
|
||||
//*size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_HEIGHTMAP_SIZE));
|
||||
size->height = SETTING_BUTTON_HEIGHT;
|
||||
break;
|
||||
|
||||
case WID_GL_TOWN_PULLDOWN:
|
||||
@@ -492,18 +495,19 @@ struct GenerateLandscapeWindow : public Window {
|
||||
case WID_GL_VARIETY_PULLDOWN: strs = _variety; break;
|
||||
case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: strs = _rotation; break;
|
||||
case WID_GL_BORDERS_RANDOM:
|
||||
*size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOMIZE), GetStringBoundingBox(STR_MAPGEN_BORDER_MANUAL));
|
||||
//*size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOMIZE), GetStringBoundingBox(STR_MAPGEN_BORDER_MANUAL));
|
||||
break;
|
||||
|
||||
case WID_GL_WATER_NE:
|
||||
case WID_GL_WATER_NW:
|
||||
case WID_GL_WATER_SE:
|
||||
case WID_GL_WATER_SW:
|
||||
*size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOM), maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_WATER), GetStringBoundingBox(STR_MAPGEN_BORDER_FREEFORM)));
|
||||
//*size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOM), maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_WATER), GetStringBoundingBox(STR_MAPGEN_BORDER_FREEFORM)));
|
||||
break;
|
||||
|
||||
case WID_GL_HEIGHTMAP_NAME_TEXT:
|
||||
size->width = 0;
|
||||
size->height = SETTING_BUTTON_HEIGHT;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -947,7 +951,9 @@ struct CreateScenarioWindow : public Window
|
||||
}
|
||||
*size = maxdim(*size, GetStringBoundingBox(str));
|
||||
size->width += padding.width;
|
||||
size->width = GetMinSizing(NWST_BUTTON, size->width);
|
||||
size->height += padding.height;
|
||||
size->height = GetMinSizing(NWST_BUTTON, size->height);
|
||||
}
|
||||
|
||||
virtual void OnClick(Point pt, int widget, int click_count)
|
||||
@@ -1066,11 +1072,16 @@ static const NWidgetPart _nested_create_scenario_widgets[] = {
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
/* Landscape style selection. */
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(10, 3, 10),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_TEMPERATE), SetDataTip(SPR_SELECT_TEMPERATE, STR_INTRO_TOOLTIP_TEMPERATE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_ARCTIC), SetDataTip(SPR_SELECT_SUB_ARCTIC, STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_TROPICAL), SetDataTip(SPR_SELECT_SUB_TROPICAL, STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_TOYLAND), SetDataTip(SPR_SELECT_TOYLAND, STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(10, 8, 10),
|
||||
/* Green generation type buttons: 'Flat land' and 'Random land'. */
|
||||
NWidget(NWID_VERTICAL), SetPIP(10, 6, 10),
|
||||
|
||||
+151
-5
@@ -35,11 +35,15 @@ byte _support8bpp;
|
||||
CursorVars _cursor;
|
||||
bool _ctrl_pressed; ///< Is Ctrl pressed?
|
||||
bool _shift_pressed; ///< Is Shift pressed?
|
||||
bool _move_pressed;
|
||||
|
||||
byte _fast_forward;
|
||||
bool _left_button_down; ///< Is left mouse button pressed?
|
||||
bool _left_button_clicked; ///< Is left mouse button clicked?
|
||||
bool _right_button_down; ///< Is right mouse button pressed?
|
||||
bool _right_button_clicked; ///< Is right mouse button clicked?
|
||||
Point _right_button_down_pos; ///< Pos of right mouse button click, for drag and drop
|
||||
|
||||
DrawPixelInfo _screen;
|
||||
bool _screen_disable_anim = false; ///< Disable palette animation (important for 32bpp-anim blitter during giant screenshot)
|
||||
bool _exit_game;
|
||||
@@ -848,6 +852,50 @@ void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw a sprite, centered at x:y, not in a viewport
|
||||
* @param img Image number to draw
|
||||
* @param pal Palette to use.
|
||||
* @param x Left coordinate of image in pixels
|
||||
* @param y Top coordinate of image in pixels
|
||||
* @param sub If available, draw only specified part of the sprite
|
||||
* @param zoom Zoom level of sprite
|
||||
*/
|
||||
void DrawSpriteCentered(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
|
||||
{
|
||||
Dimension size = GetSpriteSize(img, NULL, zoom);
|
||||
DrawSprite(img, pal, x - size.width / 2, y - size.height / 2, sub, zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw a sprite, centered in rect, not in a viewport
|
||||
* @param img Image number to draw
|
||||
* @param pal Palette to use.
|
||||
* @param left Left coordinate of image bounding box in pixels
|
||||
* @param top Top coordinate of image bounding box in pixels
|
||||
* @param right Right coordinate of image bounding box in pixels
|
||||
* @param bottom Bottom coordinate of image bounding box in pixels
|
||||
* @param sub If available, draw only specified part of the sprite
|
||||
* @param zoom Zoom level of sprite
|
||||
*/
|
||||
void DrawSpriteCenteredRect(SpriteID img, PaletteID pal, int left, int top, int right, int bottom, const SubSprite *sub, ZoomLevel zoom)
|
||||
{
|
||||
DrawSpriteCentered(img, pal, (left + right) / 2, (top + bottom) / 2, sub, zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw a sprite, centered in rect, not in a viewport
|
||||
* @param img Image number to draw
|
||||
* @param pal Palette to use.
|
||||
* @param rect Image bounding box in pixels
|
||||
* @param sub If available, draw only specified part of the sprite
|
||||
* @param zoom Zoom level of sprite
|
||||
*/
|
||||
void DrawSpriteCenteredRect(SpriteID img, PaletteID pal, const Rect &rect, const SubSprite *sub, ZoomLevel zoom)
|
||||
{
|
||||
DrawSpriteCenteredRect(img, pal, rect.left, rect.top, rect.right, rect.bottom, sub, zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* The code for setting up the blitter mode and sprite information before finally drawing the sprite.
|
||||
* @param sprite The sprite to draw.
|
||||
@@ -1197,6 +1245,8 @@ void ScreenSizeChanged()
|
||||
|
||||
/* screen size changed and the old bitmap is invalid now, so we don't want to undraw it */
|
||||
_cursor.visible = false;
|
||||
|
||||
CheckWindowMinSizings();
|
||||
}
|
||||
|
||||
void UndrawMouseCursor()
|
||||
@@ -1214,11 +1264,6 @@ void UndrawMouseCursor()
|
||||
|
||||
void DrawMouseCursor()
|
||||
{
|
||||
#if defined(WINCE)
|
||||
/* Don't ever draw the mouse for WinCE, as we work with a stylus */
|
||||
return;
|
||||
#endif
|
||||
|
||||
/* Don't draw the mouse cursor if the screen is not ready */
|
||||
if (_screen.dst_ptr == NULL) return;
|
||||
|
||||
@@ -1710,3 +1755,104 @@ void SortResolutions(int count)
|
||||
{
|
||||
QSortT(_resolutions, count, &compare_res);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the initial value for a margin, after telling where are the left and right margins and where we want to draw/write (begining/end of line)
|
||||
* @param left is the left margin of the horizontal space we want to draw to
|
||||
* @param right: right margin
|
||||
* @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
|
||||
* @return the margin we asked
|
||||
*/
|
||||
int InitTempMargin(int left, int right, bool to_end_line)
|
||||
{
|
||||
return to_end_line ^ (_current_text_dir == TD_RTL) ? right :left;
|
||||
}
|
||||
|
||||
/**
|
||||
* Consumes a space in an horizontal margin
|
||||
* @param space: amount of space used
|
||||
* @param here: the margin where to add the space
|
||||
* @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
|
||||
*/
|
||||
void AddSpace(int space, int &here, bool to_end_line)
|
||||
{
|
||||
here += to_end_line ^ (_current_text_dir == TD_RTL) ? -space : space;
|
||||
}
|
||||
|
||||
/**
|
||||
* After drawing something, update a margin
|
||||
* @param end is where we ended drawing (usually the return value of a DrawString function)
|
||||
* @param margin is the margin we want to update
|
||||
* @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
|
||||
*/
|
||||
void UpdateMarginEnd(int end, int &margin, bool to_end_line)
|
||||
{
|
||||
margin = to_end_line ^ (_current_text_dir == TD_RTL) ? min(end, margin) : max(end, margin);
|
||||
}
|
||||
|
||||
/**
|
||||
* After drawing something, horizontal margins are updated
|
||||
* @param end: last position drawn
|
||||
* @param left is the left margin of the horizontal space drawn
|
||||
* @param right: right margin
|
||||
* @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
|
||||
*/
|
||||
void UpdateMarginsEnd(int end, int &left, int &right, bool to_end_line)
|
||||
{
|
||||
if (to_end_line ^ (_current_text_dir == TD_RTL)) {
|
||||
right = end;
|
||||
} else {
|
||||
left = end;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* After drawing something of a certain width, update margins
|
||||
* @param width: used space
|
||||
* @param initial left margin
|
||||
* @param initial right margin
|
||||
* @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
|
||||
*/
|
||||
void UpdateMarginsWidth(int width, int &left, int &right, bool to_end_line)
|
||||
{
|
||||
if (to_end_line ^ (_current_text_dir == TD_RTL)) {
|
||||
right -= width;
|
||||
} else {
|
||||
left += width;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a string in a delimited space; temporal margin gets updated
|
||||
* @param left is the left margin of the horizontal space we want to draw to
|
||||
* @param right: right margin of the horizontal space we want to draw to
|
||||
* @param top: vertical position
|
||||
* @param margin keeps the most extreme limit used of the line (this should be previously initialized with InitTempLimit)
|
||||
* @param string to draw
|
||||
* @param colour for the string
|
||||
* @param alignment of the string (only left or right alignment)
|
||||
* @param underline
|
||||
*/
|
||||
void DrawString2(int left, int right, int top, int &margin, StringID str, TextColour colour, StringAlignment align, bool underline)
|
||||
{
|
||||
int end = DrawString(left, right, top, str, colour, align, underline);
|
||||
UpdateMarginEnd(end, margin, align == SA_RIGHT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a sprite in a delimited space; temporal margin gets updated
|
||||
* @param width of the sprite
|
||||
* @param left is the left margin of the horizontal space we want to draw to
|
||||
* @param right: right margin of the horizontal space
|
||||
* @param top: vertical position
|
||||
* @param margin keeps the most extreme limit used of the line (this should be previously initialized with InitTempLimit)
|
||||
* @param sprite
|
||||
* @param palette
|
||||
* @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
|
||||
*/
|
||||
void DrawSprite2(int width, int left, int right, int top, int &margin, SpriteID img, PaletteID pal, bool to_end_line, SubSprite *sub)
|
||||
{
|
||||
DrawSprite(img, pal, to_end_line ^ (_current_text_dir == TD_RTL) ? right - width : left, top, sub);
|
||||
margin = to_end_line ^ (_current_text_dir == TD_RTL) ? min(right - width, margin): max(margin, left + width);
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "gfx_type.h"
|
||||
#include "strings_type.h"
|
||||
#include "string_type.h"
|
||||
#include "core/math_func.hpp"
|
||||
|
||||
void GameLoop();
|
||||
|
||||
@@ -56,12 +57,15 @@ extern byte _support8bpp;
|
||||
extern CursorVars _cursor;
|
||||
extern bool _ctrl_pressed; ///< Is Ctrl pressed?
|
||||
extern bool _shift_pressed; ///< Is Shift pressed?
|
||||
extern bool _move_pressed;
|
||||
|
||||
extern byte _fast_forward;
|
||||
|
||||
extern bool _left_button_down;
|
||||
extern bool _left_button_clicked;
|
||||
extern bool _right_button_down;
|
||||
extern bool _right_button_clicked;
|
||||
extern Point _right_button_down_pos;
|
||||
|
||||
extern DrawPixelInfo _screen;
|
||||
extern bool _screen_disable_anim; ///< Disable palette animation (important for 32bpp-anim blitter during giant screenshot)
|
||||
@@ -92,6 +96,9 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo);
|
||||
Dimension GetSpriteSize(SpriteID sprid, Point *offset = NULL, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL);
|
||||
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
void DrawSpriteCentered(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
void DrawSpriteCenteredRect(SpriteID img, PaletteID pal, int left, int top, int right, int bottom, const SubSprite *sub = NULL, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
void DrawSpriteCenteredRect(SpriteID img, PaletteID pal, const Rect &r, const SubSprite *sub = NULL, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
|
||||
/** How to align the to-be drawn text. */
|
||||
enum StringAlignment {
|
||||
@@ -173,6 +180,39 @@ int GetCharacterHeight(FontSize size);
|
||||
/** Height of characters in the large (#FS_MONO) font. @note Some characters may be oversized. */
|
||||
#define FONT_HEIGHT_MONO (GetCharacterHeight(FS_MONO))
|
||||
|
||||
int InitTempMargin(int left, int right, bool to_end_line);
|
||||
void AddSpace(int space, int &here, bool to_end_line);
|
||||
|
||||
void UpdateMarginEnd(int end, int &margin, bool to_end_line);
|
||||
void UpdateMarginWidth(int adding, int &margin, bool to_end_line);
|
||||
void UpdateMarginsEnd(int end, int &left, int &right, bool to_end_line);
|
||||
void UpdateMarginsWidth(int width, int &left, int &right, bool to_end_line);
|
||||
|
||||
void DrawString2(int left, int right, int top, int &margin, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false);
|
||||
void DrawSprite2(int width, int left, int right, int top, int &margin, SpriteID img, PaletteID pal, bool to_end_line = false, SubSprite *sub = NULL);
|
||||
|
||||
/**
|
||||
* Return where to start drawing a centered object inside a widget.
|
||||
* @param top The top coordinate (or the left coordinate) of the widget.
|
||||
* @param height The height (or width) of the widget.
|
||||
* @param size The height (or width) of the object to draw.
|
||||
* @return The coordinate where to start drawing the centered object.
|
||||
*/
|
||||
static inline int Center(int top, int height, uint size = FONT_HEIGHT_NORMAL)
|
||||
{
|
||||
return top + (height - size) / 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns fint/button size, rescaled to current screen resolution from the base Android resolution, which is 854x480
|
||||
* @param value The value to rescale
|
||||
* @return Rescaled value, using lesser of the curret screen coordinates
|
||||
*/
|
||||
static inline int RescaleFrom854x480(int value)
|
||||
{
|
||||
return min(value * _cur_resolution.width / 854, value * _cur_resolution.height / 480);
|
||||
}
|
||||
|
||||
extern DrawPixelInfo *_cur_dpi;
|
||||
|
||||
TextColour GetContrastColour(uint8 background);
|
||||
|
||||
+5
-3
@@ -116,6 +116,7 @@ static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index)
|
||||
|
||||
for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
|
||||
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
|
||||
panel->sizing_type = NWST_STEP;
|
||||
panel->SetMinimalSize(246, line_height);
|
||||
panel->SetFill(1, 0);
|
||||
panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP);
|
||||
@@ -1130,6 +1131,7 @@ private:
|
||||
uint ordinal_width; ///< The width of the ordinal number
|
||||
uint text_width; ///< The width of the actual text
|
||||
uint icon_width; ///< The width of the company icon
|
||||
uint icon_y_offset; ///< The vertical offset for drawing the company icon.
|
||||
int line_height; ///< Height of the text lines
|
||||
|
||||
/**
|
||||
@@ -1176,8 +1178,7 @@ public:
|
||||
{
|
||||
if (widget != WID_CL_BACKGROUND) return;
|
||||
|
||||
int icon_y_offset = 1 + (FONT_HEIGHT_NORMAL - this->line_height) / 2;
|
||||
uint y = r.top + WD_FRAMERECT_TOP - icon_y_offset;
|
||||
uint y = r.top + WD_FRAMERECT_TOP;
|
||||
|
||||
bool rtl = _current_text_dir == TD_RTL;
|
||||
uint ordinal_left = rtl ? r.right - WD_FRAMERECT_LEFT - this->ordinal_width : r.left + WD_FRAMERECT_LEFT;
|
||||
@@ -1190,7 +1191,7 @@ public:
|
||||
const Company *c = this->companies[i];
|
||||
DrawString(ordinal_left, ordinal_right, y, i + STR_ORDINAL_NUMBER_1ST, i == 0 ? TC_WHITE : TC_YELLOW);
|
||||
|
||||
DrawCompanyIcon(c->index, icon_left, y + icon_y_offset);
|
||||
DrawCompanyIcon(c->index, icon_left, y + this->icon_y_offset);
|
||||
|
||||
SetDParam(0, c->index);
|
||||
SetDParam(1, c->index);
|
||||
@@ -1223,6 +1224,7 @@ public:
|
||||
Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
|
||||
this->icon_width = d.width + 2;
|
||||
this->line_height = max<int>(d.height + 2, FONT_HEIGHT_NORMAL);
|
||||
this->icon_y_offset = Center(1, this->line_height, d.height);
|
||||
|
||||
const Company *c;
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
|
||||
+23
-23
@@ -47,8 +47,7 @@ static const NWidgetPart _nested_group_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
/* left part */
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalTextLines(1, WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM), SetFill(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_ALL_VEHICLES), SetFill(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_ALL_VEHICLES), SetFill(1, 0), SetMinimalTextLines(1, WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_DEFAULT_VEHICLES), SetFill(1, 0), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_GROUP), SetMatrixDataTip(1, 0, STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP),
|
||||
@@ -70,7 +69,7 @@ static const NWidgetPart _nested_group_widgets[] = {
|
||||
/* right part */
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetSizingType(NWST_STEP), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -78,7 +77,7 @@ static const NWidgetPart _nested_group_widgets[] = {
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_VEHICLE), SetMinimalSize(248, 0), SetMatrixDataTip(1, 0, STR_NULL), SetResize(1, 1), SetFill(1, 0), SetScrollbar(WID_GL_LIST_VEHICLE_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_VEHICLE_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(1, 0), SetFill(1, 1), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 0), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), SetFill(0, 1),
|
||||
SetDataTip(STR_BLACK_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP),
|
||||
@@ -192,8 +191,9 @@ private:
|
||||
uint ComputeGroupInfoSize()
|
||||
{
|
||||
this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype));
|
||||
this->column_size[VGC_NAME].width = max(170u, this->column_size[VGC_NAME].width);
|
||||
this->tiny_step_height = this->column_size[VGC_NAME].height;
|
||||
/* We consider the max average length of characters to be the one of "a" */
|
||||
this->column_size[VGC_NAME].width = max(GetCharacterWidth(FS_NORMAL, 97) * (MAX_LENGTH_GROUP_NAME_CHARS - 4), this->column_size[VGC_NAME].width);
|
||||
this->tiny_step_height = max(11U, this->column_size[VGC_NAME].height);
|
||||
|
||||
this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT);
|
||||
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROTECT].height);
|
||||
@@ -215,9 +215,10 @@ private:
|
||||
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height);
|
||||
|
||||
this->tiny_step_height += WD_MATRIX_TOP;
|
||||
this->tiny_step_height = GetMinSizing(NWST_STEP, this->tiny_step_height);
|
||||
|
||||
return WD_FRAMERECT_LEFT + 8 +
|
||||
this->column_size[VGC_NAME].width + 8 +
|
||||
this->column_size[VGC_NAME].width + 2 +
|
||||
this->column_size[VGC_PROTECT].width + 2 +
|
||||
this->column_size[VGC_AUTOREPLACE].width + 2 +
|
||||
this->column_size[VGC_PROFIT].width + 2 +
|
||||
@@ -238,7 +239,7 @@ private:
|
||||
{
|
||||
/* Highlight the group if a vehicle is dragged over it */
|
||||
if (g_id == this->group_over) {
|
||||
GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - WD_MATRIX_TOP, _colour_gradient[COLOUR_GREY][7]);
|
||||
GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP + WD_MATRIX_TOP, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - WD_MATRIX_TOP, _colour_gradient[COLOUR_GREY][7]);
|
||||
}
|
||||
|
||||
if (g_id == NEW_GROUP) return;
|
||||
@@ -249,6 +250,7 @@ private:
|
||||
bool rtl = _current_text_dir == TD_RTL;
|
||||
|
||||
/* draw group name */
|
||||
int longer_name = 0;
|
||||
StringID str;
|
||||
if (IsAllGroupID(g_id)) {
|
||||
str = STR_GROUP_ALL_TRAINS + this->vli.vtype;
|
||||
@@ -257,12 +259,16 @@ private:
|
||||
} else {
|
||||
SetDParam(0, g_id);
|
||||
str = STR_GROUP_NAME;
|
||||
if (!protection) {
|
||||
longer_name += this->column_size[VGC_PROTECT].width + 2;
|
||||
if (!stats.autoreplace_defined) longer_name += this->column_size[VGC_AUTOREPLACE].width + 2;
|
||||
}
|
||||
}
|
||||
int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width + 1 : left + WD_FRAMERECT_LEFT + 8;
|
||||
DrawString(x + indent * LEVEL_WIDTH, x + this->column_size[VGC_NAME].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
|
||||
int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width - longer_name + 1 : left + WD_FRAMERECT_LEFT + 8;
|
||||
DrawString(x + indent * LEVEL_WIDTH, x + this->column_size[VGC_NAME].width + longer_name - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
|
||||
|
||||
/* draw autoreplace protection */
|
||||
x = rtl ? x - 8 - this->column_size[VGC_PROTECT].width : x + 8 + this->column_size[VGC_NAME].width;
|
||||
x = rtl ? x - 2 - this->column_size[VGC_PROTECT].width : x + 2 + this->column_size[VGC_NAME].width;
|
||||
if (protection) DrawSprite(SPR_GROUP_REPLACE_PROTECT, PAL_NONE, x, y + (this->tiny_step_height - this->column_size[VGC_PROTECT].height) / 2);
|
||||
|
||||
/* draw autoreplace status */
|
||||
@@ -363,16 +369,10 @@ public:
|
||||
resize->height = this->tiny_step_height;
|
||||
|
||||
/* Minimum height is the height of the list widget minus all and default vehicles... */
|
||||
size->height = 4 * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height) - 2 * this->tiny_step_height;
|
||||
|
||||
/* ... minus the buttons at the bottom ... */
|
||||
uint max_icon_height = GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_CREATE_GROUP)->widget_data).height;
|
||||
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_RENAME_GROUP)->widget_data).height);
|
||||
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_DELETE_GROUP)->widget_data).height);
|
||||
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height);
|
||||
size->height = (this->vli.vtype >= VEH_SHIP ? 3.5 : 7) * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height) - 2 * this->tiny_step_height;
|
||||
|
||||
/* Get a multiple of tiny_step_height of that amount */
|
||||
size->height = Ceil(size->height - max_icon_height, tiny_step_height);
|
||||
size->height = Ceil(size->height, tiny_step_height);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -393,7 +393,7 @@ public:
|
||||
case WID_GL_LIST_VEHICLE:
|
||||
this->ComputeGroupInfoSize();
|
||||
resize->height = GetVehicleListHeight(this->vli.vtype, this->tiny_step_height);
|
||||
size->height = 4 * resize->height;
|
||||
size->height = (this->vli.vtype >= VEH_SHIP ? 3 : 6) * resize->height;
|
||||
break;
|
||||
|
||||
case WID_GL_MANAGE_VEHICLES_DROPDOWN: {
|
||||
@@ -520,15 +520,15 @@ public:
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_GL_ALL_VEHICLES:
|
||||
DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, ALL_GROUP);
|
||||
DrawGroupInfo(r.top, r.left, r.right, ALL_GROUP);
|
||||
break;
|
||||
|
||||
case WID_GL_DEFAULT_VEHICLES:
|
||||
DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, DEFAULT_GROUP);
|
||||
DrawGroupInfo(r.top, r.left, r.right, DEFAULT_GROUP);
|
||||
break;
|
||||
|
||||
case WID_GL_LIST_GROUP: {
|
||||
int y1 = r.top + WD_FRAMERECT_TOP;
|
||||
int y1 = r.top;
|
||||
int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.Length());
|
||||
for (int i = this->group_sb->GetPosition(); i < max; ++i) {
|
||||
const Group *g = this->groups[i];
|
||||
|
||||
+48
-25
@@ -235,7 +235,7 @@ static const NWidgetPart _nested_build_industry_widgets[] = {
|
||||
|
||||
/** Window definition of the dynamic place industries gui */
|
||||
static WindowDesc _build_industry_desc(
|
||||
WDP_AUTO, "build_industry", 170, 212,
|
||||
WDP_ALIGN_TOOLBAR, "build_industry", 170, 212,
|
||||
WC_BUILD_INDUSTRY, WC_NONE,
|
||||
WDF_CONSTRUCTION,
|
||||
_nested_build_industry_widgets, lengthof(_nested_build_industry_widgets)
|
||||
@@ -252,9 +252,6 @@ class BuildIndustryWindow : public Window {
|
||||
bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_PROBABILITY (if ever)
|
||||
Scrollbar *vscroll;
|
||||
|
||||
/** The offset for the text in the matrix. */
|
||||
static const int MATRIX_TEXT_OFFSET = 17;
|
||||
|
||||
void SetupArrays()
|
||||
{
|
||||
this->count = 0;
|
||||
@@ -328,6 +325,10 @@ public:
|
||||
this->SetButtons();
|
||||
}
|
||||
|
||||
~BuildIndustryWindow() {
|
||||
if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
|
||||
}
|
||||
|
||||
virtual void OnInit()
|
||||
{
|
||||
this->SetupArrays();
|
||||
@@ -342,8 +343,8 @@ public:
|
||||
if (this->index[i] == INVALID_INDUSTRYTYPE) continue;
|
||||
d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(this->index[i])->name));
|
||||
}
|
||||
resize->height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
d.width += MATRIX_TEXT_OFFSET + padding.width;
|
||||
resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
d.width += FONT_HEIGHT_NORMAL * 5 / 4 + padding.width;
|
||||
d.height = 5 * resize->height;
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
@@ -427,20 +428,22 @@ public:
|
||||
switch (widget) {
|
||||
case WID_DPI_MATRIX_WIDGET: {
|
||||
uint text_left, text_right, icon_left, icon_right;
|
||||
uint square_size = FONT_HEIGHT_NORMAL - 2;
|
||||
uint text_offset = FONT_HEIGHT_NORMAL * 5 / 4;
|
||||
if (_current_text_dir == TD_RTL) {
|
||||
icon_right = r.right - WD_MATRIX_RIGHT;
|
||||
icon_left = icon_right - 10;
|
||||
text_right = icon_right - BuildIndustryWindow::MATRIX_TEXT_OFFSET;
|
||||
icon_left = icon_right - square_size;
|
||||
text_right = icon_right - text_offset;
|
||||
text_left = r.left + WD_MATRIX_LEFT;
|
||||
} else {
|
||||
icon_left = r.left + WD_MATRIX_LEFT;
|
||||
icon_right = icon_left + 10;
|
||||
text_left = icon_left + BuildIndustryWindow::MATRIX_TEXT_OFFSET;
|
||||
icon_right = icon_left + square_size;
|
||||
text_left = icon_left + text_offset;
|
||||
text_right = r.right - WD_MATRIX_RIGHT;
|
||||
}
|
||||
|
||||
for (byte i = 0; i < this->vscroll->GetCapacity() && i + this->vscroll->GetPosition() < this->count; i++) {
|
||||
int y = r.top + WD_MATRIX_TOP + i * this->resize.step_height;
|
||||
int y = Center(r.top, this->resize.step_height);
|
||||
for (byte i = 0; i < this->vscroll->GetCapacity() && i + this->vscroll->GetPosition() < this->count; i++, y += this->resize.step_height) {
|
||||
bool selected = this->selected_index == i + this->vscroll->GetPosition();
|
||||
|
||||
if (this->index[i + this->vscroll->GetPosition()] == INVALID_INDUSTRYTYPE) {
|
||||
@@ -451,8 +454,8 @@ public:
|
||||
|
||||
/* Draw the name of the industry in white is selected, otherwise, in orange */
|
||||
DrawString(text_left, text_right, y, indsp->name, selected ? TC_WHITE : TC_ORANGE);
|
||||
GfxFillRect(icon_left, y + 1, icon_right, y + 7, selected ? PC_WHITE : PC_BLACK);
|
||||
GfxFillRect(icon_left + 1, y + 2, icon_right - 1, y + 6, indsp->map_colour);
|
||||
GfxFillRect(icon_left, y + 1, icon_right, y + square_size, selected ? PC_WHITE : PC_BLACK);
|
||||
GfxFillRect(icon_left + 1, y + 2, icon_right - 1, y + square_size - 1, indsp->map_colour);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -591,6 +594,21 @@ public:
|
||||
|
||||
virtual void OnPlaceObject(Point pt, TileIndex tile)
|
||||
{
|
||||
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
|
||||
MoveAllWindowsOffScreen();
|
||||
}
|
||||
|
||||
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
|
||||
{
|
||||
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
|
||||
}
|
||||
|
||||
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
|
||||
{
|
||||
if (pt.x == -1) return;
|
||||
assert(end_tile == start_tile);
|
||||
|
||||
MoveAllHiddenWindowsBackToScreen();
|
||||
bool success = true;
|
||||
/* We do not need to protect ourselves against "Random Many Industries" in this mode */
|
||||
const IndustrySpec *indsp = GetIndustrySpec(this->selected_type);
|
||||
@@ -608,14 +626,14 @@ public:
|
||||
_generating_world = true;
|
||||
_ignore_restrictions = true;
|
||||
|
||||
DoCommandP(tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed,
|
||||
DoCommandP(end_tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed,
|
||||
CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY), &CcBuildIndustry);
|
||||
|
||||
cur_company.Restore();
|
||||
_ignore_restrictions = false;
|
||||
_generating_world = false;
|
||||
} else {
|
||||
success = DoCommandP(tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed, CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY));
|
||||
success = DoCommandP(end_tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed, CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY));
|
||||
}
|
||||
|
||||
/* If an industry has been built, just reset the cursor and the system */
|
||||
@@ -653,6 +671,7 @@ public:
|
||||
|
||||
virtual void OnPlaceObjectAbort()
|
||||
{
|
||||
MoveAllHiddenWindowsBackToScreen();
|
||||
this->RaiseButtons();
|
||||
}
|
||||
|
||||
@@ -675,7 +694,7 @@ public:
|
||||
void ShowBuildIndustryWindow()
|
||||
{
|
||||
if (_game_mode != GM_EDITOR && !Company::IsValidID(_local_company)) return;
|
||||
if (BringWindowToFrontById(WC_BUILD_INDUSTRY, 0)) return;
|
||||
DeleteToolbarLinkedWindows();
|
||||
new BuildIndustryWindow();
|
||||
}
|
||||
|
||||
@@ -818,7 +837,7 @@ public:
|
||||
if (first) {
|
||||
if (has_accept) y += WD_PAR_VSEP_WIDE;
|
||||
DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
y += this->editable == EA_RATE ? GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) : FONT_HEIGHT_NORMAL;
|
||||
if (this->editable == EA_RATE) this->production_offset_y = y;
|
||||
first = false;
|
||||
}
|
||||
@@ -833,8 +852,10 @@ public:
|
||||
if (this->editable == EA_RATE) {
|
||||
DrawArrowButtons(left + WD_FRAMETEXT_LEFT, y, COLOUR_YELLOW, (this->clicked_line == IL_RATE1 + j) ? this->clicked_button : 0,
|
||||
i->production_rate[j] > 0, i->production_rate[j] < 255);
|
||||
y += GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
|
||||
} else {
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
}
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
}
|
||||
|
||||
/* Display production multiplier if editable */
|
||||
@@ -846,7 +867,7 @@ public:
|
||||
DrawString(x, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_PRODUCTION_LEVEL);
|
||||
DrawArrowButtons(left + WD_FRAMETEXT_LEFT, y, COLOUR_YELLOW, (this->clicked_line == IL_MULTIPLIER) ? this->clicked_button : 0,
|
||||
i->prod_level > PRODLEVEL_MINIMUM, i->prod_level < PRODLEVEL_MAXIMUM);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
y += GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
|
||||
}
|
||||
|
||||
/* Get the extra message for the GUI */
|
||||
@@ -894,12 +915,14 @@ public:
|
||||
case EA_NONE: break;
|
||||
|
||||
case EA_MULTIPLIER:
|
||||
if (IsInsideBS(pt.y, this->production_offset_y, FONT_HEIGHT_NORMAL)) line = IL_MULTIPLIER;
|
||||
if (IsInsideBS(pt.y, this->production_offset_y, SETTING_BUTTON_HEIGHT)) line = IL_MULTIPLIER;
|
||||
break;
|
||||
|
||||
case EA_RATE:
|
||||
if (pt.y >= this->production_offset_y) {
|
||||
int row = (pt.y - this->production_offset_y) / FONT_HEIGHT_NORMAL;
|
||||
if ((pt.y - this->production_offset_y) % GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) > (uint)SETTING_BUTTON_HEIGHT) break;;
|
||||
|
||||
int row = (pt.y - this->production_offset_y) / GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
|
||||
for (uint j = 0; j < lengthof(i->produced_cargo); j++) {
|
||||
if (i->produced_cargo[j] == CT_INVALID) continue;
|
||||
row--;
|
||||
@@ -1115,7 +1138,7 @@ static const NWidgetPart _nested_industry_directory_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_ID_DROPDOWN_ORDER), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_ID_DROPDOWN_ORDER), SetSizingType(NWST_STEP), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_DROPDOWN_CRITERIA), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
|
||||
NWidget(WWT_PANEL, COLOUR_BROWN), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1320,7 +1343,7 @@ public:
|
||||
|
||||
case WID_ID_INDUSTRY_LIST: {
|
||||
int n = 0;
|
||||
int y = r.top + WD_FRAMERECT_TOP;
|
||||
int y = Center(r.top, this->resize.step_height);
|
||||
if (this->industries.Length() == 0) {
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_DIRECTORY_NONE);
|
||||
break;
|
||||
@@ -1363,7 +1386,7 @@ public:
|
||||
for (uint i = 0; i < this->industries.Length(); i++) {
|
||||
d = maxdim(d, GetStringBoundingBox(this->GetIndustryString(this->industries[i])));
|
||||
}
|
||||
resize->height = d.height;
|
||||
resize->height = d.height = GetMinSizing(NWST_STEP, d.height);
|
||||
d.height *= 5;
|
||||
d.width += padding.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
d.height += padding.height + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
#include "string_func.h"
|
||||
#include "fileio_func.h"
|
||||
|
||||
#if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500)
|
||||
#if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500) || defined(__ANDROID__)
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
|
||||
+8
-6
@@ -27,6 +27,7 @@
|
||||
#include "language.h"
|
||||
#include "rev.h"
|
||||
#include "highscore.h"
|
||||
#include "tutorial_gui.h"
|
||||
|
||||
#include "widgets/intro_widget.h"
|
||||
|
||||
@@ -158,13 +159,14 @@ struct SelectGameWindow : public Window {
|
||||
}
|
||||
break;
|
||||
case WID_SGI_AI_SETTINGS: ShowAIConfigWindow(); break;
|
||||
case WID_SGI_TUTORIAL: ShowTutorialWindow(); break;
|
||||
case WID_SGI_EXIT: HandleExitGameRequest(); break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_INTRO_CAPTION, STR_NULL),
|
||||
NWidget(WWT_CAPTION, COLOUR_BROWN), SetSizingType(NWST_BUTTON), SetDataTip(STR_INTRO_CAPTION, STR_NULL),
|
||||
NWidget(WWT_PANEL, COLOUR_BROWN),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 8),
|
||||
|
||||
@@ -258,11 +260,11 @@ static const NWidgetPart _nested_select_game_widgets[] = {
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
|
||||
|
||||
/* 'exit program' button */
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_EXIT), SetMinimalSize(128, 12),
|
||||
SetDataTip(STR_INTRO_QUIT, STR_INTRO_TOOLTIP_QUIT),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_TUTORIAL), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_ABOUT_MENU_TUTORIAL, STR_TUTORIAL_WINDOW_TOOLTIP), SetPadding(0, 0, 0, 10), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_EXIT), SetMinimalSize(158, 12),
|
||||
SetDataTip(STR_INTRO_QUIT, STR_INTRO_TOOLTIP_QUIT), SetPadding(0, 10, 0, 0), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 8),
|
||||
|
||||
@@ -4965,3 +4965,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4418,3 +4418,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4828,3 +4828,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5437,3 +5437,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4965,3 +4965,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4878,3 +4878,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4973,3 +4973,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5105,3 +5105,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Udžbenik
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Prikaži legendu mape / opis simbola na mapi
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Okomita alatna traka
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Glavna alatna traka je podijeljena na dvije okomite alatne trake na rubovima ekrana
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Veličina tipki
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Veličina svih elemenata korisničkog sučelja
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Veličina fonta
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Veličina svih fontova u igri
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Potvrdi akcije
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Prikaži dijalog potvrde pri gradnji cesta i stanica
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bit
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Postavi dubinu boja videa na 8 bitova po pikselu, ovaj način podržava animaciju vode
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bit
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Postavi dubinu boja videa na 16 bitova po pikselu, za ovo treba restart, ovaj način ne podržava animaciju vode
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bit
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Postavi dubinu boja videa na 24 bita po pikselu, ovaj način podržava animaciju vode
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Zatvori sve otvorene prozore (osim zakačenih)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Pritisnuti za procjenu troškova izvođenja neke akcije
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Koristiti za sve akcije za koje se koristi tipka "CTRL"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Videi za učenje
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Otvori prikazivač videa za gledanje videa za učenje
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Građenje cesta i stanica, kupnja vozila
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Pruge i vlakovi
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Cestovna vozila
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Brodovi i dokovi
|
||||
STR_TUTORIAL_CARGO :{BLACK}Vrste tereta
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Učitaj sa mreže
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Učitaj igru sa mrežne pohrane podataka
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Spremi na mrežu
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Spremi igru na mrežnu pohranu podataka
|
||||
|
||||
@@ -5187,3 +5187,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4964,3 +4964,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4967,3 +4967,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
+35
-1
@@ -468,7 +468,7 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Message history
|
||||
|
||||
############ range for about menu starts
|
||||
STR_ABOUT_MENU_LAND_BLOCK_INFO :Land area information
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Tutorial
|
||||
STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console
|
||||
STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug
|
||||
STR_ABOUT_MENU_SCREENSHOT :Screenshot
|
||||
@@ -717,6 +717,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Show lan
|
||||
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Click on an industry type to toggle displaying it. Ctrl+Click disables all types except the selected one. Ctrl+Click on it again to enable all industry types
|
||||
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Click on a company to toggle displaying its property. Ctrl+Click disables all companies except the selected one. Ctrl+Click on it again to enable all companies
|
||||
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Click on a cargo to toggle displaying its property. Ctrl+Click disables all cargoes except the selected one. Ctrl+Click on it again to enable all cargoes
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Show map legend / description of map symbols
|
||||
|
||||
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Roads
|
||||
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Railways
|
||||
@@ -1211,6 +1212,20 @@ STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Select on which
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_LEFT :On the left
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :On the driving side
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :On the right
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Vertical toolbar
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Main toolbar is split into two vertical toolbars on the sides of the screen
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Button size
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Size of all user interface elements
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Font size
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Size of all game fonts
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Confirm actions
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Show confirmation dialog when building roads and stations
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bit
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Set video color depth to 8 bits per pixel, this video mode supports water animation
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bit
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Set video color depth to 16 bits per pixel, this requires restart, this video mode does not support water animation
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bit
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Set video color depth to 24 bits per pixel, this video mode supports water animation
|
||||
STR_CONFIG_SETTING_SHOWFINANCES :Show finances window at the end of the year: {STRING2}
|
||||
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :If enabled, the finances window pops up at the end of each year to allow easy inspection of the financial status of the company
|
||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :New orders are 'non-stop' by default: {STRING2}
|
||||
@@ -2477,6 +2492,13 @@ STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Raise a
|
||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Level an area of land to the height of the first selected corner. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Purchase land for future use. Shift toggles building/showing cost estimate
|
||||
|
||||
STR_TABLET_CLOSE :{BLACK}X
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Close all opened windows (except pinned ones)
|
||||
STR_TABLET_SHIFT :{BLACK}{TINY_FONT}Shft
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Press it for getting an estimated cost of executing an action
|
||||
STR_TABLET_CTRL :{BLACK}{TINY_FONT}Ctrl
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Use it for actions that use the "CTRL" key
|
||||
|
||||
# Object construction window
|
||||
STR_OBJECT_BUILD_CAPTION :{WHITE}Object Selection
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Select object to build. Shift toggles building/showing cost estimate
|
||||
@@ -2691,6 +2713,14 @@ STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original
|
||||
STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV}
|
||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017 The OpenTTD team
|
||||
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Tutorial videos
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Open a video player to watch tutorial videos
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Building roads and stations, buying vehicles
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Railways and trains
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Road vehicles
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Ships and docks
|
||||
STR_TUTORIAL_CARGO :{BLACK}Cargo types
|
||||
|
||||
# Save/load game/scenario
|
||||
STR_SAVELOAD_SAVE_CAPTION :{WHITE}Save Game
|
||||
STR_SAVELOAD_LOAD_CAPTION :{WHITE}Load Game
|
||||
@@ -2709,6 +2739,10 @@ STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Save the
|
||||
STR_SAVELOAD_LOAD_BUTTON :{BLACK}Load
|
||||
STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Load the selected game
|
||||
STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Load the selected heightmap
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Load from network
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Load a game from the network storage
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Save to network
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Back up the game to the network storage
|
||||
STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Game Details
|
||||
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No information available
|
||||
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING1}
|
||||
|
||||
@@ -4912,3 +4912,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4970,3 +4970,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4320,3 +4320,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5022,3 +5022,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4468,3 +4468,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4964,3 +4964,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4973,3 +4973,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5350,3 +5350,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Oideachadh
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Seall treòir a' mhapa / tuairisgeulan air samhlaidhean a' mhapa
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Bàr-inneal inghearach
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Thèid am prìomh bhàr-inneal a sgoltadh 'na bhàraichean-inneal inghearach ri dà thaobh an sgrìn
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Meud nam putan
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Meud aig a h-uile nì an eadar-aghaidh
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Meud a' chrutha-chlò
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Meud aig a h-uile cruth-clò a' gheama
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Dearbhaich na gnìomhan
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Seall còmhradh dearbhaidh le togail rathaidean is stèiseanan
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 biod
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Suidhich doimhneachd nan dath aig a' video gu 8 biod gach piogsail. Cuiridh am modh video sin taic ri beòthachadh uisge
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 biod
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Suidhich doimhneachd nan dath aig a' video gu 16 biod gach piogsail. Bidh feum air ath-thòiseachadh. Cha chuir am modh video sin taic ri beòthachadh uisge
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 biod
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Suidhich doimhneachd nan dath aig a' video gu 24 biod gach piogsail. Cuiridh am modh video sin taic ri beòthachadh uisge
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Dùin a h-uile uinneag (seach an fheadhainn phrìnichte)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Brùth air gus tuairmse air cosgaisean gnìomha fhaighinn
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Cleachd e airson gnìomhan a chleachdas an iuchair "CTRL"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Videothan oideachaidh
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Fosgail cluicheadair video gus coimhead air videothan oideachaidh
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Togail rathaidean is stèiseanan, ceannach charbadan
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Slighean rèile is trèanaichean
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Carbadan-rathaid
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Longan is puirt
|
||||
STR_TUTORIAL_CARGO :{BLACK}Seòrsaichean carago
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Luchdaich on lìonra
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Luchdaich geama o stòras an lìonraidh
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Sàbhail dhan lìonra
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Cuir lethbhreac-glèidhidh dhen gheama gu stòras an lìonraidh
|
||||
|
||||
@@ -4902,3 +4902,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4965,3 +4965,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Tutorial
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Zeige Kartenlegende / Beschreibung der Kartensymbole
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Vertikale Werkzeugsleiste
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Hauptwerzeugleiste ist in zwei vertikale Leisten an den Bildschirmseiten aufgeteilt
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Schaltflächengröße
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Größe aller Elemente der Benutzeroberfläche
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Schriftartgröße
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Größe aller Schriftarten
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Aktionen bestätigen
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Zeige Bestätigungsdialog bei Straßen- und Haltenstellebau
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bit
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Setzt die Farbtiefe auf 8 Bits per Pixel. Dieser Modus unterstützt Wasseranimation
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bit
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Setzt die Farbtiefe auf 16 Bit per Pixel. Erfordert Neustart und dieser Modus unterstützt keine Wasseranimation
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bit
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Setzt die Farbtiefe auf 24 Bits per Pixel. Dieser Modus unterstützt Wasseranimation
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Schließe alle offene Fenster (außer Festgepinnte)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Drücke hier, um eine Kostenabschätzung für die Durchführung einer Aktion zu erhalten
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Für Aktionen benutzen, welche die "STRG" Taste benutzen
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Tutorial Videos
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Öffne einen Videoplayer, um Tutorial videos anzuschauen
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Strassen und Haltestellen bauen, Fahrzeuge kaufen
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Eisenbahnen und Züge
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Straßenfahrzeuge
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Schiffe und Docks
|
||||
STR_TUTORIAL_CARGO :{BLACK}Warentypen
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Laden vom Netzwerk
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Öffne ein Spiel aus dem Netzwerkspeicher
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Speichern ins Netzwerk
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Spiel zurück in den Netzwerkspeicher backupen
|
||||
|
||||
@@ -5089,3 +5089,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4980,3 +4980,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5069,3 +5069,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4721,3 +4721,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4960,3 +4960,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4964,3 +4964,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5002,3 +5002,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Istruzioni
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Mostra la legenda della mappa / descrizione dei simboli della mappa
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Barra degli strumenti verticale
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}La barra degli strumenti è divisa in due barre verticali sui lati dello schermo
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Dimensioni dei pulsanti
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Dimensioni degli elementi dell'interfaccia
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Dimensioni dei caratteri
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Dimensioni dei caratteri nel gioco
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Conferma
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Mostra il dialogo di conferma durante la costruzione di strade e stazioni
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bit
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Imposta i colori a 8 bit per pixel. Questa modalità video supporta l'animazione dell'acqua
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bit
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Imposta i colori a 16 bit per pixel (richiede il riavvio). Questa modalità video non supporta l'animazione dell'acqua
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bit
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Imposta i colori a 24 bit per pixel. Questa modalità video supporta l'animazione dell'acqua
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Chiude tutte le schermate aperte (eccetto quelle permanenti)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Premi questo tasto per una stima dei costi dell'azione desiderata
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Usa per le azioni che usano il tasto "CTRL"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Video di aiuto
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Apri un'applicazione video per guardare i video di aiuto
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Costruzione di strade e stazioni; acquisto di veicoli
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Ferrovie e treni
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Veicoli stradali
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Navi e attracchi
|
||||
STR_TUTORIAL_CARGO :{BLACK}Tipi di merce
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Carica dalla rete
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Carica il gioco dalla memoria di rete
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Salva sulla rete
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Salva il gioco nella memoria di rete
|
||||
|
||||
@@ -4968,3 +4968,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}チュートリアル
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}マップシンボルについての説明の表示
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}垂直ツールバー
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}メインツールバーはスクリーンの両脇に垂直に2つに分割しています
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}ボタンサイズ
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}すべてのユーザーインターフェースの構成サイズ
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}フォントサイズ
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}全てのゲームのフォント
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}アクションの確認
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}道路とステーションの建設時に確認のダイアログの表示
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bit
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}色深度を8 bppに設定します 再起動が必要です このビデオモードは水のアニメーションに対応していません
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bit
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}色深度を16 bppに設定します 再起動が必要です このビデオモードは水のアニメーションに対応していません
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bit
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}色深度を24 bppに設定します 再起動が必要です このビデオモードは水のアニメーションに対応していません
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}全ての開いているウィンドウを閉じます (固定してあるものは除く)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}押すことでアクションの決定時に費用の見積もりができます
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK} "CTRL" キーを使うアクションのために使います
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}チュートリアル動画
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}チュートリアル動画を見るためにビデオプレイヤーを開きます
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}道路とステーションの建設と、車両の購入
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}鉄道と列車
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}道路車両
|
||||
STR_TUTORIAL_SHIPS :{BLACK}船とドック
|
||||
STR_TUTORIAL_CARGO :{BLACK}貨物のタイプ
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}ネットワークからロード
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}ネットワークストレージからゲームをロード
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}ネットワークにセーブ
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}ネットワークストレージにゲームをバックアップ
|
||||
|
||||
@@ -4973,3 +4973,35 @@ STR_PLANE :{G=f}{BLACK}{PL
|
||||
STR_SHIP :{G=f}{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}튜토리얼
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}지도 범례 / 기호 설명을 보여줌
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}수직 작업창
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}메인 작업창이 두 개의 화면 양쪽 두개의 수직 작업창으로 나뉨
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}버튼 크기
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}모든 사용자 인터페이스의 크기
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}폰트 크기
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}게임 내부 폰트의 크기
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}명령 확인
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}도로와 정류장을 건설시 확인 팝업을 보임
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8비트
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}그래픽 색상 깊이를 픽셀당 8비트로 설정합니다. 이 그래픽 모드는 물이 흐르는 애니메이션 효과를 표현할 수 있습니다.
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16비트
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}그래픽 색상 깊이를 픽셀당 16비트로 설정합니다. 이 그래픽 모드는 물이 흐르는 애니메이션 효과를 표현할 수 있습니다.
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24비트
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}그래픽 색상 깊이를 픽셀당 24비트로 설정합니다. 이 그래픽 모드는 물이 흐르는 애니메이션 효과를 표현할 수 있습니다.
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}열려있는 모든 창 닫기 (고정된 창 제외)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}이 행동을 하기 위한 예상 비용을 알아보려면 누르세요.
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}"컨트롤"키를 이용하는 명령을 위해 사용
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}튜토리얼 영상
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}튜토리얼 영상을 보기 위해 비디오 플레이어를 열기
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}도로, 역 건설 및 차량 구입
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}선로 및 열차
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}차량
|
||||
STR_TUTORIAL_SHIPS :{BLACK}선박과 항구
|
||||
STR_TUTORIAL_CARGO :{BLACK}화물 종류
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}네트워크에서 불러오기
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}네트워크 저장소에서 불러오기
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}네트워크에 저장
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}네트워크 저장소로 게임을 백업
|
||||
|
||||
@@ -5289,3 +5289,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Rudimentum
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Monstrare formulam graphicam / descriptionem tabulae
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Arca instrumentorum directa
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Si vis, arca instrumentorum prima dividitur in partes duas apud margines scrinii
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Magnitudo globulorum
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Magnitudo omnium elementorum interfaciei
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Magnitudo fontis typographici
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Magnitudo omnium fontium typographicorum in ludo
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Confirmare
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Monstrare confirmationem dum struuntur stationes viaeque
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8bpp
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Eligere modum coloris 8bpp; hic sinit colores aquae moventes
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16bpp
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Eligere modum coloris 16bpp (necesse erit programma exire et resumere); hic NON sinit colores aquae moventes
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24bpp
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Eligere modum coloris 24bpp; hic sinit colores aquae moventes
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Claudere omnes fenestras (sed non glutinosas)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Preme ut aestimatio actionis monstretur
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Utendum est ad actiones cum "CTRL"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Rudimenta visifica
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Aperire programma visificum ad rudimenta videnda
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Viae stationesque, emptio vehiculorum
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Ferriviae traminaque
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Vehicula viaria
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Naves navaliaque
|
||||
STR_TUTORIAL_CARGO :{BLACK}Genera onerum
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Legere e nebula
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Arcessere ludum "e nebula" (i.e. ex Interreti)
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Servare in nebula
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Conservare ludum "in nebula" (i.e. in Interreti)
|
||||
|
||||
@@ -4880,3 +4880,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5504,3 +5504,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4967,3 +4967,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4588,3 +4588,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4969,3 +4969,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4878,3 +4878,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5390,3 +5390,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4965,3 +4965,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4918,3 +4918,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5199,3 +5199,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Учебник
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Показывать миникарту / легенду
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Вертикальное меню
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Меню разделено на два вертикальных меню по краям экрата
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Размер кнопок
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Размер элементов интерфейса
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Размер шрифта
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Размер всех шрифтов в игре
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Подтверждать действия
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Показывать окно подтверждения при постройки дорог и станций
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 бит
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Установить глубину цвета в 16 бит на точку. Этот режим поддерживает анимацию воды
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 бит
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Установить глубину цвета в 16 бит на точку. Это потребует перезапуска программы. Этот режим не поддерживает анимацию воды
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 бит
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Установить глубину цвета в 24 бит на точку. Этот режим поддерживает анимацию воды
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Закрыть все открытые окна (кроме закреплённых)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Использовать в качестве кнопки "SHIFT" (оценка стоимости)
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Использовать в качестве кнопки "CTRL"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Учебные видео
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Открыть видеоплеер для просмотра учебного видео
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Постройка дорог и терминалов, покупка автомобилей
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Железные дороги и поезда
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Автомобили
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Корабли и пристани
|
||||
STR_TUTORIAL_CARGO :{BLACK}Грузы
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Загрузка из сети
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Загрузить игру из сетевого хранилища
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Сохранение в сети
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Сохранить игру в сетевое хранилище
|
||||
|
||||
@@ -5175,3 +5175,29 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Priručnik
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Prikaži legendu mape / opis simbola na mapi
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Vertikalna alatna traka
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}Glavna alatna traka je podeljena na dve okomite alatne trake na rubovima ekrana
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Veličina dugmeta
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Veličina svih elemenata korisničkog interfejsa
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Veličina slova
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Veličina svih slova u igri
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Potvrdi akcije
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Prikaži dijalog potvrde pri gradnji drumova i stanica
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Zatvori sve otvorene prozore (osim zakačenih)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Pritisnite za dobivanje procene troškova odabrane akcije
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Koristite za sve akcije za koje se koristi tipka "CTRL"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Video za učenje
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Otvori video plejer za gledanje videa za učenje
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Gradnja cesta i stanica, kupovina vozila
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Šine i vozovi
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Drumska vozila
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Brodovi i dokovi
|
||||
STR_TUTORIAL_CARGO :{BLACK}Tip tereta
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Učitaj igru sa mreže
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Učitaj igru sa mrežne pohrane podataka
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Spremi igru na mrežu
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Spremi igru na mrežu
|
||||
|
||||
@@ -4964,3 +4964,35 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}教程
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}在地图上显示图例/描述
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}垂直工具栏
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}将主工具栏分为屏幕两侧的两个垂直工具栏
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}按键大小
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}用户界面大小
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}字体大小
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}游戏字体大小
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}确认操作
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}建立道路和车站时显示确认对话框
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bit
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}将视频颜色深度设置为8位像素,此模式支持水面动态涟漪
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bit
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}将视频颜色深度设置为16位像素,这需要重新启动,此模式不支持水面动态涟漪
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bit
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}将视频颜色深度设置为24位像素,此模式支持水面动态涟漪
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}关闭所有打开的窗口(已固定的窗口除外)
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}按住显示预计费用
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}将其用于“CTRL”键的操作
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}教程视频
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}使用视频播放器观看教程视频
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}建设道路和车站,购买车辆
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}铁路和火车
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}公路车辆
|
||||
STR_TUTORIAL_SHIPS :{BLACK}船只和码头
|
||||
STR_TUTORIAL_CARGO :{BLACK}货物类型
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}读取云端存档
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}从云端储存读取游戏
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}保存到云端储存
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}备份游戏到云端储存
|
||||
|
||||
@@ -5033,3 +5033,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5162,3 +5162,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4967,3 +4967,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -127,7 +127,11 @@ STR_QUANTITY_TOFFEE :{WEIGHT_LONG} d
|
||||
STR_QUANTITY_BATTERIES :{COMMA} pila{P "" s}
|
||||
STR_QUANTITY_PLASTIC :{VOLUME_LONG} de plásticos
|
||||
STR_QUANTITY_FIZZY_DRINKS :{COMMA} refresco{P "" s}
|
||||
<<<<<<< HEAD
|
||||
STR_QUANTITY_N_A :Ninguna
|
||||
=======
|
||||
STR_QUANTITY_N_A :N/A
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
# Two letter abbreviation of cargo name
|
||||
STR_ABBREV_NOTHING :
|
||||
@@ -301,7 +305,11 @@ STR_SORT_BY_WAITING_TOTAL :Cargamento tota
|
||||
STR_SORT_BY_WAITING_AVAILABLE :Cargamento disponible en espera
|
||||
STR_SORT_BY_RATING_MAX :Valoración más alta de cargamento
|
||||
STR_SORT_BY_RATING_MIN :Valoración más baja de cargamento
|
||||
<<<<<<< HEAD
|
||||
STR_SORT_BY_ENGINE_ID :Id. de locomotora (orden clásico)
|
||||
=======
|
||||
STR_SORT_BY_ENGINE_ID :EngineID (classic sort)Id. locomotora (orden clásico)
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_SORT_BY_COST :Costo
|
||||
STR_SORT_BY_POWER :Potencia
|
||||
STR_SORT_BY_TRACTIVE_EFFORT :Fuerza de tracción
|
||||
@@ -379,7 +387,11 @@ STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configuración
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opciones de transparencia
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nombres de pueblos
|
||||
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nombres de estaciones
|
||||
<<<<<<< HEAD
|
||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar puestos guías
|
||||
=======
|
||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar puntos guías
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Mostrar carteles propios
|
||||
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Mostrar carteles y nombres del competidor
|
||||
STR_SETTINGS_MENU_FULL_ANIMATION :Animación completa
|
||||
@@ -893,7 +905,11 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecci
|
||||
|
||||
############ start of currency region
|
||||
STR_GAME_OPTIONS_CURRENCY_GBP :Libra británica (GBP)
|
||||
<<<<<<< HEAD
|
||||
STR_GAME_OPTIONS_CURRENCY_USD :Dólar americano (USD)
|
||||
=======
|
||||
STR_GAME_OPTIONS_CURRENCY_USD :Dólar estadounidense (USD)
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_GAME_OPTIONS_CURRENCY_EUR :Euro (EUR)
|
||||
STR_GAME_OPTIONS_CURRENCY_JPY :Yen japonés (¥)
|
||||
STR_GAME_OPTIONS_CURRENCY_ATS :Chelín austríaco (ATS)
|
||||
@@ -1008,7 +1024,11 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}El modo
|
||||
# Custom currency window
|
||||
|
||||
STR_CURRENCY_WINDOW :{WHITE}Moneda personalizada
|
||||
<<<<<<< HEAD
|
||||
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Tasa de cambio: {ORANGE}{CURRENCY_LONG} = £ {COMMA}
|
||||
=======
|
||||
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Tasa de cambio: {ORANGE} {CURRENCY_LONG} = £ {COMMA}
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Reducir el valor de la moneda por una libra (£)
|
||||
STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Incrementar el valor de la moneda por una libra (£)
|
||||
STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Ajustar el valor de cambio de la moneda por una Libra (£)
|
||||
@@ -1027,7 +1047,11 @@ STR_CURRENCY_SET_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Establec
|
||||
STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Cambiar a euro antes
|
||||
STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Cambiar a euro después
|
||||
|
||||
<<<<<<< HEAD
|
||||
STR_CURRENCY_PREVIEW :{LTBLUE}Vista previa: {ORANGE}{CURRENCY_LONG}
|
||||
=======
|
||||
STR_CURRENCY_PREVIEW :{LTBLUE}Vista previa: {ORANGE} {CURRENCY_LONG}
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 libras (£) en la moneda
|
||||
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Cambiar parámetro de moneda personalizada
|
||||
|
||||
@@ -1097,11 +1121,19 @@ STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plegar t
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no hay explicación disponible)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor predeterminado: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de opción: {ORANGE}{STRING}
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_TYPE_CLIENT :Opción de cliente (no se almacena en partidas guardadas, afecta a todas las partidas)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_MENU :Opción de partida (se almacena en las partidas guardadas, afecta solamente a nuevas partidas)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Opción de partida (almacenada en la partida guardada, afecta solamente a la partida actual)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Opción de empresa (se almacena en las partidas guardadas, afecta solamente a las nuevas partidas)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empresa (almacenada en la partida guardada, afecta solamente a la empresa actual)
|
||||
=======
|
||||
STR_CONFIG_SETTING_TYPE_CLIENT :Opción de cliente (no se almacena en partidas guardadas, afecta todas las partidas)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_MENU :Opción de partida (se almacena en las partidas guardadas, afecta solamente partidas nuevas)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Opción de partida (almacenada en la partida guardada, afecta solamente la partida actual)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Opción de empresa (se almacena en las partidas guardadas, afecta solamente las partidas nuevas)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empresa (almacenada en la partida guardada, afecta solamente la empresa actual)
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoría:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
||||
@@ -1114,11 +1146,19 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Opciones con un
|
||||
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringir la lista a ciertos tipos de opciones
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Todos los tipos de opciones
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Opciones de cliente (no se almacena en partidas guardadas, afecta a todas las partidas)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Opciones de juego (se almacena en las partidas guardadas, afecta solamente a partidas nuevas)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Opciones de juego (se almacena en las partidas guardadas, afecta solamente a la partida actual)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Opciones de empresa (se almacena en las partidas guardadas, afecta solamente a partidas nuevas)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Opciones de empresa (se almacena en las partidas guardadas, afecta solamente a la empresa actual)
|
||||
=======
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Opciones de cliente (no se almacena en partidas guardadas, afecta todas las partidas)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Opciones de juego (se almacena en las partidas guardadas, afecta solamente partidas nuevas)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Opciones de juego (se almacena en las partidas guardadas, afecta solamente la partida actual)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Opciones de empresa (se almacena en las partidas guardadas, afecta solamente partidas nuevas)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Opciones de empresa (se almacena en las partidas guardadas, afecta solamente la empresa actual)
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Mostrar todos los resultados por opción de configuración{}{SILVER}Categoría {BLACK}a {WHITE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Mostrar todos los resultados por opción de configuración{}{SILVER}Tipo {BLACK}a {WHITE}Todos los tipos de opción
|
||||
STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Mostrar todos los resultados por opción de configuración{}{SILVER}Categoría {BLACK}a {WHITE}{STRING} {BLACK}y {SILVER}Tipo {BLACK}a {WHITE}Todos los tipos de opción
|
||||
@@ -1148,7 +1188,11 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Costos de opera
|
||||
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Nivel de los costos de mantenimiento y operación de vehículos e infraestructura
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidad de construcción: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Restringir la velocidad de las acciones de construcción de jugadores no humanos
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Descomposturas de vehículos: {STRING}
|
||||
=======
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Averías de vehículos: {STRING}
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controlar cada cuánto los vehículos con poco mantenimiento sufren fallas
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador de subsidio: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Establecer cuánto se paga por subsidios conectados
|
||||
@@ -1161,7 +1205,11 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Si se activa, l
|
||||
STR_CONFIG_SETTING_DISASTERS :Desastres: {STRING}
|
||||
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Desastres que ocasionalmente pueden bloquear o destruir vehículos o infraestructura
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL :Actitud de los ayuntamientos ante restructuraciones hechas en sus zonas: {STRING}
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :En qué medida el ruido y el daño ambiental causado por las empresas afectan su evaluación y futuras acciones de construcción en las mismas zonas
|
||||
=======
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Medida en que el ruido y el daño ambiental causado por las empresas afectan su evaluación y futuras acciones de construcción en las mismas zonas
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Elevación máxima del mapa: {STRING}
|
||||
STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Elevación máxima que las montañas pueden tener en el mapa
|
||||
@@ -1230,7 +1278,11 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas las vista
|
||||
STR_CONFIG_SETTING_BRIBE :Permitir sobornos al ayuntamiento: {STRING}
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :Las empresas pueden tratar de sobornar a los ayuntamientos. Si el soborno es descubierto por un inspector, la empresa no podrá realizar actividades en la localidad durante seis meses
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir adquirir los derechos de transporte exclusivos: {STRING}
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa adquiere los derechos de transporte exclusivos en un pueblo, las estaciones de la competencia (pasajeros o cargamento) no recibirán nada para transportar durante un año
|
||||
=======
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa adquiere los derechos de transporte exclusivos en un pueblo, las estaciones de la competencia (de pasajeros o carga) no recibirán nada que entregar durante un año
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir la construcción de nuevos edificios: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Las empresas aportan dinero a los ayuntamientos para que construyan nuevas casas y edificios
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir el pago de la reconstrucción de las carreteras locales: {STRING}
|
||||
@@ -1290,7 +1342,11 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosor de las l
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grosor de las líneas en las gráficas. Una línea fina es más precisa, una línea más gruesa es más fácil de distinguir
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING}
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Los terrenos definen mapas con diferentes tipos de cargamentos y requisitos de crecimiento para los pueblos. Es posible modificarlos empleando NewGRF y scripts de juego
|
||||
=======
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Los terrenos definen mapas con diferentes tipos de carga y requisitos de crecimiento para los pueblos. Es posible modificarlos empleando NewGRF y scripts de juego
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR :Generador de terreno: {STRING}
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :El generador 'Original' depende de los gráficos base y crea formas de terreno fijas. 'TerraGenesis' es un generador basado en Ruido Perlin que permite un mayor control de configuración
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
|
||||
@@ -1473,8 +1529,13 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de ma
|
||||
STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevas aeronaves, en caso de no definirse otro explícitamente
|
||||
STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantenimiento predeterminado para barcos: {STRING}
|
||||
STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevos barcos, en caso de no definirse otro explícitamente
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento si las descomposturas están desactivadas: {STRING}
|
||||
STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, los vehículos no recibirán mantenimiento si no pueden descomponerse
|
||||
=======
|
||||
STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento si las averías están desactivadas: {STRING}
|
||||
STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, los vehículos no recibirán mantenimiento si no pueden averiarse
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad para vagones: {STRING}
|
||||
STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Al activarse, se tienen en cuenta los límites de velocidad de los vagones para decidir la máxima velocidad de un tren
|
||||
STR_CONFIG_SETTING_DISABLE_ELRAILS :Desactivar ferrocarriles eléctricos: {STRING}
|
||||
@@ -1522,8 +1583,13 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activar econom
|
||||
STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Al activarse, habrá cambios de producción en las industrias más frecuentemente y en escala menor. Si se usa un NewGRF con industrias adicionales esta opción generalmente no tiene efecto
|
||||
STR_CONFIG_SETTING_ALLOW_SHARES :Permitir comprar acciones de otras empresas: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Al activarse, se pueden comprar y vender acciones de otras empresas. Las acciones de una empresa solamente estarán disponibles cuando la empresa cumpla una edad determinada
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje de la utilidad total a pagar por transferencias de cargamento: {STRING}
|
||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de utilidad cedida a los transportes intermedios en sistemas de transferencias de cargamento, dando un mayor control sobre la utilidad de cada vehículo
|
||||
=======
|
||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje de la utilidad total a pagar por transferencias de carga: {STRING}
|
||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de utilidad cedida a los transportes intermedios en sistemas de transferencia de carga, dando un mayor control sobre la utilidad de cada vehículo
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Al arrastrar, colocar señales cada: {STRING}
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Distancia de separación entre señales hasta topar con algún obstáculo (otra señal, un desvío, etc.) al instalarlas mediante arrastre con el ratón
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} casilla{P 0 "" s}
|
||||
@@ -1564,7 +1630,11 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, diseño urbano personalizado
|
||||
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Crecimiento de árboles durante la partida: {STRING}
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar la aparición aleatoria de árboles durante la partida. Esto puede afectar a industrias que dependen del crecimiento de árboles, como los aserraderos
|
||||
=======
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar la aparición aleatoria de árboles durante la partida. Esto puede afectar industrias que dependen del crecimiento de árboles, como los aserraderos
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ninguno {RED}(inutiliza aserraderos)
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Solo en selva
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Cualquier parte
|
||||
@@ -1623,7 +1693,11 @@ STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Asimétrica' s
|
||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisión de la distribución: {STRING}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Si el valor es alto, se requerirá mayor tiempo para calcular la gráfica de distribución (si se lleva demasiado tiempo, se notará desfase en el juego). Si es muy bajo, la distribución será imprecisa, pudiendo hacer que el cargamento no vaya al lugar indicado
|
||||
STR_CONFIG_SETTING_DEMAND_DISTANCE :Efecto de la distancia en la demanda: {STRING}
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Con un valor diferente a 0, la distancia entre la estación de origen de cierto cargamento y una posible estación de destino afectará a la cantidad de cargamento que se envíe entre ambas. Cuanto más lejos estén entre sí, menos cargamento se enviará. Cuanto mayor sea el valor de esta opción, menos cargamento se enviará a estaciones distantes en favor de estaciones cercanas
|
||||
=======
|
||||
STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Con un valor diferente a 0, la distancia entre la estación de origen de cierta carga y una posible estación de destino afectará la cantidad de cargamento que se envíe entre ambas. Cuanto más lejos estén entre sí, menos cargamento se enviará. Cuanto mayor sea el valor de esta opción, menos cargamento se enviará a estaciones distantes en favor de estaciones cercanas
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE :Cantidad de cargamento a devolver en modo simétrico: {STRING}
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Establecer un valor menor de 100% hará que la distribución simétrica de cargamento sea más asimétrica. Se enviará menos cargamento de regreso forzosamente si una cantidad determinada es enviada a una estación. Si se fija a 0%, la distribución simétrica será como una distribución asimétrica
|
||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Nivel de saturación de rutas cortas antes de cambiar a rutas de mayor capacidad: {STRING}
|
||||
@@ -1685,7 +1759,11 @@ STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Ambient
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoridades
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Pueblos
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrias
|
||||
<<<<<<< HEAD
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribución de cargamento
|
||||
=======
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribución de carga
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_CONFIG_SETTING_AI :{ORANGE}Competidores
|
||||
STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jugadores no humanos
|
||||
|
||||
@@ -1762,7 +1840,10 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Revisar
|
||||
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostrar configuración de scripts
|
||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Salir de 'OpenTTD'
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
STR_INTRO_BASESET :{BLACK}A los gráficos base elegidos les hace falta {NUM} spirte{P "" s}. Necesitan actualizarse.
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_INTRO_TRANSLATION :{BLACK}A esta traducción le falta{P 0 "" n} {NUM} cadena{P "" s}. Considera ayudar a mejorar OpenTTD convirtiéndote en traductor. Consulta el archivo readme.txt para más detalles.
|
||||
|
||||
# Quit window
|
||||
@@ -2272,7 +2353,11 @@ STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Activar
|
||||
STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Activar o desactivar transparencia para árboles. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Activar o desactivar transparencia para casas. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Activar o desactivar transparencia para industrias. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
<<<<<<< HEAD
|
||||
STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Activar o desactivar transparencia para edificios como estaciones, depósitos o puestos guías. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
=======
|
||||
STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Activar o desactivar transparencia para edificios como estaciones, depósitos o puntos guías. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Activar o desactivar transparencia para puentes. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Activar o desactivar transparencia para estructuras como faros o antenas. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Activar o desactivar transparencia para catenaria. Ctrl+Clic para excluir de tecla rápida 'X'
|
||||
@@ -2303,7 +2388,11 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Provee:
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Ampliar estación
|
||||
STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Construir aparte
|
||||
|
||||
<<<<<<< HEAD
|
||||
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir puestos guías
|
||||
=======
|
||||
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir puntos guías
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir aparte
|
||||
|
||||
# Rail construction toolbar
|
||||
@@ -2333,8 +2422,13 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientac
|
||||
STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Elegir la orientación del depósito de trenes
|
||||
|
||||
# Rail waypoint construction window
|
||||
<<<<<<< HEAD
|
||||
STR_WAYPOINT_CAPTION :{WHITE}Puesto guía
|
||||
STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Elegir el tipo de puesto guía
|
||||
=======
|
||||
STR_WAYPOINT_CAPTION :{WHITE}Punto guía
|
||||
STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Elegir el tipo de punto guía
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
# Rail station construction window
|
||||
STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selección de estación
|
||||
@@ -2351,7 +2445,11 @@ STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Mostrar
|
||||
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Construir el tipo de estación elegida
|
||||
|
||||
STR_STATION_CLASS_DFLT :Estación predeterminada
|
||||
<<<<<<< HEAD
|
||||
STR_STATION_CLASS_WAYP :Puestos guías
|
||||
=======
|
||||
STR_STATION_CLASS_WAYP :Puntos guías
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
# Signal window
|
||||
STR_BUILD_SIGNAL_CAPTION :{WHITE}Selección de señales
|
||||
@@ -2432,7 +2530,11 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construi
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir esclusa. Mayús muestra una estimación del precio
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir astillero (para comprar y dar mantenimiento a barcos). Mayús muestra una estimación del precio
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir muelles. Ctrl activa la ampliación de estaciones. Mayús muestra una estimación del precio
|
||||
<<<<<<< HEAD
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar boya para utilizar como puesto guía marítimo. Mayús muestra una estimación del precio
|
||||
=======
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar boya para utilizar como punto guía marítimo. Mayús muestra una estimación del precio
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir acueducto. Mayús muestra una estimación del precio
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definir cuerpo de agua.{}Crea un canal, a menos que se pulse Ctrl en un área al nivel del mar, en cuyo caso se inundarán los alrededores
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar ríos
|
||||
@@ -2591,7 +2693,10 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nombre d
|
||||
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargamento recibido: {LTBLUE}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de vía: {LTBLUE}{STRING}
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límite de velocidad de ferrocarril: {LTBLUE}{VELOCITY}
|
||||
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Límite de velocidad de carretera: {LTBLUE}{VELOCITY}
|
||||
|
||||
@@ -2604,6 +2709,31 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos
|
||||
STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Terreno nevado
|
||||
STR_LAI_CLEAR_DESCRIPTION_DESERT :Desierto
|
||||
|
||||
<<<<<<< HEAD
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK :Vía de {STRING}
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vía de {STRING} con señales de bloqueo
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vía de {STRING} con señales de entrada
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Vía de {STRING} con señales de salida
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Vía de {STRING} con señales de combo
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Vía de {STRING} con señales de ruta
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Vía de {STRING} con señales de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Vía de {STRING} con señales de bloqueo y señales de entrada
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Vía de {STRING} con señales de bloqueo y señales de salida
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Vía de {STRING} con señales de bloqueo y señales combo
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Vía de {STRING} con señales de bloqueo y señales de ruta
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Vía de {STRING} con señales de bloqueo y señales de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Vía de {STRING} con señales de entrada y señales de salida
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Vía de {STRING} con señales de entrada y señales combo
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Vía de {STRING} con señales de entrada y señales de ruta
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Vía de {STRING} con señales de entrada y señales de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Vía de {STRING} con señales de salida y señales de combo
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Vía de {STRING} con señales de salida y señales de ruta
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Vía de {STRING} con señales de salida y señales de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vía de {STRING} con señales de combo y señales de ruta
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vía de {STRING} con señales de combo y señales de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vía de {STRING} con señales de ruta y señales de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito ({STRING})
|
||||
=======
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK :Vías férreas
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Vías férreas con señales de bloqueo
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Vías férreas con señales de entrada
|
||||
@@ -2627,6 +2757,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Vías férreas
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Vías férreas con señales combo y de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Vías férreas con señales de ruta y de ruta de un solo sentido
|
||||
STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Depósito (trenes)
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_LAI_ROAD_DESCRIPTION_ROAD :Carretera
|
||||
STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Carretera con alumbrado
|
||||
@@ -2649,7 +2780,11 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estación de ca
|
||||
STR_LAI_STATION_DESCRIPTION_BUS_STATION :Parada de autobús
|
||||
STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Muelle
|
||||
STR_LAI_STATION_DESCRIPTION_BUOY :Boya
|
||||
<<<<<<< HEAD
|
||||
STR_LAI_STATION_DESCRIPTION_WAYPOINT :puesto guía
|
||||
=======
|
||||
STR_LAI_STATION_DESCRIPTION_WAYPOINT :Punto guía
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_LAI_WATER_DESCRIPTION_WATER :Agua
|
||||
STR_LAI_WATER_DESCRIPTION_CANAL :Canal
|
||||
@@ -2690,7 +2825,11 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied
|
||||
STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD
|
||||
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados
|
||||
STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV}
|
||||
<<<<<<< HEAD
|
||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2016, el equipo de OpenTTD
|
||||
=======
|
||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2017, el equipo de OpenTTD
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
# Save/load game/scenario
|
||||
STR_SAVELOAD_SAVE_CAPTION :{WHITE}Guardar partida
|
||||
@@ -2816,7 +2955,11 @@ STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Actualiz
|
||||
STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Actualizar los archivos NewGRF que lo requieran a la versión más reciente
|
||||
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Lista de archivos NewGRF instalados
|
||||
|
||||
<<<<<<< HEAD
|
||||
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Establecer parámetros
|
||||
=======
|
||||
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Parámetros
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parámetros
|
||||
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Cambiar paleta
|
||||
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Cambia la paleta del NewGRF elegido.{}Esto es necesario cuando los gráficos de un NewGRF se ven de color rosa durante el juego
|
||||
@@ -2909,6 +3052,11 @@ STR_NEWGRF_ERROR_INVALID_ID :Intento de usar
|
||||
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contiene un sprite con errores. Todos los sprites con errores se muestran como un símbolo de interrogación rojo (?)
|
||||
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contiene múltiples entradas de Acción 8 (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_READ_BOUNDS :La lectura excedió el límite de pseudo-sprite (sprite {3:NUM})
|
||||
<<<<<<< HEAD
|
||||
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}A los gráficos base actualmente en uso les faltan algunos sprites.{}Los gráficos base deben ser actualizados
|
||||
STR_NEWGRF_ERROR_MISSING_SPRITES_UNSTABLE :{WHITE}A los gráficos base actualmente en uso les faltan algunos sprites.{}Los gráficos base deben ser actualizados.{}Dado que esta es una {YELLOW}versión de desarrollo de OpenTTD{WHITE}, es posible que también se requiera una {YELLOW}versión de desarrollo de los gráficos base{WHITE}
|
||||
=======
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF solicitados no disponibles (sprite {3:NUM})
|
||||
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} fue desactivado por {STRING}
|
||||
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites no válido o desconocido (sprite {3:NUM})
|
||||
@@ -3172,12 +3320,21 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}No permi
|
||||
|
||||
# Waypoint/buoy view window
|
||||
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
|
||||
<<<<<<< HEAD
|
||||
STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en ubicación del puesto guía. Ctrl+Clic abre una ventana de vista en dicha ubicación
|
||||
STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambiar nombre de puesto guía
|
||||
STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar la vista en la ubicación de la boya. Ctrl+Clic abre una ventana de vista en dicha ubicación
|
||||
STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Cambiar nombre de boya
|
||||
|
||||
STR_EDIT_WAYPOINT_NAME :{WHITE}Cambiar nombre de puesto guía
|
||||
=======
|
||||
STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en ubicación del punto guía. Ctrl+Clic abre una ventana de vista en dicha ubicación
|
||||
STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambiar nombre de punto guía
|
||||
STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar la vista en la ubicación de la boya. Ctrl+Clic abre una ventana de vista en dicha ubicación
|
||||
STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Cambiar nombre de boya
|
||||
|
||||
STR_EDIT_WAYPOINT_NAME :{WHITE}Cambiar nombre de punto guía
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
# Finances window
|
||||
STR_FINANCES_CAPTION :{WHITE}Finanzas de {COMPANY} {BLACK}{COMPANY_NUM}
|
||||
@@ -3295,8 +3452,14 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requiere
|
||||
STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING}
|
||||
############ range for requires ends
|
||||
|
||||
<<<<<<< HEAD
|
||||
############ range for produces starts
|
||||
STR_INDUSTRY_VIEW_WAITING_FOR_PROCESSING :{BLACK}Cargamento esperando a ser procesado:
|
||||
STR_INDUSTRY_VIEW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO_LONG}{STRING}{BLACK}
|
||||
=======
|
||||
|
||||
############ range for produces starts
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}
|
||||
STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING}
|
||||
############ range for produces ends
|
||||
@@ -3557,10 +3720,17 @@ STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} cuando
|
||||
STR_REPLACE_VEHICLES_STOP :{BLACK}Dejar de reemplazar vehículos
|
||||
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Presionar este botón para detener el reemplazo del vehículo situado a la izquierda
|
||||
|
||||
<<<<<<< HEAD
|
||||
STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Reemplazando: {ORANGE}{STRING}
|
||||
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Cambiar entre reemplazo de vagón y locomotora
|
||||
STR_REPLACE_ENGINES :Locomotoras
|
||||
STR_REPLACE_WAGONS :Vagones
|
||||
=======
|
||||
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Cambiar entre reemplazo de vagón y locomotora
|
||||
STR_REPLACE_ENGINES :Locomotoras
|
||||
STR_REPLACE_WAGONS :Vagones
|
||||
STR_REPLACE_ALL_RAILTYPE :Todos los vehículos ferroviarios
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_REPLACE_HELP_RAILTYPE :{BLACK}Elegir el tipo de vías férreas para las que se desea reemplazar locomotoras
|
||||
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostrar el vehículo que reemplazará al otro de la izquierda
|
||||
@@ -3619,7 +3789,11 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Activida
|
||||
STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Cargando/Descargando
|
||||
STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Partiendo
|
||||
STR_VEHICLE_STATUS_CRASHED :{RED}¡Accidentado!
|
||||
<<<<<<< HEAD
|
||||
STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Descompuesto
|
||||
=======
|
||||
STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Averiado
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_VEHICLE_STATUS_STOPPED :{RED}Detenido
|
||||
STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Deteniéndose, {VELOCITY}
|
||||
STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Sin potencia
|
||||
@@ -3658,7 +3832,11 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {L
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potencia: {LTBLUE}{POWER}{BLACK} Velocidad máx.: {LTBLUE}{VELOCITY} {BLACK}F.T. máx.: {LTBLUE}{FORCE}
|
||||
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Utilidad este año: {LTBLUE}{CURRENCY_LONG} (año pasado: {CURRENCY_LONG})
|
||||
<<<<<<< HEAD
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Descomposturas desde el último mantenimiento: {LTBLUE}{COMMA}
|
||||
=======
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Averías desde el último mantenimiento: {LTBLUE}{COMMA}
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Construido: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG}
|
||||
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacidad: {LTBLUE}Ninguna{STRING}
|
||||
@@ -3773,7 +3951,11 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Cargamento disp
|
||||
|
||||
STR_ORDER_SERVICE :{BLACK}Mantenimiento
|
||||
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir siempre
|
||||
<<<<<<< HEAD
|
||||
STR_ORDER_DROP_SERVICE_DEPOT :Mantenimiento si es necesario
|
||||
=======
|
||||
STR_ORDER_DROP_SERVICE_DEPOT :Mantto. si es necesario
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_ORDER_DROP_HALT_DEPOT :Detenerse
|
||||
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ignorar esta orden a menos que el mantenimiento sea necesario
|
||||
|
||||
@@ -3815,7 +3997,11 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ir al depósito
|
||||
STR_ORDER_GO_TO_NEAREST_HANGAR :Ir al hangar más cercano
|
||||
STR_ORDER_CONDITIONAL :Salto de orden condicional
|
||||
STR_ORDER_SHARE :Compartir órdenes
|
||||
<<<<<<< HEAD
|
||||
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden marcada o añadirla al final de la lista. Ctrl+Clic sobre una estación para establecer la orden a 'Cargar máx. cualquier carga', sobre un puesto guía para 'Sin paradas' y sobre un depósito para 'Mantenimiento' (esta última desactivará el mantenimiento automático). Ctrl+Clic sobre otro vehículo para hacer que ambos compartan siempre las mismas órdenes. Clic sobre un vehículo para copiar sus órdenes (sin compartirlas).
|
||||
=======
|
||||
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden marcada o añadirla al final de la lista. Ctrl+Clic sobre una estación para establecer la orden a 'Cargar máx. cualquier carga', sobre un punto guía para 'Sin paradas' y sobre un depósito para 'Mantenimiento' (esta última desactivará el mantenimiento automático). Ctrl+Clic sobre otro vehículo para hacer que ambos compartan siempre las mismas órdenes. Clic sobre un vehículo para copiar sus órdenes (sin compartirlas).
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Ver todos los vehículos que comparten el mismo itinerario
|
||||
|
||||
@@ -4240,6 +4426,17 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Primero
|
||||
STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Primero se debe demoler el aeropuerto
|
||||
|
||||
# Waypoint related errors
|
||||
<<<<<<< HEAD
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Se amplía más de un puesto guía existente
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Demasiado cerca de otro puesto guía
|
||||
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}No se puede construir el puesto guía aquí...
|
||||
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}No se puede colocar la boya aquí...
|
||||
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No se puede cambiar nombre del puesto guía...
|
||||
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}No se puede quitar el puesto guía de aquí...
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Primero se debe retirar el puesto guía
|
||||
=======
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Se amplía más de un punto guía existente
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Demasiado cerca de otro punto guía
|
||||
|
||||
@@ -4249,6 +4446,7 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No se pu
|
||||
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}No se puede quitar el punto guía de aquí...
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Primero se debe retirar el punto guía
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... una boya obstaculiza
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... ¡boya en uso por otra empresa!
|
||||
|
||||
@@ -4860,7 +5058,11 @@ STR_FORMAT_BUOY_NAME_SERIAL :Boya {TOWN} #{C
|
||||
STR_FORMAT_COMPANY_NUM :(Empresa {COMMA})
|
||||
STR_FORMAT_GROUP_NAME :Grupo {COMMA}
|
||||
STR_FORMAT_INDUSTRY_NAME :{1:STRING}, {0:TOWN}
|
||||
<<<<<<< HEAD
|
||||
STR_FORMAT_WAYPOINT_NAME :Puesto guía {TOWN}
|
||||
=======
|
||||
STR_FORMAT_WAYPOINT_NAME :Punto guía, {TOWN}
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
STR_FORMAT_WAYPOINT_NAME_SERIAL :Puesto guía #{1:COMMA}, {0:TOWN}
|
||||
|
||||
STR_FORMAT_DEPOT_NAME_TRAIN :Depósito de trenes, {TOWN}
|
||||
@@ -4968,3 +5170,38 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
<<<<<<< HEAD
|
||||
|
||||
# Android strings
|
||||
STR_ABOUT_MENU_TUTORIAL :{BLACK}Guía de cómo jugar
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LEGEND :{BLACK}Mostrar leyenda o descripción de símbolos del mapa
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :{BLACK}Barra de herramientas vertical
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :{BLACK}La barra de herramientas principal se divide en dos barras verticales laterales
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE :{BLACK}Tamaño de botones
|
||||
STR_CONFIG_SETTING_BUTTON_SIZE_TOOLTIP :{BLACK}Tamaño de elementos de la interfaz
|
||||
STR_CONFIG_SETTING_FONT_SIZE :{BLACK}Tamaño de letra
|
||||
STR_CONFIG_SETTING_FONT_SIZE_TOOLTIP :{BLACK}Tamaño de letra de los elementos del juego
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION :{BLACK}Confirmar acciones
|
||||
STR_CONFIG_SETTING_BUILD_CONFIRMATION_HELPTEXT :{BLACK}Mostrar diálogo de confirmación al construir carreteras y estaciones
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP :{BLACK}8 bits
|
||||
STR_CONFIG_SETTING_VIDEO_8BPP_HELPTEXT :{BLACK}Establecer profundidad de color de video a 8 bits por pixel. Este modo de video soporta animación de agua
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP :{BLACK}16 bits
|
||||
STR_CONFIG_SETTING_VIDEO_16BPP_HELPTEXT :{BLACK}Establecer profundidad de color de video a 16 bits por pixel. Requiere reinicio. Este modo de video no soporta animación de agua
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP :{BLACK}24 bits
|
||||
STR_CONFIG_SETTING_VIDEO_24BPP_HELPTEXT :{BLACK}Establecer profundidad de color de video a 24 bits por pixel. Este modo de video soporta animación de agua
|
||||
STR_TABLET_CLOSE_TOOLTIP :{BLACK}Cerrar todas las ventanas abiertas, salvo las que estén fijas
|
||||
STR_TABLET_SHIFT_TOOLTIP :{BLACK}Pulsar para ver una estimación del precio al realizar una acción
|
||||
STR_TABLET_CTRL_TOOLTIP :{BLACK}Emplearlo para acciones que utilizan la tecla "Ctrl"
|
||||
STR_TUTORIAL_WINDOW_TITLE :{BLACK}Videos de guías de juego
|
||||
STR_TUTORIAL_WINDOW_TOOLTIP :{BLACK}Abrir reproductor de video para ver guías de juego
|
||||
STR_TUTORIAL_ROADS_AND_STATIONS :{BLACK}Construir carrerteras y estaciones; comprar vehículos
|
||||
STR_TUTORIAL_RAILWAYS :{BLACK}Vías férreas y trenes
|
||||
STR_TUTORIAL_ROAD_VEHICLES :{BLACK}Vehículos de carretera
|
||||
STR_TUTORIAL_SHIPS :{BLACK}Barcos y muelles
|
||||
STR_TUTORIAL_CARGO :{BLACK}Cargamentos
|
||||
STR_SAVELOAD_LOAD_NETWORK_BUTTON :{BLACK}Cargar desde red
|
||||
STR_SAVELOAD_LOAD_NETWORK_TOOLTIP :{BLACK}Cargar partida desde almacenamiento en red
|
||||
STR_SAVELOAD_SAVE_NETWORK_BUTTON :{BLACK}Guardar en red
|
||||
STR_SAVELOAD_SAVE_NETWORK_TOOLTIP :{BLACK}Realizar respaldo en almacenamiento de red
|
||||
=======
|
||||
>>>>>>> d3de08088326415d55ef052dc858053ab4932584
|
||||
|
||||
@@ -4964,3 +4964,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4514,3 +4514,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4874,3 +4874,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4964,3 +4964,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4977,3 +4977,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -5132,3 +5132,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
@@ -4964,3 +4964,5 @@ STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
# Android strings
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user