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], 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; var textures = new List <string>(); foreach (var material in SceneManager.Current.Materials) { string fileName = txtPath.Text + "\\" + material.Texture.Name; if (!textures.Contains(material.Texture.Name)) { if (!File.Exists(fileName + ".tdx")) { var tx = new TDXExporter(); tx.ExportSettings.AddSetting("Format", ToxicRagers.Helpers.D3DFormat.DXT5); tx.Export(material.Texture, txtPath.Text); } //if (!File.Exists(fileName + ".img")) //{ // var tx = new IMGExporter(); // tx.Export(material.Texture, txtPath.Text); //} 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 (var material in SceneManager.Current.Materials) { string fileName = Path.Combine(txtPath.Text, material.Name + ".mt2"); if (!File.Exists(fileName)) { var simple = new ToxicRagers.CarmageddonReincarnation.Formats.Materials.simple_base(); simple.DiffuseColour = material.Texture.Name; simple.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(string.Format(@"txt[""fe_environment_{0}""] = ""{1}""", txtLevel.Text.ToLower(), txtPrettyLevelName.Text)); w.WriteLine(string.Format("name = txt.fe_environment_{0}", 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 wpup = File.CreateText(Path.Combine(txtPath.Text, "powerups.lol"))) { using (StreamWriter wacc = File.CreateText(Path.Combine(txtPath.Text, "level.lol"))) { wpup.WriteLine("module((...), level_powerup_setup)"); wpup.WriteLine("accessories = {"); wacc.WriteLine("module((...), level_accessory_setup)"); wacc.WriteLine("accessories = {"); for (int i = 0; i < SceneManager.Current.Entities.Count; i++) { var entity = SceneManager.Current.Entities[i]; var w = (entity.EntityType == EntityType.Accessory ? wacc : wpup); w.WriteLine("\t" + (entity.UniqueIdentifier != null ? entity.UniqueIdentifier : "entity" + i.ToString("0000")) + " = {"); w.WriteLine("\t\ttype = \"" + entity.Name + "\","); if (entity.EntityType == EntityType.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"); w.WriteLine(" view:setBigShadowMapAutoFitEnabled(false)"); w.WriteLine(" view:setBigShadowMapResolution(2048, 2048)"); w.WriteLine(" view:setUseBigShadowMapBeyondShadowEnd(true)"); w.WriteLine("end"); w.WriteLine("view:setVehicleAmbientShadowStrength(0.6, 0.6, 0.6)"); w.WriteLine("view:setDynamicCubeMapClippingPlanes(0.1, 60)"); w.WriteLine("view:setClippingPlanes(0.3, 1300)"); w.WriteLine("view:setAmbient(100, 70, 50)"); w.WriteLine("view:setSphericalHarmonicsScale(1)"); w.WriteLine("view:setFogEnabled(true)"); w.WriteLine("view:setFogColour(240, 240, 300)"); w.WriteLine("view:setFogStart(0)"); w.WriteLine("view:setFogEnd(500)"); w.WriteLine("view:setFogAlphaStart(0)"); w.WriteLine("view:setFogAlphaEnd(200)"); w.WriteLine("view:setUnderwaterAmbient(50, 60, 60)"); w.WriteLine("view:setUnderwaterFogEnabled(true)"); w.WriteLine("view:setUnderwaterFogColour(80, 90, 120)"); w.WriteLine("view:setUnderwaterFogStart(0)"); w.WriteLine("view:setUnderwaterFogEnd(16)"); w.WriteLine("view:setUnderwaterFogAlphaStart(0)"); w.WriteLine("view:setUnderwaterFogAlphaEnd(200)"); w.WriteLine("view:setAOSampleOffset(1)"); w.WriteLine("view:setAOBlur(true)"); w.WriteLine("view:setAOBilateralSensitivity(100)"); w.WriteLine("view:setAOBias(0.5)"); w.WriteLine("view:setAOPowerExponent(2)"); w.WriteLine("view:setShadowBias(1E-06)"); w.WriteLine("view:setShadowSlopeBias(2)"); w.WriteLine("view:setShadowMapCount(4)"); w.WriteLine("view:setShadowMapPoolStats(\"1:1024:1024:8\")"); w.WriteLine("view:setShadowMapPoolAllocateBestAvailable(false)"); w.WriteLine("view:setShadowSplitResolution(1024, 1024)"); w.WriteLine("view:setShadowSplitManualUse(false)"); w.WriteLine("view:setShadowSplitDistribution(0.8)"); w.WriteLine("view:setShadowEnd(200)"); w.WriteLine("track:setSplashColour(\"\", 255, 255, 255, 102)"); } if (!File.Exists(Path.Combine(txtPath.Text, "sun.light"))) { var sun = new ToxicRagers.CarmageddonReincarnation.Formats.LIGHT(); sun.Type = LIGHT.LightType.Directional; sun.Range = 100; sun.Inner = 22.5f; sun.Outer = 45; sun.R = 234 / 255.0f; sun.G = 202 / 255.0f; sun.B = 149 / 255.0f; sun.Intensity = 1.0f; sun.Flags = LIGHT.LightFlags.CastShadow; sun.SplitCount = 4; sun.SplitDistribution = 0.8f; sun.ShadowResolutionX = 1024; sun.ShadowResolutionY = 1024; sun.ShadowIntensity = 1; sun.GoboScaleX = 1; sun.GoboScaleY = 1; sun.ShadowBias = 0.00001f; sun.LightNearClip = 1; sun.ShadowDistance = 160; sun.UseEdgeColour = true; sun.EdgeColourR = 121; sun.EdgeColourG = 121; sun.EdgeColourB = 121; sun.Save(Path.Combine(txtPath.Text, "sun.light")); } if (!File.Exists(Path.Combine(txtPath.Text, "sun.cnt"))) { var cnt = new ToxicRagers.Stainless.Formats.CNT(); cnt.Name = "sun"; cnt.Transform = ToxicRagers.Helpers.Matrix3D.CreateRotationZ(-119.520f) * ToxicRagers.Helpers.Matrix3D.CreateRotationY(46.042f) * ToxicRagers.Helpers.Matrix3D.CreateRotationX(112.176f); cnt.Section = ToxicRagers.Stainless.Formats.CNT.NodeType.LITg; cnt.EmbeddedLight = false; cnt.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"))) { var postFX = new ToxicRagers.CarmageddonReincarnation.Formats.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; var minge = new ToxicRagers.CarmageddonReincarnation.Formats.MINGE(); minge.Name = txtPrettyLevelName.Text; minge.Author = Properties.Settings.Default.PersonalAuthor; minge.Website = Properties.Settings.Default.PersonalWebsite; minge.Type = MINGE.ModType.Level; minge.Save(Path.Combine(txtPath.Text, txtLevel.Text + ".minge")); var zad = ToxicRagers.Stainless.Formats.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(txtPath.Text + "level.flump"); timer.Stop(); SceneManager.Current.OnProgress -= scene_OnProgress; btnClose.Visible = true; Application.DoEvents(); SceneManager.Current.UpdateProgress(string.Format("Level '{0}' saved successfully!", level)); }
public static void Save(BinaryWriter bw, LIGHT light) { bw.Write((int)light.type); bw.Write(light.r); bw.Write(light.g); bw.Write(light.b); bw.Write(light.intensity); bw.Write(light.range); bw.Write(light.inner); bw.Write(light.outer); bw.Write(light.nearClip); bw.Write((int)light.flags); bw.Write(light.shadResX); bw.Write(light.shadResY); bw.Write(light.shadCoverX); bw.Write(light.shadCoverY); bw.Write(light.shadowBias); bw.Write(light.shadIntensity); bw.Write(light.splitCount); bw.Write(light.splitDistribution); bw.Write(light.shadDistMin); bw.Write(light.shadDistMax); bw.Write((light.bUseEdgeCol ? 1 : 0)); bw.Write(light.edgeColR); bw.Write(light.edgeColG); bw.Write(light.edgeColB); bw.Write(light.edgeColA); bw.Write(light.goboScaleX); bw.Write(light.goboScaleY); bw.Write(light.goboOffsetX); bw.Write(light.goboOffsetY); if (light.goboTexture != null) { int nameLength = light.goboTexture.Length; int padding = (((nameLength / 4) + (nameLength % 4 > 0 ? 1 : 0)) * 4) - nameLength; bw.Write(nameLength); bw.WriteString(light.goboTexture); bw.Write(new byte[padding]); } else { bw.Write(0); } }
private void resetWidget() { light = (bone != null && bone.Type == BoneType.Light && bone.Attachment != null ? bone.Attachment as LIGHT : new LIGHT()); bInitialising = true; lblLightType.Text = string.Format(lblLightType.Tag.ToString(), light.Type); lblLightName.Text = light.Name; chkLightOn.Checked = true; nudRange.Value = (Decimal)light.Range; nudInner.Value = (Decimal)light.Inner; nudOuter.Value = (Decimal)light.Outer; nudRed.Value = (Decimal)(light.R * 255); nudGreen.Value = (Decimal)(light.G * 255); nudBlue.Value = (Decimal)(light.B * 255); nudIntensity.Value = (Decimal)light.Intensity; updateLightColour(); chkCastShadows.Checked = light.Flags.HasFlag(LIGHT.LightFlags.CastShadow); chkParallelSplit.Checked = false; chkParallelSplit.Enabled = false; chkVisualiseSplits.Checked = false; chkVisualiseSplits.Enabled = false; chkUsePool.Checked = light.Flags.HasFlag(LIGHT.LightFlags.UsePool); nudSplitCount.Value = light.SplitCount; nudSplitDistribn.Value = (Decimal)light.SplitDistribution; nudShadCoverX.Value = (Decimal)light.ShadowCoverX; nudShadCoverY.Value = (Decimal)light.ShadowCoverY; nudShadResX.Value = light.ShadowResolutionX; nudShadResY.Value = light.ShadowResolutionY; nudShadIntensity.Value = (Decimal)light.ShadowIntensity; nudGoboScaleX.Value = (Decimal)light.GoboScaleX; nudGoboScaleY.Value = (Decimal)light.GoboScaleY; nudGoboOffsetX.Value = (Decimal)light.GoboOffsetX; nudGoboOffsetY.Value = (Decimal)light.GoboOffsetY; nudShadowBias.Value = (Decimal)light.ShadowBias; nudLightNearClip.Value = (Decimal)light.LightNearClip; nudShadowDist.Value = (Decimal)light.ShadowDistance; chkUseGobo.Checked = light.Flags.HasFlag(LIGHT.LightFlags.UsesGobo); lblGobo.Text = light.GOBO; chkEdgeColour.Checked = light.UseEdgeColour; nudEdgeRed.Value = light.EdgeColourR; nudEdgeGreen.Value = light.EdgeColourG; nudEdgeBlue.Value = light.EdgeColourB; updateEdgeColour(); toggleShadowUI(); toggleEdgeColourUI(); setButtonText(); bInitialising = false; }
public static LIGHT Load(BinaryReader br) { LIGHT light = new LIGHT(); light.type = (LightType)br.ReadUInt32(); light.r = br.ReadSingle(); light.g = br.ReadSingle(); light.b = br.ReadSingle(); light.intensity = br.ReadSingle(); light.range = br.ReadSingle(); light.inner = br.ReadSingle(); light.outer = br.ReadSingle(); light.nearClip = br.ReadSingle(); light.flags = (LightFlags)br.ReadUInt32(); light.shadResX = (int)br.ReadUInt32(); light.shadResY = (int)br.ReadUInt32(); light.shadCoverX = br.ReadSingle(); light.shadCoverY = br.ReadSingle(); light.shadowBias = br.ReadSingle(); light.shadIntensity = br.ReadSingle(); light.splitCount = (int)br.ReadUInt32(); light.splitDistribution = br.ReadSingle(); light.shadDistMin = br.ReadSingle(); light.shadDistMax = br.ReadSingle(); light.bUseEdgeCol = (br.ReadUInt32() == 1); light.edgeColR = br.ReadByte(); light.edgeColG = br.ReadByte(); light.edgeColB = br.ReadByte(); light.edgeColA = br.ReadByte(); light.goboScaleX = br.ReadSingle(); light.goboScaleY = br.ReadSingle(); light.goboOffsetX = br.ReadSingle(); light.goboOffsetY = br.ReadSingle(); int nameLength = (int)br.ReadUInt32(); int padding = (((nameLength / 4) + (nameLength % 4 > 0 ? 1 : 0)) * 4) - nameLength; light.goboTexture = br.ReadString(nameLength); br.ReadBytes(padding); return light; }
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], 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; var textures = new List<string>(); foreach (var material in SceneManager.Current.Materials) { string fileName = txtPath.Text + "\\" + material.Texture.Name; if (!textures.Contains(material.Texture.Name)) { if (!File.Exists(fileName + ".tdx")) { var tx = new TDXExporter(); tx.ExportSettings.AddSetting("Format", ToxicRagers.Helpers.D3DFormat.DXT5); tx.Export(material.Texture, txtPath.Text); } //if (!File.Exists(fileName + ".img")) //{ // var tx = new IMGExporter(); // tx.Export(material.Texture, txtPath.Text); //} 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 (var material in SceneManager.Current.Materials) { string fileName = Path.Combine(txtPath.Text, material.Name + ".mt2"); if (!File.Exists(fileName)) { var simple = new ToxicRagers.CarmageddonReincarnation.Formats.Materials.simple_base(); simple.DiffuseColour = material.Texture.Name; simple.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(string.Format(@"txt[""fe_environment_{0}""] = ""{1}""", txtLevel.Text.ToLower(), txtPrettyLevelName.Text)); w.WriteLine(string.Format("name = txt.fe_environment_{0}", 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 wpup = File.CreateText(Path.Combine(txtPath.Text, "powerups.lol"))) { using (StreamWriter wacc = File.CreateText(Path.Combine(txtPath.Text, "level.lol"))) { wpup.WriteLine("module((...), level_powerup_setup)"); wpup.WriteLine("accessories = {"); wacc.WriteLine("module((...), level_accessory_setup)"); wacc.WriteLine("accessories = {"); for (int i = 0; i < SceneManager.Current.Entities.Count; i++) { var entity = SceneManager.Current.Entities[i]; var w = (entity.EntityType == EntityType.Accessory ? wacc : wpup); w.WriteLine("\t" + (entity.UniqueIdentifier != null ? entity.UniqueIdentifier : "entity" + i.ToString("0000")) + " = {"); w.WriteLine("\t\ttype = \"" + entity.Name + "\","); if (entity.EntityType == EntityType.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"); w.WriteLine(" view:setBigShadowMapAutoFitEnabled(false)"); w.WriteLine(" view:setBigShadowMapResolution(2048, 2048)"); w.WriteLine(" view:setUseBigShadowMapBeyondShadowEnd(true)"); w.WriteLine("end"); w.WriteLine("view:setVehicleAmbientShadowStrength(0.6, 0.6, 0.6)"); w.WriteLine("view:setDynamicCubeMapClippingPlanes(0.1, 60)"); w.WriteLine("view:setClippingPlanes(0.3, 1300)"); w.WriteLine("view:setAmbient(100, 70, 50)"); w.WriteLine("view:setSphericalHarmonicsScale(1)"); w.WriteLine("view:setFogEnabled(true)"); w.WriteLine("view:setFogColour(240, 240, 300)"); w.WriteLine("view:setFogStart(0)"); w.WriteLine("view:setFogEnd(500)"); w.WriteLine("view:setFogAlphaStart(0)"); w.WriteLine("view:setFogAlphaEnd(200)"); w.WriteLine("view:setUnderwaterAmbient(50, 60, 60)"); w.WriteLine("view:setUnderwaterFogEnabled(true)"); w.WriteLine("view:setUnderwaterFogColour(80, 90, 120)"); w.WriteLine("view:setUnderwaterFogStart(0)"); w.WriteLine("view:setUnderwaterFogEnd(16)"); w.WriteLine("view:setUnderwaterFogAlphaStart(0)"); w.WriteLine("view:setUnderwaterFogAlphaEnd(200)"); w.WriteLine("view:setAOSampleOffset(1)"); w.WriteLine("view:setAOBlur(true)"); w.WriteLine("view:setAOBilateralSensitivity(100)"); w.WriteLine("view:setAOBias(0.5)"); w.WriteLine("view:setAOPowerExponent(2)"); w.WriteLine("view:setShadowBias(1E-06)"); w.WriteLine("view:setShadowSlopeBias(2)"); w.WriteLine("view:setShadowMapCount(4)"); w.WriteLine("view:setShadowMapPoolStats(\"1:1024:1024:8\")"); w.WriteLine("view:setShadowMapPoolAllocateBestAvailable(false)"); w.WriteLine("view:setShadowSplitResolution(1024, 1024)"); w.WriteLine("view:setShadowSplitManualUse(false)"); w.WriteLine("view:setShadowSplitDistribution(0.8)"); w.WriteLine("view:setShadowEnd(200)"); w.WriteLine("track:setSplashColour(\"\", 255, 255, 255, 102)"); } if (!File.Exists(Path.Combine(txtPath.Text, "sun.light"))) { var sun = new ToxicRagers.CarmageddonReincarnation.Formats.LIGHT(); sun.Type = LIGHT.LightType.Directional; sun.Range = 100; sun.Inner = 22.5f; sun.Outer = 45; sun.R = 234 / 255.0f; sun.G = 202 / 255.0f; sun.B = 149 / 255.0f; sun.Intensity = 1.0f; sun.Flags = LIGHT.LightFlags.CastShadow; sun.SplitCount = 4; sun.SplitDistribution = 0.8f; sun.ShadowResolutionX = 1024; sun.ShadowResolutionY = 1024; sun.ShadowIntensity = 1; sun.GoboScaleX = 1; sun.GoboScaleY = 1; sun.ShadowBias = 0.00001f; sun.LightNearClip = 1; sun.ShadowDistance = 160; sun.UseEdgeColour = true; sun.EdgeColourR = 121; sun.EdgeColourG = 121; sun.EdgeColourB = 121; sun.Save(Path.Combine(txtPath.Text, "sun.light")); } if (!File.Exists(Path.Combine(txtPath.Text, "sun.cnt"))) { var cnt = new ToxicRagers.Stainless.Formats.CNT(); cnt.Name = "sun"; cnt.Transform = ToxicRagers.Helpers.Matrix3D.CreateRotationZ(-119.520f) * ToxicRagers.Helpers.Matrix3D.CreateRotationY( 46.042f) * ToxicRagers.Helpers.Matrix3D.CreateRotationX( 112.176f); cnt.Section = ToxicRagers.Stainless.Formats.CNT.NodeType.LITg; cnt.EmbeddedLight = false; cnt.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"))) { var postFX = new ToxicRagers.CarmageddonReincarnation.Formats.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; var minge = new ToxicRagers.CarmageddonReincarnation.Formats.MINGE(); minge.Name = txtPrettyLevelName.Text; minge.Author = Properties.Settings.Default.PersonalAuthor; minge.Website = Properties.Settings.Default.PersonalWebsite; minge.Type = MINGE.ModType.Level; minge.Save(Path.Combine(txtPath.Text, txtLevel.Text + ".minge")); var zad = ToxicRagers.Stainless.Formats.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(txtPath.Text + "level.flump"); timer.Stop(); SceneManager.Current.OnProgress -= scene_OnProgress; btnClose.Visible = true; Application.DoEvents(); SceneManager.Current.UpdateProgress(string.Format("Level '{0}' saved successfully!", level)); }