public EditPreparedList(ROMInterface romIF, bool resolve, Data objPlaces, Data data) { this.romIF = romIF; loadData(resolve, data, objPlaces); InitializeComponent(); setText(additionalIDs, additional); setText(resolvedIDs, resolved); setText(newResolvedIDs, newResolved); information.Text = infoText.Replace("\n", "\r\n"); resolvedIDs.Enabled = resolve; }
//追加データはヘッダ付の可変長データで、 //アドレス順にソートされたDouble-linked list。 //追加する時はO(データ数)でexSpace中のどこか適当な場所に追加する //ヘッダ: // 0 RomAddr prev。最初の場合は0 // 4 RomAddr next。最後の場合はexSpaceAddr + exSpaceSize // 8 uint このデータのサイズ(このヘッダー部分は含めない) /// <summary> /// pathのファイルを開く /// </summary> /// <exception cref="System.IO.IOException">ファイルが開けなかった時</exception> /// <exception cref="UnauthorizedAccessException">ファイルが開けなかった時</exception> /// <exception cref="ROM.UnknownROMException">ROMのバージョンが不明・ROMファイルでない場合</exception> /// <exception cref="DataException">ROMファイル中におかしなデータがあった場合</exception> public ROM(string path) { bool proceeded = false; try { romFile = File.Open( path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read); romIF = new ROMInterface(checkValidROM()); proceeded = true; } finally { if (!proceeded) Dispose(); } }
/// <summary> /// Mapに関してデータを読み、初期化をする /// </summary> /// <exception cref="ArgumentException">mapNumberが大きすぎた場合</exception> /// <exception cref="DataException">mapNumberが無効なマップを指している、またはROMが壊れている場合</exception> public Map(ROM rom_, byte mapNumber, MainView mainView) { rom = rom_; romIF = rom.romIF; this.mainView = mainView; mainView.onChanged += () => { rom.newChange(true); }; if (romIF.mapNumbers <= mapNumber) throw new ArgumentException("map number is too big"); currentMapNumber = mapNumber; ustruct5 = rom.readData(romIF.ustruct5Table + mapNumber * romIF.ustruct5_size, romIF.ustruct5_size); var iUStruct3 = ustruct5.getDataID(romIF.uttruct5_iUStruct3); ustruct3 = rom.readData(iUStruct3, romIF.ustruct3_size); var iiPlaceVector = ustruct3.getDataID(romIF.ustruct3_iiPlaceVector); var iPlaceVector = rom.readData(iiPlaceVector, 4).getDataID(0); placeVector = rom.readData(iPlaceVector, romIF.placeVector_size); var iObjPlaces = placeVector.getDataID(romIF.placeVector_iObjPlaces); var objPlaces = rom.readData(iObjPlaces, placeVector.getHalf(romIF.placeVector_numberOfObjPlaces) * romIF.objPlaceC_size); mainView.setObjPlaces(objPlaces); //objPlacesはmainViewが持つ mainView.size = new System.Drawing.Size(0x2000, 0x200); //TODO: データから読み込む }