diff --git a/assets/Languages/ja-JP.cfg b/assets/Languages/ja-JP.cfg index bd4f082db..021c0144f 100644 --- a/assets/Languages/ja-JP.cfg +++ b/assets/Languages/ja-JP.cfg @@ -1,6 +1,6 @@ ; openBVE interface language configuration file -; last updated: 2009-08-03 -; by +; last updated: 2017-05-07 +; by F81_tec200, Midnight Express Ginga81(ginga81) [program] title = openBVE @@ -23,9 +23,9 @@ updates_invalid = サーバには接続できましたが、バージョン情 updates_old = 最新バージョンです。 updates_new = 新バージョン[version] ([date]) が利用可能です。変更点:\r\n\r\n close = 閉じる -packages = Package Management -reportbug = Report Problem -about = About +packages = パッケージの管理 +reportbug = 問題を報告する +about = OpenBVEについて... [mode] arcade = アーケード @@ -34,25 +34,25 @@ expert = 上級者 unknown = 不明 [errors] -critical_file = A critical error occured whilst parsing the [file] file -filesystem_invalid = The file system configuration could not be accessed or is invalid due to the following reason: -warning = Warning: -controls_missing = No control configuration files found. -controls_oldversion = An older key-configuration file was found. -controls_reset = The current key-configuration has been reset to defaults. -controls_default_oldversion = The default key assingment file is an older version or corrupt. -controls_default_missing = The default key assignment file does not exist. -controls_ingame = You are currently running on the [platform] backend. Please use the in-game menu to configure any joystick based controls. -sound_openal_version = OpenAL 1.1 is required. You seem to have version 1.0. -sound_openal_context = The OpenAL context could not be created. -sound_openal_device = The OpenAL sound device could not be opened. -fullscreen_switch1 = An error occured whilst attempting to switch to fullscreen mode. -fullscreen_switch2 = Please check your fullscreen resolution settings. -route_corrupt_withtrack = The selected route is corrupt: \r\n WithTrack section missing. -route_corrupt_nostations = The selected route is corrupt: \r\n No stations defined. -route_corrupt_noobjects = The selected route is corrupt: \r\n No objects defined. -plugin_failure1 = The train plugin [plugin] failed to load. -plugin_failure2 = The built-in ATS/ ATC systems will be used instead, which may cause issues. +critical_file = [file] ファイル読み込み中に致命的なエラーが発生しました。 +filesystem_invalid = ファイルシステムの設定にアクセスできないか無効です。原因は次の通りです: +warning = 警告: +controls_missing = コントロール設定ファイルが見つかりませんでした。 +controls_oldversion = 古いバージョンのキーコンフィグ設定ファイルが見つかりました。 +controls_reset = 現在のキーコンフィグ設定はデフォルト設定にリセットされます。 +controls_default_oldversion = デフォルトのキー割り当て設定ファイルが古いバージョンか破損しています。 +controls_default_missing = デフォルトのキー割り当て設定ファイルが存在しません。 +controls_ingame = 現在[platform] バックエンド上で実行しています。.ジョイスティックのコンフィグ設定はゲーム内のメニューから行なって下さい。. +sound_openal_version = OpenAL 1.1 が必要です。 現在お使いのOpenALのバージョンは1.0です。 +sound_openal_context = OpenALの環境が構築されていません。 +sound_openal_device = OpenAL サウンドデバイスを開けませんでした。 +fullscreen_switch1 = 全画面モードへ切り替え中に エラーが発生しました。 +fullscreen_switch2 = 全画面時の解像度の設定をご確認ください。 +route_corrupt_withtrack = 選択した路線データは壊れている可能性があります。: \r\n WithTrack セクションが見つかりませんでした。 +route_corrupt_nostations = 選択した路線データは壊れている可能性があります。: \r\n 駅が定義されていません。 +route_corrupt_noobjects = 選択した路線データは壊れている可能性があります。: \r\n オブジェクトが定義されていません。 +plugin_failure1 = 保安装置プラグイン[plugin] の読み込みに失敗しました。 +plugin_failure2 = 代わりにopenBVE付属のATS/ ATCプラグインを使用しますが、問題が起きる可能性があります。 [start] title = 新しく始める @@ -68,7 +68,7 @@ route_gradient = 路線断面図 route_settings = 設定 route_settings_encoding = エンコード: route_settings_encoding_preview = プレビュー: -route_processing = Processing route, please wait..... +route_processing = 路線データを読み込み中です。しばらくお待ちください... train = 車両 train_selection = 選択 train_addons = アドオン @@ -118,118 +118,119 @@ blackbox_format_text = 固定長テキスト blackbox_export = 書き出し... [packages] -title = Package Management -proceed = Proceed... -proceed_anyway = Proceed Anyway -processing = Processing, please wait... -unknown_file = Unknown File... -shownlist = These are shown in the list below: -selection_none = No package selected. -selection_none_website = No website provided. -list = Installed Packages -list_type = Select the type of packages you wish to view: -list_name = Name -list_version = Version -list_minimum = Minimum Version -list_maximum = Maximum Version -list_author = Author -list_website = Website -list_packagetype = Type -install = Install -install_button = Install Package -install_header = Install a Package -install_invalid = This file does not appear to be a valid openBVE package. -install_version_error = Package Version Error -install_version_new = The selected package is already installed, and is a newer version. -install_version_old = The selected package is already installed, and is an older version. -install_version_same = The selected package is already installed, and is an identical version. -install_success = Package installation was successful. -install_success_header = Installation Successful -install_success_files = A list of files installed is shown below: -install_failure = Unfortunately, package installation failed. -install_failure_header = Package Installation Failed -install_select = Select Package...... -install_dependancies_unmet = The current package has unmet dependancies. -install_dependancies_unmet_header = Dependancy Error -install_dependancies_broken = The following dependancies may be broken by this action: -install_reccomends_unmet = The following packages are recommended, but not installed: -install_reccomends_unmet_header = Recommended Packages -install_name = Package Name: -install_author = Package Author: -install_version = Package Version: -install_website = Package Website: -install_description = Package Description: -creation_button = Create Package -creation_header = Create a Package -creation_saveas_button = Save As... -creation_saveas_label = Save package as: -creation_dependancies = Select Dependancies -creation_dependancies_add = Add Dependancy -creation_dependancies_remove = Remove -creation_dependancies_nextstep = Package details and dependancies may be assigned in the following steps. -creation_reccommends_add = Add Recommendation -creation_clearselection = Clear Selection -creation_additems = Add Item(s) -creation_selecteditems = The following files and folders will be packaged: -creation_new_guid = The new package has been assigned the following GUID: -creation_header = Enter Package Details -creation_name = Please enter a package name. -creation_author = Please enter a package author. -creation_description = Please enter a package description. -creation_version = Please enter a valid package version number in the following format: \r\n 1.0.0 -creation_version_invalid = You have entered an invalid version number. \r\n Please try again. -creation_success = Package creation was successful. -creation_success_header = Package Creation Successful -creation_success_files = The following files were added to your package: -creation_failure = Unfortunately, creation of your package failed. -creation_failure_header = Package Creation Failed -creation_failure_error = The following error was encountered: -creation_proceed = Proceed...... -creation_invalid_filename = The selected filename is invalid- Please retry. -creation_new_id = The new package has been assigned the following GUID: -creation_replace_id = Replacing the package with the following GUID: -creation_save = Save Package -creation_replace = Is this to replace an existing package? -creation_yes = Yes -creation_no = No -replace_select = Replace this Package -replace_choose = Please select the package you wish to replace: -replace_noneavailable = No packages are currently installed. +title = パッケージの管理 +proceed = 続行する... +proceed_anyway = 無視して続行する +processing = 読み込み中です。しばらくお待ちください... +unknown_file = 不明なファイル... +shownlist = これらは以下にリスト表示されます: +selection_none = パッケージが選択されていません。 +selection_none_website = Webサイトがありません。 +list = インストールされたパッケージ +list_type = 表示するパッケージの形式を選択: +list_name = 名前 +list_version = バージョン +list_minimum = 最も古いバージョン +list_maximum = 最も新しいバージョン +list_author = 作者名 +list_website = Webサイト +list_packagetype = 形式 +install = インストール +install_button = パッケージのインストール +install_header = パッケージをインストールする +install_invalid = 選択されたファイルは、OpenBVEの有効なパッケージではありません。 +install_version_error = パッケージバージョンのエラーです。 +install_version_new = 選択されたパッケージは既に新しいバージョンがインストールされています。 +install_version_old = 選択されたパッケージは既にインストールされていますが、古いバージョンです。 +install_version_same = 選択されたパッケージは既に同じバージョンがインストールされています。 +install_success = パッケージのインストール処理が成功しました。 +install_success_header = インストール処理の成功 +install_success_files = 下記のファイルがインストールされました: +install_failure = 残念ですが、パッケージのインストール処理に失敗しました。 +install_failure_header = パッケージ処理の失敗 +install_select = パッケージを選択してください...... +install_dependancies_unmet = 現在のパッケージは依存関係が未処理のままです。 +install_dependancies_unmet_header = 依存関係エラー +install_dependancies_broken = この操作を行うと、次の依存関係が壊れるかもしれません: +install_reccomends_unmet = 次のパッケージは推奨されていますが、インストールされていません: +install_reccomends_unmet_header = 推奨されるパッケージ +install_name = パッケージ名: +install_author = パッケージの作者名: +install_version = パッケージのバージョン: +install_website = パッケージのWebサイト: +install_description = パッケージの説明: +creation_button = パッケージを作成 +creation_header = パッケージの作成 +creation_saveas_button = 名前をつけて保存... +creation_saveas_label = パッケージの保存: +creation_dependancies = 依存関係の構築 +creation_dependancies_add = 依存関係の追加 +creation_dependancies_remove = リストから削除 +creation_dependancies_nextstep = パッケージの詳細と、その依存関係を次のページで割り当てます。 +creation_reccommends_add = 推奨されるパッケージの追加 +creation_clearselection = 選択を解除 +creation_additems = アイテムを追加 +creation_selecteditems = 次のファイルとフォルダはパッケージングされます: +creation_new_guid = 新しいパッケージは次のGUIDに割り当てられます: +creation_header = パッケージの詳細を入力してください。 +creation_name = パッケージの名前を入力してください。 +creation_author = パッケージの作者名を入力してください。 +creation_description = パッケージの説明を入力してください。 +creation_version = パッケージの有効なバージョンを次の形で入力してください。: \r\n 1.0.0 +creation_version_invalid = 入力されたバージョンは無効です。 \r\n 再度入力してください。 +creation_success = パッケージの生成に成功しました。 +creation_success_header = パッケージの生成に成功 +creation_success_files = 次のファイルがパッケージに追加されます: +creation_failure = 残念ながらパッケージの生成に失敗しました。 +creation_failure_header = パッケージの生成に失敗 +creation_failure_error = 次のエラーが見つかりました: +creation_proceed = 続行...... +creation_invalid_filename = 選択したファイル名は無効です。再入力してください。 +creation_new_id = 新しいパッケージは次のGUIDに割り当てられます: +creation_replace_id = 次のGUIDでパッケージを置き換えます: +creation_save = パッケージの保存 +creation_replace = 現在のパッケージをこのパッケージで置き換えますか? +creation_yes = はい +creation_no = いいえ +replace_select = このパッケージを置き換え +replace_choose = 置き換えをしたいパッケージを選択して下さい: +replace_noneavailable = 現在インストールされているパッケージがありません。 type_route = Route type_train = Train -type_other = Other -type_select = Please select the package type: -uninstall_failure = Unfortunately, uninstallation of this package failed. -uninstall_failure_header = Uninstallation Failed -uninstall_success = Uninstallation of this package was successful. -uninstall_success_header = Uninstallation Successful -uninstall_log = A log is shown below: -uninstall_button = Uninstall Package -uninstall_broken = Some existing packages may be broken by this action. -uninstall_missing_xml = Unable to uninstall the selected package. \r\n XML file list missing. -uninstall_database_remove = Do you wish to remove this package from the database? -database_save_error = An error occured whilst saving the package database. \r\n Please check for write permissions. -version_new = New version: -version_current = Current version: -success = Finished! -selected = Selected Packages -dependancy = Dependancy -recommendation = Recommendation -error_action = Please select the action you wish to take: -error_overwrite = Overwrite -error_replace = Replace -button_next = Next > -button_back = < Back +type_other = その他 +type_select = パッケージの種類を選択して下さい: +uninstall_failure = 残念ですが、パッケージのインストール処理に失敗しました。 +uninstall_failure_header = アンインストールの処理に失敗しました +uninstall_success = パッケージのアンインストール処理は成功しました。 +uninstall_success_header = アンインストール処理の成功 +uninstall_log = ログは以下に表示されます: +uninstall_button = アンインストール +uninstall_broken = 本アクションにより、いくつかの既存のパッケージが破損する恐れがあります。 +uninstall_missing_xml = 選択されたパッケージがアンインストールできません。 \r\n XMLファイルのリストが存在しません。 +uninstall_database_remove = このパッケージを、データベースから削除しますか? +database_save_error = パッケージデータベースへの保存中に、エラーが発生しました。 \r\n ファイルやフォルダの書き込みに対する権限を確認して下さい。 + +version_new = 新しいバージョン: +version_current = 現在のバージョン: +success = 完了しました! +selected = 選択されたパッケージ +dependancy = 依存関係 +recommendation = 推奨 +error_action = どのように処理をするかを選択して下さい: +error_overwrite = 上書きをする +error_replace = 置き換える +button_next = 次へ > +button_back = < 戻る button_ok = OK -button_cancel = Cancel -button_install = Install -button_create = Create -button_ignore = Ignore -button_abort = Abort -filename_empty = Attempted to create a package with an empty filename. -directory_missing = The directory in which you attempted to save the package file does not exist: \r \n -directory_nowrite = No write access available in the directory in which you attempted to save the package file: \r \n -file_generic = Failed to create the following file: \r \n +button_cancel = キャンセル +button_install = インストール +button_create = 生成 +button_ignore = 無視 +button_abort = 中止 +filename_empty =ファイル名無しでパッケージを生成しようとしました。 +directory_missing = パッケージファイルを保存しようとしたパスは存在しません: \r \n +directory_nowrite = パッケージファイルを保存しようとしたパスへの書き込みアクセスができませんでした: \r \n +file_generic = 次のファイルの生成に失敗しました: \r \n [controls] title = カスタマイズ @@ -244,14 +245,14 @@ add = コントロール追加 remove = コントロール削除 import = 読み込み... export = 書き出し... -reset = Reset to defaults +reset = デフォルトに戻す up = 上へ down = 下へ selection = 選択中 selection_command = コマンド: selection_keyboard = キーボード: -selection_keyboard_assignment_grab = Click here to enable keyboard grab to automatically select the desired key. -selection_keyboard_assignment_grabbing = Please press any key... +selection_keyboard_assignment_grab = ここをクリックすると、キーを自動で読み取ります。 +selection_keyboard_assignment_grabbing = キーを自動読み取り中。何かキーを押してください... selection_keyboard_key = キー: selection_keyboard_modifiers = 同時押し: selection_keyboard_modifiers_shift = Shift @@ -331,11 +332,11 @@ misc_simulation_toppling = 横転 misc_simulation_collisions = 衝突 misc_simulation_derailments = 脱線 misc_simulation_blackbox = ブラックボックス使用 -misc_simulation_loadingsway = Enable loading sway +misc_simulation_loadingsway = 乗降時の車体の揺れ misc_controls = コントロール misc_controls_joysticks = ジョイスティック使用 misc_controls_threshold = ジョイスティック閾値: -misc_controls_ebaxis = Allow EB on brake axis +misc_controls_ebaxis = ジョイスティックの軸にEBを組み込む misc_sound = サウンド misc_sound_range = レンジ: misc_sound_range_low = 低 @@ -345,24 +346,24 @@ misc_sound_number = 同時サウンド数: verbosity = メッセージ表示 verbosity_warningmessages = 警告を表示 verbosity_errormessages = エラーを表示 -advanced = Advanced Options -advanced_load_advance = Load in advance -advanced_disable_displaylists = Disable OpenGL display lists -advanced_timefactor = Accelerated Time Factor -advanced_unload_textures = Unload unused textures -other = Other -other_timetable_mode = Timetable mode -other_timetable_mode_none = None -other_timetable_mode_default = Default -other_timetable_mode_autogenerated = Auto-generated timetable -other_timetable_mode_prefercustom = Prefer custom timetable -package_choose = Choose... -package_route_directory = Route installation directory: -package_train_directory = Train installation directory: -package_other_directory = Other items installation directory: -package_compression = Package compression format: -page_previous = Previous Page... -page_next = Next Page... +advanced = 詳細設定 +advanced_load_advance = 全テクスチャを前もって読み込む +advanced_disable_displaylists = OpenGL display lists(描画高速化)を無効 +advanced_timefactor = 時間加速の乗数: +advanced_unload_textures = 20秒以上前に使用されたテクスチャデータのメモリ割り当てを開放 +other = その他 +other_timetable_mode = 時刻表表示モード: +other_timetable_mode_none = 表示しない +other_timetable_mode_default = デフォルト(自動判別) +other_timetable_mode_autogenerated = 自動生成のみを表示 +other_timetable_mode_prefercustom = カスタム時刻表のみを表示 +package_choose = 選択... +package_route_directory = 路線のインストール場所: +package_train_directory = 車両のインストール場所: +package_other_directory = その他のアイテムのインストール場所: +package_compression = パッケージの圧縮形式: +page_previous = 前のページへ... +page_next = 次のページへ... [dialog] csvfiles = CSVファイル @@ -414,7 +415,7 @@ departuretime = 発時刻 [message] delimiter = -signal_proceed = 十分注意して、[speed] [unit] で進行してください。 +signal_proceed = 停止信号です。十分注意し、[speed] [unit] 以下で走行して下さい。 signal_stop = 停止信号を通過しました。非常ブレーキをかけて、完全に停止してください。 signal_overspeed = 信号の制限速度は、[limit] [unit] です。現在、[speed] [unit] です。減速してください。 route_overspeed = 速度制限は、[limit] [unit] です。 現在、[speed] [unit] です。減速してください。 @@ -491,15 +492,15 @@ quit = 終了 quit_question = 終了しますか? quit_no = いいえ quit_yes = はい -back = ← Back -customize_controls = Customise controls -assign = Please press any key or move a joystick axis to set this control... -keyboard = Keyboard -joystick = Joystick -joystick_notavailable = N/A -joystickdirection_positive = Positive -joystickdirection_negative = Negative -assignment_current = Current assignment: +back = ← 戻る +customize_controls = 操作のカスタマイズ +assign = 操作を割り当てるには、キーを押下するか、ジョイスティックの軸を動かして下さい... +keyboard = キーボード +joystick = ジョイスティック +joystick_notavailable = 利用不可 +joystickdirection_positive = +(プラス)方向 +joystickdirection_negative = -(マイナス)方向 +assignment_current = 現在の割り当て: ; ----- quick reference ----- @@ -616,7 +617,7 @@ MENU_ENTER = ゲーム内メニュー・実行 MENU_BACK = ゲーム内メニュー・戻り MISC_CLOCK = 時計表示切替 MISC_SPEED = 速度表示切替 -MISC_GRADIENT = Toggles through different gradient display modes +MISC_GRADIENT = 勾配表示モードの切り替え MISC_TIMEFACTOR = 時間加速係数切替 MISC_FPS = フレームレート表示切替 MISC_AI = AI運転切替 @@ -630,30 +631,30 @@ MISC_CPUMODE = CPU負荷切替 DEBUG_WIREFRAME = ワイヤフレーム切替 DEBUG_NORMALS = 頂点法線切替 DEBUG_BRAKE = ブレーキデバッグ切替 -ROUTE_INFORMATION = Shows or hides the route information window +ROUTE_INFORMATION = 路線の勾配/線形情報ウインドウの表示と切り替え ;------ New controls ---- ;;Common -WIPER_SPEED_UP = Increases the speed of the windscreen wipers -WIPER_SPEED_DOWN = Decreases the speed of the windscreen wipers -FILL_FUEL = Fills fuel -HEADLIGHTS = Toggles the train headlights +WIPER_SPEED_UP = ワイパーの動作速度を加速させる +WIPER_SPEED_DOWN = ワイパーの動作速度を減速させる +FILL_FUEL = 燃料を補給する +HEADLIGHTS = 前照灯のON/OFFの切り替え ;;Steam engine -LIVE_STEAM_INJECTOR = Activates or deactivates the live steam injector -EXHAUST_STEAM_INJECTOR = Activates or deactivates the exhaust steam injector -INCREASE_CUTOFF = Increases the cutoff -DECREASE_CUTOFF = Decreases the cutoff -BLOWERS = Activates or deactivates the blowers +LIVE_STEAM_INJECTOR = インジェクター(ボイラー内蒸気使用)の使用及び停止の切り替え +EXHAUST_STEAM_INJECTOR = インジェクター(シリンダー排気蒸気使用)の使用及び停止の切り替え +INCREASE_CUTOFF = カットオフ(締切率)の増加 +DECREASE_CUTOFF = カットオフ(締切率)の減少 +BLOWERS = 通風器(ブロワー)の使用及び停止の切り替え ;;Diesel engine -ENGINE_START = Starts the engine -ENGINE_STOP = Stops the engine -GEAR_UP = Shifts up a gear in a train fitted with a gearbox -GEAR_DOWN = Shifts down a gear in a train fitted with a gearbox +ENGINE_START = エンジン始動 +ENGINE_STOP = エンジン停止 +GEAR_UP = ギヤをシフトアップ +GEAR_DOWN = ギヤをシフトダウン ;;Electric engine -RAISE_PANTOGRAPH = Raises the pantograph -LOWER_PANTOGRAPH = Lowers the pantograph -MAIN_BREAKER = Toggles the main breaker +RAISE_PANTOGRAPH = パンタグラフ上昇 +LOWER_PANTOGRAPH = パンタグラフ下降 +MAIN_BREAKER = 主回路断流器のON/OFF ; ----- keys ----- diff --git a/source/OpenBVE/OldCode/ObjectManager.cs b/source/OpenBVE/OldCode/ObjectManager.cs index 4a73f7285..64fc40bae 100644 --- a/source/OpenBVE/OldCode/ObjectManager.cs +++ b/source/OpenBVE/OldCode/ObjectManager.cs @@ -1170,7 +1170,41 @@ internal enum ObjectLoadMode { Normal, DontAllowUnloadOfTextures } } } UnifiedObject Result; - switch (System.IO.Path.GetExtension(FileName).ToLowerInvariant()) { + TextEncoding.Encoding newEncoding = TextEncoding.GetEncodingFromFile(FileName); + if (newEncoding != TextEncoding.Encoding.Unknown) + { + switch (newEncoding) + { + case TextEncoding.Encoding.Utf7: + Encoding = System.Text.Encoding.UTF7; + break; + case TextEncoding.Encoding.Utf8: + Encoding = System.Text.Encoding.UTF8; + break; + case TextEncoding.Encoding.Utf16Le: + Encoding = System.Text.Encoding.Unicode; + break; + case TextEncoding.Encoding.Utf16Be: + Encoding = System.Text.Encoding.BigEndianUnicode; + break; + case TextEncoding.Encoding.Utf32Le: + Encoding = System.Text.Encoding.UTF32; + break; + case TextEncoding.Encoding.Utf32Be: + Encoding = System.Text.Encoding.GetEncoding(12001); + break; + case TextEncoding.Encoding.Shift_JIS: + Encoding = System.Text.Encoding.GetEncoding(932); + break; + case TextEncoding.Encoding.Windows1252: + Encoding = System.Text.Encoding.GetEncoding(1252); + break; + case TextEncoding.Encoding.Big5: + Encoding = System.Text.Encoding.GetEncoding(950); + break; + } + } + switch (System.IO.Path.GetExtension(FileName).ToLowerInvariant()) { case ".csv": case ".b3d": Result = CsvB3dObjectParser.ReadObject(FileName, Encoding, LoadMode, ForceTextureRepeatX, ForceTextureRepeatY); diff --git a/source/OpenBVE/OldCode/TrackManager.cs b/source/OpenBVE/OldCode/TrackManager.cs index f53f88b46..5a140bfce 100644 --- a/source/OpenBVE/OldCode/TrackManager.cs +++ b/source/OpenBVE/OldCode/TrackManager.cs @@ -510,6 +510,11 @@ internal class SoundEvent : GeneralEvent { if (TriggerType == EventTriggerType.FrontCarFrontAxle | TriggerType == EventTriggerType.OtherCarFrontAxle) { if (Train.Specs.CurrentAverageSpeed <= 0.0) return; int bufferIndex = Train.Cars[CarIndex].Sounds.FrontAxleRunIndex; + if (Train.Cars[CarIndex].Sounds.PointFrontAxle == null || Train.Cars[CarIndex].Sounds.PointFrontAxle.Length == 0) + { + //No point sounds defined at all + return; + } if (bufferIndex > Train.Cars[CarIndex].Sounds.PointFrontAxle.Length -1 || Train.Cars[CarIndex].Sounds.PointFrontAxle[bufferIndex].Buffer == null) { //If the switch sound does not exist, return zero diff --git a/source/OpenBVE/OldParsers/BveRouteParser/CsvRwRouteParser.cs b/source/OpenBVE/OldParsers/BveRouteParser/CsvRwRouteParser.cs index 6667768f9..baee3bb0d 100644 --- a/source/OpenBVE/OldParsers/BveRouteParser/CsvRwRouteParser.cs +++ b/source/OpenBVE/OldParsers/BveRouteParser/CsvRwRouteParser.cs @@ -5089,6 +5089,11 @@ private struct PositionedExpression { if (!PreviewOnly) { if (Data.FogTransitionMode) { if (Data.Blocks[i].FogDefined) { + if (i == 0 && StartingDistance == 0) + { + //Fog starts at zero position + PreviousFog = Data.Blocks[i].Fog; + } Data.Blocks[i].Fog.TrackPosition = StartingDistance; int m = TrackManager.CurrentTrack.Elements[n].Events.Length; Array.Resize(ref TrackManager.CurrentTrack.Elements[n].Events, m + 1); @@ -5106,12 +5111,26 @@ private struct PositionedExpression { PreviousFogEvent = m; } } else { - Data.Blocks[i].Fog.TrackPosition = StartingDistance + Data.BlockInterval; - int m = TrackManager.CurrentTrack.Elements[n].Events.Length; - Array.Resize(ref TrackManager.CurrentTrack.Elements[n].Events, m + 1); - TrackManager.CurrentTrack.Elements[n].Events[m] = new TrackManager.FogChangeEvent(0.0, PreviousFog, CurrentFog, Data.Blocks[i].Fog); - PreviousFog = CurrentFog; - CurrentFog = Data.Blocks[i].Fog; + if (i == 0 && StartingDistance == 0) + { + //Fog starts at zero position + CurrentFog = Data.Blocks[i].Fog; + PreviousFog = CurrentFog; + Game.PreviousFog = CurrentFog; + Game.CurrentFog = CurrentFog; + Game.NextFog = CurrentFog; + + + } + else + { + Data.Blocks[i].Fog.TrackPosition = StartingDistance + Data.BlockInterval; + int m = TrackManager.CurrentTrack.Elements[n].Events.Length; + Array.Resize(ref TrackManager.CurrentTrack.Elements[n].Events, m + 1); + TrackManager.CurrentTrack.Elements[n].Events[m] = new TrackManager.FogChangeEvent(0.0, PreviousFog, CurrentFog, Data.Blocks[i].Fog); + PreviousFog = CurrentFog; + CurrentFog = Data.Blocks[i].Fog; + } } } // rail sounds diff --git a/source/OpenBVE/System/Functions/TextEncoding.cs b/source/OpenBVE/System/Functions/TextEncoding.cs index 98d850c8b..bcf254442 100644 --- a/source/OpenBVE/System/Functions/TextEncoding.cs +++ b/source/OpenBVE/System/Functions/TextEncoding.cs @@ -31,6 +31,10 @@ internal enum Encoding Utf32Be = 6, /// SHIFT_JIS Shift_JIS = 7, + /// Windows-1252 (Legacy Microsoft) + Windows1252, + /// BIG5 + Big5 } /// Gets the character endcoding of a file @@ -91,6 +95,14 @@ internal static Encoding GetEncodingFromFile(string File) { case "SHIFT_JIS": return Encoding.Shift_JIS; + case "UTF-8": + return Encoding.Utf8; + case "UTF-7": + return Encoding.Utf7; + case "WINDOWS-1252": + return Encoding.Windows1252; + case "BIG5": + return Encoding.Big5; } Det.Reset(); return Encoding.Unknown; diff --git a/source/OpenBVE/System/Program/CommandLine.cs b/source/OpenBVE/System/Program/CommandLine.cs index 1f38cbc05..385968cf4 100644 --- a/source/OpenBVE/System/Program/CommandLine.cs +++ b/source/OpenBVE/System/Program/CommandLine.cs @@ -49,6 +49,12 @@ internal static void ParseArguments(string[] Arguments, ref formMain.MainDialogR case TextEncoding.Encoding.Shift_JIS: Result.RouteEncoding = System.Text.Encoding.GetEncoding(932); break; + case TextEncoding.Encoding.Windows1252: + Result.RouteEncoding = System.Text.Encoding.GetEncoding(1252); + break; + case TextEncoding.Encoding.Big5: + Result.RouteEncoding = System.Text.Encoding.GetEncoding(950); + break; default: Result.RouteEncoding = Encoding.Default; break; @@ -76,6 +82,12 @@ internal static void ParseArguments(string[] Arguments, ref formMain.MainDialogR case TextEncoding.Encoding.Shift_JIS: Result.TrainEncoding = System.Text.Encoding.GetEncoding(932); break; + case TextEncoding.Encoding.Windows1252: + Result.TrainEncoding = System.Text.Encoding.GetEncoding(1252); + break; + case TextEncoding.Encoding.Big5: + Result.TrainEncoding = System.Text.Encoding.GetEncoding(950); + break; default: Result.TrainEncoding = Encoding.Default; break; diff --git a/source/OpenBVE/UserInterface/formMain.Packages.cs b/source/OpenBVE/UserInterface/formMain.Packages.cs index ef5eb758e..afc884066 100644 --- a/source/OpenBVE/UserInterface/formMain.Packages.cs +++ b/source/OpenBVE/UserInterface/formMain.Packages.cs @@ -533,21 +533,27 @@ internal void UninstallPackage(Package packageToUninstall, ref List Pac internal void AddDependendsReccomends(Package packageToAdd, ref List DependsReccomendsList, bool recommendsOnly) { - var row = dataGridViewPackages2.SelectedRows[0].Index; - var key = dataGridViewPackages2.Rows[row].Cells[dataGridViewPackages2.ColumnCount - 1].Value.ToString(); - selectedDependacies.Add(key); - dataGridViewPackages2.Rows.RemoveAt(row); - if (DependsReccomendsList == null) - { - DependsReccomendsList = new List(); - } - packageToAdd.PackageVersion = null; - DependsReccomendsList.Add(packageToAdd); - dataGridViewPackages2.ClearSelection(); - if (currentPackage.Dependancies != null) - PopulatePackageList(currentPackage.Dependancies, dataGridViewPackages3, false, true, false); - if (currentPackage.Reccomendations != null) - PopulatePackageList(currentPackage.Reccomendations, dataGridViewPackages3, false, false, true); + try + { + var row = dataGridViewPackages2.SelectedRows[0].Index; + var key = dataGridViewPackages2.Rows[row].Cells[dataGridViewPackages2.ColumnCount - 1].Value.ToString(); + selectedDependacies.Add(key); + dataGridViewPackages2.Rows.RemoveAt(row); + if (DependsReccomendsList == null) + { + DependsReccomendsList = new List(); + } + packageToAdd.PackageVersion = null; + DependsReccomendsList.Add(packageToAdd); + dataGridViewPackages2.ClearSelection(); + if (currentPackage.Dependancies != null) + PopulatePackageList(currentPackage.Dependancies, dataGridViewPackages3, false, true, false); + if (currentPackage.Reccomendations != null) + PopulatePackageList(currentPackage.Reccomendations, dataGridViewPackages3, false, false, true); + } + catch + { + } } @@ -560,19 +566,27 @@ private void dataGridViewPackages_SelectionChanged(object sender, EventArgs e) currentPackage = null; return; } - var row = dataGridViewPackages.SelectedRows[0].Index; - var key = dataGridViewPackages.Rows[row].Cells[dataGridViewPackages.ColumnCount - 1].Value.ToString(); - switch (comboBoxPackageType.SelectedIndex) + try { - case 0: - currentPackage = Database.currentDatabase.InstalledRoutes.FirstOrDefault(x => x.GUID == key); - break; - case 1: - currentPackage = Database.currentDatabase.InstalledTrains.FirstOrDefault(x => x.GUID == key); - break; - case 2: - currentPackage = Database.currentDatabase.InstalledOther.FirstOrDefault(x => x.GUID == key); - break; + var row = dataGridViewPackages.SelectedRows[0].Index; + var key = dataGridViewPackages.Rows[row].Cells[dataGridViewPackages.ColumnCount - 1].Value.ToString(); + + switch (comboBoxPackageType.SelectedIndex) + { + case 0: + currentPackage = Database.currentDatabase.InstalledRoutes.FirstOrDefault(x => x.GUID == key); + break; + case 1: + currentPackage = Database.currentDatabase.InstalledTrains.FirstOrDefault(x => x.GUID == key); + break; + case 2: + currentPackage = Database.currentDatabase.InstalledOther.FirstOrDefault(x => x.GUID == key); + break; + } + } + catch + { + currentPackage = null; } } @@ -713,18 +727,27 @@ private void dataGridViewPackages2_SelectionChanged(object sender, EventArgs e) buttonDepends.Enabled = true; buttonReccomends.Enabled = true; var row = dataGridViewPackages2.SelectedRows[0].Index; - var key = dataGridViewPackages2.Rows[row].Cells[dataGridViewPackages2.ColumnCount - 1].Value.ToString(); - switch (comboBoxDependancyType.SelectedIndex) + try { - case 0: - dependantPackage = new Package(Database.currentDatabase.InstalledRoutes.FirstOrDefault(x => x.GUID == key), true); - break; - case 1: - dependantPackage = new Package(Database.currentDatabase.InstalledTrains.FirstOrDefault(x => x.GUID == key), true); - break; - case 2: - dependantPackage = new Package(Database.currentDatabase.InstalledOther.FirstOrDefault(x => x.GUID == key), true); - break; + var key = dataGridViewPackages2.Rows[row].Cells[dataGridViewPackages2.ColumnCount - 1].Value.ToString(); + switch (comboBoxDependancyType.SelectedIndex) + { + case 0: + dependantPackage = new Package(Database.currentDatabase.InstalledRoutes.FirstOrDefault(x => x.GUID == key), true); + break; + case 1: + dependantPackage = new Package(Database.currentDatabase.InstalledTrains.FirstOrDefault(x => x.GUID == key), true); + break; + case 2: + dependantPackage = new Package(Database.currentDatabase.InstalledOther.FirstOrDefault(x => x.GUID == key), true); + break; + } + } + catch + { + buttonDepends.Enabled = false; + buttonReccomends.Enabled = false; + dependantPackage = null; } } @@ -740,31 +763,37 @@ private void dataGridViewPackages3_SelectionChanged(object sender, EventArgs e) private void buttonRemove_Click(object sender, EventArgs e) { - var row = dataGridViewPackages3.SelectedRows[0].Index; - var key = dataGridViewPackages3.Rows[row].Cells[dataGridViewPackages3.ColumnCount - 1].Value.ToString(); - selectedDependacies.Remove(key); - - if (dataGridViewPackages3.Rows[row].Cells[dataGridViewPackages3.ColumnCount - 2].Value.ToString() == Interface.GetInterfaceString("packages_dependancy")) - { - currentPackage.Dependancies.Remove(currentPackage.Dependancies.FirstOrDefault(x => x.GUID == key)); - } - else + try { - currentPackage.Reccomendations.Remove(currentPackage.Reccomendations.FirstOrDefault(x => x.GUID == key)); + var row = dataGridViewPackages3.SelectedRows[0].Index; + var key = dataGridViewPackages3.Rows[row].Cells[dataGridViewPackages3.ColumnCount - 1].Value.ToString(); + selectedDependacies.Remove(key); + + if (dataGridViewPackages3.Rows[row].Cells[dataGridViewPackages3.ColumnCount - 2].Value.ToString() == Interface.GetInterfaceString("packages_dependancy")) + { + currentPackage.Dependancies.Remove(currentPackage.Dependancies.FirstOrDefault(x => x.GUID == key)); + } + else + { + currentPackage.Reccomendations.Remove(currentPackage.Reccomendations.FirstOrDefault(x => x.GUID == key)); + } + dataGridViewPackages3.Rows.RemoveAt(row); + dataGridViewPackages3.ClearSelection(); + switch (comboBoxDependancyType.SelectedIndex) + { + case 0: + PopulatePackageList(Database.currentDatabase.InstalledRoutes, dataGridViewPackages2, true, false, false); + break; + case 1: + PopulatePackageList(Database.currentDatabase.InstalledTrains, dataGridViewPackages2, true, false, false); + break; + case 2: + PopulatePackageList(Database.currentDatabase.InstalledOther, dataGridViewPackages2, true, false, false); + break; + } } - dataGridViewPackages3.Rows.RemoveAt(row); - dataGridViewPackages3.ClearSelection(); - switch (comboBoxDependancyType.SelectedIndex) + catch { - case 0: - PopulatePackageList(Database.currentDatabase.InstalledRoutes, dataGridViewPackages2, true, false, false); - break; - case 1: - PopulatePackageList(Database.currentDatabase.InstalledTrains, dataGridViewPackages2, true, false, false); - break; - case 2: - PopulatePackageList(Database.currentDatabase.InstalledOther, dataGridViewPackages2, true, false, false); - break; } } @@ -1068,7 +1097,19 @@ private void dataGridViewReplacePackage_SelectionChanged(object sender, EventArg { replacePackageButton.Enabled = true; var row = dataGridViewReplacePackage.SelectedRows[0].Index; - var key = dataGridViewReplacePackage.Rows[row].Cells[dataGridViewReplacePackage.ColumnCount - 1].Value.ToString(); + string key; + try + { + //BUG: + //Mono seems to have some sort of race condition, meaning that the update function is called before the datagrid is populated + //This masks the underlying issue, but it's not a good thing if the key is invalid in the first place either..... + key = dataGridViewReplacePackage.Rows[row].Cells[dataGridViewReplacePackage.ColumnCount - 1].Value.ToString(); + } + catch + { + return; + } + switch (newPackageType) { case PackageType.Route: diff --git a/source/OpenBVE/UserInterface/formMain.Start.cs b/source/OpenBVE/UserInterface/formMain.Start.cs index 6f14f84e9..5564df8bd 100644 --- a/source/OpenBVE/UserInterface/formMain.Start.cs +++ b/source/OpenBVE/UserInterface/formMain.Start.cs @@ -853,7 +853,6 @@ private void routeWorkerThread_completed(object sender, RunWorkerCompletedEventA } if (Result.RouteFile != null && !routeWorkerThread.IsBusy) { - this.Cursor = Cursors.WaitCursor; TryLoadImage(pictureboxRouteImage, "loading.png"); groupboxRouteDetails.Visible = true; @@ -909,6 +908,18 @@ private void routeWorkerThread_completed(object sender, RunWorkerCompletedEventA comboboxRouteEncoding.Items[0] = "(SHIFT_JIS)"; Result.RouteEncoding = System.Text.Encoding.GetEncoding(932); break; + case TextEncoding.Encoding.Windows1252: + panelRouteEncoding.Enabled = false; + comboboxRouteEncoding.SelectedIndex = 0; + comboboxRouteEncoding.Items[0] = "Western European (Windows) 1252"; + Result.RouteEncoding = System.Text.Encoding.GetEncoding(1252); + break; + case TextEncoding.Encoding.Big5: + panelRouteEncoding.Enabled = false; + comboboxRouteEncoding.SelectedIndex = 0; + comboboxRouteEncoding.Items[0] = "Chinese Traditional (Big5) 950"; + Result.RouteEncoding = System.Text.Encoding.GetEncoding(950); + break; } panelRouteEncoding.Enabled = true; comboboxRouteEncoding.Tag = new object(); @@ -933,7 +944,12 @@ private void routeWorkerThread_completed(object sender, RunWorkerCompletedEventA } comboboxRouteEncoding.Tag = null; } - routeWorkerThread.RunWorkerAsync(); + if (!routeWorkerThread.IsBusy) + { + //HACK: If clicking very rapidly or holding down an arrow + // we can sometimes try to spawn two worker threads + routeWorkerThread.RunWorkerAsync(); + } } } @@ -976,6 +992,16 @@ private void routeWorkerThread_completed(object sender, RunWorkerCompletedEventA comboboxTrainEncoding.Items[0] = "(SHIFT_JIS)"; Result.TrainEncoding = System.Text.Encoding.GetEncoding(932); break; + case TextEncoding.Encoding.Windows1252: + comboboxTrainEncoding.SelectedIndex = 0; + comboboxTrainEncoding.Items[0] = "Western European (Windows) 1252"; + Result.TrainEncoding = System.Text.Encoding.GetEncoding(1252); + break; + case TextEncoding.Encoding.Big5: + comboboxTrainEncoding.SelectedIndex = 0; + comboboxTrainEncoding.Items[0] = "Chinese Traditional (Big5) 950"; + Result.TrainEncoding = System.Text.Encoding.GetEncoding(950); + break; } int i; for (i = 0; i < Interface.CurrentOptions.TrainEncodings.Length; i++) {