#Space Warp
1 messages Ā· Page 2 of 1
If you want a bug to be fixed, at least respond civilly to someone who is actually investigating the bug
im civil until ppl start gaslighting me
How are they gaslighting you?
first he pretends the issue doesnt exist, now he claims he spent the last 2 hours investigating a single method call
we were confused about what BepInEx issue you were talking about
did you even read the reply?
then he said the issue he has been looking at may or may not be related to BepInEx, not that it is a BepInEx issue
he does not know
He never pretended the issue didn't exist, he was just saying he wasn't sure if it was a bepinex issue, or spacewarp doing something wierd that bepinex does not like,
because he hasn't found the cause
also I've spent way more than 2 hours at a time on debugging a single method call
more than a single work day sometimes
does it mean I'm gaslighting my employer?
gaslight away
They actually just left the server over this?
anyway...
This is the dumbest thing I've seen?
A critical misunderstanding of how debugging works
omg that actually made me lol for real
also I don't understand feeling entitled to getting a random person who's not the author/contributor of the library to debug your code ASAP
Well, they didn't ask, I took it upon myself
but I know I missed the start of the conversation so I don't presume to know the context
idk what his problem was but me: im just unhappy about having to use BepInEx and tons of changes Im going to have to do.
I'd be happy to help yo umake the conversions, it really shouldn't be a ton of stuff if most of SW doesn't change
it doesn't seem like there should be "tons" of changes if this is done right though
mostly just file structure and initialization base class/attributes
I converted StageInfo over, and bootstrapped a lightweight SW for what it was using, if I could compile it, or anything else for that matter, it should work
Honestly I still don't understand why they left the server
we are all gaslighting them </s>
I'm still gonna try to figure this out, this is maddening
can't worry too much about every random person and their feelings
idk twiner i'm currently deleting half of the library 
lol careful someone might take that seriously
i mean
okay well sure, but the end result is, you move stuff out of the Initialized Method into, Awake, or start, wherever is appropriate, and you replace the ModAttribute with a BepInPluginAttribute
from a mod dev perspective
right?
like, call me out if I'm wrong
is there a need to get rid of the logging interface?
oph, I was wrong, I left out inheriting from BaseUnityPlugin instead of Mod
could it perhaps be just a pass-through thing to BepInEx/whatever else, in that case?
I mean, you could but you'd just be adding a layer that doesnt' need to be there except for a small amoutn of backwards compat, but thats being discussed on the github issue
yeah I guess you can't please everyone
some people will want it as clean as possible, some as BC as possible
perfect world, I dont have to change anything.
I mean a harsh reality is, if people are gonna be upset about the BC here, then they are going to have a bad time for the rest of the year
BC?
Oh I realized that immediately
also, we're literally on the first EA release, chances are, some of the API mods use today will be already obsolete in weeks/months
so change is inevitable with the state of the game
its literally day 5?
very much the reason why the collective KSP 1 Modders forum post said what it said: it's too early for them to commit to modding, since everything will break anyway
So, lets break stuff
For one the vets didnt all sign that post, a handfull of well respected moders did. there are many veterans here, already using spacewarp to. Also...can someone explain to me why the vets asking the devs to hurry up with official modding support has anything to do with us changing to beepinex. I mean....they still just want official support, neither version matters to them. This whole arguement is silly. Question: What does switching to beepinex offer me as a mod developer?
A well maintained and tested loader
More abstractions for things such as prepatching and such iirc
Some other abilities as well
Ability for bepinex mods (which already exist in number) to use space warp abstractions
nothing as spacewarp and BepInEx already work together. its a pointless update thats just made to cause issues (as I see it)
it was a reaction to this but whatever š
Just made to cause issues? How so
the change is going to break everything #1079531175380521043 message
It's not going to be too hard to convert mods...
and follow up question, Why would i still use spacewarp as a dependency and deal with all our recompiles and such after. I just want it put into the explain like im 5 words. Because if the answer is just a library for a quick add part method and some (slightly ) easier gui (like one harmony patch easier) gui stuff...Im not sure why id use it, and ive been developing the thing
they don't "work together" in any capacity, they just aren't incompatible at best
at worst, the way it's done now might actually be breaking stuff for some people, as seen from the many posts throughout the server
Because there will be more abstractions in the future.
The exact same reason space warp was being used.
so our plan than is to essentially try to be the common api between modders and beepinex for ksp?
Space warps only selling point was its abstractions
Yes
why try to reinvent the wheel (dll loading/patching) when you can focus on the game-specific stuff
and use an established library for the loading
would there be a unified intallation/loading method for vanilla bepinex plugins and plugins that use spacewarp?
It's the same way of installing bepinex plugins as it is right now
well at least they'd go in the same folder and people wouldn't have to ask which one to use
spacewarp would just be another beepinex mod you add that is a dependency of yours.
so whats the point of spacewarp then?
This has been answered no less than 3 times already
To provide KSP 2 specific abstractions for mods to use
so that you have one library to do pretty much everything you need to do in KSP in terms of modding, instead of needing to rely on private classes and functions within KSP2's code
if you're complaining about migrating, keep in mind it's like 5 lines of code
as a community-maintained unofficial KSP 2 API without having to rely on game devs and their release schedule to fix the API
I wasnt supposed to do that with spacewarp?
here are some examples of other games with the same strategy:
https://thunderstore.io/package/tristanmcpherson/R2API/
https://valheim.thunderstore.io/package/ValheimModding/Jotunn/
https://inscryption.thunderstore.io/package/API_dev/API/
Jƶtunn (/ĖjÉĖtŹn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
also whenever a KSP API that has a SpaceWarp abstraction changes, you just need to update one library, not XYZ mods
Thats what we are trying to get closer and closer to
those are all bepinex mods that provide APIs for other mods to use
And this makes it easier for that to be done
I mean...were basically a harmony mod that provides an api for others to use already. That is our strategy ,this is just a backend change. Spacewarp kind of always was a common api, it just needed to load itself first.
yeah
thats the point
It also gives more direction to space warp project so we aren't doing two things at once
also, as a point for why not have two concurrent mod loaders: just read through the forums and see how many confused users there are who don't know whether to install one or the other, or both, and how, and which mods to put into which folders, and why all that is necessary
same even here
in the Discord
I answer like 10 of these questions daily
and we're just at the start
I think this is kind of a no-brainer. In terms of pure mod loading spacewarp offers nothing over an established mod loader. The utility always came from game-specific abstractions / api.
Exactly.
It's why its been brewing in my mind since 0.2.5
In other words, the sum is better than its parts
I would clone or copy https://github.com/BepInEx/BepInEx.ConfigurationManager
yeah I honestly don't see any really good reason for keeping it the way it is other than backwards compatibility
and that doesn't seem like a strong enough argument considering the pros of the other way
It also say gives us easy access to a well built configuration system, and GUI that can easily be skinned with our space warp stuff for one point in its favor
Oh, and some bepinex stuff allows for hot code reloading (don't know how easy it is to use though)
@pastel urchin - A person ahead of their time
#āmod-support message
ez with unity explorer
oh my devils
ok so basically
bepinex but with the spacewarp features
amazing
SpaceWarp as a dependency that bepinex mods can use\
ic
@sacred jaspercompletely through bepinex
i have since fixed the UI skin, it seems to be loading a bit too late for some reason? so I'm just grabbing it constantly now 
@little bay Please fork/pull when you get up so we can review š
Great job last night
@little bay is it ready to be pulled in?
Did you get ExampleMod to compile?
Custom flags works with it, dunno about example mod
Other thing we should do is write up a conversion document before we make the first prerelease with this
@lime plaza to bring the question here
Why would introducing a png loading system introduce technical debt
The proper process is to use an asset bundle, this is a shortcut used to decrease TTM, the definition of tech debt. I understand there are mods for whom that is their only icon, but there will be mods for which that is not the case, and they will still use it.
I'm going to stop pushing against it, but I'd like it marked obsolete, or at the very least, where its mentioned in tutorials, mention you can load from an asset bundle, because the current one just says "use this function" with no explanation.
That is a semantic argument
Oh I was definitely gonna highly recommend using asset bundles if we used it
Also I'm unaware of the acronym TTM?
Time to market
Thank you
I somewhat agree, but the asset loading system was already being designed with more than asset bundles in mind
Its the reason we have
assets/bundles
vs
assets/x.bundle
Iām also worried about having a mod who decides loading their icon every frame is a good idea
Why in the name of fuck would any mod do that...
Also all assets are preloaded with the asset system
So if we add an assets/images folder, it will preload all the assets
āLemme just pass this icon into this render functionā
Iām already concerned about the amount we load for the user
You would have to lack the most basic understanding of computer storage and memory to do that
Explain?
I donāt disagree
Just feels off to have āhere are the 50 folders you can put stuff into that we will load from automaticallyā
Also, specifically for the icons, you will need a way to find a reference to them
Was going to be added into the AssetManager
mod_id/images/icon.png or something like that
I have no idea how that system works
It essentially caches all loaded assets into a dictionary lookup with a path of
mod_id/(bundle_name)/(path in bundle without assets/bundle_name) for bundles
And then
mod_id/images/(image path) if we are going to add image loading
It would make my mod simpler lol
lol yeah
But its meant to make asset referencing extremely simple (and fast)
The only issue with assets is that they must all derive UnityEngine.Object at the moment, which I suppose is fair
@lime plaza would you agree now that you understand it slightly better that it is a useful abstraction
Contribute to Windows10CE/SpaceWarp development by creating an account on GitHub.
@rancid silo you were asking about harmony infixes at some point, this is how they are done
thnx
Hmm, there are some ways you could build assetbundles st runtime, im not sure how viable it is
But for stuff like loading flat icons. It might be doable to have SW build a master bundle any time icons are loaded by it, so that future loads can take less time, as its more efficient to load 1 bundle than N pngs
if anything, I think it'd be most helpful to have an easy way to build bundles without requiring full Unity install
not sure how viable that is though
Out of the box, I'm not sure that there is anything that is easy, but there are ways
If you're just loading some images into a bundle, thats one thing
If you're trying to compose assets and put those into a bundle its just complicated
And you're much better off using unity
it would definitely help for the "icon problem"
Tbh, images might even present some issues, I'd have to dig into it
how problematic even is loading at most like a few hundred 24x24 pngs without using bundles?
I'm thinking of the problem at scale so each of those reads carries a lot fo overhead, if you're ONLY dealing with those 100 to 200 images, then you're not going to suffer much, but realistically, you're loading a bu ch of other bundles, maybe other file types
It adds up quick and each individual read carries rhat overhead
For players with a lot of big mods you're going to quickly reach ksp1 load timea
yeah I guess it's difficult here to draw the line between ease of use and performance
So the name of the game is, reduce the number of reads
In a perfect world, all mods pack everything into addressable bundles and those bundles are loaded when needed, and unloaded when not
But you cant realistically expect all mod devs to make the right choices on when those times are, nor that they will use addressable bundles over plain old assetbundles
That sounds interesting, so do the (I presume) memory requirements outweigh the need to possibly load some resources in and out repeatedly (e.g. on scene changes)?
So the next best thing is for SW to let mods load icons from disk via SW, but then behind the scenes, instead of loading the icons from disk, you cache a list of icons and compare them to the current cached bundle.
If there's new additions, you update the bundle with those additions and then just load the bundle instead and provide a way through SW to retrieve those icon sets
I'm not really sure i understand your question.
Loading and unloading addressable bundles would lower memory requirements, but increase certain delays
yeah that's what i meant
You can see this in ksp2 constantly
Within the VAB when you grab a part you haven't yet used on your vehicle, and you see the pink box, thats PROBABLY addressables getting loaded
Interesting, I never knew that
Therer is also bugs there
Edited because, I haven't actually inspected the code, but its the most likely thing I see as happening there
There seems to be a bug specifically on SpaceWarp for BepInEx where people get all procedural parts not loading in and they stay as the pink boxes
Yeah, I believe that's because of that ReflectionTypeLoadExcepti9m that occurs during plugin loading
But I haven't setup my debugging configuration yet, so I can't actually investigate, and yall are moving away from that anyways
yeah
it doesn't make too much sense to spend a lot of time working with the current version while the switch is happening
I'm holding off on writing my mod, too
even though the changes should be minimal
@little bay I am going to mark your pr as ready to review, and pull it in so I can start working on stuff
it compiles, doesn't run properly
I know why
but tbf I don't think it ever did?
also, the only reason LoadIcon got thrown into the void is because i didn't know where to put it
it was a really dumb method too
I'm doing it better
like loading images is... fine
Is it going to require more lines of code from the author than SpaceWarpManager.LoadIcon()?
but the way it did it was bad
it should require more than that
"icons" are not standard within SpaceWarp to my understanding
icon.png is not a convention
whoever wrote this code
Ā Ā Ā Ā publicĀ staticĀ SpriteĀ LoadIcon(intĀ sizeĀ =Ā 24)
Ā Ā Ā Ā {
Ā Ā Ā Ā Ā Ā Ā Ā stringĀ folderPathĀ =Ā Path.GetDirectoryName(Assembly.GetCallingAssembly().Location);
Ā Ā Ā Ā Ā Ā Ā Ā returnĀ LoadIcon(Path.Combine(folderPath,Ā "icon.png"),Ā size);
Ā Ā Ā Ā }
just kinda came up with that I think
yes, but what's wrong with that?
I'm not trying to defend it btw, three people have said they don't like it so it's fair enough, I just don't understand
if SpaceWarp does something like this it should be standard to always have an icon.png in the root
well it's in the tutorial
It's gonna be a more general integration with the asset manager, adding image loading to the asset manager, so you can put the asset in assets/images
No creation of asset bundles
(I also almost never like using GetCallingAssembly, but maybe that's just me)
how would the mod author retrieve the sprite?
It'll be a texture 2D, I can provide a function for creating an Icon from a sprite
wouldn't this be more sustainable? #1079531175380521043 message
That's a complex thing to add?
Also again, space warp caches assets (that aren't using addressables) internally in memory
Something that likely could be changed in the future to cache into an asset bundle without breaking any of the API
yeah I guess since the public API wouldn't need to change, it isn't a priority
I rather meant how is the mod author going to retrieve the texture
and an overload of that function that performs the sprite creation would be preferable to providing a texture to sprite function
that's already a one line thing
The problem with storing it as a png, is that its a better idea to load it as a texture2d and cache that then convert it
how much better?
And I can overload the toolbar functions that convert a texture2d to a sprite
// Register the mod's button on the SpaceWarp application bar.
Toolbar.RegisterAppButton(
"Example Mod",
"BTN-ExampleMod",
// Example of using the asset loader, were going to load the apps icon
// Path format [mod_id]/images/filename
// for bundles its [mod_id]/[bundle_name]/[path to file in bundle with out assets/bundle]/filename.extension
// There is also a try get asset function, that returns a bool on whether or not it could grab the asset
AssetManager.GetAsset<Texture2D>($"{SpaceWarpMetadata.ModID}/images/icon.png"),
ToggleButton
);
@alpine tendon inline icon generation
Very nice š
// This requires an `icon.png` file to exist under [plugin_folder]/assets/images
<@&1078770539688112168> <@&1079271050644303922> the experimental-bepinex-library branch is the branch for submitting prs for the bepinex conversion, it currently contains a working conversion to bepinex
Do we want to just expose those icons as addressables to ease the transition to an addressable if the mod acquired one?
We likely want to expose our own caching system to addressables yes
That would make GetAsset redundant
Yes, it would
So we should work on that soon
Iām tempted to try my hand at harmony patching and make lang data loading not dumb as hell
Go for it
Wonāt be until Tuesday at the earliest, Iām out of town for a robotics competition
Fair enough
@lime plaza in the src for custom-flags you have a package reference to "E:\Programming\KSP2\SpaceWarp\SpaceWarp\SpaceWarp.csproj"
Which also has a reference to KSP.game; and KSP.Modding;
What are those references? Trying to compile and it's giving me namespace errors
Have fun at the comp!
they are part of ksp2. you will find them inside of Assembly-CSharp.dll
@sacred jasper I tried building the experimental branch and the ExampleMod project to test if it loads, and while I do get Pre-initialization for plugin ExampleMod and Post-initialization for plugin ExampleMod, it doesn't show up in the mod list and does not seem to call OnInitialized
LateUpdate does get called fine
and this happens with procedural parts, similarly to the previously existing SpaceWarp BepInEx plugin builds
odd that you wouldn't get initialization
again the ReflectionTypeLoadException
init and postinit are literally added right next to each other
could you send the whole stacktrace
(also the mod list is completely broken currently, that's why it didn't show up)
sure, there are these two distinct ones for the OAB bug
Its my belief that fixing this exception will fix the procedural wings issue
(and this is what I mean by "right next to each other" https://github.com/SpaceWarpDev/SpaceWarp/blob/experimental-bepinex-library/SpaceWarp/Patching/BootstrapPatch.cs#L55-L63)
huh, yeah that is weird
Initialize might be throwing an error
I'll fix this in a few hours
Tell me where and I'll fix it soon
I'm going to have to search for GetTypes usages in ACS to make sure I fix them all
Iām symlinkjng my mod into the space warp solution, so relative pathing doesnāt work, thatās just the path to the space warp csproj file
you can see where I fixed one already https://github.com/SpaceWarpDev/SpaceWarp/blob/experimental-bepinex-library/SpaceWarp/Patching/FixMessageDiscovery.cs
Well there's your problem
Those should all be wrapped in a try catch for RTLE
I was going to make it an OptIn thing
like ror2 has
but yeah it should also do that
thank you for reminding me
Same with the KSP.Game stuff?
It's not referenced in the SpaceWarp references ;;
Thatās referencing dlls copied from the game into external_dlls
TY
Damn, building against the dev branch of sw
gotta live on the edge
I have been thinking about clickthroughblocker, and I think the best option is to have it compiled as a BepInEx plugin that space warp depends on
Yeah that's pretty much one such part of the modular library system I was mentioning yesterday
it makes sense to have it separated
It needs to be due to licensing
oh you're going to be doing a rewrite of the original?
makes sense tbh, no need to reinvent the wheel
Yeah
What I am currently working on\
For now its a UnityEngine.Event
I am thinking of changing it to a type of action
I need some kind of multicast action for that though
@little bay what would you recommend
Hot dayum though, KSP has a lot of states
uhhh that kinda depends
I actually want to provide an argument too
how do you want this to work exactly
I want this to be something that mods can subscribe to with a function that takes a GameStateEntered/ExitedMessage parameter
Essentially I'm splitting out the event handling that KSP provides into a bunch of separate events for mods to handle/subscribe to
I mean, you could literally just have
public static event System.Action<GameStateEnteredMessage> MainMenuStateEntered;
then you just invoke it (in the same class) with MainMenuStateEntered?.Invoke(enteredMessage); and it will invoke all the subscribed delegates
Gotcha
you can just make internal methods that invoke the events to invoke them from elsewhere though
Kinda a jank way of doing this I think but
internal static void OnGameStateEntered(MessageCenterMessage message)
{
GameStateEnteredMessage msg = message as GameStateEnteredMessage;
switch (msg!.StateBeingEntered)
{
case GameState.Invalid:
InvalidStateEntered?.Invoke(msg);
break;
case GameState.WarmUpLoading:
WarmUpLoadingStateEntered?.Invoke(msg);
break;
case GameState.MainMenu:
MainMenuStateEntered?.Invoke(msg);
break;
case GameState.KerbalSpaceCenter:
KerbalSpaceCenterStateEntered?.Invoke(msg);
break;
case GameState.VehicleAssemblyBuilder:
VehicleAssemblyBuilderEntered?.Invoke(msg);
break;
case GameState.BaseAssemblyEditor:
BaseAssemblyEditorEntered?.Invoke(msg);
break;
case GameState.FlightView:
FlightViewEntered?.Invoke(msg);
break;
case GameState.ColonyView:
ColonyViewEntered?.Invoke(msg);
break;
case GameState.Map3DView:
Map3DViewEntered?.Invoke(msg);
break;
case GameState.PhotoMode:
PhotoModeEntered?.Invoke(msg);
break;
case GameState.MetricsMode:
MetricsModeEntered?.Invoke(msg);
break;
case GameState.PlanetViewer:
PlanetViewerEntered?.Invoke(msg);
break;
case GameState.Loading:
LoadingEntered?.Invoke(msg);
break;
case GameState.TrainingCenter:
TrainingCenterEntered?.Invoke(msg);
break;
case GameState.MissionControl:
MissionControlEntered?.Invoke(msg);
break;
case GameState.TrackingStation:
TrackingStationEntered?.Invoke(msg);
break;
case GameState.ResearchAndDevelopment:
ResearchAndDevelopmentEntered?.Invoke(msg);
break;
case GameState.Launchpad:
LaunchpadEntered?.Invoke(msg);
break;
case GameState.Runway:
RunwayEntered?.Invoke(msg);
break;
case GameState.Flag:
FlagEntered?.Invoke(msg);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
I subscribe to these in bootstrappatch
might be a bit more readable at least with a dictionary?
i can make a GameInstanceAvailable event
so we don't start throwing a ton of shit into bootstrap patch
Likely a good idea let me just make this PR first
Compiled new SW and new example mod, neither show up for me 
Still in progress
Where are we at, I have the latest PR
But I'd check the logs
I can certainly help
@little bay @visual marlin I pushed through my changes if either of you want to work on stuff
Thank you!
And both are in their own folders in bepinex/plugins?
They won't show in the mods UI btw, that's currently busted
newest version of spacewarp.dll removes all my UI and sound?
No?
It's not meant to
not on my machineā¢ļø
Anyone able to hop in vc and make sure I'm not insane?
I'm busy right now with family
No worries, anyone can do it
fetch the experimental-bepinex branch, pull it into VS2022, build it
Then I put the .dll in BepInEx\Plugins\SpaceWarp
BepInEx logs?
Pulling it now with screenshot too
[Message: BepInEx] BepInEx 5.4.21.0 - KSP2_x64 (2/24/2023 7:00:36 AM)
[Info : BepInEx] Running under Unity v2020.3.33.9525882
[Info : BepInEx] CLR runtime version: 4.0.30319.42000
[Info : BepInEx] Supports SRE: True
[Info : BepInEx] System platform: Bits64, Windows
[Message: BepInEx] Preloader started
[Info : BepInEx] Loaded 1 patcher method from [BepInEx.Preloader 5.4.21.0]
[Info : BepInEx] 1 patcher plugin loaded
[Info : BepInEx] Patching [UnityEngine.CoreModule] with [BepInEx.Chainloader]
[Message: BepInEx] Preloader finished
[Message: BepInEx] Chainloader ready
[Message: BepInEx] Chainloader started
[Info : BepInEx] 1 plugins to load
[Info : BepInEx] Loading [Space Warp 0.4.0]
[Message: BepInEx] Chainloader startup complete```
Is your main menu empty?
That's extremely odd
No sound either
Ksp2 log?
I am going to clear everything, validate files, then check again real quick
Validate and load only BIE, works just fine.
Add the SpaceWarp.dll file and the same thing - no sound and no menu
Ksp2.log
KSP2.log: ```
[LOG 14:56:50.318] [System] ******* Log Initiated *******
OS: Windows 11 (10.0.22621) 64bit
CPU: AMD Ryzen 9 3900XT 12-Core Processor (24)
RAM: 32692
GPU: NVIDIA GeForce RTX 3080 (12107MB)
SM: 50 (Direct3D 11.0 [level 11.1])
RT Formats: ARGB32, Depth, ARGBHalf, Shadowmap, RGB565, ARGB4444, ARGB1555, Default, ARGB2101010, DefaultHDR, ARGB64, ARGBFloat, RGFloat, RGHalf, RFloat, RHalf, R8, ARGBInt, RGInt, RInt, BGRA32, RGB111110Float, RG32, RGBAUShort, RG16, BGRA10101010_XR, BGR101010_XR, R16
Log started: Thu, Mar 02, 2023 14:56:50
That's the entirety of it?????
Yup
Just freezes, no loading screen either
It never shows the loading bar "pumping dres" etc
@little bay I think we might have messed something up in the harmony patching
I had that same thing happen a while ago
Finally, a contribution š
it was like at 0.2
when messing around with the BepInEx plugin
had no idea how to fix it, deleted BIE and SW and installed both again and it somehow fixed itself
Great, a heisenbug
@wicked wyvern You said you compiled the latest version of SW?
actually I might be missing the latest commit, let me try again
why would the harmony patching do that
This one please
The game state bootstrap is broken from what I think
I think so -- these are missing from the KSP2.Log immediately after the freeze
[LOG 15:01:58.293] Command Line Args:G:\Steam\steamapps\common\Kerbal Space Program 2\KSP2_x64.exe
[LOG 15:01:58.922] [UI] Primary EventSystem Selected: 'GameManager'(instance id: 205062)
[LOG 15:01:58.925] [UI] Localization sources updating
[LOG 15:01:59.065] [UI] Localization sources updating
[LOG 15:01:59.073] [System] Set Loading Optimizations completed in 0.0007s.
[WRN 15:01:59.245] [Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information. SteamManager
[LOG 15:01:59.447] [System] Creating Game Instance completed in 0.3692s.```
Maybe has something to do with this?
SpaceWarp.Patching.BootstrapPatch+<>c.<PatchInitializationsIL>b__1_2 () (at <e9e72329d0674f39be44a94b85a7f415>:0)
(wrapper dynamic-method) KSP.Game.GameManager.DMD<KSP.Game.GameManager::StartBootstrap>(KSP.Game.GameManager)
(wrapper dynamic-method) KSP.Game.GameManager.DMD<KSP.Game.GameManager::Awake>(KSP.Game.GameManager)
[LOG 14:49:32.595] [UI] Localization sources updating```
is this latest commit
if so, its because GameManager.Instance.Game.Messages doesnt exist yet
Ah that's my fault then
but at least console shows log, while KSP2.log doesn't
these two lines need to happen later
well, to be precise, they need to be a part of the loading flow or patched onto something in the loading flow
GameManager.Instance.Game is what doesn't exist at this point, sorry
not GameManager.Instance.Game.Messages
i can put out that GameInstance exists event 
i'd just hook the GameInstance create FlowAction
I mean
most things should just use OnInitialized
which is late enough where everything is loaded
SpaceWarp itself can't do that though
well, actually
maybe it could?
I wonder if we could make SpaceWarp use BaseSpaceWarpPlugin
That'd be interesting
We should actually
Means we could get rid of all the space warp specific loading
I was actually about to do that then decided it'd be weird, but now I realize it makes sense
Definitely
Now space warp will show in the mod list lol
When we fix that
Is that really such a bad thing to see the common api in the mod list?
she's saying that as a good thing
oh my bad
This is correct
I totally interpretted that as "when we fix it showing up in the mod list"
figured
Yeah, I didn't make that clear lol
i love it when my game's launcher refuses to launch
Please someone PR so I can test the fix
I dont wanna duplicate if Aaron is working on it š
i havent fixed the RTLE yet
Runtime link exception?
ReflectionTypeLoadException :p
i got one of them, the one in MessageDiscovery
but the PropertyDiscovery one is trouble since its in a static construtor
Oofff
Flashback to when I saw someone making a mod by trying to set a const field to false with harmony, which idk if possible or not
consts don't exist
well, they do, kind of
but if you ever use one in code, you aren't referencing the const
they are compiled away into literals
it copies the value in the const into the usage place at compile time
Those were my thoughts
And someone was trying to use harmony to patch the const lol
What does property discovery do?
great question
i do not know the answer

it finds all classes marked with DiscoverablePropertyAttribute
i means mods can be included automatically
which is nice
at least its easy to fix globally
[HarmonyPatch]
internal static class FixGetTypes
{
[HarmonyFinalizer]
[HarmonyPatch(typeof(Assembly), nameof(Assembly.GetTypes))]
[HarmonyPatch(typeof(Assembly), nameof(Assembly.GetExportedTypes))]
private static Exception GetTypesFix(Exception __exception, Assembly __instance, ref Type[] __result)
{
if (__exception is ReflectionTypeLoadException rtle)
{
SpaceWarpManager.Logger.LogWarning($"Types failed to load from assembly {__instance.FullName}, continuing anyway.");
SpaceWarpManager.Logger.LogWarning($"Exception: {__exception}");
__result = rtle.Types;
return null;
}
return __exception;
}
}
Ah, okii
Is this gonna be in the next pr
yea
[Error : Unity Log] NullReferenceException: Object reference not set to an instance of an object
Stack trace:
PhysicsSettings.get_DaysInYear () (at <8c5bdf369a8c45f68951f69eb825ef73>:0)
KSP.UI.Binding.UIValue_ReadNumber_DateTime.Awake () (at <8c5bdf369a8c45f68951f69eb825ef73>:0)
UnityEngine.ResourceManagement.AsyncOperations.<>c__DisplayClass57_0:<add_CompletedTypeless>b__0(AsyncOperationHandle`1)
DelegateList`1:Invoke(AsyncOperationHandle`1)
UnityEngine.AsyncOperation:InvokeCompletionEvent()
i can't
how
that is a stock error, no?
thats terrifying if so lmao
I'm pretty sure
why is this even on PhysicsSettings
looking through the logs with no mods, you get dozens of various errors
Lmao
I know tho
time to make some more bugfix mods 
well now i just have to figure out why this is
[Warning:Space Warp] Types failed to load from assembly SpaceWarp, Version=0.4.0.0, Culture=neutral, PublicKeyToken=null, continuing anyway.
[Warning:Space Warp] Exception: System.Reflection.ReflectionTypeLoadException: Exception of type 'System.Reflection.ReflectionTypeLoadException' was thrown.
at (wrapper managed-to-native) System.Reflection.Assembly.GetTypes(System.Reflection.Assembly,bool)
at (wrapper dynamic-method) System.Reflection.Assembly.DMD<System.Reflection.Assembly::GetTypes>(System.Reflection.Assembly)
oh
i'm stupid
the mod compiler can't find roslyn

Lmao
Fair
Testing now
forgot to delete the nuget dependency that it used, but oh well
Found Space Warp plugin Space Warp without a swinfo.json next to it. This mod will not be initialized.
How do we make these?
Doing it now
[Info : BepInEx] Running under Unity v2020.3.33.9525882
[Info : BepInEx] CLR runtime version: 4.0.30319.42000
[Info : BepInEx] Supports SRE: True
[Info : BepInEx] System platform: Bits64, Windows
[Message: BepInEx] Preloader started
[Info : BepInEx] Loaded 1 patcher method from [BepInEx.Preloader 5.4.21.0]
[Info : BepInEx] 1 patcher plugin loaded
[Info : BepInEx] Patching [UnityEngine.CoreModule] with [BepInEx.Chainloader]
[Message: BepInEx] Preloader finished
[Message: BepInEx] Chainloader ready
[Message: BepInEx] Chainloader started
[Info : BepInEx] 1 plugins to load
[Info : BepInEx] Loading [Space Warp 0.4.0]
[Message: BepInEx] Chainloader startup complete
Is it not loading or something
Nope, no main menu and no sound
Very odd ...
OS: Windows 11 (10.0.22621) 64bit
CPU: AMD Ryzen 9 3900XT 12-Core Processor (24)
RAM: 32692
GPU: NVIDIA GeForce RTX 3080 (12107MB)
SM: 50 (Direct3D 11.0 [level 11.1])
RT Formats: ARGB32, Depth, ARGBHalf, Shadowmap, RGB565, ARGB4444, ARGB1555, Default, ARGB2101010, DefaultHDR, ARGB64, ARGBFloat, RGFloat, RGHalf, RFloat, RHalf, R8, ARGBInt, RGInt, RInt, BGRA32, RGB111110Float, RG32, RGBAUShort, RG16, BGRA10101010_XR, BGR101010_XR, R16
Log started: Thu, Mar 02, 2023 16:21:16
He wants the log files
should be more stuff in LogOutput.log though
My bad
Stack trace:
SpaceWarp.Patching.LoadingActions.LoadLocalizationAction..ctor (SpaceWarp.API.Mods.BaseSpaceWarpPlugin plugin) (at C:/Users/Nick/Documents/GitHub/SpaceWarp/SpaceWarp/Patching/LoadingActions/LoadLocalizationAction.cs:12)
SpaceWarp.Patching.BootstrapPatch+<>c.<PatchInitializationsIL>b__1_2 () (at C:/Users/Nick/Documents/GitHub/SpaceWarp/SpaceWarp/Patching/BootstrapPatch.cs:46)
(wrapper dynamic-method) KSP.Game.GameManager.DMD<KSP.Game.GameManager::StartBootstrap>(KSP.Game.GameManager)
(wrapper dynamic-method) KSP.Game.GameManager.DMD<KSP.Game.GameManager::Awake>(KSP.Game.GameManager)
[Info : Unity Log] [UI] Localization sources updating```
We should load the metadata earlier?
metadata is loaded as early as possible iirc
yeah its loaded before GameManager Awake
its the one in the repo
i wrote it then copied it
there should be a log before that if it failed to load the swinfo
noted
Send the full log
Okay, I rebuilt the SWINFO by hand and it is fixed
I wonder if it was a file encoding thing
Do a diff between the two?
Likely using platform specific encoding ...
the parser should not be affected by line endings
It really shouldn't no
and both should be UTF8
CRLF kinda is unbased imo
It's all good now -- did you get to work on the modlist display?
but yeah this just adds
plugin.SpaceWarpMetadata = JsonConvert.DeserializeObject<ModInfo>(File.ReadAllText(modInfoPath));
if (plugin.SpaceWarpMetadata is null)
{
Logger.LogError("wtf how is this null right here");
}

Not yet I don't believe
UI scares me
Well done erryone
@visual marlin @little bay (I didn't have to rebuild the swinfo either)
no idea
yeah, that was odd
But I was more showing I got the mod list UI to work
who left?
The creator of stage info
I also updated the build script
@timber cedar wanna review my PR?
Next up gonna look on control locks for the console and adding it to app.bar
#āŖreaction-roles
New reaction roles :0
Console has been added to appbar
might not be a bad idea to add a config option for that, as most users won't be needing to see it ig?
and now that SpaceWarp is in the mod list, it should be pretty easy
we have to do some stuff to support config UIs before that
Eventually id like to figure out how to add the console to the control binding screen so you can just set your own key
input binding abstraction would be nice in general, yeah
That's something we are planning to look into
Is this at a point t where I can do some test dev with the new setup?
Yes
For an example mod
https://github.com/cheese3660/LazyOrbit
but thats cc by sa
Or look at the example mod in the repo
but yes, it should be in such a position
its not updated on spacedock yet right?
Nope, not yet
What kinda development are you planning btw?
@late condor ?
oh just testing interop with TK, trying to get spacedock package downloading working, etc.
I'll probably do some kind of custom part test with some new, probably useless, function
Okay, you have to point the addressable to the Plugin folder naturally, but you already knew that I think
I actually don't know what you're referring to, I never had the opportunity to actually make use of addressables in a mod
{SpaceWarp.API.SpaceWarpManager.MODS_FULL_PATH}/<mod-id>/addressables/StandaloneWindows64
this stuff?
Yes
It should instead use the bepinex plugins path
okay, thats easy enough
How close are we to getting a pre-release of the bepinex library? Would like to do some tests with my mod tomorrow and I always struggle with building this kind of stuff from source
Likely tomorrow
Should I add this function to the AssetManager API?
/// <summary>
/// Attempt to patch an asset at a path
/// </summary>
/// <param name="assetPath">The path to the asset to patch</param>
/// <param name="asset">The asset to patch with</param>
/// <typeparam name="T">The type of the asset that the asset is being patched with</typeparam>
/// <exception cref="ArgumentOutOfRangeException">Thrown if the asset does not exist</exception>
/// <exception cref="ArgumentException">Thrown if the type of the patching asset cannot be assigned to the type of the patched asset</exception>
public static void PatchAsset<T>(string assetPath, T asset) where T : UnityObject
{
if (!AllAssets.Contains<>(assetPath))
{
throw new ArgumentOutOfRangeException(nameof(assetPath));
}
if (AllAssets[assetPath].GetType().IsAssignableFrom(typeof(T)))
{
PatchLogger.LogError($"Attempting to patch {assetPath} which is a(n) {AllAssets[assetPath].GetType().FullName} with an object that is {typeof(T).FullName}. This is an error.");
throw new ArgumentException(nameof(asset));
}
AllAssets[assetPath] = asset;
}
comment on this
I agree with this. It should be hidden by default.
Well, figuring out BepInEx configurations is next on my list
I'm dumb, I've been trying to get my mods working on the experimental branch and kept trying to debug why my Harmony patches weren't loading
didn't realize that the new version removed the loading of Harmony patches for mods until now like an hour later
but good news is that everything seems to work fine now that I added Harmony.CreateAndPatchAll lol
Yes
All the currently used parts at least
wouldn't want to be the one doing that 
Yep, but it'll make things easier in the future
I keep running into Icon Problems
Odd
what does your space warp folder look like
bepinex/plugins/spacewarp/
There are too many messages to do this shit
401 message types, I ain't got the time for that
Just going to keep game state messages
Unless I can automate generating message actions
yeah I was also thinking about that
@sacred jasper Did you say there was an issue with window dragging?
No? You were having an issue with it for some reason though?
That's all I needed to know. I'll solve it with the mod owner
Space warp menus have close buttons now
anyone know the path to fields added to a [ModConfig]
i got it setup but idk where the fields are accessed at runtime
Use the ManagerLocator to get a reference to the config manager, which can be used to get a mod ids configuration
We are looking into for the BepInEx version to use BepInEx.Configuration and BepInEx.ConfigurationManager for the user side
ty
got it loaded but the return value is just zero unless i specify it in the field declaration, which then overrides the user changes
the default attribute doesnt seem to affect it
have any other mods used it yet?
I've tested it at least
yeh i was doing it wrong
never used out with multiple parameters
if (manager.TryGet("StageInfo", out (typeof(StageInfoConfig), object obj, string "") cfg))```
nvm got it, thx
Aight, I'm gonna make the first prerelease
- Fix the UI assets currently bundled in space warp
- Integrate app.bar support into more than just in flight
- Abstract more of KSP out
- Look at features people wish to have integrated in space warp\
@late condor could you explain to me which guistyles had the nine slice issue in that screenshot?
yeah, uh, let me find the picture you posted
see how they are weirdly elongated
thats because the image being used for the background doesn't have its 9 slice sizing correct
Yeah, but what are those specifically, so I can look at hunting those down first
ah, I'll have to look at the code and try to figure it out, can you point me at where this is created?
This is just BepInEx's configuration manager with an IMGui skin put over it
ah. where is the asset for the skin stored?
I can just put in a pr for it
assuming its on git
Here is the source for the .bundle file
how do yo uwork with this, do you just have rthe contents of the repo under the assets folder in a project?
yes
@solar crystal was working on 2.
I believe
Gotcha
also have you been able to add a scroll bar to the gui skin yet?
Not yet, but twiner seems to working on the UI skin right now
ah nice
there you go
I can show you how I diagnosed if you want
just 1 screenshot actually
I checked all the controls, so I don't think you'll ahve any other issues
you can't see the scrollbars there, but I tested those too
Gotcha, make a PR for the UI assets if you haven't already
already done
Pog, then need to rebuild assets into space warp
Was gonna take a quick break but I can do this
F
toggles got broken again, let me unpack the bundle and reset the changes
hmm
Which is odd cuzzz
This is a test of the space warp console I have in unity
Let me just nuke the assets and try again?
I mean it fixes one issue with lazy orbit, but breaks the config manager?
oh wow, I see yeah, thats really broken, but I don't get why that would break
I really wana say its a coincidence
what branch are you testing on?
configuration for now
Did you do that harmony patch thing?
yes
but all its doing is prefixing OnGUI to apply a skin
oh you should also postfix that
I don't kjnow how to write harmony patching but...
[HarmonyPatch(typeof(ConfigurationManager.ConfigurationManager))]
[HarmonyPatch("OnGUI")]
public class ConfigurationManagerPatch
{
GUISkin prevSkin;
public static void Prefix()
{
prevSkin = GUI.skin;
GUI.skin = Skins.ConsoleSkin;
}
public static void Postfix()
{
GUI.skin= prevSkin;
}
}
because otherwise you can pollute other GUI attempts
otherwise, just don't use a harmony patch and set it when you initialize the gui system in general
it doesn't look like the bepinex config manager sets GUI.skin anyhere, it just uses whatever is enabled
that said, this almost certainly has nothign to do with the issue
For sure, it's an odd issue
Are you getting exceptions in your logs?
Nope
I mean, we have a few options, we can just remove the IMGUI Skin for the manager, and just use it normally, or we can debug this
on a sidenote: I don't seem to be getting any logging (definitely not exceptions) from Harmony patches within KSP2.log, just in the BIE debug console
my curiosity is peaked because based upon everything I know about IMGUI,a nd looking at the config manager code for this part of the ui, and the changes I made, this should work
and there is no reason the toggles should collapse like that
I had fixed the toggle collapsing, because I was doing something wierd with them before, my theory is that i forgot to update the repo?
No, they shouldn't collapse
was it a skin change you did?
Could it be because toggles to stretch to width under my skin
Maybe it's working as intended after switching to the BIE logger? seems like it might be getting logged into BepInEx/LogOutput.log but I'd have to recreate the exception to be sure
just to clarify, seems like exceptions go through to the regular Ksp2.log but anything logged through BaseUnityPlugin.Logger only goes into the BIE log
thats normal for the default config
yeah seems like the default behavior
in the BepInEx/config folder you'll find BepInEx.cfg, inside which you'll find settings for logging behavior that control how logging works
(āÆĀ°ā”°)āÆļøµ ā»āā»
previous image wasn't the actual copied code
this inside the editor without spacewarp though, so its not really apples to apples
I am gonna flip a table
(āÆĀ°ā”°)āÆļøµ ā»āā»
yeah, I feel ya, its gotta be somethign with the specific interaction between all the stuff, but I'm not setup to build SW and I don't want to get sucked to far down a rabbit hole when I got a bunch of other stuff I want to do to get tk all good for ksp
you were very close
[HarmonyPatch(typeof(ConfigurationManager.ConfigurationManager), "OnGUI")]
public class ConfigurationManagerPatch
{
public static void Prefix(out GUISkin __state)
{
__state = GUI.skin;
GUI.skin = Skins.ConsoleSkin;
}
public static void Postfix(GUISkin __state)
{
GUI.skin= __state;
}
}
having it as a field works too, isn't thread safe, but that doesn't matter for OnGUI anyway
just more uhhhh
idiomatic harmony? I guess? to use __state
ah neat, so you can just out variables from your prefix to create locals basically?
it only happens with the parameter called __state
magic names :p
but you can store whatever in that one variable anyway, using a tuple/struct
only one then eh, so you potentially have to create a state struct if you need a bunch of stuff
so it doesn't matter that you only get one most of the time
(and usually you're just passing one or maybe two things through like this)
out (Type1, Type2, Type3) __state my beloved
good to know!
Was there a persistence regression in the pre-release? I think the BepInEx_Manager is getting destroyed on quit to main menu. Or at least my script is
not that I'm aware of
if there was I know how to fix it
just need to test it
ah wait no someone said that ksp2 kills all gameobjects that aren't marked with a certain tag
so yeah it just needs to get marked persistent
yeah objects that don't have a hide flag or are tagged "Game Manager" or "Graphics Manager" get nuked on quit to menu
i can do it from my mod too but i think it's best if the default behaviour goes back to that object being peristent
actually you can fix it
go into BepInEx.cfg and turn on the option to set HideAndDontSave on the manager GO
always forget that's there
Does that make you unable to FindObjectsOfType<T> for those components? It's janky but just wondering
uhhhh
don't remember
try it, it should work
the SpaceWarp BepInEx just needs to ship with that setting enabled
not SpaceWarp
SpaceDock
the SpaceDock version of BepInEx needs to ship with that enabled
I'm tired
sounds odd for mod managers, normally I'd say to make BIE a dependency
that way dependencies resolve correctly
its really not that different from what the ror2 community does
and KSP plugins really kinda need the functionality of the SpaceWarpBaseUnityPlugin in order for setup to be easy
R2API and BepInEx are packed separately
yeah, but theres the console plugin, the FTPS, and like 2 other things?
R2API is a lot less critical for Ror2 as well
it comes with a few things, but they don't generally get updated, and there's still only one BepInEx
yeah, that is a fair point
SpaceWarp packing BepInEx would make it so there's now two available
Id hope that the other 3 packages get deprecated assuming that spacedock supports that
not to mention that it's still nice for things that just don't need SpaceWarp to be able to communicate that properly
like if UnityExplorer goes on SD
So no packaging BepInEx in, I'll still likely package BepInEx.configuration
?
The problem is then, we need to tell @median pendant to ship the BepInEx plugin with that configuration preset to hide the manager
that's fine
he can just do that 
(while you're at it bepis, could you enable unity log to disk and set the disk log level to All? always makes it easier to debug issues that get sent in from users)
I'd just like to say that while I agree with this if there is an actual mod manager like CKAN available, it will make things more difficult for the end users before that happens. This way if they want to download a SW mod, they have to first go and download and install BIE, then download and install SW and finally download and install the mod
I don't really see why packaging BIE in the SW release zip for now would be an issue
if someone only wants to use BIE, they can still just download that separately
if they want to use SW, they will always need both anyway
and if they were already using BIE and want to add SW, rewriting the BIE files shouldn't hinder their previously installed BIE mods in any way
Correct me if I'm wrong about some of my assumptions, but for now I see only advantages in the combined packaging
@timber cedar can the UI for installer be ported to Linux?
I have a simple python script which does the work, but after seeing your PR I think I should just borrow the UI and port it to Linux.
do you mind?
its under mit :D
you do what you want
if its good you can pr back
and ill check it out
not in 4am
alright
No KSP2 patch after a week? Its fine, the modding community is on it.
#ksp2 #mods #kerbal
Kerbal Space Program 2 released last Friday and uh, yeah well, you know the rest.
My links:
Patreon! https://www.patreon.com/Carnasa
Come join the discord! - https://discord.gg/524uqrD
Links in the video:
Full Mod Collection - https://github.com/war...
Kinda cool video about Space Warp mods
Teaser from the space warp team š³ļøāš
@little bay I'm having an issue where only the core configuration is showing up in the configurationmanager
Waitttt, could it be failing because of hide and don't save?
@timber cedar added, let me do a PR.
where to though? Directly to installer of SpaceWarpDev?
public static BaseUnityPlugin[] FindPlugins() => Array.ConvertAll(Object.FindObjectsOfType(typeof(BaseUnityPlugin)), input => (BaseUnityPlugin)input);
This is how the config manager finds plugins
Could that be failing because we set hideAndDon'tSave
No, it should work?
It legitimately work because of that
It ... doesn't fucking work
Alright, time to harmony patch it
I think any DontSave hide flag will make it so that Objects.FindObjectsOfType<T> won't find them. Not sure about Resources.FindObjectsOfTypeAll<T>
Yeah, but still I copied that code over for testing and it found no plugins
I'm gonna patch it to use ChainLoader
so yes, you're correct
I patched it by using chainloader instead and it worked
so in theory you want it to be using the Resources call
this is a better solution, way less wasteful
They literally made that method to avoid chainloader, but I need to use chainloader for some reason
I'm curious why Marco did that
ĀÆ_(ć)_/ĀÆ
maybe should make a seperate testing branch
@alpine tendon you were gonna make a PR for the oab toolbar at some point?
later tonight, playing games with some friends at the moment
all the code is in vc no mic if you want to try it out
Spending time w/ family rn myself lol
why is spacewarp not updating ;-; I am having the same problem as last time I tried to update. I did the restore nuget and putting the managed dlls into the external dll folder
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\beast\\Desktop\\SpaceWarp-spacewarp-0.3.0\\SpaceWarp-spacewarp-0.3.0\\SpaceWarp\\bin\\Debug\\0Harmony.dll'
Also
a ton of these
C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\API\AssetBundles\ResourceManager.cs(6,37): error CS1514: { expected [C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\SpaceWarp.csproj]
C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\API\AssetBundles\ResourceManager.cs(125,2): error CS1513: } expected [C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\SpaceWarp.csproj]
C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\API\Configuration\ConfigDefaultValueAttribute.cs(3,38): error CS1514: { expected [C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\SpaceWarp.csproj]
C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\API\Configuration\ConfigDefaultValueAttribute.cs(13,2): error CS1513: } expected [C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-0.3.0\SpaceWarp\SpaceWarp.csproj]
C:\Users\beast\Desktop\SpaceWarp-spacewarp-0.3.0\SpaceWarp-spacewarp-
Like 100 more of missing bracket exceptions
Also this is 3.0
not the 4.0 that uses the bepinex install
Those look like issues with your ide not supporting file scoped namespaces
Im using Microsoft Visual Studio
what version
2019
You need a newer version
I somehow installed 2.5 with the current version. I dont know how I fixed the problem though
some of the stuff we do post 2.5 requires a lot of newer visual studio features
Alright
Polysharp, file scoped namespaces, c# 11
Ah ok
That reminds me lmao
Thats how I fixed the problem
with 2.5
I changed the solution from 11 to 9
lmao
A bit devious
Im already installing 2022 Visual Studio though
so theres no point
Honestly I am suprised it compiled with the version change I did in the solution
Lol
New 2022 version worked!
2022 is smooth I love it
Space Warp featured in Scott Manley's latest video š https://youtu.be/9v4Z9jxvJvY?t=613
Sure I've been streaming it here and there, messing around with it and breaking things. While also throwing many bug reports to the developers.
Follow me on Twitter for more updates:
https://twitter.com/DJSnM
I have a discord server where I regularly turn up:
https://discord.gg/zStmKbM
If you really like what I do you can support me directly ...
Incorrect point about it being superceded
yeah, but not to be unexpected from someone not involved in modding
Cheese how do I know if a part is succesfully loaded without loading into the VAB
is it printed into the console at all?
also is it printed if a part fails to load?
It's printed out if an addressables catalog loads
But not specific parts
Scott Manley hearted my comment!
Nice
How do i check what version of spacewarp I am using to make sure it updated correctly'
Nice
Cheese have you gotten a working part in the VAB as an example I could use
?
Sorry for asking so many questions all the time
Just wanted to make sure, since I saw 0.4 is doing something with BepInEx configuration but wasn't paying too much attention - is that replacing the 0.3 built-in SW config classes or is it just a fallback for non-SW BepInEx mods?
Replacing
Alrighty, thanks
#[tauri::command]
fn get_install_type() -> bool {
let dir = finder::find_install_dir();
let files = dir.read_dir().expect("Failed to read install directory!");
let mut is_bepinex = false;
for file in files {
if file
.unwrap()
.file_name()
.to_str()
.unwrap()
.contains("BepInEx")
{
is_bepinex = true;
}
}
return is_bepinex;
}```
@timber cedar is this redundant?
redundant to what
okay, wait no.
ok
didn't see ternary here. ```js
const res = await invoke_proxy(
kind == InstallKind.BepInEx
? "download_bepinex"
: "download_doorstop"
);
mmm
wdym?
this one
lol
wait
let me see
also is auto-install worth it? could we not just prompt for browse?
imo auto-install is prone to lots of failures?
thats the literal point of an installer xd
@timber cedar it's blank.
look at the error?
xd what did you launch it with
cargo tauri dev
did you right click on the window and inspect it
yep.
body is empty except in the script tag it's is referring to some typescript file.
``` Running BeforeDevCommand (pnpm app:dev)
[email protected] app:dev /home/user/Space-Warp-Installer
vite
VITE v4.1.4 ready in 570 ms
ā Local: http://localhost:1420/
ā Network: use --host to expose
Info Watching /home/user/Space-Warp-Installer/src-tauri for changes...
Finished dev [unoptimized + debuginfo] target(s) in 0.28s
sinon, any idea why it's white?
Alright, if we get oab appbar in this morning we release
working on it now
Huzzah!
also, scrollbars would be very nice
Most of the conversions are done, I'm working with devs as I can contact
You can tag me as a resource on conversion for devs
Anything else that needs to be done before we release?
Can we get all the tasks that need to be done or would be nice to have in this project board and as a Feature issue on github?
https://github.com/orgs/SpaceWarpDev/projects/1
Makes it so much easier to know what to work on, what is being worked on by who etc
I still don't know why they don't work
Also UI skins can easily be updated w/o breaking anything
Not sure if we can get that done in time
Really not a worry then
I keep mentioning the scroll bar thing because it's only every so often that people are going update their SW and it has a big impact on usability
Don't prioritize scrollbars at this point.
What really stops us now from releasing this as 0.4.0 that will give modders the chance to convert their mods over to BepInEx plugins?
Lets focus on that
That wasn't to say I won't still look into it
It's just that when testing the unity assets in unity, it works perfectly
Once we have released v0.4.0 we can release more often as long as we dont break things
The scroll bar is not a breaking change
So lets get all those done first
and we can add scrollbars in 0.4.1
major.breaking.patch
well, semver defines this as:
MAJOR version when you make incompatible API changes
MINOR version when you add functionality in a backwards compatible manner
PATCH version when you make backwards compatible bug fixes
so BC break should be major version
but it doesn't really apply well to pre-1.0
I was wondering what we would need to call it 1.0
We should prob bump to 1.0.0 indeed
It's already been noted in multiple places that this would be called 0.4.0, the next update should be 1.0.0
yeah I agree with that for clarity
but other than that I feel like it's pretty much ready for 1.0.0, since the biggest change has already happened, and now the development should be somewhat more stable
But its like a brand new project at this point. We nuked almost everything from 0.3 and changed what the project is trying to achieve
Kinda weird to go from a modlauncher to an API from v.0.3 to v0.4
š
well
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
so even huge breaking changes like this are not off the table
The question becomes when should we consider the API stable enough for 1.0
(of course all this applies only when you commit to following semver, but I feel like that's a no-brainer to do for consistency)
As long as I have worked as a software engineer I have never had anything I would really call "stable".
Things break all the time and when you really think things are stable, they break like never before š
Fair
Let's keep this as 0.4.0 for clarity's sake, and see what we can do to make the next release "1.0.0" worthy
Sounds good to me
the next release should be entirely dedicated to the scroll bar lol
ššš
give me an OAB app bar button API and I'll be happy to call it 1.0.0 
The next release will have a lot of UI fixes, that's definitely in the plans, and should be added to the projects tab
We are already adding that to 0.4, it's the last thing we need to add rn
also might be worth it to look into perhaps adding stuff to the KSC main screen in some capacity?
Okey but lets focus on 0.4.0 then.
What needs to be done for us to release it right now?
We can plan 1.0.0 later
Realistically, just the oab app bar, that's the most important feature thats been in progress
Alright, what is stopping us from making that work right now? š
We can postpone click through blocker to the big UI patch later.
Halban is just about done with it, I think they are still making the pr
Alright, we should prob have made an issue for it so we could track that issue better.
I would really like to have all the things being worked on in the Project board on github and have an issue for every feature / bug.
Makes it easier for the team to keep track of tasks š
https://github.com/orgs/SpaceWarpDev/projects/1
Adds support for app bar buttons in OAB via a new tray button.
Here's a build if anyone would like to test it
if we want to expand this to tracking station etc. it could probably be made a lot more generic, right now there's a lot of duplication
Updated to project board to better reflect the state of each issue:
⢠What is in the backlog
⢠What is planned to be worked on
⢠What is in being worked on right now
⢠What is ready for next release
⢠What is released to the public
Key bindings already exist for mod configuration
Because bepinex.configuration adds that
I can't help but notice that there are two "In Production" headings
any chance of maintaining backwards compatibility with 0.3 mods, at least for a release or two?
it's probably near impossible since the folder structure, the plugin directory, the mod attributes and base class are all completely different
I think it would take way more effort than actually implementing any new features, and not worth the effort if the (possibly) 1.0 release after this dropped the support anyway
it'd be way easier to make some small script that goes through a 0.3 mod project and changes stuff to work with 0.4+
(but I don't want to speak for the devs of SW)
k fair
@visual marlin you were writing something about transitioning from SW 0.3.0 -> 0.4.0
We are targeting a v1.0.0 release as the next release for Space Warp.
All Pull Requests containing new features should be directed towards that branch for them to be included in the next big update.
@sacred jasper Yep, I was trying to pick apart the game state stuff but I'll get on that
"If you believe you have found a security vulnerability" yeah I've found one, it's KSP 2
Rider keeps screaming at me for using Newtonsoft.Json.dll 12.0
I know š Made a PR earlier to patch it but we don't want to move past that version since that is what KSP 2 uses šŖ¦ RIP
yeah, understandable


