#DawnLib [V80]
1 messages · Page 13 of 1
ye i can take a look at that one prob
019c2986-d4ff-67e7-7a36-4a7447933d29
obligatory making noise that this PR is ready:
https://github.com/TeamXiaolan/DawnLib/pull/68
Yeah I gotta accept that when I'm next on, just got off for the day lol
and I just woke for the second time, and gonna go to the same clinic for the second time virtually for no important reason
Sounds very important
nah, just some paperwork
as one of those "just because we can" things, I'm gonna try to upgrade the deprecated ISourceGenerator to Incremental Generators. We'll see how that goes
(it currently does not generate any deprecation diagnostics only because an old version of framework is used as a dependency. Once you bump the version, it starts complaining.)
keep in mind that if you update roslyn (well I believe it's the Microsoft.CodeAnalysis.CSharp package which would need the roslyn version) to 5.0.0, the source generator will only run on .NET SDK 10. I believe for .NET SDK 8, the highest supported version is 4.8.0
.NET SDK 8 and 9 are still supported until I belive the end of this year or something like that
I finally got sdk 10 so now you have permission to update all the tools to net 10
nice
hehe
yeah so the moral of the story is, tell users to install .NET SDK 10
For MonoDetour.HookGen, I'll also update it to require .NET SDK 10 because roslyn/Microsoft.CodeAnalysis.CSharp 5.0.0 brings nice features
this is an incredible resource for writing incremental source generators btw https://andrewlock.net/creating-a-source-generator-part-1-creating-an-incremental-source-generator/
also don't trust anything ChatGPT says regarding these things
pfft codeGPT is the smortest
it's not just the smortest, it's the giga-smortest
We should have Claude maintain DawnLib, see how long it takes it to break everything
good thing we have dotnet 8.0.x in CI now! \o/
another small win btw:
https://github.com/TeamXiaolan/DawnLib/pull/70
oh those are some nice tools
there are issues with the recently introduced GenerateCostConfig and such
https://github.com/TeamXiaolan/DawnLib/issues/71
just a heads-up: null-vehicle and null-unity branches have a little harmless merge conflict when rebasing onto each other
ah
GitHub is so busted, it doesn't show back-references from both PRs in the issue, only from #73 lol
all rebased and resolved o7
yippee
oh btw
while you're here
i realised i have more options for merging PR's
should i have been rebasing this whole time?
it's a matter of personal preference
I'm just used to KDE workflow where we rebased to no end, because we never "merge"
i only say it because the graphs dont look happy at me, and i thought rebasing would solve that issue but i could be wrong anyway
that's just GitHub's default way of doing things. they traded one simplicity (hit a button to Merge) for another complexity (graph looks like a... graph, not like a linear line by default)
the only practical problem with graph and branches (apart from generating extra noise and merge commits) is that when running CI, you are running code on the PR branch, but once you hit Merge it will be unconditionally merged into another branch (main) resulting in code which has not been tested and might not compile at all
icic
i left one comment on the nullable PR, that's about my only concern/ thoughts about one of the changes
For example, big projects like Rust use branches (because it is not practical to expect everyone to keep up with an insane pace of main branch) but they solve it by not using Merge directly: they schedule PRs for merging, and a bot picks up a batch, creates a test branch, merges all PRs into that branch, runs CI, and if all good merges test branch into main.
very complicated, i know
i think i get it, that's fairly interesting
random fun fact: merge commit may have more than two parent commits
answered
we are down to only 20 warnings total! stonks 📉
(down from 122 warnings in v0.7.7, making it a net negative of over a 100)
damn, i gotta put the work to bring more warnings in there
work hard, warn hard
Warning leviathan class lifeform detected
this one is the most interesting so far.
delegate's += is alright, but -= is a possible null assignment to a non-nullable field? What is going on?
Turns out, delgates implicitly implement -= operator in a way that "If removal results in an empty list, the result is null." So from static typing POV, it doesn't matter that OnAchievementUnlocked action is initialized with an empty delegate { } — it still sees the code as nullable.
By the way, that footnote is a red herring:
'operator -' is not nullable aware.
lol that's so odd
bruh
in a way, it sort of makes sense? being nullable it provides an simple and obvious API to check if anyone has subscribed, so you can null check and skip doing some work altogether
lmaooo
i dislike thunderstore wiki pages so much lol
cant do any sort of ordering for the pages, can't hide pages so that you access em with a link to em instead of just seeing them in the list
Only once but I didn't get far enough in to figure out basic usage lol
Also I coulda sworn that worked lmao
If someone knew how to setup just a page I could probably go from there, but I know there's a whole thing with formatting the website to look good with specific libraries for this type of thing and yeah it's a lil time consuming for me rn to figure all that out lol
I do eventually wanna do it though
couldn't you copy the stuff we did for ContentLib?
in terms of boilerplate and template setup
GitHub wiki is also pretty nice to use, and works mostly the same way as Thunderstore's one
I could, that gave me a headache though, we kept switching formats and I had to keep moving the documentation iirc, not that I remember how to set it up but I might be able to copy it, it's worth a shot
iirc just putting markdown files into directories should generate the hierarchy tree by itself
should
https://lethal.wiki/ uses vitepress, which looks fairly nice
oh it's super similar
@hallow gale i see this log coming from your modpack
this is probably why it doesnt work
yeah that log have been pointed out by the bot in #help-and-troubleshooting aswell

Did I set them up wrongly?
I don't know, but like, this kind of thing would be nice to know before I try to debug the pack
I didn't create lunar so you'll just have to wait for the creator to fix the bug if it's been reported
iirc we actually only switched formats once, which was from docfx to Astro + Starlight. Which was because we realised that docfx is actually quite bad compared to proper docs site software
meanwhile, CShartSyntaxTree guts of compiler:
/// <summary>
/// Produces a syntax tree by parsing the source text.
/// </summary>
public static SyntaxTree ParseText(
string text,
CSharpParseOptions? options = null,
string path = "",
Encoding? encoding = null,
CancellationToken cancellationToken = default)
{
#pragma warning disable CS0618 // We are calling into the obsolete member as that's the one that still does the real work
return ParseText(text, options, path, encoding, diagnosticOptions: null, cancellationToken);
#pragma warning restore CS0618
}
[Obsolete] my ass, lol
well it makes sense if the method had bad parameters to expose in an API, like I've done this before myself too
but yeah regarding a wiki for DawnLib, github's wiki is probably the easiest to setup, but it does kinda suck (I think it's confusing to navigate)
Starlight is very nice and very configurable and extendable (Starlight itself is just an integration for Astro) but does require setting it up. But after that, it just works and the content can be found from search engines
which afaik isn't the case for github wiki
don't get your hopes high, but we might even end up with functional snapshot testing for DawnLib.SourceGen from json
that's true
i'm making docs for WeatherRegistry now, and the whole setup took me around an hour
it's really nice
oh btw @agile sky did you ever get the auto-generated docs from C# code working?
Yes!
holy
see here for example https://monodetour.github.io/api/monodetour/
could you guide me for setting that up? 🥺
mm probably needs a description for pages which just list types in a namespace
ye
here is my pages deploy workflow https://github.com/MonoDetour/MonoDetour.github.io/blob/main/.github/workflows/deploy.yml
I use my own fork of docfx-to-astro here but you should not unless if you want to ship docs with fixes you just made to the tool
the tool is this https://github.com/Hertzole/docfx-to-astro
oh that's amazing
yep!
thanksies 😊
no problem 👍
I have set it up so that my MonoDetour.github.io repo is built whenever I make a github release in the main MonoDetour repo which I can also explain how it works if you need something like that
oh i see
i didn't know that was possible, fun!
and then the docs wait for that event
one thing that's worth noting is that currently docfx-to-astro doesn't support listing members in a separate page from the main type
Yeah and the github token needs to have I believe write access to the target repository
oh i'll have to comment everything for that to work anyway 💀
bwah
oh also for this button, I made a component override https://github.com/MonoDetour/MonoDetour.github.io/blob/main/src/components/EditLink.astro
the edit link ofc itself already points to the library source code instead of trying to point to the website source code
oh that is nice
honestly starlight might be my favourite thing to work with rn
just put the markdowns and enjoy
Hmm actually I could probably make this a starlight plugin that you can just install, and the docfx-to-astro tool could put metadata in the frontmatter to say that it's generated docs, and then the component would just override in those pages instead of like how I have it hardcoded to the api/ directory
v0.7.11
- Added to the Query implementation of DawnTerminalCommands.
- You can now run a DawnEvent after ending a query.
- You can now set a condition on the query for whether it should continue even after typing the continue keyword.
- Interiors are now able to add extra scrap upon their generation.
- Added ability to control gravity through DawnSurfaces.
- Editing where gravity comes from does NOT automatically rotate the player or anything like that, it'll likely be a while before that type of thing is implemented (I don't know how to lol).
- General code quality improvements (
@ratijasadded to credits).
affect where gravity comes from and the strength of it
hmm though the release might've not been published
the github stuff might've borked
cool
so beef you just need to make 5000 player parenting regions yayyyyy!!!
@bronze girder this is your punishment
for uhh
you just need 1 
Can be moved around 
for rotating the player on a ball?
I might tinker with gravity rotation though
I just be finishin Bozo update
For it is no longer Christmas
ofc using them would be unoptimized lole

i would appreciate that, it's a lil annoying when i tried to do it
!nuke Bozo if it's not updated by Saturday /j
well its on thunderstore and github, so :shrug
Nice shrug
ty
@fallow remnant i think you accidently deleted this from a previous PR lol, but fixed it (it broke this part of the workflow lol)
i dont entirely get the point of the different action checkout versions but i used v6
(it looks like it failed but it succeeded since it's already been deployed to thunderstore and nuget)
I wonder if it actually deployed the correct DLL or if it just pushed the previous one
maybe
The correct one is on Thunderstore 
Neat
damnnn
i don't think that's possible
but yea, it sucks that CI is not easy to test
yeah, removed action/checkout was an accidental brainfart, I beg your pardon
It's alright lol
I'm gonna disable warning NU5128, because apparently it is a bad/inappropriate diagnostic
https://github.com/nuget/home/issues/8583
Oh is this the warning coming from sourcegen
I wonder how much dawnlib will explode when new lethal version drops
Hi mrov :3
yes, the first one in the output
Probably not too much based on what zeekerss has touched
I've been on a transpiler fringe lately so it's possible but gonna be probably easily fixable
any known projects which do use DawnLib.SourceGen? apart from CodeRebirth which I can't even fetch from GitHub that's how fatass it is
Lol
do you guys even use git lfs?
I know I had something but I don't remember sadly :p
I think so
Somebody set that up for me ages ago
I wasn't the happiest at the time from it though, GitHub was charging me because my assetbundles were so fat
But well, that was during peak coderebirth development
yo bundles so fat ,scientists declared their assets to be the 10th planet
and that's how we ended up with SSD and RAM shortage
😔
I learned afterwards I'm not really supposed to be committing assetbundles but tbh I don't think that was the biggest cost lol
The documentation for the warning recommends creating an empty file (
_._) in the lib/<tfm> directory
https://www.kenmuse.com/blog/distributing-dotnet-dependencies-and-settings-with-packages/
so they want to create a literal ASCII ass in the package??!
nice
Most peoples stuff isn’t big enough
Biggest reason that hits unity stuff is like 4k normal maps and shit but by nature of the art style most people just use 1k stuff and crunch that even lower
well, i mean, CR download aborted at couple of gigabytes in
sure but lfs’s strength is in individual file size, no?
i am somewhat sure lfs was not supposed to download large files right away
Not right away
But limitation wise
You can’t upload a file 100mb+ to GitHub without doing it through lfs
which is the big reason most people using unity would use it
yeah, what's your point?
Elaborating on this
a butt-shaped fix to the issue #69...
noice
could be a Dawn Lib issue, don't know if its been mentionned before
DawnLib has plans with dawn interiors to incorporate something like that eventually
But for now it's not really possible since I've never even seen that UI before
is it only when someone joining? it only goes away when landing the ship
it's when someone joins you i think
this is the host pov
not even loading anything
just players joining
though it was somehow resolved? It's a bit ambiguous
yeah got it before
I think its a bug with LoadingInfo mod with LLL 1.6.7
not loading tho i dunno
its not landing for you i mean?
i guess someone's gotta go around trailblazing to find that kind of info, but idk though
no, it's when someone joins
not when loading moon
yeah its this one
it goes away when landing yep
I get that without LoadingInfo, it just shows "Waiting for crew..." after the first player joins and goes away after landing.
Slot K
Slot L
[Info :LethalMoonUnlocks] Received sync request from client with id 1..
[Info :LethalMoonUnlocks] Syncing unlockables to client with id 1```
```InvalidOperationException: Nullable object must have a value.
at System.Nullable`1[T].get_Value () [0x00008] in <1071a2cb0cb3433aae80a793c277a048>:IL_0008
at HUDManager.GetTextureFromImage (System.Nullable`1[T] image) [0x00000] in <83220f1fc337491eba19b3618ec61339>:IL_0000
at HUDManager.FillImageWithSteamProfile (UnityEngine.UI.RawImage image, Steamworks.SteamId steamId, System.Boolean large) [0x00086] in <83220f1fc337491eba19b3618ec61339>:IL_0086
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <1071a2cb0cb3433aae80a793c277a048>:IL_0000
at UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () [0x00002] in <c39a522eee05469b8171a6cfeb646c59>:IL_0002
at UnityEngine.UnitySynchronizationContext.Exec () [0x0005d] in <c39a522eee05469b8171a6cfeb646c59>:IL_005D
at UnityEngine.UnitySynchronizationContext.ExecuteTasks () [0x00014] in <c39a522eee05469b8171a6cfeb646c59>:IL_0014 ```
paco is looking into it
Seems to be a LLL bug
Downgrade to 1.6.5 for now
alright, ty
@slender violet you too unless an update gets pushed
It ain't game-breaking though, goes away after landing
Can stay on latest 
Upgrade to 1.6.7 (1.6.6 is current, right? Otherwise the joke doesn’t really work)
Thy joke worketh not
Dang it! Was going off this
Make a joke? ❌
Become the subject of a joke? 
Is there a particular reason why DawnLib now turns off the dynamic moon catalog when it detects LLL?
Was there some sort of incompatibility?
DawnLib's moon node page doesn't have as much info atm
I guess that would explain why only the moon page is like that and not the store page
I do have a way to deal with it for however long it stays that way
@white finch requested it, don't remember why, but he's supposed to replicate the features it had :p
Is it just the Company moons at the top thing?
I forgor if there was anythin else
Ion remember tbh
Company moons at top with selling percent depending on tags probably
I might be wrong, but I thought that's also what modifies the displayed moon name when it's terminal predicate fails
oh if it included that ill have to bring it back to overriding LLL, ill check
hmm you're right
@white finch imma have to go back to overriding you

LLL just doesnt have the compat needed so uh, nomnom
I think terminal formatter might also override it btw @loud mortar, not 100% sure though (cant do anything about that if it does override, mrov intentionally overrid it so you'd have to ask for any features you want there from them)
It does, but I can warn users to turn off the moon page override in TerminalFormatter
oh neat its configurable
hi, what's the situation with sln(x)? someone still can't use it?
I added some tests, and sln just got a lot uglier
ill probably check back on that soon, if they cant ill try to figure out why with them, cuz i can use it
My "solution" for this was to lock the moons with both the DawnLib predicate and LLL so the locked status would still show up
Surely that can't have any unintended consequences 
lol i already pushed an update going back to it
OK, so this might be a little tiny bit overwhelming, I know. But listen, it was kind of fun in its own twisted way, alright?
that looks like a lot of fun though
im going through all the files rn lol
a readme for the sourcegen seems really nice though honestly
oh that readme was an afterthought after everything else was finished, and I noticed NuGet complained about the lack thereof in CI logs
you have SO much in that PR though im lost lol
it might be easier to look at commits one by one
honestly wouldn't even mind if you only approve the basic snapshot tests. because the whole situation about copying Unity dll is meh
and yeah i can see why yo9u asked about the slnx
so what is the point of the 2000 extra sourcegen csproj's, for testing? and how does that work?
one is snapshot testing, probably most useful one: dumps output to files and compares with know-to-be-good files.
integration verifies that generated classes can be used.
nuget integration verifies that nuget package is functional (libs are in the right place <=> source gen works)
Wasn't my idea, I followed this guide
interesting, i've never heard of any of this so thats fun lol
is any of this for the user of dawnlib or us?
by the way thank you very much
im assming they all are for the user from how you worded it but idk
DawnLib itself does use source gen, and has json data files, for sure
users won't need to see any of this test stuff
uhh by user i mean like coderebirth, which does use sourcegen
oh that one which I failed to git clone
yep
let me try again lol
lol
how much is the folder?
I'm mainly interested in rewriting to Incremental Generators. and having some sort of tests would make me feel confident.
CodeRebirth does have res/namespaced_keys.json but no tags.
yeah true, not really a need by any mod other than dawnlib to add tags so never did it on coderebirth (since dawnlib is adding tags into base game content at runtime)
interesting
I wonder how much AI is going to suck ass at porting to incremental generators. it's gonna be either horrendous or absolutely nail it. i bet there could be nothing is between.
lol
it's... definitely more precautious than the current code. But granted that it's a compiler plugin that should not crash its long-running pipeline, I guess it's fiiiine
i find it pretty cool, i just gotta leearn about it before i can push it 😭
I dunno what that feature means 
moons can be locked, locked and hidden, or just hidden
when moons are locked but not hidden, their name can be overriden
so you can do stuff like:
???
or Oxyde (Locked)
idk if LLL knows about any of this info for dawnlib moons, i read whatever LLL has, though LLL doesnt have the name override stuff afaik
Ye it doesn't have it
implemented better scrubbing (removing only version from the snapshots, not the entire line) because apparently it's going to matter soon™
Glad to see Terminal moon page override is back, LLL can be weird with un-hiding Embrion and Artifice which is annoying to me
Weird how? 
Or like what else does the DawnLib moon page do that merits displaying less information
I know it's got the Locked name override but I dunno what actually uses it
I have the “hide moon” box unchecked for Embrion and it still hides it
Also the LLL page did not display prices, even if you have the setting checked
I can look into this though, but not sure why the other stuff ain't workin for you
No problem 👍
In my experience: will suck ass quite a bit
AI has been very helpful with discovering how to do stuff with C# analyzers in general though. It's just really hard to find stuff about them with a web search
APLC might use it soon. TLDR: It currently uses LLL to block access to moons that aren't unlocked yet and handles store items itself (I don't think LLL has a way to lock store items), but when adding compatability for DawnLib, I saw that the predicates allow me to handle the locking/unlocking in a much nicer way
I’ll get back to you, sometimes I myself fudge the details on these sorts of things
Embrion not being un-hidden is 100% a thing though
Oh ye LLL doesn't have locking store items like that, but yeah I could add compat for the locked name overrides
I was thinkin of changing the moons page a bit (like the results for simulate command), but DawnLib overriding the page goofs it altogether 
Tbh ideally I don't think we should be adding QoL changes to the terminal, iirc mine is just how vanilla looks like plus the override names thing, it's better for other mods to modify that type of thing like TF
I mean the LLL defaults also match the vanilla Terminal (preview weather, sort none, filter none), but you could argue having Company moons at the top or hidden moons listed with "???" (letting players know there is a moon that could be routed to) are a kind of QoL too 
It do be pretty subjective though, moon page does need to be overridden for custom moons to show up, anythin else is just extra stuff the API in question wants to offer
The ??? Thing is just an override for the moon name for the dev, I wouldn't call that QoL tbh
It's not something I do automatically
Nah someone can do whatever they want as an override
I guess there could be like an 'extra vanilla' setting for LLL that just gets rid of the preview/sort/filter thing lol
Dunno, I'm not against having QoL but it's hard to balance being an API that does nothing without anything using it and also a good mod to have
The stuff with preview and filter should probably be done on DawnLib's end as a compat or something like that, unsure
Yeah it could probably be done with the new Terminal command stuff mayhaps
But also I'm not a TerminalFormatter enjoyer so I do just run the LLL page on my own pack 
I wanna make TerminalUnformatter that just adds spaces and line breaks to terminal text at random 
I could look into a PR for this at some point though, but I do got a couple things to finish 
i dont use it either :p
okie
kinda disagree
because I don't think that every individual content-loading mod should add their own QOL, and it would be better to have a more centralised solution for that
at the same time I didn't start working on that for the last 2 months 😳
a centralised solution is kinda something darmuh's been working on i think, it's gonna take a bit though to refine the thing, there's a few things to consider with terminal commands and how they should be handled, especially with some modded ones not being made consistently
?
independent as in not a part of any "bigger" mod
we've talked about this a long time ago
probably, i might've agreed in the past but disagree now, it's just not reasonable to expect to make a library for each content type and have them behave with eachother
"soft dependant"
it's also much more maintainable for a community to have one thing split properly into modules
a library for each content type
depends if we see terminal displaying options/commands as a content type
yeah, that's what i wanted to say
they are in dusk
but preview/filter/sort of moon catalogue is for example a part of LLL
i have no idea where you're going with this tbh
which - if i'm being honest - would work better if that "content type" could be registered and managed more dynamically
since it's super hardcoded in LLL
yeah, definitely, it shouldn't be something hard-coded
and it cannot be easily overridden and stuff
if it was a proper content type it could also be properly taken into compatibility stuff
since its hard coded i cant do anything in dawnlib to keep it existing i imagine, though dawnlib's moon screen is currently also not properly registered (will be at some point though)
yeah, that was my thinking as well
Not trying to phrase this as a defence or anything i could have done it better but worth noting this also stems from vanilla terminal being so hard coded
yeah i agree, we're just speaking from an ideal standpoint
ideally i would love to have something like this
which to get overridden would just need a simple postfix
my goal is to make the moons/store modular to that degree
we'll see how it goes
mmm nah personally i got different ideas, i'd set up a registry of the terminalnodes, set up their record class to have information about them, replacing their displayText with an editable Func<string>, and all you'd need to do is edit that Func<string> if you wanna make it display smthn different, (it'd also have references to all nodes related to it and whatnot)
something like
LethalContent.TerminalNodes[TerminalNodeKeys.BuyNode].Node to get the buy node
but then you can do stuff like:
LethalContent.TerminalNodes[TerminalNodeKeys.BuyNode].DisplayText = () => newTextOrWhateverThatIsDynamicBecauseItsAFunc
you would also be able to grab stuf related to the node like the terminalkeywords referenced in it and whatnot without using Linq to grab it
im trying not to stray from vanilla in this implementation anyway
i see your point, but that's on a whole Node basis
i mean, each display thing is a node, no?
oh yeah, that makes sense
but it does get complicated, because nodes can have multiple results, yadayada
my goal is to ignore how vanilla does it (for the most part)
🙃
simply lovely
i dont think that'll ever go far because it just requires so much maintenance
yes and no
it'd also be super incompatible with other mods tbh
Once I get back from holiday I gotta reimplement my games terminal which is super convoluted cuz its networked and intertwined with my content system
Thats the privilege of being big dawg api
u get to
you can but you really shouldnt
I disagree
in regards to terminal i think we should at least try
There’s responsible uses of that weight if it’s for the long term benefit
there are but if it can be still done in a clean way, I'd go for it
If there’s a whole new genuinely better approach at the cost of other mods having to play ball make them play
Half measures will eat u alive
they will, and I don't plan on doing something half-assed or the like, the terminal just needs to be more accessible, and more edit-able
and those two things can definitely be done while keeping vanilla as it is
vanilla terminalnode system has its limitations that aren't very hard to hit
what are those limitations though?
other than thw two things i listed, what do you want from the terminal?
for example i was trying to do commands in Registry, and very quickly found out you cannot do a command with 2 arguments (something like weather change <level>) since the compatibleNouns mess was unreal
and also didn't resolve, like
ever
Some sort of tree based hierarchy would work amazing there
and that's what i've done
yes, that's a limitation, but that can be evaded with editing some of the vanilla code instead of completely rewriting an impl i believe (darmuh did it anyway afaik lol)
can you elaborate what you mean by tree based hierarchy?
i believe doing an implementation that is not limited by registering nodes/verbs/keywords is better for that purpose
instead of current List<TerminalNode> which are dynamically linked through keywords and bullshit every node has either a parent, child(ren) or both
so word-by-word you're going down the tree to find the relevant node
i dont disagree, and thats kind of how vanilla is, it's just super rudimentary in how it searches for those links but the links are parent child in that way (logically anyway)
that's sort of how i planned to make it look like in dawnlib's record classes for them
you have the node and its related links
id have to relook at the terminal since i forget if i dont look every 5 seconds but it's possible to reorganise it like that while keeping vanilla as is
i mean, that's your opinion - i would rather do it differently tbh
since i'm thinking more from the code side of things
I am thinking from the code side of things though?
and registering that many nodes, keywords and nouns was painful in the code
i mean for registering per se, since i know your command implementation is editor-based
It's moreso code based really
There's not much u can do editor wise either tbh
It's hard to be dynamic in editor
oh is it? didn't know 😳
fair
Yeah you can't really be like "if you're on moon x, have the text by y" in editor
but i'm assuming you have some sort of a wrapper for actual registration of vanilla stuff, right?
That's the plan, which I have it mapped out in my head how I wanna do it
oh alrighty
Right now it's just adding to vanilla and preload editing nodes etc
But I've done a few commands on a few mods raw in code just to see how it would look like
The only thing that's kind of weird about a tree only impl though, how would u buy a shovel by typing shovel instead of buy shovel, I haven't seen how zeekerss has that working tbh
zeekers has two-way links iirc
you can get to "Buy" verb/keyword from the shovel node
I imagine that's how it is, checks the first keyword for anything that has other links like buy node, or just the node itself
Atleast logically anyway
let me actually check since i'm sure it has the base verb stored
I think it does but I'm on phone so it's hard to tell
I've been on a bus ride so I've just been speaking off memory for the most part
AIN'T NO FUCKING WAY 😭
Yeah you didn't know that existed? Lol
There's another one that tries to do it partially but also does it backwards
Where it prioritises cond as confirm rather than condone
(just an example)
Zeekerss fuzzy matching is kinda weird
alright, from what i see the shovel node only has buyItemIndex set up and 2 terminalOptions nouns for confirm/deny
which means it has to be resolved at parent's level (Buy)
Doesn't it have a default node?
Which is the buy node? I could be misremembering
Typing "sho" should ask you to buy a shovel because of that iirc
i was misremembering as well, there's nothing inside TerminalNode that links to its parent
It's TerminalKeywords really
i'll try to understand this rq
I've been on a rollercoaster ride night, which is to say, rewrote SourceGen to incremental generators API. It resulted in more code, more ad-hoc data structures, required more up-front planning than a simple single-pass script. None of that terribly matters for the use-case at hands, but it was a fun ride.
terminalKeyword has default verb
Take your time, it can take a while, it took me a while to figure it out
Yep
The shovel one does
You'd need to either log it or check in unity to see if shovels keyword has the buy node as a default
Lol, I'm glad you had fun, I'd love to see what that looked like
sho 3 Enter wee 2 Enter pro Enter
let's goooo
Wait what's wee give you
it does
this system is insane
Okay yeah knew it lol, if you type sho, it matches shovel keyword, and then uses the default to buy it
If you type buy sho, it goes to buy keyword, checks for sho, and buys it
It's not that bad it's just implemented weirdly in code imo
Like I think he just struggled to implement this system
The system itself isn't bad
If it was up to me, I think I would've wrote a worse player experience, lol
Even if my code had been cleaner and more modular
it's not bad, since it works and is extensible with modded moons and stuff
but the implementation could've been better
instead of cramming all properties into TerminalNode for example
It's just enough extensible that it's actually nice, but his way of matching for it is not, the code is messy in some places, and honestly the whole thing he does with matching the id's is bad
Like buyItemIndex is bad
But none of that gives me enough justification to completely rewrite it, having a good impl of conflict fix, tidying up his code and making it more extensible via overriding some stuff like displayText to be a Funcc
Those 3 are what I need
Now that I'm comfortable with transpilers I doubt this would be too difficult either
I think I'll struggle on linking the nodes in a super clean way, but I think it should be doable enougg
That said I would rewrite the weather code
There's no system there
It's just bad
so true
having a good impl of conflict fix
that should've just been Levenshtein distance check
making it more extensible via overriding some stuff like displayText to be a Funcc
that's what i'm mostly planning, although my focus is on more granular level
Levenshtein is too much (according to darmuh, I haven't seen it personally, but I agree a similar check is good)
as in too complicated, too resource-intensive or just too burdensome to implement?
No idea, I think it's just "too much" for the use case
Overdoing it
Though I'm not sure how intensive it is or how hard it is to implement
So don't quote me
Paco: quotes you
😡
i think otherwise, imo it's the best method to compare the difference between two strings
and it's not really that overkill
sure. here's a draft PR against the base "Add tests" branch:
I don't doubt that, I've heard good things, I did tell darmuh to look back at this convo when he has time so whatever the issue might be ig he'll address
Icic, I'll look at that more when I'm home, looks fun though lol
@fallow remnant hi, sorry for bother you. I'm testing sln to slnx migration rn and somehow it bricked SourceGen: Invalid project item: "lib/". A file item cannot end with a path separator.
Do i understand correctly that if i edit
<Content Include="lib/" Pack="True" PackagePath="lib/" BuildAction="None" />
to
<Content Include="lib/**" Pack="True" PackagePath="lib/**" BuildAction="None" />
it will work same way?
hi, what's your .NET SDK version? Does this error show up when running dotnet build?
I think its not error on build just because project is unloaded if i wont add ** to lib/
the screenshot is cut off
so which one are you using?
should be 9.0.310
dotnet --version
9.0.310
same here
idk about 9.x, but it definitely builds on CI with 8.x
so what happens when you cd into project directory, and dotnet build it?
where are you seeing that error message anyway?
vs like non-Code actual Visual Studio?
yeah
removed ** and it builded
that's not an sln migration, that's a recent change done by following an official recommendation to shut up some dummy warning
i migrated in local
after that it bricked
https://github.com/TeamXiaolan/DawnLib/pull/80 specifically this
and after relaunching vc its bricked again
so you are saying that migrating sln to slnx breaks the way Visual Studio / SDK treats NuGet package?
i think? let me try to go back to sln
also try deleting obj & bin folders between the attempts. and restart VS / VS Code
microslop is fascinating
also this particular error message is telling you that you should NOT be having **stars in your file path. which you edited/added/broke yourself?
added myself so vs could load project
errored when tried to build from cd sourcegen
well you definitely can't specify PackagePath="lib/**" output path with stars, it doesn't make any sensee
so apart from VS, simple dotnet build from terminal just works?
yeah funny enough
any idea where VS gets that error output from?
like, which command it tries to run under the hood?
so regardless of slnx your Visual Studio (not Code) setup is currently broken on the latest main branch?
Yeah, i didnt migrate in fumo-dev
nah
Try this:
<Content Include="lib/**" Pack="True" PackagePath="lib/" BuildAction="None" />
include with stars, package into lib/ as before
it worked
funny enough i tried same thing like second ago and it errored in dawnlib itself
but now it builds
restarting vs rn to check if anything changed
restart again and rebuild for good measure, yeah
probably worth bugreporting to microslop, except idk to which repo/project
They programmed a coin flip in there for ya
restarting again
and just like Zeekers they forgot to network sync its random seed
what's the error now? it can't be the same about invalid characters, right?
yeah, its dif
so show it
Schrodingers error
Top 100 reason to not use vs
i saved it and forgot
ah whatever, if it builds and all projects are loaded then its fine ig
Uh oh
Everything alright?
Just updated Dawnlib and WeatherRegistry
Im seeing a lot of red launching to main menu :)
:p
send screenshot of the first error you see
its probably more WR stuff mrov needs to fix
which version of WR are you on rn?
cool. anyway. what about slnx now?
i think he fixed that with 0.8.3
for good measure
Ahh, the one uploaded like 45mins ago
So its not yet on Gale's radar
seems like it
should be fine to merge
if you asked about your pr i mean
feel free hit Approve on github btw
im not trusting myself with merges so xu doing all this stuff
im just testing sometimes
i mean, approving is not merging
(it's just more visible than messages lost in chat history)

ah yes, 30000% of GitHub is being scrapped by AI bots
which is why poor #indie company like microslop is unable to keep up with evergrowing web traffic
@spiral axle Seems fixed in 0.8.3 indeed, just noticed that "day 0" weathers aren't colored unless you change the moon, not sure if thats "new"
Or if I just never noticed it before lol
that's something i know (#1203871322841808906 message), i'll probably get it sorted out this week
Blasted randomized day 0 weathers, am I right? :)
🙂
:)
Holy moly zero errors in an entire quota (if we ignore stupid things that dont matter), first time since v73 released
I have a couple of GitHub tabs open, and as soon as I click any link, I can not even go back. fuck modern "reactive" web UI frameworks
web ui has something to do with the fact that you can no longer view a previous page that your browser was supposed to cache locally
While it's the best method to compare the raw difference between two strings, I can tell you from personal experience it is not the best method to compare user input from the terminal to a keyword. This is because levenshtein will return any matches with the best distance score even if it doesn't match the start of the keyword. Also it doesnt have the context of knowing the importance of a moon keyword over a random shop item over the literal command store. I ended up having to do a lot of tweaking to the distance method just to make the user experience similar to what players expect from vanilla when I implemented the feature in TerminalStuff. That's why I told Xu it was overkill and did not try to use it again in Dawnlib's keyword matching. Users expect to match their input to the start of a word and they also have expectations as to what keywords get prioritized in the game over the other. Dawnlib's terminal extensions allowed for a much simpler implementation that just scores string matches by number of matching start characters and can prioritize them by keyword priority (since dawnlib can detect this as it's already an API for moons, store items, bestiary logs, etc.)
no problem, I have been in the terminal weeds for too long so I must info dump 💀
i feel you
I'll probably write another long message summarizing my thoughts about the convo you batby and xu had regarding terminal commands
the tl;dr preview is my opinion is more aligned with Xu's. I'll explain in a longer message
@urban plaza i know you showed interest in the terminal command stuff, just thought to let you know itll probably be super overwritten at some point to get a better more dawnlib usually aligned impl
though registering them is probably not gonna be super different
all good, thanks for the headups, i ended up not doing it but i would still like to in the future, i just had to get something out so i could go do other things feeling satisfied before i got burnt out on working on the same thing for over a month
idk if it's been mentionned but i somehow don't have achievement tab anymore so i can't playtest and stuff
it's only been happening for a few updates of the lib so idk why it's happening since i didn't change anything in my mod structure
do you still have any achievements? and if so, do you have a mod disabling them? i know niche tweaks disables em, there's also a config for the button in dawnlib itself
it's on a profile where i should have no mod (to my knowledge) that alters that aspect
it's like just libs and stuff
and my own mods, for testing
and imperium
if imperium is impairing my ability to make mods i'm gonna explode
well i'm playing rn, but when i'll get back to playstesting i'll send logs so there can be a better look into things
huh weird, i got em back, but idk what really caused it, can having 2 things under the same name cause problems somehow? because i had that going on but it would be really stupid if having 2 things under the same name breaks the entire thing
I mean, potentially? I can't really say I expected the same creator to be reusing an achievement name
yeah, in vanilla almost everything starts with a TerminalKeyword and then ends with a TerminalNode. The only things you enter into the terminal that dont result in a TerminalNode being displayed are TerminalAccessibleObject codes (doors, turrets, mines). I'm bringing back this picture from my DMs with Xu because just looking at the code doesn't give you a great picture of Zeeker's system. Also, it's unfortunately a one-way system where you can't reliably go back to the keyword from the result.
I agree that it's a mess to work with and it would have been nice to be dealing with a less convoluted system. That said, it's been over 2 years since the game has released and in that time a lot has been done within that vanilla system. I don't think any mod, no matter how big of a Library it is, should be completely overriding that system at this point. Especially if it results in a different experience than what players have come to expect
Also the core of this idea from Xu has been tried and tested since TerminalAPI first started supporting modded commands in like December of 2023. It's just getting a lot more fleshed out now and hopefully will begin encompassing vanilla keywords
obviously i'm not here to tell people what they should/shouldn't do, but completely working around the terminalnode is a bit ridiculous imo
Btw dunno if it’s been pointed out in this server but it’s very very likely lethal’s terminal solution was either directly or indirectly copied from WTTDP
that's zeeker's first game ye?
it has a similar fucky wucky way of handling how that game works
He started making it in like 2020 or smth yeah
It doesn’t but it’s a point and click where you have choices to move to each direction
ohhhh okay
the way rooms are linked via code is a very primitive terminal imo
yeah if you wanted weather change to be a static keyword you just have to supply the full string as the TerminalKeyword.word
and you could either make that keyword a verb and give it a preset list of compatible nouns from what selectablelevels list
or you could implement a feature that catches input after the keyword and then parse it (I've added this feature to dawnlib already)
ofc it gets complicated if you also want weather to be it's own keyword, but iirc weather and weather change would not conflict with each other
anyway, I don't want to word vomit anymore so i'll leave it at that. I also don't want to come off as telling anyone they shouldn't do something if they have a specific vision in mind for what they want to do
Dunno if it matters to people but weather change is not vanilla convention (which kinda ties into the problem)
in vanilla it’s consistent with language
true, it would be change weather
ie verb -> noun
i think that's the whole user experience over everything aspect the terminal has
Going off that note specifically set might be better than change (?)
eg set weather x
forecast (verb and noun) 
to check history you use beforecast
raincast if you wanna see the weather in the UK
to check future you use aftercast
just cast connects to your chromecast
i've compiled a list of rules the terminal system follows with darmuh
- verb Keywords link to other noun keywords and their resulting node, something like
buynode. - noun keywords link to their default verb which again, links to the same noun keyword with resulting node, something like
shovelnode. - accessterminalobjects is used somewhere, i dont know if i have to think about this one when doing commands but ig itll be part of the registration stuff, something like
r3node. - terminalnodes can be query if they have terminal options, otherwise they're just "display info" nodes, something like
buy x 1, confirmnodes orinfo ynodes. - some keywords are linked to a special result, this takes it to a node that's simply there for display purposes, something like
storenode. - some nodes will have a terminalEvent for them, i think every node can have one and it'd run, i dont think there is a scenario where you implement an event and it doesn't run, but they're currently hardcoded so ill probably overwrite vanilla's hardcode-ness and put it into an actual event for organisation' sake
thanks for the insight, I'll keep that in mind
my goal isn't to completely redo the entire terminal, i'm planning to build an implementation of commands that are built separately from the keyword/noun system, have their own word parsing, and display their result in their terminal node and switch to displaying it
although my wording might've suggested that my scope was much wider, sorry for that
nah that's probably on me for misunderstanding
as long as your system ends in a TerminalNode that's pretty standard for most mods touching the terminal
yeah, absolutely
wrote interior documentation for those interested: https://thunderstore.io/c/lethal-company/p/TeamXiaolan/DawnLib/wiki/4102-c-interiors/ (only the editor part is complete, but also since this involves hotloading it'd be awkward doing this in code anyway)
TerminalCommandBasicInformation complexCommandExampleBasicInformation = new TerminalCommandBasicInformation("DawnLibComplexCommand", "Test", "Test complex command", ClearText.Result | ClearText.Query);
DawnLib.DefineTerminalCommand(NamespacedKey<DawnTerminalCommandInfo>.From("dawn_lib", "test_complex_command"), complexCommandExampleBasicInformation, builder =>
{
builder.SetKeywords(["complex"]);
builder.DefineComplexCommand(complexBuilder =>
{
complexBuilder.SetSecondaryKeywords(["first", "second", "third"]);
complexBuilder.SetResultsDisplayText([() => "result 1", () => "result 2", () => "result 3"]);
});
}); // Complex Command
have been spending the last week since my conversation with batby and mrov writing my terminal rework in dawnlib, what darmuh wrote was great and helped me a lot but i've been trying to simplify it and make it more extensible, above is an example of a "complex" command, i should probably give it a better name, something like "branching" command maybe, i imagine i'd use this for something like:
forecast rainy
forecast stormy etc
the implementation isnt even actually that bad tbh
probably because discord formatting kinda sucks tbh
i think how long that example var is and how long that type name is is not helping
nothing should have both complex and basic in the name
😭
lol, im just very particular with my naming, complex is the type of command, subject to change,
and the type TerminalCommandBasicInformation just has a few things in it for organisation
just this really
take or leave it but that could honestly just be called CommandContext or smth
i dont disagree, none of the naming is final since a few things are redundant rn
for example i have SimpleCommand and ComplexCommand but the only difference is that ComplexCommand is just a list version of the SimpleCommand, so in reality the naming here isn't the best and SimpleCommand isn't even needed
another command type done
make it blind you with blue if you say blue
its possible for the person setting it up to do that, that's just a SimpleCommand since all you do is type something and it does something + display something
So it’s just a command
yes, it's just a command for displaying text, does nothing else, but i've found that the terminal has a few types of commands so i named it SimpleCommand
JustCommand
I'm gonna disagree with the rest of the goobers and say this is a mostly straightforward and understandable creation of a command that can take 3 paths: complex first → result 1, complex second → result 2, complex third → result 3. The outer layer is just meta information.
My only question is what's with builder terminology but no Build()? Are the builders held for later use by Dawn to create the commands and not intended for use by consumers?
It’s extremely intimidating for people without a pretty comfortable understanding of c#
Yea its big and I'm a science genius girl
And the many anonymous methods 100% throw off anyone that doesn't know what that stuff does
Its very "code" kinda code
Aside from the confusing sorta-builder pattern, I can criticize the inclusion of an array of delegates that return strings. If I'm making a complex command I probably want to share conditional logic, even your example of forecast rainy and forecast stormy makes no prediction of needing different delegates for each input
Now, I could solve that by making the delegate capture the input string and then call my own method and pass the input to it
But I just can't imagine needing the separate delegates enough to warrant them always being split and the overhead of capturing the input into them each time
the Build is called on its own after the callbacks from the builder
Okay, so it is a builder, that makes sense. You can tell I don't use Dawn
ye that's fine, it's meant to be understandable to someone who's not used dawn before, trying to figure out what you're saying so i can improve it lol
For this part
complexBuilder.SetResultsDisplayText([() => "result 1", () => "result 2", () => "result 3"]);
You've given the ability to use an action for each input where I think you probably want those merged and just give the merged logic share the input so you can do like
complexBuilder.SetResultsDisplayText(MyResultsHandler);
And MyResultsHandler is a Func<string, string>
Or is this not a handler and its supposed to be a list of strings?
i personally never really knew/used builder patterns like this before touching anything like this in dawnlib, it does require a bit of research but i think its one of the more easier to understand concepts here for this type of thing
uhh, so from my understanding you're saying, instead of defining each input and result beforehand, you define a Func<string, string> that takes the input and gives an output for it?
Uh wait let's get on the same page before I go any farther with the idea
okie
I'm under the impression that there's like a Dictionary<string, Action<string>> inside this terminal command right now and that you map forecast sunny to the text sunny and lookup the handler for sunny and then run it to get the text result from it
oh nah, a big point of this implementation is that i don't change vanilla handling, so i dont actually have to handle any sort of lookup like that, the terminal is made sensibly enough that i can just insert nodes into the right places, etc and it'll work
though i do have a decent level of control over some stuff
Wait is that how vanilla does getting the result strings then? A list of actions that return strings?
nah vanilla has no actions, its all fixed strings that are edited in a dark alleyway, but it is made okay enough that i can just store each node's func<string> through adding it as a field and applying it on a method that handles every single node before their displaytext is used
Oh right yea that is a Func because it actually returns something
Yea I guess this way works for keeping it straightforward and if somebody like me wanted to convert it to one handler they could capture the input and force it
yeah, there's a few helper methods that i wanna document that were made to grab the player's input too
i have a InputCommand type that is a Func<string, string> that gets given the player's input
its why i think some stuff i have is redundant but im kind of okay with it because it makes it easier to make a command that is wanted
Yea, that's more my style since any permutation on the base command is likely to have repeated logic
yeah i think i need a lookie over a bunch of the names, right some xml docs or whatever shows up on an IDE, and then it can probably be shipped in an okay state, though it'll probably take me a bit to write the editor portion of all this lol
I dunno if you already do it but make sure the XMLDocs go in the thunderstore package directly next to the assembly they're from so it works with the nuget source when people reference Dawn from aaron's nuget
never did any xml docs, i thought they just go above the method as specially formatted comments
That's the way its done, yes, but then it gets built into an actual XML file that must be directly next to the DLL file for IDEs to recognize them. It is not stored in the DLL
oh i see
For people just reading your source code it doesn't matter, for people referencing Dawn when its built then they need the XML file in the right place
I don't know which use cases Dawn caters to
hmm well i plan to write documentation in general alongside xml comments, so i gotta figure out how to get that file built, and i gotta figure out if its okay with the nuget package of dawnlib, since its also a nuget package in general
question about scrap configs, does it add the default value to the value in the text box, so this one'd be vanilla +11 weight? or does it override the default weight?
This text overrides the default value
You're essentially setting your own value instead of default here
is there a way to make it fill in the default instead? cause i have like, over 400 scrap i think
though notepad find and replace could probably assist me with that, but i'd want the default values to be in the box for users who download too
I'm confused what you're asking for
Is the s.s. dolphin replica yours?
yeah, it's my scrap, i'm just wondering if it'll populate users' config with the default i set, basically
i would assume so, i just wanted to double check before i send it out
guess i coulda just deleted my config to check rather than buggin ya, sorry bout that
It's alright lol, yeah it'll do the default
not releasing the next update yet but here's the changelog for it:
- Rewrote most of the terminal commands implementation to be simpler (for now) and much more extensible.
- Currently possible commands, some of these are not able to created via editor and require code:
- Input
- Feeds the player input back to them, allowing you to modify the text or running code according to whatever they might have typed, does not have unity editor support.
- SimpleQuery
- A command that has two outcomes, with a query that lets you type something to end up in either outcome, has unity editor support.
- ComplexQuery
- Similar to SimpleQuery, but allows you to have as many outcomes as you'd like, has unity editor support.
- Simple
- A command that displays text, that's it, has unity editor support.
- Complex
- Similar to Simple, takes in multiple words in one command to display different text, has unity editor support.
- EventDriven
- A command that has an event that is run when it's activated, does not have unity editor support.
- TerminalObject
- Used by Hazards, not much is able to be done with this yet, does not have unity editor support.
- All these commands, when created via code, can have their results edited via a
Func<string>for different results according to different conditions.
where the schrodingers command option where it id both a question and a statement at the same time 
(This all looks neat)
ty <3
add a Terminal command sudo insmod to load mods direectly from Thunderstore at runtime 🙏
Any update on this? Just started a new save and tried to update all our mods and ran into it again
019c6935-3ad8-415c-fffd-b8b223fffbe0
Profile with minimum mods to reproduce. The rate of the mineshaft interior on artifice is set to 10 instead of the vanilla default of 213, but with the latest dawnlib it just uses the vanilla value of 213 instead
I'll take a look
It's probably better to use something like lunar config if you're changing vanilla stuff around though, the issue is likely that I expect every mod to edit it's own registered content and not also vanilla lol
I have an inquiry
I wanted to play with Dawn's tile injection, but I can't seem to get it to work. I made a simple room with a tile component using a manor room as a reference, created a tileset containing that room, and made an Addition Tiles Definition using that tileset. After compiling the Duskmod and loading the game I get mineshaft on fucking Rend I never see the tile
can you send me a zip package?
Sure, one min
to clarify for anyone else that might have the same problem later, they forgot to set the branch cap in the second screenshot
v0.8.0
- Rewrote most of the terminal commands implementation to be simpler (for now) and much more extensible.
- Currently possible commands, some of these are not able to created via editor and require code:
- Input
- Feeds the player input back to them, allowing you to modify the text or running code according to whatever they might have typed, does not have unity editor support.
- SimpleQuery
- A command that has two outcomes, with a query that lets you type something to end up in either outcome, has unity editor support.
- ComplexQuery
- Similar to SimpleQuery, but allows you to have as many outcomes as you'd like, has unity editor support.
- Simple
- A command that displays text, that's it, has unity editor support.
- Complex
- Similar to Simple, takes in multiple words in one command to display different text, has unity editor support.
- EventDriven
- A command that has an event that is run when it's activated, does not have unity editor support.
- TerminalObject
- Used by Hazards, not much is able to be done with this yet, does not have unity editor support.
- All these commands, when created via code, can have their results edited via a
Func<string>for different results according to different conditions.
this is a fairly big update, it'll let me make our own terminal screen and formatting for coderebirth's story logs since i didnt wanna fit it into sigurd
thats a lot of letters can I get a tldr?

Yeah
Something you wanna use
Hope that helps
will this break any mods?
will you break any mods?
i hope it breaks every mod you use
shockwave breaking wasnt even my fault
it was your fault because they said so

just like how beanie lib is actually secretly behind all the weather registry bugs because i said so
if you say it enough its true

it enough
knew it
i'll burn you
so uh.. 0.8.1 causes everything in my pocket rooms to be tp'd back into the ship
i was half worried this would happen, ill talk to melanie about fixing it on her end
0.8.1 fixes cruiser issues and just in general items being OOB not being teleported back so i dont think ill roll it back rather just have melanie do a more proper patch
i switched from using shipbounds to innerroomshipbounds since that actually fit the ship (shipbounds was bigger than the ship itself)
so she needs to retarget her patch to also affect innerroomshipbounds
@sudden cliff ^
I wonder if this messes with mine...
it might, i used to just check if an item was within shipbounds for whether to teleport it back to ship, if all you did was target shipbounds you need to also target innerroomshipbounds
I legit forgot wht i did hang on
yep, everything in the Miside dimension is gone too
i would close out of your game by Alt + F4 until the devs update so as to not screw up where the scrap are
atleast if you care about it anyway
i just close my BepinEx launcher which is pretty much the same
ye
can also just revert back to 0.8.0 temporarily?
ye
👍
the changes in there are not significant for your usecase
obligatory @gloomy dirge ping because you're like the only person i'd know wouldnt want this breaking your stuff since you do big runs
should be sorted now
been doing a Journeys run for a few days now, so havent even toucjed 0.8.0. thanks for the heads up tho 
its footstep surface based, so if you can label ground as having different strength to its gravity
you can also change where the direction comes from but it doesnt rotate the player so its not as great unless you use a playerphysicsregion
can i make it affect the entire map?
i can't hop on unity rn to check the scripts, so im asking you first
ye, just give the script to all your terrain meshes
uhhh okay, I should have this fixed in unreleased version, just gimme a sec before I release
there's probably gonan be a few more here and there while i improve things editor wise
not today but yeah
nothing that'll affect any user
it WOULD be really funny if an editor update had some butterfly effect
you update it and specifically purples configs break and nobody else can recreate it

That'd be really funny, if only
she already broke centralconfig working alongside 0.7.3+
ive been what we refer to as "lazy" with swapping to lunar
If you guys want a possible DawnLib issue to chew on, I am having this with Lunar Config:
*they didn't update their mod
*CentralConfig is fundamentally incompatible with how DawnLib (and LLL, with that one setting not disabled) handles weights 
For it applies weights on HangarShipDoor.Start() and only then

skill issue
The values being edited here don't even require or relate to DawnLib lol, try disabling mods seeing if it works with just lunar first to see if it's a mod incompat
I see
I guess the bumpy start Lunar had with its DawnLib update has made me think the two are more interwoven than they really are
[Warning: DawnLib] Min (64) is bigger than Max (32), setting Min to 32
Why is this a thing xd
great question
cause the thing is bigger than the thing
wdym?
its related to your configs like scrap value
hi xu
what that mean
hehehe
i also get that spammed like 1 billion gazillion times
no idea what that means, i just trust the process
it means, like i just said lol, stuff like coderebirth scrap values have had their values backwards by accident for a bit (64 to 32) instead of (32 to 64), so it just sets the minimum value to match maximum value
hmmm oki
I have not changed the value of scrap ever in the 2 years Ive had my pack
And I havent seen that warning until I updated to the new version I just quickly tested
Sure other mods might have changed values as I run meltdown, diversity, brutal company etc
But I just found it odd it was being spammed for like 20x times in my newest log
Oh I should read first, then type
xd
Well, seems harmless, so I'll ignore it.
I'm an error purist, and it still pains me smth explodes when I quit to menu but can't figure out why or what as its dice mod that throws the error but it can't be dice mod as origin
go fix the remaining null warnings!
iirc there is still a dozen of them

its been around since coderebirth's last update for coderebirth lol, i accidently swapped min and max when putting scrap value on the plushies iirc?
pushed an update to give better compatibility with lunar config's map object configs so the dawn ones etc dont get messed up
this might have unintended side effects to mods im unaware of, tested it with coderebirth and the other api's but didnt notice any issues
i think someone else reported this idk
yeah testaccount will fix it when he can get to it @pine dirge 
why console hate dawnlib
@urban plaza next dawnlib update will allow these configs to be shown in lethalconfig (i wasnt aware they werent showing for no-code editor based registration so i spent today fixing that), just thought to let you know since misideitems is what i used to test
I also never realised that this wasnt showing up, but this looks sick. this also means i will use the actual logo instead of that random sprite from miside i chose when figuring out the setup and registry when i started this lmao
i think i've seen that before, what's causing that lol
I am curious as well lol, but damn is it a really niche thing to notice 😂

Must've been the wind
Somethin with encoding to UTF-8 probably
I think Trim() gets rid of it though
Not sure where that file's bein created though
it is such a niche thing to exist in the first place
it's part of the encoding, not a whitespace
it happens when you write text to file, it doesn't exist in string
I mean depends on how you encode the string
But you gotta go out of your way to set it explicitly as UTF-8
Or any other encoding
oh, is dawnlib licensed on GPL-3? (since LethalConfig is )
i believe that my code would be treated as independent compatibility code rather than a gpl-derived copy of lethalconfig's code so a license here would not matter
i have struggled a lot onto what license to choose though, ill admit that, and it's likely that i'll end up with mpl-2.0
but either way, for this scenario, it doesn't matter
fair enough
although every static link (on compile time) is considered "derivative" under GPL3
fucking thing
not 100% sure what that means but:
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void CreateLethalConfigMod(DuskMod duskMod)
{
ModInfo modInformation = new ModInfo()
{
Name = duskMod.ModInformation.ModName,
Guid = $"com.local.{duskMod.ModInformation.ModName}.{duskMod.ModInformation.AuthorName}",
Version = duskMod.ModInformation.Version,
Description = duskMod.ModInformation.ModDescription,
Icon = duskMod.ModInformation.ModIcon
};
Mod mod = new(modInformation);
LethalConfigManager.Mods.Add(modInformation.Guid, mod);
foreach (ConfigEntryBase configEntry in duskMod.ConfigEntries)
{
Debuggers.LethalConfig?.Log($"No-Code DuskMod | Generating config item for {configEntry.Definition.Section}.{configEntry.Definition.Key} with type {configEntry.SettingType} and value {configEntry.BoxedValue}");
BaseConfigItem? baseConfigItem = AutoConfigGenerator.GenerateConfigForEntry(configEntry);
if (baseConfigItem != null)
{
baseConfigItem.IsAutoGenerated = true;
baseConfigItem.Owner = mod;
mod.ConfigItems.Add(baseConfigItem);
}
}
}
while it uses classes from lethal config, there's a variety of reasons why it'd be considered independent compatibility code rather than gpl derived hence me needing to license it as gpl
no code was directly copied
the registration paths for the configs are not the same, LethalConfig's code depends on stuff like having a valid Assembly which I worked around by populating fields and classes at times that LethalConfig wouldn't usually expect
it's simply compat glue/adapter code, using mostly their API surface and types with my own implementation logic
it's own class, compat is optional through a config, no lethalconfig code/files are bundled into dawnlib, and at the very top of the file for good measure:
// Compatibility Adapter written independently for interoperability with LethalConfig. No LethalConfig source code copied.
we can only guess if that's enough tbf
not sure what you could humanely do more than that to be considered independent compatibility code
GPL-3 is cancer and needs to die as such
IANAL, but yeah, using symbols from GPL-3 in your code taints your code with the license
who cares tho

imaging publishing a library which isn't at least LGPL
in case obvious things need to be spelled out: I'm not pro-LLM guy, but in this AI age it has become pretty clear all your licenses and copyrights don't mean sh*t anymore
oh so we all get a free pass then?
obviously we live in a place and time when you can't really protect your thing unless you got money to do so
but really?
exactly. unless you are playing against Oracle or something, at most you gonna get scolded on Twitter (formerly X) (or vice-versa)
which is 1000% not the case with mods linking to and ripping apart a proprietory game in the first place
If you need to protect it, keep it private. This is the day and age of ai and its circlejerk.
If you need to protect it, keep it private.
This action is incompatible with reality
i think you know that AI we have now is never gonna go away, right?
and long-term solution is not to "never publish anything"
whats the point then

Yup but what r you gonna do? Every llm is just gonna read your shit anyways. People can also just handfeed it, and noone can stop it
trying is a nice idea
we're making free mods for a game that has its peak in the past
$FREE.99
not to pivot but honestly i could see a resurgence pop off
i hope it comes someday cause this game still has insane potential
but for now the updates are rare
he did take a year off to work on another game which was a choice
One big update 🤞
but upcoming update has at least 4 fully developed enemies afaik
Also smh protecting Seichi marriage code so that I can't open a PR to fix its quirks 

Jacob wants to move a bunch of things from it to JLL or UR idk so its done properly
honestly i counted 2, maybe 3, but its vague (which isn't a bad thing), regardless of all that though it is definitely a huge update that will affect most moons visually, performance, enemy dynamics, etc, so im excited
isn't the marriage code just connecting people in their death status? what kinda JLL script or UR script is that lmao
Also sounds wacky 
To include bundled in JLL/UR I mean
maybe i should be bundling my random scripts into dawnlib at this point lmao (nah thats a bad idea lol)
It has a few transpiler fuckery to work properly, Its been a while and my memory is foggy.
no but like, the mechanic itself
More the reason it should stay in Seichi 💀
isn't it just tying players to death
and yeah^^
Unless he's got like a script abstract enough/with a general use case I dunno if it's worth it to include in a library
I can see if like other moons want marriage I guess lol
only reason i included gravity stuff into dawnlib was simply because it made sense to include it in footsteps implementation
like beanie asked for collider/trigger based gravity
and i just cant justify that
people can hook onto what i do to make it possible from an external mod, but, from dawnlib itself? ehh
3 minimum confirmed/individually referenced
Ye you're already doin Transpiler stuff for the footsteps so it's not a stretch to add onto it
i already include too many misc scripts in dawnlib that im kinda sad i included
I think it was a masked’s transpiler stuff but idk
this is why this was a thing at on point 😛
https://thunderstore.io/c/lethal-company/p/IAmBatby/LethalToolbox/
to like, mask the married player when one gets masked?
yeah 100% agreed, JLL, ItoLib, LethalToolbox should ALL be their own mods
they should not be bundled into a big library
Ye
If you get masked, the other one too, so both of ya will spawn a masked enemy.
some misc scripts are acceptable
Like any specific mechanics the library adds I can see benefiting from a bundled script for interacting with said mechanic
Such as the DawnSurface component
but if its like, something totally unrelated to any content i've directly made possible to register like applying gravity to a footstep surface, it shouldn't be there

