Created SetHeaderTableOffset function in RomInfo, to replace HeaderOffsets dictionary in PokeDatabase

This commit is contained in:
AdAstra-LD 2021-07-25 18:31:03 +02:00
parent 881ed38469
commit 182eec2f97
7 changed files with 199 additions and 61 deletions

View File

@ -711,6 +711,9 @@
this.trainerClassListBox = new System.Windows.Forms.ListBox();
this.label42 = new System.Windows.Forms.Label();
this.trainerComboBox = new System.Windows.Forms.ComboBox();
this.tableEditorTabPage = new System.Windows.Forms.TabPage();
this.ConditionalMusicGroupBox = new System.Windows.Forms.GroupBox();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.mainTabImageList = new System.Windows.Forms.ImageList(this.components);
this.gameIcon = new System.Windows.Forms.PictureBox();
this.languageLabel = new System.Windows.Forms.Label();
@ -752,6 +755,9 @@
this.spawnEditorToolStripButton = new System.Windows.Forms.ToolStripButton();
this.versionLabel = new System.Windows.Forms.Label();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.LocationCol = new System.Windows.Forms.DataGridViewComboBoxColumn();
this.FlagCol = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.MusicIDcol = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.mainTabControl.SuspendLayout();
this.headerEditorTabPage.SuspendLayout();
this.worldmapCoordsGroupBox.SuspendLayout();
@ -959,6 +965,9 @@
this.groupBox25.SuspendLayout();
this.TrainerAIGroupBox.SuspendLayout();
this.trainerItemsGroupBox.SuspendLayout();
this.tableEditorTabPage.SuspendLayout();
this.ConditionalMusicGroupBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gameIcon)).BeginInit();
this.menuStrip1.SuspendLayout();
this.statusStrip1.SuspendLayout();
@ -977,6 +986,7 @@
this.mainTabControl.Controls.Add(this.textEditorTabPage);
this.mainTabControl.Controls.Add(this.cameraEditorTabPage);
this.mainTabControl.Controls.Add(this.trainerEditorTabPage);
this.mainTabControl.Controls.Add(this.tableEditorTabPage);
this.mainTabControl.ImageList = this.mainTabImageList;
this.mainTabControl.Location = new System.Drawing.Point(11, 72);
this.mainTabControl.Name = "mainTabControl";
@ -9070,6 +9080,42 @@
this.trainerComboBox.TabIndex = 27;
this.trainerComboBox.SelectedIndexChanged += new System.EventHandler(this.trainerComboBox_SelectedIndexChanged);
//
// tableEditorTabPage
//
this.tableEditorTabPage.Controls.Add(this.ConditionalMusicGroupBox);
this.tableEditorTabPage.Location = new System.Drawing.Point(4, 23);
this.tableEditorTabPage.Name = "tableEditorTabPage";
this.tableEditorTabPage.Padding = new System.Windows.Forms.Padding(3);
this.tableEditorTabPage.Size = new System.Drawing.Size(1185, 619);
this.tableEditorTabPage.TabIndex = 9;
this.tableEditorTabPage.Text = "Table Editor";
this.tableEditorTabPage.UseVisualStyleBackColor = true;
//
// ConditionalMusicGroupBox
//
this.ConditionalMusicGroupBox.Controls.Add(this.dataGridView1);
this.ConditionalMusicGroupBox.Location = new System.Drawing.Point(16, 7);
this.ConditionalMusicGroupBox.Name = "ConditionalMusicGroupBox";
this.ConditionalMusicGroupBox.Size = new System.Drawing.Size(393, 257);
this.ConditionalMusicGroupBox.TabIndex = 0;
this.ConditionalMusicGroupBox.TabStop = false;
this.ConditionalMusicGroupBox.Text = "groupBox26";
//
// dataGridView1
//
this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.LocationCol,
this.FlagCol,
this.MusicIDcol});
this.dataGridView1.Location = new System.Drawing.Point(7, 20);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.Size = new System.Drawing.Size(380, 231);
this.dataGridView1.TabIndex = 0;
//
// mainTabImageList
//
this.mainTabImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("mainTabImageList.ImageStream")));
@ -9295,14 +9341,14 @@
this.mainToolStrip.TabIndex = 16;
this.mainToolStrip.Text = "mainToolStrip";
//
// openFolderWithoutRomButton
// readDataFromFolderButton
//
this.readDataFromFolderButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.readDataFromFolderButton.Image = global::DSPRE.Properties.Resources.open_file;
this.readDataFromFolderButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.readDataFromFolderButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.readDataFromFolderButton.Margin = new System.Windows.Forms.Padding(0, 6, 0, 2);
this.readDataFromFolderButton.Name = "openFolderWithoutRomButton";
this.readDataFromFolderButton.Name = "readDataFromFolderButton";
this.readDataFromFolderButton.Size = new System.Drawing.Size(36, 36);
this.readDataFromFolderButton.Text = "Open Extracted Data";
this.readDataFromFolderButton.ToolTipText = "Open Extracted Data";
@ -9489,6 +9535,33 @@
this.versionLabel.TabIndex = 9;
this.versionLabel.Text = "ROM:";
//
// LocationCol
//
this.LocationCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.LocationCol.FillWeight = 60F;
this.LocationCol.HeaderText = "Header";
this.LocationCol.Name = "LocationCol";
this.LocationCol.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.LocationCol.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
//
// FlagCol
//
this.FlagCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.FlagCol.FillWeight = 20F;
this.FlagCol.HeaderText = "Flag";
this.FlagCol.MinimumWidth = 30;
this.FlagCol.Name = "FlagCol";
this.FlagCol.Resizable = System.Windows.Forms.DataGridViewTriState.False;
//
// MusicIDcol
//
this.MusicIDcol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.MusicIDcol.FillWeight = 20F;
this.MusicIDcol.HeaderText = "Music";
this.MusicIDcol.MinimumWidth = 30;
this.MusicIDcol.Name = "MusicIDcol";
this.MusicIDcol.Resizable = System.Windows.Forms.DataGridViewTriState.False;
//
// MainProgram
//
this.AllowDrop = true;
@ -9774,6 +9847,9 @@
this.TrainerAIGroupBox.ResumeLayout(false);
this.TrainerAIGroupBox.PerformLayout();
this.trainerItemsGroupBox.ResumeLayout(false);
this.tableEditorTabPage.ResumeLayout(false);
this.ConditionalMusicGroupBox.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gameIcon)).EndInit();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
@ -10492,6 +10568,12 @@
private System.Windows.Forms.NumericUpDown trClassFramePreviewUpDown;
private System.Windows.Forms.Label trainerClassFrameMaxLabel;
private System.Windows.Forms.ToolStripButton readDataFromFolderButton;
private System.Windows.Forms.TabPage tableEditorTabPage;
private System.Windows.Forms.GroupBox ConditionalMusicGroupBox;
private System.Windows.Forms.DataGridView dataGridView1;
private System.Windows.Forms.DataGridViewComboBoxColumn LocationCol;
private System.Windows.Forms.DataGridViewTextBoxColumn FlagCol;
private System.Windows.Forms.DataGridViewTextBoxColumn MusicIDcol;
}
}

View File

@ -44,6 +44,7 @@ namespace DSPRE {
public bool textEditorIsReady { get; private set; } = false;
public bool cameraEditorIsReady { get; private set; } = false;
public bool trainerEditorIsReady { get; private set; } = false;
public bool tableEditorIsReady { get; private set; } = false;
public const ushort MAPMODEL_CRITICALSIZE = 61000;
@ -782,9 +783,15 @@ namespace DSPRE {
SetupTrainerEditor();
trainerEditorIsReady = true;
}
} else if (mainTabControl.SelectedTab == tableEditorTabPage) {
if(!tableEditorIsReady) {
SetupTableEditor();
tableEditorIsReady = true;
}
}
statusLabel.Text = "Ready";
}
private void spawnEditorToolStripButton_Click(object sender, EventArgs e) {
if (!matrixEditorIsReady) {
SetupMatrixEditor();
@ -1491,7 +1498,7 @@ namespace DSPRE {
if (ROMToolboxDialog.flag_DynamicHeadersPatchApplied || ROMToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) {
DSUtils.WriteToFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + currentHeader.ID.ToString("D4"), currentHeader.ToByteArray(), 0, 0, true);
} else {
uint headerOffset = (uint)(PokeDatabase.System.headerOffsetsDict[RomInfo.romID] + MapHeader.length * currentHeader.ID);
uint headerOffset = (uint)(RomInfo.headerTableOffset + MapHeader.length * currentHeader.ID);
DSUtils.WriteToArm9(currentHeader.ToByteArray(), headerOffset);
}
disableHandlers = true;
@ -1649,7 +1656,7 @@ namespace DSPRE {
if (ROMToolboxDialog.flag_DynamicHeadersPatchApplied || ROMToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) {
DSUtils.WriteToFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + currentHeader.ID.ToString("D4"), currentHeader.ToByteArray(), 0, 0, true);
} else {
uint headerOffset = (uint)(PokeDatabase.System.headerOffsetsDict[RomInfo.romID] + MapHeader.length * currentHeader.ID);
uint headerOffset = (uint)(RomInfo.headerTableOffset + MapHeader.length * currentHeader.ID);
DSUtils.WriteToArm9(currentHeader.ToByteArray(), headerOffset);
}
@ -7301,10 +7308,12 @@ namespace DSPRE {
private void importReplacePropertiesButton_Click(object sender, EventArgs e) {
/* Prompt user to select .evt file */
OpenFileDialog of = new OpenFileDialog();
of.Filter = "Gen IV Trainer Properties (*.trp)|*.trp";
if (of.ShowDialog(this) != DialogResult.OK)
OpenFileDialog of = new OpenFileDialog {
Filter = "Gen IV Trainer Properties (*.trp)|*.trp"
};
if (of.ShowDialog(this) != DialogResult.OK) {
return;
}
/* Update trp object in memory */
currentTrainerFile.trp = new TrainerProperties((ushort)trainerComboBox.SelectedIndex, new FileStream(of.FileName, FileMode.Open));
@ -7341,6 +7350,12 @@ namespace DSPRE {
UpdateTrainerClassPic((int)((NumericUpDown)sender).Value);
}
#endregion
#region Table Editor
private void SetupTableEditor() {
}
#endregion
private void ExclusiveCBInvert(CheckBox cb) {
if (disableHandlers)
return;

View File

@ -845,6 +845,15 @@
<metadata name="ImportBTN.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LocationCol.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="FlagCol.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="MusicIDcol.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="mainTabImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>239, 17</value>
</metadata>
@ -853,7 +862,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy
EQAAAk1TRnQBSQFMAgEBCQEAAZQBFAGUARQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
EQAAAk1TRnQBSQFMAgEBCQEAAaQBFAGkARQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View File

@ -146,7 +146,7 @@ namespace DSPRE.ROMFiles {
return LoadFromByteArray(headerData, headerNumber);
}
public static MapHeader LoadFromARM9(ushort headerNumber) {
long headerOffset = Resources.PokeDatabase.System.headerOffsetsDict[RomInfo.romID] + MapHeader.length * headerNumber;
long headerOffset = RomInfo.headerTableOffset + MapHeader.length * headerNumber;
return LoadFromFile(RomInfo.arm9Path, headerNumber, headerOffset);
}

View File

@ -718,7 +718,7 @@ namespace DSPRE {
foreach (Tuple<uint, uint> reference in ToolboxDB.dynamicHeadersPointersDB [RomInfo.gameFamily]) {
DSUtils.WriteToArm9(DSUtils.HexStringToByteArray(data.REFERENCE_STRING), (uint)(reference.Item1 + data.pointerDiff));
uint pointerValue = BitConverter.ToUInt32(DSUtils.ReadFromArm9((uint)(reference.Item2 + data.pointerDiff), 4), 0) - PokeDatabase.System.headerOffsetsDict[RomInfo.romID] - 0x02000000;
uint pointerValue = BitConverter.ToUInt32(DSUtils.ReadFromArm9((uint)(reference.Item2 + data.pointerDiff), 4), 0) - RomInfo.headerTableOffset - 0x02000000;
DSUtils.WriteToArm9(BitConverter.GetBytes(pointerValue), (uint)(reference.Item2 + data.pointerDiff));
}

View File

@ -3402,7 +3402,7 @@ namespace DSPRE.Resources {
[0x036E] = "TextPocketWhite",
[0x036F] = "SetLayerVisibility",
[0x0370] = "StopWeatherAlphaBlend",
[0x0371] = "SetRepelSteps",
[0x0371] = "SetRepelSteps"
};
public static Dictionary<ushort, byte[]> CustomScrCmdParameters = new Dictionary<ushort, byte[]>() {
[0x0357] = new byte[] { 2, 2 },
@ -3425,50 +3425,6 @@ namespace DSPRE.Resources {
};
}
public static class System {
public static Dictionary<string, uint> headerOffsetsDict = new Dictionary<string, uint>() {
["ADAE"] = 0xEEDBC,
["APAE"] = 0xEEDBC,
["ADAS"] = 0xEEE08,
["APAS"] = 0xEEE08,
["ADAI"] = 0xEED70,
["APAI"] = 0xEED70,
["ADAF"] = 0xEEDFC,
["APAF"] = 0xEEDFC,
["ADAD"] = 0xEEDCC,
["APAD"] = 0xEEDCC,
["ADAJ"] = 0xF0D68,
["APAJ"] = 0xF0D6C,
["CPUE"] = 0xE601C,
["CPUS"] = 0xE60B0,
["CPUI"] = 0xE6038,
["CPUF"] = 0xE60A4,
["CPUD"] = 0xE6074,
["CPUJ"] = 0xE56F0,
["IPKE"] = 0xF6BE0,
["IPGE"] = 0xF6BE0,
["IPKS"] = 0xF6BC8,
["IPGS"] = 0xF6BD0,
["IPKI"] = 0xF6B58,
["IPGI"] = 0xF6B58,
["IPKF"] = 0xF6BC4,
["IPGF"] = 0xF6BC4,
["IPKD"] = 0xF6B94,
["IPGD"] = 0xF6B94,
["IPKJ"] = 0xF6390,
["IPGJ"] = 0xF6390
};
public static Dictionary<string, string> versionsDict = new Dictionary<string, string>() {
["ADAE"] = "D",
["ADAS"] = "D",

View File

@ -33,8 +33,11 @@ namespace DSPRE {
public static int cameraTblOverlayNumber { get; private set; }
public static uint[] cameraTblOffsetsToRAMaddress { get; private set; }
public static uint headerTableOffset { get; private set; }
public static uint conditionalMusicTableOffset { get; internal set; }
public static uint OWTableOffset { get; internal set; }
public static string OWtablePath { get; private set; }
public static int nullEncounterID { get; private set; }
public static int attackNamesTextNumber { get; private set; }
public static int[] pokemonNamesTextNumbers { get; private set; }
@ -96,6 +99,10 @@ namespace DSPRE {
}
workDir = Path.GetDirectoryName(romName) + "\\" + Path.GetFileNameWithoutExtension(romName) + folderSuffix + "\\";
arm9Path = workDir + @"arm9.bin";
overlayTablePath = workDir + @"y9.bin";
overlayPath = workDir + "overlay";
internalNamesLocation = workDir + @"data\fielddata\maptable\mapname.bin";
LoadGameVersion();
if (gameVersion is null)
@ -105,13 +112,8 @@ namespace DSPRE {
LoadGameName();
LoadGameLanguage();
arm9Path = workDir + @"arm9.bin";
overlayTablePath = workDir + @"y9.bin";
overlayPath = workDir + "overlay";
internalNamesLocation = workDir + @"data\fielddata\maptable\mapname.bin";
SetNarcDirs();
SetHeaderTableOffset();
SetNullEncounterID();
SetAttackNamesTextNumber();
@ -143,6 +145,80 @@ namespace DSPRE {
//[174] = "dppt_suitcase",
};
}
public static void SetHeaderTableOffset() {
switch (gameFamily) {
case "DP":
switch (gameLanguage) {
case "ENG":
headerTableOffset = 0xEEDBC;
break;
case "ESP":
headerTableOffset = 0xEEE08;
break;
case "ITA":
headerTableOffset = 0xEED70;
break;
case "FRA":
headerTableOffset = 0xEEDFC;
break;
case "GER":
headerTableOffset = 0xEEDCC;
break;
case "JAP":
headerTableOffset = 0xF0D68;
break;
}
break;
case "Plat":
switch (gameLanguage) {
case "ENG":
headerTableOffset = 0xE601C;
break;
case "ESP":
headerTableOffset = 0xE60B0;
break;
case "ITA":
headerTableOffset = 0xE6038;
break;
case "FRA":
headerTableOffset = 0xE60A4;
break;
case "GER":
headerTableOffset = 0xE6074;
break;
case "JAP":
headerTableOffset = 0xE56F0;
break;
}
break;
case "HGSS":
switch (gameLanguage) {
case "ENG":
headerTableOffset = 0xF6BE0;
break;
case "ESP":
if (gameVersion == "HG") {
headerTableOffset = 0xF6BC8;
} else {
headerTableOffset = 0xF6BD0;
}
break;
case "ITA":
headerTableOffset = 0xF6B58;
break;
case "FRA":
headerTableOffset = 0xF6BC4;
break;
case "GER":
headerTableOffset = 0xF6B94;
break;
case "JAP":
headerTableOffset = 0xF6390;
break;
}
break;
}
}
public static void SetupSpawnSettings() {
switch (gameFamily) {
case "DP":