Merge branch 'master' into jgrpp

# Conflicts:
#	src/newgrf_debug_gui.cpp
#	src/object_cmd.cpp
#	src/object_gui.cpp
pull/507/head
Jonathan G Rennison 1 year ago
commit 3d1b0af8f6

@ -8,3 +8,5 @@ query-filters:
- cpp/world-writable-file-creation
# Basically OpenTTD's coding style for adding things like ..._INVALID to enumerations
- cpp/irregular-enum-init
# Our GUI code tends to use switches for OnClick handlers, DrawWidget, and UpdateWidgetSize. Sometimes GUIs just don't have many elements, but we want to keep consistency.
- cpp/trivial-switch

@ -0,0 +1,48 @@
# Releasing OpenTTD
This guide is for OpenTTD developers/maintainers, to release a new version of OpenTTD.
## Step 0: Branch or Backport
* If this is a beta version release, skip this step.
* If this is an RC1 (first Release Candidate) build, create a new branch `release/nn` where `nn` is the major version number, then apply changes similar to [PR#9573](https://github.com/OpenTTD/OpenTTD/pull/9573). You also need to forwardport the changelog, as in [PR#10113](https://github.com/OpenTTD/OpenTTD/pull/10113).
* Update CMakeLists.txt
* Add a new (empty) AI compatibility script in bin/ai/
* Add the new version to CheckAPIVersion in src/ai/ai_info.cpp + src/game/game_info.cpp
* Add the new version to src/script/api/ai_changelog.hpp + src/script/api/game_changelog.hpp
* Update the version of regression in bin/ai/regression/regression_info.nut
* Add a note to src/saveload/saveload.h about which savegame version is used in the branch.
* If this is a later RC or release build and the release branch already exists, you'll need to backport fixes and language from master to this branch, which were merged after the branch diverged from master. You can use these two helper scripts: https://github.com/OpenTTD/scripts/tree/main/backport
## Step 1: Prepare changelog documentation
1. Update the [changelog](../changelog.txt) with new changes since the last release.
* Changelog entries are typically PR titles, but can be edited to be more helpful without context.
* Don't include fixes to things which haven't previously been released (like fixes to features which are in the same changelog).
* Order the entries by importance: `Feature > Add > Change > Fix`, then numerically by PR number.
2. Create a changelog PR, get approval, and merge.
* For beta releases, target master, otherwise target the release branch.
## Step 2: Prepare website release announcement
1. Go to https://github.com/OpenTTD/website/new/main/_posts and write a new announcement post. See a [previous example](https://github.com/OpenTTD/website/pull/238) for a template.
2. Create a new branch for this post and open a PR for it.
3. Write announcement text for socials like Forum/Discord/Twitter/Reddit and include it in the PR.
4. Create a Steam news image for that post and include it in the PR.
5. Check the website post (preview link via checks page) and make corrections. We usually just use the GitHub web interface for this and squash the result later.
6. Get this PR approved, but do not merge yet.
## Step 3: Make the actual OpenTTD release
1. Go to https://github.com/OpenTTD/OpenTTD/releases/new and create a new tag matching the release number. For the body of the release, see any older release. "Set as a pre-release" for a beta or RC, set as latest for a real release.
2. Merge website PR.
3. Wait for the OpenTTD release checks to be complete.
4. Check that website links to the new release are working and correct, using the [staging website](https://www-staging.openttd.org/).
5. If this is a full release, ask orudge to update the Microsoft Store and TrueBrain to move the release from the "testing" to "default" branch on Steam.
## Step 4: Tell the world
1. Tag and create a website release to trigger the actions that update the website.
2. After the website is live, make announcements on social media. You may need to coordinate with other developers who can make posts on Twitter, Reddit, Steam, and GOG.

@ -305,12 +305,9 @@ void GamelogPrint(GamelogPrintProc *proc)
case GLCT_GRFBUG: {
/* A specific bug in a NewGRF, that could cause wide spread problems, has been noted during the execution of the game. */
GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
switch (lc->grfbug.bug) {
default: NOT_REACHED();
case GBUG_VEH_LENGTH:
buf += seprintf(buf, lastof(buffer), "Rail vehicle changes length outside a depot: GRF ID %08X, internal ID 0x%X", BSWAP32(lc->grfbug.grfid), (uint)lc->grfbug.data);
break;
}
assert (lc->grfbug.bug == GBUG_VEH_LENGTH);
buf += seprintf(buf, lastof(buffer), "Rail vehicle changes length outside a depot: GRF ID %08X, internal ID 0x%X", BSWAP32(lc->grfbug.grfid), (uint)lc->grfbug.data);
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfbug.grfid, nullptr, gm != grf_names.End() ? gm->second.gc : nullptr);
if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
break;

@ -2791,7 +2791,7 @@ STR_AIRPORT_SMALL :Lille
STR_AIRPORT_CITY :By
STR_AIRPORT_METRO :Metropollufthavn
STR_AIRPORT_INTERNATIONAL :International lufthavn
STR_AIRPORT_COMMUTER :Pendler
STR_AIRPORT_COMMUTER :Pendler lufthavn
STR_AIRPORT_INTERCONTINENTAL :Interkontinental
STR_AIRPORT_HELIPORT :Helikopterlandingsplads
STR_AIRPORT_HELIDEPOT :Helikopterværksted

@ -1695,16 +1695,6 @@ STR_ERROR_DEPOT_HAS_WRONG_RAIL_TYPE :{WHITE}车库
STR_ERROR_CANNOT_MODIFY_TRACK_TRAIN_APPROACHING :{WHITE}移动中的火车正在接近...
STR_ERROR_NO_RAIL_STATION :{WHITE}没有火车站...
STR_ERROR_NO_BUS_STATION :{WHITE}没有公交站...
STR_ERROR_NO_TRUCK_STATION :{WHITE}没有货车站...
STR_ERROR_NO_DOCK :{WHITE}没有港口...
STR_ERROR_NO_AIRPORT :{WHITE}没有机场或者直升机场...
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}没有兼容的道路/电车道类型的站点...
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}这里没有适用于铰接式的道路车辆的站点。{}铰接式道路车辆需要一个直通式站点而不是港湾式站点...
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}这架飞机不能在这个直升机场着陆...
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}这架直升机不能在这个机场着陆...
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}这里没有铁道路点...
STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}这里没有公路路点...
STR_ERROR_NO_BUOY :{WHITE}这里没有浮漂...

@ -386,9 +386,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}街を
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}産業を生成します
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}道路を敷設します
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}軌道敷設
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}木を植えます。Shiftキーを押しながら決定すると費用を見積もります
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}木を植えます。Ctrlで斜めに選択できます。Shiftキーを押しながら決定すると費用を見積もります
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}標識を設置します
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}オブジェクトを設置します。Shiftを押しながら決定すると費用を見積もります
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}オブジェクトを設置します。Ctrlで斜めに選択できます。Shiftを押しながら決定すると費用を見積もります
# Scenario editor file menu
###length 7
@ -1622,7 +1622,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :ダイヤに発
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :時刻表に出発・到着の予定時刻を表示します
STR_CONFIG_SETTING_QUICKGOTO :指令の作成を高速化: {STRING}
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :令作成画面を開いたときに規定で「駅を選択」を選択するようにします
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :令作成画面を開いたときに規定で「駅を選択」を選択するようにします
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :デフォルトの線路種類: {STRING}
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :新規ゲーム/ゲームロード直後に選択される線路の種類を指定します。「最初」では最初に開発された種類(普通は非電化の線路)、「最新」では最も新しく開発された種類、「最多」はマップ内で一番使われている種類になります
@ -1928,11 +1928,11 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :分配グラフ
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :グラフの単一要素に関わる再計算にかけられる時間を設定します。再計算が開始されると、この日数のみ実行可能なスレッドが生成されます。この設定が短いと、期日までにスレッドが終了していない可能性が高くなり、終了するまでゲームが停止します(ラグ)。長くした場合、経路が変更された場合に分配が更新されるまでに時間がかかるようになります
STR_CONFIG_SETTING_DISTRIBUTION_PAX :旅客の行先分配法: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :旅客がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう乗客とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう旅客数は独立に決められます。「無効」では行き先別分配をしなくなります
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :旅客がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう乗客とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう旅客数は独立に決められます。「無効」では行き先別分配をしなくなります
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :郵便物の行先分配法: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :郵便がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう郵便とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう郵便数は独立に決められます。「無効」では行き先別分配をしなくなります
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :郵便がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう郵便とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう郵便数は独立に決められます。「無効」では行き先別分配をしなくなります
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :装甲車輸送品の行先分配法: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :装甲車輸送品とは貴重品(温帯)、金(亜寒帯)、ダイヤモンド(亜熱帯)のことです(NewGRFの導入状況よっては変わることがあります)。これらの品目がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう輸送品とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう輸送品数は独立に決められます。「手動」では自動での行き先別分配をしなくなります。亜熱帯・温帯では銀行同士で貴重品のやりとりがあるので「対称」を選択しても問題ありませんが、金やダイヤモンドが銀行から鉱山に送られるようなことはないので、亜寒帯では「非対称」か「手動」にすることをお勧めします。
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :装甲車輸送品とは貴重品(温帯)、金(亜寒帯)、ダイヤモンド(亜熱帯)のことですNewGRFの導入状況よっては変わることがあります。これらの品目がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう輸送品とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう輸送品数は独立に決められます。「手動」では自動での行き先別分配をしなくなります。温帯では銀行同士で貴重品のやりとりがあるので「対称」を選択しても問題ありませんが、金やダイヤモンドが銀行から鉱山に送られるようなことはないので、亜寒帯・亜熱帯では「非対称」か「手動」にすることをお勧めします。
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :一般貨物の行先分配法: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :一般的な貨物がどのように行き先別に分配されるかを設定します。「非対称」ではそれぞれの方向に向かう貨物数はプログラムの任意に決められます。「無効」では行き先別分配をしなくなります。
###length 3
@ -2809,11 +2809,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}地形
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}土地の角を下げます。ドラッグで範囲選択すると最初に選択した土地の高度より一段低い高さに土地をならします。Ctrlで斜めに選択できます。またShiftを押しながら決定すると工事費用を見積もります
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}土地の角を上げます。ドラッグで範囲選択すると最初に選択した土地の高度より一段高い高さに土地をならします。Ctrlで斜めに選択できます。またShiftを押しながら決定すると工事費用を見積もります
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}最初に選択した土地の高さに選択範囲をならします。Ctrlで斜めに選択できます。またShiftを押しながら決定すると工事費用を見積もります
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}将来用に土地を購入します。Shiftを押しながら決定すると費用を見積もります
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}将来用に土地を購入します。Ctrlで斜めに選択できます。Shiftを押しながら決定すると費用を見積もります
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}オブジェクトを配置
STR_OBJECT_BUILD_TOOLTIP :{BLACK}設置するオブジェクトを選択して下さい。Shift+クリックで費用を見積もります
STR_OBJECT_BUILD_TOOLTIP :{BLACK}設置するオブジェクトを選択して下さい。Ctrlで斜めに選択できます。Shift+クリックで費用を見積もります
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}設置するオブジェクトを選びます
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}オブジェクトをプレビューします
STR_OBJECT_BUILD_SIZE :{BLACK}サイズ: {GOLD}{NUM} x {NUM} マス
@ -2825,7 +2825,7 @@ STR_OBJECT_CLASS_TRNS :電波塔
STR_PLANT_TREE_CAPTION :{WHITE}植林
STR_PLANT_TREE_TOOLTIP :{BLACK}植林する樹類を選択します。既に木がある場合は追加で植林されます
STR_TREES_RANDOM_TYPE :{BLACK}ランダムな樹類
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}ランダムな樹類で植林します。Shift+クリックで費用を見積もります
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}ランダムな樹類で植林します。Ctrlで斜めに選択できます。Shift+クリックで費用を見積もります
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}ランダムに広域植林
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}地表全体にランダムに植林します
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}普通
@ -3496,14 +3496,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :独占運送契
STR_LOCAL_AUTHORITY_ACTION_BRIBE :議会を買収
###length 8
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}旅客と貨物を確保する為に、街で新聞広告を実施します。{}より多くの旅客と貨物が自社の交通網を利用するようになります。{}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}旅客と貨物を確保する為に、街でラジオCMを実施します{}街の中心部から中範囲にある駅の評価が一時的に高まります。{}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}旅客と貨物を確保する為に、街でTV-CMを開始します{}街の中心部の大範囲にある駅の評価が一時的に高まります。{}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}街内の道路補修工事に出資します。最高6ヶ月間街中の道路交通が途絶します。{}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}社を称える彫像を建設します{}この街の駅の評価を恒久的に高めます。{}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}市街地の開発に出資します{}街の成長速度が一時的に早まります。{}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}街と一年間の独占運送契約を締結します。{}乗客や貨物はあなたの会社の運送経路のみを使用するようになります。{} 費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}買収を行い、議会内の評判を高めます。注意: 露見した場合は処罰されます{} 費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街で新聞広告を実施します。{}より多くの旅客と貨物が自社の交通網を利用するようになります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街でラジオCMを実施します{}街の中心部から中範囲にある駅の評価が一時的に高まります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街でTV-CMを開始します{}街の中心部の大範囲にある駅の評価が一時的に高まります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}街内の道路補修工事に出資します。{}最高6ヶ月間街中の道路交通が途絶します。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}社を称える彫像を建設します{}この街の駅の評価を恒久的に高めます。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}市街地の開発に出資します{}街の成長速度が一時的に早まります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}街と一年間の独占運送契約を締結します。{}乗客や貨物はあなたの会社の運送経路のみを使用するようになります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}買収を行い、議会内の評判を高めます。注意: 露見した場合は処罰されます{}{POP_COLOUR}費用: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} 目標
@ -4084,7 +4084,7 @@ STR_ENGINE_PREVIEW_AIRCRAFT :航空機
STR_ENGINE_PREVIEW_SHIP :船舶
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}費用: {CURRENCY_LONG} 重量: {WEIGHT_SHORT}{} 最高速度: {VELOCITY} 出力: {POWER}{} 維持費: {CURRENCY_LONG} /年{} 容量: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}価格: {CURRENCY_LONG} 重量: {WEIGHT_SHORT}{}最高速度: {VELOCITY} 出力: {POWER} 最大牽引力: {6:FORCE}{}運用費: {4:CURRENCY_LONG}/年{}収容量 {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}価格: {0:CURRENCY_LONG} 重量: {1:WEIGHT_SHORT}{}最高速度: {2:VELOCITY} 出力: {3:POWER} 最大牽引力: {6:FORCE}{}運用費: {4:CURRENCY_LONG}/年{}収容量 {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}費用: {CURRENCY_LONG} 最高速度: {VELOCITY}{} 容量: {CARGO_LONG}{} 維持費: {CURRENCY_LONG} /年
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}費用: {CURRENCY_LONG} 最高速度: {VELOCITY}{} 航空機の種類: {STRING}{} 容量: {CARGO_LONG}, {CARGO_LONG}{} 維持費: {CURRENCY_LONG}/yr
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}費用: {CURRENCY_LONG} 最高速度: {VELOCITY}{} 航空機の種類: {STRING}{} 容量: {CARGO_LONG}{} 維持費: {CURRENCY_LONG} /年
@ -4401,7 +4401,7 @@ STR_ORDERS_DELETE_BUTTON :{BLACK}削除
STR_ORDERS_DELETE_TOOLTIP :{BLACK}選択した指令を削除します
STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}指令をすべて除去
STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}共有を解除
STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}指令の共有を解除します。Ctrl+クリックで全令を消去します
STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}指令の共有を解除します。Ctrl+クリックで全令を消去します
STR_ORDERS_GO_TO_BUTTON :{BLACK}移動先を選択
STR_ORDER_GO_TO_NEAREST_DEPOT :最寄りの車両庫へ向かう
@ -4518,19 +4518,19 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}始発
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}始発日時を設定します。Ctrl+クリックでは、指令を共有する輸送機器があり、ダイヤが完全に組まれている場合に限り、その総所要時間に基づき、各輸送機器に指定時刻から均等に始発日時を割り付けます
STR_TIMETABLE_CHANGE_TIME :{BLACK}時間を変更
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}選択した指令の行程時間を変更します
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}選択した指令の行程時間を変更します。Ctrl+クリックで全指令に適用します
STR_TIMETABLE_CLEAR_TIME :{BLACK}時刻を消去
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}選択した指令の行程時間を消去します
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}選択した指令の行程時間を消去します。Ctrl+クリックで全指令に適用します
STR_TIMETABLE_CHANGE_SPEED :{BLACK}制限速度を変更
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}選択した移動区間での最高速度を設定します
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}選択した移動区間での最高速度を変更します。Ctrl+クリックですべての移動区間に適用します
STR_TIMETABLE_CLEAR_SPEED :{BLACK}制限速度を撤廃
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}選択した移動区間にある最高速度を撤廃します
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}選択した移動区間にある最高速度を撤廃します。Ctrl+クリックですべての移動区間に適用します
STR_TIMETABLE_RESET_LATENESS :{BLACK}遅延をリセット
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}ダイヤからの遅延量をリセットして、現状を定刻にします
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}ダイヤからの遅延量をリセットして、現状を定刻にします。Ctrl+クリックでグループ内で最も遅延している輸送機器を時間通りにして、その他の輸送機器を早着状態にします
STR_TIMETABLE_AUTOFILL :{BLACK}オートフィル
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}実際に各指令が実行された時の所要時間を収集してダイヤを作成します。Ctrl+クリックでは既存の停車時間は維持して移動時間のみ更新します(輸送機器を上位モデルに置き換えたときに便利です)
@ -5091,6 +5091,9 @@ STR_ERROR_NO_BUS_STATION :{WHITE}バス
STR_ERROR_NO_TRUCK_STATION :{WHITE}荷役所がありません
STR_ERROR_NO_DOCK :{WHITE}埠頭がありません
STR_ERROR_NO_AIRPORT :{WHITE}空港・ヘリポートがありません
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}バスに対応する停留所がありません
STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}路面電車に対応する停留所がありません
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}連結式車両が停まれるバス停がありません。{}路側型バス停が必要です。
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}この飛行機はこのヘリポートに着陸できません
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}このヘリコプターはこの空港に着陸できません
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}中継駅がありません

@ -2358,6 +2358,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(新公司)
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}新建并加入公司
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}这是你
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}这里是游戏的主机
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}服务器管理员允许的当前连接的玩家数量、公司数量和最多公司数量
# Matches ConnectionType
###length 5
@ -3351,6 +3352,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
STR_NEWGRF_ERROR_MSG_WARNING :{RED}警告:{SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_ERROR :{RED}错误:{SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_FATAL :{RED}严重错误:{SILVER}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF "{STRING}"发生了一个错误:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} 不能与 OpenTTD 报告的 TTDPatch 版本兼容。
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} 是为 {2:STRING} 版 TTD 开发的。
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} 应当与 {2:STRING} 配合
@ -5082,6 +5084,16 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}……
STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... 飞机航行距离不足
# Extra messages which go on the third line of errors, explaining why orders failed
STR_ERROR_NO_RAIL_STATION :{WHITE}没有火车站
STR_ERROR_NO_BUS_STATION :{WHITE}没有公交车站
STR_ERROR_NO_DOCK :{WHITE}这里没有码头
STR_ERROR_NO_AIRPORT :{WHITE}没有机场/直升机场
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}没有兼容此道路类型的站点
STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}没有兼容此有轨电车道路类型的站点
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}没有适合铰接式道路车辆的站点.{}铰接式道路车辆需要通过式车站,而不是港湾式车站
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}这架飞机不能降落在这个直升机场
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}这架直升机不能降落在这个机场
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}没有铁路路点
# Timetable related errors
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}不能给车辆编制时间表…

@ -2358,6 +2358,8 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(新公司)
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}創立並加入一個新公司
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}這是你
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}這是遊戲的主持端
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM}個用戶端 {NUM}/{NUM}所公司
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}目前已連線客戶端的數量、公司數量,以及伺服器管理員所允許的最大公司數量
# Matches ConnectionType
###length 5
@ -5084,6 +5086,18 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... 與
STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... 飛機的飛行範圍不足
# Extra messages which go on the third line of errors, explaining why orders failed
STR_ERROR_NO_RAIL_STATION :{WHITE}沒有火車站
STR_ERROR_NO_BUS_STATION :{WHITE}沒有公車站
STR_ERROR_NO_TRUCK_STATION :{WHITE}沒有貨車站
STR_ERROR_NO_DOCK :{WHITE}這裡沒有碼頭
STR_ERROR_NO_AIRPORT :{WHITE}沒有機場/直昇機場
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}沒有兼容此道路類型的站點
STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}沒有兼容此有軌電車道路類型的站點
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}沒有適合聯結式公路車的停車站.{}聯結式公路車需要通過式的停車站,而非港式的停車站
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}這架飛機不能降落在這個直昇機場
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}這架直昇機不能降落在這個機場
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}沒有鐵路路點
STR_ERROR_NO_BUOY :{WHITE}沒有浮標
# Timetable related errors
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}無法為車輛加入時刻表...

@ -396,12 +396,9 @@ public:
void OnInvalidateData(int data = 0, bool gui_scope = true) override
{
if (!gui_scope) return;
switch (data) {
case 1:
/* ReInit, "debug" sprite might have changed */
this->ReInit();
break;
}
/* ReInit, "debug" sprite might have changed */
if (data == 1) this->ReInit();
}
};
@ -1009,7 +1006,8 @@ void QueryString::ClickEditBox(Window *w, Point pt, int wid, int click_count, bo
assert((wi->type & WWT_MASK) == WWT_EDITBOX);
bool rtl = _current_text_dir == TD_RTL;
int clearbtn_width = GetSpriteSize(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT).width;
Dimension sprite_size = GetSpriteSize(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT);
int clearbtn_width = sprite_size.width + WidgetDimensions::scaled.imgbtn.Horizontal();
Rect cr = wi->GetCurrentRect().WithWidth(clearbtn_width, !rtl);

@ -573,6 +573,10 @@ void Squirrel::Initialize()
sq_pushroottable(this->vm);
squirrel_register_global_std(this);
/* Set consts table as delegate of root table, so consts/enums defined via require() are accessible */
sq_pushconsttable(this->vm);
sq_setdelegate(this->vm, -2);
}
class SQFile {
@ -771,6 +775,12 @@ void Squirrel::Uninitialize()
{
ScriptAllocatorScope alloc_scope(this);
/* Remove the delegation */
sq_pushroottable(this->vm);
sq_pushnull(this->vm);
sq_setdelegate(this->vm, -2);
sq_pop(this->vm, 1);
/* Clean up the stuff */
sq_pop(this->vm, 1);
sq_close(this->vm);

@ -572,9 +572,7 @@ static CallBackFunction ToolbarSubsidiesClick(Window *w)
*/
static CallBackFunction MenuClickSubsidies(int index)
{
switch (index) {
case 0: ShowSubsidiesList(); break;
}
ShowSubsidiesList();
return CBF_NONE;
}

@ -955,14 +955,10 @@ bool OpenGLBackend::Resize(int w, int h, bool force)
_glActiveTexture(GL_TEXTURE0);
_glBindTexture(GL_TEXTURE_2D, this->vid_texture);
switch (bpp) {
case 8:
_glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, w, h, 0, GL_RED, GL_UNSIGNED_BYTE, nullptr);
break;
default:
_glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, nullptr);
break;
if (bpp == 8) {
_glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, w, h, 0, GL_RED, GL_UNSIGNED_BYTE, nullptr);
} else {
_glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, nullptr);
}
_glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
@ -1224,14 +1220,10 @@ void OpenGLBackend::ReleaseVideoBuffer(const Rect &update_rect)
_glActiveTexture(GL_TEXTURE0);
_glBindTexture(GL_TEXTURE_2D, this->vid_texture);
_glPixelStorei(GL_UNPACK_ROW_LENGTH, _screen.pitch);
switch (BlitterFactory::GetCurrentBlitter()->GetScreenDepth()) {
case 8:
_glTexSubImage2D(GL_TEXTURE_2D, 0, update_rect.left, update_rect.top, update_rect.right - update_rect.left, update_rect.bottom - update_rect.top, GL_RED, GL_UNSIGNED_BYTE, (GLvoid *)(size_t)(update_rect.top * _screen.pitch + update_rect.left));
break;
default:
_glTexSubImage2D(GL_TEXTURE_2D, 0, update_rect.left, update_rect.top, update_rect.right - update_rect.left, update_rect.bottom - update_rect.top, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (GLvoid *)(size_t)(update_rect.top * _screen.pitch * 4 + update_rect.left * 4));
break;
if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 8) {
_glTexSubImage2D(GL_TEXTURE_2D, 0, update_rect.left, update_rect.top, update_rect.right - update_rect.left, update_rect.bottom - update_rect.top, GL_RED, GL_UNSIGNED_BYTE, (GLvoid*)(size_t)(update_rect.top * _screen.pitch + update_rect.left));
} else {
_glTexSubImage2D(GL_TEXTURE_2D, 0, update_rect.left, update_rect.top, update_rect.right - update_rect.left, update_rect.bottom - update_rect.top, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (GLvoid*)(size_t)(update_rect.top * _screen.pitch * 4 + update_rect.left * 4));
}
#ifndef NO_GL_BUFFER_SYNC

Loading…
Cancel
Save