From 29a65ee72ea04d63fbf392a64090eadc9c6fa601 Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Thu, 11 Sep 2008 08:04:50 +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=90=E3=83=8A=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E6=96=87=E5=AD=97=E3=82=B3=E3=83=BC=E3=83=89=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E8=BF=BD=E5=8A=A0=E3=80=82=E4=BA=88=E7=B4=84?= =?UTF-8?q?=E9=A0=98=E5=9F=9F=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=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@2492 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../tools/MasterEditorTWL/MasterEditorTWL.ncb | Bin 11217920 -> 11217920 bytes .../tools/MasterEditorTWL/MasterEditorTWL.suo | Bin 49152 -> 49152 bytes .../MasterEditorTWL/Debug/BuildLog.htm | Bin 16374 -> 16374 bytes .../MasterEditorTWL/MasterEditorTWL/srl.cpp | 273 +++++++++++++++++- .../MasterEditorTWL/MasterEditorTWL/srl.h | 2 + 5 files changed, 261 insertions(+), 14 deletions(-) diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.ncb b/build/tools/MasterEditorTWL/MasterEditorTWL.ncb index 058b9ebfce46dd0acd2efbd7ef69a77b9603142f..fd4d1e55ccbedba2eac05d2104fa6de03bbd3d83 100644 GIT binary patch delta 35599 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 EUxbE5{Qv*} diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.suo b/build/tools/MasterEditorTWL/MasterEditorTWL.suo index 8834acfdaa584098e87ca5c0e639fafb884b1a88..b6c94fdbd6e0b20309356308487221d0221b5b05 100644 GIT binary patch delta 2890 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 diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp index d4d31c17..268bafda 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.cpp @@ -14,6 +14,8 @@ using namespace MasterEditorTWL; +extern const u8 gBannerFont[]; + // // RCSrl クラス // @@ -905,24 +907,36 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) } // 予約領域 + System::Boolean bRsv = true; for( i=0; i < 8; i++ ) { if( this->pRomHeader->s.ctrl_reserved_B[i] != 0 ) { - 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, true ) ); + bRsv = false; + break; } } + if( !bRsv ) + { + 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, true ) ); + } + bRsv = true; for( i=0; i < 32; i++ ) { if( this->pRomHeader->s.reserved_C[i] != 0 ) { - this->hErrorList->Add( gcnew RCMrcError( - "予約領域C", 0x078, 0x07f, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area C", "Invalid data is included. Please set 0 into this area.", false, true ) ); + bRsv = false; + break; } } + if( !bRsv ) + { + this->hErrorList->Add( gcnew RCMrcError( + "予約領域C", 0x078, 0x07f, "不正な値が含まれています。この領域をすべて0で埋めてください。", + "Reserved Area C", "Invalid data is included. Please set 0 into this area.", false, true ) ); + } // ROMヘッダ以外の領域のチェック (ファイルから適宜リードする) @@ -948,6 +962,7 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp ) return ECSrlResult::NOERROR; } // mrcNTR() +// TWL専用 ECSrlResult RCSrl::mrcTWL( FILE *fp ) { System::Int32 i; @@ -995,6 +1010,9 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) "実ファイルサイズ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "中途半端な値です。通常では2のべき乗の値です。", "Actual File Size", "Invalid size. This size is usually power of 2.", false, true ) ); } + // 1Gbit以上のときの最終領域 + this->mrcPadding( fp ); + // セグメント3のCRC u16 crcseg3; BOOL crcret = getSeg3CRCInFp( fp, &crcseg3 ); @@ -1039,24 +1057,36 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) } // 予約領域 + System::Boolean bReserved = true; for( i=0; i < 7; i++ ) { if( this->pRomHeader->s.reserved_A[i] != 0 ) { - this->hErrorList->Add( gcnew RCMrcError( - "予約領域A", 0x015, 0x01b, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area A", "Invalid data is included. Please set 0 into this area.", false, true ) ); + bReserved = false; + break; } } + if( !bReserved ) + { + this->hErrorList->Add( gcnew RCMrcError( + "予約領域A", 0x015, 0x01b, "不正な値が含まれています。この領域をすべて0で埋めてください。", + "Reserved Area A", "Invalid data is included. Please set 0 into this area.", false, true ) ); + } + bReserved = true; for( i=0; i < 39; i++ ) { if( this->pRomHeader->s.reserved_B[i] != 0 ) { - this->hErrorList->Add( gcnew RCMrcError( - "予約領域B", 0x099, 0x0bf, "不正な値が含まれています。この領域をすべて0で埋めてください。", - "Reserved Area B", "Invalid data is included. Please set 0 into this area.", false, true ) ); + bReserved = false; + break; } } + if( !bReserved ) + { + this->hErrorList->Add( gcnew RCMrcError( + "予約領域B", 0x099, 0x0bf, "不正な値が含まれています。この領域をすべて0で埋めてください。", + "Reserved Area B", "Invalid data is included. Please set 0 into this area.", false, true ) ); + } // ROMヘッダのチェック (TWL専用領域) @@ -1192,12 +1222,13 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) "Title ID", "Lower 4 bytes don't match ones of Game Code.", false, true ) ); } - System::Boolean bReserved = true; + bReserved = true; for( i=0; i < (0x2f0 - 0x240); i++ ) { if( this->pRomHeader->s.reserved_ltd_F[i] != 0 ) { bReserved = false; + break; } } if( !bReserved ) @@ -1214,6 +1245,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) if( p[ 0x378 + i ] != 0 ) { bReserved = false; + break; } } if( !bReserved ) @@ -1241,6 +1273,8 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) return pctl; } + this->mrcBanner( fp ); + // 追加チェック if( *(this->hMrcSpecialList->hIsCheck) == true ) { @@ -1282,7 +1316,6 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp ) } } } - } //if( *(this->hMrcSpecialList->hIsCheck) ) return ECSrlResult::NOERROR; @@ -1550,3 +1583,215 @@ void RCSrl::clearParentalControl( System::Byte ogn ) this->hArrayParentalEffect[ ogn ] = gcnew System::Boolean( false ); this->hArrayParentalAlways[ ogn ] = gcnew System::Boolean( false ); } + +// パディングのチェック +void RCSrl::mrcPadding(FILE *fp) +{ + u32 romsize = 1 << (this->pRomHeader->s.rom_size); // ROM容量 + u32 padsize = 0; // 単位はByte + System::String ^padstrJ = gcnew System::String(""); + System::String ^padstrE = gcnew System::String(""); + System::String ^romstr = gcnew System::String(""); + + switch( romsize ) + { + case 1024: + padsize = 0x00280000; // 20Mbit = 2.5MB + padstrJ = "最終20Mbit"; + padstrE = "Last 20Mbit"; + romstr = "1Gbit"; + break; + case 2048: + padsize = 0x00500000; // 40Mbit = 5MB + padstrJ = "最終40Mbit"; + padstrE = "Last 40Mbit"; + romstr = "2Gbit"; + break; + case 4096: + padsize = 0x00A60000; // 83Mbit = 10.375MB + padstrJ = "最終83Mbit"; + padstrE = "Last 83Mbit"; + romstr = "4Gbit"; + break; + default: + padsize = 0; + break; + } + if( padsize == 0 ) + { + return; + } + + fseek( fp, 0, SEEK_END ); + u32 filesize = ftell(fp); // 実ファイルサイズ(単位Mbit) + u32 offset = ((romsize / 8) * 1024 * 1024) - padsize; + if( (offset + padsize) > filesize ) + { + this->hErrorList->Add( gcnew RCMrcError( + padstrJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, + "読み出すことができませんでした。", + padstrE, "This area couldn't be read", true, true ) ); + return; + } + + u8 *buf = new u8[ padsize ]; + fseek( fp, offset, SEEK_SET ); + if( padsize != fread( buf, 1, padsize, fp ) ) + { + this->hErrorList->Add( gcnew RCMrcError( + padstrJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, + "読み出すことができませんでした。", + padstrE, "This area couldn't be read", true, true ) ); + delete []buf; + return; + } + + System::Boolean bResult = true; + u32 i; + for( i=0; i < padsize; i++ ) + { + if( buf[i] != 0xff ) + { + bResult = false; + } + } + if( !bResult ) + { + this->hErrorList->Add( gcnew RCMrcError( + padstrJ, METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, + "FFh以外の値が格納されています。 " + romstr + " ROMの容量制限が守られていません。", + padstrE, + "This area includes illegai data. " + romstr + " Volume constraint is violated.", + true, true ) ); + } + delete []buf; +} + +// バナー +void RCSrl::mrcBanner(FILE *fp) +{ + u8 map[ 0x10000 ]; + u32 i; + + // 使用可能な文字のマップをつくる + // 文字コードをインデックスとして使用可能なら 1 が入る + // そうでないなら 0 が入る + for( i=0; i < 0x10000; i++ ) + { + map[i] = 0; + } + for( i=2; ; i+=2 ) // 0個目の要素はマジックコードなので含めない + { + u16 index = (u16)gBannerFont[i+1]; + index = (index << 8) + gBannerFont[i]; + if( index == 0xFEFF ) + { + break; + } + map[ index ] = 1; + } + map[ 0x0000 ] = 1; // 0x0000は許される + + // バナーを読み込む + u32 size = this->pRomHeader->s.banner_size; + u8 *banner = new u8[size]; + System::Diagnostics::Debug::WriteLine( "size: " + size.ToString("X") ); + fseek( fp, this->pRomHeader->s.banner_offset, SEEK_SET ); + if( size != fread( banner, 1, size, fp ) ) + { + this->hErrorList->Add( gcnew RCMrcError( + "バナーファイル", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, + "読み出すことができませんでした。", + "Banner File", + "The file can't be read.", + true, true ) ); + } + + // バナーの各文字がマップに登録されているかチェック + System::Boolean bResult = true; + u32 start = 0x240; + u32 end = (size < 0x1240)?(size):(0x1240); // NTR互換領域までのときはTWL拡張領域をサーチしない + for( i=0x240; i < end; i+=2 ) + { + u16 index = banner[i+1]; + u16 indexbak = index; + index = (index << 8) + banner[i]; + if( map[ index ] == 0 ) + { + System::Diagnostics::Debug::WriteLine( i.ToString("X") + ":" + index.ToString("X") + ":" + indexbak.ToString("X") ); + bResult = false; + break; + } + } + if( !bResult ) + { + this->hErrorList->Add( gcnew RCMrcError( + "バナーファイル", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, + "使用不可能な文字セットが使用されています。", + "Banner File", + "A set of illegal charactor code is used.", + true, true ) ); + } + delete []banner; +} + +// バナーとして使用可能なフォントリスト(u16リトルエンディアン) +const u8 gBannerFont[] = +{ + 0xff, 0xfe, 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, + 0x27, 0x00, 0x28, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2d, 0x00, 0x2e, 0x00, + 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, + 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, + 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, + 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, + 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, 0x00, + 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, + 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6b, 0x00, 0x6c, 0x00, 0x6d, 0x00, 0x6e, 0x00, + 0x6f, 0x00, 0x70, 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, 0x76, 0x00, + 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7a, 0x00, 0x7b, 0x00, 0x7c, 0x00, 0x7d, 0x00, 0x7e, 0x00, + 0x7f, 0x00, 0xac, 0x20, 0x1a, 0x20, 0x1e, 0x20, 0x26, 0x20, 0xc6, 0x02, 0x52, 0x01, 0x18, 0x20, + 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22, 0x20, 0xdc, 0x02, 0x22, 0x21, 0x3a, 0x20, 0x53, 0x01, + 0xa1, 0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa8, 0x00, 0xa9, 0x00, 0xae, 0x00, 0xb7, 0x00, 0xbf, 0x00, + 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5, 0x00, 0xc6, 0x00, 0xc7, 0x00, + 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x00, + 0xd0, 0x00, 0xd1, 0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd8, 0x00, + 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, + 0xe2, 0x00, 0xe3, 0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9, 0x00, + 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef, 0x00, 0xf0, 0x00, 0xf1, 0x00, + 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf5, 0x00, 0xf6, 0x00, 0xf7, 0x00, 0xf8, 0x00, 0xf9, 0x00, + 0xfa, 0x00, 0xfb, 0x00, 0xfc, 0x00, 0xfd, 0x00, 0x00, 0x30, 0x01, 0x30, 0x02, 0x30, 0x0c, 0xff, + 0x0e, 0xff, 0xfb, 0x30, 0x3a, 0x00, 0x3b, 0x00, 0x1f, 0xff, 0x01, 0xff, 0xfc, 0x30, 0x41, 0x30, + 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x45, 0x30, 0x46, 0x30, 0x47, 0x30, 0x48, 0x30, 0x49, 0x30, + 0x4a, 0x30, 0x4b, 0x30, 0x4c, 0x30, 0x4d, 0x30, 0x4e, 0x30, 0x4f, 0x30, 0x50, 0x30, 0x51, 0x30, + 0x52, 0x30, 0x53, 0x30, 0x54, 0x30, 0x55, 0x30, 0x56, 0x30, 0x57, 0x30, 0x58, 0x30, 0x59, 0x30, + 0x5a, 0x30, 0x5b, 0x30, 0x5c, 0x30, 0x5d, 0x30, 0x5e, 0x30, 0x5f, 0x30, 0x60, 0x30, 0x61, 0x30, + 0x62, 0x30, 0x63, 0x30, 0x64, 0x30, 0x65, 0x30, 0x66, 0x30, 0x67, 0x30, 0x68, 0x30, 0x69, 0x30, + 0x6a, 0x30, 0x6b, 0x30, 0x6c, 0x30, 0x6d, 0x30, 0x6e, 0x30, 0x6f, 0x30, 0x70, 0x30, 0x71, 0x30, + 0x72, 0x30, 0x73, 0x30, 0x74, 0x30, 0x75, 0x30, 0x76, 0x30, 0x77, 0x30, 0x78, 0x30, 0x79, 0x30, + 0x7a, 0x30, 0x7b, 0x30, 0x7c, 0x30, 0x7d, 0x30, 0x7e, 0x30, 0x7f, 0x30, 0x80, 0x30, 0x81, 0x30, + 0x82, 0x30, 0x83, 0x30, 0x84, 0x30, 0x85, 0x30, 0x86, 0x30, 0x87, 0x30, 0x88, 0x30, 0x89, 0x30, + 0x8a, 0x30, 0x8b, 0x30, 0x8c, 0x30, 0x8d, 0x30, 0x8e, 0x30, 0x8f, 0x30, 0x90, 0x30, 0x91, 0x30, + 0x92, 0x30, 0x93, 0x30, 0x9b, 0x30, 0x9c, 0x30, 0x9d, 0x30, 0x9e, 0x30, 0xa1, 0x30, 0xa2, 0x30, + 0xa3, 0x30, 0xa4, 0x30, 0xa5, 0x30, 0xa6, 0x30, 0xa7, 0x30, 0xa8, 0x30, 0xa9, 0x30, 0xaa, 0x30, + 0xab, 0x30, 0xac, 0x30, 0xad, 0x30, 0xae, 0x30, 0xaf, 0x30, 0xb0, 0x30, 0xb1, 0x30, 0xb2, 0x30, + 0xb3, 0x30, 0xb4, 0x30, 0xb5, 0x30, 0xb6, 0x30, 0xb7, 0x30, 0xb8, 0x30, 0xb9, 0x30, 0xba, 0x30, + 0xbb, 0x30, 0xbc, 0x30, 0xbd, 0x30, 0xbe, 0x30, 0xbf, 0x30, 0xc0, 0x30, 0xc1, 0x30, 0xc2, 0x30, + 0xc3, 0x30, 0xc4, 0x30, 0xc5, 0x30, 0xc6, 0x30, 0xc7, 0x30, 0xc8, 0x30, 0xc9, 0x30, 0xca, 0x30, + 0xcb, 0x30, 0xcc, 0x30, 0xcd, 0x30, 0xce, 0x30, 0xcf, 0x30, 0xd0, 0x30, 0xd1, 0x30, 0xd2, 0x30, + 0xd3, 0x30, 0xd4, 0x30, 0xd5, 0x30, 0xd6, 0x30, 0xd7, 0x30, 0xd8, 0x30, 0xd9, 0x30, 0xda, 0x30, + 0xdb, 0x30, 0xdc, 0x30, 0xdd, 0x30, 0xde, 0x30, 0xdf, 0x30, 0xe0, 0x30, 0xe1, 0x30, 0xe2, 0x30, + 0xe3, 0x30, 0xe4, 0x30, 0xe5, 0x30, 0xe6, 0x30, 0xe7, 0x30, 0xe8, 0x30, 0xe9, 0x30, 0xea, 0x30, + 0xeb, 0x30, 0xec, 0x30, 0xed, 0x30, 0xee, 0x30, 0xef, 0x30, 0xf0, 0x30, 0xf1, 0x30, 0xf2, 0x30, + 0xf3, 0x30, 0xf4, 0x30, 0xf5, 0x30, 0xf6, 0x30, 0x01, 0x30, 0x02, 0x30, 0x0c, 0xff, 0x0e, 0xff, + 0xfb, 0x30, 0x1a, 0xff, 0x1b, 0xff, 0x1f, 0xff, 0x01, 0xff, 0x9b, 0x30, 0x9c, 0x30, 0xb4, 0x00, + 0x40, 0xff, 0x3e, 0xff, 0xe3, 0xff, 0x3f, 0xff, 0x05, 0x30, 0xfc, 0x30, 0x15, 0x20, 0x10, 0x20, + 0x0f, 0xff, 0x3c, 0xff, 0x5e, 0xff, 0x5c, 0xff, 0x26, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, + 0x1d, 0x20, 0x08, 0xff, 0x09, 0xff, 0x14, 0x30, 0x15, 0x30, 0x3b, 0xff, 0x3d, 0xff, 0x5b, 0xff, + 0x5d, 0xff, 0x08, 0x30, 0x09, 0x30, 0x0c, 0x30, 0x0d, 0x30, 0x0b, 0xff, 0x0d, 0xff, 0xb1, 0x00, + 0xd7, 0x00, 0xf7, 0x00, 0x1d, 0xff, 0x1e, 0x22, 0x34, 0x22, 0xb0, 0x00, 0x32, 0x20, 0x33, 0x20, + 0x06, 0xff, 0x06, 0x26, 0x05, 0x26, 0xcb, 0x25, 0xcf, 0x25, 0xce, 0x25, 0xc7, 0x25, 0xc6, 0x25, + 0xa1, 0x25, 0xa0, 0x25, 0xb3, 0x25, 0xb2, 0x25, 0xbd, 0x25, 0xbc, 0x25, 0x3b, 0x20, 0x12, 0x30, + 0x92, 0x21, 0x90, 0x21, 0x91, 0x21, 0x93, 0x21, 0x6f, 0x26, 0x6d, 0x26, 0x6a, 0x26, 0x0a, 0x00, + 0xff, 0xfe, // 終わりを表す意味で0xFEFFを最後につける +}; diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h index 68160d12..000e0305 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h @@ -368,6 +368,8 @@ namespace MasterEditorTWL System::Boolean mrcRegion( System::UInt32 region ); // @ret リージョンが正しいかどうか void mrcRegionOrganization( System::UInt32 region ); void mrcRating( System::Byte ogn ); + void mrcPadding( FILE *fp ); + void mrcBanner( FILE *fp ); // utility void clearParentalControl( System::Byte ogn );