private void btnOK_Click(object sender, EventArgs e) { SceneManager.Current.OnProgress += scene_OnProgress; btnOK.Visible = false; btnCancel.Visible = false; gbProgress.Visible = true; pbProgress.Visible = true; Application.DoEvents(); timer.Start(); if (!Directory.Exists(txtPath.Text)) { Directory.CreateDirectory(txtPath.Text); } flump.Settings["level"] = level; flump.Settings["level.pretty.name"] = txtPrettyLevelName.Text; flump.Settings["level.race.name"] = txtRaceName.Text; lblInfo = lblInfoMeshes; lblProgress = lblProgressMeshes; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 30; (new CNTExporter()).Export(SceneManager.Current.Models[0], Path.Combine(txtPath.Text, "level.cnt")); (new MDLExporter()).Export(SceneManager.Current.Models[0], txtPath.Text); lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Meshes"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoTextures; lblProgress = lblProgressTextures; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 50; List <string> textures = new List <string>(); foreach (Material material in SceneManager.Current.Materials) { string fileName = Path.Combine(txtPath.Text, "NON_VT", material.Texture.Name); if (!textures.Contains(material.Texture.Name)) { if (!File.Exists($"{fileName}.tdx")) { TDXExporter tx = new TDXExporter(); tx.ExportSettings.AddSetting("Format", ToxicRagers.Helpers.D3DFormat.DXT5); tx.Export(material.Texture, Path.Combine(txtPath.Text, "NON_VT")); } textures.Add(material.Texture.Name); } } lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Textures"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoMaterials; lblProgress = lblProgressMaterials; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 60; foreach (Material material in SceneManager.Current.Materials) { string fileName = Path.Combine(txtPath.Text, $"{material.Name}.mt2"); if (!File.Exists(fileName)) { simple_base simple = new simple_base { DiffuseColour = material.Texture.Name, Walkable = Troolean.True }; simple.Save(fileName); } } lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Materials"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoPaperwork; lblProgress = lblProgressPaperwork; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 75; using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "audio.lol"))) { w.WriteLine("audio:load(\"audio.sounds_peds_impact\")"); w.WriteLine("audio:load(\"audio.sounds_impacts\")"); w.WriteLine("audio:load(\"audio.sounds_misc\")"); w.WriteLine("audio:load(\"audio.sounds_announcer\")"); w.WriteLine("audio:load(\"audio.sounds_powerups\")"); w.WriteLine("audio:load(\"audio.sounds_vehicles\")"); } using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "environment.lol"))) { w.WriteLine("module((...), environment_config, package.seeall)"); w.WriteLine($@"txt[""fe_environment_{txtLevel.Text.ToLower()}""] = ""{txtPrettyLevelName.Text}"""); w.WriteLine($"name = txt.fe_environment_{txtLevel.Text.ToLower()}"); } using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "environment.txt"))) { w.WriteLine("[LUMP]"); w.WriteLine("environment"); } using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "level.txt"))) { w.WriteLine("[LUMP]"); w.WriteLine("level"); w.WriteLine(); w.WriteLine("[ENVIRONMENT]"); w.WriteLine(txtLevel.Text.ToLower().Replace(" ", "_")); w.WriteLine(); w.WriteLine("[RACE_NAMES]"); w.WriteLine(txtRaceName.Text); w.WriteLine(); w.WriteLine("[RACE_WRITEUP]"); w.WriteLine("Pretty sure this doesn't show up in the UI anymore"); w.WriteLine(); w.WriteLine("[RACE_IMAGES]"); w.WriteLine($"race\\{level}_01"); w.WriteLine(); w.WriteLine("[RACE_BACKGROUNDS]"); w.WriteLine($"race\\{level}_01"); w.WriteLine(); w.WriteLine("[VERSION]"); w.WriteLine("2.500000"); w.WriteLine(); w.WriteLine("[RACE_LAYERS]"); w.WriteLine("race01"); w.WriteLine(); w.WriteLine("[LUA_SCRIPTS]"); w.WriteLine("setup.lua"); w.WriteLine(); } if (SceneManager.Current.Entities.Count > 0) { using (StreamWriter wacc = File.CreateText(Path.Combine(txtPath.Text, "level.lol"))) using (StreamWriter wpup = File.CreateText(Path.Combine(txtPath.Text, "powerups.lol"))) { Dictionary <string, StreamWriter> streams = new Dictionary <string, StreamWriter> { { "StartingGrid", wacc }, { "Accessory", wacc }, { "Powerup", wpup } }; wacc.WriteLine("module((...), level_accessory_setup)"); wacc.WriteLine("accessories = {"); wpup.WriteLine("module((...), level_powerup_setup)"); wpup.WriteLine("accessories = {"); for (int i = 0; i < SceneManager.Current.Entities.Count; i++) { IEntity entity = SceneManager.Current.Entities[i]; if (!streams.ContainsKey(entity.GetType().Name)) { continue; } StreamWriter w = streams[entity.GetType().Name]; w.WriteLine($"\t{$"entity{i:0000}"} = {{"); w.WriteLine($"\t\ttype = \"{entity.Name}\","); if (entity is Core.Entities.Powerup) { w.WriteLine($"\t\tname = \"{entity.Tag}\","); } w.WriteLine("\t\tlayer = \"race01\","); w.WriteLine("\t\ttransform = {"); w.WriteLine($"\t\t\t{{{entity.Transform.M11},{entity.Transform.M21},{entity.Transform.M31}}},"); w.WriteLine($"\t\t\t{{{entity.Transform.M12},{entity.Transform.M22},{entity.Transform.M32}}},"); w.WriteLine($"\t\t\t{{{entity.Transform.M13},{entity.Transform.M23},{entity.Transform.M33}}},"); w.WriteLine($"\t\t\t{{{entity.Transform.M41},{entity.Transform.M42},{entity.Transform.M43}}},"); w.WriteLine("\t\t},"); w.WriteLine("\t\tcolour = { 255, 255, 255 }"); w.Write("\t}"); w.WriteLine((i + 1 < SceneManager.Current.Entities.Count ? "," : "")); } wacc.WriteLine("}"); wpup.WriteLine("}"); } } using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "minimap_definition.lol"))) { w.WriteLine("module((...), minimap_definition)"); w.WriteLine("bounds = {"); w.WriteLine(" min_bound = {-640, -270},"); w.WriteLine(" max_bound = {640, 450}"); w.WriteLine("}"); w.WriteLine("minimap_area = 200"); w.WriteLine("max_minimap_area = 400"); w.WriteLine("speed_for_max_minimap_area = 60"); } using (StreamWriter w = File.CreateText(Path.Combine(txtPath.Text, "setup.lol"))) { w.WriteLine("view:loadSky(\"sky\")"); w.WriteLine("view:loadLight(\"sun\")"); w.WriteLine($"view:loadPostFX(\"post_process.{txtLevel.Text.ToLower().Replace(" ", "_")}\")"); //w.WriteLine("view:loadShProbes(\"Reprocessor\")"); w.WriteLine(@" if view.setBigShadowMapAutoFitEnabled ~= nil then view:setBigShadowMapAutoFitEnabled(false) view:setBigShadowMapResolution(2048, 2048) view:setUseBigShadowMapBeyondShadowEnd(true) end view.VehicleAmbientShadowStrength = { 1, 1, 1 } view.DynamicCubeMapClippingPlanes = {0.1, 120} view.ClippingPlanes = {0.3, 700} view.Ambient = { 28, 22, 16 } view.SphericalHarmonicsScale = 0.25 view.FogEnabled = true view.FogColour = { 120, 130, 150 } view.FogStart = 0 view.FogEnd = 900 view.FogAlphaStart = 0 view.FogAlphaEnd = 0 view.UnderwaterAmbient = { 51, 102, 204 } view.UnderwaterFogEnabled = true view.UnderwaterFogColour = { 32, 96, 128 } view.UnderwaterFogStart = 0 view.UnderwaterFogEnd = 120 view.UnderwaterFogAlphaStart = 0 view.UnderwaterFogAlphaEnd = 0 view.AOSampleOffset = 0.5 view.AOBlur = true view.AOBilateralSensitivity = 8 view.AOBias = 0.01 view.AOScale = 0.5 view.AOPowerExponent = 6 view.ShadowBias = 0.0001 view.ShadowSlopeBias = 2 view.NumShadowMaps = 4 view.ShadowMapPoolStats = ""1:1024:1024:8"" view.ShadowSplitResolution = { 1024, 1024} view.ShadowSplitManualUse = false view.ShadowSplitDistribution = 0.8 view.ShadowEnd = 160 view.SunPos = { 0, 3536, -3536 } track:setSubstanceTyreParticles(""ROAD_TARMAC"", ""Effect"", ""w_kick_dusty_dirt_track"") track:setSubstanceTyreParticles(""RACE_TARMAC"", ""Effect"", ""w_kick_dusty_dirt_track"") track:setSplashColour("""", 255, 255, 255, 255) "); } if (!File.Exists(Path.Combine(txtPath.Text, "sun.light"))) { LIGHT sun = new LIGHT { Type = LIGHT.LightType.Directional, Range = 100, Inner = 22.5f, Outer = 45, R = 234 / 255.0f, G = 202 / 255.0f, B = 149 / 255.0f, Intensity = 1.0f, Flags = LIGHT.LightFlags.CastShadow | LIGHT.LightFlags.Unknown8, SplitCount = 4, SplitDistribution = 0.8f, ShadowResolutionX = 1024, ShadowResolutionY = 1024, ShadowIntensity = 1, GoboScaleX = 1, GoboScaleY = 1, ShadowBias = 0.00001f, LightNearClip = 1, ShadowDistance = 160, UseEdgeColour = true, EdgeColourR = 121, EdgeColourG = 121, EdgeColourB = 121 }; sun.Save(Path.Combine(txtPath.Text, "sun.light")); } if (!File.Exists(Path.Combine(txtPath.Text, "sun.cnt"))) { CNT cnt = new CNT { Name = "sun", Transform = ToxicRagers.Helpers.Matrix3D.CreateRotationZ(-119.520f) * ToxicRagers.Helpers.Matrix3D.CreateRotationY(46.042f) * ToxicRagers.Helpers.Matrix3D.CreateRotationX(112.176f), Section = CNT.NodeType.LITg, EmbeddedLight = false, LightName = "sun" }; cnt.Save(Path.Combine(txtPath.Text, "sun.cnt")); } if (!Directory.Exists(Path.Combine(txtPath.Text, "post_process"))) { Directory.CreateDirectory(Path.Combine(txtPath.Text, "post_process")); } if (!File.Exists(Path.Combine(txtPath.Text, "post_process", $"{txtLevel.Text.ToLower().Replace(" ", "_")}.lol"))) { PostFX postFX = new PostFX(); postFX.Save(Path.Combine(txtPath.Text, "post_process", $"{txtLevel.Text.ToLower().Replace(" ", "_")}.lol")); } lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Paperwork"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoZAD; lblProgress = lblProgressZAD; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 100; MINGE minge = new MINGE { Name = txtPrettyLevelName.Text, //Author = Properties.Settings.Default.PersonalAuthor, //Website = Properties.Settings.Default.PersonalWebsite, Type = MINGE.ModType.Level }; minge.Save(Path.Combine(txtPath.Text, $"{txtLevel.Text}.minge")); ZAD zad = ZAD.Create(Path.Combine(txtPath.Text, $"{txtLevel.Text}.zip")); zad.AddDirectory(Path.GetDirectoryName(txtPath.Text)); lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "CarMODgeddon ZIP file"; pbProgress.Value = progressMax; flump.Save(Path.Combine(txtPath.Text, "level.flump")); timer.Stop(); SceneManager.Current.OnProgress -= scene_OnProgress; btnClose.Visible = true; Application.DoEvents(); SceneManager.Current.UpdateProgress($"Level '{level}' saved successfully!"); }
private void btnOK_Click(object sender, EventArgs e) { SceneManager.Current.OnProgress += scene_OnProgress; btnOK.Visible = false; btnCancel.Visible = false; gbProgress.Visible = true; pbProgress.Visible = true; Application.DoEvents(); timer.Start(); if (!Directory.Exists(txtPath.Text)) { Directory.CreateDirectory(txtPath.Text); } flump.Settings["car"] = car; flump.Settings["pretty.name"] = txtPrettyCarName.Text; lblInfo = lblInfoMeshes; lblProgress = lblProgressMeshes; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 30; new CNTExporter().Export(SceneManager.Current.Models[0], Path.Combine(txtPath.Text, "car.cnt")); new MDLExporter().Export(SceneManager.Current.Models[0], txtPath.Text); lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Meshes"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoTextures; lblProgress = lblProgressTextures; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 50; List <string> textures = new List <string>(); foreach (Material material in SceneManager.Current.Materials) { foreach (Texture texture in material.Textures) { if (texture.FileName == null) { continue; } string fileName = Path.Combine(txtPath.Text, texture.FileName); if (!textures.Contains(fileName)) { if (!File.Exists($"{fileName}.tdx")) { TDXExporter tx = new TDXExporter(); tx.ExportSettings.AddSetting("Format", ToxicRagers.Helpers.D3DFormat.DXT5); tx.Export(texture, $"{fileName}.tdx"); } textures.Add(texture.FileName); } } } lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Textures"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoMaterials; lblProgress = lblProgressMaterials; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 60; foreach (Material material in SceneManager.Current.Materials) { string fileName = Path.Combine(txtPath.Text, $"{material.Name}.mt2"); if (material.SupportingDocuments.ContainsKey("Source")) { (material.SupportingDocuments["Source"] as MT2).Save(fileName); } else { if (!File.Exists(fileName) && material.Textures.Count > 0) { simple_base simple = new simple_base { DiffuseColour = material.Texture.Name }; simple.Save(fileName); } } } lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Materials"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoPaperwork; lblProgress = lblProgressPaperwork; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 75; if (!File.Exists(Path.Combine(txtPath.Text, "setup.lol"))) { Setup setup; if (!SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("Setup")) { setup = new Setup(SetupContext.Vehicle); setup.Settings.SetParameterForMethod("PowerMultiplier", "Value", 1.35f); setup.Settings.SetParameterForMethod("TractionFactor", "Factor", 1.2f); setup.Settings.SetParameterForMethod("FinalDrive", "Factor", 0.8f); setup.Settings.SetParameterForMethod("RearGrip", "Value", 1.68f); setup.Settings.SetParameterForMethod("FrontGrip", "Value", 1.85f); setup.Settings.SetParameterForMethod("CMPosY", "Value", 0.4f); setup.Settings.SetParameterForMethod("FrontRoll", "Value", 0.45f); setup.Settings.SetParameterForMethod("RearRoll", "Value", 0.4f); setup.Settings.SetParameterForMethod("FrontSuspGive", "Value", 0.0667f); setup.Settings.SetParameterForMethod("RearSuspGive", "Value", 0.0667f); setup.Settings.SetParameterForMethod("SteerCentreMultiplier", "Value", 2); setup.Settings.SetParameterForMethod("BrakeForce", "Value", 75); setup.Settings.SetParameterForMethod("HandBrakeStrength", "Value", 20); setup.Settings.SetParameterForMethod("DragCoefficient", "Value", 0.2f); setup.Settings.SetParameterForMethod("Mass", "Value", 1300); setup.Settings.SetParameterForMethod("TorqueCurve", "1", 160); setup.Settings.SetParameterForMethod("TorqueCurve", "2", 232); setup.Settings.SetParameterForMethod("TorqueCurve", "3", 280); setup.Settings.SetParameterForMethod("TorqueCurve", "4", 312); setup.Settings.SetParameterForMethod("TorqueCurve", "5", 280); } else { setup = SceneManager.Current.Models[0].GetSupportingDocument <Setup>("Setup"); } SceneManager.Current.Models[0].SupportingDocuments["Setup"] = setup; SetupLOLExporter sx = new SetupLOLExporter(); sx.ExportSettings.AddSetting("Context", SetupContext.Vehicle); sx.Export(SceneManager.Current.Models[0], txtPath.Text); } if (!File.Exists(Path.Combine(txtPath.Text, "Structure.xml"))) { new StructureXMLExporter().Export(SceneManager.Current.Models[0], txtPath.Text); } if (!File.Exists(Path.Combine(txtPath.Text, "SystemsDamage.xml"))) { new SystemsDamageXMLExporter().Export(SceneManager.Current.Models[0], txtPath.Text); } if (!File.Exists(Path.Combine(txtPath.Text, "vehicle_setup.cfg"))) { VehicleSetupCFGExporter cfgx = new VehicleSetupCFGExporter(); cfgx.ExportSettings.AddSetting("VehicleName", txtCarName.Text); cfgx.Export(SceneManager.Current.Models[0], txtPath.Text); } if (!File.Exists(Path.Combine(txtPath.Text, "vehicle_setup.lol"))) { new VehicleSetupLOLExporter().Export(SceneManager.Current.Models[0], txtPath.Text); } if (SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("VFXAnchors")) { SceneManager.Current.Models[0].GetSupportingDocument <VFXAnchors>("VFXAnchors").Save(txtPath.Text); } if (SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("Collision")) { new CNTExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("Collision"), Path.Combine(txtPath.Text, "collision.cnt")); new MDLExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("Collision"), txtPath.Text); } if (SceneManager.Current.Models[0].SupportingDocuments.ContainsKey("OpponentCollision")) { new CNTExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("OpponentCollision"), Path.Combine(txtPath.Text, "opponent_collision.cnt")); new MDLExporter().Export(SceneManager.Current.Models[0].GetSupportingDocument <Model>("OpponentCollision"), txtPath.Text); } lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "Paperwork"; pbProgress.Value = progressMax; Application.DoEvents(); lblInfo = lblInfoZAD; lblProgress = lblProgressZAD; lblProgress.ForeColor = Color.FromKnownColor(KnownColor.ControlText); progressMax = 100; MINGE minge = new MINGE { Name = txtPrettyCarName.Text, //Author = Properties.Settings.Default.PersonalAuthor, //Website = Properties.Settings.Default.PersonalWebsite, Type = MINGE.ModType.Vehicle }; minge.Save(Path.Combine(txtPath.Text, $"{txtCarName.Text}.minge")); ZAD zad = ZAD.Create(Path.Combine(txtPath.Text, $"{txtCarName.Text}.zip")); zad.AddDirectory(Path.GetDirectoryName(txtPath.Text)); lblProgress.Text = "✓"; lblProgress.ForeColor = Color.Green; lblInfo.Text = "CarMODgeddon ZIP file"; pbProgress.Value = progressMax; flump.Save(Path.Combine(txtPath.Text, "car.flump")); timer.Stop(); SceneManager.Current.OnProgress -= scene_OnProgress; btnClose.Visible = true; Application.DoEvents(); SceneManager.Current.UpdateProgress($"Vehicle '{car}' saved successfully!"); }