#DawnLib [V80]

1 messages · Page 13 of 1

hallow gale
#

using Lunar

oak linden
#

ye i can take a look at that one prob

hallow gale
#

019c2986-d4ff-67e7-7a36-4a7447933d29

fallow remnant
oak linden
#

Yeah I gotta accept that when I'm next on, just got off for the day lol

fallow remnant
#

and I just woke for the second time, and gonna go to the same clinic for the second time virtually for no important reason

oak linden
#

Sounds very important

fallow remnant
#

nah, just some paperwork

fallow remnant
#

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.)

agile sky
#

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

calm maple
#

I finally got sdk 10 so now you have permission to update all the tools to net 10

calm maple
#

hehe

agile sky
#

For MonoDetour.HookGen, I'll also update it to require .NET SDK 10 because roslyn/Microsoft.CodeAnalysis.CSharp 5.0.0 brings nice features

#

also don't trust anything ChatGPT says regarding these things

calm maple
#

pfft codeGPT is the smortest

agile sky
#

it's not just the smortest, it's the giga-smortest

calm maple
#

We should have Claude maintain DawnLib, see how long it takes it to break everything

fallow remnant
spiral axle
fallow remnant
fallow remnant
#

just a heads-up: null-vehicle and null-unity branches have a little harmless merge conflict when rebasing onto each other

oak linden
#

ah

fallow remnant
#

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

oak linden
#

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?

fallow remnant
#

it's a matter of personal preference

#

I'm just used to KDE workflow where we rebased to no end, because we never "merge"

oak linden
#

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

fallow remnant
#

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

oak linden
#

icic

#

i left one comment on the nullable PR, that's about my only concern/ thoughts about one of the changes

fallow remnant
#

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

oak linden
#

i think i get it, that's fairly interesting

fallow remnant
#

random fun fact: merge commit may have more than two parent commits

fallow remnant
#

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)

oak linden
#

damn, i gotta put the work to bring more warnings in there

fallow remnant
#

work hard, warn hard

static iron
#

Warning leviathan class lifeform detected

fallow remnant
#

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.

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/subtraction-operator#delegate-removal

#

By the way, that footnote is a red herring:

'operator -' is not nullable aware.

oak linden
#

lol that's so odd

spiral axle
#

bruh

fallow remnant
#

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

https://github.com/TeamXiaolan/DawnLib/pull/77

GitHub

In AchievementUIGetCanvas destructor removes a delegate from DuskAchievementHandler.OnAchievementUnlocked, which triggers a warning about possible null assignment.
protected override void OnDes...

fallow remnant
#

AWMYGAAAD

#

get your 30% AI shit together, microslop

#

THEERE IS

oak linden
#

lmaooo

oak linden
#

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

fallow remnant
#

eh, tried GitHub Wiki or github pages instead?

oak linden
#

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

spiral axle
#

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

oak linden
spiral axle
#

should

fallow remnant
spiral axle
#

oh it's super similar

oak linden
#

@hallow gale i see this log coming from your modpack

#

this is probably why it doesnt work

hallow gale
#

yeah that log have been pointed out by the bot in #help-and-troubleshooting aswell

oak linden
hallow gale
#

Did I set them up wrongly?

oak linden
#

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

agile sky
fallow remnant
#

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

agile sky
#

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

fallow remnant
#

don't get your hopes high, but we might even end up with functional snapshot testing for DawnLib.SourceGen from json

spiral axle
#

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?

spiral axle
#

holy

agile sky
spiral axle
#

could you guide me for setting that up? 🥺

agile sky
agile sky
#

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

spiral axle
#

oh that's amazing

agile sky
#

yep!

spiral axle
#

thanksies 😊

agile sky
#

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

spiral axle
#

oh i see

#

i didn't know that was possible, fun!

#

and then the docs wait for that event

agile sky
#

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

agile sky
spiral axle
#

oh i'll have to comment everything for that to work anyway 💀

agile sky
#

bwah

#

the edit link ofc itself already points to the library source code instead of trying to point to the website source code

spiral axle
#

oh that is nice

#

honestly starlight might be my favourite thing to work with rn

#

just put the markdowns and enjoy

agile sky
oak linden
#

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 (@ratijas added to credits).
icy tulip
#

whaddya mean by... control

#

guuulp

oak linden
#

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

icy tulip
#

cool

#

so beef you just need to make 5000 player parenting regions yayyyyy!!!

#

@bronze girder this is your punishment

#

for uhh

oak linden
#

you just need 1 plink

white finch
icy tulip
oak linden
#

you definitely wouldnt do that by playerphysicsregions

#

paco's right too

white finch
#

I might tinker with gravity rotation though

#

I just be finishin Bozo update

#

For it is no longer Christmas

icy tulip
#

ofc using them would be unoptimized lole

white finch
oak linden
#

i would appreciate that, it's a lil annoying when i tried to do it

icy tulip
#

i was jokling

#

they do actually rotate the player tho

sly marsh
#

!nuke Bozo if it's not updated by Saturday /j

icy tulip
#

just

#

awfully

oak linden
static iron
#

Nice shrug

oak linden
#

ty

oak linden
#

@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)

sly marsh
oak linden
#

maybe

white finch
#

The correct one is on Thunderstore greed

hollow viper
sly marsh
#

Neat

fallow remnant
#

but yea, it sucks that CI is not easy to test

#

yeah, removed action/checkout was an accidental brainfart, I beg your pardon

oak linden
#

It's alright lol

fallow remnant
oak linden
#

Oh is this the warning coming from sourcegen

sacred tulip
#

I wonder how much dawnlib will explode when new lethal version drops

spiral axle
#

same as all other mods

#

either not much or very much

sacred tulip
#

Hi mrov :3

fallow remnant
meager inlet
oak linden
#

I've been on a transpiler fringe lately so it's possible but gonna be probably easily fixable

fallow remnant
#

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

oak linden
#

Lol

fallow remnant
#

do you guys even use git lfs?

oak linden
#

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

fallow remnant
#

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

oak linden
#

😔

#

I learned afterwards I'm not really supposed to be committing assetbundles but tbh I don't think that was the biggest cost lol

fallow remnant
spiral axle
#

nice

meager inlet
#

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

fallow remnant
#

well, i mean, CR download aborted at couple of gigabytes in

meager inlet
#

sure but lfs’s strength is in individual file size, no?

fallow remnant
#

i am somewhat sure lfs was not supposed to download large files right away

meager inlet
#

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

fallow remnant
#

yeah, what's your point?

meager inlet
fallow remnant
fallow remnant
#

a butt-shaped fix to the issue #69...

noice

frozen widget
#

could be a Dawn Lib issue, don't know if its been mentionned before

oak linden
#

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

glossy kelp
frozen widget
#

this is the host pov

#

not even loading anything

#

just players joining

#

though it was somehow resolved? It's a bit ambiguous

glossy kelp
#

yeah got it before
I think its a bug with LoadingInfo mod with LLL 1.6.7

#

not loading tho i dunno

glossy kelp
frozen widget
#

i guess someone's gotta go around trailblazing to find that kind of info, but idk though

frozen widget
#

not when loading moon

glossy kelp
#

it goes away when landing yep

velvet flume
# glossy kelp yeah got it before I think its a bug with LoadingInfo mod with LLL 1.6.7

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 ```
sly marsh
#

Seems to be a LLL bug

#

Downgrade to 1.6.5 for now

velvet flume
#

alright, ty

sly marsh
#

@slender violet you too unless an update gets pushed

white finch
#

Can stay on latest plink

carmine elk
#

Upgrade to 1.6.7 (1.6.6 is current, right? Otherwise the joke doesn’t really work)

white finch
carmine elk
pine dirge
loud mortar
#

Is there a particular reason why DawnLib now turns off the dynamic moon catalog when it detects LLL?

#

Was there some sort of incompatibility?

sly marsh
loud mortar
#

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

oak linden
white finch
#

I forgor if there was anythin else

oak linden
#

Ion remember tbh

#

Company moons at top with selling percent depending on tags probably

loud mortar
#

I might be wrong, but I thought that's also what modifies the displayed moon name when it's terminal predicate fails

oak linden
#

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)

loud mortar
#

It does, but I can warn users to turn off the moon page override in TerminalFormatter

oak linden
#

oh neat its configurable

fallow remnant
#

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

oak linden
loud mortar
#

Surely that can't have any unintended consequences greed

oak linden
#

lol i already pushed an update going back to it

fallow remnant
oak linden
#

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

fallow remnant
#

oh that readme was an afterthought after everything else was finished, and I noticed NuGet complained about the lack thereof in CI logs

oak linden
#

you have SO much in that PR though im lost lol

fallow remnant
#

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

oak linden
#

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?

fallow remnant
#

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)

oak linden
#

interesting, i've never heard of any of this so thats fun lol

#

is any of this for the user of dawnlib or us?

fallow remnant
oak linden
#

im assming they all are for the user from how you worded it but idk

fallow remnant
#

users won't need to see any of this test stuff

oak linden
#

uhh by user i mean like coderebirth, which does use sourcegen

fallow remnant
#

oh that one which I failed to git clone

oak linden
#

yep

fallow remnant
#

let me try again lol

oak linden
#

lol

fallow remnant
#

how much is the folder?

oak linden
#

uhh, atleast a few gigs iirc

#

3gb yeah

fallow remnant
#

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.

oak linden
#

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)

fallow remnant
#

interesting

fallow remnant
#

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.

oak linden
#

lol

fallow remnant
#

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

oak linden
#

i find it pretty cool, i just gotta leearn about it before i can push it 😭

white finch
oak linden
#

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

white finch
#

Ye it doesn't have it

fallow remnant
#

implemented better scrubbing (removing only version from the snapshots, not the entire line) because apparently it's going to matter soon™

icy nest
#

Glad to see Terminal moon page override is back, LLL can be weird with un-hiding Embrion and Artifice which is annoying to me

white finch
#

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

icy nest
#

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

white finch
agile sky
agile sky
#

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

loud mortar
icy nest
#

Embrion not being un-hidden is 100% a thing though

white finch
#

I was thinkin of changing the moons page a bit (like the results for simulate command), but DawnLib overriding the page goofs it altogether plink

oak linden
white finch
#

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 plink

#

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

oak linden
#

It's not something I do automatically

white finch
#

Ah thought it was done for all

#

But that makes sense

oak linden
#

Nah someone can do whatever they want as an override

white finch
oak linden
#

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

white finch
#

Yeah it could probably be done with the new Terminal command stuff mayhaps

white finch
#

I wanna make TerminalUnformatter that just adds spaces and line breaks to terminal text at random beevil

white finch
spiral axle
#

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 😳

oak linden
#

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

spiral axle
#

centralized and independent*

#

tbf i didn't check what you've been working on 👀

oak linden
spiral axle
#

independent as in not a part of any "bigger" mod

#

we've talked about this a long time ago

oak linden
#

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

hollow viper
oak linden
spiral axle
#

a library for each content type

depends if we see terminal displaying options/commands as a content type

oak linden
#

it already is

#

or well, i do see terminal commands as a content type

spiral axle
#

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

oak linden
#

i have no idea where you're going with this tbh

spiral axle
#

which - if i'm being honest - would work better if that "content type" could be registered and managed more dynamically

oak linden
#

ah

#

yeah okay i see now lol

spiral axle
#

since it's super hardcoded in LLL

oak linden
#

yeah, definitely, it shouldn't be something hard-coded

spiral axle
#

and it cannot be easily overridden and stuff

oak linden
#

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)

spiral axle
#

yeah, that was my thinking as well

meager inlet
spiral axle
#

that's also true

#

it's so bad to work with

oak linden
#

yeah i agree, we're just speaking from an ideal standpoint

spiral axle
#

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

oak linden
# spiral axle which to get overridden would just need a simple postfix

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

spiral axle
#

i see your point, but that's on a whole Node basis

oak linden
#

i mean, each display thing is a node, no?

spiral axle
oak linden
#

but it does get complicated, because nodes can have multiple results, yadayada

spiral axle
#

my goal is to ignore how vanilla does it (for the most part)

oak linden
#

i dont think that'll ever go far because it just requires so much maintenance

spiral axle
#

yes and no

oak linden
#

it'd also be super incompatible with other mods tbh

meager inlet
#

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

meager inlet
#

u get to

white finch
oak linden
#

you can but you really shouldnt

meager inlet
#

I disagree

spiral axle
#

in regards to terminal i think we should at least try

meager inlet
#

There’s responsible uses of that weight if it’s for the long term benefit

oak linden
#

there are but if it can be still done in a clean way, I'd go for it

meager inlet
#

If there’s a whole new genuinely better approach at the cost of other mods having to play ball make them play

oak linden
#

and I think, as spaghetti as the terminal is

#

i do see a way

meager inlet
#

Half measures will eat u alive

oak linden
#

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

spiral axle
#

vanilla terminalnode system has its limitations that aren't very hard to hit

oak linden
#

what are those limitations though?

#

other than thw two things i listed, what do you want from the terminal?

spiral axle
#

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

meager inlet
#

Some sort of tree based hierarchy would work amazing there

spiral axle
oak linden
oak linden
spiral axle
#

i believe doing an implementation that is not limited by registering nodes/verbs/keywords is better for that purpose

spiral axle
#

so word-by-word you're going down the tree to find the relevant node

oak linden
#

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

spiral axle
#

i mean, that's your opinion - i would rather do it differently tbh

#

since i'm thinking more from the code side of things

oak linden
#

I am thinking from the code side of things though?

spiral axle
#

and registering that many nodes, keywords and nouns was painful in the code

spiral axle
oak linden
#

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

spiral axle
#

oh is it? didn't know 😳

spiral axle
oak linden
#

Yeah you can't really be like "if you're on moon x, have the text by y" in editor

spiral axle
#

but i'm assuming you have some sort of a wrapper for actual registration of vanilla stuff, right?

oak linden
#

That's the plan, which I have it mapped out in my head how I wanna do it

spiral axle
#

oh alrighty

oak linden
#

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

spiral axle
#

zeekers has two-way links iirc

#

you can get to "Buy" verb/keyword from the shovel node

oak linden
#

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

spiral axle
#

let me actually check since i'm sure it has the base verb stored

oak linden
#

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

spiral axle
#

AIN'T NO FUCKING WAY 😭

oak linden
#

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

spiral axle
#

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)

oak linden
#

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

spiral axle
#

i was misremembering as well, there's nothing inside TerminalNode that links to its parent

oak linden
#

It's TerminalKeywords really

spiral axle
#

i'll try to understand this rq

fallow remnant
spiral axle
oak linden
#

Take your time, it can take a while, it took me a while to figure it out

oak linden
#

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

oak linden
fallow remnant
#

sho 3 Enter wee 2 Enter pro Enter
let's goooo

oak linden
#

Wait what's wee give you

oak linden
# spiral axle it does

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

spiral axle
#

but the implementation could've been better

#

instead of cramming all properties into TerminalNode for example

oak linden
#

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

spiral axle
#

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

oak linden
#

Levenshtein is too much (according to darmuh, I haven't seen it personally, but I agree a similar check is good)

fallow remnant
#

killer

oak linden
#

Ohhh lok

#

Lol

spiral axle
#

as in too complicated, too resource-intensive or just too burdensome to implement?

oak linden
#

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

#

😡

spiral axle
#

i think otherwise, imo it's the best method to compare the difference between two strings

#

and it's not really that overkill

fallow remnant
oak linden
oak linden
hollow viper
#

@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?

fallow remnant
hollow viper
fallow remnant
#

the screenshot is cut off

hollow viper
#

oops, nice crop

fallow remnant
#

so which one are you using?

hollow viper
#

should be 9.0.310

fallow remnant
#

dotnet --version
9.0.310

same here

hollow viper
#

iirc sln to slnx supported only on 9.0.200+

#

or smth like that

fallow remnant
#

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?

hollow viper
#

uh fuck

fallow remnant
#

vs like non-Code actual Visual Studio?

hollow viper
#

removed ** and it builded

fallow remnant
# hollow viper uh fuck

that's not an sln migration, that's a recent change done by following an official recommendation to shut up some dummy warning

hollow viper
#

after that it bricked

fallow remnant
hollow viper
fallow remnant
#

so you are saying that migrating sln to slnx breaks the way Visual Studio / SDK treats NuGet package?

hollow viper
fallow remnant
#

also try deleting obj & bin folders between the attempts. and restart VS / VS Code

#

microslop is fascinating

fallow remnant
# hollow viper uh fuck

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?

hollow viper
#

errored when tried to build from cd sourcegen

fallow remnant
#

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?

fallow remnant
#

any idea where VS gets that error output from?

#

like, which command it tries to run under the hood?

hollow viper
#

no idea

#

hmm let me try to restart my pc, who knows if it will help

fallow remnant
#

so regardless of slnx your Visual Studio (not Code) setup is currently broken on the latest main branch?

hollow viper
fallow remnant
#

Try this:

#

<Content Include="lib/**" Pack="True" PackagePath="lib/" BuildAction="None" />

#

include with stars, package into lib/ as before

hollow viper
#

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

fallow remnant
#

restart again and rebuild for good measure, yeah

#

probably worth bugreporting to microslop, except idk to which repo/project

oak linden
#

They programmed a coin flip in there for ya

hollow viper
#

restarting again

fallow remnant
#

and just like Zeekers they forgot to network sync its random seed

hollow viper
#

first build success

#

its really coin flip

fallow remnant
#

what's the error now? it can't be the same about invalid characters, right?

fallow remnant
#

so show it

hollow viper
#

i cant

#

because its not erroring now

oak linden
#

Schrodingers error

hollow viper
#

i only restarted visual studio 2 times and it fixed somehow

#

oh actually

oak linden
#

Top 100 reason to not use vs

hollow viper
#

i saved it and forgot

#

ah whatever, if it builds and all projects are loaded then its fine ig

open wigeon
#

Uh oh

oak linden
#

Everything alright?

open wigeon
#

Just updated Dawnlib and WeatherRegistry

#

Im seeing a lot of red launching to main menu :)

oak linden
#

: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?

open wigeon
#

Newest

#

The error is so long it doesnt fit in one picture lol

fallow remnant
oak linden
open wigeon
#

Ahh, the one uploaded like 45mins ago

#

So its not yet on Gale's radar

oak linden
#

seems like it

open wigeon
#

Running 0.8.2, that'll do it

#

I'll check it again in an hour or so

spiral axle
#

yup, v0.8.3 has that fixed

#

check whenever it shows up for good measure

hollow viper
#

if you asked about your pr i mean

fallow remnant
#

feel free hit Approve on github btw

hollow viper
#

im not trusting myself with merges so xu doing all this stuff

#

im just testing sometimes

fallow remnant
#

i mean, approving is not merging

#

(it's just more visible than messages lost in chat history)

fallow remnant
#

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

open wigeon
#

@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

spiral axle
open wigeon
#

Blasted randomized day 0 weathers, am I right? :)

spiral axle
#

🙂

quick anvil
#

:)

open wigeon
#

Holy moly zero errors in an entire quota (if we ignore stupid things that dont matter), first time since v73 released

fallow remnant
oak linden
#

so thats why i couldnt approve the PR

#

it wasnt down when i clicked on the page lol

fallow remnant
#

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

spiral axle
#

what does web UI have to do with backend?

#

genuine question

fallow remnant
#

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

spiral axle
#

oh

#

yeah, totally agree

#

not everything needs to be a fucking SPA

flint needle
# spiral axle i think otherwise, imo it's *the best* method to compare the difference between ...

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.)

spiral axle
#

okay, i understand it now

#

thanks for the explanation ❤️

flint needle
#

no problem, I have been in the terminal weeds for too long so I must info dump 💀

spiral axle
#

i feel you

flint needle
#

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

oak linden
#

@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

urban plaza
#

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

frozen widget
#

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

oak linden
frozen widget
#

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

frozen widget
#

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

oak linden
#

I mean, potentially? I can't really say I expected the same creator to be reusing an achievement name

flint needle
# spiral axle i was misremembering as well, there's nothing inside TerminalNode that links to ...

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

flint needle
#

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

meager inlet
#

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

flint needle
#

that's zeeker's first game ye?

meager inlet
#

it has a similar fucky wucky way of handling how that game works

#

He started making it in like 2020 or smth yeah

flint needle
#

I see I see

#

I didnt know that game had a terminal tbh 💀

meager inlet
#

It doesn’t but it’s a point and click where you have choices to move to each direction

flint needle
#

ohhhh okay

meager inlet
#

the way rooms are linked via code is a very primitive terminal imo

flint needle
#

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

meager inlet
#

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

flint needle
#

true, it would be change weather

#

ie verb -> noun

#

i think that's the whole user experience over everything aspect the terminal has

meager inlet
#

Going off that note specifically set might be better than change (?)

#

eg set weather x

flint needle
#

ye I get what you mean

#

it's mrov's thing tho so it'd be up to him really

white finch
#

forecast (verb and noun) beevil

meager inlet
#

to check history you use beforecast

oak linden
#

raincast if you wanna see the weather in the UK

quick anvil
#

to check future you use aftercast

meager inlet
#

just cast connects to your chromecast

oak linden
#

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 buy node.
  • noun keywords link to their default verb which again, links to the same noun keyword with resulting node, something like shovel node.
  • 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 r3 node.
  • terminalnodes can be query if they have terminal options, otherwise they're just "display info" nodes, something like buy x 1, confirm nodes or info y nodes.
  • some keywords are linked to a special result, this takes it to a node that's simply there for display purposes, something like store node.
  • 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
spiral axle
#

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

flint needle
#

as long as your system ends in a TerminalNode that's pretty standard for most mods touching the terminal

spiral axle
#

yeah, absolutely

oak linden
oak linden
#
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

meager inlet
#

cool to see work on this

#

i do not understand that big snippet at all ngl

oak linden
#

probably because discord formatting kinda sucks tbh

meager inlet
#

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

#

😭

oak linden
#

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

meager inlet
#

take or leave it but that could honestly just be called CommandContext or smth

oak linden
#

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

oak linden
#

another command type done

icy tulip
#

make it blind you with blue if you say blue

oak linden
#

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

oak linden
#

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

weary imp
#

JustCommand

calm maple
# oak linden ```cs TerminalCommandBasicInformation complexCommandExampleBasicInformation = ne...

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?

meager inlet
#

It’s extremely intimidating for people without a pretty comfortable understanding of c#

calm maple
#

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

oak linden
calm maple
#

Okay, so it is a builder, that makes sense. You can tell I don't use Dawn

oak linden
#

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

calm maple
#

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?

oak linden
oak linden
calm maple
#

Uh wait let's get on the same page before I go any farther with the idea

oak linden
#

okie

calm maple
#

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

oak linden
#

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

calm maple
#

Wait is that how vanilla does getting the result strings then? A list of actions that return strings?

oak linden
#

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

calm maple
#

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

oak linden
#

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

calm maple
#

Yea, that's more my style since any permutation on the base command is likely to have repeated logic

oak linden
#

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

calm maple
#

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

oak linden
calm maple
#

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

oak linden
#

oh i see

calm maple
#

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

oak linden
#

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

shell kayak
#

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?

oak linden
#

You're essentially setting your own value instead of default here

shell kayak
#

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

oak linden
#

Is the s.s. dolphin replica yours?

shell kayak
#

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

oak linden
#

It's alright lol, yeah it'll do the default

oak linden
#

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.
icy tulip
#

where the schrodingers command option where it id both a question and a statement at the same time plink

#

(This all looks neat)

oak linden
#

ty <3

fallow remnant
#

add a Terminal command sudo insmod to load mods direectly from Thunderstore at runtime 🙏

icy tulip
#

HELPPP

#

sudo insmod WesleysMoons

#

instantly explodes

slow aspen
#

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

oak linden
#

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

alpine mica
#

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

oak linden
#

hmm

#

i remember testing this ages ago and follow vnailla to a dot

#

lemme check

oak linden
alpine mica
#

Sure, one min

oak linden
oak linden
#

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

weary imp
oak linden
#

Hope that helps

weary imp
#

I'll have to talk to my lawyer about it

sacred tulip
#

will this break any mods?

static iron
#

will you break any mods?

oak linden
hollow viper
#

every single one

#

bepin ex included

sacred tulip
#

classic dawnlib

#

shockwave.....

oak linden
#

shockwave breaking wasnt even my fault

icy tulip
#

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

hollow viper
#

it enough

icy tulip
#

NOOO

#

ITS TOO TRUEEE

#

RUNNN

quick dust
#

so uh.. 0.8.1 causes everything in my pocket rooms to be tp'd back into the ship

oak linden
#

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 ^

urban plaza
#

I wonder if this messes with mine...

oak linden
urban plaza
#

I legit forgot wht i did hang on

quick dust
#

yep, everything in the Miside dimension is gone too

oak linden
#

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

quick dust
#

i just close my BepinEx launcher which is pretty much the same

oak linden
#

ye

quick dust
#

can also just revert back to 0.8.0 temporarily?

oak linden
#

ye

quick dust
#

👍

oak linden
#

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

urban plaza
gloomy dirge
normal ridge
#

yo xu

#

how does the gravity stuff work?

oak linden
#

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

normal ridge
#

i can't hop on unity rn to check the scripts, so im asking you first

oak linden
sudden cliff
sacred tulip
#

She should have this fixed in unreleased version

#

Give her a sec

oak linden
#

Cheese ate melanie

#

Unbelievavle

oak linden
#

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

icy tulip
#

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

oak linden
#

That'd be really funny, if only

warm bear
#

ive been what we refer to as "lazy" with swapping to lunar

icy nest
#

If you guys want a possible DawnLib issue to chew on, I am having this with Lunar Config:

white finch
#

For it applies weights on HangarShipDoor.Start() and only then

bronze girder
#

skill issue

oak linden
icy nest
#

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

open wigeon
#

[Warning: DawnLib] Min (64) is bigger than Max (32), setting Min to 32

#

Why is this a thing xd

sacred tulip
#

great question

spiral axle
#

cause the thing is bigger than the thing

open wigeon
#

lmao

#

Such a meme of a line tbh

oak linden
#

its related to your configs like scrap value

sacred tulip
#

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

oak linden
#

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

sacred tulip
#

hmmm oki

open wigeon
#

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

fallow remnant
#

iirc there is still a dozen of them

open wigeon
oak linden
open wigeon
#

Thats weird

#

I keep everything updated asap

oak linden
#

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

vernal umbra
#

i think someone else reported this idk

oak linden
#

yeah testaccount will fix it when he can get to it @pine dirge greed

cloud flower
#

why console hate dawnlib

static iron
#

why do you let him eat sand?

#

because i dont like him

sacred tulip
#

why he reply him

#

him reply

oak linden
#

@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

urban plaza
fallow remnant
#

why is there UTF-8 BOM in the DawnLib json data file?

#

are we for real

sly marsh
#

This is like such a weird niche thing to bring up and complain about

#

☠️

oak linden
sly marsh
#

I am curious as well lol, but damn is it a really niche thing to notice 😂

sacred tulip
alpine mica
#

Must've been the wind

white finch
#

I think Trim() gets rid of it though

#

Not sure where that file's bein created though

fallow remnant
fallow remnant
white finch
#

Ye but I thought it counted as one

#

Probably a different thing I'm thinkin of though

fallow remnant
#

it happens when you write text to file, it doesn't exist in string

white finch
#

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

spiral axle
oak linden
#

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

spiral axle
#

fair enough

#

although every static link (on compile time) is considered "derivative" under GPL3

#

fucking thing

oak linden
# spiral axle although every static link (on compile time) is considered "derivative" under GP...

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.

spiral axle
#

we can only guess if that's enough tbf

oak linden
#

not sure what you could humanely do more than that to be considered independent compatibility code

fallow remnant
#

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

icy tulip
fallow remnant
#

imaging publishing a library which isn't at least LGPL

fallow remnant
# fallow remnant who cares tho

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

spiral axle
#

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?

fallow remnant
#

which is 1000% not the case with mods linking to and ripping apart a proprietory game in the first place

weary imp
meager inlet
#

If you need to protect it, keep it private.
This action is incompatible with reality

spiral axle
#

and long-term solution is not to "never publish anything"

#

whats the point then

white finch
weary imp
spiral axle
#

so why make anything at all

#

it's not like we're curing cancer or making a bank

meager inlet
#

trying is a nice idea

spiral axle
#

we're making free mods for a game that has its peak in the past

white finch
#

$FREE.99

meager inlet
#

not to pivot but honestly i could see a resurgence pop off

spiral axle
#

but for now the updates are rare

meager inlet
#

he did take a year off to work on another game which was a choice

weary imp
#

One big update 🤞

meager inlet
#

but upcoming update has at least 4 fully developed enemies afaik

white finch
weary imp
oak linden
oak linden
white finch
#

To include bundled in JLL/UR I mean

oak linden
#

maybe i should be bundling my random scripts into dawnlib at this point lmao (nah thats a bad idea lol)

weary imp
oak linden
#

no but like, the mechanic itself

white finch
#

More the reason it should stay in Seichi 💀

oak linden
#

isn't it just tying players to death

oak linden
white finch
#

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

oak linden
#

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

meager inlet
white finch
oak linden
#

i already include too many misc scripts in dawnlib that im kinda sad i included

weary imp
#

I think it was a masked’s transpiler stuff but idk

oak linden
#

to like, mask the married player when one gets masked?

white finch
#

You can marry Masked? plink

#

Lol

oak linden
#

they should not be bundled into a big library

meager inlet
#

well

#

idk about all that

#

depends on execution

white finch
#

Ye

weary imp
oak linden
#

some misc scripts are acceptable

white finch
#

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

oak linden
#

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