diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.ncb b/build/tools/MasterEditorTWL/MasterEditorTWL.ncb index fc8dc67c..94ede639 100644 Binary files a/build/tools/MasterEditorTWL/MasterEditorTWL.ncb and b/build/tools/MasterEditorTWL/MasterEditorTWL.ncb differ diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.suo b/build/tools/MasterEditorTWL/MasterEditorTWL.suo index af6f0bd7..799ab985 100644 Binary files a/build/tools/MasterEditorTWL/MasterEditorTWL.suo and b/build/tools/MasterEditorTWL/MasterEditorTWL.suo differ diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm b/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm index 56fd2699..808f94c6 100644 Binary files a/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm and b/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm differ diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h b/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h index 46b2e876..5a406e51 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h @@ -626,7 +626,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; private: System::Windows::Forms::TextBox^ tboxFile; protected: - private: System::Windows::Forms::TextBox^ tboxMsg; + private: System::Windows::Forms::GroupBox^ gboxSrl; private: System::Windows::Forms::TextBox^ tboxTitleName; @@ -646,7 +646,6 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; void InitializeComponent(void) { this->tboxFile = (gcnew System::Windows::Forms::TextBox()); - this->tboxMsg = (gcnew System::Windows::Forms::TextBox()); this->gboxSrl = (gcnew System::Windows::Forms::GroupBox()); this->tboxRemasterVer = (gcnew System::Windows::Forms::TextBox()); this->tboxRomSize = (gcnew System::Windows::Forms::TextBox()); @@ -891,11 +890,11 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->colWarnEnd = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); this->colWarnCause = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); this->gridError = (gcnew System::Windows::Forms::DataGridView()); - this->labFile = (gcnew System::Windows::Forms::Label()); - this->colErrorCause = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); - this->colErrorEnd = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); - this->colErrorBegin = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); this->colErrorName = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->colErrorBegin = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->colErrorEnd = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->colErrorCause = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn()); + this->labFile = (gcnew System::Windows::Forms::Label()); this->gboxSrl->SuspendLayout(); this->gboxCRC->SuspendLayout(); (cli::safe_cast(this->numEULA))->BeginInit(); @@ -939,14 +938,6 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->tboxFile->DragDrop += gcnew System::Windows::Forms::DragEventHandler(this, &Form1::tboxFile_DragDrop); this->tboxFile->DragEnter += gcnew System::Windows::Forms::DragEventHandler(this, &Form1::tboxFile_DragEnter); // - // tboxMsg - // - this->tboxMsg->Location = System::Drawing::Point(12, 486); - this->tboxMsg->Name = L"tboxMsg"; - this->tboxMsg->ReadOnly = true; - this->tboxMsg->Size = System::Drawing::Size(745, 19); - this->tboxMsg->TabIndex = 2; - // // gboxSrl // this->gboxSrl->Controls->Add(this->tboxRemasterVer); @@ -3272,7 +3263,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->tabError->Name = L"tabError"; this->tabError->Size = System::Drawing::Size(741, 352); this->tabError->TabIndex = 5; - this->tabError->Text = L"エラー(要修正)"; + this->tabError->Text = L"エラー情報(要修正)"; this->tabError->UseVisualStyleBackColor = true; this->tabError->Click += gcnew System::EventHandler(this, &Form1::tabError_Click); // @@ -3400,6 +3391,34 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->gridError->Size = System::Drawing::Size(699, 103); this->gridError->TabIndex = 37; // + // colErrorName + // + this->colErrorName->HeaderText = L"項目名"; + this->colErrorName->Name = L"colErrorName"; + this->colErrorName->ReadOnly = true; + this->colErrorName->Width = 120; + // + // colErrorBegin + // + this->colErrorBegin->HeaderText = L"開始"; + this->colErrorBegin->Name = L"colErrorBegin"; + this->colErrorBegin->ReadOnly = true; + this->colErrorBegin->Width = 60; + // + // colErrorEnd + // + this->colErrorEnd->HeaderText = L"終了"; + this->colErrorEnd->Name = L"colErrorEnd"; + this->colErrorEnd->ReadOnly = true; + this->colErrorEnd->Width = 60; + // + // colErrorCause + // + this->colErrorCause->AutoSizeMode = System::Windows::Forms::DataGridViewAutoSizeColumnMode::Fill; + this->colErrorCause->HeaderText = L"要因"; + this->colErrorCause->Name = L"colErrorCause"; + this->colErrorCause->ReadOnly = true; + // // labFile // this->labFile->AutoSize = true; @@ -3409,43 +3428,14 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->labFile->TabIndex = 36; this->labFile->Text = L"ROMデータファイル"; // - // colErrorCause - // - this->colErrorCause->AutoSizeMode = System::Windows::Forms::DataGridViewAutoSizeColumnMode::Fill; - this->colErrorCause->HeaderText = L"要因"; - this->colErrorCause->Name = L"colErrorCause"; - this->colErrorCause->ReadOnly = true; - // - // colErrorEnd - // - this->colErrorEnd->HeaderText = L"終了"; - this->colErrorEnd->Name = L"colErrorEnd"; - this->colErrorEnd->ReadOnly = true; - this->colErrorEnd->Width = 60; - // - // colErrorBegin - // - this->colErrorBegin->HeaderText = L"開始"; - this->colErrorBegin->Name = L"colErrorBegin"; - this->colErrorBegin->ReadOnly = true; - this->colErrorBegin->Width = 60; - // - // colErrorName - // - this->colErrorName->HeaderText = L"項目名"; - this->colErrorName->Name = L"colErrorName"; - this->colErrorName->ReadOnly = true; - this->colErrorName->Width = 120; - // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; - this->ClientSize = System::Drawing::Size(777, 519); + this->ClientSize = System::Drawing::Size(777, 482); this->Controls->Add(this->labFile); this->Controls->Add(this->tabMain); this->Controls->Add(this->tboxFile); - this->Controls->Add(this->tboxMsg); this->Controls->Add(this->menuStripAbove); this->MainMenuStrip = this->menuStripAbove; this->Name = L"Form1"; @@ -3531,32 +3521,29 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; catch( System::IO::FileNotFoundException ^s ) { (void)s; - this->tboxMsg->Text = "設定ファイルを開くことができませんでした。"; + this->sucMsg( "設定ファイルを開くことができませんでした。", "Setting file can't be opened." ); return; } // タグ : ルート System::Xml::XmlElement ^root = doc->DocumentElement; - System::String ^msg = gcnew System::String(""); // タグ + System::Boolean bReadOnly = false; System::Xml::XmlNodeList ^rwlist = root->GetElementsByTagName( "rw" ); if( rwlist != nullptr ) { System::Xml::XmlNode ^rw = rwlist->Item(0); if( rw->FirstChild->Value->Equals( "r" ) ) { - // リードオンリモード - this->disableForms(); - if( !System::String::IsNullOrEmpty(msg) ) - { - msg += "・"; - } - msg += "リードオンリモード"; + // リードオンリーモード + this->readOnly(); + bReadOnly = true; } } // タグ + System::Boolean bXML = false; System::Xml::XmlNodeList ^outlist = root->GetElementsByTagName( "output" ); if( outlist != nullptr ) { @@ -3564,19 +3551,26 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( out->FirstChild->Value->Equals( "XML" ) ) { // ノーマルXML出力モード - this->disableForms(); - if( !System::String::IsNullOrEmpty(msg) ) - { - msg += "・"; - } - msg += "XML文書出力モード"; + bXML = true; } } - if( !System::String::IsNullOrEmpty(msg) ) + + if( bReadOnly || bXML ) { - msg += "で動作しています。"; + System::String ^msgJ = gcnew System::String("動作モード:"); + System::String ^msgE = gcnew System::String("Processing Mode:"); + if( bReadOnly ) + { + msgJ += "\n リードオンリーモード"; + msgE += "\n Read Only Mode"; + } + if( bXML ) + { + msgJ += "\n XML出力モード"; + msgE += "\n XML Output Mode"; + } + this->sucMsg( msgJ, msgE ); } - this->tboxMsg->Text = msg; } private: @@ -3589,17 +3583,12 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; switch( result ) { case ECSrlResult::ERROR_PLATFORM: - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "本ツールはTWL対応ROM専用です。NTR専用ROMなどのTWL対応ROM以外を読み込むことはできません。" ); - else - this->errMsg( "This tool can only read TWL ROM. This can't read Other data e.g. NTR limited ROM." ); + this->errMsg( "本ツールはTWL対応ROM専用です。NTR専用ROMなどのTWL非対応ROMを読み込むことはできません。", + "This tool can only read TWL ROM. This can't read Other data e.g. NTR limited ROM." ); break; default: - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "リードに失敗しました。" ); - else - this->errMsg( "Reading the file failed." ); + this->errMsg( "ROMデータファイルの読み込みに失敗しました。", "Reading the ROM data file failed." ); break; } return; // 前のファイルが正常である保証なしなので前のファイルも上書き保存できないようにする @@ -3613,21 +3602,15 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; u16 crc; if( !getWholeCRCInFile( filename, &crc ) ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "CRCの計算に失敗しました。" ); - else - this->errMsg( "Calc CRC failed." ); + this->errMsg( "ROMデータのCRC計算に失敗しました。ROMデータの読み込みはキャンセルされました。", + "Calculating CRC of the ROM data failed. Therefore reading ROM data is canceled." ); return; } System::UInt16 ^hcrc = gcnew System::UInt16( crc ); this->tboxWholeCRC->Clear(); this->tboxWholeCRC->AppendText( "0x" ); this->tboxWholeCRC->AppendText( hcrc->ToString("X") ); - - if( this->stripItemJapanese->Checked == true ) - this->tboxMsg->Text = "ファイルオープンに成功しました。"; - else - this->tboxMsg->Text = "Opening the file succeeded."; + this->sucMsg( "ROMデータファイルのオープンに成功しました。", "The ROM data file is opened successfully." ); } // openSrl private: @@ -3648,16 +3631,10 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; // コピーしたファイルにROMヘッダを上書き if( this->hSrl->writeToFile( filename ) != ECSrlResult::NOERROR ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "保存に失敗しました。" ); - else - this->errMsg( "Saving the file failed." ); + this->errMsg( "ROMデータの保存に失敗しました。", "Saving the ROM data file failed." ); return; } - if( this->stripItemJapanese->Checked == true ) - this->tboxMsg->Text = "保存が成功しました。"; - else - this->tboxMsg->Text = "Saving the file succeeded."; + this->sucMsg( "ROMデータの保存が成功しました。", "Saving the ROM data file succeeded." ); this->tboxFile->Text = filename; // 再リード @@ -3670,7 +3647,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; // ---------------------------------------------- // 設定/選択可能なフォームをすべて disable にする - void disableForms( void ) + void readOnly( void ) { this->cboxIsEULA->Enabled = false; this->numEULA->Enabled = false; @@ -3748,10 +3725,8 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( this->hSrl->hPlatform == nullptr ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "プラットホーム指定が不正です。ROMデータのビルド設定を見直してください。" ); - else - this->errMsg( "Illegal Platform: Please check build settings of the ROM data." ); + this->errMsg( "プラットホーム指定が不正です。ROMデータのビルド設定を見直してください。", + "Illegal Platform: Please check build settings of the ROM data."); } // TWL拡張情報 @@ -4304,7 +4279,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; // ---------------------------------------------- // テキスト入力がされているかチェック - System::Boolean checkTextForm( System::String ^formtext, System::String ^labelJ, System::String ^labelE ) + System::Boolean checkTextForm( System::String ^formtext, System::String ^labelJ, System::String ^labelE, System::Boolean affectRom ) { System::String ^msgJ = gcnew System::String( "入力されていません。" ); System::String ^msgE = gcnew System::String( "No setting. Please retry to input." ); @@ -4312,39 +4287,41 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; System::String ^tmp = formtext->Replace( " ", "" ); // スペースのみの文字列もエラー if( (formtext == nullptr) || formtext->Equals("") || tmp->Equals("") ) { - this->hErrorList->Add( gcnew RCMRCError( labelJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msgJ, labelE, msgE, true ) ); + this->hErrorList->Add( gcnew RCMRCError( labelJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msgJ, labelE, msgE, true, affectRom ) ); return false; } return true; } // 数値入力が正常かどうかチェック - System::Boolean checkNumRange( System::Int32 val, System::Int32 min, System::Int32 max, System::String ^labelJ, System::String ^labelE ) + System::Boolean checkNumRange( + System::Int32 val, System::Int32 min, System::Int32 max, System::String ^labelJ, System::String ^labelE, System::Boolean affectRom ) { System::String ^msgJ = gcnew System::String( "値の範囲が不正です。やり直してください。" ); System::String ^msgE = gcnew System::String( "Invalidate range of value. Please retry." ); if( (val < min) || (max < val) ) { - this->hErrorList->Add( gcnew RCMRCError( labelJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msgJ, labelE, msgE, true ) ); + this->hErrorList->Add( gcnew RCMRCError( labelJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msgJ, labelE, msgE, true, affectRom ) ); return false; } return true; } - System::Boolean checkNumRange( System::String ^strval, System::Int32 min, System::Int32 max, System::String ^labelJ, System::String ^labelE ) + System::Boolean checkNumRange( System::String ^strval, System::Int32 min, System::Int32 max, + System::String ^labelJ, System::String ^labelE, System::Boolean affectRom ) { try { System::Int32 i = System::Int32::Parse(strval); - return (this->checkNumRange( i, min, max, labelJ, labelE )); + return (this->checkNumRange( i, min, max, labelJ, labelE, affectRom )); } catch ( System::FormatException ^ex ) { (void)ex; - return (this->checkNumRange( max+1, min, max, labelJ, labelE )); + return (this->checkNumRange( max+1, min, max, labelJ, labelE, affectRom )); // 必ず失敗するように max+1 を検査 } } // コンボボックスをチェック - System::Boolean checkBoxIndex( System::Windows::Forms::ComboBox ^box, System::String ^labelJ, System::String ^labelE ) + System::Boolean checkBoxIndex( System::Windows::Forms::ComboBox ^box, System::String ^labelJ, System::String ^labelE, System::Boolean affectRom ) { System::String ^msgJ = gcnew System::String( "選択されていません。やり直してください。" ); System::String ^msgE = gcnew System::String( "Not selected. Please retry." ); @@ -4352,7 +4329,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( box->SelectedIndex < 0 ) { this->hWarnList->Add( gcnew RCMRCError( - labelJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msgJ, labelE, msgE, true ) ); + labelJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msgJ, labelE, msgE, true, affectRom ) ); } return true; } @@ -4361,7 +4338,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; System::Boolean checkSrlForms(void) { // リージョン - if( this->checkBoxIndex( this->combRegion, LANG_REGION_J, LANG_REGION_E ) == false ) + if( this->checkBoxIndex( this->combRegion, LANG_REGION_J, LANG_REGION_E, true ) == false ) return false; // リージョンを決める @@ -4410,7 +4387,9 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->labPEGIBBFC->Text + " " + this->labPEGIBBFC2->Text ); this->checkParentalForms( bAustralia, this->combOFLC, this->cboxOFLC, this->cboxAlwaysOFLC, this->labOFLC->Text ); - return (this->hErrorList->Count > 0); + // ひととおりエラー登録をした後で + // SRLバイナリに影響を与えるエラーが存在するかチェック + return this->isErrorAffectRom(); } // ペアレンタルコントロール関連のフォーム入力が正しいか書き込み前チェック @@ -4430,14 +4409,14 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msg + ": レーティング審査を必要としないソフトであるとみなしてデータを保存します。", - "Parental Control", msg + ": Save ROM data as Game soft which needs rating examinination.", true ) ); + "Parental Control", msg + ": Save ROM data as Game soft which needs rating examinination.", true, true ) ); } else { this->hErrorList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msg + ": 制限が無効であるにもかかわらずレーティング情報が設定されています。", - "Parental Control", msg + "Rating can be set only when control is enable.", true ) ); + "Parental Control", msg + "Rating can be set only when control is enable.", true, true ) ); } } else // 有効フラグが立っているとき @@ -4447,27 +4426,27 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->hErrorList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msg + ": 制限が有効であるにもかかわらずレーティング情報が設定されていません。", - "Parental Control", msg + ": Rating must be set when control is enable.", true ) ); + "Parental Control", msg + ": Rating must be set when control is enable.", true, true ) ); } else if( always->Checked ) { this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, msg + ": Rating Pendingが指定されています。レーティング年齢が審査されしだい、再度、ROMを提出してください。", - "Parental Control", ": Rating Pending is setting. When rating age is examined, Please submit again.", true ) ); + "Parental Control", ": Rating Pending is setting. When rating age is examined, Please submit again.", true, true ) ); } else if( comb->SelectedIndex == (comb->Items->Count - 1) ) { this->hErrorList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, ": Rating Pending指定とレーティング年齢を同時に指定することはできません。", - "Parental Control", ": Rating setting is either rating pending or rating age.", true ) ); + "Parental Control", ": Rating setting is either rating pending or rating age.", true, true ) ); } } } //checkParentalForms() // ---------------------------------------------- - // マスタ書類情報をフォームから取得 + // マスタ書類情報(SRL影響なし)をフォームから取得 // ---------------------------------------------- void setDeliverableProperties(void) @@ -4625,78 +4604,137 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; } } - // フォームの入力をチェックする + // ---------------------------------------------- + // マスタ書類情報(SRL影響なし)のフォームチェック + // ---------------------------------------------- + System::Boolean checkDeliverableForms(void) { // 不正な場合はダイアログで注意してreturn // 提出情報 - this->checkTextForm( this->tboxProductName->Text, LANG_PRODUCT_NAME_J, LANG_PRODUCT_NAME_E ); - this->checkTextForm( this->tboxProductCode1->Text, LANG_PRODUCT_CODE_J, LANG_PRODUCT_CODE_E ); - this->checkTextForm( this->tboxProductCode2->Text, LANG_PRODUCT_CODE_J, LANG_PRODUCT_CODE_E ); + this->checkTextForm( this->tboxProductName->Text, LANG_PRODUCT_NAME_J, LANG_PRODUCT_NAME_E, false ); // SRL作成には問題のないエラー + this->checkTextForm( this->tboxProductCode1->Text, LANG_PRODUCT_CODE_J, LANG_PRODUCT_CODE_E, false ); + this->checkTextForm( this->tboxProductCode2->Text, LANG_PRODUCT_CODE_J, LANG_PRODUCT_CODE_E, false ); if( this->cboxReleaseForeign->Checked == true ) { - this->checkTextForm( this->tboxProductNameForeign->Text, LANG_PRODUCT_NAME_F_J, LANG_PRODUCT_NAME_F_E ); - this->checkTextForm( this->tboxProductCode1Foreign->Text, LANG_PRODUCT_CODE_F_J, LANG_PRODUCT_CODE_F_E ); - this->checkTextForm( this->tboxProductCode2Foreign1->Text, LANG_PRODUCT_CODE_F_J, LANG_PRODUCT_CODE_F_E ); + this->checkTextForm( this->tboxProductNameForeign->Text, LANG_PRODUCT_NAME_F_J, LANG_PRODUCT_NAME_F_E, false ); + this->checkTextForm( this->tboxProductCode1Foreign->Text, LANG_PRODUCT_CODE_F_J, LANG_PRODUCT_CODE_F_E, false ); + this->checkTextForm( this->tboxProductCode2Foreign1->Text, LANG_PRODUCT_CODE_F_J, LANG_PRODUCT_CODE_F_E, false ); } if( this->rUsageOther->Checked == true ) { - this->checkTextForm( this->tboxUsageOther->Text, LANG_USAGE_J, LANG_USAGE_E ); + this->checkTextForm( this->tboxUsageOther->Text, LANG_USAGE_J, LANG_USAGE_E, false ); } // 会社情報 - this->checkTextForm( this->tboxPerson1->Text, LANG_PERSON_1_J, LANG_PERSON_1_E ); - this->checkTextForm( this->tboxCompany1->Text, LANG_COMPANY_J, LANG_COMPANY_E ); - this->checkTextForm( this->tboxDepart1->Text, LANG_DEPART_J, LANG_DEPART_E ); + this->checkTextForm( this->tboxPerson1->Text, LANG_PERSON_1_J, LANG_PERSON_1_E, false ); + this->checkTextForm( this->tboxCompany1->Text, LANG_COMPANY_J, LANG_COMPANY_E, false ); + this->checkTextForm( this->tboxDepart1->Text, LANG_DEPART_J, LANG_DEPART_E, false ); if( this->stripItemJapanese->Checked == true ) { - this->checkTextForm( this->tboxFurigana1->Text, LANG_FURIGANA_J, LANG_FURIGANA_J ); + this->checkTextForm( this->tboxFurigana1->Text, LANG_FURIGANA_J, LANG_FURIGANA_J, false ); } - this->checkTextForm( this->tboxTel1->Text, LANG_TEL_J, LANG_TEL_E ); - this->checkTextForm( this->tboxFax1->Text, LANG_FAX_J, LANG_FAX_E ); - this->checkTextForm( this->tboxMail1->Text, LANG_MAIL_J, LANG_MAIL_E ); + this->checkTextForm( this->tboxTel1->Text, LANG_TEL_J, LANG_TEL_E, false ); + this->checkTextForm( this->tboxFax1->Text, LANG_FAX_J, LANG_FAX_E, false ); + this->checkTextForm( this->tboxMail1->Text, LANG_MAIL_J, LANG_MAIL_E, false ); if( this->stripItemJapanese->Checked == true ) { - this->checkTextForm( this->tboxNTSC1->Text, LANG_NTSC_1_J + " " + LANG_NTSC_2_J, LANG_NTSC_1_J + " " + LANG_NTSC_2_J ); + this->checkTextForm( this->tboxNTSC1->Text, LANG_NTSC_1_J + " " + LANG_NTSC_2_J, LANG_NTSC_1_J + " " + LANG_NTSC_2_J, false ); } if( this->cboxIsInputPerson2->Checked == true ) { - this->checkTextForm( this->tboxPerson2->Text, LANG_PERSON_2_J, LANG_PERSON_2_E ); - this->checkTextForm( this->tboxCompany2->Text, LANG_COMPANY_J, LANG_COMPANY_E ); - this->checkTextForm( this->tboxDepart2->Text, LANG_DEPART_J, LANG_DEPART_E ); + this->checkTextForm( this->tboxPerson2->Text, LANG_PERSON_2_J, LANG_PERSON_2_E, false ); + this->checkTextForm( this->tboxCompany2->Text, LANG_COMPANY_J, LANG_COMPANY_E, false ); + this->checkTextForm( this->tboxDepart2->Text, LANG_DEPART_J, LANG_DEPART_E, false ); if( this->stripItemJapanese->Checked == true ) { - this->checkTextForm( this->tboxFurigana2->Text, LANG_FURIGANA_J, LANG_FURIGANA_J ); + this->checkTextForm( this->tboxFurigana2->Text, LANG_FURIGANA_J, LANG_FURIGANA_J, false ); } - this->checkTextForm( this->tboxTel2->Text, LANG_TEL_J, LANG_TEL_E ); - this->checkTextForm( this->tboxFax2->Text, LANG_FAX_J, LANG_FAX_E ); - this->checkTextForm( this->tboxMail2->Text, LANG_MAIL_J, LANG_MAIL_E ); + this->checkTextForm( this->tboxTel2->Text, LANG_TEL_J, LANG_TEL_E, false ); + this->checkTextForm( this->tboxFax2->Text, LANG_FAX_J, LANG_FAX_E, false ); + this->checkTextForm( this->tboxMail2->Text, LANG_MAIL_J, LANG_MAIL_E, false ); if( this->stripItemJapanese->Checked == true ) { - this->checkTextForm( this->tboxNTSC2->Text, LANG_NTSC_1_J + " " + LANG_NTSC_2_J, LANG_NTSC_1_J + " " + LANG_NTSC_2_J ); + this->checkTextForm( this->tboxNTSC2->Text, LANG_NTSC_1_J + " " + LANG_NTSC_2_J, LANG_NTSC_1_J + " " + LANG_NTSC_2_J, false ); } } // 一部のROM情報(SRLバイナリに反映されない情報)をここでチェックする - this->checkBoxIndex( this->combBackup, LANG_BACKUP_J, LANG_BACKUP_E ); + this->checkBoxIndex( this->combBackup, LANG_BACKUP_J, LANG_BACKUP_E, false ); if( this->combBackup->SelectedIndex == (this->combBackup->Items->Count - 1) ) { - this->checkTextForm( this->tboxBackupOther->Text, LANG_BACKUP_J, LANG_BACKUP_E ); + this->checkTextForm( this->tboxBackupOther->Text, LANG_BACKUP_J, LANG_BACKUP_E, false ); } - return (this->hErrorList->Count > 0); + // ひととおりエラー登録をした後で + // 書類上のエラー(SRLバイナリには影響しない)が存在するかチェック + return this->isErrorOnlyDeliverable(); } // ---------------------------------------------- // エラー処理 // ---------------------------------------------- - // エラーメッセージを出力 - void errMsg( System::String ^str ) + // SRLには関係しない書類上のエラーをチェック + System::Boolean isErrorOnlyDeliverable(void) { - MessageBox::Show( str, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error ); + System::Int32 count = 0; + + // SRLクラスのエラーリストはすべてSRLに関係するのでチェックしない + // -> 入力エラーのみのチェックでよい + for each( RCMRCError ^err in this->hErrorList ) + { + if( !err->AffectRom ) + count++; + } + return (count > 0); + } + + // SRLのバイナリに影響する項目にエラーがあるかチェック + System::Boolean isErrorAffectRom(void) + { + System::Int32 count = 0; + + // SRLクラスの修正不可エラーをカウント + // (修正可エラーは入力によって修正されてるかもしれないのでチェックしない) + for each( RCMRCError ^err in this->hSrl->hErrorList ) + { + if( !err->EnableModify ) // すべてSRLバイナリに影響する + count++; + } + + // SRLバイナリに影響するエラーの中で + // 修正可エラーがフォーム入力によって修正されているかカウント + // (エラーリストが更新されていることが前提) + for each( RCMRCError ^err in this->hErrorList ) + { + if( err->AffectRom ) // 修正不可エラーは存在しない + count++; + } + return (count > 0); + } + + // ---------------------------------------------- + // ダイアログ + // ---------------------------------------------- + + void sucMsg( System::String ^msgJ, System::String ^msgE ) + { + if( this->stripItemJapanese->Checked ) + MessageBox::Show( msgJ, "Information", MessageBoxButtons::OK, MessageBoxIcon::None ); + else + MessageBox::Show( msgE, "Information", MessageBoxButtons::OK, MessageBoxIcon::None ); + } + + // エラーメッセージを出力 + void errMsg( System::String ^msgJ, System::String ^msgE ) + { + if( this->stripItemJapanese->Checked ) + MessageBox::Show( msgJ, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error ); + else + MessageBox::Show( msgE, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error ); } private: @@ -5095,10 +5133,8 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( System::IO::File::Exists(filename) == false ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "ファイルが存在しませんので開くことができません。" ); - else - this->errMsg( "The file is not found, therefore the file can not be opened." ); + this->errMsg( "ROMデータファイルが存在しませんので開くことができません。", + "The ROM data file is not found. Therefore the file can not be opened." ); return; } this->loadSrl( filename ); // ドラッグアンドドロップの時点でボタンを押さなくてもファイルを開く @@ -5255,10 +5291,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "ファイルオープンがキャンセルされました。" ); - else - this->errMsg( "Opening the file is canceled." ); + this->errMsg( "ROMデータファイルのオープンがキャンセルされました。", "Opening the ROM data file is canceled by user." ); return; } filename = dlg->FileName; @@ -5269,6 +5302,11 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; this->rErrorReading->Checked = true; this->setGridError(); this->setGridWarn(); + if( this->hSrl->hErrorList->Count > 0 ) + { + this->errMsg( "ROMデータにエラーがあります。「エラー情報」タブをご確認ください。", + "ROM data include error. Please look the tab \"Error\"." ); + } } //stripItemOpenRom_Click() private: @@ -5279,10 +5317,8 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; // SRLが読み込まれていないときにはリードさせない if( System::String::IsNullOrEmpty( this->tboxFile->Text ) ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "ROMデータファイルがオープンされていません。" ); - else - this->errMsg( "ROM file has not opened yet." ); + this->errMsg( "ROMデータファイルがオープンされていませんので、提出書類の作成ができません。", + "ROM data file has not opened yet. Therefore a submission sheet can't be made." ); return; } @@ -5304,10 +5340,8 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "保存がキャンセルされましたのでROMファイルデータは作成(更新)されません。" ); - else - this->errMsg( "ROM file is not updated since saving the file is canceled." ); + this->errMsg( "保存がキャンセルされましたのでROMファイルデータおよび提出書類は作成されません。", + "A ROM data file and a submission sheet are not updated, since saving the file is canceled." ); return; } filename = dlg->FileName; @@ -5331,39 +5365,30 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; // SRLが読み込まれていないときにはリードさせない if( System::String::IsNullOrEmpty( this->tboxFile->Text ) ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "ROMデータファイルがオープンされていません。" ); - else - this->errMsg( "ROM file has not opened yet." ); + this->errMsg( "ROMデータファイルがオープンされていません。", "ROM file has not opened yet." ); return; } // SRLと書類の両方のフォーム入力をチェックする if( this->checkSrlForms() == false ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "ROMデータに不正な設定があるためROMデータを保存できません。" ); - else - this->errMsg( "This ROM data can't be saved, since it has illegal info." ); + this->errMsg( "ROMデータに不正な設定があるためROMデータの保存および提出書類の作成ができません。", + "A ROM data and a submission sheet can't be saved, since it has illegal info." ); return; } if( this->checkDeliverableForms() == false ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "入力情報に不正な設定があるため提出書類を作成できません。" ); - else - this->errMsg( "Making a submission sheet can't be done, since input data is illegal." ); + this->errMsg( "入力情報に不正な設定があるため提出書類を作成できません。", + "Making a submission sheet can't be done, since input data is illegal." ); return; } // 注意書き { - System::String ^stmp; - if( this->stripItemJapanese->Checked == true ) - stmp = "Step1/2: ROMデータファイル(SRL)と提出書類の情報を一致させるため、まず、入力情報を反映させたSRLを作成します。\n(キャンセルされたとき、SRLおよび提出書類は作成されません。)"; - else - stmp = "Step1/2: Firstly, We save ROM file(SRL) because several information in a submission sheet are match those in the SRL.\n(When it is canceled, both the SRL and a submission sheet are not made.)"; - MessageBox::Show( stmp, "Caution", MessageBoxButtons::OK, MessageBoxIcon::Information ); + this->sucMsg( + "Step1/2: ROMデータファイル(SRL)と提出書類の情報を一致させるため、まず、入力情報を反映させたSRLを作成します。\n(キャンセルされたとき、SRLおよび提出書類は作成されません。)", + "Step1/2: Firstly, We save ROM file(SRL) because several information in a submission sheet are match those in the SRL.\n(When it is canceled, both the SRL and a submission sheet are not made.)" + ); } // ダイアログからSrl名を取得する { @@ -5376,10 +5401,8 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "SRLの保存がキャンセルされましたので提出書類は作成されません。"); - else - this->errMsg( "A submission sheet can not be made, since saving SRL is canceled." ); + this->errMsg( "SRLの保存がキャンセルされましたので提出書類は作成されません。", + "A submission sheet can not be made, since saving SRL is canceled." ); return; } srlfile = dlg->FileName; @@ -5395,12 +5418,10 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; // 注意書き { - System::String ^stmp; - if( this->stripItemJapanese->Checked == true ) - stmp = "Step2/2: 続いて提出書類を作成します。\nここでキャンセルされたとき、提出書類はもとよりSRLも作成(更新)されませんのでご注意ください。"; - else - stmp = "Step2/2: Secondly, We should make a submission sheet. \n(CAUTION: When it is canceled, not only a submission sheet is not made, but also the SRL is selected previously.)"; - MessageBox::Show( stmp, "Caution", MessageBoxButtons::OK, MessageBoxIcon::Information ); + this->sucMsg( + "Step2/2: 続いて提出書類を作成します。\nここでキャンセルされたとき、提出書類はもとよりSRLも作成(更新)されませんのでご注意ください。", + "Step2/2: Secondly, We should make a submission sheet. \n(CAUTION: When it is canceled, not only a submission sheet is not made, but also the SRL is selected previously.)" + ); } // ダイアログでファイルパスを決定 { @@ -5413,10 +5434,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "提出書類の作成がキャンセルされました。" ); - else - this->errMsg( "Making a submission sheet is canceled." ); + this->errMsg( "提出書類の作成がキャンセルされました。", "Making a submission sheet is canceled." ); return; } delivfile = dlg->FileName; @@ -5431,10 +5449,8 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; u16 crc; // SRL全体のCRCを計算する(書類に記述するため) if( !getWholeCRCInFile( srlfile, &crc ) ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "CRCの計算に失敗しました。提出書類の作成をキャンセルします。" ); - else - this->errMsg( "Calc CRC is failed. Therefore, Making a submission sheet is canceled." ); + this->errMsg( "CRCの計算に失敗しました。提出書類の作成はキャンセルされます。", + "Calc CRC is failed. Therefore, Making a submission sheet is canceled." ); return; } hcrc = gcnew System::UInt16( crc ); @@ -5449,13 +5465,10 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause; result = this->hDeliv->writeSpreadsheet( delivfile, this->hSrl, hcrc, srlfile, !(this->stripItemJapanese->Checked) ); if( result != ECDeliverableResult::NOERROR ) { - if( this->stripItemJapanese->Checked == true ) - this->errMsg( "書類の作成に失敗しました。" ); - else - this->errMsg( "Making a submission sheet is failed." ); + this->errMsg( "提出書類の作成に失敗しました。", "Making the submission sheet is failed." ); return; } - this->tboxMsg->Text = "書類の作成に成功しました。"; + this->sucMsg( "提出書類の作成に成功しました。", "The submission sheet is made successfully." ); } //stripItemSheet_Click() private: diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.resX b/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.resX index 1f0e93fa..c2b117db 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.resX +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.resX @@ -150,4 +150,34 @@ True + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + \ No newline at end of file diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp index fb932369..c67e34f4 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp @@ -635,53 +635,71 @@ ECSrlResult RCSrl::mrc( FILE *fp ) ECSrlResult RCSrl::mrcNTR( FILE *fp ) { System::Int32 i; + System::Boolean result; // ROMヘッダのチェック // 文字コードチェック + result = true; for( i=0; i < TITLE_NAME_MAX; i++ ) { char c = this->pRomHeader->s.title_name[i]; if( ((c < 0x20) || (0x5f < c)) && (c != 0x00) ) { - this->hErrorList->Add( gcnew RCMRCError( - "ソフトタイトル", 0x0, 0xb, "使用不可のASCIIコードが使用されています。", - "Game Title", "Unusable ASCII code is used.", false ) ); + result = false; } } + if( !result ) + { + this->hErrorList->Add( gcnew RCMRCError( + "ソフトタイトル", 0x0, 0xb, "使用不可のASCIIコードが使用されています。", + "Game Title", "Unusable ASCII code is used.", false, true ) ); + } + + result = true; for( i=0; i < GAME_CODE_MAX; i++ ) { char c = this->pRomHeader->s.game_code[i]; - if( (c < 0x20) || (0x5f < c) ) + if( ((c < 0x20) || (0x5f < c)) && (c != 0x00) ) { - this->hErrorList->Add( gcnew RCMRCError( - "イニシャルコード", 0xc, 0xf, "使用不可のASCIIコードが使用されています。", - "Game Code", "Unusable ASCII code is used.", false ) ); + result = false; } } + if( !result ) + { + this->hErrorList->Add( gcnew RCMRCError( + "イニシャルコード", 0xc, 0xf, "使用不可のASCIIコードが使用されています。", + "Game Code", "Unusable ASCII code is used.", false, true ) ); + } if( memcmp( this->pRomHeader->s.game_code, "NTRJ", GAME_CODE_MAX ) == 0 ) { this->hErrorList->Add( gcnew RCMRCError( "イニシャルコード", 0xc, 0xf, "SDKデフォルトのコード(NTRJ)が使用されています。", - "Game Code", "SDK default code(NTRJ) is used.", false ) ); + "Game Code", "SDK default code(NTRJ) is used.", false, true ) ); } + + result = true; for( i=0; i < MAKER_CODE_MAX; i++ ) { char c = this->pRomHeader->s.maker_code[i]; - if( (c < 0x20) || (0x5f < c) ) + if( ((c < 0x20) || (0x5f < c)) && (c != 0x00) ) { - this->hErrorList->Add( gcnew RCMRCError( - "メーカーコード", 0x10, 0x11, "使用不可のASCIIコードが使用されています。", - "Maker Code", "Unusable ASCII code is used.", false ) ); + result = false; } } + if( !result ) + { + this->hErrorList->Add( gcnew RCMRCError( + "メーカーコード", 0x10, 0x11, "使用不可のASCIIコードが使用されています。", + "Maker Code", "Unusable ASCII code is used.", false, true ) ); + } // 値チェック if( this->pRomHeader->s.rom_type != 0x00 ) { this->hErrorList->Add( gcnew RCMRCError( "デバイスタイプ", 0x13, 0x13, "不正な値です。00hを設定してください。", - "Device Type", "Invalid data. Please set 00h.", false ) ); + "Device Type", "Invalid data. Please set 00h.", false, true ) ); } fseek( fp, 0, SEEK_END ); u32 filesize = ftell(fp); // 実ファイルサイズ(単位Mbit) @@ -690,44 +708,38 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "デバイス容量", 0x14, 0x14, "実ファイルサイズよりも小さい値が指定されています。", - "Device Capacity", "Setting data is less than the actual file size.", false ) ); + "Device Capacity", "Setting data is less than the actual file size.", false, true ) ); } else if( filesize < (romsize*1024*1024/8) ) { this->hWarnList->Add( gcnew RCMRCError( // 警告 "デバイス容量", 0x14, 0x14, "実ファイルサイズに比べて無駄のある値が設定されています。", - "Device Capacity", "Setting data is larger than the actual file size.", false ) ); + "Device Capacity", "Setting data is larger than the actual file size.", false, true ) ); } if( (filesize % 2) != 0 ) { this->hErrorList->Add( gcnew RCMRCError( "実ファイルサイズ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "中途半端な値です。通常では2のべき乗の値です。", - "Actual File Size", "Invalid size. This size is usually power of 2.", false ) ); + "Actual File Size", "Invalid size. This size is usually power of 2.", false, true ) ); } u8 romver = this->pRomHeader->s.rom_version; if( ((romver < 0x00) || (0x09 < romver)) && (romver != 0xE0) ) { this->hErrorList->Add( gcnew RCMRCError( "リマスターバージョン", 0x1e, 0x1e, "不正な値です。正式版では01h-09hのいずれかの値、事前版ではE0hです。", - "Release Ver.", "Invalid data. Please set either one of 01h-09h(Regular ver.), or E0h(Preliminary ver.)", false ) ); - } - if( this->pRomHeader->s.warning_no_spec_rom_speed != 0 ) - { - this->hErrorList->Add( gcnew RCMRCError( - "諸フラグ", 0x1f, 0x1f, "rsfファイルでROMSpeedTypeが設定されていません。", - "Setting Flags", "In a RSF file, the item \"ROMSpeedType\" is not set.", false ) ); + "Release Ver.", "Invalid data. Please set either one of 01h-09h(Regular ver.), or E0h(Preliminary ver.)", false, true ) ); } if( this->pRomHeader->s.banner_offset == 0 ) { this->hErrorList->Add( gcnew RCMRCError( "バナーオフセット", 0x68, 0x6b, "バナーデータが設定されていません。", - "Banner Offset.", "Banner data is not set.", false ) ); + "Banner Offset.", "Banner data is not set.", false, true ) ); } if( this->pRomHeader->s.rom_valid_size == 0 ) { this->hErrorList->Add( gcnew RCMRCError( "ROM実効サイズ", 0x80, 0x83, "値が設定されていません。", - "ROM Valid Size.", "Data is not set.", false ) ); + "ROM Valid Size.", "Data is not set.", false, true ) ); } // CRC @@ -745,7 +757,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "セキュア領域CRC", 0x15e, 0x15f, "セキュア領域のアドレス指定が不正です。", - "Secure Area CRC.", "Illegal address of secure area.", false ) ); + "Secure Area CRC.", "Illegal address of secure area.", false, true ) ); } secures = new u8[secure_size]; // never return if not allocated fseek( fp, (u32)this->pRomHeader->s.main_rom_offset, SEEK_SET ); @@ -760,7 +772,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "セキュア領域CRC", 0x07c, 0x07d, "計算結果と一致しません。セキュア領域が改ざんされた可能性があります。", - "Secure Area CRC.", "Calclated CRC is different from Registered one.", false ) ); + "Secure Area CRC.", "Calclated CRC is different from Registered one.", false, true ) ); } } @@ -770,7 +782,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "キャラクターデータCRC", 0x15c, 0x15d, "計算結果と一致しません。キャラクターデータが改ざんされた可能性があります。", - "Charactor Data CRC.", "Calclated CRC is different from Registered one.", false ) ); + "Charactor Data CRC.", "Calclated CRC is different from Registered one.", false, true ) ); } // ヘッダCRC @@ -779,7 +791,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "ROMヘッダCRC", 0x15e, 0x15f, "計算結果と一致しません。ROMヘッダが改ざんされた可能性があります。", - "ROM Header CRC.", "Calclated CRC is different from Registered one.", false ) ); + "ROM Header CRC.", "Calclated CRC is different from Registered one.", false, true ) ); } // 予約領域 @@ -789,7 +801,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "ROM情報予約領域", 0x078, 0x07f, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area for ROM Info.", "Invalid data is included. Please set 0 into this area.", false ) ); + "Reserved Area for ROM Info.", "Invalid data is included. Please set 0 into this area.", false, true ) ); } } for( i=0; i < 32; i++ ) @@ -798,7 +810,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "予約領域C", 0x078, 0x07f, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area C", "Invalid data is included. Please set 0 into this area.", false ) ); + "Reserved Area C", "Invalid data is included. Please set 0 into this area.", false, true ) ); } } @@ -821,7 +833,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "システムコールライブラリ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "SDKデフォルトです。", - "System-Call Library", "This Library is SDK default one.", false ) ); + "System-Call Library", "This Library is SDK default one.", false, true ) ); } return ECSrlResult::NOERROR; @@ -848,13 +860,19 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "デバイス容量", 0x14, 0x14, "指定可能な容量ではありません。", - "Device Capacity", "Invalid capacity.", false ) ); + "Device Capacity", "Invalid capacity.", false, true ) ); + } + if( this->pRomHeader->s.warning_no_spec_rom_speed != 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "諸フラグ", 0x1f, 0x1f, "rsfファイルでROMSpeedTypeが設定されていません。", + "Setting Flags", "In a RSF file, the item \"ROMSpeedType\" is not set.", false, true ) ); } if( (this->pRomHeader->s.game_cmd_param & CARD_LATENCY_MASK) != CARD_1TROM_GAME_LATENCY ) { this->hErrorList->Add( gcnew RCMRCError( "ROMコントロール情報", 0x60, 0x67, "TWLではマスクROMは用意されていません。ワンタイムPROM設定にしてください。", - "ROM Control Info.", "Mask ROM can be set. Please set One-time PROM.", false ) ); + "ROM Control Info.", "Mask ROM can be set. Please set One-time PROM.", false, true ) ); } // 予約領域 @@ -864,7 +882,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "予約領域A", 0x015, 0x01b, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area A", "Invalid data is included. Please set 0 into this area.", false ) ); + "Reserved Area A", "Invalid data is included. Please set 0 into this area.", false, true ) ); } } for( i=0; i < 39; i++ ) @@ -873,7 +891,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "予約領域B", 0x099, 0x0bf, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area B", "Invalid data is included. Please set 0 into this area.", false ) ); + "Reserved Area B", "Invalid data is included. Please set 0 into this area.", false, true ) ); } } @@ -917,14 +935,14 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hWarnList->Add( gcnew RCMRCError( "アプリ種別", 0x230, 0x237, "不正な値です。", - "Application Type", "Illigal type.", false ) ); + "Application Type", "Illigal type.", false, true ) ); } #ifdef METWL_VER_APPTYPE_USER if( apptype != appUser ) { this->hWarnList->Add( gcnew RCMRCError( "アプリ種別", 0x230, 0x237, "ユーザアプリではありません。", - "Application Type", "Not USER application.", false ) ); + "Application Type", "Not USER application.", false, true ) ); } #endif #ifdef METWL_VER_APPTYPE_SYSTEM @@ -958,14 +976,14 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "アクセスコントロール情報", 0x1b4, 0x1b7, "ゲームカード電源設定にノーマルモードとNTRモードの両方を設定することはできません。", - "Access Control Info.", "Game card power setting is either normal mode or NTR mode.", false ) ); + "Access Control Info.", "Game card power setting is either normal mode or NTR mode.", false, true ) ); } if( ((this->pRomHeader->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) == 0) && // カードアプリ ((this->pRomHeader->s.access_control.game_card_on != 0) || (this->pRomHeader->s.access_control.game_card_nitro_mode != 0)) ) { this->hErrorList->Add( gcnew RCMRCError( "アクセスコントロール情報", 0x1b4, 0x1b7, "ゲームカード用ソフトに対してゲームカード電源設定をすることはできません。", - "Access Control Info.", "Game card power setting is not for Game Card Soft.", false ) ); + "Access Control Info.", "Game card power setting is not for Game Card Soft.", false, true ) ); } if( this->pRomHeader->s.access_control.shared2_file == 0 ) { @@ -975,7 +993,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "アクセスコントロール情報", 0x1b4, 0x1b7, "Shared2ファイルのサイズが設定されているにもかかわらず不使用設定になっています。", - "Access Control Info.", "Sizes of shared2 files is setting, but using them is not enabled.", false ) ); + "Access Control Info.", "Sizes of shared2 files is setting, but using them is not enabled.", false, true ) ); } } @@ -983,7 +1001,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hWarnList->Add( gcnew RCMRCError( "SCFG設定", 0x1b8, 0x1bb, "SCFGレジスタへアクセス可能になっています。", - "SCFG Setting", "In this setting, SCFG register is accessible.", false ) ); + "SCFG Setting", "In this setting, SCFG register is accessible.", false, true ) ); } if( (this->pRomHeader->s.titleID_Lo[0] != this->pRomHeader->s.game_code[3]) || @@ -993,7 +1011,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hWarnList->Add( gcnew RCMRCError( "タイトルID", 0x230, 0x233, "下位4バイトがイニシャルコードと一致しません。", - "Title ID", "Lower 4 bytes don't match ones of Game Code.", false ) ); + "Title ID", "Lower 4 bytes don't match ones of Game Code.", false, true ) ); } for( i=0; i < (0x2f0 - 0x240); i++ ) @@ -1002,7 +1020,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "予約領域F", 0x240, 0x2ef, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area F", "Invalid data is included. Please set 0 into this area.", false ) ); + "Reserved Area F", "Invalid data is included. Please set 0 into this area.", false, true ) ); } } @@ -1013,7 +1031,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hErrorList->Add( gcnew RCMRCError( "予約領域D", 0x378, 0xf7f, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area D", "Invalid data is included. Please set 0 into this area.", false ) ); + "Reserved Area D", "Invalid data is included. Please set 0 into this area.", false, true ) ); } } @@ -1105,7 +1123,7 @@ System::Boolean RCSrl::mrcRegion( System::UInt32 region ) { this->hErrorList->Add( gcnew RCMRCError( "カードリージョン", 0x1b0, 0x1b3, "仕向地の組み合わせが不正です。本ツールを用いて修正してください。", - "Card Region", "Illigal Region. Please modify this information using this tool.", true ) ); + "Card Region", "Illigal Region. Please modify this information using this tool.", true, true ) ); bRegionResult = false; } #endif @@ -1121,8 +1139,9 @@ System::Boolean RCSrl::mrcRegion( System::UInt32 region ) this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "仕向地の設定が不正のため、ROMデータ内のすべてのレーティング団体の情報を無視して読み込みました。本ツールを用いて修正してください。", - "Parental Control", "Illigal region. In reading, therefore, settings for all rating organizations are ignored. Please set this infomation using this tool.", - true ) ); + "Parental Control", + "Illigal region. In reading, therefore, settings for all rating organizations are ignored. Please set this infomation using this tool.", + true, true ) ); } return bRegionResult; } @@ -1243,7 +1262,7 @@ void RCSrl::mrcRegionOrganization( System::UInt32 region ) { this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", 0x2f0, 0x2ff, ognArray[ogn] + warnEmptyJ, - "Parental Control", ognArray[ogn] + warnEmptyE, true ) ); + "Parental Control", ognArray[ogn] + warnEmptyE, true, true ) ); this->clearParentalControl( ogn ); } } @@ -1261,7 +1280,7 @@ void RCSrl::mrcRegionOrganization( System::UInt32 region ) { this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", 0x2f0, 0x2ff, warnFillJ, - "Parental Control", warnFillE, true ) ); + "Parental Control", warnFillE, true, true ) ); } } //mrcRegion @@ -1309,7 +1328,7 @@ void RCSrl::mrcRating( System::Byte ogn ) { this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", 0x2f0, 0x2ff, ognArray[ ogn ] + warnDisableJ, - "Parental Control", ognArray[ ogn ] + warnDisableE, true ) ); + "Parental Control", ognArray[ ogn ] + warnDisableE, true, true ) ); this->clearParentalControl( ogn ); } else @@ -1325,7 +1344,7 @@ void RCSrl::mrcRating( System::Byte ogn ) { this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", 0x2f0, 0x2ff, ognArray[ ogn ] + warnIllegalJ, - "Parental Control", ognArray[ ogn ] + warnIllegalE, true ) ); + "Parental Control", ognArray[ ogn ] + warnIllegalE, true, true ) ); this->clearParentalControl( ogn ); } } @@ -1334,7 +1353,7 @@ void RCSrl::mrcRating( System::Byte ogn ) // RPが立っていたら問答無用に警告 this->hWarnList->Add( gcnew RCMRCError( "ペアレンタルコントロール情報", 0x2f0, 0x2ff, ognArray[ ogn ] + warnPendingJ, - "Parental Control", ognArray[ ogn ] + warnPendingE, true ) ); + "Parental Control", ognArray[ ogn ] + warnPendingE, true, true ) ); this->clearParentalControl( ogn ); } } diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h index 808ba9ab..1852f051 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h @@ -129,12 +129,13 @@ namespace MasterEditorTWL System::String ^hNameE; // 英語版 System::String ^hMsgE; System::Boolean ^hEnableModify; // マスタエディタで修正可能かどうか + System::Boolean ^hAffectRom; // 変更するとSRL(ROMバイナリ)が変更されるか private: RCMRCError(){} // 封じる public: RCMRCError( System::String ^name, System::UInt32 beg, System::UInt32 end, System::String ^msg, - System::String ^nameE, System::String ^msgE, System::Boolean enableModify ) + System::String ^nameE, System::String ^msgE, System::Boolean enableModify, System::Boolean affectRom ) { if( name == nullptr ) this->hName = gcnew System::String(""); @@ -160,11 +161,16 @@ namespace MasterEditorTWL this->hMsgE = msgE; this->hEnableModify = gcnew System::Boolean( enableModify ); + this->hAffectRom = gcnew System::Boolean( affectRom ); } public: property System::Boolean EnableModify { - System::Boolean get(){ return *(this->hEnableModify); } + System::Boolean get(){ return *(this->hEnableModify); } // Read Only + } + property System::Boolean AffectRom + { + System::Boolean get(){ return *(this->hAffectRom); } } public: // gridViewの表示形式にあわせる