#K2-D2
1 messages · Page 1 of 1 (latest)
Will try it out tonight and see how it goes. Thanks for the work!
K2-D2
I'm gonna be testing this out today. With my Skylon heavy LKO delivery vehicle delivering a interplanetary and lander vehicle. Do you have a list of planned features for this mod?
If you foresee this as an all encompassing mod similar to mechjeb 2 then I have some ideas for features
So I've tried it and it's good. It just has some problems:
- It overshoots by about a second of burn time, making precise manoeuvres not very precise
- When the Engine Burn starts wile beeing in the Map View, the engines do not produce any noise, even when returning to vehicle view
Other than that, it works as advertised!
Edit: The Overshooting Problem is occuring about 30-50% of the time, the other ones are for all intents and purposes PERFECT. Great job!
jep can confirm all of the above 🙂
thanks for the test. I'm on the trouble of burning. For the moment It just burn as long as the maneuvre duration is declared. and it's no good.
I'm about to compute realtime the dV added. And use only this parameter seems so better. I hope I'll have a version during the week.
Maybe I will make the circularization work. After that my next steps will be to calculate 1. Hohmann transfer and 2. changing the longitude of ascending node + inclination of an orbit.
I wonder if additional perameters could be used like the predicted end peri and apoapsis to make more accurate burns.
I'm currently adding a setting page. hoping it will be useful for this kind of use
new version released.
Mainly UI Improvement and preparation for integrating @oblique finch works.
yes good idea
This was a test I did, makeing a maneuver nodejust small enough to be still in Kerbin SOI. It overshot by about 10 m/s. (PS: In the screenshot you can see that the throttle is to 100%, this is because when I took the screenshot with Shitft+Win+S the throttle got increased. The game was paused, so this did not change the trajectory)
This is how I got the value of 10 m/s, I made this maneuver node just after the burn finnished and made it's apoapsis the same as the node I used for the burn
The feature enabling SAS and point to Maneuver is great. Thank you for this addition.
@glass depot If you have any scenarios you'd like us to test, please tell us! We want to help you make this a good mod
thanks for the test. the Dv is not working for the time. but yesterday I've found a proper ways to compute it in real time.
If you're able to compute the needed Dv in real time then you're well on your way to having K2-D2 be able to end the burn precisely when it should!
I hope so 😀
cool by simply adding any engine dv vectors during the burn we have a quite accurate value. I really can try small adjust burn !
Will this take into account a throttled-down engine? I have not had any success with engines that I have throttled to not-100% thrust.
I've tried to take this in account. I'm asking each engine it's actual flow, adding the full vector.
each value is computed by Ksp2.
good news @shy zodiac the throttled-down engines also gives accurates values.
Next steps :
From my side I will integrate a node editor. I've asked @mild bronze for collaboration using it's work on maneuver node controller.
I'll also now work on ascending contrôler and auto land without atmosphere. So fun to automate those phases.
There a some known issues with the cicularization when the excentricity is greater than 1.0. This issue will be fixed by the with the next upcoming release.
ok so wait and see
I'm sorry but I need a last merge. i've changed the way csproj includes .cs files
here is the new include. I asume we will nclude all cs files
and it's working perfectly
I just had to moved popup and popup content to the source/view folder
this would be the last change that will affect you
sorry I thought it would be on PM
I also fixed the circularization. This should work now
excellent and I see you fixed the hyperbolic orbit trouble.
I've got a bug on my side when using your maneuver creations. I burn really too soon.
this not happens with maneuver made using th ksp map
i'll debug check what hapenning
Im a little bit confused. I just merged. Your bug seems to only appear when the second++ Maneuver is being executed. Even when i stop and rerun the autopilot. So i wonder if that bug comes from the maneuver side. Before i merged it was possible to execute them one after another.
Yes confused too. by maneuver side you mean but "execute maneuver" or from ksp ?
the way maneuvre are created seems to bother KSP expected it to be. My only clue it the way you create them in 0.5.0 was without trouble. But I can't tell what has changed
for the AutoExecuteManeuver it uses the KSPVessel.GetNextManeuveurNode
i'm not really sure of this implementation. perhaps there is something to fix there.
@oblique finch I've met the ghost node issue twice during lunch time.
I tried using another node controller : KontrolSystem2.
The first has create a valid execution. but the second create strange issues too.
I need to dig further to be really sure of what's happening preciselly.
I've also met many over warp errors in various situation.
but no real overburn. just burn stating at wrong time and sometime really wrong time 😄
I've also worked on landing controller. It's working quite well for the moment. nothing to release for the moment. but really fun to implement.
I need to test with different rocket sizes to check if everything is alright in any situations
So it also bugged using KontrolSystem2 if i understand you correctly?
yes, not the exact same way. but yes
Are you guys working to integrate the old MJ code from OrbitalManeuverCalculator.cs? I've been poking around with that code in the MNC mod. I've got most of it to a state that compiles for KSP2, and the little bit I've tested appears to be working, but I'm stumped with what I believe is an old KSP1 call to PatchedConics.CalculatePatch(). There is no method I've found quite like this in KSP2, and AFAIK it's not something MJ is extending KSP1 with. In KSP2 I can find CalculatePatchConicList() and CalculatePatchList(), but the former takes an int ManeuverNumber as input and the later takes no input at all, while the method MJ expects to use is taking a bunch of inputs including a pair of PatchedConicsOrbit, a UT (double), and a PatchedConicSolver.SolverParameters.
Any clues what to update a call to PatchedConics.CalculatePatch with?
Also, if it's any help to you, I've got most of the rest of that to a state that may be useful.
@noble night I had the same problem. I gusse this codesnippet is not the way to do it properly but it works for me.
{
Game.SpaceSimulation.Maneuvers.AddNodeToVessel(maneuverNodeData);
MapCore mapCore = null;
Game.Map.TryGetMapCore(out mapCore);
mapCore.map3D.ManeuverManager.GetNodeDataForVessels();
mapCore.map3D.ManeuverManager.UpdatePositionForGizmo(maneuverNodeData.NodeID);
mapCore.map3D.ManeuverManager.UpdateAll();
mapCore.map3D.ManeuverManager.RemoveAll();
}
private void CreateManeuverNode(Vector3d burnVector, double TrueAnomaly)
{
PatchedConicsOrbit referencedOrbit = GetLastOrbit() as PatchedConicsOrbit;
if (referencedOrbit == null)
{
logger.LogError("CreateManeuverNode: referencedOrbit is null!");
return;
}
double TrueAnomalyRad = TrueAnomaly * Math.PI / 180;
double UT = referencedOrbit.GetUTforTrueAnomaly(TrueAnomalyRad, 0);
ManeuverNodeData maneuverNodeData = new ManeuverNodeData(kspVessel.GetGlobalIDActiveVessel(), true, UT);
IPatchedOrbit orbit = referencedOrbit;
orbit.PatchStartTransition = PatchTransitionType.Maneuver;
//orbit.PatchEndTransition = PatchTransitionType.Final;
maneuverNodeData.SetManeuverState((PatchedConicsOrbit)orbit);
maneuverNodeData.BurnVector = burnVector;
AddManeuverNode(maneuverNodeData);
}
We are not reusing the MJ code. We do everything from scratch because we believe the work belongs to the MJ Owners/contributors.
Yes and because it's funnier to start from scratch. I've used mechjeb for hours. I know its incredible quality and limits too.
MJ code is covered under a variety of open source licenses. It's all free to use, though the licenses for any parts that are used must be maintained. In many cases what it's doing is applying textbook orbital mechanics equations - at least that's what you find deep inside it. There are also good applications of various public domain optimization solvers. Where the art lies, and where I would not want to borrow, is in the UI and architecture of solutions - not so much in the math. Borrowing the math would be wise in many cases. I would also make exceptions for ascent and landing and things like that - those may be more in the art realm, but working out the Delta-v needed and when to apply it so that you change your inclination, intercept some target, or whathaveyou - those are textbook things.
Also, I would not re-use MJ code without giving full credit to the authors/contributors. That would not be OK in any way.
I'm currently on the landing. I've read of course mechjeb code to see the overall logic. But just adapting it would work with the same defaults. I'd like to avoid that.
But of course it's fully part of inspiration.
It seems that K2-D2 does not work with version 1.0 of spacewarp. I'll try to correct this ASAP. sorry for the trouble
Hello, I've rebuild the Mod for with Spacewarp's lastest version
New version on spacedock :
https://spacedock.info/mod/3325/K2-D2#changelog
With full auto landing

real life Mando!

I've update the version to fit new kSP version
New Version is on SpaceDock !! 0.8
Lift is working, Landing Improved, added TouchDown Mode and Drone Fly.
Hey I just took K2-D2 for a spin with a new rocket and it worked brilliantly for launch, circularization, and Hohmann xfer orbit to Mun. I used the built-in K2-D2 Lift capability for the ascent, with the only feedback being that it would be awesome if K2-D2 could detect spent stages and eject them. My rocket had 4 strap-on solids to help with TWR in the early part of the flight. It was not hard for me to watch them and press space to stage them, but it would be really cool if K2-D2 could do this. That might matter especially to those who build multi-stage to orbit craft.
The other thing I noticed was that when K2-D2 is finished with a node it might be nice if it deleted the old node. It's not really a big deal for the player to delete them, but leaving them around can confuse Flight Plan. OTOH I could have a setting in FP to remove any past nodes when creating a new on. I'll look into that too - just wanted to pass along this feedback. Fantastic work, my friend! This is simply brilliant!
Just did a landing on the Mun! Worked great! Some of the controls were a little counter intuitive for me, but I quickly got the hang of it. The first attempt I overshot the breaking burn as I didn't realize I needed to press that button when a collision had been detected and K2-D2 was actively counting down to the burn. Restoring from a save I made another go of it and realized that pressing Brake doesn't trigger the burn, it enables it. That attempt bounced a bit and I wound up with the vessel on it's side, so I restored and gave it another go pressing the Touch-Down button when I was close to the ground and that seemed to do the trick! Is that how it's intended to work? If so, I figured it out pretty quickly and it worked great!
I've posted pics on the forum https://forum.kerbalspaceprogram.com/index.php?/topic/212621-mechjeb-for-ksp2/page/4/#comment-4276398 to illustrate the test flight I just made. So easy!
Kerbal Space Program Forums
@glass depot After playing with K2-D2 0.8 I had a couple thoughts...
First: Your UI is gorgeous! Way prettier than mine. I really like how it works and where you've taken it.
Second: It seems there's a really clear distinction between the things that K2-D2 excels at and the things the FP does well. Where FP is good at doing some orbital maths and setting up nodes, K2-D2 owns the dynamic control space. Things like precision execution of nodes, ascent, and landing all involve dynamic engine and attitude control. Also, managing time warp is a big deal. FP does none of that, and K2-D2 does it really well!
Third: The way I was using these apps, and the way we've suggested to others that they use them, is that for use cases between ascent and landing the user creates a node with FP, then executes it with K2-D2. This got me thinking...
In stead of hiding the FP capabilities inside the handleButtons method I could bring each of them out to a public method that handleButtons calls. This would make it possible for players to continue to use K2-D2 & FP exactly as they may do now - the FP GUI would still be available via Alt-P and the app bar, but it would also mean that K2-D2 could directly call methods in FP!
Imagine if, via your sweet UI, players would click on something they want to do, then K2-D2 calls a FP method to create the node, and bang They're off an running! FP is available to call whether the GUI is launched or not, so from the player's perspective they're just using K2-D2 to setup nodes and execute them. If some players prefer to bring up the FP GUI and make the node that way it would work too.
If I were to take FP that way, I could bring out a number of orbital math methods that K2-D2 may want to call. It might make launching to the target's plane or launching to rendezvous easier as some answers would just come from a FP call within K2-D2. This would really take these things to the next level as a KSP2 answer to MJ!
I'm going to start looking into this, but I wanted to bounce the idea off of you to see if this is a direction you'd want to consider going with K2-D2.
@noble night thanks for all this positive return.
I'll try to answer to all your Questions.
first about the Landing. It's not working very well for the moment you're right.
When the landing page is openened it shows It compute the burn time and this part is not working well
When pressing the Brake button. we starts the full landing pilot.
I'm confident you'll get the landing part nailed!
It start to quick Warp to this time, then burn and if the altitude is too high it will start another Warp and brake loop.
until the Touchdown Altitude is reached. It can then have 3 or more loops if parameters are not good.
The TouchDown mode starts when at the end of a burn the altitude Low enough.
Then it just adjust your speed to the altitude. In a simple linear ratio. the slider you can use in settings?
by pressing the Touch-Down button you start the mode sooner.
I've added the button because of the too many warp-burn loops.
The good thing is that it's a reallllyyy safe landing mode
The bad thing is that it burn too many fuel.
i'll do a better computing of that time in next version. taking acount of both gravity, TWR and horizontal collisions
then for your other considerations.
- The UI has been made using my own graphics and a small library I wrote. I used to code using Unity in the first version of the Engine and the only UI was this Legacy code we use (GUILayout stuff)
I love this mode of UI because it's a purely programmatic way to draw UI
I had a look to UITK and it should be a better idea to go this way one day but for the moment I'm really comfortable with that and it's quite a please to write new code about that.
for the EditorField focus trouble I've wrote a little class that do the stuff. thanks for reminding me about the way we can use it. it is an old Unity trick.
- I totally agree with the fact that K2-D2 and FlightPlan are on totally 2 different part of a good space navigation. It's perfect to flight using both.
Mechjeb did the both parts but it was not excellent for the User Interface. I'ts quite cool to have different tool at different states of the space navigation.
I was thinking from my side that FlightPlan should be the master interface during orbit navigation. and K2-D2 usefull when Orbiting and coming back to ground.
I'd like to add the Docking Pilot too of course. I love creating pilot that only use the Vessel Inputs like a user can do : change SAS, point to, warp, RCS, Thrust and so on.
it's the fun part for me.
And I think K2-D2 should stick to that only responsabilities.
all Orbit and Maneuver stuff Should stay in FlightPlan.
Therefore, It would be cool to do the opposite : Flight Plan should remains as the main Navigation windows, and I could add a K2-D2 button that execute the next Node.
The Button would be visible if only K2-D2 is installed.
it will execute the node even if the K2-D2 window is hidden.
and I would be very pleased to adapt the FlightPlan UI to fit my skin.
I don't know if the best way is to create a external dependency like you did with Node Control
there are Images to bring with the skin of course and I don't know how I could load it using SpaceWarp calls
Here us the UI skin I drawed
the good point is that it is all coded with 2 or 3 .cs files
Style.cs and UI_Tools.cs and all the images
plus EditorField.cs that Handle the Focus and Input stuff
and it would be easy to add to Flightplan as it does not draw any other dependency.
If you like the idea I can try to adpat actual FlightPlan to this skin doing a fork and propose you a pull request .
I wouldn't be a hard work and working on another thing than K2-D2 for a while would be cool.
Actually, I really like this idea! The player could launch either mod and they would have common look and feel. If both are installed, then FP can call K2-D2 for node execution - this is a very easy thing in principle. If the user has only one, they can use it like they normally would, but there would be a synergy if they have both.
I've already updated my FP code so that many of its functions are callable, but that is not a problem. If you find a use in calling them later, fine, and if not fine. If you'd like I can make a fork of K2-D2 and see what it might take to make the execute node capability an API callable function. We can do this with soft dependencies if you like so that they don't require eachother, but can use the other if it's available. That way is slightly more work, but not a big deal. FP already does this with MNC, so it's really not hard.
I'll fork K2-D2 and see if I can add the API you would need. If I can, I'll give you a PR for it.
Yes soft link would be the fine way to call each other. I've built my first flight plan. I'm ready to do the UI changes. Cool.
And I've build my first K2-D2! I'm ready to start work on an API. Your coding style is much more sophisticated than mine. Is a call to AutoExecuteManeuver() the thing that runs when you're executing a node? I'm thinking that may be the entry point. If FP can trigger that, would K2D2 act like the user has pressed the button to execute the node?
Also, would you want FP to bring up your GUI and then make the call so that the user can see it executing? Or would you prefer that K2D2 works behind the scenes in such a case?
You might want to pull in some changes I just pushed to the FP repo. I meant to push them earlier, but was busy and hadn't thought bout it. None of these changes are to the GUI, so should not be conflicts, but it will make merging your changes in easier. Also the version of FP on the repo now has most of it's own callable API.
I've gotten a soft dependency to K2D2 working in FP. This is just gaining access to K2D2, not establishing the call, but already FP can "see" k2D2 and tell if it's loaded or not.
[Info :Flight Plan] K2D2Loaded = False
[Info :Flight Plan] K2-D2 installed and available
[Info :Flight Plan] K2D2 = K2D2 0.7.1
[Info :Flight Plan] K2D2Loaded = True
You might want to change the following lines in K2D2. These are hard coded, which is not ideal.
public const string ModGuid = MyPluginInfo.PLUGIN_GUID; // "K2D2";
public const string ModName = MyPluginInfo.PLUGIN_NAME; // "K2D2";
public const string ModVer = MyPluginInfo.PLUGIN_VERSION; // "0.7.1";```
Yes just calling the autoexecutemaneuver.instance.start will do the node execution. whether the UI is visible or not .
I'll add static class. K2D2_api. That will contains all direct call to pilot. And a stop.
It's fine if the UI is not shown. The important point is that the user have a right UI return that the pilot is running.
Thanks I was searching for a way to get it and avoid a duplicate.
Actually, what I put there doesn't quite work. It works for mods based on @fluid apex's SpaceWarp template, but for this to work correctly in K2D2 will require just a bit more work I think. When I put in that code above for some reason it was picking up this instead
namespace SpaceWarp
{
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "SpaceWarp";
public const string PLUGIN_NAME = "SpaceWarp";
public const string PLUGIN_VERSION = "1.1.3";
}
}```
The main thing you need is the package reference to BepInEx.PluginInfoProps
At least i think that's what it's called
It's what generates the MyPluginInfo class for mods automatically
I'm helping @glass depot with getting things set up so he can call FP as a soft dependency and FP can call his code too.
I don't want to stomp on his thigns too much, but it sounds like he would like to be able to use this capability.
Of course it's not exactly needed, all you need to do is define the constants with the mod information manually in your plugin class, if not using the MyPluginInfo
Is suspect there's some simplification that can happen in csproj that would mean he doesn't need so many dlls in external_dlls
Yeah, and then any time he updates I'm out of sync...
Yeah, none of them are really needed except for the Assembly-CSharp which i don't feel comfortable uploading to Nuget, since that's kinda illegal 😆
Oh yeah for sure! I meant other than that one
I'll take a stab at this, but his csproj is different enough from the working examples I have (and his is working) that I want to proceed carefully
But the rest should all be available on the SpaceWarp nuget feed
To be fair I only had a quick look at it since I'm on my phone right now, i can help out more in a couple of minutes when I get back home
Your insights would be most appreciated!
I think I fixed it? If I did, it's almost certainly a suboptimal fix. This compiles...
I think I may have broken my copy of K2-D2. It seems to load (there are normal KSP2 messages in the log about loading it), but (a) FP can't see it, and (b), when I put this code into K2-D2's OnInitized it doesn't appear to execute the new code. Other messages come out, even after this code, but never the new ones I put in try/catch blocks below.
public override void OnInitialized()
{
if (loaded)
{
Destroy(this);
}
Instance = this;
Settings.Init(SettingsPath);
mod_id = SpaceWarpMetadata.ModID;
loaded = true;
Instance = this;
gameObject.hideFlags = HideFlags.HideAndDontSave;
DontDestroyOnLoad(gameObject);
// Test logging to make sure things are set right - remove when done testing
try
{
logger.LogMessage($"ModGuid = {ModGuid}");
logger.LogMessage($"ModName = {ModName}");
logger.LogMessage($"ModVer = {ModVer}");
}
catch (Exception ex) { logger.LogMessage($"Unable to check ModGuid, ModName, or ModVer: {ex}"); }
try
{
logger.LogMessage($"MyPluginInfo.PLUGIN_GUID = {MyPluginInfo.PLUGIN_GUID}");
logger.LogMessage($"MyPluginInfo.PLUGIN_NAME = {MyPluginInfo.PLUGIN_NAME}");
logger.LogMessage($"MyPluginInfo.PLUGIN_VERSION = {MyPluginInfo.PLUGIN_VERSION}");
}
catch (Exception ex) { logger.LogMessage($"Unable to check MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, or MyPluginInfo.PLUGIN_VERSION: {ex}"); }
logger.LogMessage("building AutoExecuteManeuver");
...```
The building AutoExecuteManeuver message comes out every time, for example - but none of the message I put there do even with try/catch blocks
[Info : Unity Log] [System] Initialization for plugin MicroEngineer completed in 0.0890s.
[Info : Unity Log] Initilised
[Info : Unity Log] [System] Initialization for plugin Cheat Menu completed in 0.0021s.
[Message: K2D2] building AutoExecuteManeuver
[Message: K2D2] SimpleManeuverController !
[Message: K2D2] MainGUI
[Info : Unity Log] [System] Initialization for plugin SpaceWarp completed in 0.0133s.
[Info : Unity Log] [System] Post-initialization for plugin Space Warp completed in 0.0003s.
[Info : Unity Log] [System] Post-initialization for plugin VesselRenamer completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin Community Fixes completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin ShowKSP2Events completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin SkipSplashScreen completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin Lazy Orbit completed in 0.0002s.
[Info : Unity Log] [System] Post-initialization for plugin Node Manager completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin Flight Plan completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin Resonant Orbit Calculator completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin Maneuver Node Controller completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin MicroEngineer completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin Cheat Menu completed in 0.0001s.
[Info : Unity Log] [System] Post-initialization for plugin SpaceWarp completed in 0.0001s.
[Info :MicroEngineer] Message triggered: GameStateLeftMessage```
Also, I never see a Post-initialization for plugin for K2D2...
would you mind sending me a zip with the project?
alright, that works even better
will that do?
one sec may need to commit some stuff
Ok ready
That copy has my changes to swinfo and csproj for what they're worth
well I have to admit that I've spent a while reading through it and I'm more confused than anything
I'm not seeing anything that should be preventing it from getting loaded by BepInEx and seen by SpaceWarp
though I'll say that I don't exactly understand the structure of the project and its .csproj file
Thanks for taking the time and looking! I'll circle back with @glass depot to see where I may have gone wrong. Something seems to be preventing FP from seeing K2D2 in the current state I've got it. I can go back to the hard coded way, which may work, but I'd still like to explore a fix for this that can help keep things in sync as cfloutier evolves his project and updates versions numbers, etc.
I got the same troubkle at the very start of the project and as i was totally discovering I did only little changes from lazy orbit mod
until It worked, and then I stopped doing change on that. sorry I think I can't help much i'll try to compile from your fork
Ahh, if you started from there then I think I know how to fix it. I worked on updating Lazy Orbit to the template a while ago, but had assumed that with K2-D2 this was more important to your design and so wanted to tread carefully.
I'll compare what you've got the the Lazy Orbit fork I've got and work from there.
Good news!
Flight Plan now sees K2D2 and can call it!
In the images above you can see that first there is no node, then I create a node using FP to Circularize at Ap - both mods pick it up!
Then I click the brand new K2D2 button in FP and bang K2D2 is flying the node!
An no time did I press any buttons on K2D2 except the app bar button to bring it up so I could watch it do its Astromech thing
Essentially, FP now has a precision node executor aboard! 🥳
Ok, now the bad news...
After spending a bit too much time trying to get the existing K2D2 csproj to work with the current SpaceWarp template I ultimately did this
- Built a brand new blank mod from the current template
- Pulled all of your code into that mod (almost no changes to any lines of code, but things are not quite where you left them folder wise...)
- Made some more changes to the csproj post build events and such
- ... uh, there is no step 4... It builds and seems to work!
and now imagine that the whole template is completely reworked in the upcoming version

Ummmm, thank you?
LOL
What sorts of wonderful changes do you have in store for us?
Are things going to move around folder-wise?
well, mostly just what I described in #🔴mod-dev message
Well in that case, it's all win!
this is the full new folder structure, it might seem like there's much more than before, but I really just made it more generic and extensible
Because the things I kinda broke in @glass depot 's csproj were some of his auto zip and deploy stuff
His lovely batch files are still there, but not being called - mainly cause I was moving fast and breaking shit as ususal
yeah, then the good news is that that functionality is all built-in now
(well, will be when it's released)
This isn't a big change in terms of work needed to do on any of my mods or on K2D2 if cfloutier wants to roll in what I've done so far
Some things will move around a bit, but not a problem I think
technically with a few minor changes I could release the template for SpaceWarp 1.1.3 now, instead of waiting for 1.2
No rush. I think it will be fantastic when we get it.
I'm just thrilled I've been able to get FP to play nice with K2D2 tonight!
I'm really glad to see more and more interoperability between mods
Now I just have to figure out how to shovel it all back up to my git repo so I can put in a PR...
That's a mess with what I did locally
Yeah! We're really getting somewhere on the interoperability front!
and SpaceWarp 1.2 should hopefully make it even easier, if we add the base for soft-dependency APIs
and in turn in the new "library mod" template I would add a basic example of its usage
hehe
I finished the update to the FP README
last night...
But I'd want to roll this capability out anyway...
so soon!
Wooa I'm seeing that after the fire.
Many excellent work here. I didn't had the courage to rebuild the csproj as you did. That's an excellent point. I'll accept your Pull request off course and do the little adaptations to be confortable with my little batches.
I like the spacewarp folder structure much. I'll try to be closest to it.
Flight Plan 0.7.3 integrates K2-D2 with FP! Of course 0.7.3 is now superseded by 0.7.4 which fixes a couple of logic bugs in my GUI..., but the part that integrates with K2-D2 has been in there and available since as far back as 0.7.3 (2 hours ago...)
Now, if K2-D2 is loaded, FP will give a K2D2 button that either launches K2-D2 (if the installed K2-D2 is 0.8.0 or earlier), or calls K2-D2 to execute the current node in the background (K2-D2 v 0.8.1+). This was possible as your ToggleButton method happened to be public anyway, so even previous versions can be called up to the screen!
I'm currently trying to integrate your Pull request.
That's why I made sure FP could do something useful with K2-D2 0.8.0!
I'm removing Post build event in csproj reblacing by a call to one of my batches.
the main trouble is hardcoded pathes to ksp2
I'll add in in the ksp_location.bat
BTW, @munix is planning an update to his template that will do a lot of what you're doing with batch files.
great
I plan to migrate to that template on my mods once it's available.
cool thing I will do it too
It will be if FP and K2D have the same structure for the csproj and build options
Yes! Easier for both!
I didn't had time to du much today. But my 0.8.1 compile and I've adapted the batches to copy on a proper ksp2 folder.
I've added options to stop and start ksp and of course make the zip
Thanks for the pull request. Very good thing to me closer to standard mods. And I really didn't know what to do for that
I've not merged yet. Buy it will be done tomorrow I think
If you're still working on the merge then I'd like to look into how FP could get a little more feedback from K2D2. Right now there's a one way signal, but no feedback. Can you suggest how I might be able to get a status back? I know that in some instances there is an issue with the node and K2D2 reports on it's console that there is this issue, but FP doesn't know this. So just being able to tell that K2D2 is going to execute the node or not is valuable info.
Also if the node was acceptable it would be great if FP could access the info that K2D2 is seeking alignment, warping to the node, waiting for the node, burning, done burning. I'm thinking of the case where FP might be up and the player has not brought up K2D2. In that case, it would be good if FP could relay some status. I'll look at this, and if I can I'll try to make this happen.
@glass depot I've committed a couple of changes since the PR that enable FP to get and display some useful status from K2D2.
public string GetStatus()
{
string status = "";
var instance = AutoExecuteManeuver.Instance;
if (instance.current_maneuvre_node == null)
{
status = "No Maneuvre Node";
}
else
{
if (!instance.valid_maneuver) status = "Invalid Maneuvre Node";
// else if (!AutoExecuteManeuver.Instance.canStart()) status = "No Future Maneuver Node";
else if (instance.isActive)
{
if (instance.mode == AutoExecuteManeuver.Mode.Off) status = "Off";
else if (instance.mode == AutoExecuteManeuver.Mode.Turn)
{
status = $"Turning: {instance.current_executor.status_line}";
}
else if (instance.mode == AutoExecuteManeuver.Mode.Warp)
{
status = $"Warping: {instance.current_executor.status_line}";
}
else if (instance.mode == AutoExecuteManeuver.Mode.Burn)
{
if (Game.UniverseModel.UniversalTime < instance.current_maneuvre_node.Time)
{
status = $"Waiting to Burn: {instance.current_executor.status_line}";
}
else
{
status = $"Burning: {instance.current_executor.status_line}";
}
}
}
else status = "Done";
}
return status;
}```
That's in the base class.
In AutoExecuteManeuver I also made this change
public bool valid_maneuver = false;```
That's all I think I needed to get the essentials out so that FP could display them.
Right I take it
If you prefer a different API interface to get status out, I'll be happy to adapt. I just wanted to put something in there so I could get these essential things out. With this much I can easily pass along the info from K2D2 so the player knows what's going on even if the K2D2 GUI isn't up. That said, your GUI is a lot prettier than mine! Why would they not want it up? That's my question!
oh yeah. it has been a bit long
but the good news is that there is no more hard coded pathes
you shoudl use a local_dev_options.bat in the batches folder
it contains all options needed by both of us
@REM this exemple file should be renamed to ksp_location.bat.
@REM ksp_location.bat is git ignored and therefore can contains informations depending on dev local machine
@REM set your own KSP2_LOCATION and rename me to ksp_location.bat (git ignored)
@REM ps : don't use ""
set KSP2_LOCATION=Z:\SteamLibrary\steamapps\common\Kerbal Space Program 2
@REM Create Zip package (require 7zip)
set Create_zip=True
@REM CLOSE KSP before build
set Close_KSP2=True
@REM Open KSP after build
set Open_KSP2=False
what is missing is the copy dll to FlightPlan or another mod
i'll add it in next push
you can also look at the make_zip.bat wich read the version in swininfo.json to format a good name for the zip
Thanks! I'll align with this for further collaboration.
Done! My fork is synced with the master and my local copy is updated. I am aligned!
If alignment is done, we can now warp and burn, right? 😉
Excellent work! I was easily able to create my local_dev_options.bat from the example, and the build process was flawless! Much nicer than what I had before.
K2-D2 is now officially ready to speak to next FlightPlan Version
0.8.1 is released !
i've written a first page of documentation on the github wiki
There were no big changes for a while as I was working on Ktools UI stuff s on FlightPlan.
but I took time to add small new tools in the K2-D2 toolbox
First the Attitude Pilot. that could be really useful for a kind of planes pilot
not much for a UI but it's a full test ofr new controls in KTool
the edit field can be modified by both the slider and ++/-- buttons
the buttons are repeat button with a special timer taht accelerate over time
very useful a real precise control of value
and of course it point the vessel direction to the desired attitude 🙂
it was the easy part. the hard part was the UI writing
another little tool :
a first button in the warp tab
only SOI detection because I really needed that (and every body should need it too)
I still need to add new fcts for FlightPlan. and I could release it
I didn't had the time for a new K2D2 version, and i'm not sure I could do it next week
but I made new UI component.
still in progress, but promising.
it will be used a heading when vertical for drone mode,
and heading selection in Lift and Attitude controler
I've changed my way to devellop Ktools UI
using Unity Editor to first debug, it's far more simple than launching KSP2
the final function will be called using
you can draw in the controller, and change value or just fix as input only.
Cool!
Hey Not sure if you've seen this, but I'm getting some NRE's in the log from K2D2 while loading a save. Once the save is loaded they stop, but here's an example
[Error : Unity Log] NullReferenceException: Object reference not set to an instance of an object
Stack trace:
K2D2.Controller.AutoLiftController.computeValues () (at C:/dev/_ksp2/k2d2/K2D2Project/Controller/AutoLiftController.cs:158)
K2D2.Controller.AutoLiftController.Update () (at C:/dev/_ksp2/k2d2/K2D2Project/Controller/AutoLiftController.cs:185)
K2D2.Models.ControllerManager.UpdateControllers () (at C:/dev/_ksp2/k2d2/K2D2Project/Models/ControllerManager.cs:32)
K2D2.K2D2_Plugin.Update () (at C:/dev/_ksp2/k2d2/K2D2Project/K2D2_Plugin.cs:182)
Ah thanks. I didn't see that
It make sense as there is no vessel there. I'll fix that
ok I thing I've corrected that thanks for help
new version on space dock : i've added the functions we discuss about ("stop Pilot" and "is Running")
Hey @glass depot , I was on your forum page for K2-D2 today and I noticed that you've run into an issue I've had before. When you pasted the info into your post for 0.9.0 you may have forgotten to remove the formatting from where you copied it, and so it looks like this for anyone with dark mode.
You might want to go in and edit the post to remove the formatting. Super easy to do, and it will be more readable for all.
Ah thanks. I Didn't noticed that
I tried to fix it. But i couldn't test it cause i only have a phone to test it
It's fixed! There are some others above it that need similar fixing if those matter to you, but this one is fine.
Thanks
I've highlighted the use of K2-D2, in particular your Warp to SOI feature, in some videos I've made for Flight Plan. You can find them here: #1091863665134796880 message
Thanks again. I'm back from holidays. And I think i will be back to code this week
Hey, I've tried this mod once again and I'm blown away. It works perfectly. Thank you so much for the work you've done!
@glass depot minor typo in the K2-D2 status message.
Should be "Invalid Maneuver Node". (r and e are transposed)
thanks to @novel gale with it's excellent HUD i've tried experimenting with the Shape library. It can give real cool rendering
I'll try to use it to debug the docking pilot. and to easy the choice of docking port on big station.
the additive blending mode gives a kind of laser style if alpha color is greater than 1... strange but a cool side effect.
I've finally found the way to show docking port on target !
I'll try now to code a simple kill target speed using main thrust. It can be usefull for quick approach
That looks so cool!
You know I've got a match velocity function in FP. When I'm doing rendezvous I use that a lot.
Maybe you could call that then execute the node it gives you?
Yes i use it for the final approach. It works quite well. But i'd like to add a way to stop not based on orbit but just relative speed of each object. A local stop
I compute relative speed in FP, which I display for when the player is in the final steps of rendezvous.
relVelocityNow = Vector3d.Dot(Orbit.WorldOrbitalVelocityAtUT(UT) - targetOrbit.WorldOrbitalVelocityAtUT(UT), Orbit.WorldBCIPositionAtUT(UT) - targetOrbit.WorldBCIPositionAtUT(UT)) / (Orbit.WorldBCIPositionAtUT(UT) - targetOrbit.WorldBCIPositionAtUT(UT)).magnitude;```
In this Orbit is the active vessel's Orbit, and targetOrbit is the same for the target. In the case where the target is a vessel, then targetOrbit is defined as
targetOrbit = _currentTarget?.Orbit as PatchedConicsOrbit;```
and in the case where the target is a port (or really any part on a vessel), then it's defined as
```cs
targetOrbit = _currentTarget.Part.PartOwner.SimulationObject.Orbit as PatchedConicsOrbit;```
I believe this gives positive numbers when you're moving away and negative when on approach, but I'd have to check. There is a sign change for sure and it does work for either direction.
Thanks bro. I'll try this. I was thinking just to try without conic stuff. Simply by looking at relative positions. But it can be a mistake.
I'll try both approaches.
Hey @glass depot , what are the RGBa values for the border colors on K2D2? I'm trying to get mine to match what you've got and what I have is too bright.
I've picked it from a screen copy of the official interface
I'll give you tomorrow. I've got no computer right now
The line weight also need to be adjusted
I can’t make it any thinner than it is now. It’s set to 1 px
Oh ok it's stange because it's like 2 pixels width when watching it in Photoshop
That could be a UITK thing. With UITK it assumes a standard screen dimensions (1920 x 1080) and then scales the mod based on the actual screen size so that the percent of screen consumed is always the same. With that, the smallest I can make a border is 1 px, but on some screens that may scale up to 2. However with your IMGUI approach you create an image for the background texture, then scale it (perhaps down) to fix in the rect you're displaying it in. I can see where a larger higher resolution background image with a 2 px border might end up looking like it's got a slimmer border when scaled. This is just a theory though.
Here's a shot an getting closer to a common look
I was trying to sample in photoshop off of one of your images, and I may have gotten it slightly wrong. I think the purple borders may still look just a shade too bright in FP. I think I'll also want to tweak the horizontal line between the tabs buttons and the tab content to align better with your design. It looks like that's just a bit too thin and too wide in FP
The color match may not be perfect yet, but I think I've got the height of the title bar dialed in, and also the slightly heavier horizontal line is matching pretty well in thickness (I've got 2px now, 3 seemed to much and 1 to little). I may have that horizontal line just a bit too wide relative to what K2D2 is using, but it's closer now.
To be honest, I'm liking the tab highlighting I've got now better even though it's quite different from what K2D2 has. This aligns with what the FP buttons do as well.
The font in FP, OTOH, just plain sucks. The K2D2 fonts are altogether better. Which font are you using? I think I may be able to change to match yours relatively easily in UITK. I'm speaking here of the general font used for the buttons, though the font you've got in the tile is really quite nice too! I might want to copy that too unless you feel that would be borrowing too much.
Messing around with fonts... This is Arial at 16pt
Seems a tad big, though 14 seemed to small, and nothing I do seems to be affecting the text input fields.
Maybe it's not the font size, but the font color that's off?
Also, I'm having a real problem with the warp to SOI. Is it possible to configuire that? The SOI + 1 minute invariably overshoots when I'm coming into a planetary SOI. It didn't stop warping until I was nearly out of the Moho SOI, and I just used it again on entry to Duna where it whipped me right past the Pe. In the second instance I paused the game before I got the the SOI and tried to tell K2-D2 to stop, but when I unpasued it sped right past the SOI boundary again.
The Warp to SOI is a really great feature, but I think it needs a little fine tuning or at least some way for the user to configure it.
@noble night . pretty good progress in the ui. The font i used for simple button and text is only arial. As you found it.
Excellent rendering !!! Except perhaps the gray background of buttons. I'll try a dark purple to fit with global colour
The warp to soi does not work perfectly. I've found many troubles in different situation. I really need to enhance this. And thanks for the typo. I'll correct that
@glass depot have you looked at how the game does a WarpToNode? I assume you probably have, but I'm wondering what would happen if you did a WarpToSoi that worked like this?
public void WarpToSoi(double SoiTime)
{
if (GameManager.Instance.Game.ViewController.TimeWarp.IsAutoWarpEngaged)
return;
GameManager.Instance.Game.ViewController.TimeWarp.WarpTo(SoiTime - 30.0);
// this._warpingToNode = true;
}```
Is is poking around in ManeuverPlanComponent, which also has a _warpingToNode. I don't know if you'd ned to mimic that too, but you might. OnFixedUpdate does this with that
if (this._warpingToNode)
this._warpingToNode = GameManager.Instance.Game.ViewController.TimeWarp.IsAutoWarpEngaged;```
I've tried the standard auto warp. Without much success. The real point on warp to soi, is that the way i detect soi changes is not good. I currently use the patch conic changes. And sometime the order is not good and my warp time is detected to the soi change after.... Leaving the entering of soi..
What are you looking for specifically with the patches? There is patch.closestEncounterBody.Name (only when there is an encounter, ofc, otherwise closestEncounterBody = null), patch.closestEncounterLevel, patch.PatchStartTransition, and patch.PatchEndTransition. These are all accessed in MNC now and displayed as an aid to planning maneuvers. I suspect the thing you need is closestEncounterLevel and there I think SoiIntersect1 is the entry and SoiIntersect2 is the exit.
In the encounter shown above there are three patches in the patch list. The first goes from LKO to the Mun encounter with a PatchStartTransition of EndThrust, a PatchEndTransition of Encounter, a closestEncounterBody.Name of Mun, and a closestEncounterLevel of SoiIntersect1. The second patch is the hyperbolic Munar orbit and it has a PatchStartTransition of Encounter , a PatchEndTransition of Escape, a closestEncounterBody of null and a closestEncounterLevel of None. The third patch is the new Kerbin orbit and it has PatchStartTransition of Escape , a PatchEndTransition of Final, a closestEncounterBody.Name of Mun, and a closestEncounterLevel of SoiIntersect1.
So, I think the Soi Entry should always have a level of SoiIntersect1 and you'll want of course the patch.EndUT, whereas the Soi Exit should always have a level of SoiIntersect2 and you'll want patch.StartUT for the time.
For the above encounter,
[Info :Maneuver Node Controller] Patch 0: Start EndThrust @ 17,605.924, End Encounter @ 35,817.752, Encounter: Mun (SoiIntersect1)
[Info :Maneuver Node Controller] Patch 1: Start Encounter @ 35,817.752, End Escape @ 50,633.456
[Info :Maneuver Node Controller] Patch 2: Start Escape @ 50,633.456, End Final @ 352,490.116, Encounter: Mun (SoiIntersect2)
[Info :Maneuver Node Controller] Patch 3: Start Final @ 352,490.116, End Initial @ 352,490.116
So, it looks like you could take your pick for where to get the time for the SOI entry as either the SoiIntersect1 end (patch 0 in this case), or the following patch's start, and likewise you could take the time for the SOI exit as either the transiting patch's end of the start of the SoiIntersect2 patch.
Excellent. I didn't find how to make the difference between patches end types
Digging a little deeper, there are also the patch parameters UniversalTimeAtSoiEncounter, timeToTransition1, and timeToTransition2 When I add these to the diagnostic output I'm seeing this with a Munar collision trajectory
[Info :Maneuver Node Controller] Patch 0: Active True, Start EndThrust @ 17,610.489, End Encounter @ 32,791.734, Encounter: Mun (SoiIntersect1)
[Info :Maneuver Node Controller] Patch 0: SOI Encounter 32791.7339145451, Transition1 22251.0295047122, Transition1 37033.1383509635
[Info :Maneuver Node Controller] Patch 1: Active True, Start Encounter @ 32,791.734, End Collision @ 37,960.819
[Info :Maneuver Node Controller] Patch 1: SOI Encounter 0, Transition1 0, Transition1 0
[Info :Maneuver Node Controller] Patch 2: Active False, Start Collision @ 37,960.819, End Initial @ 37,960.819
[Info :Maneuver Node Controller] Patch 2: SOI Encounter 0, Transition1 0, Transition1 0
In this instance there's just one node, and patch[0] is the patch resulting from that node, so straight away it's giving the SOI encounter time
Modifying the orbit slightly so that we fly by the Mun I get this
[Info :Node Manager] SpitNode: Node[0] [Info :Node Manager] BurnDuration: 85.5212382604975 s [Info :Node Manager] BurnRequiredDV: 632.607438896382 m/s [Info :Node Manager] BurnVector: [7.5931179572132, 106.308219698723, 623.5648151806] = 632.607438896382 m/s [Info :Node Manager] CachedManeuverPatchEndUT: 0 s [Info :Node Manager] IsOnManeuverTrajectory: False [Info :Node Manager] ManeuverTrajectoryPatch: [Info :Node Manager] NodeID: 2df6b976-0250-435e-80d1-23b378fc3ff7 [Info :Node Manager] NodeName: Maneuver Node [Info :Node Manager] RelatedSimID: 89e1cdb0-2b9b-436d-a47a-00e1fa1bd692 [Info :Node Manager] SimTransform: KSP.Sim.impl.TransformModel [Info :Maneuver Node Controller] Patch 0: Active True, Start EndThrust @ 17,608.535, End Encounter @ 35,822.484, Encounter: Mun (SoiIntersect1) [Info :Maneuver Node Controller] Patch 0: SOI Encounter 35822.4844303862, Transition1 24389.6679114655, Transition1 24389.6679114655 [Info :Maneuver Node Controller] Patch 1: Active True, Start Encounter @ 35,822.484, End Escape @ 50,637.147 [Info :Maneuver Node Controller] Patch 1: SOI Encounter 50637.1471748878, Transition1 14814.6627445017, Transition1 0.00262945734903042 [Info :Maneuver Node Controller] Patch 2: Active True, Start Escape @ 50,637.147, End Final @ 357,488.839, Encounter: Mun (SoiIntersect2) [Info :Maneuver Node Controller] Patch 2: SOI Encounter -1, Transition1 265887.578807432, Transition1 297429.66029041 [Info :Maneuver Node Controller] Patch 3: Active False, Start Final @ 357,488.839, End Initial @ 357,488.839 [Info :Maneuver Node Controller] Patch 3: SOI Encounter 0, Transition1 0, Transition1 0
If I add an (unnecessary) node after the first one but before the encounter then I get this
[Info :Maneuver Node Controller] Patch 0: Active True, Start EndThrust @ 17,608.535, End Maneuver @ 18,680.776, Encounter: Mun (SoiIntersect1) [Info :Maneuver Node Controller] Patch 0: SOI Encounter 35822.4844303862, Transition1 24389.6679114655, Transition1 24389.6679114655 [Info :Maneuver Node Controller] Patch 1: Active True, Start EndThrust @ 18,680.777, End Encounter @ 35,822.482, Encounter: Mun (SoiIntersect1) [Info :Maneuver Node Controller] Patch 1: SOI Encounter 35822.4819213361, Transition1 23317.4260151888, Transition1 23317.4260151888 [Info :Maneuver Node Controller] Patch 2: Active True, Start Encounter @ 35,822.482, End Escape @ 50,637.146, Encounter: Mun (None) [Info :Maneuver Node Controller] Patch 2: SOI Encounter 50637.1456040215, Transition1 14814.6636826854, Transition1 0.00513851287541911 [Info :Maneuver Node Controller] Patch 3: Active True, Start Escape @ 50,637.146, End Final @ 357,489.147, Encounter: Mun (SoiIntersect2) [Info :Maneuver Node Controller] Patch 3: SOI Encounter -1, Transition1 265887.908488285, Transition1 297429.969402955 [Info :Maneuver Node Controller] Patch 4: Active False, Start Final @ 357,489.147, End Initial @ 357,489.147 [Info :Maneuver Node Controller] Patch 4: SOI Encounter 0, Transition1 0, Transition1 0
So, now I'd have to say UniversalTimeAtSoiEncounter may be the right thing to use as the patch start and end times deal with where you've placed nodes, and there could be a node between you and the next SOI, but then would you ever want to warp past a node?
The interesting thing above I think is that both patch[0] and patch[1] give the same SOI encounter time (as they no doubt should), and that the next SOI encouter time is of course the start of the SoiInterset2 encounter patch. I'm not certain what the game intends to convey with a UniversalTimeAtSoiEncounter == -1 other than perhaps there are not any further SOI encounters to be had.
Hey @glass depot, KSP2 0.1.4 has broken your lovely mod!
[Error : Unity Log] MissingMethodException: double KSP.Sim.impl.UniverseModel.get_UniversalTime()
Stack trace:
K2D2.Models.ControllerManager.UpdateControllers () (at <c38f12f436a549bf9677b89ecdda803d>:0)
K2D2.K2D2_Plugin.Update () (at <c38f12f436a549bf9677b89ecdda803d>:0)
[Error : Unity Log] MissingMethodException: double KSP.Sim.impl.UniverseModel.get_UniversalTime()
Stack trace:
K2D2.Models.ControllerManager.UpdateControllers () (at <c38f12f436a549bf9677b89ecdda803d>:0)
K2D2.K2D2_Plugin.Update () (at <c38f12f436a549bf9677b89ecdda803d>:0)
[Error : Unity Log] MissingMethodException: double KSP.Sim.impl.UniverseModel.get_UniversalTime()
Stack trace:
K2D2.Models.ControllerManager.UpdateControllers () (at <c38f12f436a549bf9677b89ecdda803d>:0)
K2D2.K2D2_Plugin.Update () (at <c38f12f436a549bf9677b89ecdda803d>:0)
You probably only need to change all the instances of 'UniversalTime' to be 'UniverseTime'.
Is your GitHub repo uptodate otherwise?
I tried a sync of my fork with your master, then made the necessary change, but I get this result when I build. I suspect this means there's something maybe not quite write with the master or with my fork of the master
hy @noble night thanks for the correction try
the error you get are all from the line I draw for the docking. I can remove this lines for the moment to deliver a new version
No need! Munix sorted me out. All I needed was to put another game DLL in external_dlls folder and it built perfectly. If your master branch is otherwise up to date then you can merge my PR and it will build for you too as you no doubt also have this DLL available (and of course not on your repo).
I basically have a working copy of your master branch on my local fork now and it seems to launch just fine, which it previously would not do in 0.1.4
Ahhh! I see your other post in https://discord.com/channels/1078696971088433153/1078841771771056280. Now I understand why you want to remove that part. Yes, of course that makes sense for now.
Discord
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.
great i'll accept your MR. by the way do you know the dll name that is needed to be in external_dlls ?
Yep. ShapesRuntime.DLL: #🔴mod-dev message
Possibly, I literally just dropped that DLL into the folder and it built with no issues. It was late so I didn’t look too closely
My pleasure! It was a very easy fix, and I don't want to fly without K2-D2 so...
Any chance that K2D2 could get a more sophisticated lift maneuver with gravity turn support?
There's a few different examples out there, including linuxgurugamer's Gravity Turn Continued at https://github.com/linuxgurugamer/GravityTurn
Thanks for the link. I didn't have it
I'll have a look to see if it i can integrate it
@noble night i've corrected the warp to soi. I just didn't get the righ soi time
This is exciting! Very exciting! I will download this and try it now!
Hello there, I just wanted to let you know that we're now archiving this forum due to it being redundant, and all mod threads should now be moved to #1078701690762571866. Ideally, to make navigation between old and new threads as smooth as possible, the last message in this thread should contain a link to the new thread, and the first message in the new thread should contain a link to this one. Thanks for understanding! @glass depot (There is a possibility a thread for this mod may already exist in #1078701690762571866, please check first before making a new one!)