-
Posts
779 -
Joined
-
Last visited
Content Type
Profiles
Forums
Developer Articles
KSP2 Release Notes
Everything posted by Snjo
-
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
The wings have a section that defines FAR values. They are used automatically if you have FAR installed, no extra action required. -
-Make sure all faces have a material assigned. -Manually mirroring a mesh can sometimes cause an issue for KSP (By that I mean Scale * -1, not the modifier) -Make sure the normal directions are OK. -You can't have too many face on a part without Unity splitting it into separate objects, or KSP refusing to run it. (I mean many thousand faces on one single object can be a problem. Split it up yourself.) -If you've been animating, and then renaming/deleting obects, delete the animation and start over.
-
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
Sure it's not Jeb Bush? -
Some times Unity will confuse itself, thinking that the geometry is invalid. Try deleting the hierarchy and recreating it, adding the parts in again from the assets pane.
-
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
Bitesized Farm Supplies presents: (I love Dr. Strangelove) -
I reckon a lot of this info was lost during the forum Kraken event. I know I had written some stuff that I wish I had backed up regarding cockpits and landing gear creation. I'm sure whatever documentation is out there, if it ins't new, is out of date, and should be redone. I might volunteer to do some of it if needed. In the mean time though, my workflow is like this. Create a new Unity 4 project to get the folders set up. Create the mesh in blender, with the file saved to the projects Assets folder. In unity, create an empty game object, and drag the mesh from the assets pane to this empty object. Make sure the coordinates of the empty and the mesh inside it is 0,0,0. Name the empty something like exporter, since this is just a holder object for the exporter tool and the mesh it will export. The mesh should be pointing up like on a rocket, even if it is for a plane. Click the mesh inside the exporter, and add a convex mesh collider, or other fitting collider to it. Download the Part Tools, and drag them into the projects assets pane. On the "exporter" empty, click add component, and choose KSP/Part Tools. Fill in a part name and folder name if you like to have order in your mess. Unless you are using a png file as a texture, you need to choose Convert texture, and one of the file formats. (mbm is a custom semi-protected format). Click the exporter empty, click the "Write" button in the part tools. The exported files will be in the Parts folder in the unity project folder. Copy it to a new folder for your mod in KSP, like for other mods (in GameData). Create a part.cfg in the manner of any other part. Let us know where you break down in tears, and we can help. edit: starting a shared document here that anyone can edit.
-
Part animating during initial loading of launch pad.
Snjo replied to sirkut's topic in KSP1 Mod Development
I fixed the bug with the animation starting deployed and going towards the retracted state the day before yesterday. I had some conditions flipped. Showing the animation in the hangar when you place/load the part can be useful however, to make it obvious that this is an animating part that can be deployed, so now there is a config value still to play the animation in the hangar. You can find the updated dll in the pre-release. Since there have been changes, please do tell, if there are any exciting new bugs. The cfg value documentation can be found here. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
The wings use the default control surface module, like the stock parts. The extra module on there to lock or alter the rotation ability doesn't do anything that could lock it down, unless you are always reloading the same craft from a save, which you locked in an earlier flight session with it. Try making a new craft with some wings, and some of the stock tail winglets. If only mine fail, I'd be very surprised. Now, if this is happening while using the experimental Move-to-water part, a lockup is expected, and you will need to quick save and quick load to get the wings working. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
None of that seems right to me. Make sure you installed it correctly. Check the guide, and use 0.20.2. If a wheel, like the tail gear, is retracted, the wheel collider shuts down, and it doesn't roll (I plan to fix this). In that case you will get severe pull to one side. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
Unless I've forgotten something, they should alll work in other atmospheres. I turned off the requirement for oxygen. Mach56, I've been experimenting too much to get started on that yet. Yesterday Infinitedice and I made something hugely useful, a way to spawn in the water beyond the runway. I you have built a boat or seaplane, and don't want to start on the runway, you just attach a small part (with the boat parts it's integrated in the con tower), and then choose to turn the ocean starting position on or off. When you launch, you are already there, but due to some crazy stuff, you need to just press quicksave and quickload to get wings working. It's all in the pre-release plus experiments file. That, and the trim adjustment tool. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
I had a request for the meshes I use for the differently shaped oblong parts. Here it is for any interested modellers. I also posted the link in the guide and OP. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
You are under the illusion that there is any aerodynamic calculations going on at all, except, "Hey, I'm supposedly a wing, or so I'm told, and I'm heading forwards with some angle, lift me, bro!" You'd need a whole other method to do more than that, like using some of that re-entry effect lighting calculation magic to determine what surfaces are towards the airflow to get more correct. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
The VTOLs work just fine here. I'm using KSP 0.20.0 still. Are you? -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
It all depends on the handling you want. There's a saying that goes "If your Center of Lift is behind your Center of Mass, your plane will fly badly. If your Center of Lift is ahead of your Center of Mass, your plane will fly once." Having the CoL ahead can give a very nimble plane, right up until you do a crazy move, at which point it will become an uncontrollable flip fest. The CoL can be below or above the CoM, but you will usually have to do some trim adjustment at various speeds to compensate for drag inconsistencies. The same goes for having the Center of Thrust above of below your wings. It will a bit of trim work at different throttle states. I try to have my CoL slightly behind the CoM, but I know some people get good result with other set ups, possibly by creating some more drag at the tail. Well positioned drag elements can save a bad plane at the cost of speed. A well built plane can take many, many relaunches to balance correctly. Don't give up. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
I dunno, it stops at the airBrake, so try removing that, but it never gives a problem normally. If you are using 0.20.1, I haven't tested that yet, but there were rumors of some texture loading problems. Also: "G:/torrents/KSP_win/KSP_Data\../Parts\advSasModule\part.cfg", I hope you bought the game, if not, do so. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
No manual labor, just drop them in: -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
The part you see in the error log is probably the last part to load successfully before the bad part loads. The most probable cause is that you have some necessary part of the mod in the wrong place. It all goes in KSP_win\GameData\Firespitter. Check the parts guide linked on the first page for instructions. If that doesn't help, upload you KSP_data\output_log.txt to pastebin.com and put a link here or in a PM to me, and I can see which part is bugging out. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
You know, I 'd like that too. Making a similar jet or rocket engine is easy. Making a holder body for another engine is a bit more tricky, since rotating the part doesn't rotate the attach point of the engine connected to it. That's what is so good about DR, he figured out how to solve that. I'll have to look into how he did that one of these days, and hopefully not have my brain explode. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
Ok, I fond the bug and uploaded v5.1.1 This was the error [KSPField(guiActive = false, guiName = "partDistance", isPersistant = true)] //private float partDistanceFromVessel = 0; I had commented out a variable, but not the KSPField value! gah! Hard to find. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
I get the same error. One of the parts is bugging out. Looking into it, and I will upload a patch as soon as I can. I've taken the mod to private mode on spaceport while I investigate -
I'm guessing audioRollOffMode will make a difference, but I don't know if Linear is better or worse than Logarithmic edit: Linear is PERFECT! All it needs is an adjustment to the bass at further distance to sound more realistic. http://docs.unity3d.com/Documentation/ScriptReference/AudioRolloffMode.htm BTW, here's the current state of my own sound module with lots more features. It's not done yet, but getting there: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using KSP.IO; using UnityEngine; /// <summary> /// Engine sound handler. Allows for engines that have power sound even at minimum throttle, and engage sound that fires more consistently. /// Will play a warning sound when overheating. /// Any unnamed sound will be disabled, so just comment out the lines for the sounds you don't use in the cfg. /// </summary> public class FSengineSounds : PartModule { /// <summary> /// the engine start sound /// </summary> [KSPField] public string engage; /// <summary> /// the constant thrust independent background hum of an engine /// </summary> [KSPField] public string running; /// <summary> /// the thrust based pitched main engine sound /// </summary> [KSPField] public string power; /// <summary> /// the engine shut down sound /// </summary> [KSPField] public string disengage; /// <summary> /// loss of fuel flameout sound /// </summary> [KSPField] public string flameout; /// <summary> /// engine overheat warning sound /// </summary> [KSPField] public string warning; /// <summary> /// how quickly the engine power sound volume ramps up from silent when started. set to 1 for immediate full volume. This value is added to the volume every 0.2 seconds until it reaches 1. /// </summary> [KSPField] public float powerFadeInSpeed = 0.02f; /// <summary> /// how long the volume is off after starting the engine, to allow the engage sound to be heard /// </summary> [KSPField] public float powerFadeInDelay = 0.0f; /// <summary> /// thrust values below this level will yield a silent engine sound /// </summary> [KSPField] public float powerLowerThreshold = 0.0f; //add functionality [KSPField] public float powerVolume = 1.0f; [KSPField] public float engageVolume = 1.0f; /// <summary> /// random start delay for the power sound, to make several engines not play in sync. makes for a better soundscape. /// </summary> [KSPField] public float randomStartDelay = 0.0f; /// <summary> /// normalized engine heat value at which the warning sound chimes. set above 1 to disable (or don't name the sound of course) /// </summary> [KSPField] public float warningSoundThreshold = 0.8f; /// <summary> /// how often the warning sound can play in seconds /// </summary> [KSPField] public float warningCooldownTime = 2f; private float warningCountDown = 0f; /// <summary> /// the default pitch of the engine power sound. 1 is the same pitch as the original sound file. /// </summary> [KSPField] public float powerPitchBase = 0.8f; /// <summary> /// how much above the default pitch the power goes based on thrust. final pitch = powerPitchBase + (thrust * thrustAddedToPitch). Based on maxThrust at launch. /// </summary> [KSPField] public float thrustAddedToPitch = 0.3f; [KSPField] public bool useDebug = false; [KSPField] public bool showVolumeDebug = false; private ModuleEngines engine; private bool oldIgnitionState; private bool oldFlameOutState; private float currentPowerFadeIn; private float currentPowerDelay; private float smoothedPowerPitch = 0f; private float maxThrust; private bool paused = false; private System.Random rand = new System.Random(); private string doesExist = "..."; public FXGroup engageGroup; public bool engageAssigned; public FXGroup runningGroup; public bool runningAssigned; public FXGroup powerGroup; public bool powerAssigned; public FXGroup disengageGroup; public bool disengageAssigned; public FXGroup flameoutGroup; public bool flameoutAssigned; public FXGroup warningGroup; public bool warningAssigned; /// <summary> /// Fills an FXGroup with sound values /// </summary> /// <param name="group">The group that will receive a new sound</param> /// <param name="name">The name of the sound in the game database. No file extensions. e.g. Firespitter\Sounds\sound_fspropidle</param> /// <param name="loop">Does the sound loop by default?</param> /// <returns></returns> public bool createGroup(FXGroup group, string name, bool loop) { if (name != string.Empty) { if (!GameDatabase.Instance.ExistsAudioClip(name)) return false; group.audio = gameObject.AddComponent<AudioSource>(); group.audio.volume = GameSettings.SHIP_VOLUME; group.audio.rolloffMode = AudioRolloffMode.Logarithmic; group.audio.dopplerLevel = 0f; group.audio.panLevel = 1f; group.audio.clip = GameDatabase.Instance.GetAudioClip(name); group.audio.loop = loop; group.audio.playOnAwake = false; return true; } return false; } //private void OnDestroy() //{ // GameEvents.onGamePause.Remove(new EventVoid.OnEvent(OnPause)); // GameEvents.onGameUnpause.Remove(new EventVoid.OnEvent(OnResume)); //} public void OnPause() { powerGroup.audio.volume = 0f; paused = true; } public void OnResume() { powerGroup.audio.volume = GameSettings.SHIP_VOLUME; paused = false; } public override void OnStart(PartModule.StartState state) { base.OnStart(state); engageAssigned = createGroup(engageGroup, engage, false); runningAssigned = createGroup(runningGroup, running, true); powerAssigned = createGroup(powerGroup, power, true); disengageAssigned = createGroup(disengageGroup, disengage, true); flameoutAssigned = createGroup(flameoutGroup, flameout, false); warningAssigned = createGroup(warningGroup, warning, false); engine = part.GetComponent<ModuleEngines>(); if (engine != null) { maxThrust = engine.maxThrust; } //GameEvents.onGamePause.Add(new EventVoid.OnEvent(OnPause)); //GameEvents.onGameUnpause.Add(new EventVoid.OnEvent(OnResume)); } void Update() { if (FlightDriver.Pause != paused) { if (FlightDriver.Pause) OnPause(); else OnResume(); } } public void FixedUpdate() { base.OnFixedUpdate(); if (!HighLogic.LoadedSceneIsFlight) return; if (engine != null) { if (TimeWarp.WarpMode == TimeWarp.Modes.HIGH && TimeWarp.CurrentRate > 1.1f) { if (powerAssigned) powerGroup.audio.volume = 0f; } else { // power/running sound if (engine.getIgnitionState && !engine.getFlameoutState) { if (powerAssigned) { if (currentPowerDelay > 0f) currentPowerDelay -= Time.deltaTime; float adjustedThrustPitch = ((engine.finalThrust / maxThrust) * thrustAddedToPitch) + powerPitchBase; smoothedPowerPitch = Mathf.Lerp(smoothedPowerPitch, adjustedThrustPitch, 0.1f); if (currentPowerDelay <= 0f) { if (currentPowerFadeIn < 1f) { currentPowerFadeIn += powerFadeInSpeed; if (currentPowerFadeIn > 1f) currentPowerFadeIn = 1f; } powerGroup.audio.volume = GameSettings.SHIP_VOLUME * currentPowerFadeIn * powerVolume; if (!powerGroup.audio.isPlaying) powerGroup.audio.Play(); powerGroup.audio.pitch = smoothedPowerPitch; } } } else { if (powerAssigned) { if (powerGroup.audio.isPlaying) powerGroup.audio.Stop(); currentPowerFadeIn = 0f; currentPowerDelay = powerFadeInDelay + ((float)(rand.NextDouble()) * randomStartDelay); } } // engage sound if (engageAssigned) { if (engine.getIgnitionState && !oldIgnitionState) { if (!engine.getFlameoutState) { engageGroup.audio.volume = GameSettings.SHIP_VOLUME * engageVolume; engageGroup.audio.Play(); } } oldIgnitionState = engine.getIgnitionState; } } if (warningAssigned) { if (warningCountDown > 0f) warningCountDown -= Time.deltaTime; if (part.temperature > part.maxTemp * warningSoundThreshold) { if (warningCountDown <= 0) { warningGroup.audio.Play(); warningCountDown = warningCooldownTime; } } } } } public void OnGUI() { if (showVolumeDebug) GUI.Label(new Rect(250f, 300f, 200f, 30f), "engine volume: " + currentPowerFadeIn); if (useDebug) { if (!HighLogic.LoadedSceneIsEditor) return; Rect menuItemRect = new Rect(250f, 200f, 300f, 150f); Vector2 buttonSize = new Vector2(30f, 30f); Vector2 menuItemSize = new Vector2(200f, 35f); if (GUI.Button(new Rect(menuItemRect.x, menuItemRect.y, buttonSize.x, buttonSize.y), "OK")) { if (GameDatabase.Instance.ExistsAudioClip(warning)) { doesExist = "Yes"; createGroup(warningGroup, warning, false); } else { doesExist = "No"; } } if (GUI.Button(new Rect(menuItemRect.x + buttonSize.x + 10f, menuItemRect.y, buttonSize.x, buttonSize.y), "C")) { doesExist = "clear"; } if (GUI.Button(new Rect(menuItemRect.x + ((buttonSize.x + 10f) * 2), menuItemRect.y, buttonSize.x, buttonSize.y), ">")) { if (warningAssigned) warningGroup.audio.Play(); } GUI.Label(new Rect(menuItemRect.x + ((buttonSize.x + 10f) * 3), menuItemRect.y, menuItemSize.x - buttonSize.x - 10f, buttonSize.y), "exists: " + doesExist); menuItemRect.y += 30; warning = GUI.TextField(new Rect(menuItemRect.x + buttonSize.x + 10f, menuItemRect.y, menuItemSize.x - buttonSize.x - 10f, buttonSize.y), warning); } } }
-
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
Click the gear icon on the top of the window in the hangar. You get to the window where you can edit action groups. If you click on a part I've also added some pop up menu choices to that. -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
New version on Spaceport Download v5.1 -Bomb Bay (open the doors by clicking the part in the action group editor, for easier payload placement. A popup menu will appear) -Fuel drop Tank -The Electric helicopter rotor can now start deployed (by using the action editor popup in the hangar) -Engines with reverse thrust capabilities can now set default state in the hangar action editor -FSanimateGeneric, replacement module for ModuleAnimateGeneric. (EVA toggle, custom speed, set start state in hangar, multiple animations per part) -Bug fix: Wheel colliders spamming errors on launch -Bug fix: GUI parts spamming nullrefs when launching from main menu directly to runway (The drop tank texture isn't done yet, but there were some bugs I felt I had to fix) FINALLY A BOMB BAY! -
Firespitter propeller plane and helicopter parts v7.1 (May 5th) for KSP 1.0
Snjo replied to Snjo's topic in KSP1 Mod Releases
I'm slowly filling out a document to, eh, document the various FS modules' cfg values. If you use my modules for your own parts, you might want to bookmark this. Let me know if you need a specific module documented. Firespitter Module Documentation