diff --git a/Quad64.csproj b/Quad64.csproj
index f38473a..d9bf92f 100644
--- a/Quad64.csproj
+++ b/Quad64.csproj
@@ -57,15 +57,17 @@
icon_KtQ_icon.ico
-
- False
- packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll
+
+ ..\packages\Newtonsoft.Json.11.0.2\lib\net40\Newtonsoft.Json.dll
+ True
-
- packages\OpenTK.2.0.0\lib\net20\OpenTK.dll
+
+ False
+ ..\packages\OpenTK.3.0.0\lib\net20\OpenTK.dll
- packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll
+ False
+ ..\packages\OpenTK.GLControl.3.0.0\lib\net20\OpenTK.GLControl.dll
diff --git a/packages.config b/packages.config
index 29730b4..26e5bf9 100644
--- a/packages.config
+++ b/packages.config
@@ -1,6 +1,6 @@
-
+
-
+
\ No newline at end of file
diff --git a/src/Forms/MainForm.Designer.cs b/src/Forms/MainForm.Designer.cs
index eaf091c..d0d377a 100644
--- a/src/Forms/MainForm.Designer.cs
+++ b/src/Forms/MainForm.Designer.cs
@@ -46,6 +46,7 @@ private void InitializeComponent()
this.bParam2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.bParam3ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.bParam4ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.warpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.objectComboNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.levelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -66,8 +67,6 @@ private void InitializeComponent()
this.rOMInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.scriptsDumpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.statusStrip1 = new System.Windows.Forms.StatusStrip();
- this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.panel1 = new System.Windows.Forms.Panel();
this.panel2 = new System.Windows.Forms.Panel();
this.act6 = new System.Windows.Forms.RadioButton();
@@ -80,16 +79,12 @@ private void InitializeComponent()
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
this.panel3 = new System.Windows.Forms.Panel();
- this.radioButton_front = new System.Windows.Forms.RadioButton();
- this.radioButton_back = new System.Windows.Forms.RadioButton();
- this.radioButton_top = new System.Windows.Forms.RadioButton();
- this.radioButton_bottom = new System.Windows.Forms.RadioButton();
- this.radioButton_left = new System.Windows.Forms.RadioButton();
- this.radioButton_right = new System.Windows.Forms.RadioButton();
+ this.gridSize = new System.Windows.Forms.NumericUpDown();
+ this.gridButton = new System.Windows.Forms.CheckBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.cameraMode = new System.Windows.Forms.ComboBox();
this.keepOnGround = new System.Windows.Forms.CheckBox();
this.dropToGround = new System.Windows.Forms.Button();
- this.radioButton2 = new System.Windows.Forms.RadioButton();
- this.radioButton1 = new System.Windows.Forms.RadioButton();
this.camSpeedLabel = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.trackBar_camSpeed = new System.Windows.Forms.TrackBar();
@@ -109,9 +104,7 @@ private void InitializeComponent()
this.moveObj = new System.Windows.Forms.PictureBox();
this.movObj_UpDown = new System.Windows.Forms.PictureBox();
this.glControl1 = new OpenTK.GLControl();
- this.warpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
- this.statusStrip1.SuspendLayout();
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
@@ -122,6 +115,7 @@ private void InitializeComponent()
this.splitContainer3.Panel2.SuspendLayout();
this.splitContainer3.SuspendLayout();
this.panel3.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.gridSize)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.trackBar_camSpeed)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.trackBar_moveSpeed)).BeginInit();
this.moveCamPanel.SuspendLayout();
@@ -146,7 +140,7 @@ private void InitializeComponent()
this.helpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
- this.menuStrip1.Size = new System.Drawing.Size(266, 24);
+ this.menuStrip1.Size = new System.Drawing.Size(174, 24);
this.menuStrip1.TabIndex = 1;
this.menuStrip1.Text = "menuStrip1";
//
@@ -253,27 +247,35 @@ private void InitializeComponent()
// bParam1ToolStripMenuItem
//
this.bParam1ToolStripMenuItem.Name = "bParam1ToolStripMenuItem";
- this.bParam1ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.bParam1ToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
this.bParam1ToolStripMenuItem.Text = "B. Param 1";
//
// bParam2ToolStripMenuItem
//
this.bParam2ToolStripMenuItem.Name = "bParam2ToolStripMenuItem";
- this.bParam2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.bParam2ToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
this.bParam2ToolStripMenuItem.Text = "B. Param 2";
//
// bParam3ToolStripMenuItem
//
this.bParam3ToolStripMenuItem.Name = "bParam3ToolStripMenuItem";
- this.bParam3ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.bParam3ToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
this.bParam3ToolStripMenuItem.Text = "B. Param 3";
//
// bParam4ToolStripMenuItem
//
this.bParam4ToolStripMenuItem.Name = "bParam4ToolStripMenuItem";
- this.bParam4ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.bParam4ToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
this.bParam4ToolStripMenuItem.Text = "B. Param 4";
//
+ // warpToolStripMenuItem
+ //
+ this.warpToolStripMenuItem.Enabled = false;
+ this.warpToolStripMenuItem.Name = "warpToolStripMenuItem";
+ this.warpToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+ this.warpToolStripMenuItem.Text = "Warp";
+ this.warpToolStripMenuItem.Click += new System.EventHandler(this.warpToolStripMenuItem_Click);
+ //
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
@@ -425,24 +427,6 @@ private void InitializeComponent()
this.scriptsDumpToolStripMenuItem.Text = "Script Dumps";
this.scriptsDumpToolStripMenuItem.Click += new System.EventHandler(this.scriptsDumpToolStripMenuItem_Click);
//
- // statusStrip1
- //
- this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.toolStripStatusLabel1});
- this.statusStrip1.Location = new System.Drawing.Point(0, 516);
- this.statusStrip1.Name = "statusStrip1";
- this.statusStrip1.Size = new System.Drawing.Size(880, 22);
- this.statusStrip1.SizingGrip = false;
- this.statusStrip1.TabIndex = 2;
- this.statusStrip1.Text = "statusStrip1";
- //
- // toolStripStatusLabel1
- //
- this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
- this.toolStripStatusLabel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
- this.toolStripStatusLabel1.Size = new System.Drawing.Size(39, 17);
- this.toolStripStatusLabel1.Text = "Ready";
- //
// panel1
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@@ -471,7 +455,7 @@ private void InitializeComponent()
// act6
//
this.act6.Appearance = System.Windows.Forms.Appearance.Button;
- this.act6.BackgroundImage = global::Quad64.Properties.Resources.icon_Star1_gray;
+ this.act6.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("act6.BackgroundImage")));
this.act6.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.act6.FlatAppearance.BorderSize = 0;
this.act6.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.Control;
@@ -482,7 +466,6 @@ private void InitializeComponent()
this.act6.Name = "act6";
this.act6.Size = new System.Drawing.Size(16, 16);
this.act6.TabIndex = 5;
- this.act6.TabStop = true;
this.act6.UseVisualStyleBackColor = true;
this.act6.Visible = false;
this.act6.CheckedChanged += new System.EventHandler(this.starAct_CheckedChanged);
@@ -490,7 +473,7 @@ private void InitializeComponent()
// act5
//
this.act5.Appearance = System.Windows.Forms.Appearance.Button;
- this.act5.BackgroundImage = global::Quad64.Properties.Resources.icon_Star1_gray;
+ this.act5.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("act5.BackgroundImage")));
this.act5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.act5.FlatAppearance.BorderSize = 0;
this.act5.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.Control;
@@ -501,7 +484,6 @@ private void InitializeComponent()
this.act5.Name = "act5";
this.act5.Size = new System.Drawing.Size(16, 16);
this.act5.TabIndex = 4;
- this.act5.TabStop = true;
this.act5.UseVisualStyleBackColor = true;
this.act5.Visible = false;
this.act5.CheckedChanged += new System.EventHandler(this.starAct_CheckedChanged);
@@ -509,7 +491,7 @@ private void InitializeComponent()
// act4
//
this.act4.Appearance = System.Windows.Forms.Appearance.Button;
- this.act4.BackgroundImage = global::Quad64.Properties.Resources.icon_Star1_gray;
+ this.act4.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("act4.BackgroundImage")));
this.act4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.act4.FlatAppearance.BorderSize = 0;
this.act4.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.Control;
@@ -520,7 +502,6 @@ private void InitializeComponent()
this.act4.Name = "act4";
this.act4.Size = new System.Drawing.Size(16, 16);
this.act4.TabIndex = 3;
- this.act4.TabStop = true;
this.act4.UseVisualStyleBackColor = true;
this.act4.Visible = false;
this.act4.CheckedChanged += new System.EventHandler(this.starAct_CheckedChanged);
@@ -528,7 +509,7 @@ private void InitializeComponent()
// act3
//
this.act3.Appearance = System.Windows.Forms.Appearance.Button;
- this.act3.BackgroundImage = global::Quad64.Properties.Resources.icon_Star1_gray;
+ this.act3.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("act3.BackgroundImage")));
this.act3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.act3.FlatAppearance.BorderSize = 0;
this.act3.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.Control;
@@ -539,7 +520,6 @@ private void InitializeComponent()
this.act3.Name = "act3";
this.act3.Size = new System.Drawing.Size(16, 16);
this.act3.TabIndex = 2;
- this.act3.TabStop = true;
this.act3.UseVisualStyleBackColor = true;
this.act3.Visible = false;
this.act3.CheckedChanged += new System.EventHandler(this.starAct_CheckedChanged);
@@ -547,7 +527,7 @@ private void InitializeComponent()
// act2
//
this.act2.Appearance = System.Windows.Forms.Appearance.Button;
- this.act2.BackgroundImage = global::Quad64.Properties.Resources.icon_Star1_gray;
+ this.act2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("act2.BackgroundImage")));
this.act2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.act2.FlatAppearance.BorderSize = 0;
this.act2.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.Control;
@@ -558,7 +538,6 @@ private void InitializeComponent()
this.act2.Name = "act2";
this.act2.Size = new System.Drawing.Size(16, 16);
this.act2.TabIndex = 1;
- this.act2.TabStop = true;
this.act2.UseVisualStyleBackColor = true;
this.act2.Visible = false;
this.act2.CheckedChanged += new System.EventHandler(this.starAct_CheckedChanged);
@@ -566,8 +545,9 @@ private void InitializeComponent()
// act1
//
this.act1.Appearance = System.Windows.Forms.Appearance.Button;
- this.act1.BackgroundImage = global::Quad64.Properties.Resources.icon_Star1_gray;
+ this.act1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("act1.BackgroundImage")));
this.act1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+ this.act1.Checked = true;
this.act1.FlatAppearance.BorderSize = 0;
this.act1.FlatAppearance.CheckedBackColor = System.Drawing.SystemColors.Control;
this.act1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
@@ -590,12 +570,14 @@ private void InitializeComponent()
this.propertyGrid1.CommandsBackColor = System.Drawing.SystemColors.Control;
this.propertyGrid1.CommandsDisabledLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.propertyGrid1.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.propertyGrid1.HelpVisible = false;
this.propertyGrid1.LineColor = System.Drawing.Color.LightGray;
this.propertyGrid1.Location = new System.Drawing.Point(0, 0);
this.propertyGrid1.Name = "propertyGrid1";
- this.propertyGrid1.PropertySort = System.Windows.Forms.PropertySort.Categorized;
- this.propertyGrid1.Size = new System.Drawing.Size(216, 276);
+ this.propertyGrid1.PropertySort = System.Windows.Forms.PropertySort.NoSort;
+ this.propertyGrid1.Size = new System.Drawing.Size(216, 261);
this.propertyGrid1.TabIndex = 0;
+ this.propertyGrid1.ToolbarVisible = false;
this.propertyGrid1.UseCompatibleTextRendering = true;
this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGrid1_PropertyValueChanged);
this.propertyGrid1.PropertySortChanged += new System.EventHandler(this.propertyGrid1_PropertySortChanged);
@@ -617,7 +599,7 @@ private void InitializeComponent()
this.splitContainer2.Panel2.Controls.Add(this.panel3);
this.splitContainer2.Panel2.Controls.Add(this.glControl1);
this.splitContainer2.Panel2MinSize = 600;
- this.splitContainer2.Size = new System.Drawing.Size(879, 491);
+ this.splitContainer2.Size = new System.Drawing.Size(879, 456);
this.splitContainer2.SplitterDistance = 219;
this.splitContainer2.TabIndex = 0;
this.splitContainer2.TabStop = false;
@@ -632,8 +614,8 @@ private void InitializeComponent()
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.propertyGrid1);
- this.splitContainer3.Size = new System.Drawing.Size(219, 491);
- this.splitContainer3.SplitterDistance = 208;
+ this.splitContainer3.Size = new System.Drawing.Size(219, 456);
+ this.splitContainer3.SplitterDistance = 188;
this.splitContainer3.TabIndex = 0;
this.splitContainer3.TabStop = false;
//
@@ -642,16 +624,12 @@ private void InitializeComponent()
this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel3.BackColor = System.Drawing.Color.Gray;
- this.panel3.Controls.Add(this.radioButton_front);
- this.panel3.Controls.Add(this.radioButton_back);
- this.panel3.Controls.Add(this.radioButton_top);
- this.panel3.Controls.Add(this.radioButton_bottom);
- this.panel3.Controls.Add(this.radioButton_left);
- this.panel3.Controls.Add(this.radioButton_right);
+ this.panel3.Controls.Add(this.gridSize);
+ this.panel3.Controls.Add(this.gridButton);
+ this.panel3.Controls.Add(this.label4);
+ this.panel3.Controls.Add(this.cameraMode);
this.panel3.Controls.Add(this.keepOnGround);
this.panel3.Controls.Add(this.dropToGround);
- this.panel3.Controls.Add(this.radioButton2);
- this.panel3.Controls.Add(this.radioButton1);
this.panel3.Controls.Add(this.camSpeedLabel);
this.panel3.Controls.Add(this.label6);
this.panel3.Controls.Add(this.trackBar_camSpeed);
@@ -661,102 +639,84 @@ private void InitializeComponent()
this.panel3.Controls.Add(this.moveCamPanel);
this.panel3.Controls.Add(this.rotateObjectPanel);
this.panel3.Controls.Add(this.moveObjectPanel);
- this.panel3.Location = new System.Drawing.Point(3, 370);
+ this.panel3.Location = new System.Drawing.Point(3, 333);
this.panel3.MaximumSize = new System.Drawing.Size(10000, 120);
this.panel3.MinimumSize = new System.Drawing.Size(600, 120);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(649, 120);
this.panel3.TabIndex = 5;
//
- // radioButton_front
+ // gridSize
//
- this.radioButton_front.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton_front.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton_front.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton_front.Location = new System.Drawing.Point(561, 99);
- this.radioButton_front.Name = "radioButton_front";
- this.radioButton_front.Size = new System.Drawing.Size(44, 20);
- this.radioButton_front.TabIndex = 22;
- this.radioButton_front.Text = "Front";
- this.radioButton_front.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton_front.UseVisualStyleBackColor = true;
- this.radioButton_front.CheckedChanged += new System.EventHandler(this.radioButton_front_CheckedChanged);
- //
- // radioButton_back
- //
- this.radioButton_back.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ this.gridSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton_back.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton_back.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton_back.Location = new System.Drawing.Point(604, 99);
- this.radioButton_back.Name = "radioButton_back";
- this.radioButton_back.Size = new System.Drawing.Size(44, 20);
- this.radioButton_back.TabIndex = 21;
- this.radioButton_back.Text = "Back";
- this.radioButton_back.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton_back.UseVisualStyleBackColor = true;
- this.radioButton_back.CheckedChanged += new System.EventHandler(this.radioButton_back_CheckedChanged);
- //
- // radioButton_top
- //
- this.radioButton_top.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ this.gridSize.Enabled = false;
+ this.gridSize.Location = new System.Drawing.Point(603, 94);
+ this.gridSize.Minimum = new decimal(new int[] {
+ 2,
+ 0,
+ 0,
+ 0});
+ this.gridSize.Name = "gridSize";
+ this.gridSize.Size = new System.Drawing.Size(43, 20);
+ this.gridSize.TabIndex = 26;
+ this.gridSize.TabStop = false;
+ this.gridSize.Value = new decimal(new int[] {
+ 100,
+ 0,
+ 0,
+ 0});
+ this.gridSize.ValueChanged += new System.EventHandler(this.gridSize_ValueChanged);
+ //
+ // gridButton
+ //
+ this.gridButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton_top.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton_top.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton_top.Location = new System.Drawing.Point(561, 61);
- this.radioButton_top.Name = "radioButton_top";
- this.radioButton_top.Size = new System.Drawing.Size(44, 20);
- this.radioButton_top.TabIndex = 20;
- this.radioButton_top.Text = "Top";
- this.radioButton_top.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton_top.UseVisualStyleBackColor = true;
- this.radioButton_top.CheckedChanged += new System.EventHandler(this.radioButton5_CheckedChanged);
- //
- // radioButton_bottom
- //
- this.radioButton_bottom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ this.gridButton.Appearance = System.Windows.Forms.Appearance.Button;
+ this.gridButton.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.gridButton.Location = new System.Drawing.Point(561, 93);
+ this.gridButton.Name = "gridButton";
+ this.gridButton.Size = new System.Drawing.Size(40, 22);
+ this.gridButton.TabIndex = 25;
+ this.gridButton.TabStop = false;
+ this.gridButton.Text = "Grid";
+ this.gridButton.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.gridButton.UseVisualStyleBackColor = true;
+ this.gridButton.CheckedChanged += new System.EventHandler(this.gridButton_CheckedChanged);
+ //
+ // label4
+ //
+ this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton_bottom.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton_bottom.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton_bottom.Location = new System.Drawing.Point(604, 61);
- this.radioButton_bottom.Name = "radioButton_bottom";
- this.radioButton_bottom.Size = new System.Drawing.Size(44, 20);
- this.radioButton_bottom.TabIndex = 19;
- this.radioButton_bottom.Text = "Bttm";
- this.radioButton_bottom.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton_bottom.UseVisualStyleBackColor = true;
- this.radioButton_bottom.CheckedChanged += new System.EventHandler(this.radioButton4_CheckedChanged);
- //
- // radioButton_left
- //
- this.radioButton_left.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton_left.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton_left.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton_left.Location = new System.Drawing.Point(561, 80);
- this.radioButton_left.Name = "radioButton_left";
- this.radioButton_left.Size = new System.Drawing.Size(44, 20);
- this.radioButton_left.TabIndex = 18;
- this.radioButton_left.Text = "Left";
- this.radioButton_left.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton_left.UseVisualStyleBackColor = true;
- this.radioButton_left.CheckedChanged += new System.EventHandler(this.radioButton_left_CheckedChanged);
- //
- // radioButton_right
- //
- this.radioButton_right.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(566, 47);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(76, 13);
+ this.label4.TabIndex = 24;
+ this.label4.Text = "Camera Mode:";
+ //
+ // cameraMode
+ //
+ this.cameraMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton_right.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton_right.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton_right.Location = new System.Drawing.Point(604, 80);
- this.radioButton_right.Name = "radioButton_right";
- this.radioButton_right.Size = new System.Drawing.Size(44, 20);
- this.radioButton_right.TabIndex = 17;
- this.radioButton_right.Text = "Right";
- this.radioButton_right.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton_right.UseVisualStyleBackColor = true;
- this.radioButton_right.CheckedChanged += new System.EventHandler(this.radioButton_right_CheckedChanged);
+ this.cameraMode.DisplayMember = "1";
+ this.cameraMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cameraMode.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.cameraMode.Items.AddRange(new object[] {
+ "Fly",
+ "Orbit",
+ "Top",
+ "Bottom",
+ "Left",
+ "Right",
+ "Front",
+ "Back"});
+ this.cameraMode.Location = new System.Drawing.Point(560, 63);
+ this.cameraMode.Name = "cameraMode";
+ this.cameraMode.Size = new System.Drawing.Size(87, 21);
+ this.cameraMode.TabIndex = 23;
+ this.cameraMode.TabStop = false;
+ this.cameraMode.SelectedIndexChanged += new System.EventHandler(this.cameraMode_SelectedIndexChanged);
//
// keepOnGround
//
@@ -785,38 +745,6 @@ private void InitializeComponent()
this.dropToGround.UseVisualStyleBackColor = true;
this.dropToGround.Click += new System.EventHandler(this.dropToGround_Click);
//
- // radioButton2
- //
- this.radioButton2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton2.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton2.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton2.Location = new System.Drawing.Point(604, 42);
- this.radioButton2.Name = "radioButton2";
- this.radioButton2.Size = new System.Drawing.Size(44, 20);
- this.radioButton2.TabIndex = 16;
- this.radioButton2.Text = "Orbit";
- this.radioButton2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton2.UseVisualStyleBackColor = true;
- this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged);
- //
- // radioButton1
- //
- this.radioButton1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.radioButton1.Appearance = System.Windows.Forms.Appearance.Button;
- this.radioButton1.Checked = true;
- this.radioButton1.Font = new System.Drawing.Font("Corbel", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.radioButton1.Location = new System.Drawing.Point(561, 42);
- this.radioButton1.Name = "radioButton1";
- this.radioButton1.Size = new System.Drawing.Size(44, 20);
- this.radioButton1.TabIndex = 15;
- this.radioButton1.TabStop = true;
- this.radioButton1.Text = "Fly";
- this.radioButton1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radioButton1.UseVisualStyleBackColor = true;
- this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton1_CheckedChanged);
- //
// camSpeedLabel
//
this.camSpeedLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@@ -922,7 +850,7 @@ private void InitializeComponent()
//
// moveCam_strafe
//
- this.moveCam_strafe.BackgroundImage = global::Quad64.Properties.Resources.MoveCamera;
+ this.moveCam_strafe.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveCam_strafe.BackgroundImage")));
this.moveCam_strafe.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.moveCam_strafe.Location = new System.Drawing.Point(2, 0);
this.moveCam_strafe.MinimumSize = new System.Drawing.Size(0, 10);
@@ -936,7 +864,7 @@ private void InitializeComponent()
//
// moveCam_InOut
//
- this.moveCam_InOut.BackgroundImage = global::Quad64.Properties.Resources.MoveCamera_Y;
+ this.moveCam_InOut.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveCam_InOut.BackgroundImage")));
this.moveCam_InOut.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.moveCam_InOut.Location = new System.Drawing.Point(100, 0);
this.moveCam_InOut.MinimumSize = new System.Drawing.Size(0, 10);
@@ -973,7 +901,7 @@ private void InitializeComponent()
//
// rotObj
//
- this.rotObj.BackgroundImage = global::Quad64.Properties.Resources.RotateObject;
+ this.rotObj.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("rotObj.BackgroundImage")));
this.rotObj.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.rotObj.Location = new System.Drawing.Point(3, 0);
this.rotObj.MinimumSize = new System.Drawing.Size(0, 10);
@@ -987,7 +915,7 @@ private void InitializeComponent()
//
// rotObj_Yaw
//
- this.rotObj_Yaw.BackgroundImage = global::Quad64.Properties.Resources.RotateObject_Y;
+ this.rotObj_Yaw.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("rotObj_Yaw.BackgroundImage")));
this.rotObj_Yaw.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.rotObj_Yaw.Location = new System.Drawing.Point(101, 0);
this.rotObj_Yaw.MinimumSize = new System.Drawing.Size(0, 10);
@@ -1022,7 +950,7 @@ private void InitializeComponent()
//
// moveObj
//
- this.moveObj.BackgroundImage = global::Quad64.Properties.Resources.MoveObject;
+ this.moveObj.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveObj.BackgroundImage")));
this.moveObj.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.moveObj.Location = new System.Drawing.Point(3, 0);
this.moveObj.MinimumSize = new System.Drawing.Size(0, 10);
@@ -1036,7 +964,7 @@ private void InitializeComponent()
//
// movObj_UpDown
//
- this.movObj_UpDown.BackgroundImage = global::Quad64.Properties.Resources.MoveObject_Y;
+ this.movObj_UpDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("movObj_UpDown.BackgroundImage")));
this.movObj_UpDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.movObj_UpDown.Location = new System.Drawing.Point(101, 0);
this.movObj_UpDown.MinimumSize = new System.Drawing.Size(0, 10);
@@ -1058,7 +986,7 @@ private void InitializeComponent()
this.glControl1.Location = new System.Drawing.Point(3, 2);
this.glControl1.MinimumSize = new System.Drawing.Size(600, 120);
this.glControl1.Name = "glControl1";
- this.glControl1.Size = new System.Drawing.Size(649, 365);
+ this.glControl1.Size = new System.Drawing.Size(649, 329);
this.glControl1.TabIndex = 0;
this.glControl1.TabStop = false;
this.glControl1.VSync = false;
@@ -1073,34 +1001,24 @@ private void InitializeComponent()
this.glControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseUp);
this.glControl1.Resize += new System.EventHandler(this.glControl1_Resize);
//
- // warpToolStripMenuItem
- //
- this.warpToolStripMenuItem.Enabled = false;
- this.warpToolStripMenuItem.Name = "warpToolStripMenuItem";
- this.warpToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
- this.warpToolStripMenuItem.Text = "Warp";
- this.warpToolStripMenuItem.Click += new System.EventHandler(this.warpToolStripMenuItem_Click);
- //
// MainForm
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(880, 538);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+ this.BackColor = System.Drawing.Color.White;
+ this.ClientSize = new System.Drawing.Size(880, 483);
this.Controls.Add(this.splitContainer2);
this.Controls.Add(this.panel1);
- this.Controls.Add(this.statusStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.MinimumSize = new System.Drawing.Size(820, 522);
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "Quad64 v0.2 (Beta build 3)";
+ this.Text = "Quad64 v0.2 (Beta build 4)";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.Shown += new System.EventHandler(this.Form1_Shown);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
- this.statusStrip1.ResumeLayout(false);
- this.statusStrip1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel2.ResumeLayout(false);
@@ -1113,6 +1031,7 @@ private void InitializeComponent()
this.splitContainer3.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.gridSize)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackBar_camSpeed)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackBar_moveSpeed)).EndInit();
this.moveCamPanel.ResumeLayout(false);
@@ -1128,7 +1047,6 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.moveObj)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.movObj_UpDown)).EndInit();
this.ResumeLayout(false);
- this.PerformLayout();
}
@@ -1138,8 +1056,6 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem loadROMToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveROMToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem levelToolStripMenuItem;
- private System.Windows.Forms.StatusStrip statusStrip1;
- private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.ToolStripMenuItem selectAreaToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
@@ -1169,8 +1085,6 @@ private void InitializeComponent()
private System.Windows.Forms.Label camSpeedLabel;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TrackBar trackBar_camSpeed;
- private System.Windows.Forms.RadioButton radioButton2;
- private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.ToolStripMenuItem rOMInfoToolStripMenuItem;
private System.Windows.Forms.Button dropToGround;
private System.Windows.Forms.CheckBox keepOnGround;
@@ -1207,13 +1121,11 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem bParam4ToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripMenuItem objectComboNameToolStripMenuItem;
- private System.Windows.Forms.RadioButton radioButton_right;
- private System.Windows.Forms.RadioButton radioButton_front;
- private System.Windows.Forms.RadioButton radioButton_back;
- private System.Windows.Forms.RadioButton radioButton_top;
- private System.Windows.Forms.RadioButton radioButton_bottom;
- private System.Windows.Forms.RadioButton radioButton_left;
private System.Windows.Forms.ToolStripMenuItem warpToolStripMenuItem;
+ private System.Windows.Forms.ComboBox cameraMode;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.CheckBox gridButton;
+ private System.Windows.Forms.NumericUpDown gridSize;
}
}
diff --git a/src/Forms/MainForm.cs b/src/Forms/MainForm.cs
index 53fd68e..56b113c 100644
--- a/src/Forms/MainForm.cs
+++ b/src/Forms/MainForm.cs
@@ -25,9 +25,9 @@ partial class MainForm : Form
MultiselectTreeView treeView1;
readonly System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
bool isMouseDown = false, isShiftDown = false, isControlDown = false, moveState = false;
+ bool gridEnabled = false;
static Level level;
- float FOV = 1.048f;
-
+
public Level getLevelData { get { return level; } }
public object SettingsForms { get; private set; }
@@ -80,7 +80,12 @@ public MainForm()
glControl1.CreateControl();
SettingsFile.LoadGlobalSettings("default");
glControl1.MouseWheel += new MouseEventHandler(glControl1_Wheel);
- ProjMatrix = Matrix4.CreatePerspectiveFieldOfView(FOV, (float)glControl1.Width / (float)glControl1.Height, 100f, 100000f);
+ ProjMatrix = Matrix4.CreatePerspectiveFieldOfView(
+ Globals.FOV * ((float)Math.PI / 180.0f),
+ (float)glControl1.Width / (float)glControl1.Height,
+ 100f,
+ 100000f
+ );
glControl1.Enabled = false;
KeyPreview = true;
treeView1.HideSelection = false;
@@ -88,7 +93,7 @@ public MainForm()
myTimer.Tick += updateWASDControls;
myTimer.Interval = 10;
myTimer.Enabled = false;
- //foreach(ObjectComboEntry entry in Globals.objectComboEntries) Console.WriteLine(entry.ToString());
+ cameraMode.SelectedIndex = 0;
}
private void loadROM(bool startingUp)
@@ -133,6 +138,8 @@ private void loadROM(bool startingUp)
camera.setLevel(level);
updateAreaButtons();
+ rom.hasLookedAtLevelIDs = true;
+
//stopWatch.Stop();
//Console.WriteLine("Startup time: " + stopWatch.Elapsed.Milliseconds + "ms");
@@ -193,20 +200,61 @@ private void refreshObjectsInList()
EndUpdate(treeView1);
}
+ private void drawGrid()
+ {
+ int w = glControl1.Width;
+ int h = glControl1.Height;
+
+ GL.Disable(EnableCap.DepthTest);
+
+ GL.MatrixMode(MatrixMode.Projection);
+ GL.LoadIdentity();
+ GL.Ortho(0, w, h, 0, -1, 1000);
+
+ GL.MatrixMode(MatrixMode.Modelview);
+ GL.LoadIdentity();
+ GL.PushMatrix();
+
+ GL.Color3(Color.Black);
+ float numberLines = (int)gridSize.Value;
+ float lineWidthOffset = (float)w / numberLines;
+ float lineHeightOffset = (float)h / numberLines;
+ GL.Begin(PrimitiveType.Lines);
+ for (int i = 0; i < numberLines; i++)
+ {
+ // draw vertical line
+ GL.Vertex2(lineWidthOffset * i, 0);
+ GL.Vertex2(lineWidthOffset * i, h);
+
+ // draw horizontal line
+ GL.Vertex2(0, lineHeightOffset * i);
+ GL.Vertex2(w, lineHeightOffset * i);
+ }
+ GL.End();
+
+ GL.PopMatrix();
+ GL.Enable(EnableCap.DepthTest);
+ }
+
private void glControl1_Paint(object sender, PaintEventArgs e)
{
GL.ClearColor(bgColor);
if (level != null)
{
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
+
+
GL.MatrixMode(MatrixMode.Projection);
GL.LoadMatrix(ref ProjMatrix);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref camMtx);
-
+
//level.getCurrentArea().drawPicking();
level.getCurrentArea().drawEverything();
+ if (gridEnabled)
+ drawGrid();
+
glControl1.SwapBuffers();
}
}
@@ -432,7 +480,7 @@ private void glControl1_KeyDown(object sender, KeyEventArgs e)
private void glControl1_Load(object sender, EventArgs e)
{
GL.Enable(EnableCap.Blend);
- GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
+ GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
GL.Enable(EnableCap.DepthTest);
GL.DepthFunc(DepthFunction.Lequal);
@@ -451,7 +499,9 @@ private void glControl1_Resize(object sender, EventArgs e)
{
glControl1.Context.Update(glControl1.WindowInfo);
GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
- ProjMatrix = Matrix4.CreatePerspectiveFieldOfView(FOV, (float)glControl1.Width / (float)glControl1.Height, 100f, 100000f);
+ ProjMatrix = Matrix4.CreatePerspectiveFieldOfView(Globals.FOV * ((float)Math.PI / 180.0f), (float)glControl1.Width / (float)glControl1.Height, 100f, 100000f);
+ //ProjMatrix = Matrix4.CreateOrthographic(1000f, 1000f, 100f, 100000f);
+
glControl1.Invalidate();
}
@@ -487,6 +537,7 @@ private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
SettingsForm settings = new SettingsForm();
settings.ShowDialog();
+ updateFieldOfView();
glControl1.Invalidate();
propertyGrid1.Refresh();
glControl1.Update(); // Needed after calling propertyGrid1.Refresh();
@@ -805,7 +856,8 @@ private void Form1_KeyDown(object sender, KeyEventArgs e)
private void resetObjectVariables()
{
- radioButton1.Checked = true;
+ cameraMode.SelectedIndex = 0;
+
treeView1.SelectedNode = null;
Globals.list_selected = -1;
Globals.item_selected = -1;
@@ -816,6 +868,7 @@ private void resetObjectVariables()
private void switchLevel(ushort levelID)
{
Level testLevel = new Level(levelID, 1);
+ LevelScripts.parse(ref testLevel, 0x15, 0);
//Stopwatch stopWatch = new Stopwatch();
//stopWatch.Start();
LevelScripts.parse(ref testLevel, 0x15, 0);
@@ -936,7 +989,6 @@ private void updateAfterSelect(TreeNode node)
Globals.isMultiSelectedFromSpecialObjects = false;
bool hasSO_8 = false, hasSO_10 = false, hasSO_12 = false;
Globals.isMultiSelectedFromBothNormalWarpsAndInstantWarps = false;
- bool hasRegularWarp = false, hasInstantWarp = false;
if (Globals.list_selected == 2)
{
Object3D obj3d_0 = area.SpecialObjects[treeView1.SelectedNodes[0].Index];
@@ -1145,6 +1197,12 @@ private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
updateAfterSelect(e.Node);
}
+ void updateFieldOfView()
+ {
+ ProjMatrix = Matrix4.CreatePerspectiveFieldOfView(Globals.FOV * ((float)Math.PI / 180.0f), (float)glControl1.Width / (float)glControl1.Height, 100f, 100000f);
+ glControl1.Invalidate();
+ }
+
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
/*
@@ -1300,86 +1358,52 @@ private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
e.DrawDefault = true;
}
}
-
- private void radioButton2_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButton2.Checked)
- {
- camera.setCameraMode(CameraMode.ORBIT, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
- }
- }
-
- private void radioButton1_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButton1.Checked)
- {
- camera.setCameraMode(CameraMode.FLY, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
- }
- }
-
-
- private void radioButton4_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButton_bottom.Checked)
- {
- camera.setCameraMode_LookDirection(LookDirection.BOTTOM, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
- }
- }
-
- private void radioButton5_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButton_top.Checked)
- {
- camera.setCameraMode_LookDirection(LookDirection.TOP, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
- }
- }
-
- private void radioButton_left_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButton_left.Checked)
- {
- camera.setCameraMode_LookDirection(LookDirection.LEFT, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
- }
- }
-
- private void radioButton_right_CheckedChanged(object sender, EventArgs e)
+
+ private void cameraMode_SelectedIndexChanged(object sender, EventArgs e)
{
- if (radioButton_right.Checked)
- {
- camera.setCameraMode_LookDirection(LookDirection.RIGHT, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
+ switch (cameraMode.SelectedIndex) {
+ case 0: // Fly
+ camera.setCameraMode(CameraMode.FLY, ref camMtx);
+ break;
+ case 1: // Orbit
+ camera.setCameraMode(CameraMode.ORBIT, ref camMtx);
+ break;
+ case 2: // Top
+ camera.setCameraMode_LookDirection(LookDirection.TOP, ref camMtx);
+ break;
+ case 3: // Bottom
+ camera.setCameraMode_LookDirection(LookDirection.BOTTOM, ref camMtx);
+ break;
+ case 4: // Left
+ camera.setCameraMode_LookDirection(LookDirection.LEFT, ref camMtx);
+ break;
+ case 5: // Right
+ camera.setCameraMode_LookDirection(LookDirection.RIGHT, ref camMtx);
+ break;
+ case 6: // Front
+ camera.setCameraMode_LookDirection(LookDirection.FRONT, ref camMtx);
+ break;
+ case 7: // Back
+ camera.setCameraMode_LookDirection(LookDirection.BACK, ref camMtx);
+ break;
}
+ camera.updateMatrix(ref camMtx);
+ glControl1.Invalidate();
}
-
- private void radioButton_front_CheckedChanged(object sender, EventArgs e)
+
+ private void gridButton_CheckedChanged(object sender, EventArgs e)
{
- if (radioButton_front.Checked)
+ if (gridButton.Checked)
{
- camera.setCameraMode_LookDirection(LookDirection.FRONT, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
+ gridSize.Enabled = true;
+ gridEnabled = true;
}
- }
-
- private void radioButton_back_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButton_back.Checked)
+ else
{
- camera.setCameraMode_LookDirection(LookDirection.BACK, ref camMtx);
- camera.updateMatrix(ref camMtx);
- glControl1.Invalidate();
+ gridSize.Enabled = false;
+ gridEnabled = false;
}
+ glControl1.Invalidate();
}
private void starAct_CheckedChanged(object sender, EventArgs e)
@@ -2136,6 +2160,11 @@ private void trackBar2_ValueChanged(object sender, EventArgs e)
Globals.objSpeedMultiplier = newValue / 100.0f;
}
+ private void gridSize_ValueChanged(object sender, EventArgs e)
+ {
+ glControl1.Invalidate();
+ }
+
private const int WM_USER = 0x0400;
private const int EM_SETEVENTMASK = (WM_USER + 69);
diff --git a/src/Forms/MainForm.resx b/src/Forms/MainForm.resx
index 64a9277..820fc16 100644
--- a/src/Forms/MainForm.resx
+++ b/src/Forms/MainForm.resx
@@ -120,10 +120,318 @@
17, 17
-
- 132, 17
-
+
+
+ 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
+ rkJggg==
+
+
+
+
+ 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
+ AElFTkSuQmCC
+
+
+
+
+ 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
+ rkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABgAAACACAYAAAARQqnWAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAATeSURBVGhDxdpV
+ k51FFIXhueQKJwGCxd0FmLgCAYK7pwp3d3d3d3d3d/1Tze6pWcXX+6w3DFNDhaqHSs5ep99JrtNXSvlf
+ 2Q+z+K/+r0feOfbDSo+M3qKvbBjj1du/xfyHnYc3jusrf63z6q0byu9UvR8MPl6//Gc80lU2bjkgf163
+ FGl/03n8j/hipoC7UeSfX3Qe/31tLz0ubuMiTaD+fbovVkMJVPUNG9BP/1uMsvy4uK3+FE1AP/2vazz3
+ eOW2VfdP0QR+iWPmHu5y38HAz3HMyinx0Ca47ww54B508vcw8NPqVjl5qyHJ38PAj3Ek+VG3EQz8EEeS
+ A24jGPh+FSsnbd1wG8HAd3EkOeA2goFv40hywG1keIETt2l8s7IPYcCNZUQCX8eRlBO2bbiNYOCrOJIc
+ cBvBwJcrWA64jQwvcPx2DbcRDHwRR5IDbiMY+Hw5K8dt33AbwcBncSQ54DaCgU/jSHLAbQQDnyxj5dgd
+ Gm4jGPg4jiQH3EZGIDDKbgQDH8WRlGNGNdxGMPDhUpYDbiMY+CCOpBw9uuE2goH340hywG2EA0tYT8Bs
+ qvcCBuqRlKN2bLiNYODdOJIccBvBwDuLWQ64jWDg7TiScuRODbeRzRd4q5+VI3ZuuI1g4M04khxwG8HA
+ G3EkOeA2goHX40jK4WMabiMYeG1vlgNuIxh4NY4kB9xGMPBKHEk5bJeG2wgH9mI9AbMRDLwcR1IO3bXh
+ NoKBl+JIcsBtBAMv7slywG1keIFDdmu4jWDghTiSHHAbwcDzcSQ54DaCgecWsXLw7g23EQw8G0eSA24j
+ GHgmjqQctEfDbQQDTy9kOeA2svkCT8WRlA1jG24jGHhyAcsBtxEMPBFHkgNuIxh4PI6kHDiu4TaCgcfm
+ sxxwGxle4IDxDbcRDDwaR5IDbiMYeCSOJAfcRjDw8DxW9p/QcBvZfIGH4khywG0EAw/OZWX9xIbbCAYe
+ iCPJAbcRDNwfR1LWT2q4jWDgvjms7BcPd7iNYODeOJIccBvBwD1xJGXfyQ23kREJ3D27D2HAjWVEAnfF
+ kZR9pjTcRjBwZxxJDriNYOCOWSwH3EaGF1g3teE2goHb40hywG0EA7fNZGXttIbbCAZujSPJAbcRDNwS
+ R5IDbiMYuDmOpKyZ3nAb4cAM1hMwG8HATXEkZfWMhtsIBm6MI8kBtxEM3DCd5YDbCAaujyMpq2Y23EYw
+ cF0cSQ64jXBgGmsDs+xGMHBtHElZOavhNoKBa+JIcsBtBANXT2VlxeyG28h/Clw1KAf0uYMBN5YRCVwZ
+ R1KWz2m4jWDgiiksB9xGMHB5HEkOuI1g4LI4krJsbsNtBAOXTmY54DaCgUviSMrSeQ23EQxcHEeSA24j
+ HJjEegJmIxi4KI6kLJnfcBvBwIVxJDngNoKBCyayHHAbGV5g8YKG2wgGzo8jyQG3EQycF8eu0r9wSPL3
+ MHDuhJZ7zMnfw8A5cczcg13uOxg4O45Z6V+0Se47HBjvuYcrt616ApX+OehZMcjc45Xb2n8OOvCLwT/F
+ mTFy8uNuU3V/+p6A/hRnxDDLAbfRT28DA7/pRE439Li7uccH3uz+ZuCDTuS0RIH8OT0+8F7+YODDwUj9
+ +6xfPnWsV291Q49XPR9I/UI35OhheryyH2Z6JMs7x344ckrf3wRgaObqYSOYAAAAAElFTkSuQmCC
+
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
diff --git a/src/Forms/SelectLevelForm.Designer.cs b/src/Forms/SelectLevelForm.Designer.cs
index b000b1f..45e9dcf 100644
--- a/src/Forms/SelectLevelForm.Designer.cs
+++ b/src/Forms/SelectLevelForm.Designer.cs
@@ -45,7 +45,7 @@ private void InitializeComponent()
//
// button1
//
- this.button1.Location = new System.Drawing.Point(69, 62);
+ this.button1.Location = new System.Drawing.Point(69, 55);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(104, 29);
this.button1.TabIndex = 1;
@@ -55,7 +55,7 @@ private void InitializeComponent()
//
// button2
//
- this.button2.Location = new System.Drawing.Point(179, 62);
+ this.button2.Location = new System.Drawing.Point(179, 55);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(104, 29);
this.button2.TabIndex = 2;
@@ -67,11 +67,14 @@ private void InitializeComponent()
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(351, 98);
+ this.ClientSize = new System.Drawing.Size(348, 97);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.comboBox1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
this.Name = "SelectLevelForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Select a Level";
diff --git a/src/Forms/SelectLevelForm.cs b/src/Forms/SelectLevelForm.cs
index 24e9754..748a217 100644
--- a/src/Forms/SelectLevelForm.cs
+++ b/src/Forms/SelectLevelForm.cs
@@ -24,6 +24,12 @@ public SelectLevelForm(ushort levelID)
{
comboBox1.Items.Add(entry.Key + " (0x" + entry.Value.ToString("X2") + ")");
}
+
+ foreach (ushort entry in rom.extra_levelIDs)
+ {
+ comboBox1.Items.Add("[EXT] Extra Level (0x" + entry.ToString("X2") + ")");
+ }
+
//comboBox1.Items.Add("Custom ID value");
comboBox1.SelectedIndex = rom.getLevelIndexById(levelID);
}
diff --git a/src/Forms/SettingsForm.Designer.cs b/src/Forms/SettingsForm.Designer.cs
index 61b4468..077e143 100644
--- a/src/Forms/SettingsForm.Designer.cs
+++ b/src/Forms/SettingsForm.Designer.cs
@@ -54,23 +54,23 @@ private void InitializeComponent()
// Basic
//
this.Basic.AutoScroll = true;
+ this.Basic.BackColor = System.Drawing.Color.White;
this.Basic.Location = new System.Drawing.Point(4, 22);
this.Basic.Name = "Basic";
this.Basic.Padding = new System.Windows.Forms.Padding(3);
this.Basic.Size = new System.Drawing.Size(466, 261);
this.Basic.TabIndex = 0;
this.Basic.Text = "Basic";
- this.Basic.UseVisualStyleBackColor = true;
//
// Advanced
//
+ this.Advanced.BackColor = System.Drawing.Color.White;
this.Advanced.Location = new System.Drawing.Point(4, 22);
this.Advanced.Name = "Advanced";
this.Advanced.Padding = new System.Windows.Forms.Padding(3);
- this.Advanced.Size = new System.Drawing.Size(466, 241);
+ this.Advanced.Size = new System.Drawing.Size(466, 261);
this.Advanced.TabIndex = 1;
this.Advanced.Text = "Advanced";
- this.Advanced.UseVisualStyleBackColor = true;
//
// saveButton
//
diff --git a/src/Forms/SettingsForm.cs b/src/Forms/SettingsForm.cs
index 6db54f7..fad1b8e 100644
--- a/src/Forms/SettingsForm.cs
+++ b/src/Forms/SettingsForm.cs
@@ -57,6 +57,8 @@ private void OpenEmulatorPath_Click(object sender, EventArgs e)
private CheckBox enableWireframe, enableBFculling, drawObjMdls, autoLoadROM;
private ComboBox renderMap, useHex;
+ private TrackBar fovBar;
+ private Label fovBarDisplay = new Label();
private void AddBasicSettings()
{
int xOffset = 3, yOffset = 5, SeperatorWidth = Basic.Width - 6;
@@ -78,6 +80,11 @@ private void AddBasicSettings()
xOffset, yOffset, (Globals.renderCollisionMap ? 1 : 0));
renderMap = (ComboBox)Basic.Controls[Basic.Controls.Count - 1];
yOffset += 35;
+
+ AddTrackBarSetting(Basic, "Field of view: ", ref fovBarDisplay, xOffset, yOffset, 10, 170, Globals.FOV);
+ fovBar = (TrackBar)Basic.Controls[Basic.Controls.Count - 1];
+ yOffset += 50;
+
Basic.Controls.Add(newLineSeparator(xOffset, yOffset, SeperatorWidth));
yOffset += 10;
Basic.Controls.Add(newFancyLabel("Editor Settings", 0,
@@ -90,6 +97,32 @@ private void AddBasicSettings()
new string[] { "No (Decimal Only)", "Yes (Signed Hex)", "Yes (Unsigned Hex)" },
xOffset, yOffset, (!Globals.useHexadecimal ? 0 : (Globals.useSignedHex ? 1 : 2)));
useHex = (ComboBox)Basic.Controls[Basic.Controls.Count - 1];
+
+ yOffset += 30;
+ Basic.Controls.Add(newLineSeparator(xOffset, yOffset, SeperatorWidth));
+ }
+
+ private void trackBar_updateLabelValue(object sender, EventArgs e)
+ {
+ TrackBar bar = (TrackBar)sender;
+ ((Label)(bar.Tag)).Text = bar.Value.ToString();
+ }
+
+ private void AddTrackBarSetting(TabPage page, string label, ref Label updateDisplay, int x, int y, int min, int max, int currentValue)
+ {
+ Label tbl = newLabel(label, x, y + 3);
+ tbl.Width = 70;
+ updateDisplay.Location = new Point(x, y + 20);
+ updateDisplay.TextAlign = ContentAlignment.MiddleCenter;
+ updateDisplay.Text = currentValue.ToString();
+ updateDisplay.Width = 74;
+ TrackBar tb = newTrackBar(x + tbl.Width, y, min, max, currentValue);
+ tb.BackColor = page.BackColor;
+ tb.Tag = updateDisplay;
+ tb.ValueChanged += new EventHandler(trackBar_updateLabelValue);
+ page.Controls.Add(tbl);
+ page.Controls.Add(updateDisplay);
+ page.Controls.Add(tb);
}
private void AddComboBoxSetting(TabPage page, string label, string[] options, int x, int y, int selectedIndex)
@@ -182,6 +215,18 @@ private CheckBox newCheckBox(string text, int x, int y, bool isChecked)
return box;
}
+ private TrackBar newTrackBar(int x, int y, int minValue, int maxValue, int currentValue)
+ {
+ TrackBar bar = new TrackBar();
+ bar.Minimum = minValue;
+ bar.Maximum = maxValue;
+ bar.Value = currentValue;
+ bar.TickFrequency = 10;
+ bar.Left = x;
+ bar.Top = y;
+ return bar;
+ }
+
private void updateGlobalSettings()
{
Globals.doWireframe = enableWireframe.Checked;
@@ -192,6 +237,7 @@ private void updateGlobalSettings()
Globals.useHexadecimal = (useHex.SelectedIndex != 0);
Globals.useSignedHex = (useHex.SelectedIndex == 1);
Globals.autoSaveWhenClickEmulator = autoSaveWithEmulatorBox.Checked;
+ Globals.FOV = fovBar.Value;
if (Globals.doBackfaceCulling)
GL.Enable(EnableCap.CullFace);
diff --git a/src/Globals.cs b/src/Globals.cs
index c0890e5..7afdce0 100644
--- a/src/Globals.cs
+++ b/src/Globals.cs
@@ -22,6 +22,7 @@ class Globals
public static bool drawObjectModels = true;
public static bool renderCollisionMap = false;
public static bool doBackfaceCulling = false;
+ public static int FOV = 60; // field of view (in degrees)
// Editor Options
public static bool autoLoadROMOnStartup = false;
diff --git a/src/JSON/SettingsFile.cs b/src/JSON/SettingsFile.cs
index f4ee3f9..ef9a253 100644
--- a/src/JSON/SettingsFile.cs
+++ b/src/JSON/SettingsFile.cs
@@ -22,6 +22,7 @@ public static void SaveGlobalSettings(string profileName)
s["SignedHex"] = Globals.useSignedHex.ToString();
s["EmulatorPath"] = Globals.pathToEmulator;
s["AutoSaveOnLaunchROM"] = Globals.autoSaveWhenClickEmulator.ToString();
+ s["FieldOfView"] = Globals.FOV.ToString();
string savePath = "./data/profiles/" + profileName + "/";
Directory.CreateDirectory(savePath); // Create directory if it doesn't exist!
@@ -55,6 +56,8 @@ public static void LoadGlobalSettings(string profileName)
Globals.pathToEmulator = o["EmulatorPath"].ToString();
if (o["AutoSaveOnLaunchROM"] != null)
Globals.autoSaveWhenClickEmulator = bool.Parse(o["AutoSaveOnLaunchROM"].ToString());
+ if (o["FieldOfView"] != null)
+ Globals.FOV = int.Parse(o["FieldOfView"].ToString());
}
}
}
diff --git a/src/ROM.cs b/src/ROM.cs
index 8556812..0ab3169 100644
--- a/src/ROM.cs
+++ b/src/ROM.cs
@@ -119,7 +119,8 @@ private void checkROM()
type = ROM_Type.EXTENDED;
else
type = ROM_Type.VANILLA;
-
+
+ hasLookedAtLevelIDs = false;
Console.WriteLine("ROM = " + filepath);
Console.WriteLine("ROM Endian = " + endian);
@@ -483,6 +484,10 @@ public int getLevelIndexById(ushort Id)
public ushort getLevelIdFromIndex(int index)
{
+ if (index >= levelIDs.Count)
+ {
+ return extra_levelIDs[index - levelIDs.Count];
+ }
return levelIDs.Values.ElementAt(index);
}
@@ -687,6 +692,23 @@ public void findAndSetSegment02()
}
}
+
+ public bool hasLookedAtLevelIDs = false;
+ public void checkIfLevelIDIsInDictionary(ushort id)
+ {
+ foreach (KeyValuePair level_id in levelIDs)
+ {
+ if (level_id.Value == id)
+ return;
+ }
+
+ Console.WriteLine("Found an extra level ID! 0x" + id.ToString("X8"));
+
+ extra_levelIDs.Add(id);
+ }
+
+ public List extra_levelIDs = new List();
+
public Dictionary levelIDs = new Dictionary
{
{ "[C01] Bob-omb Battlefield", 0x09 },
diff --git a/src/Scripts/CollisionMap.cs b/src/Scripts/CollisionMap.cs
index b6d0f48..6b15424 100644
--- a/src/Scripts/CollisionMap.cs
+++ b/src/Scripts/CollisionMap.cs
@@ -183,7 +183,7 @@ public void drawCollisionMap(bool drawAsBlack)
GL.PushMatrix();
GL.EnableClientState(ArrayCap.VertexArray);
if (drawAsBlack) // Used as part of color picking
- GL.BlendFunc(BlendingFactorSrc.Zero, BlendingFactorDest.Zero);
+ GL.BlendFunc(BlendingFactor.Zero, BlendingFactor.Zero);
for (int i = 0; i < triangles.Count; i++)
{
CollisionTriangleList l = triangles[i];
@@ -204,7 +204,7 @@ public void drawCollisionMap(bool drawAsBlack)
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
}
if (drawAsBlack)
- GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
+ GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
GL.DisableClientState(ArrayCap.VertexArray);
GL.PopMatrix();
@@ -216,7 +216,7 @@ public void drawCollisionMapOutline()
{
GL.PushMatrix();
GL.EnableClientState(ArrayCap.VertexArray);
- GL.BlendFunc(BlendingFactorSrc.Zero, BlendingFactorDest.Zero);
+ GL.BlendFunc(BlendingFactor.Zero, BlendingFactor.Zero);
for (int i = 0; i < triangles.Count; i++)
{
CollisionTriangleList l = triangles[i];
@@ -231,7 +231,7 @@ public void drawCollisionMapOutline()
DrawElementsType.UnsignedInt, IntPtr.Zero);
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
}
- GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
+ GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
GL.DisableClientState(ArrayCap.VertexArray);
GL.PopMatrix();
}
diff --git a/src/Scripts/LevelScripts.cs b/src/Scripts/LevelScripts.cs
index 2db0a7f..345d701 100644
--- a/src/Scripts/LevelScripts.cs
+++ b/src/Scripts/LevelScripts.cs
@@ -346,11 +346,20 @@ private static void CMD_0C(ref Level lvl, ref string desc, byte[] cmd, byte org_
byte operation = cmd[2];
desc = "Jump to address 0x" + bytesToInt(cmd, 8, 4).ToString("X8") + " " + getCondition(operation, lvlcheck, false);
addLSCommandToDump(ref lvl, cmd, org_seg, org_off, desc);
- if (lvlcheck == lvl.LevelID)
+
+ if (org_seg == 0x15)
{
- byte seg = cmd[8];
- uint off = bytesToInt(cmd, 9, 3);
- parse(ref lvl, seg, off);
+ if (lvlcheck == lvl.LevelID)
+ {
+ byte seg = cmd[8];
+ uint off = bytesToInt(cmd, 9, 3);
+ parse(ref lvl, seg, off);
+ }
+
+ if (!ROM.Instance.hasLookedAtLevelIDs)
+ {
+ ROM.Instance.checkIfLevelIDIsInDictionary((ushort)lvlcheck);
+ }
}
}