From ccc9d4894d2456f46553fe08b8f5d3b6cc6a15bd Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Fri, 29 Aug 2008 08:48:15 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=82=A8=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=82=BF:=E3=83=9A=E3=82=A2=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=83=AB=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E6=99=82?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E4=BD=9C=E6=88=90=E4=B8=AD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2322 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../tools/MasterEditorTWL/MasterEditorTWL.ncb | Bin 11103232 -> 11119616 bytes .../tools/MasterEditorTWL/MasterEditorTWL.suo | Bin 39936 -> 40448 bytes .../MasterEditorTWL/Debug/BuildLog.htm | Bin 10938 -> 10612 bytes .../MasterEditorTWL/MasterEditorTWL/Form1.h | 2 +- .../MasterEditorTWL/MasterEditorTWL/srl.cpp | 341 ++++++++++++++++-- .../MasterEditorTWL/MasterEditorTWL/srl.h | 4 + .../MasterEditorTWL/utility.cpp | 53 --- .../MasterEditorTWL/MasterEditorTWL/utility.h | 2 - 8 files changed, 315 insertions(+), 87 deletions(-) diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.ncb b/build/tools/MasterEditorTWL/MasterEditorTWL.ncb index 0b887d0bebd01144b1511cf0558cf5c13c003f8e..1ebb22efba57cc731c085c1e045daf5e0a5d5f27 100644 GIT binary patch delta 17435 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 delta 40972 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 P5veR*uAsyGN4Eb7Ampt7 diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.suo b/build/tools/MasterEditorTWL/MasterEditorTWL.suo index 70d40089461666a1251b51688f6c3946f30eab3e..978a205171af7e4392de9f29b5dec561a7ba075a 100644 GIT binary patch delta 2291 zcma)7T~L%&82--3w<5F>Ea>pJvCIFD2s&aIKW_5ZiUES=8i-yr_O}GcQV7VdLl=k) z!oFR!)|AynSTh-WE^4M`q(H4H;-cxI@un$9$Hwf&YG{h>dGXL}&R+D+KHvMC=RD_p z?>XQ1o%MaJ`##k_T+nHuEZx3S)3ir`3ZN3G0;+*sfCI>)tx<{AdawrIF~AAz0UCk5 zz~fXLwd6P4aiwKN-^!RTMHEEePC012r@Lmujo?kdSHJ;aAJ7W40sDcKP$={S@q@b-WzQ5h_>&l&w5Sq3F zZLZoTQ<5&l*f&C|0MhQW{b6XD)dW#4TZeQ}C;M%q!juW8Mvsn#jEdGkXE3W=7)zs7 zW&S*y?8wd+=3lOl^B!t!lT$fvVJvUEl0Zhjjcj>87_RSsyUE_{`~hL0@DQCZm=Ofq8&; zh2qPSlD<)muaOtmI?Bs7ig(L(uta@G}q{mzS?;~^Tt*azYlllME#z1g3Gr3>u*NKIa;pw>aju&HZg~U|AV+ zl~w}nXYNE4D2;g`xC6OZX*_lpIL9HS@wRMHT8Gjgd9}l6uzo~|Jbxef)5spBWr80C z=NM2L`$oVwAp63!Y^)|8S}rnsa)3cKwo++X&}zVS++TAlk6l=g0zc0p+um1c);R%st8jf<%Q=P=>p7yR+}YP52&{s12|976!t!Z8eR?IQqd z3_rjpA*ptj%KX`^2RQibx%Zj|TzOueAsgV)Jd&&6SbHs*^NGT~-2nS0ff|4#6#{D< zX&~&&QCc^6p6aYs8vE+N^N^bb_L%#*fL;)+TJtC)FSUg`5yQxh()gdJNBJzM znjc#VGE4l}Qk7;?8h>ul;2aq+ux~qHPf(3qy7TWMASbyRwu|eycns5?vuKn@ZWPD4^zf<1_YI!j-!H8?g+!^+Hofd vXSE!mD+bjD{t|ymF&+}ZakD`_e=H@RHUF=jlYW2D#1p(zJ0_&#+?@Ca@Z_bf delta 2468 zcmZuyd2G~07~T2pZ+k4I?Ji48E2Y~@q+I3LLhr?1&>~<9a+k&+C@BanM=92>p{sI-5`&;f#01z;@xZWB5K*8F(U@42QxMA08U!lR`o4CE#q1<6@6DUt(^Nq~rV-&N{<^Xen65vljzUDv0EJEnCWw1%0pGS`@tAsH@C>C zGCh90(D!_``y4fmu*n?>r9w}B`#~(F$J@z1@PfW=TjDwQK)Z~8rc&s%a}5 z1-J?DiQWe80Il@37Pr0B?n%DlAHny?`Euhs#-0r`0YR3{4bq!gt5c3S$>fB!fL3Rp z$l%~*!0!;b;HzNvqJbL_L%}UQyj#k<&7Q2z`Bnsq7{p++om4VBmXFrN)oG>Gc?Hy< zk1$O}FPPf%YP8e}Y&au+$>#ZGb-Ii;((TB|`iC$LQuzWE-^bM*t_dFyCR%Hw_g z2;B>OL3s(#XI0!i?<0>__Gj0O;^Sf(AlE`&!|9t$?ik* z$vjjZZ?FlPCwT?e!lz{i7V#CKEmj_nFN5afDwM|yzN+FHl&4{R!!dNiF!-G^`B^)u z0?#XtGrkDT6SpdFC3KsL>rfs)d0n*uvY|$JgYiHZG`C3Qp@Izkp+h)3yM;QY=cUZz z0JK#Af5)v7;MgjFJw_eC&-Yf{exi0lM}Xh6$Vs!L(fq$BDY``S`BY_> zMjI)1$-AEUX&SXv_~>NbG8Dv?C&V2Xdy zM*HXaQRLPIw0(VpyRIKKzg}*6@-@eO%aWQtzE+aaB^w2`ZVI5dwdFoCrsm2C6f^01xmog568b#SD1znI`cF;#Iq94Jk*lPd) diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm b/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm index 02014d505b722caff2f7f07ca1ee76aa052a80a4..abc2c459861eca3f7f35f925640adde7a4e0371b 100644 GIT binary patch delta 251 zcmdlL`Xy+C8Jn;nA=t4aFu(wjH&hJhqauv+8Ce}WsE>1nDrt(9x~%61zmZk~tH|kJ4a2GVn5RF%&ZtG2}4lF~CJ8Uldd1MDT8l hOUlA|44V!97@RbiWFTKEkfiIU2h^vx`LxPP763PiN8tbf diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h b/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h index 650d4f8e..e15c7cd6 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/Form1.h @@ -3071,7 +3071,7 @@ private: System::Windows::Forms::GroupBox^ gboxMakeMaster; this->Controls->Add(this->gboxSrl); this->Controls->Add(this->tboxMsg); this->Name = L"Form1"; - this->Text = L"MasterEditor for TWL"; + this->Text = L"TWL MasterEditor"; this->gboxSrl->ResumeLayout(false); this->gboxSrl->PerformLayout(); this->gboxCRC->ResumeLayout(false); diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp index 9b969d0b..f048c109 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp @@ -68,6 +68,14 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename ) (void)fclose(fp); return r; } + } + + // ROMヘッダの値をROM固有情報フィールドに反映させる + (void)this->setRomInfo(); + + // すべて設定したあとにMRC + { + ECSrlResult r; r = this->mrc( fp ); if( r != ECSrlResult::NOERROR ) { @@ -76,10 +84,6 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename ) } } (void)fclose( fp ); - - // ROMヘッダの値をROM固有情報フィールドに反映させる - (void)this->setRomInfo(); - return (ECSrlResult::NOERROR); } @@ -876,27 +880,6 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) // ROMヘッダのチェック (TWL専用領域) // 値チェック - u32 region = this->pRomHeader->s.card_region_bitmap; - if( (region != METWL_MASK_REGION_JAPAN) && - (region != METWL_MASK_REGION_AMERICA) && - (region != METWL_MASK_REGION_EUROPE) && - (region != (METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA)) ) - { -#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER) - if( region != METWL_MASK_REGION_ALL ) // オールリージョンを許す - { - this->hErrorList->Add( gcnew RCMRCError( - "カードリージョン", 0x1b0, 0x1b3, "仕向地の組み合わせが不正です。本ツールを用いて修正できます。", - "Card Region", "Illigal Region. This tool can modify this information.", true ) ); - } -#else - { - this->hErrorList->Add( gcnew RCMRCError( - "カードリージョン", 0x1b0, 0x1b3, "仕向地の組み合わせが不正です。本ツールを用いて修正できます。", - "Card Region", "Illigal Region. This tool can modify this information.", true ) ); - } -#endif - } { u32 idH; u8 idL[4]; @@ -975,14 +958,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.", true ) ); + "Access Control Info.", "Game card power setting is either normal mode or NTR mode.", false ) ); } 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.", true ) ); + "Access Control Info.", "Game card power setting is not for Game Card Soft.", false ) ); } if( this->pRomHeader->s.access_control.shared2_file == 0 ) { @@ -992,7 +975,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.", true ) ); + "Access Control Info.", "Sizes of shared2 files is setting, but using them is not enabled.", false ) ); } } @@ -1000,7 +983,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) { this->hWarnList->Add( gcnew RCMRCError( "SCFG設定", 0x1b8, 0x1bb, "SCFGレジスタへアクセス可能になっています。", - "SCFG Setting", "In this setting, SCFG register is accessible.", true ) ); + "SCFG Setting", "In this setting, SCFG register is accessible.", false ) ); } if( (this->pRomHeader->s.titleID_Lo[0] != this->pRomHeader->s.game_code[3]) || @@ -1010,7 +993,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.", true ) ); + "Title ID", "Lower 4 bytes don't match ones of Game Code.", false ) ); } for( i=0; i < (0x2f0 - 0x240); i++ ) @@ -1036,5 +1019,301 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) // ROMヘッダ以外の領域のチェック + ECSrlResult pctl = this->mrcTWLParentalControl(); + if( pctl != ECSrlResult::NOERROR ) + { + return pctl; + } + return ECSrlResult::NOERROR; -} // mrcTWL() \ No newline at end of file +} // mrcTWL() + +// PCTL専用 +ECSrlResult RCSrl::mrcTWLParentalControl(void) +{ + // リージョン + System::Boolean bRegionResult = true; // リージョン設定が正常であるか + u32 region = this->pRomHeader->s.card_region_bitmap; + if( (region != METWL_MASK_REGION_JAPAN) && + (region != METWL_MASK_REGION_AMERICA) && + (region != METWL_MASK_REGION_EUROPE) && + (region != METWL_MASK_REGION_AUSTRALIA) && + (region != (METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA)) ) + { +#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER) + if( region != METWL_MASK_REGION_ALL ) // オールリージョンを許す + { + this->hErrorList->Add( gcnew RCMRCError( + "カードリージョン", 0x1b0, 0x1b3, "仕向地の組み合わせが不正です。本ツールを用いて修正できます。", + "Card Region", "Illigal Region. This tool can modify this information.", true ) ); + bRegionResult = false; + } +#else + { + this->hErrorList->Add( gcnew RCMRCError( + "カードリージョン", 0x1b0, 0x1b3, "仕向地の組み合わせが不正です。本ツールを用いて修正してください。", + "Card Region", "Illigal Region. Please modify this information using this tool.", true ) ); + bRegionResult = false; + } +#endif + } + // リージョンが不正のときすべてのPCTL情報をクリア(ROMヘッダには影響しない) + if( !bRegionResult ) + { + int i; + for( i=0; i < PARENTAL_CONTROL_INFO_SIZE; i++ ) + { + this->clearParentalControl( i ); + } + 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 ) ); + return ECSrlResult::NOERROR; // もうこれ以上チェックしない + } + + // リージョンに含まれていない団体の設定がされていたらダメ + System::String ^warnEmptyJ = gcnew System::String( "レーティング審査の必要がないソフトだとみなします。審査が必要である場合には、本ツールを用いて修正してください。" ); + System::String ^warnEmptyE = gcnew System::String( "This ROM is not necessary for CERO rating. If necessary, please set this infomation using this tool." ); + System::String ^warnFillJ = gcnew System::String( "リージョンに含まれない団体の情報が設定されていたため、これらの団体の情報を無視して読み込みました。本ツールを用いて修正してください。" ); + System::String ^warnFillE = gcnew System::String( "Some organizations is not include in the region. In reading, therefore, settings for all rating organizations are ignored. Please set this infomation using this tool." ); + if( region == METWL_MASK_REGION_JAPAN ) + { + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_CERO ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "CERO: " + warnEmptyJ, + "Parental Control", "CERO: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_CERO ); + } + if( (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_ESRB ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_USK ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_GEN ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_PRT ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_BBFC ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_OFLC ] != 0) ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, warnFillJ, + "Parental Control", warnFillE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_ESRB ); + this->clearParentalControl( OS_TWL_PCTL_OGN_USK ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_GEN ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_PRT ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_BBFC ); + this->clearParentalControl( OS_TWL_PCTL_OGN_OFLC ); + } + } + if( region == METWL_MASK_REGION_AMERICA ) + { + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_ESRB ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "ESRB: " + warnEmptyJ, + "Parental Control", "ESRB: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_ESRB ); + } + if( (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_CERO ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_USK ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_GEN ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_PRT ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_BBFC ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_OFLC ] != 0) ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, warnFillJ, + "Parental Control", warnFillE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_CERO ); + this->clearParentalControl( OS_TWL_PCTL_OGN_USK ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_GEN ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_PRT ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_BBFC ); + this->clearParentalControl( OS_TWL_PCTL_OGN_OFLC ); + } + } + if( region == METWL_MASK_REGION_EUROPE ) + { + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_USK ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "USK: " + warnEmptyJ, + "Parental Control", "USK: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_USK ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_GEN ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI(General): " + warnEmptyJ, + "Parental Control", "PEGI(General): " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_GEN ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_PRT ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI(Portugal): " + warnEmptyJ, + "Parental Control", "PEGI(Portugal): " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_PRT ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_BBFC ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI and BBFC: " + warnEmptyJ, + "Parental Control", "PEGI and BBFC: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_BBFC ); + } + if( (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_CERO ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_ESRB ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_OFLC ] != 0) ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, warnFillJ, + "Parental Control", warnFillE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_CERO ); + this->clearParentalControl( OS_TWL_PCTL_OGN_ESRB ); + this->clearParentalControl( OS_TWL_PCTL_OGN_OFLC ); + } + } + if( region == METWL_MASK_REGION_AUSTRALIA ) + { + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_OFLC ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "OFLC: " + warnEmptyJ, + "Parental Control", "OFLC: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_OFLC ); + } + if( (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_CERO ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_ESRB ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_USK ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_GEN ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_PRT ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_BBFC ] != 0) ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, warnFillJ, + "Parental Control", warnFillE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_CERO ); + this->clearParentalControl( OS_TWL_PCTL_OGN_ESRB ); + this->clearParentalControl( OS_TWL_PCTL_OGN_USK ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_GEN ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_PRT ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_BBFC ); + } + } + if( region == (METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA) ) + { + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_USK ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "USK: " + warnEmptyJ, + "Parental Control", "USK: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_USK ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_GEN ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI(General): " + warnEmptyJ, + "Parental Control", "PEGI(General): " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_GEN ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_PRT ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI(Portugal): " + warnEmptyJ, + "Parental Control", "PEGI(Portugal): " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_PRT ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_BBFC ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI and BBFC: " + warnEmptyJ, + "Parental Control", "PEGI and BBFC: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_BBFC ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_OFLC ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "OFLC: " + warnEmptyJ, + "Parental Control", "OFLC: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_OFLC ); + } + if( (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_CERO ] != 0) || + (this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_ESRB ] != 0) ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, warnFillJ, + "Parental Control", warnFillE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_CERO ); + this->clearParentalControl( OS_TWL_PCTL_OGN_ESRB ); + } + } + if( region == METWL_MASK_REGION_ALL ) + { + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_CERO ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "CERO: " + warnEmptyJ, + "Parental Control", "CERO: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_CERO ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_ESRB ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "ESRB: " + warnEmptyJ, + "Parental Control", "ESRB: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_ESRB ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_USK ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "USK: " + warnEmptyJ, + "Parental Control", "USK: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_USK ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_GEN ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI(General): " + warnEmptyJ, + "Parental Control", "PEGI(General): " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_GEN ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_PRT ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI(Portugal): " + warnEmptyJ, + "Parental Control", "PEGI(Portugal): " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_PRT ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_PEGI_BBFC ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "PEGI and BBFC: " + warnEmptyJ, + "Parental Control", "PEGI and BBFC: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_PEGI_BBFC ); + } + if( this->pRomHeader->s.parental_control_rating_info[ OS_TWL_PCTL_OGN_OFLC ] == 0 ) + { + this->hWarnList->Add( gcnew RCMRCError( + "ペアレンタルコントロール情報", 0x2f0, 0x2ff, "OFLC: " + warnEmptyJ, + "Parental Control", "OFLC: " + warnEmptyE, true ) ); + this->clearParentalControl( OS_TWL_PCTL_OGN_OFLC ); + } + } + + // リージョンに含まれている団体の設定が正しいかどうか + if( region == METWL_MASK_REGION_JAPAN ) + { + if( *(this->hArrayParentalEffect[ OS_TWL_PCTL_OGN_CERO ]) == false ) + { + } + } + + return ECSrlResult::NOERROR; +} + +// ペアレンタルコントロールのクリア +void RCSrl::clearParentalControl( System::Byte ogn ) +{ + this->hArrayParentalRating[ ogn ] = gcnew System::Byte( 0x00 ); + this->hArrayParentalEffect[ ogn ] = gcnew System::Boolean( false ); + this->hArrayParentalAlways[ ogn ] = gcnew System::Boolean( false ); +} \ No newline at end of file diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h index dc1817e4..6b2b0f77 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h @@ -310,6 +310,10 @@ namespace MasterEditorTWL ECSrlResult mrc( FILE *fp ); ECSrlResult mrcNTR( FILE *fp ); ECSrlResult mrcTWL( FILE *fp ); + ECSrlResult mrcTWLParentalControl(void); + + // utility + void clearParentalControl( System::Byte ogn ); }; // end of ref class RCSrl diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/utility.cpp b/build/tools/MasterEditorTWL/MasterEditorTWL/utility.cpp index 25ea1d62..ec9f0aaa 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/utility.cpp +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/utility.cpp @@ -378,56 +378,3 @@ System::Collections::Generic::List^ MasterEditorTWL::patternMatch( FILE *fp } return list; } - -void MasterEditorTWL::debugPatternMatch( System::String ^filename ) -{ - FILE *fp = NULL; - u32 i; - const u8 pattern[8] = {0x21, 0x06, 0xc0, 0xde, 0xde, 0xc0, 0x06, 0x21}; - System::Collections::Generic::List ^list; - const char *pchFilename = - (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer(); - - // ファイルを開いてROMヘッダのみ読み出す - if( fopen_s( &fp, pchFilename, "rb" ) != NULL ) - { - System::Diagnostics::Debug::WriteLine( "f_open failed" ); - return; - } - - list = MasterEditorTWL::patternMatch( fp, pattern , 8 ); - fclose( fp ); - - i=0; - if( list == nullptr ) - { - System::Diagnostics::Debug::WriteLine( "no list" ); - return; - } - for each( u32 item in list ) - { - System::Diagnostics::Debug::WriteLine( "item " + i.ToString() + " = 0x" + item.ToString("X") ); - i++; - } - - //u8 buf[ 512 ]; - //u32 i; - //u8 pattern[8] = {0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05}; - //System::Collections::Generic::List ^list; - - //for( i=0; i < 512; i++ ) - //{ - // buf[i] = i % 256; - //} - - //list = MasterEditorTWL::patternMatch( buf, 512, pattern, 8, true ); - - //i = 0; - //System::Diagnostics::Debug::WriteLine( "pattern match" ); - //for each( u32 item in list ) - //{ - // System::Diagnostics::Debug::WriteLine( "item " + i + " = " + item ); - // i++; - //} -} - \ No newline at end of file diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/utility.h b/build/tools/MasterEditorTWL/MasterEditorTWL/utility.h index 3e952b06..2b687fb6 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/utility.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/utility.h @@ -70,6 +70,4 @@ namespace MasterEditorTWL // System::Collections::Generic::List^ patternMatch( FILE *fp, const u8 *pattern, const u32 patternLen ); - void debugPatternMatch( System::String ^filename ); - } // end of namespace MasterEditorTWL