From a7c17f318cc64c39ec1fd6f9361be5d4f0e0e2fd Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 23 Dec 2018 15:29:35 +1100 Subject: [PATCH] Render car generators option for MrFoxPro --- Rendering/Renderer.cs | 45 ++++++++++++++++++++- WorldForm.Designer.cs | 90 ++++++++++++++++++++++++----------------- WorldForm.cs | 5 +++ WorldForm.resx | 94 +++++++++++++++++++++---------------------- 4 files changed, 148 insertions(+), 86 deletions(-) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 659f31a..1bca21f 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -102,6 +102,7 @@ namespace CodeWalker.Rendering public bool renderentities = true; public bool rendergrass = true; public bool renderdistlodlights = true; + public bool rendercars = false; public bool rendercollisionmeshes = Settings.Default.ShowCollisionMeshes; public bool rendercollisionmeshlayerdrawable = true; @@ -1620,7 +1621,17 @@ namespace CodeWalker.Rendering } - + if (rendercars) + { + for (int y = 0; y < VisibleYmaps.Count; y++) + { + var ymap = VisibleYmaps[y]; + if (ymap.CarGenerators != null) + { + RenderYmapCarGenerators(ymap); + } + } + } if (rendergrass) { for (int y = 0; y < VisibleYmaps.Count; y++) @@ -1956,6 +1967,10 @@ namespace CodeWalker.Rendering } } + if (rendercars && ymap.CarGenerators != null) + { + RenderYmapCarGenerators(ymap); + } if (rendergrass && (ymap.GrassInstanceBatches != null)) { RenderYmapGrass(ymap); @@ -2147,6 +2162,34 @@ namespace CodeWalker.Rendering shaders.Enqueue(lights); } + private void RenderYmapCarGenerators(YmapFile ymap) + { + + if (ymap.CarGenerators == null) return; + + var maxdist = 200 * renderworldDetailDistMult; + var maxdist2 = maxdist * maxdist; + + for (int i = 0; i < ymap.CarGenerators.Length; i++) + { + var cg = ymap.CarGenerators[i]; + + var bscent = cg.Position - camera.Position; + float bsrad = cg._CCarGen.perpendicularLength; + if (bscent.LengthSquared() > maxdist2) continue; //don't render distant cars.. + if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref bscent, bsrad)) + { + continue; //frustum cull cars... + } + + + Quaternion cgtrn = Quaternion.RotationAxis(Vector3.UnitZ, (float)Math.PI * -0.5f); //car fragments currently need to be rotated 90 deg right... + Quaternion cgori = Quaternion.Multiply(cg.Orientation, cgtrn); + + RenderCar(cg.Position, cgori, cg._CCarGen.carModel, cg._CCarGen.popGroup); + } + + } diff --git a/WorldForm.Designer.cs b/WorldForm.Designer.cs index f02fe27..38132cf 100644 --- a/WorldForm.Designer.cs +++ b/WorldForm.Designer.cs @@ -254,6 +254,7 @@ namespace CodeWalker this.ToolbarSelectMloInstanceButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarSelectScenarioButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarSelectAudioButton = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarSelectOcclusionButton = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.ToolbarMoveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarRotateButton = new System.Windows.Forms.ToolStripButton(); @@ -285,7 +286,7 @@ namespace CodeWalker this.ToolbarCameraMapViewButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarCameraOrthographicButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarPanel = new System.Windows.Forms.Panel(); - this.ToolbarSelectOcclusionButton = new System.Windows.Forms.ToolStripMenuItem(); + this.CarGeneratorsCheckBox = new System.Windows.Forms.CheckBox(); this.StatusStrip.SuspendLayout(); this.ToolsPanel.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); @@ -1300,6 +1301,7 @@ namespace CodeWalker // // tabPage8 // + this.tabPage8.Controls.Add(this.CarGeneratorsCheckBox); this.tabPage8.Controls.Add(this.RenderEntitiesCheckBox); this.tabPage8.Controls.Add(this.AdvancedSettingsButton); this.tabPage8.Controls.Add(this.ControlSettingsButton); @@ -1338,10 +1340,10 @@ namespace CodeWalker this.RenderEntitiesCheckBox.AutoSize = true; this.RenderEntitiesCheckBox.Checked = true; this.RenderEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.RenderEntitiesCheckBox.Location = new System.Drawing.Point(10, 32); + this.RenderEntitiesCheckBox.Location = new System.Drawing.Point(10, 30); this.RenderEntitiesCheckBox.Name = "RenderEntitiesCheckBox"; this.RenderEntitiesCheckBox.Size = new System.Drawing.Size(89, 17); - this.RenderEntitiesCheckBox.TabIndex = 67; + this.RenderEntitiesCheckBox.TabIndex = 29; this.RenderEntitiesCheckBox.Text = "Show entities"; this.RenderEntitiesCheckBox.UseVisualStyleBackColor = true; this.RenderEntitiesCheckBox.CheckedChanged += new System.EventHandler(this.RenderEntitiesCheckBox_CheckedChanged); @@ -1351,7 +1353,7 @@ namespace CodeWalker this.AdvancedSettingsButton.Location = new System.Drawing.Point(101, 456); this.AdvancedSettingsButton.Name = "AdvancedSettingsButton"; this.AdvancedSettingsButton.Size = new System.Drawing.Size(93, 23); - this.AdvancedSettingsButton.TabIndex = 61; + this.AdvancedSettingsButton.TabIndex = 46; this.AdvancedSettingsButton.Text = "Advanced..."; this.AdvancedSettingsButton.UseVisualStyleBackColor = true; this.AdvancedSettingsButton.Click += new System.EventHandler(this.AdvancedSettingsButton_Click); @@ -1361,7 +1363,7 @@ namespace CodeWalker this.ControlSettingsButton.Location = new System.Drawing.Point(2, 456); this.ControlSettingsButton.Name = "ControlSettingsButton"; this.ControlSettingsButton.Size = new System.Drawing.Size(93, 23); - this.ControlSettingsButton.TabIndex = 60; + this.ControlSettingsButton.TabIndex = 45; this.ControlSettingsButton.Text = "Controls..."; this.ControlSettingsButton.UseVisualStyleBackColor = true; this.ControlSettingsButton.Click += new System.EventHandler(this.ControlSettingsButton_Click); @@ -1396,7 +1398,7 @@ namespace CodeWalker this.MapViewDetailTrackBar.Minimum = 2; this.MapViewDetailTrackBar.Name = "MapViewDetailTrackBar"; this.MapViewDetailTrackBar.Size = new System.Drawing.Size(188, 45); - this.MapViewDetailTrackBar.TabIndex = 58; + this.MapViewDetailTrackBar.TabIndex = 44; this.MapViewDetailTrackBar.TickFrequency = 2; this.MapViewDetailTrackBar.Value = 10; this.MapViewDetailTrackBar.Scroll += new System.EventHandler(this.MapViewDetailTrackBar_Scroll); @@ -1412,7 +1414,7 @@ namespace CodeWalker this.CameraModeComboBox.Location = new System.Drawing.Point(82, 305); this.CameraModeComboBox.Name = "CameraModeComboBox"; this.CameraModeComboBox.Size = new System.Drawing.Size(112, 21); - this.CameraModeComboBox.TabIndex = 56; + this.CameraModeComboBox.TabIndex = 42; this.CameraModeComboBox.SelectedIndexChanged += new System.EventHandler(this.CameraModeComboBox_SelectedIndexChanged); this.CameraModeComboBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.CameraModeComboBox_KeyPress); // @@ -1430,10 +1432,10 @@ namespace CodeWalker this.WaterQuadsCheckBox.AutoSize = true; this.WaterQuadsCheckBox.Checked = true; this.WaterQuadsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.WaterQuadsCheckBox.Location = new System.Drawing.Point(10, 129); + this.WaterQuadsCheckBox.Location = new System.Drawing.Point(10, 135); this.WaterQuadsCheckBox.Name = "WaterQuadsCheckBox"; this.WaterQuadsCheckBox.Size = new System.Drawing.Size(114, 17); - this.WaterQuadsCheckBox.TabIndex = 39; + this.WaterQuadsCheckBox.TabIndex = 35; this.WaterQuadsCheckBox.Text = "Show water quads"; this.WaterQuadsCheckBox.UseVisualStyleBackColor = true; this.WaterQuadsCheckBox.CheckedChanged += new System.EventHandler(this.WaterQuadsCheckBox_CheckedChanged); @@ -1459,10 +1461,10 @@ namespace CodeWalker // TimedEntitiesAlwaysOnCheckBox // this.TimedEntitiesAlwaysOnCheckBox.AutoSize = true; - this.TimedEntitiesAlwaysOnCheckBox.Location = new System.Drawing.Point(131, 83); + this.TimedEntitiesAlwaysOnCheckBox.Location = new System.Drawing.Point(131, 93); this.TimedEntitiesAlwaysOnCheckBox.Name = "TimedEntitiesAlwaysOnCheckBox"; this.TimedEntitiesAlwaysOnCheckBox.Size = new System.Drawing.Size(58, 17); - this.TimedEntitiesAlwaysOnCheckBox.TabIndex = 37; + this.TimedEntitiesAlwaysOnCheckBox.TabIndex = 33; this.TimedEntitiesAlwaysOnCheckBox.Text = "always"; this.TimedEntitiesAlwaysOnCheckBox.UseVisualStyleBackColor = true; this.TimedEntitiesAlwaysOnCheckBox.CheckedChanged += new System.EventHandler(this.TimedEntitiesAlwaysOnCheckBox_CheckedChanged); @@ -1472,10 +1474,10 @@ namespace CodeWalker this.GrassCheckBox.AutoSize = true; this.GrassCheckBox.Checked = true; this.GrassCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.GrassCheckBox.Location = new System.Drawing.Point(10, 57); + this.GrassCheckBox.Location = new System.Drawing.Point(10, 51); this.GrassCheckBox.Name = "GrassCheckBox"; this.GrassCheckBox.Size = new System.Drawing.Size(81, 17); - this.GrassCheckBox.TabIndex = 35; + this.GrassCheckBox.TabIndex = 30; this.GrassCheckBox.Text = "Show grass"; this.GrassCheckBox.UseVisualStyleBackColor = true; this.GrassCheckBox.CheckedChanged += new System.EventHandler(this.GrassCheckBox_CheckedChanged); @@ -1485,10 +1487,10 @@ namespace CodeWalker this.InteriorsCheckBox.AutoSize = true; this.InteriorsCheckBox.Checked = true; this.InteriorsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.InteriorsCheckBox.Location = new System.Drawing.Point(10, 106); + this.InteriorsCheckBox.Location = new System.Drawing.Point(10, 114); this.InteriorsCheckBox.Name = "InteriorsCheckBox"; this.InteriorsCheckBox.Size = new System.Drawing.Size(92, 17); - this.InteriorsCheckBox.TabIndex = 38; + this.InteriorsCheckBox.TabIndex = 34; this.InteriorsCheckBox.Text = "Show interiors"; this.InteriorsCheckBox.UseVisualStyleBackColor = true; this.InteriorsCheckBox.CheckedChanged += new System.EventHandler(this.InteriorsCheckBox_CheckedChanged); @@ -1498,10 +1500,10 @@ namespace CodeWalker this.CollisionMeshLayerDrawableCheckBox.AutoSize = true; this.CollisionMeshLayerDrawableCheckBox.Checked = true; this.CollisionMeshLayerDrawableCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayerDrawableCheckBox.Location = new System.Drawing.Point(118, 247); + this.CollisionMeshLayerDrawableCheckBox.Location = new System.Drawing.Point(118, 262); this.CollisionMeshLayerDrawableCheckBox.Name = "CollisionMeshLayerDrawableCheckBox"; this.CollisionMeshLayerDrawableCheckBox.Size = new System.Drawing.Size(71, 17); - this.CollisionMeshLayerDrawableCheckBox.TabIndex = 52; + this.CollisionMeshLayerDrawableCheckBox.TabIndex = 41; this.CollisionMeshLayerDrawableCheckBox.Text = "Drawable"; this.CollisionMeshLayerDrawableCheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayerDrawableCheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayerDrawableCheckBox_CheckedChanged); @@ -1511,10 +1513,10 @@ namespace CodeWalker this.CollisionMeshLayer2CheckBox.AutoSize = true; this.CollisionMeshLayer2CheckBox.Checked = true; this.CollisionMeshLayer2CheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayer2CheckBox.Location = new System.Drawing.Point(82, 247); + this.CollisionMeshLayer2CheckBox.Location = new System.Drawing.Point(82, 262); this.CollisionMeshLayer2CheckBox.Name = "CollisionMeshLayer2CheckBox"; this.CollisionMeshLayer2CheckBox.Size = new System.Drawing.Size(32, 17); - this.CollisionMeshLayer2CheckBox.TabIndex = 51; + this.CollisionMeshLayer2CheckBox.TabIndex = 40; this.CollisionMeshLayer2CheckBox.Text = "2"; this.CollisionMeshLayer2CheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayer2CheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayer2CheckBox_CheckedChanged); @@ -1524,10 +1526,10 @@ namespace CodeWalker this.CollisionMeshLayer1CheckBox.AutoSize = true; this.CollisionMeshLayer1CheckBox.Checked = true; this.CollisionMeshLayer1CheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayer1CheckBox.Location = new System.Drawing.Point(46, 247); + this.CollisionMeshLayer1CheckBox.Location = new System.Drawing.Point(46, 262); this.CollisionMeshLayer1CheckBox.Name = "CollisionMeshLayer1CheckBox"; this.CollisionMeshLayer1CheckBox.Size = new System.Drawing.Size(32, 17); - this.CollisionMeshLayer1CheckBox.TabIndex = 50; + this.CollisionMeshLayer1CheckBox.TabIndex = 39; this.CollisionMeshLayer1CheckBox.Text = "1"; this.CollisionMeshLayer1CheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayer1CheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayer1CheckBox_CheckedChanged); @@ -1535,7 +1537,7 @@ namespace CodeWalker // label13 // this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(4, 229); + this.label13.Location = new System.Drawing.Point(4, 244); this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(106, 13); this.label13.TabIndex = 54; @@ -1546,10 +1548,10 @@ namespace CodeWalker this.CollisionMeshLayer0CheckBox.AutoSize = true; this.CollisionMeshLayer0CheckBox.Checked = true; this.CollisionMeshLayer0CheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayer0CheckBox.Location = new System.Drawing.Point(10, 247); + this.CollisionMeshLayer0CheckBox.Location = new System.Drawing.Point(10, 262); this.CollisionMeshLayer0CheckBox.Name = "CollisionMeshLayer0CheckBox"; this.CollisionMeshLayer0CheckBox.Size = new System.Drawing.Size(32, 17); - this.CollisionMeshLayer0CheckBox.TabIndex = 49; + this.CollisionMeshLayer0CheckBox.TabIndex = 38; this.CollisionMeshLayer0CheckBox.Text = "0"; this.CollisionMeshLayer0CheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayer0CheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayer0CheckBox_CheckedChanged); @@ -1557,7 +1559,7 @@ namespace CodeWalker // label12 // this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(4, 178); + this.label12.Location = new System.Drawing.Point(4, 193); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(129, 13); this.label12.TabIndex = 51; @@ -1569,22 +1571,22 @@ namespace CodeWalker | System.Windows.Forms.AnchorStyles.Right))); this.CollisionMeshRangeTrackBar.BackColor = System.Drawing.SystemColors.ControlLightLight; this.CollisionMeshRangeTrackBar.LargeChange = 1; - this.CollisionMeshRangeTrackBar.Location = new System.Drawing.Point(6, 194); + this.CollisionMeshRangeTrackBar.Location = new System.Drawing.Point(6, 209); this.CollisionMeshRangeTrackBar.Maximum = 15; this.CollisionMeshRangeTrackBar.Minimum = 1; this.CollisionMeshRangeTrackBar.Name = "CollisionMeshRangeTrackBar"; this.CollisionMeshRangeTrackBar.Size = new System.Drawing.Size(188, 45); - this.CollisionMeshRangeTrackBar.TabIndex = 48; + this.CollisionMeshRangeTrackBar.TabIndex = 37; this.CollisionMeshRangeTrackBar.Value = 6; this.CollisionMeshRangeTrackBar.Scroll += new System.EventHandler(this.CollisionMeshRangeTrackBar_Scroll); // // CollisionMeshesCheckBox // this.CollisionMeshesCheckBox.AutoSize = true; - this.CollisionMeshesCheckBox.Location = new System.Drawing.Point(10, 156); + this.CollisionMeshesCheckBox.Location = new System.Drawing.Point(10, 171); this.CollisionMeshesCheckBox.Name = "CollisionMeshesCheckBox"; this.CollisionMeshesCheckBox.Size = new System.Drawing.Size(132, 17); - this.CollisionMeshesCheckBox.TabIndex = 47; + this.CollisionMeshesCheckBox.TabIndex = 36; this.CollisionMeshesCheckBox.Text = "Show collision meshes"; this.CollisionMeshesCheckBox.UseVisualStyleBackColor = true; this.CollisionMeshesCheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshesCheckBox_CheckedChanged); @@ -1605,10 +1607,10 @@ namespace CodeWalker this.TimedEntitiesCheckBox.AutoSize = true; this.TimedEntitiesCheckBox.Checked = true; this.TimedEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.TimedEntitiesCheckBox.Location = new System.Drawing.Point(10, 83); + this.TimedEntitiesCheckBox.Location = new System.Drawing.Point(10, 93); this.TimedEntitiesCheckBox.Name = "TimedEntitiesCheckBox"; this.TimedEntitiesCheckBox.Size = new System.Drawing.Size(117, 17); - this.TimedEntitiesCheckBox.TabIndex = 36; + this.TimedEntitiesCheckBox.TabIndex = 32; this.TimedEntitiesCheckBox.Text = "Show timed entities"; this.TimedEntitiesCheckBox.UseVisualStyleBackColor = true; this.TimedEntitiesCheckBox.CheckedChanged += new System.EventHandler(this.TimedEntitiesCheckBox_CheckedChanged); @@ -1624,7 +1626,7 @@ namespace CodeWalker this.FieldOfViewTrackBar.Minimum = 10; this.FieldOfViewTrackBar.Name = "FieldOfViewTrackBar"; this.FieldOfViewTrackBar.Size = new System.Drawing.Size(188, 45); - this.FieldOfViewTrackBar.TabIndex = 57; + this.FieldOfViewTrackBar.TabIndex = 43; this.FieldOfViewTrackBar.TickFrequency = 10; this.FieldOfViewTrackBar.Value = 100; this.FieldOfViewTrackBar.Scroll += new System.EventHandler(this.FieldOfViewTrackBar_Scroll); @@ -2696,7 +2698,7 @@ namespace CodeWalker this.ToolbarCameraModeButton}); this.Toolbar.Location = new System.Drawing.Point(1, 0); this.Toolbar.Name = "Toolbar"; - this.Toolbar.Size = new System.Drawing.Size(585, 25); + this.Toolbar.Size = new System.Drawing.Size(554, 25); this.Toolbar.TabIndex = 6; this.Toolbar.Text = "toolStrip1"; // @@ -2970,6 +2972,13 @@ namespace CodeWalker this.ToolbarSelectAudioButton.Text = "Audio"; this.ToolbarSelectAudioButton.Click += new System.EventHandler(this.ToolbarSelectAudioButton_Click); // + // ToolbarSelectOcclusionButton + // + this.ToolbarSelectOcclusionButton.Name = "ToolbarSelectOcclusionButton"; + this.ToolbarSelectOcclusionButton.Size = new System.Drawing.Size(181, 22); + this.ToolbarSelectOcclusionButton.Text = "Occlusion"; + this.ToolbarSelectOcclusionButton.Click += new System.EventHandler(this.ToolbarSelectOcclusionButton_Click); + // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; @@ -3261,12 +3270,16 @@ namespace CodeWalker this.ToolbarPanel.TabIndex = 7; this.ToolbarPanel.Visible = false; // - // ToolbarSelectOcclusionButton + // CarGeneratorsCheckBox // - this.ToolbarSelectOcclusionButton.Name = "ToolbarSelectOcclusionButton"; - this.ToolbarSelectOcclusionButton.Size = new System.Drawing.Size(181, 22); - this.ToolbarSelectOcclusionButton.Text = "Occlusion"; - this.ToolbarSelectOcclusionButton.Click += new System.EventHandler(this.ToolbarSelectOcclusionButton_Click); + this.CarGeneratorsCheckBox.AutoSize = true; + this.CarGeneratorsCheckBox.Location = new System.Drawing.Point(10, 72); + this.CarGeneratorsCheckBox.Name = "CarGeneratorsCheckBox"; + this.CarGeneratorsCheckBox.Size = new System.Drawing.Size(124, 17); + this.CarGeneratorsCheckBox.TabIndex = 31; + this.CarGeneratorsCheckBox.Text = "Show car generators"; + this.CarGeneratorsCheckBox.UseVisualStyleBackColor = true; + this.CarGeneratorsCheckBox.CheckedChanged += new System.EventHandler(this.CarGeneratorsCheckBox_CheckedChanged); // // WorldForm // @@ -3610,5 +3623,6 @@ namespace CodeWalker private System.Windows.Forms.Label label26; private System.Windows.Forms.CheckBox RenderEntitiesCheckBox; private System.Windows.Forms.ToolStripMenuItem ToolbarSelectOcclusionButton; + private System.Windows.Forms.CheckBox CarGeneratorsCheckBox; } } \ No newline at end of file diff --git a/WorldForm.cs b/WorldForm.cs index 386f236..f0be335 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -6592,6 +6592,11 @@ namespace CodeWalker Renderer.rendergrass = GrassCheckBox.Checked; } + private void CarGeneratorsCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.rendercars = CarGeneratorsCheckBox.Checked; + } + private void TimedEntitiesCheckBox_CheckedChanged(object sender, EventArgs e) { Renderer.rendertimedents = TimedEntitiesCheckBox.Checked; diff --git a/WorldForm.resx b/WorldForm.resx index fdff026..8689d72 100644 --- a/WorldForm.resx +++ b/WorldForm.resx @@ -248,6 +248,25 @@ ufo YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2 CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAHRJREFUOE/tk0EKgCAQRedIncGrGZ602lowuFW/kM1ElLYLEh668D1dKO2DmYcQ + gs/EHpTsnIvGmGZKQMrWjnH12y3ztJR9NfBGxiwD6lpPQEYMaxU4n3aF3PcHPh/AY8Ljy67vDkgZ36AG + WlEyBgKdHDIRJSPcKxCRg0UPAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAThJREFUOE+dk01ugzAQhTlBj+MDIJC4A1yEa7DMnlWaSiAu0ZI7BNi0XaRpF7Bg + 4/pzbMsQ0qod6SX2zHvPP4yDdUzTJBR2CieF2YAxOWFot6GKDwrlMAyyKAqZZZkMw1AjTVOdowYHrpFd + w4if67p2os/L1wI2DwfuwkRNSitu2+NdA1szJqUVC7ZGYb9/dOQtA/6bptFjcxyBwY7zkfwL0KDF4ESC + 7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1 + L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI + WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== @@ -257,6 +276,34 @@ ufo ZI2JiU7VVIVlp7OL+1mllIr7cb8Ie++PQwQYITnnM24NWxoBgsQYm/l+gk699bMsRA4h1JTSPsg0Xert em/mGwh3vW1Z7MvIABSWqXG3+iZHAEw1m4wD49oVANgVOL/VeSgeDAiX1mpWeKy9BIQiI+OxWQF77tG5 2Fc729BmeElf/3lNhORe+oecewDObEqX49RqCgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr + y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v + KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc + 9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/ + p8gAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu + IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl + 0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/ + Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ + EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC + 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ + uQAAAABJRU5ErkJggg== @@ -353,53 +400,6 @@ ufo UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2 5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAHRJREFUOE/tk0EKgCAQRedIncGrGZ602lowuFW/kM1ElLYLEh668D1dKO2DmYcQ - gs/EHpTsnIvGmGZKQMrWjnH12y3ztJR9NfBGxiwD6lpPQEYMaxU4n3aF3PcHPh/AY8Ljy67vDkgZ36AG - WlEyBgKdHDIRJSPcKxCRg0UPAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAThJREFUOE+dk01ugzAQhTlBj+MDIJC4A1yEa7DMnlWaSiAu0ZI7BNi0XaRpF7Bg - 4/pzbMsQ0qod6SX2zHvPP4yDdUzTJBR2CieF2YAxOWFot6GKDwrlMAyyKAqZZZkMw1AjTVOdowYHrpFd - w4if67p2os/L1wI2DwfuwkRNSitu2+NdA1szJqUVC7ZGYb9/dOQtA/6bptFjcxyBwY7zkfwL0KDF4ESC - 7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1 - L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI - WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr - y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v - KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc - 9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/ - p8gAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu - IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl - 0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/ - Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ - EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC - 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ - uQAAAABJRU5ErkJggg==