#programmers-off-topic

1 messages · Page 94 of 1

devout vault
#

Hmm, yes, that looks totally correct for 6 billboards (one each direction per axis) that should have the camera as their center point

#

Now that I've revealed what I'm working on I should technically go to #making-mods-general , but that's scary.

#

And also incredibly nonsensical to most people people who frequent there

#

(Compared to people here, who are all experts on 3d rendering)

#

(every single one (except me))

dusty pollen
# devout vault

how far away are they from the origin? and are you still translated 10 along the y axis?

devout vault
#

Good idea, then only those present right now would notice. (Or those who look at the thread list)

hushed raven
#

@vagrant basalt RE: Symlink Shinanaganery
Symlinking files works fine, just not folders,
Symlink source: "S:\SteamLibrary\steamapps\common\Stardew Valley\ModTesting\{LinkMods}\FashionSense"

Symlink Dest: "S:\SteamLibrary\steamapps\common\Stardew Valley\ModTesting\FashionSense Packs"
Where FashionSense Packs is a Symlink to
"D:\Coding\Stardew Mods\StardewMods\FashionSense Packs"

#

I know symlinks in symlinks work, I've used them previously nested together

vagrant basalt
#

I think I'm lost. You're trying to put a symlink to "S:\SteamLibrary\steamapps\common\Stardew Valley\ModTesting\{LinkMods}\FashionSense" inside...another symlink?

#

Why not just put a link from "D:\Coding\Stardew Mods\StardewMods\FashionSense Packs" into "S:\SteamLibrary\steamapps\common\Stardew Valley\ModTesting?

hushed raven
vagrant basalt
#

Whatever you're doing looks much more complex than what I do. I do things like:

Actual mod location where I work on the mod and sync to GitHub, I pick this as my source: D:\Games\Steam\steamapps\common\Stardew Valley - 1.6.15\ModDev\AbaStardewModsPrivate\[CP] AbaAnimalMuseum

Mods folder for when I run the game, I pick this as my destination: D:\Games\Steam\steamapps\common\Stardew Valley - 1.6.15\Mods-Dev\AbaMods <- this is where my symlink goes

vagrant basalt
hushed raven
#

The thing is I want to avoid having multiple copies of core mods (Like Content Patcher or Fashion Sense) that are different versions in different files, I'm trying to make it so that I just update the simgular Core mod and it propergates to the symlinks

vagrant basalt
#

Yup that's what I do...without your very complex multi-symlinking

hushed raven
#

{LinkMods}\FashionSense -> ModTesting\FashionSense Packs -> StardewMods\FashionSense Packs ~~-> {LinkMods}\FashionSense ~~ << This is what I'm doing, without that last link

vagrant basalt
#

This is the location of the actual mods. I update them using Stardrop.

#

This is one of my actual Mods folders. You can see it has a Dependencies folder. Inside that folder are symlinks to the actual mods that are inside my pufferchick dependencies folder.

vagrant basalt
#

(Sorry if I am being very obtuse. I am in my lowest energy and therefore brainpower part of my day)

hushed raven
#

Okay so I've just re done it, exactly the same as last time (define madness I know) but it's actually worked now, so either I got my file paths mixed up, or the symlink source wasn't cleared, I certainly know which is more likely

hushed raven
#

What you said:

{LinkMods}\FashionSense -> ModTesting\FashionSense Packs
Is the same as I described with this:
in the D:\...\FashionSense Packs there is another symlink to S:\SteamLibrary\steamapps\common\Stardew Valley\ModTesting\{LinkMods}\FashionSense

But I should've used arrows to avoid the confusion and make it clearer that we were both navigating deeper into the file path

vagrant basalt
#

I am still kind of lost but it's working for you so hooray lol

steel kraken
cinder karma
safe dragon
#

damn

sonic mirage
#

bean's place is starting to look like a leafy TGIFridays

cinder karma
#

I'm not sure i know what a tgifriday is

#

I also have this

sonic mirage
#

or at least the walls used to be covered with shenanigans like that. Last time I was in one it was just normal sparse walls with a few things on them like normal restaurants. However the one nearest me closed down a little after the pandemic anyways

cyan shadow
#

didn't tgifridays go bankrupt altogether

worn remnant
#

probably, but bankruptcy is just another speed bump for the corporation shuffle to drive over

cinder karma
#

I'm not sure my parents would have taken me to a tgifriday

#

(And I'm too cheap to take myself)

devout vault
frosty echo
#

Capitalism.

pliant snow
#

Does helix support spellchecking?

#

Vim/Neovim has had it for ages but I don't see anything for helix

safe dragon
#

other than setting up some spellcheck LSP I don't think so

#

that's something I've turned off in every application that has it so I have no experience with it

cinder karma
#

I legitimately would like to spend more time with Rust

steel kraken
#

and tbh is only in security sensitive places like this where I want rust

#

in most other contexts I would rather any of the other NotC++ options instead

cinder karma
#

Like zig or like c# or like Javascript

runic eagle
#

Am I missing any "rules" for generating Pac-Man style mazes?

  • Central room with clear surrounding corridor.
  • No dead ends.
  • Single tile wide corridors.
  • Pellets on every corridor tile.
  • Power pellet near each maze corner.
frosty echo
#

What are you counting as a dead end?

runic eagle
#

Any corridor that does not open into another or turn into a bend

hushed raven
#

Looping between screen edges

frosty echo
#

I think with that definition, you could have a long section that connects to itself but not to the rest of the maze, which probably wouldn't be wanted?

dusty pollen
#

all the pacman mazes I've ever seen were symmetrical, so you may want to include that? and maybe restrict the size of the islands inside loops

#

I'd say connectedness is probably the hardest to define a simple check for tbh

#

well, depends on how you run your checks ig

#

or since this seems like it's for procgen, how you generate things in the first place

pliant snow
#

Yeah, real Pac-Man stages are symmetrical. You also need to specify no large open spaces, like no 2x2 blanks at all.

dusty pollen
#

tbh if I was tasked with procedurally generating pacman stages, I'd just attach a bunch of rectangle loops to each other starting with the big one around the ghosts' area, mirror, and add the bits that let you loop SDVpuffersquee

runic eagle
#

Thank you all! That was extremely helpful!

#

First randomly generated maze. My dead end rules dont seem to account for 1 tile deep corridors but I might keep it that way for some challenge.

#

Also fun fact I learned - there is only one maze in the original Pacman

supple ether
#

hey why is there both EventDeclarationSyntax and EventFieldDeclarationSyntax

#

what is the difference

#

ah-ha, thank you random programming blog

#

the first is for event properties (which I did not know were a thing) and the second is for regular-style events

#

apparently you can do this

public event EventHandler MyEvent {
  add => { ... }
  remove => {...}
}```
dusty pollen
rain apex
#

how do u use this

#

is it like get set but for event handlers

steel kraken
#

I feel like the example doesn't do a great job showing a usecase for it but ah well

devout vault
marble jewel
#

So you're the one to blame for that /s

devout vault
#

Are event priorities a bad thing

#

either way Pathos approved it

#

He did say he wish he could think of a better way of doing it (if I remember right)

#

Like, you can't use those attributes with lambdas for example

marble jewel
#

No, I was only joking. They work well enough. The only thing I think could be improved is the ability to influence the relative sorting so you don't have to be concerned so much about having Normal and Normal+1, etc.

steel kraken
#

either mechanism invites an arms race, and I feel the Normal, Normal+1 is less breaking then the potential paradox of two events wanting to happen before each other

devout vault
#

I was more saying that's why I remembered it, since I did that PR. 😅

raw ingot
#

did anyone of you got the vs debugging feature to work when the steam is set up to start sdv via stardrop?
(at least this is what I think why when clicking the green debug arrow it loads and freezes stardew)

safe dragon
#

that sounds suspiciously like a modding question

crystal wren
#

So VS2026 looks... different.

safe dragon
#

oh no

#

I didn't even think about the fact that there would be a new visual studio in 2026

#

Blazing fast performance

crystal wren
#

Visually, I kinda like it?

safe dragon
#

damn I always wanted my AI to be deeper

crystal wren
#

LLM 2 - DLM?

safe dragon
#

I can't use 2026 till someone gets a vim plugin working for it

#

why does every fucking sentence about this editor include the word AI

crystal wren
#

Because AI.

safe dragon
#

I'm not even allowed to use these things cause sending my code to a cloud service would be against our security regulations

devout vault
#

There's a VS2026?

safe dragon
#

first insider version thing dropped yeah

devout vault
#

I didn't really know their version name change schedule, since 2022 was still updating

safe dragon
#

I started on VS 2012 hc_pensive

#

2022 was exciting cause it finally became 64 bit

#

that definitely helped on the larger projects at work

devout vault
#

That was during my Code::Blocks era

#

I didn't use VS until stardew modding

crystal wren
#

I remember using Visual C++ 6...

#

And VB, but that doesn't count.

safe dragon
#

I actually wrote visual basic .NET yesterday

#

technically

#

I uncommented 1 line and commented another

devout vault
#

My mods all have a VB.Net version if you decompile them that way with ILspy

safe dragon
#

😌

#

I'm very thankful I no longer regularly develop using VB.NET

cinder karma
#

Dh, worth it to update?

safe dragon
#

can't imagine it'll be worth it till the stable release at the bare minimum

crystal wren
#

I mean it's still preview, and I just poked around with it for 5 seconds on my laptop, but it really did feel... surprisingly smooth?

cinder karma
#

I dont do anything with c# anymore and this is sad

#

I can wait

safe dragon
#

I only use visual studio for work so I will just truck along with 2022 till my work decides to change license

#

in my ideal world I wouldn't need visual studio at all but I have to admit that it is genuinely really good

#

especially when its competition is omnisharp

cinder karma
#

I could try rider

raw ingot
cinder karma
#

If i ever find a use case for c# again

#

I would love to use c# more

safe dragon
#

someday

#

the features listed for visual studio 2026 seem to kind of imply that 2022 will not support .NET 10 and C# 14

#

else why would .NET 10 support be listed as a feature of 2026

#

can't imagine that's actually true though

#

wake me up when actually exciting .NET news is announced (stephen toub blogpost)

#

wait what

#

literally today

cinder karma
#

Sexy

#

Can't wait to read that

#

(Serious)

safe dragon
#

yup this continues to re-enforce my belief that none of the code I write is actually run and all of it replaced by something fancier

cinder karma
#

Oh my god frozen reference

#

I love it already

safe dragon
#

damn they optimized number division

#

not exactly something I expected to have any room for improvement

#

number divison of the decimal type*

rain apex
#

Crumble u mostly do odbc things right

#

How much do u benefit from net perf improve vs whatever db improving perf

safe dragon
#

I've never used odbc in my life

#

but i assume you mean I do a lot of work with databases

rain apex
#

Some kinda App to DB thing is what i remember yes

safe dragon
#

admittedly most of the C# code I write these days is constrained heavily by database performance but even then a lot of work that's done to improve async, general memory usage or just string handling in general can make a real impact

#

I get a lot more out just some improvements to System.Text.Json than most of this blogpost but still

#

though this blogpost has a section for JSON it seems

supple ether
#

ReadOnlySpan<char> my beloved

safe dragon
#

I used it all over my filter query parsing in the api even though it's honestly overengineered and didn't need it

supple ether
#

Apparently in I think 9? They added a thing to dictionary types that lets you define span-based alternate lookups

safe dragon
#

yeah I've got a few span alternate lookups here and there

#

FrozenDictionary with alternate lookup for spans is 🙏

supple ether
#

YESSS

#

Incredible gains

safe dragon
#

looks like FrozenDictionary is getting more love in .NET 10 as well

#

AlternateLookup specifically too

#

he himself calls this a monstrous misleading micro-benchmark but I find it amusing much like him

#

ah we can do better

#

alright I'll read through this again later but it seems nice though not as crazy as .NET 9

#

the biggest thing generally is just the automatic stack allocation of objects when it's determined to be possible

cinder karma
#

Yes!!!!!!

#

For delegates this is awesome!!!!

rain apex
#

Does net have functools.partial yet

safe dragon
#

go use haskell if you want that smh

#

honestly highly doubt that'll ever be a thing in C#

devout vault
rain apex
#

You know how u might do stuff like

Action callme = () => MyFunc(somevalue):

In python u can instead do

callme = functools.partial(myfunc, somevalue)
#

I think it's approximately like if u made a record with the method + what the args should be

#

And it doesn't inherit scope at all cus it's not a closure

devout vault
#

Sounds like the placeholders for C++ std::function

rain apex
#

Yeah similar enough

steel kraken
marble jewel
cinder karma
#

I'm too dumb 😛

steel kraken
#

We are trapped in .net6 until ca is convinced we can leave supported OS's behind or convince pathos that smapi can and should leave vanilla behind and run on newer versions

marble jewel
#

Let's start to petition .NET8 for SDV 2.0

steel kraken
#

Remind me in 50 hours to run smapi on .net 9

heavy daggerBOT
#

whew ok i'm pretty booked up at that time but...I'll squeeze it in for you. (#6858893) (50h | <t:1757726403>)

marble jewel
#

Could .NET >6 be technically possible for SDV using the same cursed methods as the unofficial 64-bit?

supple ether
safe dragon
#

it was some regex analysis shenanigans

supple ether
steel kraken
#

When I did my attempts I had to move smapi entirely out the stock folder and entirely inside the smapi-internal folder and then tweak a bunch of things to convince everything the base path is still where it was originally and not smapi-internal

supple ether
#

I thought stardew was already 64b

steel kraken
#

It wasn't back in 1.5.4

marble jewel
#

Before it was officially 64-bit, there was a time where through some hackery there was an unofficial build

supple ether
#

Aaaah okay

marble jewel
#

It was created to address the frequent OOM issues at the time

supple ether
#

Yeah bc 4gb is just not enough

marble jewel
#

But that whole era was a mini mod-pocalypse

steel kraken
#

In 1.5.4 it was what's now the compatibility branch, where windows was true xna and only not-windows was monogame

#

The hackery was replacing DLLs to force that monogame version to run on windows anyway

rain apex
#

wait so was non windows sdv 64bit since the begining

cinder karma
#

What i really want is a good reason to play with net 10

#

Preferably AOT

#

Preferably not blazer

#

Tbh my next programming project is probably The One App

steel kraken
#

Advent of code with aot is competitive for performance races

cinder karma
#

Tell me what to eat, when to sleep, congratulate me on being productive, give

rain apex
#

is it gonna have a mascot

marble jewel
#

All without LLM?

rain apex
#

focus korean meloon

cinder karma
#

Please

#

I want an external tool to fix my life

#

Tell me my dumb ass left my lunch on the kitchen counter again

#

Help me menu plannnnn

#

(I went looking for an app for meal prepping and I'm startled to see none that I like.... 🙁 )

marble jewel
#

I've always been a little bit interested in the idea of meal prepping, but the concept doesn't fit well in my life

#

Partially because of time and dishes, but mostly because I don't have a very large freezer

cinder karma
#

I dont have a large freezer tbh

#

Also my heart wants a proper sourdough loaf with which I can make a really good grilled cheese

#

I'm in my domestic era

#

Uncool and proud of it

marble jewel
#

There's a TikToker Stealth Health who has a bunch of meal prep recipes I'd love to try myself if I had to space for them. He like stuffs his freezer with dozens of prepped meals.

cinder karma
#

Ah, I tend to work aboit a week in advance

#

One of my friends in uni had an entire chest full of food

#

She would prep a semester at a time

#

God.

#

Sourdough SDVpufferheart

#

I'll go be off topic sourdough elsewhere

marble jewel
#

(From one of his videos)

cinder karma
#

A perfect life

marble jewel
#

And it's not the same thing either, but just a handful of different meals. I look at that and think, if only...

cinder karma
#

When I move again I'm thinking of getting a desktop and a chest freezer

#

Yes these go together

marble jewel
#

I do have a small chest freezer, but it's stuffed with costco

cinder karma
#

Ofc

#

Costco SDVpufferheart

#

I'm trying to make myself more inflation proof

marble jewel
#

The one time the chest freezer felt like a mistake was when I had an extended (week+ long power outage) and lost a bunch

#

Which is why some kind of backup generator is on my todo list

cinder karma
#

When I have more money I'm strongly considering solar panels

#

It's part of the inflation proofing

marble jewel
#

Otherwise, buying bulk has been one of my cost saving strategies for the last 7 years or so

cinder karma
#

The less I consume the more inflation proof I am

marble jewel
#

I wish solar was an option for me, but I live in an area that isn't ideal for it. More specifically, my house is under the shade of a lot of big trees.

cinder karma
#

I want a small self sufficient homestead

marble jewel
#

So the best I can do for power outages is a gasoline, propane, or a lithium backup

#

I looked at a house that was on well-water, had a septic system, and was a candidate for solar. That one would've been a great self sufficient home.

devout vault
#

I don't understand

#

(It's a readonly Mesh[])

#

I can iterate with a for loop and .Count but it's odd

steel kraken
#

ArrayEnumerator extends IEnumerator and ICloneable but not IEnumerator<T> it seems

marsh spoke
#

Which modpack should I start playing in stardewvalley?

cyan shadow
pliant snow
#

It's time to start. Ill put together the first popular modpack

cyan shadow
#

Aquo no

#

We just do modlists and that works perfectly fine

#

I mean, nexus collections exist, but since vortex doesn't work right for Stardew it's not recommended to install them as intended

pliant snow
#

Oh that's right, the community has a weird thing against modpacks for some reason

cyan shadow
#

It's mostly permissions related and also the fact that barely anyone has their stuff on curseforge

#

The second bit is also permissions related, curse is bad at enforcing them

pliant snow
#

why would they need to be on curseforge

dusty pollen
#

honestly I just don’t get the point lmao

#

they make more sense in games where there’s a lot of compat issues so curation is key

#

in stardew it’s pretty safe to just download a bunch of mods (within reason)

cyan shadow
#

I guess

#

But yeah it's mostly just what iro said

pliant snow
#

I don't think that's necessarily true, a modpack is just a glorified install script, fetching the mods from whatever hosting source and installing them

#

the compatibility thing is a fair point tho

cyan shadow
#

(Is that not just a modlist at that point)

dusty pollen
pliant snow
#

I'm not sure there's a difference

dusty pollen
#

even for vortex collections

#

you cannot automate nexus downloads unless you have a premium api key

pliant snow
#

oh right, dont you have to be logged in to download from nexus

dusty pollen
#

yup

cyan shadow
#

You do, yes

pliant snow
#

now theres the thing they should be up in arms about

lethal walrus
dusty pollen
#

you’ll find the stardew community is actually okay with “higher vetting in exchange for higher moderation”

#

(if the moderation works, which it doesn’t)

pliant snow
#

they're okay with tyranny

lethal walrus
#

you could definitely just steal the session + cloudflare cookie and then generate download urls with that

cyan shadow
#

Plus the way DP allocation works kinda just requires the user to have an account

cyan shadow
dusty pollen
lethal walrus
#

lol

lethal walrus
pliant snow
#

what license do games on nexus get uploaded under

lethal walrus
#

games or mods

dusty pollen
#

games don’t get uploaded to nexus

cyan shadow
#

You mean mods, I assume
Depends. Varies from MIT to "© All Rights Reserved"

dusty pollen
#

and iirc nexus takes no ownership, so whichever license you say they do

lethal walrus
#

Rights you are giving us to use material you upload

When you upload or post content to our site, you grant us the following rights to use that content:

a worldwide, non-exclusive, royalty-free, transferable licence to use, reproduce, distribute, prepare derivative works of, display, and perform that user-generated content in connection with the service provided by the website and across different media including to promote the site or the service forever;
a worldwide, non-exclusive, royalty-free, transferable licence for our partners and advertisers to use the content for their purposes and in accordance with the functionality of the site forever;
a worldwide, non-exclusive, royalty-free, transferable licence for other users to use the content for their own recreational purposes only and in accordance with the purpose of the site (that is, to enable users to download video game mods for their personal use and enjoyment) forever.
cyan shadow
pliant snow
#

Right, mods

cyan shadow
lethal walrus
#

mhm

dusty pollen
#

which is still standard tbh

cyan shadow
#

Very standard

lethal walrus
#

the data is a stringified version of vortex state

dusty pollen
#

amazing

cyan shadow
dusty pollen
cyan shadow
dusty pollen
pliant snow
lethal walrus
lethal walrus
worn remnant
cyan shadow
#

Hi ichor SMCKekLmaoDog

worn remnant
# dusty pollen (no recollection)

tl;dr curseforge did a modding contest and the terms for submission was that you would grant curseforge a worldwide, perpetual, exclusive right to host, distribute, etc. your mod

#

not fully asserting ownership but more or less, i (a layman) would say

#

not too unlike 20th century fox's perpetual exclusive license for OG star wars

#

or the sony/spider-man one

#

or probably some other shitty situations i can't recall offhand

worn remnant
cyan shadow
lethal walrus
#

oh no i'm finally getting errors dealing with collections

#

gnhgkdjfhgjrhgjkhrdjkghdrgh

dusty pollen
lethal walrus
#

what if aquo violates the gpl

dusty pollen
#

then he might as well throw the arr mods in SDVpuffersquee

pliant snow
#

If I'm just rehosting them, and writing an install script that simply downloads them and installs them, I don't think it would need to be GPL

#

but licenses confuse me

lethal walrus
#

[11/09/2025 14:07:11][Alert][Program.Main: Line 153] System.InvalidOperationException: The converter specified on 'Stardrop.Models.Nexus.CollectionModRule' is not compatible with the type 'Stardrop.Models.Nexus.CollectionModRule'.
???

#

oh this is horrifically on topic

#
[11/09/2025 14:13:58][Debug][NexusClient.GetFileByVersion: Line 260] Requesting version 2.4.2 of mod 1063
[11/09/2025 14:13:59][Debug][NexusClient.GetFileByVersion: Line 280] foreach file inside with Automate 2.4.2-1063-2-4-2-1753653272.zip @ 2.4.2
[11/09/2025 14:13:59][Debug][NexusClient.GetFileByVersion: Line 293] Unable to get a matching file for the mod 1063 with version 2.4.2 via Nexus Mods: 

you have the mod right there!!

#

oh stardrop doesn't like downloading old mods

safe dragon
#

that'll work just fine

devout vault
devout vault
fleet wren
cinder karma
devout vault
pliant snow
#

Not a fan of the ole copyleft?

devout vault
#

I'm not left handed, so no /s

#

(But yeah, no)

fleet wren
#

I propose the following license text for my new software: “by modifying and redistributing this software you agree to rename your online handles to ‘Selph’ in perpetuity”

devout vault
#

What happens if they do that with someone else who has the same license (but different name)

#

Like if I have to be a Selph, and then later have to become an aquo

#

Then I'm not Selph in perpetuity

fleet wren
#

make a portmanteau using your best judgement

#

aquelph

devout vault
#

aquelpha it is

dusty pollen
#

online handles is too vague. can i just set up a selph email address?

devout vault
#

...you know, the license doesn't say anything about alts

#

Well I guess it says handles, plural

#

I was gonna say "I could create a single selph handle and never use it", but I guess that won't work

cinder karma
#

I'm changing my licenses. In order to use my code you have to film yourself singing your idol to the bathroom mirror

dusty pollen
devout vault
#

Hmm..... true

safe dragon
#

what if two is actually singular

devout vault
#

This is online usernames not pants

safe dragon
#

can't believe two is singular in the world of pants

pliant snow
#

I wish the creative commons licenses weren't frowned upon for code, I find them so much easier to understand lol

robust quarry
#

bored rn, what projects are you all working on?

pliant snow
#

I'm writing a blog post because I'm a nerd

safe dragon
#

only project I'm really working on these days is for work

robust quarry
pliant snow
#

Please, these nerds have no idea the depths of true nerddom

robust quarry
#

DANM

robust quarry
dusty pollen
pliant snow
#

Soft modding a PS2

robust quarry
#

oh thats nerdy-

#

(wanna clarify that that's a compliment)

sand frost
#

I need to replace my car’s blower motor

#

That’s like a hobby, right?

#

I’ve been procrastinating but it sounds like it’s about to give up the ghost any minute

robust quarry
#

.. i read 'car' as 'cat'-

pliant snow
#

you def don't want to have a cat with a bad blower motor

robust quarry
#

467890

#

whoops

#

was wiping my keyboard lol

devout vault
#

I love VS crashing when I use my clipboard while having unsaved changes

#

It's so exciting

robust quarry
#

oh god-

devout vault
#

(Every window on my computer froze, too 😅 )

#

My main project is of course my secret code crimes

#

Of course there are others too

robust quarry
#

just checked to see that my VS stuffs were saved when you said that-

robust quarry
devout vault
#

(it's not secret at this point, beyond being in a thread)

#

Thankfully I didn't lose much it seems

robust quarry
#

that's goof

#

good

sand frost
#

Maybe VS sensed your crimes

#

And tried to protest

robust quarry
#

LMAOO

#

i hope vs doesn't judge decide to crash my computer after sensing how shitty i am at coding-

cinder karma
devout vault
cinder karma
#

.q add "Crimes are fun!" - @cinder karma

heavy daggerBOT
cinder karma
#

Thank you

#

Casey, how goes crimes?

sand frost
#

No battery = no go

cinder karma
sand frost
#

I seeee

#

I have to check what model blower motor before I buy a new one

cinder karma
#

I just have to get myself, my car, and my socket wrench to Costco

sand frost
#

There’s still time today!

safe dragon
#

nah it's past midnight in timezone so it's impossible

devout vault
#

...I forgot I left that on "reply"

#

Anyways, crime preview once I figure out how to get thise 200 MB .mkv a bit smaller

#

...I think I was floundering around realizing the windows game had to be the active window for keyboard input for a bit, can probably cut that out

#

(And lower than 720p)

#

88 MB. All it took was this

#

(Was 720p 30 FPS 1280x720 at High quality)

heavy daggerBOT
steel kraken
#

Ah that was what the reminder was

prisma flume
devout vault
#

I don't know how to make it do that SDVpufferwaaah

prisma flume
#

you could just render as your usual output codec and then ffmpeg it to webm, if your recording software doesn't support vpx out of the box

devout vault
#

Also this scary warning (it was set to .mkv before, and didn't show this)

prisma flume
#

well those are just your options for mp4 right

devout vault
#

Oh right you said webm

prisma flume
#

isn't there an alternative recording format for webm

devout vault
#

Alas, no webm

prisma flume
#

huh

#

wonder why that is

devout vault
#

shrugs

#

Maybe there's a plugin

#

I'm on latest it seems

#

but I should sleep

prisma flume
#

20 Apr 2024 — No, you can't record using the WEBM container but you can use MKV or MOV and then remux it into webm using ffmpeg.

devout vault
#

Smh

pliant snow
#

Good thing it can record flash video tho

safe dragon
#

thankfully

lethal walrus
crystal wren
supple ether
#

event syntax in source generators is stupid, why does it work differently from literally everything else

#

on the other hand I found the syntax tree visualizer, which is very useful

devout vault
heavy daggerBOT
#

Title result: Save 35% on The Trolley Solution on Steam

devout vault
supple ether
# devout vault I haven't tried to do stuff for events with them before, how stupid are they?

So when you use ForAttributeWithMetadataName, it gives you the syntax node that the attribute is applied to. For every other usecase, this is the "top level" node of whatever the thing is.

For events specifically, for some reason, it is NOT the event declaration, but rather the variable name child node, so to get the actual event node, you need to climb the tree two levels

supple ether
# devout vault The w h a t

If you have the compiler platform sdk component installed in VS, you can search tools for the syntax tree visualizer, which is a tool window that shows you the syntax tree of the currently displayed code, as well as the specific syntax node that your text cursor is in

#

I wish I knew about it before because it's amazingly useful for writing source generators and analyzers

devout vault
devout vault
#

This would've saved me so much pain and misery and suffering and agony

#

I was postponing doing more sourcegen stuff for modding, now I might not if not for my hyperfixation on other crimes

supple ether
#

I don't know why nobody mentions it, I only found it through some random obscure back page of msdn

devout vault
#

I have done so much debug output

#

Or trial and error

#

Trying to figure out the exact class I should be casting to for what I want

#

Or what field contains what I'm looking for

supple ether
#

Yeah that's how I was doing it before and it was painful

devout vault
#

It's extra fun when your source generator is crashing because things aren't matching your expectations

#

Where's that clickbait C# guy that gets posted here periodically. They need a video like "source generators are actually good now???"

#

And like, so often something looks like what you want but isn't. Or like, good luck figuring out what a Trivia is in a reasonable amount of time.

supple ether
#

I need to start a programming blog because I've learned so many useful things about source generation that I haven't seen anywhere

devout vault
#

Yeah, and a lot of the things that do exist don't cover the latest stuff

#

Like not covering incremental ones, or newer stuff like ForAttributeWithMetadataName

supple ether
#

Yeah the documentation is so minimal

devout vault
#

For what I did already, this is my mod class for stardew3d (not including the two event methods you see there)

#

BaseMod is this, and the source generators generate appropriate fields/methods

#

I've been wanting to do more interesting stuff though, like auto subscribe event methods marked with an attribute (similar to in MC forge), or an autogenerated thing for loading in new assets and having them auto cached/invalidated as necessary, or GMCM integration

devout vault
supple ether
devout vault
#

Oh, what all does your thing have? Maybe I could just use yours 😛

#

I also have some ideas for a not-quite-sourcegen

#

I’m thinking I can auto generate documentation for GitHub and new website based on c# xml docs

#

So then I just have to document things in the source code itself

#

I imagine that’ll be much faster than what I was doing for my website previously

#

I also wanted to have a github action generate mod description from readme or something on release, and then update nexus automatically.

#

But

#

I even had a plan for making it work automatically for monorepos

lethal walrus
#

there is always the option of paying some company that does scraping stuff to solve the captchas

#

might make nexus angry

devout vault
#

Yeah, I’ve heard of those being a thing

supple ether
# devout vault Oh, what all does your thing have? Maybe I could just use yours 😛
  • Asset lifecycle handling including lazy properties and INotifyProprtyChanged, and asset dictionary merging. Also dumps translations into a strings asset for convenience.
  • gmcm automatic registration and lifecycle handling, with support for all all types including enums, and pages. Plus hooks for adding your own stuff.
  • automatic event subscription, with support for all smapi events as well as marked static events from the mod itself.
devout vault
#

Also dumps translations into a strings asset for convenience
Doesn't Pathos's thing do that too if you specify a certain property in your csproj

supple ether
#

I don't know, I never use it

devout vault
#

Could've sworn I've done it before

#

Ah

supple ether
#

I can make it detect that property and disable it though

devout vault
#

I really like it, but sometimes you need dynamic fetching for a key

#

Cat plz

#

I can't read the nerd talk like this

supple ether
#

I almost always find myself using dynamic keys and/or string assets nowadays

devout vault
#

Anyways this sounds like something I'd really be interesting, do you need a tester? 👀

(Although depending on the syntax I suppose I might end up making my own anyways - not as a hater, just because I am a little gremlin with peculiar preferences 😛 )

devout vault
#

Especially since it'll break at compile time if something changes

#

Also I'm not really familiar with INotifyPropertyChanged, what's that like?

supple ether
devout vault
#

And by "Asset lifecycle handling" do you mean for vanilla assets, putting custom assets into the pipeline, or both?

supple ether
devout vault
supple ether
#

The whole works- loading, editing, invalidation, local files

devout vault
#

What's the repo name

#

Oh

#

I skipped the first repo somehow

supple ether
#

StarModGen

devout vault
#

Like I literally started reading at repo number 2

supple ether
#

I'm debating switching out some of the asset attributes for file properties, since piling on a bunch of attributes on a method is kind of clunky

devout vault
#

File properties?

#

Hmm, parts of this I like, parts of it I don't (just code style stuff though)

supple ether
#

Yeah, in the csproj. You can define attributes for files that a generator can use

devout vault
#

And since source generators can't use output from another as input, I probably couldn't have my source generator do things your source generator would pick up on

#

Unless I do the "don't auto add to project, just save to a folder that happens to include project files" approach

devout vault
#

I've contemplated uses for that before

supple ether
#

I mean this thing is mit licensed so you can steal piece of it if you want

devout vault
#

Eh I know enough about source generators to not need to steal code

#

Was only looking at it for less work for me to do + ideas

supple ether
devout vault
#

(Like, I only looked at the demo just now)

devout vault
#

Interesting

dusty pollen
devout vault
#

His contribution is reducing the throughput of my insanity to the discord community

dusty pollen
#

also I feel like I finally have to ask. what even are source generators

devout vault
#

They analyze the parsed C# syntax (in the same way the modbuildconfig does for it's warnings, I believe), and create new files based on that

#

When you edit a file it already generated stuff from, the generation for it is replaced

devout vault
devout vault
#

DGA did something similar for compile time mixins. Though Pathos converted it to the pre-sourcegen codegen thing, to make it work on .net framework. (I originally was making DGA for the .net upgrade, but it got backported to the .net framework builds since that was taking longer to release than expected)

dusty pollen
#

so like, self-updating boilerplate?

devout vault
#

Though nowadays I know how to make non-incremental source generators work with .net framework too

devout vault
dusty pollen
#

interesting

#

is the use case just saving time while developing?

devout vault
#

Like this is the generating code for my [HasConfig] attribute

#

I believe so

#

Makes things less error prone when you don't have to copy paste a lot too (less of an issue for this small case though)

#

The rest of that source generator is this (basically just the "Finding matches" part)

dusty pollen
devout vault
#

("Why aren't you using that finding attributes convenience method?" Because it doesn't work for any version of that generic, in my testing)

#

I have the old mixin test on gist somewhere

#

I wish github let you search your own gists

#

User facing side of that is

#

With the generated code being

dusty pollen
#

you know I was just thinking about something yesterday that may or may not be doable via baby's first source generator

devout vault
#

I did this for DGA since I was basically doing the same thing for every single object type 😛

#

(Which was everything JA supported, and I think a couple other things as well)

#

Speaking of DGA, I got a nexus DM from someone requesting an update for it once again, last night

dusty pollen
#

which was just some kind of template attribute for "cached/lazy loaded property" (prop with an underlying nullable field that gets ??=ed on get)

devout vault
dusty pollen
#

I write about ten million of those lazy loaded props per hour

devout vault
dusty pollen
#

(no I don't I have like three and they're all terrible ideas)

devout vault
#

It never updated for 1.6 since literally the whole point was being able to use string ids

dusty pollen
#

does anything really depend on dga still

devout vault
#

There were a couple neat mods that never got updated for that reason I believe

#

Like, even outside only-content-packs

#

I believe PeacefulEnd's target dummies mod, for example

supple ether
dusty pollen
#

I’m back to confusion SDVpuffersquee I’ll have a more hands on look myself later

devout vault
# supple ether I would love to have that tbh

I’ll put a note to ping you next to the rest of the notes on it once it’s ready for use, perhaps as a nuget package since others are interested. It should be usable even outside of modding in theory.

If anyone else wants a ping, ping me or dm me asking

#

I should probably make it a separate repo in that case (that case = usable outside of modding), huh

devout vault
#

Gotta read it's capabilities to see if it can do what I want though

#

Since I want content pack facing docs as well

cinder karma
#

I was about to say - what lib does Harmony use?

rain apex
#

Docfx i think

#

I also used that b4 it's alright

cinder karma
#

Python world has some really nice ones ngl

#

I'm also a huge fan (in python land) of the fact that is versioned

#

So if I'm stuck on an old lib I can look up what it was on the padt

#

No I'm not salty about usinf 3.6

#

Why would you think that

#

So how goes thr land of video games

#

Video gaming?

steel kraken
#

whats video gaming, I spent my evening finding and having a fix for smapi deciding it was a good idea to load townInterior 100x back to back in the same tick

dusty pollen
#

I was wondering how long you spent on that SBVLmaoDog

steel kraken
#

I got a different log with the same behaviour today and they explicitly said they were playing in english which got me to investigate further

#

I was previously convinced it had to be some mod doing invalidate over and over again, but once I knew they were in english, the question then became "why is a german townInterior being used at all"

#

and once I found the cause, I could finally reproduce it locally

cinder karma
#

Interesting

devout vault
cinder karma
#

@dusty pollen guess what I just found in code I wrote

for i in f or file_ext == "blah":
      # loop behavior 
#

Python man

dusty pollen
#

but also I'm not sure which of the iterators in the file that uses or what for ... or is

cinder karma
#

I dont know what for....or is either

#

Stupid fun. The code worked

#

I be not sure HOW

#

Which is why I didnt catch it earlier

cinder karma
#

Look

#

I was pretty crunched when I wrote that

#

Lots of python fun

#

truthy or whatever returns the first item

#

Returns the truthy

warped adder
cinder karma
#

So basically, the or just returned f

#

Which is why it worked lol

dusty pollen
#

but I just didn't realise that was legal syntax, I thought there was a stricter check for the for loop syntax

cinder karma
#

Neither did i

#

Neither did i

dusty pollen
#

what does it iterate over if you just iterate over f itself?

cinder karma
#

It's also a thing in python

#

Oh, iterating over a file? The contents of the file line by line

dusty pollen
#

oh yeah, I just associate it with js because of how prevalent it is there

#

it's going to be a thing in any duck typed language

cinder karma
#

Yup

dusty pollen
#

because you have to be able to resolve arbitrary stuff to bool

cinder karma
#

Yup

dusty pollen
cinder karma
#

Basically but as a generator iirc

dusty pollen
#

I'm pretty sure readlines are also a generator

#

I think everything in the file object is generators

cinder karma
#

No, it isnt

dusty pollen
#

it isn't?

cinder karma
#

Readlines produces a list of strings

#

In my case I wanted to not have the entire effing file in memory

dusty pollen
#

oh

has it always? I could have sworn at some point it was a generator

devout vault
cinder karma
#

Pretty sure always

dusty pollen
#

oh maybe I was actually just iterating over f all along and was just mentally blanking

it's hard to think without an ide open SBVLmaoDog

dusty pollen
devout vault
#

it's hard to think without an ide open
it's hard to think without an ide~~ open~~
it's hard to think without an ide open
it's hard to think without an ide open

devout vault
#

You might be able to do it on streams too?

#

Been while since I tried though

dusty pollen
#

oh I just mean that it's not an inherent truthiness/falsiness that values have the way duck typed languages do

devout vault
#

It's inherent?

#

I thought it was more of a so-common-its-fundamental pattern

#

Like if I make a custom type in those languages wouldn't I still need to tell it somewhere how to know if that thing is truthy or falsey?

dusty pollen
#

I mean you could, but it would just assume that it's truthy

devout vault
#

Ahhhhh

dusty pollen
#

you have to be able to convert things to bool pretty much

#

it's not an option not to

#

generally only empty things are falsey

devout vault
#

So it'd be like if C++ made it where everything was implicitly castable and you couldn't opt out, but you could tell it how to decide which value to use?

#

I wonder if that's sorta a consequence of those languages only really having pass-by-reference. Like, literally everything is pointer in a sense, so it has that by default, and just lets you override it for the pointer's value

dusty pollen
#

the python relationship to string implicit casting is more complicated tbh but everything does get a string representation too

dusty pollen
#

especially in js

devout vault
#

Dynamic typing my behated

dusty pollen
#

but types aren't really the same as you'd think of them in actual typed languages, they're a loose approximation

devout vault
#

No amount of bolting things like typescript on them can save them

#

(I've never used typescript, but it's tainted by JS and so is fundamentally bad)

#

(Not as bad. But still bad)

#

(/s, somewhat)

dusty pollen
#

you don't like the prototype system, Casey?

#

you don't like that Everything Is A Dict?

devout vault
#

n o p e

#

Not that I got far enough into JS to really use the prototype system that much

devout vault
#

I'm sure it's great for some types of programming. But I am very much OOP brained at this point

cinder karma
#

In python you have to define the __bool__ function iirc

devout vault
#

(Yes you can do OOP in those, but it's not as good)

cinder karma
#

If you dont define the __len__

dusty pollen
devout vault
#

(Like - yes, you can do OOP in Lua, but it's bad. Heck, you can do it in C even, since OOP is more a paradigm than simply being able to do obj.func())

dusty pollen
#

as someone who's made plenty of cursed custom python classes

cinder karma
#

Huh never mind it defaults to truthy

#

Why does it default to truthy

dusty pollen
#

yup

#

python

#

that's why

cinder karma
#

🐍

dusty pollen
#

so like null, empty lists, I can't remember if the empty string is falsey?

cinder karma
#

I think if you define __len__ it uses that (yup)

devout vault
#

This is also why I'm not gonna use something like lua for my modding scripting language idea by the way

devout vault
#

I suppose it's easier initially to some extent for people who haven't programmed before, but I feel like if you're actually aiming to learn to program and not just get something working, something else is better

dusty pollen
#

yeah makes sense

devout vault
#

Very much an opinion thing though

#

(And to be fair, many content pack others would only care about getting things done and not actually learning programming. But if I'm gonna make this, I wanna enjoy making it, and potentially even using it myself at some point)

dusty pollen
#

(makes sense to atra, I have no horse in the race re learning options)

cinder karma
#

I'm too old and jaded to care about content pack makers

#

You heard it here first

heavy daggerBOT
dusty pollen
#

(I'm willing to learn whatever arcane system piques my interest but learned programming using js and python initially)

devout vault
#

The fun thing about learning option opinions is you only ever learn from scratch once, so any opinion you do have can never be from first hand experience with all the options

cinder karma
#

Yes. Only learn scratch once and never again

devout vault
cinder karma
#

This fool over here learned VBA

#

Don't be like atra

#

Atra is very dumb

dusty pollen
devout vault
#

VBA has its niche I feel

#

More so for people who just want to do small things though

#

Like the excel stuff (though there's python for that too nowadays, right?)

dusty pollen
#

then you should definitely use VBA in that case

devout vault
#

I mean professional stuff is a whole different ballgame

#

But if you're doing a small thing for yourself? Who cares

dusty pollen
#

why would you use VBA if not to inflict pain on coworkers

devout vault
#

Inflict pain on yourself?

cinder karma
#

I've only ever used VBA professionally

dusty pollen
#

what hell are you in that the only option you have for personal stuff is vba

dusty pollen
cinder karma
#

9th circle

devout vault
# dusty pollen there are better ways!

I mean sometimes the pain comes from doing it in the worst way possible, you know?

Like, it might be more pain-optimal to program your spreadsheet utility via memory hooking in assembly. But then you're very much asking for it.

For true pain to yourself, you need some vague sense of hope that it won't be painful

dusty pollen
#

I still think of the "genius" intern two years before me who "wrote code so good nobody else could even understand it" who hardcoded SharePoint paths in a vba script he told nobody about

cinder karma
#

Also frankly I dont do personal code these days

#

All my code is professional

dusty pollen
#

I think he was a demon sent to torment me personally

devout vault
#

(Sorta like how a big problem with godot is most of the docs/examples/etc. you find are for unity - though that's getting better)

devout vault
#

(I know you know this)

dusty pollen
devout vault
#

Like, "Yes, the magnitude of its goodness is huge. But it's also negative!"

heavy daggerBOT
dusty pollen
#

oh wait, that is important!

devout vault
#

Oh, so no big deal if that data gets deleted (or worse, gets corrupted in ways that look fine until you look into it)

devout vault
devout vault
#

Like if you google "how to do this specific thing in excel scripting" you're more likely to see VBA than python

dusty pollen
#

it wasn't because he told anyone about it!

devout vault
#

And that's ignoring any confusion the average person might have about looking up general python stuff and trying to figure out python versioning (I assume 2 vs 3 is still a confusing point, though perhaps less than it used to be?)

devout vault
cinder karma
#

Well.

#

I assume the average data scientist can handle python

safe dragon
#

it's one of the few languages I would assume data scientists know

#

"know"

#

know well enough for their usecase

devout vault
#

Data scientists, yeah

#

I'm not talking about data scientists

#

I'm talking about that older lady in every other office who does the excel wizardry and wants to make it do slightly more

#

(Not to call this person older, but... literally my mom, basically)

#

(To be fair does want to learn programming, but has never had time)

safe dragon
#

my mom's retired and I'm 28 so that doesn't necessarily say that much

#

that older lady in my team is great and I think at this point she just knows SQL cause of microsoft access but is not ready to admit that to herself

devout vault
#

(And also my mom's joking probable reaction if she heard me call her an older lady)

safe dragon
#

😌

#

my mom has now accepted that she is considered a senior when buying tickets

devout vault
devout vault
safe dragon
#

🌈

devout vault
#

to be fair my personal age view is skewed and I feel like I should be 3-5 years younger than I really am

safe dragon
#

it's ok I always think atra is like 45 and then get confused

#

I feel like I get very conflicting information

devout vault
#

Most people: "everyone on the internet is a kid"
Me: "everyone knowledgeable on the internet must be older than me"
(everyone != everyone knowledgeable, but I'm not so far gone I think the average person is older in general)

safe dragon
#

I still remember this one time when I was still ike 22 and someone told me they thought I was a 35 year old mom...

#

I'm not even a woman!

#

I'm terrible at estimate age tbh

#

on discord I assume people are younger than me unless it's a programming discord

devout vault
#

See part of my problem might be I don't hang out much in spaces without technical people

warped adder
#

i just assume everyone is perfectly ageless tbh

devout vault
#

and I ignore nexus comments existing

safe dragon
#

the game engine discord I'm in has people who are like mid 30s, 40s or even 50s who worked at like EA as an engine developer before and now want to contribute to bevy

devout vault
cinder karma
#

So you're older than you are

devout vault
#

But it tracks re: my perceived self-age vs my actual age

cinder karma
#

I'm, however, an ageless demon

safe dragon
#

though at the same time there's this one guy in that discord who I assumed was likely in his late 20s and then I checked his discord and it said high schooler and felt the most crushing wave of incompetence I've felt in my life

devout vault
#

Speaking of game engine discords - just got a ping that Godot 4.5 was released

cinder karma
#

Damn I'm dumb

safe dragon
#

in this case it's a guy who has basically singlehandedly developed probably the most popular physics library for bevy

devout vault
#

...why are there so many breaking changes for a 4.x release?

#

They seem to be relatively small things, but still

safe dragon
#

he'd be in off topic sharing papers he was reading on novel physics simulation techniques and writing simd optimizations to improve his library and then it turned out he was 17

cinder karma
#

....possible candidate for MIT i see

safe dragon
#

if he were american ye

#

pretty sure he has at this point gone to a uni in his own country

#

he's 19 now 🌈

#

at 17 I'd never programmed before

#

at 28 my eyes still blur over when I read a paper

devout vault
#

Yeah I can't read academic papers

#

I had started programming at like 11 or 12 though

safe dragon
#

I had no real interest in it till I had to pick something for uni

devout vault
#

As a child, I yearned for the (game dev) mines

safe dragon
#

I have a degree in game technologies 🌈

#

I am a full stack web dev

warped adder
#

noice

safe dragon
#

it's always a little funny to me cause I dropped out of the web development course

#

was like "I do not want to deal with javascript"

#

lo and behold

#

I deal with javascript now (typescript)

warped adder
#

i got a bachelor's degree on javascript, java, php and c#. and c++. nothing else. what is python <= me to this day

safe dragon
#

vast majority of what I did in uni was in C#

#

I still use C# a lot

#

alas, all the web frameworks for C# are shit

devout vault
#

Amazing

#

This is so painful when modding sometimes

#

(And why on the rare game project, music gets added last)

warped adder
#

C# is the only programming language i use these days... for reasons obvious from context of where we are talking (I do not think json counts as a programming language)

safe dragon
#

json should not be a programming language

#

I know you modders sometimes think otherwise

#

I disagree

warped adder
#

I mean I do strongly appreciate what Content Patcher has done for us all

#

but also

devout vault
#

I don't think the modders that frequent this channel in particular will think that

cinder karma
warped adder
#

😭

cinder karma
#

Why not mute the game

rain apex
safe dragon
#

not the JDSL

cinder karma
#

The old atra (who can't come to the phone right now) would mute the game and listen to music

safe dragon
#

I have no interest in the JIZML paradigm thank you

devout vault
# cinder karma Why not mute the game

Good question.

Never thought of it. 😛

To be fair I get... headphones fatigue, sometimes? So if I'm not actively watching a video or playing a game or something, I often just don't have them on. So this was more of an issue during my speakers era after my headphones broke (which I don't do anymore because I don't like alone)

#

I've already blacked out the JSDL post from my memory

#

I don't remember much about it beyond it being actual code crimes (or like code felonies, compared to my code crimes being more like code misdemeanors)

cinder karma
#

The really stupid thing i used tp do was mute stardew

#

Then put on working music

#

Which would (reasonably frequently) include the stardew soundtrack

devout vault
#

I mean, maybe you wanted winter music when testing summer stuff

#

Or didn't want sound effects

#

Seems reasonable to me

cinder karma
#

Needless to say, the stardew soundtrack has more of an impression on me than the game itself

devout vault
#

Knowing you, that doesn't surprise me

#

Wasn't modding SDV in general an excuse for you to learn C#

cinder karma
#

Yeah. And I suspect I've overstayed my welcome

devout vault
#

Never

#

...oh I just had a super cursed idea. Make a MonoGame backend for Godot, and then use Godot for Stardew modding

#

Not that I'm gonna bother even trying. But still an idea, and still cursed

safe dragon
#

this is why I don't trust modders

devout vault
#

😂

#

Sometimes the answer to "Why?" is literally just "to see if I can"

safe dragon
#

choosing the path of most resistance

devout vault
#

There are many ideas I've had before where once I've figured out how to do it conceptually (on a detailed level) I never get around to actually writing the code for it

#

The fun part of programming for me is largely the problem solving. It's certainly not the typing syntax part

safe dragon
#

I'd imagine that's most people who frequent this channel

warped adder
#

I grew up as a gamer turning off all games' music and listening to my own instead <3 (except specifically need for speed)

#

i firmly associate sims with "на тихорецкую состав отправится"

cinder karma
#

Rust for monogame?

devout vault
safe dragon
#

I only turn off music for games I've played faaar too much like runescape or path of exile

cinder karma
#

But if you do godot

devout vault
#

I am not a rustacean, and no amount of time in this channel will change that

devout vault
safe dragon
#

I'm not a rustacean despite being in a rust game engine discord and having done advent of code in rust twice

devout vault
#

Also monogame godot would probably have to wait for the libgodot stuff to be usable to be honest

#

(That's the stuff to allow embedding godot elsewhere, and not have to be the host application)

devout vault
#

Not anti rustaceans

#

I am averse to using rust

cinder karma
#

I kid I kid

safe dragon
#

really though my favorite language is C#

#

80% because I am way better at it than any other language

devout vault
#

It's my favorite language too. But still missing some things

#

(God I want runtime mixins)

#

(How much would I use them? Don't ask questions)

safe dragon
#

I don't know what that is

devout vault
#

Also:

  • Being able to use values and not just types as generic parameters (ie. the main thing I miss about C++ templates)
  • Being able to break out of an outer loop,
  • Other stuff that's really only useful when designing something to be modded to be honest
safe dragon
#

those first 2 are both in rust 🙏

#

you can technically break out of outer loops in C# if you count the goto keyword!

devout vault
# safe dragon ~~I don't know what that is~~

To oversimplify things, mixins allow you to copy one classes contents (including things like implemented interfaces) into another.

You can do compile time now with partial classes and sourcegen, but I'd love to be able to attach an inventory to an arbitrary thing at runtime without having to go full ECS

devout vault
#

I'm not against using goto, and I think I've used it for that sort of thing before

#

But something like how java lets you label a loop and then you can break using that would be nice

devout vault
safe dragon
#

I've read many explanations of mixins now and I vaguely understand what it means

#

feels a bit like the derive macros in rust which I suppose is like the source gen compile time mixins in C#

#

runtime tho

#

rust does not have that

#

which has been annoying since it also lacks reflection

devout vault
#

I wonder if I'm ever gonna finish that C++ runtime reflection thing I was working on

#

Or if compilers will have official support for the standardized version by then

cinder karma
devout vault
#

Yeah, for the compile time side of things you can also do it with multiple inheritance

cinder karma
#

God no multiple inheritance sucks

devout vault
cinder karma
#

That's a bit of whining about multiple inheritance in python

#

I'm against multiple inheritance

safe dragon
#

u don't have any of my photos

#

I deleted them from ur dumb ass cloud thing years ago

dusty pollen
# cinder karma I'm against multiple inheritance

I want multiple inheritance in a true duck typing system that really adheres to "if it looks like a duck and it sounds like a duck, it's a duck"

like I want to define an interface for a class that has a mult: (T, T) => T method that has certain characteristics (commutative, associative, distributive, has a Zero and a One), and then any class that meets those requirements is inherently an instance of that interface

safe dragon
#

I only accept duck typing as a feature if it's compile time validated

#

else it should be hurled into the sun

dusty pollen
#

see this would be!

#

somehow

safe dragon
#

haskell can probably do this idk it's a terrifying language

dusty pollen
#

well I guess you'd define the characteristics of the method as some kind of compiler constant declaration

rain apex
#

Do u accept it if a duck compiles your code manually by drawing lines in the sand with beak

dusty pollen
#

do I get to pick the duck

safe dragon
#

only till the novelty wears off

rain apex
safe dragon
#

this conversation reminded me again of a programming language I've been waiting to get a versioned release for like 4 years now

#

it doesn't have duck typing I don't think but it has some system where functions can accept any object that has specific fields

#

which is why I was reminded

#

typescript does that too tho

#

actually typescript would do that with methods too

#

"oh this object has some field that's a function called x with the correct type signature? alright cool"

#

honestly

#

typescript has a really cool type system

#

it's just held back by the fact that it's Javascript

supple ether
#

I like the traits system for rust but I wish you didn't need a separate impl block for non-trait methods

#

I like having data and functionality in one place

devout vault
devout vault
safe dragon
#

smh bunch of OOP people

devout vault
#

yes

safe dragon
#

I'm the same but I can accept it just simply being the same file

devout vault
#

Yeah

safe dragon
#

I've started putting multiple classes in the same file sometimes in C#

#

which I know is evil and should never be done according to people that do exist

#

only really do that when one of the classes inherits from the other and requires almost no implementation beyond that

devout vault
#

When Pathos took over my mods for a bit I believe one of the first things he did was split them into separate files

rain apex
#

I only put them in separate files if I have to PR pathos

#

No1 oop enjoyer in all of sdv modding

devout vault
#

Even enums that only have two or three values

#

Drives me insane

#

JA was the main culprit I believe

safe dragon
#

every time I look at pathos code I'm brought back to being told how it "should be done" by people that I've increasingly become wary of

#

I don't look at it very often tho

#

pathos code is very enterprise C# approved from what I've seen

devout vault
#

Pathos's stuff does seem a bit overengineered at times (looking at you, ValueProvider stuff in CP), but it can come in handy sometimes

devout vault
#

Big aversion to static fields, while I use them kinda liberally 😂

#

(Sometimes you can't avoid them with modding, but that doesn't mean Pathos wouldn't try)

pliant snow
safe dragon
#

only once I end up using it for something else too I'll move it out

devout vault
#

Like, the whole dependency injection with constructors thing

devout vault
devout vault
rain apex
#

I use a lot of nested enums blobcatgooglyblep

#

Bc it's literally used only here

devout vault
#

Like I will use nested types a bunch for data models especially.

#

Which means they tend to go in the same file (unless you abuse partial classes)

rain apex
#

For modding code I mostly just don't think there's a difference between a static class and a singleton and usually i pick static class

red crest
safe dragon
#

dependency injection is quite different from static fields unless you mean state singletons in which case yeah whatever it's just the same with different dressing

devout vault
#

But Pathos's style is closer to no nested types I feel like

rain apex
devout vault
#

I mean stuff like how Pathos will pass IMonitor into various things constructors, while I'll just use a static field referencing it on my mod class (or pretty close to that, anyways)

safe dragon
#

dependency injection is a cornerstone of ASP.NET Core development (and really wonderful)

devout vault
#

I get why it's useful for things unit tests and stuff

rain apex
devout vault
#

But that's not feasible for most things in modding anyways

red crest
#

i personally kinda like Pathos's code style but I don't really follow it myself very much but I like it more from the perspective of code that many people may touch and modify, which is more true for content patcher than it is for my mods

safe dragon
#

most of the stuff I inject has to be unique per http request I'm handling so they're scoped services. Static fields just would not work

devout vault
devout vault
red crest
#

don't have to restructure a bunch of content patcher just to use an enum somewhere else

devout vault
devout vault
#

So it's less useful that it would be otherwise from that perspective

red crest
#

publicizer my beloved

#

(but also I meant like if I was PRing CP and wanted to use the enum in the new feature I was adding)

#

enum not the strongest example I just wanted to light-heartedly poke at chu more

devout vault
#

I've never used publicizer

safe dragon
#

wait I think I remember looking this up and being terrified

red crest
#

Publicizer?

safe dragon
#

it just makes everything public doesn't it

devout vault
red crest
#

It makes whatever you want public, which need not be everything

rain apex
safe dragon
#

that's such a modder thing to want

red crest
rain apex
#

I do that for various game nested enums

#

The argument is kinda philosophical then, are you breaking the original design by using enum in a part of code where the ClassName is totally out of place

#

Or does it make sense with full name spelled out

red crest
#

you wouldn't be if it was not a nested enum to begin with

safe dragon
#

don't think I've ever in my life nested an enum

rain apex
#

Cus what if it is like OtherClass.Flavor

safe dragon
#

I'm not sure I've ever tried if that was possible

red crest
#

who says I can't use flavors elsewhere

cinder karma
#

One place I break from Pathos style

red crest
#

Why should it be nested

cinder karma
#

Enums are nested until a second class wants it

#

I'm also very enum happy

rain apex
#

The argument is that the ClassName is important qualifying info for this particular enum

red crest
#

(to be clear I also nest my enums until they're needed elsewhere but again my mods aren't being touched by multiple people)

#

i don't know if I think the class name should be that important to an enum