#making-mods-general
1 messages Β· Page 406 of 1
I have found a few more things I can add (still trying to find blueberry's gym mats though) and then I will add MMAP
Oh drat I forgot to add the display names to Strings. I need to do that instead.
on the other hand you could publish it now for a mythical opportunity to confuse all the translators
Oh it would be fine for translators because I've i18ned it
It would just be fiddly if someone else wanted to change the display name because they'd have to edit the Data/Furniture entry. If I add the name to strings, they don't have to do that.
Also blueberry since you are here: what gym mats????
Oh but they don't have to be Strings in particular
oh they don't exist in the game. you have to make those π
-_-
I did the ol Load i18n thing
I know they don't have to be Strings, but is there any reason not to add them to Strings/Furniture?
Well, it's less patches to load to your own asset
the base game puts them in Strings/Furniture because they have to go somewhere, you only need to if you plan on using the same strings from a different content pack
How? I have one patch to edit Strings/Furniture, one to edit Data/Furniture, so two. If I load my own, then I still have two patches?
no reason the other content pack cant take from wherever the first one puts them, no?
I think it's just preference thing
This style means I don't have to write all the keys basically
the idea being that the first one doesn't put them (editdata a strings asset) anywhere, it just loads from i18n directly to the Data/Furniture DisplayName field for that entry
Unless I'm misunderstanding you blueberry I am already doing that
Then u use that like normal localized text stuff https://github.com/Mushymato/MiscMapActionsProperties/blob/main/[FullMod]/[π] Modular Fish Tanks/data/modutank.json#L13
that locks it into the item forever i think doesnt it
And I don't want to do that because then if people want to edit it they have to edit the Data/Furniture entry and do fiddly slash-delimited string editing.
Ppl can target my asset too if they want
Just EditData mushymato.ModularFishTanks.i18n
So if someone else edits yours, chu, do they change the mushymato.ModularFishTanks.i18n entries from "watery_tank.name": "Watery Fish Tank", to "watery_tank.name": "{{i18n: other.mod's.replacement.name }}",?
Yeah basically
The Target is the only thing different really
The fact that my jsons came from my i18n folder is incidental cus i never actually use i18n: token in this mod
Hm
I think this would be a bit less work for me but then much more work for someone wanting to edit the display name because they'd have to figure out what to edit
theyd already have to figure it out by looking in your code and fnding the LocalizedText
But I can just put a comment above the strings patch saying "if you want to edit the display name, just target this, the lines are below" which I think is easier than telling them to go find an asset they can't see without doing a patch export
they can see the asset, it'd be your i18n
note: translators also do not read comments
It's going to be very unfamiliar to them though
blueberry, they're not a translator
This is not for translators
then it's all the more important for me to mention that programmers absolutely do not read comments
honestly, no users read anything
Make it how you want it and if people complain, point them at the thing and say "read"
(This is also not for users)
Thank y'all for the input 
I'm sticking with Strings for now
New quote added by atravita as #6587 (https://discordapp.com/channels/137344473976799233/156109690059751424/1409373380733308988)
I'm not a programmer, I read comments!
Especially if they are //oh god no
well, good news my mod i cranked out works. i only have a few npcs done lol
cue avril lavigne
Okay, it works if I do some hilarious rubbish. Data/Furniture texture is a blank 3x2 space in Tilesheets/Furniture so I can have an invisible base texture and then all the real textures are added using DrawLayers. I'm doing this so I can adjust the collision, not to get the DrawLayers to work. If I use the bench as the base texture, the bounding box is too far to the right so I can't give the left bar collision.
is this yet another bench saga
Yes haha
the bench beckons
I should probably just load a blank texture of mine own rather than relying on other mods not adding anything to that blank space in Tilesheets/Furniture
sometimes i wish there's a cp command to init a blank texture
but we would want blank json action first lol
There's not any way to apply map Front layer logic to this, is there? Muh farmer's hair is hiding under the top of the bench lol
the draw layer stuff has it's own depth adjust ways, SortTileOffset
put a positive SortTileOffset to make it go more back
I specifically need it to draw over the farmer when the farmer is north and under when the farmer is south
Hence the Front layer logic
It's okay if not, players can deal with a tiny amount of jank lol
SortTileOffset 2 probably
the concept is that each 1 in SortTileOffset makes it draw as if it existed one tile above it's actual bounding box
exact maffs fussier than this ofc, and it works like this cus i followed how building draw layers do things
Ooh yes that was exactly it
Sorry, I didn't understand from the notes that it would function like that. I thought it was just an absolute change
how can i word it better 
Hey guys, just wondering if I'd be eligible for a mod author role. I only made a small AT mod, not sure if that even counts
How much to adjust layer depth by, according to Y tile based rules. Positive value is draw under, negative draw over.
@outer glacier and also read the stuff in #roles
got it, so i contact bouncer now?
yea and then follow the instructions re adding self to wiki
I don't understand the maths stuff at all so I can't advise very well on this but if you can give examples maybe that would help? Like that setting it to 2 will draw under the farmer when the farmer is one tile south/below and draw over the farmer when the farmer is one tile north/above?
mushychu
chumato
Also chu you are enabling my perfectionism so much here it's terrible π /lh
new wording mayhaps
How much to adjust layer depth by, according to Y position based rules. Positive number will make this layer draw as if the furniture is placed further above on Y axis, negative number will make this layer draw as if the furniture placed further below on Y axis. A very large negative value can achieve a "draw above (almost) everything" effect.
that way we can finally have more of that very performant Texture2D creation and manipulation without pesky things like "actually using it" getting in the way
I would still interpret that as it behaving the same way in relation to the farmer regardless of which tile the farmer is on (which is how I understood it when I first read it). I think because...I keep misreading "Y axis" as "Z axis" because I'd expect the sprite to be moving north and south on the map if it was changing anything to do with the Y axis. I've never thought about the "draw in front/behind" stuff as being to do with it being drawn as though it were changing Y axis position - I assume from our discussion just now that this is how it works, but I've never known that before.
it makes more sense when you consider that there is no z-axis, and that sprite layering is simply calculated based on the y position, so shifting the y lower will also change the layering
it is smokes and mirrors
im with Aba on this one even though i know the reason
It does make more sense, but I don't know where I would learn that outside of being told just now
Map makers are less likely to know the Y positioning rules
not everything that makes sense is necessarily intuitive
they are more likely to think in X/Y as in, yknow, map tiles
alas i dont really know how to explain it better 
why not just use forward and back
I have always been assuming that it just has some sort of code that goes "if the player is on a tile north of this one, draw this thing before you draw the farmer and vice versa"
the value is actually correlated to tile position tho
A positive number will make this layer draw further away from the camera and a negative number will make it draw closer to the camera
Things that are higher up on your map are closer to the camera than things lower on the map already, so you will be competing with other tiles as you adjust the number
in vanilla if you had a building at say Y=24 but SortTileOffset=1, it'll draw as if it existed on Y=23
mmap uses same logic here
Maybe you could just say it works the same as buildings like you do with draw layers? That way if people don't understand why buildings do what they do but they do know what number to put to make it do what they want they can just do the same with yours. (I just read the description of it in Buildings and wouldn't have understood that either lol)
I think when writing instructions on how to use something for a potentially ignorant user (ignorant in the literal sense, not insulting sense) you may at times need to strike a middle ground between "correct from a technical perspective" and "not 100% technically accurate but gets the point across better that a layperson can achieve correct results"
for example my being asked once why I had SetNewDialogue using an "Append" argument if setting it to true would add dialogue at the front, not the end. the technical reason is that CurrentDialogue is a stack, appending adds things to the front. however it doesnt make sense to people who dont know and frankly dont care that its a stack
How much to adjust layer depth by, according to Y tile position based rules similar to buildings. A positive 1 will make this layer draw as if the furniture was placed 1 tile above it's actual position, and a negative 1 does the opposite and make this layer draw as if the furniture was placed 1 tile below it's actual position. A very large negative value can achieve a "draw above (almost) everything" effect, and you can use floating point to achieve partial layer depth offsets.
i do think it is useful to emphasize the intuition that draw layer of entities depend on Y tile position tho
if you publish it now i can send a PR later with typo fixes for github points
hence middle ground and not stuck to one extreme or the other!
I think that's good, chu. If people don't want to try to figure out the Y position thing but know how to make buildings layer depth work they can use that info but it also explains the Y position. And if nothing else, if I saw this description while I was trying to do layer depth stuff I'd feel like I could do some experimenting because I could try a positive 1 and then see what that looked like in game.
if you hadn't already looked, the base game defines its own SortTileOffset value quite succinctly
A Y tile offset applied when figuring out render layering. For example, a value of 2.5 will treat the texture as if it was 2.5 tiles further up the screen for the purposes of layering.
xmldocs is the friends we made along the way...
(also, if nothing else motivates one to strike such a balance, a mod author must always remember: if someone doesn't understand their docs, theyre the ones who have to explain it over and over. i personally would try to minimize this occurence)
the council has convened.

what
this is an error furniture
it happened to have the right sprite index to hit this corner of cursors
I think I'd rather make people download MMAP if they want a recoloured bench instead of having to put together my horrible Frankenstein's bench
these hooligans from modded-farmers are making a mockery of my fine making-mods showcase
!sam
leah is being mean today
youngsters today never ask for permission 
trying to understand TMX file, so confusing...
Opening the vanilla Beach.tmx in Tiled, but these tiles look odd. What am I doing wrong?
<tileset firstgid="518" name="v16_Shadows" tilewidth="16" tileheight="16" tilecount="0" columns="0">
<image source="spring_Shadows"/>
</tileset>
why is firstgid="518"?
when was the last time you unpacked your files?
Yesterday?
which unpacker did you use?
https://lybell-art.github.io/xnb-js/
And then used Tiled to convert tbin->tmx
A web application that allows you to unpack or pack xnb files.
!unpack
Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!
follow these instructions instead
best of luck with the map editing!
Could I pay someone to make my uncle into a quick mod? For his birthday and trying to make a special present
How soon is this birthday? Because NPC mods are not that quick, so it might have to be a pretty simple mod
Depends who is available, of course
The quickset is prolly to make him into static map tile like Gil
What do u have in mind?
!commissions is the list of people who are open to being paid for things
If you're looking for people who do mod commissions (either art or code), here's a wiki page with a non-comprehensive list of people who do them: https://stardewmodding.wiki.gg/wiki/Stardew_Mod_Commissions
I am actually making mods for some of my family members so I might have some templates that others could use (for free!)
there's also an npc template on the modding wiki
I also drew some outfits, hairstyles, moustaches, accessories etc. for older people which I will upload as a mod eventually. As a mod it's not quite ready yet, but if someone needs something quick, we might be able to build some walking sprites out of what I already have.
Someone who knows more about the audio files in the game, can you suggest a sound that you would use for opening a book or turning pages?
vanilla sounds?
may i suggest newRecipe for big paper and shwip for small paper
Is there a noise when we read a book?
yep, there's a very glam book_read, but it's more the sound of the whole book being blown through
If you want to test out each sound ingame, you can use this mod: https://www.nexusmods.com/stardewvalley/mods/34968
(many of the sounds aren't named how you'd expect at all, but that's a vanilla thing)
Of course blueberry pulls through with the recipe book knowledge! 
I have wanted to use that one for a while Blueberry, but it wasn't on the Event Modding Resource which hasn't been updated since 1.4
I chose a random jojamart string for the shelf and this is what it pulled up with π no way
this got me so bad idk why this made me laugh so much it was just so unexpected
JojaSplosion - Fruit* Juice with a flavour so explosive it sends you to Mars!
heheheheh
-# *Phrases used are only indicative and may not be reflective of real life conditions. Terms and conditions apply.
i have a question about the homeregion field for npcs. the wiki only lists the vanilla ones, but i remember it was discussed that we can have arbitrary values in that?
can someone confirm?
yes, it appears you can, with most vanilla behaviour simply checking against a value of "Town"
great! thanks
of course, there doesn't appear to be any behaviour that would actually reference any non-Town characters; it's pretty much exclusively used to filter Town villagers
so you can set a new homeregion yourself, but it's also up to you to use it
betas has a feature that would be quite convenient to use with, so i wanted to check there would be no side effect in setting a custom region first
appreciated π
oooh what does Betas do?
Could it be? 'RegionalFriendship <HomeRegion> <#Amount> [Set?]'
Most definitely π
does someone has on hand an example of mod using spacecore for larger animations?
maybe a snippet of code?
The world is your oyster π
[Content Patcher] The 'patch reloaf' command isn't valid.
Iridium recolors does for the meteor
it's more that seeing several examples help fill the gap and see the full extend of the feature+having an actual mod using it helps too
thanks
(Aside: sometimes I wish the patch reload command was fuzzy.)
Was it "atravita.CP.TestBoots" or "atravita.TestBoots.CP" or did I ever even put "Boots" in the name in the first place?
Can anyone make this a standard mod? PLEASEE THIS IS MY FAVOURITE PORTRAIT BUT ITS OUTDATED
XNB mods often break the game and are not recommended. See:
- using XNB mods for more info and a list of Content Patcher alternatives;
- reset your content files to fix problems caused by XNB mods.
For mod creators, see editing XNB files for help unpacking & editing them (including for use with Content Patcher).
Itβs an xnb mod but Iβm trying to convert it to a normal one
There's some converters out there iirc
So it looks like nobody will be able to do it for you because of the permissions on the mod (as in, there are none, meaning all rights are reserved).
There is Pillow's converter, though: https://xnb.pillow.rocks
Probably possible to write a CP mod and instructions so people can just move the xnbs into the right folder. But if it's for 1.1 they're going to be missing beach and winter portraits (and Joja).
Hey when I changed it and tried to put it in smapi nothing happened
What's the cause?
Do I just need to convert it or do something else?
(I'm on android)
You should be aware that this is very old and so there's no winter portraits
Does that mean it won't work in winter?
They'd convert back to their vanilla portraits for winter and also on Ginger Island
Hmm I really like the art style. If I input two portraits is it possible that I could use one for winter and ginger island and one for normal?. (Like is there a way to overwrite the other portrait then use the other portrait in place when the main one is unavailable?)
Well you can overwrite the winter portrait assets
But at that point you gotta learn a little bit of content patcher
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itβs easier to start with making content packs, since you don't need to learn programming.
oh, you'll need to wait for #555 to pass review and merge before you can use that.
https://github.com/Pathoschild/StardewMods/pull/555 π
I'm on android πππ
Why is it closed >:(
it was..... half-baked...
Pathos can you take a look at this? Thanks
You can still get a text editor on android to do stuff, it will be annoying but doable
i think you can see i dislike schedules when you open my character data and see 1 (one) schedule for a npc
I love dynamic schedules haha until I try to play the game
And then it's like
"Okay my pixel wife where in the six possible random locations are you....oh, walked into the void again i see"
!unzip
Files with the extension .zip, .rar, or .7z are archive files, which you can extract to get the actual files inside. For a .zip file, just right-click (or long-press on Android) it and choose the option like extract or uncompress. For .rar and .7z, you need to install third-party software first, like 7-zip https://7-zip.org/ on Windows (get the x64 version), Keka https://keka.io/ on macOS, PeaZip https://peazip.github.io/ on Linux, or ZArchiver https://play.google.com/store/apps/details?id=ru.zdevs.zarchiver on Android.
Note: When downloading keka, click the "download version x.x.x" text below the "Download on the Mac App Store" button for the free version.
I did unzip it's missing a manifest.json
Was the content patcher schema issue in VSCode fixed? where "FromFile" value was being highlighted even though it was valid, or is that still a think? if it was fixed I think VSCode broke it again in version 1.103.2
I don't think it's merged, just a PR
Ahh okay gotcha, I thought another update cycle happened recently but I may have just been confused
so uh, how difficult would this be, in theory, code wise
if i were smart and new how to math, I could make a mod that when you hover over an item it'd tell you the best machine to put it in for profit... (including mod added machines). cause I have ... so many machines
It's hard cus some machines depend on output of other machine

well that's nothing an unholy amount of recursion can't fix
my brain makes the ideas but is also incapable of following through with the ideas
but shiloh. this is the training
files away sadly
imo the actual difficulty is machines that have rng outputs
the fun thing is is I have cried many times just trying to code my fence mod lol
C# would probably make me punch my computer and throw it out the window
i was going to say that the real killer is RANDOM_ITEMS output from item queries, as well as other various dynamic conditions
i suppose simulating output isn't out of the question
though also like chu said, you'd have to decide if your strategy is "highest profit after one machine" vs "highest final output". Also when looking at minmaxing, often the question isn't which machine full stop, but what to prioritise for each machine that you have
the wonderful and terrible thing about programming is the program does exactly what you tell it to
the computer is unfortunately completely innocent
i can hardly form a coherent instruction for the people in my life that makes sense to them and me, let alone type it out haha
if I made you a machine that spat out 1 prismatic shard for every item except for sap, which it spits out 50 prismatic shards for, and I made it so you could only ever have one, then it will always be the most profitable machine for literally any item, but you really only ever want to put sap in it
example, ff14 raiding, making a plan: come up with the most simple way to solve the puzzle of the mechanic, explain it in the simplest terms. Makes complete sense. everyone in my group: what??? failing to understand
and then I get so frustrated because IT MAKES COMPLETE SENSE HOW DO YOU NOT GET STAND AT A, MOVE TO C WHEN X HAPPENS MOVE TO B WHEN Y HAPPENS
they say the real test of whether you fully understand something is in how well you can explain it to someone else 
its like im speaking a foreign language or something omg this is why i dont raid anymore
Time is also a factor. If it takes ten years to process sap, but only a day to process anything else, then it's more profitable to put in non-sap items over time.
yup!
tl;dr this is something called constrained optimisation and it's an entire field of computing
Maffs
yep thats all the math stuff that im not good with
We gotta summon a mathperson for this
i would absolutely need a math savvy person to assist me, but I think i should just pass the torch on to someone that feels confident they could pull off something like this
at this point you probably want to hire a) a programmer, b) a couple more programmers, and c) an accountant
I have a degree in maths, what do I have to do to be good enough for you
/lh
would definitely be highest final output 
maybe a few more programmers and accountants then
this would most likely require at least one linear programming textbook
i just wanna make DPs so I can make money in my house, even if a little bit 
time to think of something easier
looks at my barely noticed fence mod but also it has DP turned off because 99% of the recolors for it dont give permission to earn DPs on anything with their work in it
also tiled scares me
but it can be... with my super easy trick (doctors hate it!) where you use my tiled extension
tiled is not too scary just start with editing an interior map that's not the farmhouse
I have 19 mods that earn all or some DPs. I get enough points for maybe $10 a month. Stardew modding is a fun hobby with occassional coffee money benefits. It is not a true way to make cash.
imo just start with painting silly faces on the maps with the stamp tool
Lol that's a way
i really oughta make a demetriums map one of these days
no no i know lol its just nice to have that little extra bit, I earned about $30 over a couple of months from the little bit 6480 split off for me on iridium recolors
Find a new style for all the farm buildings, farmhouse, and town buildings and then draw them all. Bam, rich with DP (but not really real money lol)
(tiled extension tiled extension tiled extension--)
Make it something witchy, people lovely that. What witchy niches aren't covered yet?
i get enough money to not feel bad about buying coffee from cafes all the time
I've tutored people in Tiled before, and made my own maps. If you ever want to get started with it, let me know. ^_^
but yeah it's a fool's errand to look at mod making in the lens of money making or popularity
the hard part really is that i have aphantasia so being creative... is... very difficult
when I cant see what I want to create
by all means use it as training for your C# or tiled career though, it's good comfortable practice in a documented and friendly environment
whats the tiled extension?
I have aphantasia too!
and it feels kinda listless just randomly throwing darts and hoping something sticks
granny weatherwax and nanny ogg
It doesn't stop me from drawing but it really impairs my mapmaking
such is life, and yet we create
Make something YOU want
Desaturated Witchy Industrialcore
thats the fun part, I dont know what Iwant
I don't think it is worth making mods for pursuit of bigger numbers DP or otherwise
It's magical! It lets you use tilesheets from other folders without moving the tilesheets or ending up with tilesheet climbing errors.
but yeah no career building here for me, I'm lucky i nthat husband makes enough currently given the state of things in the us that I don't have to work
oh yeah i agree, aesthetic mods/art mods have the most earning potential for time invested in my opinion, harder if you arent able to do the spritework
o thats super handy
ive been trying to find a little side something for personal spending money that wont make me want to headbutt a tree for a while
Go have a look at your most played-with mods and see why they appeal to you maybe? That might indicate to you the sorts of things you like most.
(Of course, I tested my Broken Farmhouse mod so much that now that I'm actually playtesting it, it's not as fun. ^_^;;;; I know it by heart. I mentioned on another Discord that I deleted 200 save files at one point. Even at only 15 minutes per save, that's 50 hours of testing.)
he who wants nothing is satisfied. he who knows nothing is satisfied. and yet he who wants what he knows not what is not 
ive thoguht of a recolor mod myself but so... so much work
For this I recommend Prolific, the survey platform
and I'm terrible at color theory lol poor 6480 had to readjust all my sprites for iridium recolors
(it was warranted dont feel bad)
You got me to update my mod, thats the important part
I love iridium recolors
sometimes i also think about covering the SVE buildings in elle's style but I dont know how she'd feel about that and it seems kind of difficult to contact her? I also dont feel like I'd do it justice
That's a great mod
i think your main takeaway from trying different things once and not necessarily succeeding shouldn't be that you aren't good at any of these different things, but rather than becoming good at any one of these things will take some time, passion, and even some strict focus
When I've converted old mods to CP or AT, I DM the person and try to get in touch with them first, get permission to convert the mod, then ask how they want to handle DP - on or off, split or all to them, etc.
greater focus will have to be when I'm less intensely needing to police my toddler from trying to off herself in stupid ways every day lol
It's their art, you MUST get permission and cannot make DP off their work unless they give you permission.
elle is around discord
I feel like currently, all my brain power is just sucked up at the moment
yeah, i wouldn't try and earn DP on that
I only would try to earn DP on any of my 100% original things
@brave fable is right. Things that earn money take some work. It might not be work you're willing to do, but you also might find things you can. I want to learn C#, but I keep putting it off because it's not fun. But I've made some cool mods using existing frameworks, and I'm getting ready to release two new really cool mods that I think people will love. They required a lot of time, but I had fun making them.
and that's probably why im not consistently or enthusiastically wanting to create more mods, side money earning is more of dream liteβ’ because i don't have fun doing these things
Yeah you have to have fun doing it
I think your perseverance and creativity with your farmhouse gives you a good chance of finding C# fun too when you know enough to start putting concepts together and experimenting
Fun is the main reason to make mods I would have thought
I've been modding for sdv for six years now, only broke above 5 dollars a month in the past couple years
Yup I'm here for the fun
Saying, "What can I do to make some cash?" is starting at the wrong end. Play the game and when you run up against something you don't like, say, "Can I change that?" Maybe you encountered the same dialogue and you're sick of it, or maybe you've seen the same event and you want to change it. Maybe you want something different in a farm map - I built mine entirely around using DaisyNiko's panorama background. When something pings you, see if you can change it.
Having said that I am looking forward to maybe getting a free coffee from the DP one day π
im just more under stress/bad feels of not wanting to be a financial burden on my husband but me + jobs have never meshed well, I've never been able to hold a job longer than 3-6 months before Imentally implode and quit
That means a lot to me β€οΈ I understand bits of it, sometimes enough to identify something I want to change, but sitting down with one of the online courses is such a drag. XD; Someday!
I haven't been able to get very far with the courses either. I have learned almost everything I know so far (which, admittedly, isn't a great deal) from poring over the decompile and asking questions about it, poring over the few tutorials/instructions on the official wiki and modding wiki, and pestering people here (especially rokugin and iro).
Hehehe I may get to that point. I've been lucky(?) in that many of the things I wanted to change now have frameworks that let me do it without digging into the code directly.
I think, too, that becoming known/popular as a modder takes dedication to releasing content. You could do one huge mod that gets really popular, but most of us don't have that kind of time and energy. Bog is a great example of someone who released a little at a time and grew to be popular partly because of the consistency in releases.
But again, chasing popularity and money is really not the answer. If modding isn't something you would do just for fun, then it's probably not a good fit as a side hustle.
the only person i would recommend it to would be someone who's already good at pixel art, because they can take commissions. which is still not a bunch compared to a fulltime job depending on where you are, but more consistent than modding for dp
or coding
I really gotta figure out prices 
but then as said it may be better as a way to master the skill for a more reliable job
I'm happy to give you feedback on commission prices if you want
Hmmm perhaps,,,
it's funny cuz I know how I wanna price live2d stuff but pixel art/sdv modding????? my brain breaks. like. wha
Or just be like me and become a popular artist's json person 
lmao
The one time I did something like that I got a spike in DPs, it's true XD
Artist π€json coder = sdv mod
i have to do both
i'm getting scammed
Nah, then you keep 100%
Hey 6480... /j
I would say same but Idk if Iβm doing either correctly so I might just be doing neither lmao
I'd like to see you commit some of the CP crimes taking place to make cornucopia's cooking mod work lmao
(I do all my own work for my own mods haha)
I am a Certified CP Criminalβ’
surprisingly CP is actually short for Crime & Punishment
or Cuisinez le Pain whenever "Action": "Loaf" is merged in
New quote added by katrie. as #6593 (https://discordapp.com/channels/137344473976799233/156109690059751424/1409540593973199112)
i hope this is the action for the farm cat
Well, back to the new mod I'm working on. I am so excited to share it with you folks! I can't wait. ^_^
But the scope creep is real. -_-;
any hints for what it is?
You're being so mysterious about it! 
A mod is a mod but a mystery mod could be anything ...
am i also a certified criminal now too...
I want it to be a surprise. ^_^ But I may have to ask for help with something soon XD
Only people with "Mod Author" role have right to share theirs mods on the discord ?
no, but the showcase channel is special in the permissions it has
"now"?
You can post your mod here or #modded-stardew and then one of us can publish it for you
It'll look like this #mod-showcase message
When you get lv25 you can apply for the role too
hey avi, by the way, did you see the discovery button made about the $query limitations? In case it's relevant for your mod
and thanks for the help with the dialogue feature, i now have several working cases thanks to you and Button
Just don't think too much of other crimes that use the same initials
funny
ah yes, capital punishment, the worst crime
we really dont need to be making jokes that allude to that
i had a dream about.... Draw layers and nexusmods
no, i've been MIA because brain bad (i left ping on incase)
so what, brain bad is an excuse to abandon all of us now?
/lh
(don't get too excited, you guys aren't getting rid of me that easily)
self care > all
/lh
i hope you're better! here is the summary : #1387907186713301072 message
and pathos made a note on the query on the dialogue page : https://stardewvalleywiki.com/Modding:Dialogue
i'm good enough to break things that pertain to my special interest, like pipe order of operation breaking 
Before I run with this, can someone just help me confirm I got the syntax for "This Or that" (only one argument needs to be true) correct?
"Id": "{{ModId}}_SetSprinklerFlag",
"Trigger": "DayEnding",
"Condition": "BUILDINGS_CONSTRUCTED All {{ModId}}_GreenhouseSprinklers 1 2, BUILDINGS_CONSTRUCTED All {{ModId}}_GreenhouseSprinklers_PostOrchard 1 2",
"Action": "AddMail Current {{ModId}}_GHSprinklers"
},```
"Id": "{{ModId}}_SetSprinklerFlag",
"Trigger": "DayEnding",
"Condition": "ANY \"BUILDINGS_CONSTRUCTED All {{ModId}}_GreenhouseSprinklers 1 2\" \"BUILDINGS_CONSTRUCTED All {{ModId}}_GreenhouseSprinklers_PostOrchard 1 2\",
"Action": "AddMail Current {{ModId}}_GHSprinklers"
},```
with the slashes and not a comma. based on the example?
this will happen if any of them are correct
ok. That's what I wanted to be sure of. Will make my code cleaner
remove the space between \ and "
Corrected the example above. Like so?
or the game will never forgive you
ohhhhhh. ok
(if youβre using one of the recommended editors it should be screaming in your face)
does the any also need a quote escape
Im using notepad++
(I think. I use vim btw)
vscode very much screams
now youβre missing one last unescaped " to close out the entire string
Would that just be " ", (minus the space)
"\"Here is escaped text\""
quote escapes are the natural predator of json files
and Im hurting myself a slight bit trying to write the code but not being able to fully test it myself currently... ha
for me it's forgetting a } and wondering why my i18n isn't working
what do u use to edit?
Notepad++
meant to ask forsy. pretty sure that would complain about a missing bracket
OH. Sorry
nw
:D it does not
Here's a list of software for pixel art and JSON text editors we recommend: https://gist.github.com/ishanjalan/c8efb21afa21f74a052293176db107f7
For making SMAPI (C#) mods, see the Requirements section here for which IDE to install https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#Get_started.
nah vsc yells at me
hm really?
thats not the bracket im talking about tho
o
oooh
and then it just dies without me realizing π
if you type it without the i18n shit it does copy the close and open ones
oh then yeah it does
it's just in " " that it explodes and dies
yeah it just like forgets about all its helpful features inside quotes
Guys what I need to do to make a custom NPC dance at the flower dance? Just to be sure I'm not missing anything
I recently changed my PC and now my custom NPC is no longer dancing at the flower dance
if the farmer isn't married to the NPC, they can ask them to dance, but the FlowerDance_Accept dialogue key isn't triggered. The NPC doesn't say anything and it create a loop when the farmer ask the NPC to dance and the NPC don't say anything. So when the farmer talks to Lewis to start the dance, the farmer and the NPC don't participate in the dance
Do you have a rejection line too?
yeah
you need to make sure youβve added them to setup and main event, that youβve enabled can dance at flower dance in their disposition, and that youβve drawn their sprites in the correct place on their spritesheet
Also check your console for an error when asking them to dance
I already check this, nothing appears
i hope one day to be as helpful as nexus commenters. no thereβs no image at the bottom why would there be
Are you running a minimal mod setup to make sure there aren't any mod conflicts?
Hi, can anyone help me with this please x'(
I edited a part of the vanilla bus stop map for my custom NPC, only the part in the red square, and I didn't alter any of the TileData boxes
But somehow the bus stop ticket booth just doesn't work
I know my mod is what caused it, because when I took it out the mods folder, the bus stop works fine
how would u feel about joining a server that's a community of modders (there's also some mod users)
sure that sounds fun!
can i dm u?
yep!
does your custombusstop include the whole map?
Yeah there's only my mod, debug mode, CJB cheats menu and item spawner, and the content patcher of course
your second block looks like it's replacing the entire busstop
!json Without posting your JSON for the npc event setup and dialogue keys, it's gonna be hard to offer any more specific help
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
and possibly removing tiledata
can you also screenshot your map in tiled?
oh wait that is a tiled screenie
bus ticket booth seems to be a C# thing
Yar, you do only replace some part of the map in the first action, but then you replace everything with the second action. Try removing the second action and see if the Bus Stop works then.
this is the whole thing, i used the full sized map for easier editing
better to crop
it'll be easier if you just edit the area u want to edit
also, are those earthy recolor tiles? 
i did compare the tiledata boxes with the ones in the vanilla map to make sure that i didn't alter anything
bus ticket machine looks to be hardcoded
Still, try removing the second action and test if the ticket machine works then.
just remove the second edit
and yes, it's the earthy tile, i'm still trying to learn and i'll make sure to remove them/use the vanilla tile once im done
for now, the mod is still strictly only for personal use
Replacing the entire map is not recommended because you run the risk of overwriting every other mod that patches into the map.
i'd say use vanilla tiles or just remove that tileset completely, dunno how modded ones would react. if you aren't editing terrian there's no need to include them at all
Oh gods of feature creep, stop making me add more features
this vscode extension is just turning to a whole automatic mod creator ughhhh
do moar
always always more!
it works! thank you all so much!
there is no harm in using recoloured tilesheets as your source tilesheets if they are the same dimensions
wouldn't that mess up if someone uses a diff recolor?
no. the game doesnt care what png you used
the game cares that it must load "spring_outdoors" and it will load that from the content pipeline when it needs to
ah right they are named the same
if you plan on supporting different recolours for adding, say, a house to the bus stop, it can be helpful or important even to use recoloured tilesheets in tiled to see how it looks together
true 
What i do is i open the recolored pngs and have it next to what im working in as a reference when im making maps
So that i can see which times get turned into something maybe a little odd
And then i can change my design accordingly
Hi.
I'm interested in making a few mods. One of them is to add icons above the player character to remind them of ongoing quests. For example, Clint's mining quest would first show a pickaxe icon and the targeted ore, like gold ore. When the quest changes to talking to Clint, it would show a speech icon and a head of Clint. Just using game icons. Haven't decide if it should show only one quest or multiple at a time.
I've looked into the wiki, but there does not seem to be a way to read the current ongoing quests. Is there an API or someway to do this?
!decompile
If you want to make SMAPI mods with C#, one important resource is decompiling the game to read the game code. Here's how to do it: https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#How_do_I_decompile_the_game_code.3F
youβd need to access game code for this
to get the farmer and their data Game1.player is the starting point
That looks fun... I'll bookmark it for the time being. Thank you.
does anyone know how to stop every single NPC in the game from walking into my custom map and freezing there?
π€ how are they even getting there?
I think it's messing with their routing because at some point in most NPCs schedules they just decide to walk over here
idk! At intervals in their schedule they just start going like it's no one's business!
it even happens to my custom NPCs
have you made a circular path with your maps?
where is your map, exactly
worth mentioning, most NPCs are freezing at every warp entrance
like relative to the rest of the world
added it to the right tunnel of the busstop
...huh
this map is only connected with an entrance to one vanilla map
right??? it's crazy!
weirdddd
I wouldn't even know where to start
as far as i know npcs don't even go there
my custom NPCs are also freezing at the spawnpoints of warps for custom maps
i have a stupid suggestion: does it still happen if you install spacecore
so a broader issue is going on
I've never used spacecore before! let's have a look, I'll report back
it improves NPC pathing (idk whatβs even up with your issue or if it will help, but worth a try)
having a look right now
might take a bit for all the NPCs to start deviating from schedule so we might have to wait a while
hmm, no one seems to be showing up in the city now!
I guess spacecore fixed it, strange
that's the problem
The tunnel runs through Backwoods, which is specifically banned from NPC pathing
you'll need an NPC warp from your custom map directly to BusStop
npcs weird
(it's because Backwoods has two entrances and the NPCs can't get from one to the other)
(weirdddd)
NPCs just seem to be hardcoded so they can't go there. I feel like at some point, they just kept using it and CA went "OKAY FINE IT'S NOT ALLOWED"
banned
Banned, PC only path
(more that if they were allowed, they would break and be unable to find their way to their destination)
the right tunnel?
(and just be stuck in the backwoods the entire day)
there isn't a tunnel to the right of busstop, I assumed we were talking about the vanilla one
(but also yes, I have left-right confusion
)
but there is a valley to the right of the BusStop, which some could call a natural tunnel, so i assumed they did add their warp to the right of the busstop
left and right are the same direction wdym /j
well if they take the wrong tunnel that would obviously not work so it needs to be the right tunnel /j
(If spacecore fixed it it means they had a loop. Possibly accidentally)
Ie, accidentally leaving a warp to hospital in your map, Tia
no worries, I could be assuming the wrong thing here 
I would love to be pedantic right now for the joke but I have completely lost track of the conversation
it's ok, pam too lost track here
I'm gonna go read the DialogueBox decompile instead
you were following along?
not really, no 
alright well spacecore fixed the city map but all my other NPCs are walking through walls in other places now π
will do more investigation
okay, tryna make 2 different dialogue options show up based on if the player has seen an event, I'm prob gonna just put the options under two separate "When:things, but out of curiosity, could I use a i18n thing for it? Was looking the the wiki for randomization with i18n, it mentioned the Random that's usually there is a key anddd idk what what is tbh so I wondered if one could replace the random with another game state query to make like a if/then thing? idk just screwing around
"Rainy_Day_2": "{{i18n: MODNAME_Rainy_Day_{{PLAYER_HAS_SEEN_EVENT current MAKE_EVENT_THEN_PUT_ID_HERE: 1, 2}}",
again, absolute novice, juts curious casue I'm trying to learn lol
you can try using $query, or you can use a token but you can't use GSQ in CP tokens
at least it's not advised
(and would require a mod)
let me see if i have an example...
$query PLAYER_HAS_SEEN_EVENT Current 58#But what's so secret about it? If it's a class, surely half the town knows already.$u|Hey, it's great. You should totally do it.$u
This is how you do query stuff (note : it may be a bit weird if it happens to be a dialogue the exact day the event is seen)
gotchaa okay, ty!
if you wanted to go the token way, you would do something like :
"Mon4": "{{i18n: YourLIne{{CPHasSeenEventToken}}}}",
and have a YourLineTrue and YourLineFalse
NOTE : replace CPHasSeenEventToken by the exact token CP uses
which i don't remember from memory
Are there any arguments for the shortcut of the SMAPI exe other than --mods-path that pertain to testing none C# mods?
I also have a dialogue question. is there a way to add dialogue for the day of the festival and not the event itself? using keys like fall_27 doesn't seem to work
you patch exported your result?
and on what are you testing? a classic npc or a kid?
in case it would be some specific case
I have not, I'll try it out. it's a hmk kid yeah
patch export. god my id's are too long
[realizes im not on the festival day]
why am i like this
okay! on the actual festival day this time, doesn't work
are you on first year?
2nd
then its why
try having the key being fall_27_*
(edited because discord ate my formatting)
dayofmonth has a weird limitation
<dayOfMonth> Dialogue shown on the given day of month in the first year only. WARNING: this first-year-only behavior is different from other keys and often catches unsuspecting modders! You usually want <dayOfMonth>_* instead. Example: 10: "Did you watch the game last night?#$b#Or wait, do you even have a TV set...?"
oh, that's, interesting. thank you!
it does, thank you so much! i did however, set the wrong portrait, easily fixed
π
"i love to dress up! π "
glad it's solved π
it's a very specific behaviour that got several modders confused, including myself, but now there's at least a warning on the wiki and a generic key to use instead
yeah, it's very confusing! i should've checked the wiki for it, these things are known to happen in stardew
wiki is very useful when you already know what to search for
the thing is, if i remember "oh isn't a weird limitation on some dialogue key", i can check wiki and be "ah yes, classic year issue"
but you're like "is it because of festival" and it wouldn't have provided good results anyway
very true, just looked at the dialouge entries for abby and assumed i figured it out
so, if i am understanding correctly, if i put 1 it'll be uneven years and 2 for even ones?
do you mean for the "first/later year" thing?
lambdas are confusing

like fall_17 : year 1
fall_17_* will be any year
fall_27_2 will be any year that isnt 1
not just evens
and fall_27_1 will be just the first year
not unevens
oh yeah sorry i misread what bea said in even/uneven
ah, i see. thank you both!
whats a lambda
a normal person /hj
i mean in coding
I was going to install a mod but I need its i18n file but I don't have it. Which file is the language file? Could you check it
So there is no i18n file, I want to translate it for myself
this isn't the original mod, it's a patch to make it compatible with sve
this is the mod
https://www.nexusmods.com/stardewvalley/mods/6307
huh, doesn't have an i18n either
youd have to replace the dialogue yourself then
Got it. There's a Turkish patch for this, but not an expanded one
So every dialogue written in the file?
these are the files most people translate, content.json is not needed to be translated
also the turkish one is an older version it seems
I love you very much.I'm going to do it
good luck
have fun! i am, going to bed
Let me see if it works or not
Sleep well
for those interested, my NPCs have stopped walking through walls simply because they felt like it
I did literally nothing to make this happen
that normally happens due to schedule shenanigans, void walking to invalid spots or needing to sleep a day to fix their schedules
anywhoo... I've always thought that having Qi appear so early in the game in 1.6 was a TERRIBLE design choice, it's 'fun' for old players.. but for new.. it doesn't really make sense.. (personally I think the whole mystery package dropping so soon, was a terrible idea)
to counter it a little bit, I just made this simple alteration:
Chat GPT says that the content patcher supports Meadowlands for Farmtype, but it doesn't respond. Is it lying?
instead of this tell us what you actually want to make?
!chatgptcode
We don't recommend using generative AI (such as ChatGPT, Copilot, Claude, Grok, etc.) to write mods for Stardew Valley. There are a few reasons.
- AI-generated content is not allowed to be posted in the server. If you need help with your code, you won't be able to post it.
- Large Language Models aren't trained on enough Stardew-specific information to give reliable, accurate output. They also have no concept of what they don't know, and so cannot tell if they're incorrect. In short, they don't know if they're hallucinating a solution that simply feels like it makes sense or not.
This holds true for both SMAPI/C# mods, and mods for frameworks such as Content Patcher.
There's no shame in being new to Stardew modding, and you won't be talked down to for not knowing what you're doing. We strongly recommend consulting with other mod authors in the appropriate channels as a first step if you're completely stuck at step one.
I don't quite get what you asked, but if you want to add custom farms peruse this wiki page: https://stardewvalleywiki.com/Modding:Farm_data
i probably do have answers but this isn't a helpful way to ask per say
(the functionality to add a prebuilt building like the Coop requires another framework like SpaceCore or Building Included)
meadowlands isn't a farmtype its for most intents and purposes an 'additional farm' like what Selph's link would describe
What would be the best way to remove a function from a machine? For example, making it so that tea leaves can no longer go into a keg, so that tea can be made in a different machine exclusively
you can use content patcher's target field, find the entry for leaves to tea in OutputRules and null it out
watch out for compat tho
many mods don't bother with this removing function bit, since they can't really stop other tea mods from adding more custom tea to keg either
Which entry exactly should I null out? I tried RequiredItemId but that just made everything make tea
Alright, that's what I thought
in my mod, I set X,Y location of spouse patio in an event. but meadowlands are in different place. so I wanted to know what the farm type is.
are you adding an event on the farm that happens anywhere other than the front door
put simply, a lambda is like a delegate; a function or action that isn't necessarily a method (making it anonymous, not a member of a containing type). you might think of them as 'shorthand' methods that aren't fully defined and can be quickly created and used.
so while public void DoThingNoReturn(int numOfEggs) { ... } is a method definition, since it has a name (and it's probably defined outside of local scope), var lamb = (int numOfEggs) => { ... } would be an anonymous lambda defined in local scope with the same behaviour, assigned to a named var
Yes. And it works other than meadow map.
you can check the farm type with that one cp token
and you're hardcoding the x y coords for every farm mod? that seems like a recipe for pain considering modded farms
If moded custom farm, I just let them input config for X&Y. But tried to detect for vanilla.
in that case meadowland farms' id is MeadowlandsFarm
This worked, targeting Condition in Triggers
If I did want to effectively remove the entire rule though, is there a way to do that?
yes, null it out
"Entries": {
"whatever the ID for the entry in OutputRules is" : null
}
with TargetField drilling into OutputRules
all else being equal though i would recommend just changing the condition. it effectively achieves the same result but prevents other mods from throwing warnings if they use that trigger's ID in MoveEntries or TargetField or somthing
bug report on my mod
the bug isn't even from my mod
i wouldn't even call it a bug
agony
If I want to swap one music track for another, existing music track in the game, I'm uncertain what to put in the "FilePaths": field. This is the example from the wiki:
{
"Action": "EditData",
"Target": "Data/AudioChanges",
"Entries": {
"{{ModId}}_Music": {
"ID": "{{ModId}}_Music",
"Category": "Music",
"FilePaths": [ "{{AbsoluteFilePath: assets/music.ogg}}" ],
"StreamedVorbis": true,
"Looped": true
}
}
},
I understand everything, but I don't know how to structure the FilePath to go to the internal track I want.
you cannot swap it with a different track from the game
you can only point it to a specific music file in your mod folder
Ah darn. Okay, time to go unpack the music
Thank you, @uncut viper. I always appreciate your help.
you'd have to extract the game audio and include the file if you wanted to alter something with it.
the other option is editing whatever's using the track to point to the other track instead. is this locational music or an event?
(not always an option of course coughminescough)
very tempted to say challenge accepted, but I don't actually care enough to actually do it
Alright, I'll probably stick with that then, but I've managed to get both ways working and think I have a good understanding of exactly what each is doing
when you squeeze the words 'audio bank' into the phrase 'unique challenge' it becomes a lot less attractive all of a sudden
this is a shell script I made to rename all the extracted audio files to their readable names:
oh I was planning on playing by the rules and not touch the audiobank or audio apis in redirecting one track to the other, and instead editing every assets reference of one to the other
if someone wants to use that and turn it into a Windows friendly version, be my guest
I want to edit a couple of things. One is an event, which should be easy to change, but I think the other is hardcoded, so I'll have to actually download the music for that one
Wow, thank you!
use unxwb to extract the audio
Just did it
(I considered this, and might still do eventually, for the 4 butters conundrum)
I just have to figure out how to use the shell script XD;
are you on Windows?
Sadly yes. Actually, I might be able to put this in a format Advanced Renamer could use, though
thanks. I have some troubles to do as Intended, but condition itself detect correctly, so it will be one step toward the goal.
the ln -s are symbolic links, which are just "fake files" that point to a real file (or another link if you're being fancy). the game has some sounds/music with multiple names for the same resource
Any way to add custom sounds? (with either Content Patcher or C#, either is fine)
yep [[Modding:Audio]]
Thx
Hello! Does anyone know the location of the Shearwater Bridge tiled in Sve so I can edit it in tiled or the xnb file?
assets\Maps\NewLocations\ShearwaterBridge.tbin
can i make a custom npc dance in the flower dance? I cant find any guide on this
Yes, you give them the right sprites and dialogue for FlowerDance_Decline and set FlowerDanceCanDance to true. https://stardewvalleywiki.com/Modding:NPC_data#Festivals
if they CanBeRomanced that should also work, even without FlowerDanceCanDance
But dont i need to set a tile for them?
You need to add them to the festival in general, yes. You don't need to specify where they will be during the dance, I don't think. ichor will know better than me because his NPC dances (I think?) and mine doesn't
you do need to make sure you include them in both set up and main event
Heβs in both so it should work then right
You can't really dance with someone if they don't show up to the festival, now can you, haha
Was just worried he would overlap a random npc
if you only add them to set up, you dance with an invisible spot
someone made a site to view NPC positions, i think pillow? let me find it
Tbh, with fhe number of expansions and npcs it's hard to not overlap with someone i feel
I checked from a guide but thats awesome thank you
Will save this
Oh that's good to know, thanks!
file under "things i've learned the hard way" lol
festival overlaps are an inevitability. try to work around them if you can, but don't overdo it. you can't catch them all so accept it and be happier
My npc is almost finished atp but im procrastinating making the heart events 
Real
i feel that! they're a lot of work but really rewarding to watch the final version fall into place
Or be like me and put them on the roof. 
Continuing work on my sourcegen thing, now working on gmcm boilerplate generation
!help
hi do you need help
!json
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itβs easier to start with making content packs, since you don't need to learn programming.
if you want to type commands you can use #governors-mansion
feel free to ask here if you have questions
Thank you!
Omggg a brazilian
a little visitor 
This is so cute!
is there any easy way to get an Animated Tile from a tilesheet using C#?
WHOMST is THAT
carmen sandiego, she was added as an easter egg in 1.6.9 /j
tbin (and likely xTile bc of that) actually stores it in the tile itself and not the sheet
See I would have believed you bc I don't play the game enough
that's a bummer
It's still worth looking into, but that's my best guess
yeah I see it's not in TileSheet
Turns out tIDE knowledge is not totally useless! It informs you about the terrible layout of xTile
clearly you need to make a lookup of all tile instances by gid to clone 
why on earth are you using tIDE
oh, so that's where she was
I haven't in years but in the old days tide and xnbnode were all you had
blessed are those who no longer need to use tide
knowledge of tIDE is important when doing runtime changes to maps as its the native format of xTile.
(and particularly when my performance mod is running where I intercept tmx loads and replace them with tbin loads as they are more performant)
I'm just going to pull the animated tile data from each unique animated tile, save it to a json file, then load the json file back to a dictionary of animated tiles
So tiled is suddenly doing a weird thing and Iβm wondering if any of you have seen this. When I try to add a non-vanilla tilesheet png, it wants to add it and save a brand new .tms file and wonβt add the png. Did I click something on accident?
You could use iro's extension and avoid having to add new tilesheets the usual way entirely - it lets you add tilesheets to your map from other folders without tilesheet climbing.
Thatβs the weird thing. I DO use it. Things just got wonky suddenly so Iβm defaulting to Iβm an idiot
I've never heard of a .tms file
Yeah. Itβs dumb. I dunno. Its a tomorrow husky problem
Have you checked the documentation?
Can you show a screenshot of what it's doing?
I got frustrated and shut down already. I just thought maybe you guys had heard of something. I can screen grab in the AM
you're just doing it wrong, no need to save it as a tms for it to work
tms is the filetype for tile spritesheets but stardew doesnt need that
I know this. Thatβs why itβs weird
Iβve made a number of maps. This is just suddenly starting to happen now
Which is why Iβm so darn confused
Cant say anything else then
Sorry if I came across snippy. Iβm frustrated with the situation and itβs not coming across well
At what stage is it doing this? Is it after you press ok on this screen?
Yeah. I hit ok and it makes me do a Save As to create a TMS
Which Iβve never had to do before
Have you definitely got embed in map ticked?
Yup
And Type as "Based on Tileset image"?
(what is a tms)
6480 said it's the filetype for tile spritesheets. I don't know what those are.
Itβs basically wanting to create a different kind of sprite sheet. Because itβs dumb
I honestly think I should sleep on it and approach troubleshooting further with fresh eyes
I also think thats wise
U sounds v frustrated
Its fine I just cant help

wow did Not expect to find this so easily within 5 minutes of opening the decompile, you guys weren't kidding when you said this would be a great first C# mod lmao
Is there any way aside from MYC to make a crop deliver a flower and seeds? Like sunflower does in vanilla.
Awesome!
np, let me know if you need help, cus it can be confusing
I induibatably will
i know we've talked about tokens in i18n's but, if i for example want the dialogue to be this
ugh, {{2ndparent}}, won't let me play with mud! i'm guessing i'll need 2 i18n's since i put the token in the middle?
imo even if you did it at the start it'd be a good idea to not force the name to be at the start/end, other languages may have differing sentence structure
i'm sure this is all levels of wrong already (it's not AI i'm just bad at this), but what direction do i go from here? should i store ModEntryOutput as a GSQ (somehow) (or expose it some other way?) and then send mail through CP? should i do everything through C#?
i think basically i can muddle my way through logicing out a problem, i'm just not sure how to interact with the game/SMAPI
true. two i18n value time
you're right to ask about interacting with the game and SMAPI
so first i'll point out the red underline on ModEntry that says you're missing the actual entry point, which is the root of all your interactions. you can click it and either click the π‘ icon or press ctrl . to open the intellisense(tm) fixer-upper, which will prompt you to add the Entry method that's expected of Mod classes:
throw new NotImplementedException() will basically terminate your mod, so you'll be replacing that with whichever methods you choose to implement your mod
ohhhh yeah i saw that pop up when i clicked and had no idea what it meant
generally from here you'll be adding handlers to the various events accessible from SMAPI or from the game, which aren't all-encompassing, and often require you to use Harmony instead for more granular arbitrary code execution
which begs the question of what do you want to do, and when do you want it done?
i want to IDEALLY send a HUD message when the player goes to sleep the night before their wedding, prompting them to click yes/no to get out of bed and change clothes. but that felt too advanced for right now, so i'll settle for sending mail the morning before their wedding, similar to festival reminders
so thanks to having decompiled the game -- which you should ideally do for any c# mod regardless of how simple you imagine it to be -- i'm able to do a quick search for the festival-started text in the unpacked content (Game1.cs.2640) and see how it's used by searching for the key in the decompiled game code, which shows it's used by calling Game1.addHUDMessage(new HUDMessage(message)) for some translated text message, so our actual ideal behaviour is simple enough
ohh i do have the game decompiled, thank you for teaching me how/why to actually search it
as for sending mail, that's simple enough as well by calling Game1.addMail() or Game1.addMailForTomorrow(), depending on when you prefer to send it
it does require that you've patched in your mail to Data/mail since you're passing the key as the mailName parameter, so you'll probably still want a CP component to handle that for you
i have a high level question: in CP, i have to either know or specify when things happen, like adding mail via a trigger action that runs when the condition is met, with the condition being checked repeatedly upon the trigger. how much of that sort of timing/knowledge do i have to worry about with C#
does a C# mod run top to bottom? how frequently? does each method run a different number of times/at different times?
the order that your program runs in is called control flow or execution flow and it's a whole thing
i'll summarise it by saying that within a single method (e.g. public void Name() { ... }) the flow is generally top-to-bottom, line-by-line, but whenever another method is called the control flow will be redirected there, run through it, and return to its previous position
that makes perfect sense
in the realm of stardew modding, our code is generally either called by SMAPI (your Entry() method only), called by events you've added a handler to (often from a selection of SMAPI events given in helper.Events), called by other various delegates/events throughout the game code you've added handlers to (maybe things like Game1.activeClickableMenu.exitFunction or DelayedAction.functionAfterDelay()), or completely arbitrary execution using Harmony
wiki says this command is to add a new line and the player has to click. does it just not work in i18n?
how frequently? does each method run a different number of times/at different times?
the technically correct and so mostly useless answer is that a C# method wont run at all unless something calls it, and will run however many times its called.
do, i like, need a hashtag
but it all starts at Entry, and you have to add your handlers, harmony patches, etc. from there in an increasingly complex web of handlers, calls, and callbacks
imo that's a very important technically-correct answer
so an order of operations might be: SMAPI launches, calls my Entry method, runs through every method/helper my Entry calls, then moves on to the next alphabetical mod... when does it repeat? for example, checking if CountdownToWedding == 1, does that happen every time it loads (so a new day), because it's underneath SaveGame.loaded?
would my method that returns the bool be a helper?
yeah you need #$b#
it doesn't repeat! Entry is called only once, as the seed to your tree of binary operations
inch resting
from there, it's up to you to define when and how often things are called
but yes, other than that you're correct about the control flow
so then technically is my Entry method running until it returns? or until the game is quit? something else?
timeline for a SMAPI mod initializing is the ModEntry class gets instantiated (running the default/empty constructor if present) along with field/property initializers, and after every mod has had that happen, it then goes around and runs each mods Entry method once.
SMAPI will also run the GetApi method around that time as well, everything else SMAPI doesn't care about and is whatever you caused from the Entry method
oh wait i think something just clicked. it's poised waiting for the if statement to be true, continuously checking that every time SaveGame.loaded.CountdownToWedding is called by the game?
i'm having vague memories of getters and setters and method calling
Nope, no waiting there!
The entry method is only run once at startup and nothing else can happen until it finishes running.
When SMAPI prints the list of loaded mods in console, thats after every mod has finished running their Entry method
oh hmm
Entry, or any other method, will run for as long as it takes to execute all of the code it contains. so with this code:```cs
override void Entry(IModHelper helper)
{
while (true) {
this.Monitor.Log("aaaaaa", LogLevel.Debug);
}
}
will never end, because it's iterating over the `while` statement until `true` is `false`
Stardew for the most part is entirely single threadded and only one thing can be happening at a time,
whereas this code```cs
override void Entry(IModHelper helper)
{
if (true) {
this.Monitor.Log("aaaaaa", LogLevel.Debug);
}
}
will end its lifespan almost immediately, returning when it's run out of lines to execute
override void Entry(IModHelper helper)
{
return;
if (true) {
this.Monitor.Log("aaaaaa", LogLevel.Debug);
}
}
and this code will be ended absolutely immediately, since it's return ed before it can even say a word
OH it's just that i didn't make it a loop?
loops are tools, but we aren't using them here.
if you made it a loop it wouldn't ever change because you aren't letting anyone elses code run to change the state
for sending your mail or displaying your hudmessage, you might use some code like this, which won't be looping, iterating, or in any way prolonging its lifespan, but will be called by SMAPI at the appropriate moment:```cs
public override void Entry(IModHelper helper)
{
// Run this behaviour every day, before saving
helper.Events.GameLoop.DayEnding += this.GameLoop_DayEnding;
}
private void GameLoop_DayEnding(object sender, DayEndingEventArgs e)
{
// Try and send the wedding warning
if (...)
{
Game1.addMailForTomorrow("myFunnyMailKey");
}
}
oh i see
okay so gameloop day ending is going to determine when my code is finished
well, when it starts
which will finish almost immediately
in this case, SMAPI has an event emitter placed arbitrarily in the game (which is a loop itself, running until it's closed) which notifies your registered handlers whenever it's called
and the next persons DayEnding event handler wont start running until yours is finished
and this is why people use harmony to control when they do stuff? because otherwise it would just be in order?
and if you take too long in a SMAPI event handler, profiler will snitch on you
Harmony still follows the usual control flow of the game, it just means we can precisely decide where in the game our code is called.
Harmony has at a high level two main flavors:
- A convenient way to 'time' when your logic is going to run in the control flow
- Wanting to change/replace the behaviour of the method in question
for example, SMAPI has added its event emitters (such as Events.DayEnding) at convenient places in the game code, so that most mod authors won't need to use Harmony at all for the most common times we might want to run code
that makes sense
i was worried about how i would know when to start my check, because obviously i don't want to check on spring 1 and then never again
but if, say, i wanted to run some code in the middle of the method that cooks my food, i'd have to use harmony to very precisely navigate there. most mods wouldn't ever think of doing that, so SMAPI doesn't include a convenient event for it
The explicit event handlers are better for performance for handling that first usecase, as there is a performance cost in harmony taking over a method, but nothing beats harmony in doing the second case
i see i see
to use the yellow book's metaphor, a chainsaw with no safety on it
is there a guide or a way to know commonly used helper events (is that what they're called) or is that a "hunt through the decompile" thing
you won't find SMAPI's events in the decompile, but for your convenience they're all available through IModHelper helper
And in the case of your IDE, it'll essentially just tell you when you start typing.
yep
it's called Intellisense(tm)
Say you type helper.Events....
Entirely accidentally chosen group of SMAPI events, but coincidentally the ones you might want to be touching. 
Intellisense, my beloved, the best tool in my arsenal, probably best tool i'll ever have
to find out what these do, do i have to fill out the intellisense entry?
oh wait if i hover long enough it comes up
(And don't worry, yours probably won't be light mode. /j)
once you do the += it would also likely prompt for auto completion to make the event handler method for you with the correct types as well
going back to your actual problem at hand though, we left off at a brief, incomplete solution that's trying to send a warning message the day before your wedding, which is all but complete. all we need to do is decide on a condition before sending your mail
it would be when ModEntryOutput == true, right?
which btw i'm going to rename to IsWeddingTomorrow
i accepted its suggestion to change it
if() will evaluate whatever's inside and check if it's true before proceeding, so this will always run
private void GameLoop_DayEnding(object sender, DayEndingEventArgs e)
{
// Try and send the wedding warning
if (true)
{
Game1.addMailForTomorrow("myFunnyMailKey");
}
}
or with a method call, it might look like if (IsWeddingTomorrow()), since we need to call (run, execute) the method with its IsWeddingTomorrow() signature
as for the contents of IsWeddingTomorrow, i probably wouldn't reference SaveGame.loaded since as far as i know it's only populated once on save loaded and never updated
yeah, there were multiple variables that i thought referred to checking the days until wedding, i just picked the one that sounded closest but no surprise that it wasn't right
(man, is there a way to look at the decompile without closing my project every time?)
you'll want to reference the things it's used to populate, which from searching the decompile for countdownToWedding (and from having messed with the saveloader for weddings lately) i can see we want to use player.friendshipData[player.spouse] in one way or another
open two visual studio windows βοΈ
file>start window asks if i want to save...
(i could be totally wrong about savegame.loaded not being updated, for all i know it's the single source of all truth in the game. i don't need to know this stuff π )
that's my circus and my monkeys, don't worry lol
nono, like, new window
wow i literally just learned how to open a new window like that in windows 11, thank you
(You are also a high enough level to ping Pathos to get access to the decompile GitHub repo if you like!)
in any case, a little intellisense(tm) fenangling and a little funny c# syntax gives us this tried-and-true method for checking the wedding countdown for the current player (where Game1.player is always the local player)```cs
private void GameLoop_DayEnding(object sender, DayEndingEventArgs e)
{
// Try and send the wedding warning
if (Game1.player.GetSpouseFriendship() is Friendship spouse && spouse.CountdownToWedding == 1)
{
Game1.addMailForTomorrow("myFunnyMailKey");
}
}
(What is the github decomp repo? Is it the same as the decomp on your local system when using ILSpy?)
It's a decompile with fixes so you can build and run it, along with the unpacked content.
where GetSpouseFriendship() is Friendship spouse will check that the player has a spouse, they have a friendship value, and it isn't null, then create a new Friendship spouse local variable for you in the scope of that statement, which is a direct instance reference to the friendship value
how come you check for both spouse AND 1 day before wedding?
Ahhh okay gotcha, so a more 'correct' decompile without the mistakes that can occur with ILSpy?
actually let me check whether the npc is considered your spouse while they're engaged
they are 
It's really just an ILSpy decompile with fixes applied really, yeah. Also obviously useful for the history to compare changes between versions!
I didn't think of changes between versions, good to know thank you
if we don't check whether it's 1 day before the wedding, it'll send on any day that the player has a spouse. if we don't check for a spouse, we'll have no idea when the wedding is, or if there even is one
how long time do u usually spend if you want to generate a new boy mod
im a freshman and i dont know how to start lol
are you looking to create a custom NPC?
i think a new boy takes about 9 months usually
i'm not even going to get into how to start one π
unironically 9 months is a good ballpark
wow
NPC mods are not simple so it should be something that you really like and feel okay taking a few months for at least
i feel like things are falling into place, thank you so much for your help and your patience with me. iβm going to go to bed (should have done hours ago) but iβm looking forward to testing out my new knowledge tomorrow!
yesss
!npc the others are right, it takes a lot of work but weβre here to help if needed
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Aviroen has put together a template that will allow you to easily create a romanceable NPC.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
a very good start to that boy
no problem! don't be surprised if it takes a while to understand this stuff, programming took me years to get comfortable with. stardew's codebase always has surprises as well (i probably wouldn't have ever imagined using savegame.loaded, but now you mention it it seems obvious lol) so don't be surprised if you're crawling around in intellisense(tm) for the next 5 years
definitely a good warning to have, i wasnβt sure if it was going to end up being the clippy of coding LMAO
copilot is the clippy of coding. intellisense(tm) is the jarvis of coding, to use a reference you youngsters will get
do you have a reference for the un-young too
uhhh probably HAL
If you'd like to avoid all AI in your development, there is also IntelliCode, which is separate, and is generative AI powered: https://learn.microsoft.com/en-us/visualstudio/ide/intellicode-suggestions?view=vs-2022
i sure would!!
who is jarbis
intellicode's sole purpose is to shit me off by moving code everywhere at lightspeed and it must be ground into dust
iron man sidekick
(I'm also learning that Google's snippet lied to me, and there aren't instructions to disable IntelliCode on that page.)
why is it doing that so often
naturally, the ai has learned self-preservation
maybe i was wrong. maybe intellicode is HAL
when do google snippets tell the truth?
A teeny tiny baby HAL that runs on your local computer.
iβm sorry dave. i canβt disable that.
google is tired and confused i see
Existimos aaahhππππ
swapped to duckduckgo after accidentally clicking on google's "ai mode" one too many times and got pissed off 
This is correct, yes? 6480: { "Action": "EditData", "Target": "spacechase0.SpaceCore/CropExtensionData", "Entries": { "LK.JojaSeeds_Sunflower_Seeds": { "YieldOverrides": { "5": { //number of phase which you harvest to get this (0=seed) "IgnoreDefaultDrops": false, "Drops": [ { "Id": "Blue Sunflower seeds", "ItemId": "(O)LK.JojaSeeds_Sunflower_Seeds", "PerItemCondition": "RANDOM 0.10", }, ] } } } } },
(I should make sure it's loading correctly)
are those the line autocomplete suggestions? because theyβre only useful when theyβre either copying the line right above them or about as generic as a preset snippetβ¦
otherwise they just do a bad job of suggesting strings
note that you need the xp field to be here if you don't want it to default to 5
"431": {
"YieldOverrides": {
"4": {
"ExperienceGained": 14,
"IgnoreDefaultDrops": false,
"Drops": [
{
"Id": "Lumisteria.MtVapius_GalaxySeeds",
"ItemId": "(O)Lumisteria.MtVapius_GalaxySeeds",
"PerItemCondition": "RANDOM 0.1, NEARBY_CROPS 2 486",
},
{
"Id": "Lumisteria.MtVapius_SunflowerSeeds",
"ItemId": "(O)431",
},
]
}
}
},
"Lumisteria.MtVapius_RyeSeeds": {
"YieldOverrides": {
"4": {
"ExperienceGained": 7,
"IgnoreDefaultDrops": false,
"Drops": [
{
"Id": "Lumisteria.MtVapius_Rye",
"ItemId": "(O)Lumisteria.MtVapius_Rye",
"PerItemCondition": "RANDOM 0.1",
},
{
"Id": "Lumisteria.MtVapius_Hay",
"ItemId": "(O)178",
"MinStack": 1,
"MaxStack": 2,
"PerItemCondition": "RANDOM 0.3",
},
]
}
}
},```
spacecore has a default gain of xp of 5 when using this feature, unless you specify another number
@drowsy pewter this may be of interest for you too
i personally got a lot of people complaining about that because it reseted the xp gain of starfruit
hmmm it doesn't seem to be causing the extra items to fall
I"m not too worried about XP either with mine
how can test it's working?
remove the condition for now
comment it
test again, and if it's not working, do a patch export of spacechase0.SpaceCore/CropExtensionData and post it
will I need to plant more seeds?
you dont have to the info is not stored in the seed
wicked
saves time
and do I need a SpaceCore condition on the patch or is a required: false one in the manifest ok?
are you aware that cjb cheats will autogrow crops
you dont need a dependency on spacecore
I was not aware of that
I should be working on Dale but this is more what my brain can deal with
okay its not working
Console commands can also grow crops by the specified number of days. debug growcrops 4 etc
okay they're in there
Is your phase right?
final phase is always 5, right?
no depends on your crop sheet\
SDV Deploy And Pack: Testing and Feedback
0 is seed, count up
yeh cos two seeds, I see that now
They're just variants


