//全データの取得 public static void MakeAllDataLength(List <Address> list, bool isPointerOnly) { string name; InputFormRef InputFormRef; uint baseaddr, dimaddr, no_dimaddr; if (ImageUtilMagic.SearchMagicSystem(out baseaddr, out dimaddr, out no_dimaddr) != ImageUtilMagic.magic_system_enum.CSA_CREATOR) { return; } { uint spellDataCount = ImageUtilMagicFEditor.SpellDataCount(); uint csaSpellTable = ImageUtilMagic.GetCSASpellTableAddr(); if (csaSpellTable == U.NOT_FOUND) { return; } uint csaSpellTablePointer = ImageUtilMagic.GetCSASpellTablePointer(); Dictionary <uint, string> effectDic = new Dictionary <uint, string>(); InputFormRef = Init(null, dimaddr, no_dimaddr, spellDataCount, csaSpellTable, effectDic); name = "Magic"; FEBuilderGBA.Address.AddAddress(list , InputFormRef , name, new uint[] { 0 } ); //追加魔法テーブル(結構無駄な構造ですが、仕方ない) FEBuilderGBA.Address.AddAddress(list , csaSpellTable , InputFormRef.DataCount * 4 * 5 , csaSpellTablePointer , "Magic_Append_SpellTable" , FEBuilderGBA.Address.DataTypeEnum.MAGIC_APPEND_SPELLTABLE ); uint addr = InputFormRef.BaseAddress; for (int i = 0; i < InputFormRef.DataCount; i++, addr += InputFormRef.BlockSize) { uint baseaddress = Program.ROM.p32(Program.ROM.RomInfo.magic_effect_pointer); uint csaaddress = (uint)(csaSpellTable + (20 * i)); uint dataaddr = Program.ROM.p32(addr); if (dataaddr == 0) { continue; } if ( dataaddr == dimaddr || dataaddr == no_dimaddr) { name = "Magic:" + U.To0xHexString(i); ImageUtilMagicCSACreator.RecycleOldAnime(ref list, name, isPointerOnly, csaaddress); } } } }
private void MagicListExpandsButton_Click(object sender, EventArgs e) { DialogResult dr = R.ShowYesNo("魔法テーブルを拡張してもよろしいですか?"); if (dr != System.Windows.Forms.DialogResult.Yes) { return; } Undo.UndoData undodata = Program.Undo.NewUndoData(this, "expands"); uint csaSpellTablePointer = ImageUtilMagic.GetCSASpellTablePointer(); if (csaSpellTablePointer == U.NOT_FOUND) { R.ShowStopError("CSASpellTable Not Found."); return; } //魔法エフェクトテーブルの拡張. uint spellDataCount = ImageUtilMagicFEditor.SpellDataCount(); uint datasize = spellDataCount; InputFormRef.ExpandsArea(this, 254, Program.ROM.RomInfo.magic_effect_pointer, datasize, FEBuilderGBA.InputFormRef.ExpandsFillOption.NO, 4, undodata); //CSA追加魔法テーブルの拡張 if (U.isSafetyOffset(csaSpellTablePointer) && InputFormRef != null) {//CSA追加魔法テーブルが正しくセットされている場合 datasize = InputFormRef.DataCount; } else {//セットされていなければ初期値は0 datasize = 0; } uint csaSpellTable = InputFormRef.ExpandsArea(this, 254, csaSpellTablePointer, datasize, FEBuilderGBA.InputFormRef.ExpandsFillOption.NO, 5 * 4, undodata); Program.Undo.Push(undodata); //開きなおす. InputFormRef.ReOpenForm <ImageMagicCSACreatorForm>(); }