//全データの取得 public static void MakeAllDataLength(List <Address> list) { InputFormRef InputFormRef; if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem) { return; } { uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { return; } if (textP == U.NOT_FOUND) { return; } if (assignClassP == U.NOT_FOUND) { return; } if (assignLevelUpP == U.NOT_FOUND) { return; } InputFormRef = Init(null, assignClassP); FEBuilderGBA.Address.AddAddress(list, InputFormRef, "SkillAssignmentClassSkillSystem", new uint[] { }); Dictionary <uint, string> skillNames = new Dictionary <uint, string>(); InputFormRef N1_InputFormRef = N1_Init(null, skillNames); uint assignLevelUpAddr = Program.ROM.p32(assignLevelUpP); for (uint i = 0; i < InputFormRef.DataCount; i++, assignLevelUpAddr += 4) { if (!U.isSafetyOffset(assignLevelUpAddr)) { break; } uint levelupList = Program.ROM.p32(assignLevelUpAddr); if (!U.isSafetyOffset(levelupList)) { continue; } N1_InputFormRef.ReInitPointer(assignLevelUpAddr); FEBuilderGBA.Address.AddAddress(list, N1_InputFormRef, "SkillAssignmentClassSkillSystem.Levelup" + i, new uint[] { }); } } }
public SkillAssignmentClassSkillSystemForm() { InitializeComponent(); uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、アイコンを取得できません。"); return; } if (textP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、テキストを取得できません。"); return; } if (assignClassP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、クラススキルを取得できません。"); return; } if (assignLevelUpP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、レベルアップスキルを取得できません。"); return; } this.SkillNames = SkillConfigSkillSystemForm.LoadSkillNames(); this.TextBaseAddress = Program.ROM.p32(textP); this.IconBaseAddress = Program.ROM.p32(iconP); this.AssignClassBaseAddress = Program.ROM.p32(assignClassP); this.AssignLevelUpBaseAddress = Program.ROM.p32(assignLevelUpP); this.N1_AddressList.OwnerDraw(DrawSkillAndText, DrawMode.OwnerDrawFixed); InputFormRef.markupJumpLabel(this.N1_J_1_SKILLASSIGNMENT); N1_InputFormRef = N1_Init(this, this.SkillNames); N1_InputFormRef.PostAddressListExpandsEvent += N1_InputFormRef_AddressListExpandsEvent; N1_InputFormRef.MakeGeneralAddressListContextMenu(true); this.AddressList.OwnerDraw(ListBoxEx.DrawClassAndText, DrawMode.OwnerDrawFixed); InputFormRef.markupJumpLabel(this.J_0_SKILLASSIGNMENT); InputFormRef = Init(this, assignClassP); this.InputFormRef.MakeGeneralAddressListContextMenu(true); this.InputFormRef.CheckProtectionPaddingALIGN4 = false; U.SetIcon(ExportAllButton, Properties.Resources.icon_arrow); U.SetIcon(ImportAllButton, Properties.Resources.icon_upload); InputFormRef.markupJumpLabel(X_LEARNINFO); if (SkillConfigSkillSystemForm.IsClassSkillExtends()) { UseXLevelAddPanel = true; } }
public SkillAssignmentUnitSkillSystemForm() { InitializeComponent(); uint icon = SkillConfigSkillSystemForm.FindIconPointer(); uint text = SkillConfigSkillSystemForm.FindTextPointer(); uint assignUnit = SkillConfigSkillSystemForm.FindAssignPersonalSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignUnitLevelUpSkillPointer(); if (icon == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、アイコンを取得できません。"); return; } if (text == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、テキストを取得できません。"); return; } if (assignUnit == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、個人スキルを取得できません。"); return; } this.SkillNames = SkillConfigSkillSystemForm.LoadSkillNames(); this.TextBaseAddress = Program.ROM.p32(text); this.IconBaseAddress = Program.ROM.p32(icon); this.AssignUnitBaseAddress = Program.ROM.p32(assignUnit); if (assignLevelUpP == U.NOT_FOUND) {//古いパッチでは、ユニットベースのレベルアップスキルが存在しない this.AssignLevelUpBaseAddress = U.NOT_FOUND; UnitLevelUpSkill.Hide(); } else { this.AssignLevelUpBaseAddress = Program.ROM.p32(assignLevelUpP); } this.AddressList.OwnerDraw(ListBoxEx.DrawUnitAndText, DrawMode.OwnerDrawFixed); InputFormRef.markupJumpLabel(this.J_0_SKILLASSIGNMENT); InputFormRef = Init(this, assignUnit); InputFormRef.MakeGeneralAddressListContextMenu(true); InputFormRef.CheckProtectionPaddingALIGN4 = false; this.N1_AddressList.OwnerDraw(DrawSkillAndText, DrawMode.OwnerDrawFixed); InputFormRef.markupJumpLabel(this.N1_J_1_SKILLASSIGNMENT); N1_InputFormRef = N1_Init(this, this.SkillNames); N1_InputFormRef.AddressListExpandsEvent += N1_InputFormRef_AddressListExpandsEvent; N1_InputFormRef.MakeGeneralAddressListContextMenu(true); InputFormRef.markupJumpLabel(X_LEARNINFO); }
public SkillAssignmentClassSkillSystemForm() { InitializeComponent(); uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、アイコンを取得できません。"); return; } if (textP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、テキストを取得できません。"); return; } if (assignClassP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、クラススキルを取得できません。"); return; } if (assignLevelUpP == U.NOT_FOUND) { R.ShowStopError("スキル拡張 SkillSystem の、レベルアップスキルを取得できません。"); return; } this.SkillNames = U.LoadDicResource(U.ConfigDataFilename("skill_extends_skillsystem_name_")); this.TextBaseAddress = Program.ROM.p32(textP); this.IconBaseAddress = Program.ROM.p32(iconP); this.AssignClassBaseAddress = Program.ROM.p32(assignClassP); this.AssignLevelUpBaseAddress = Program.ROM.p32(assignLevelUpP); this.N1_AddressList.OwnerDraw(DrawSkillAndText, DrawMode.OwnerDrawFixed); InputFormRef.markupJumpLabel(this.N1_J_1_SKILLASSIGNMENT); N1_InputFormRef = N1_Init(this, this.SkillNames); N1_InputFormRef.AddressListExpandsEvent += N1_InputFormRef_AddressListExpandsEvent; N1_InputFormRef.MakeGeneralAddressListContextMenu(true); this.AddressList.OwnerDraw(ListBoxEx.DrawClassAndText, DrawMode.OwnerDrawFixed); InputFormRef.markupJumpLabel(this.J_0_SKILLASSIGNMENT); InputFormRef = Init(this, assignClassP); this.InputFormRef.MakeGeneralAddressListContextMenu(true); this.InputFormRef.CheckProtectionPaddingALIGN4 = false; }
public static int MakeClassSkillButtons(uint cid, Button[] buttons, ToolTipEx tooltip) { uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { return(0); } if (textP == U.NOT_FOUND) { return(0); } if (assignClassP == U.NOT_FOUND) { return(0); } if (assignLevelUpP == U.NOT_FOUND) { return(0); } InputFormRef InputFormRef = Init(null, assignClassP); List <U.AddrResult> list = InputFormRef.MakeList(); if (cid >= list.Count) { return(0); } uint classaddr = list[(int)cid].addr; if (!U.isSafetyOffset(classaddr)) { return(0); } uint icon = Program.ROM.p32(iconP); uint text = Program.ROM.p32(textP); uint assignLevelUp = Program.ROM.p32(assignLevelUpP); int skillCount = 0; uint b0 = Program.ROM.u8(classaddr); if (b0 > 0) {//クラスの基本スキル. Bitmap bitmap = SkillConfigSkillSystemForm.DrawIcon((uint)b0, icon); U.MakeTransparent(bitmap); buttons[0].BackgroundImage = bitmap; buttons[0].Tag = b0; string skillCaption = SkillConfigSkillSystemForm.GetSkillText((uint)b0, text); tooltip.SetToolTip(buttons[skillCount], skillCaption); skillCount++; } MakeUnitSkillButtonsList(cid, buttons, tooltip, assignLevelUpP, icon, text, skillCount); return(skillCount); }
public static bool ImportAllData(string filename) { InputFormRef InputFormRef; if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem) { return(false); } string[] lines = File.ReadAllLines(filename); { uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { return(false); } if (textP == U.NOT_FOUND) { return(false); } if (assignClassP == U.NOT_FOUND) { return(false); } if (assignLevelUpP == U.NOT_FOUND) { return(false); } InputFormRef = Init(null, assignClassP); Dictionary <uint, string> skillNames = new Dictionary <uint, string>(); InputFormRef N1_InputFormRef = N1_Init(null, skillNames); uint classBaseSkillAddr = InputFormRef.BaseAddress; uint assignLevelUpAddr = Program.ROM.p32(assignLevelUpP); for (uint i = 0; i < InputFormRef.DataCount; i++, assignLevelUpAddr += 4, classBaseSkillAddr += 1) { if (!U.isSafetyOffset(assignLevelUpAddr)) { break; } if (i >= lines.Length) { break; } string[] sp = lines[i].Split('\t'); if (sp.Length < 2) { continue; } { uint skill = U.atoh(sp[0]); Program.ROM.write_u8(classBaseSkillAddr + 0, skill); } uint levelupSkillAddr = U.atoh(sp[1]); if (U.isExtrendsROMArea(levelupSkillAddr) || levelupSkillAddr == 0) {//拡張領域、または0の値が設定されている場合は書き戻す Program.ROM.write_p32(assignLevelUpAddr, levelupSkillAddr); continue; } uint levelupList = Program.ROM.p32(assignLevelUpAddr); if (!U.isSafetyOffset(levelupList)) { continue; } N1_InputFormRef.ReInitPointer(assignLevelUpAddr); uint levelupAddr = N1_InputFormRef.BaseAddress; for (uint n = 0; n < N1_InputFormRef.DataCount; n++, levelupAddr += 2) { uint level = U.atoh(U.at(sp, 2 + (n * 2) + 0)); uint skill = U.atoh(U.at(sp, 2 + (n * 2) + 1)); Program.ROM.write_u8(levelupAddr + 0, level); Program.ROM.write_u8(levelupAddr + 1, skill); } } } return(true); }
public static void ExportAllData(string filename) { InputFormRef InputFormRef; if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem) { return; } List <string> lines = new List <string>(); { uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { return; } if (textP == U.NOT_FOUND) { return; } if (assignClassP == U.NOT_FOUND) { return; } if (assignLevelUpP == U.NOT_FOUND) { return; } InputFormRef = Init(null, assignClassP); Dictionary <uint, string> skillNames = new Dictionary <uint, string>(); InputFormRef N1_InputFormRef = N1_Init(null, skillNames); uint classBaseSkillAddr = InputFormRef.BaseAddress; uint assignLevelUpAddr = Program.ROM.p32(assignLevelUpP); for (uint i = 0; i < InputFormRef.DataCount; i++, assignLevelUpAddr += 4, classBaseSkillAddr += 1) { if (!U.isSafetyOffset(assignLevelUpAddr)) { break; } StringBuilder sb = new StringBuilder(); sb.Append(U.ToHexString(Program.ROM.u8(classBaseSkillAddr + 0))); uint levelupList = Program.ROM.p32(assignLevelUpAddr); sb.Append("\t"); sb.Append(U.ToHexString(levelupList)); if (!U.isSafetyOffset(levelupList)) { lines.Add(sb.ToString()); continue; } N1_InputFormRef.ReInitPointer(assignLevelUpAddr); uint levelupAddr = N1_InputFormRef.BaseAddress; for (uint n = 0; n < N1_InputFormRef.DataCount; n++, levelupAddr += 2) { sb.Append("\t"); sb.Append(U.ToHexString(Program.ROM.u8(levelupAddr + 0))); sb.Append("\t"); sb.Append(U.ToHexString(Program.ROM.u8(levelupAddr + 1))); } lines.Add(sb.ToString()); } } File.WriteAllLines(filename, lines); }
public static void MakeCheckError(List <FELint.ErrorSt> errors) { InputFormRef InputFormRef; if (PatchUtil.SearchSkillSystem() != PatchUtil.skill_system_enum.SkillSystem) { return; } { uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignClassP = SkillConfigSkillSystemForm.FindAssignClassSkillPointer(); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignClassLevelUpSkillPointer(); if (iconP == U.NOT_FOUND) { return; } if (textP == U.NOT_FOUND) { return; } if (assignClassP == U.NOT_FOUND) { return; } if (assignLevelUpP == U.NOT_FOUND) { return; } InputFormRef = Init(null, assignClassP); Dictionary <uint, string> skillNames = new Dictionary <uint, string>(); InputFormRef N1_InputFormRef = N1_Init(null, skillNames); uint assignLevelUpAddr = Program.ROM.p32(assignLevelUpP); for (uint i = 0; i < InputFormRef.DataCount; i++, assignLevelUpAddr += 4) { if (!U.isSafetyOffset(assignLevelUpAddr)) { errors.Add(new FELint.ErrorSt(FELint.Type.SKILL_CLASS, assignLevelUpAddr, R._("Skillのクラス割り当てが(ClassID: {0})までで、途中で終わってしまいました。", U.To0xHexString(i)), i)); break; } uint levelupList = Program.ROM.u32(assignLevelUpAddr); if (levelupList == 0) {//empty continue; } else if (!U.isSafetyPointer(levelupList)) { errors.Add(new FELint.ErrorSt(FELint.Type.SKILL_CLASS, assignLevelUpAddr, R._("Skillのクラス割り当て、(ClassID: {0})のデータポインタ({1})が壊れています。\r\nこのクラスをLOADする時に無限ループが発生する可能性があります。\r\n正しいアドレスを入力するか、0に設定してください。", U.To0xHexString(i), U.To0xHexString(levelupList)), i)); continue; } N1_InputFormRef.ReInitPointer(assignLevelUpAddr); if (N1_InputFormRef.DataCount >= 20) { errors.Add(new FELint.ErrorSt(FELint.Type.SKILL_CLASS, assignLevelUpAddr, R._("Skillのクラス割り当て、(ClassID: {0})のデータポインタ({1})には、大量の({2})個のデータが登録されています。\r\nアドレスが間違っていませんか?\r\n正しいアドレスを入力するか、0に設定してください。", U.To0xHexString(i), U.To0xHexString(levelupList), N1_InputFormRef.DataCount), i)); continue; } } } }
public static int MakeUnitSkillButtons(uint uid, Button[] buttons, ToolTipEx tooltip) { uint iconP = SkillConfigSkillSystemForm.FindIconPointer(); uint textP = SkillConfigSkillSystemForm.FindTextPointer(); uint assignUnitP = SkillConfigSkillSystemForm.FindAssignPersonalSkillPointer(); if (iconP == U.NOT_FOUND) { return(0); } if (textP == U.NOT_FOUND) { return(0); } if (assignUnitP == U.NOT_FOUND) { return(0); } InputFormRef InputFormRef = Init(null, assignUnitP); List <U.AddrResult> list = InputFormRef.MakeList(); if (uid < 0 || uid >= list.Count) { return(0); } uint classaddr = list[(int)uid].addr; if (!U.isSafetyOffset(classaddr)) { return(0); } uint b0 = Program.ROM.u8(classaddr); if (b0 <= 0) { return(0); } uint icon = Program.ROM.p32(iconP); uint text = Program.ROM.p32(textP); int skillCount = 0; { Bitmap bitmap = SkillConfigSkillSystemForm.DrawIcon((uint)b0, icon); U.MakeTransparent(bitmap); buttons[0].BackgroundImage = bitmap; buttons[0].Tag = b0; string skillCaption = SkillConfigSkillSystemForm.GetSkillText((uint)b0, text); tooltip.SetToolTipOverraide(buttons[skillCount], skillCaption); } skillCount++; //レベルアップで覚えるスキル. Dictionary <uint, string> skillNames = new Dictionary <uint, string>(); InputFormRef N1_InputFormRef = N1_Init(null, skillNames); uint assignLevelUpP = SkillConfigSkillSystemForm.FindAssignUnitLevelUpSkillPointer(); if (assignLevelUpP == U.NOT_FOUND) {//昔のバージョンには、存在しなかった return(skillCount); } SkillAssignmentClassSkillSystemForm.MakeUnitSkillButtonsList(uid, buttons, tooltip, assignLevelUpP, icon, text, skillCount); return(skillCount); }