//マップIDからマップ変化addrを取得する. public static uint GetMapChangeAddrWhereMapID(uint mapid, out uint out_pointer) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(mapid); if (!U.isSafetyOffset(addr)) { out_pointer = U.NOT_FOUND; return(U.NOT_FOUND); } uint mapchange_plist = (uint)Program.ROM.u8(addr + 11); uint mapchangeaddr = MapPointerForm.PlistToOffsetAddrFast(MapPointerForm.PLIST_TYPE.CHANGE, mapchange_plist, out out_pointer); return(mapchangeaddr); }
//マップIDからイベントaddrを取得する. public static uint GetEventAddrWhereMapID(uint mapid, out uint pointer) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(mapid); if (!U.isSafetyOffset(addr)) { pointer = U.NOT_FOUND; return(U.NOT_FOUND); } uint event_plist = Program.ROM.u8(addr + Program.ROM.RomInfo.map_setting_event_plist_pos()); uint eventaddr = MapPointerForm.PlistToOffsetAddrFast(MapPointerForm.PLIST_TYPE.EVENT, event_plist, out pointer); return(eventaddr); }
//エラー検出 public static void MakeCheckErrors(uint mapid, List <FELint.ErrorSt> errors) { List <uint> tracelist = new List <uint>(); uint wmapid = MapSettingForm.GetWorldMapEventIDWhereMapID(mapid); if (wmapid == 0) {//存在しない return; } //FE6はPLISTが格納されている. uint p; uint event_addr = MapPointerForm.PlistToOffsetAddrFast(MapPointerForm.PLIST_TYPE.WORLDMAP_FE6ONLY, wmapid, out p); if (event_addr == U.NOT_FOUND) { errors.Add(new FELint.ErrorSt(FELint.Type.MAPSETTING_WORLDMAP, U.NOT_FOUND , R._("対応するワールドマップイベント({0})が存在しません。", U.To0xHexString(wmapid)))); } else { FELint.CheckEvent(event_addr, errors, FELint.Type.WORLDMAP_EVENT, p, true, tracelist); } }
//全データの取得 public static void MakeAllDataLength(List <Address> list) { List <uint> tracelist = new List <uint>(); uint mapmax = MapSettingForm.GetDataCount(); for (uint mapid = 0; mapid < mapmax; mapid++) { uint wmapid = MapSettingForm.GetWorldMapEventIDWhereMapID(mapid); if (wmapid == 0) {//存在しない continue; } //FE6はPLISTが格納されている. uint p; uint event_addr = MapPointerForm.PlistToOffsetAddrFast(MapPointerForm.PLIST_TYPE.WORLDMAP_FE6ONLY, wmapid, out p); if (event_addr == U.NOT_FOUND) { continue; } string name = "WorldMapEvent " + U.To0xHexString(mapid) + " "; EventScriptForm.ScanScript(list, p, true, true, name, tracelist); } }
private void ImportAllButton_Click(object sender, EventArgs e) { U.AddrResult ar = InputFormRef.SelectToAddrResult(FilterComboBox, FilterComboBox.SelectedIndex); if (ar.isNULL()) { R.ShowStopError("タイルアニメーションのPLISTを特定できません"); return; } uint pointer; uint tileanime_addr = MapPointerForm.PlistToOffsetAddrFast(MapPointerForm.PLIST_TYPE.ANIMATION, ar.tag, out pointer); if (tileanime_addr == U.NOT_FOUND) { R.ShowStopError("タイルアニメーションのPLISTからポインタを求められません。\r\nPLIST:{0}", ar.tag); return; } string filename; if (ImageFormRef.GetDragFilePath(out filename)) { } else { string title = R._("読込むファイル名を選択してください"); string filter = R._("マップアニメ2|*.mapanime2.txt|All files|*"); OpenFileDialog open = new OpenFileDialog(); open.Title = title; open.Filter = filter; DialogResult dr = open.ShowDialog(); if (dr != DialogResult.OK) { return; } if (open.FileNames.Length <= 0 || !U.CanReadFileRetry(open.FileNames[0])) { return; } filename = open.FileNames[0]; Program.LastSelectedFilename.Save(this, "", open); } using (InputFormRef.AutoPleaseWait wait = new InputFormRef.AutoPleaseWait(this)) { string errorMessage = ImportAll(filename, pointer, this.InputFormRef); if (errorMessage != "") { R.ShowStopError(errorMessage); return; } } //リストを読み直し. int selected = FilterComboBox.SelectedIndex; List <U.AddrResult> animeList = MakeTileAnimation2(); U.ConvertComboBox(animeList, ref FilterComboBox); //現在地を再選択して、リストを描画する. U.ForceUpdate(FilterComboBox, selected); }