#making-mods-general

1 messages Β· Page 406 of 1

vernal crest
#

Ooh okay I didn't realise about the draw layers

#

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.

brave fable
#

on the other hand you could publish it now for a mythical opportunity to confuse all the translators

vernal crest
#

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

lucid iron
#

Oh but they don't have to be Strings in particular

brave fable
#

oh they don't exist in the game. you have to make those 😌

vernal crest
#

-_-

lucid iron
#

I did the ol Load i18n thing

vernal crest
#

I know they don't have to be Strings, but is there any reason not to add them to Strings/Furniture?

lucid iron
#

Well, it's less patches to load to your own asset

brave fable
#

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

vernal crest
#

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?

uncut viper
lucid iron
#

I think it's just preference thing

#

This style means I don't have to write all the keys basically

brave fable
#

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

vernal crest
#

Unless I'm misunderstanding you blueberry I am already doing that

lucid iron
uncut viper
#

that locks it into the item forever i think doesnt it

vernal crest
#

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.

lucid iron
#

Ppl can target my asset too if they want

#

Just EditData mushymato.ModularFishTanks.i18n

vernal crest
#

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 }}",?

lucid mulch
lucid iron
#

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

vernal crest
#

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

uncut viper
#

theyd already have to figure it out by looking in your code and fnding the LocalizedText

vernal crest
#

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

uncut viper
#

they can see the asset, it'd be your i18n

brave fable
#

note: translators also do not read comments

vernal crest
#

It's going to be very unfamiliar to them though

#

blueberry, they're not a translator

#

This is not for translators

brave fable
#

then it's all the more important for me to mention that programmers absolutely do not read comments

vernal crest
#

They're also unlikely to be a programmer

#

Anyway

ornate locust
#

honestly, no users read anything

#

Make it how you want it and if people complain, point them at the thing and say "read"

vernal crest
#

(This is also not for users)

#

Thank y'all for the input SDVpuffersmile

#

I'm sticking with Strings for now

patent lanceBOT
calm nebula
#

Especially if they are //oh god no

hard fern
#

well, good news my mod i cranked out works. i only have a few npcs done lol

gaunt orbit
#

cue avril lavigne

vernal crest
#

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.

hard fern
#

is this yet another bench saga

vernal crest
#

Yes haha

lucid iron
#

the bench beckons

vernal crest
#

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

lucid iron
#

sometimes i wish there's a cp command to init a blank texture

#

but we would want blank json action first lol

vernal crest
#

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

lucid iron
#

the draw layer stuff has it's own depth adjust ways, SortTileOffset

#

put a positive SortTileOffset to make it go more back

vernal crest
#

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

lucid iron
#

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

vernal crest
#

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

lucid iron
#

how can i word it better bolbthinking

bold schooner
#

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

lucid iron
#
How much to adjust layer depth by, according to Y tile based rules. Positive value is draw under, negative draw over.
bold schooner
#

got it, so i contact bouncer now?

lucid iron
#

yea and then follow the instructions re adding self to wiki

bold schooner
#

thanks again chu!

#

or mushy

vernal crest
#

mushychu

#

chumato

#

Also chu you are enabling my perfectionism so much here it's terrible 😭 /lh

lucid iron
#

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.
uncut viper
vernal crest
#

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.

brave fable
#

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

lucid iron
#

it is smokes and mirrors

uncut viper
#

im with Aba on this one even though i know the reason

vernal crest
#

It does make more sense, but I don't know where I would learn that outside of being told just now

uncut viper
#

Map makers are less likely to know the Y positioning rules

brave fable
#

not everything that makes sense is necessarily intuitive

uncut viper
#

they are more likely to think in X/Y as in, yknow, map tiles

lucid iron
#

alas i dont really know how to explain it better blobcatgooglyblep

uncut viper
#

why not just use forward and back

vernal crest
#

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"

lucid iron
#

the value is actually correlated to tile position tho

uncut viper
#

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

lucid iron
#

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

vernal crest
#

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)

uncut viper
#

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

lucid iron
#
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

brave fable
#

if you publish it now i can send a PR later with typo fixes for github points

uncut viper
#

hence middle ground and not stuck to one extreme or the other!

vernal crest
#

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.

brave fable
#

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.

lucid iron
#

xmldocs is the friends we made along the way...

uncut viper
#

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

lucid iron
brave fable
#

the council has convened.

haughty charm
hard fern
#

what

lucid iron
#

this is an error furniture

#

it happened to have the right sprite index to hit this corner of cursors

vernal crest
#

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

brave fable
#

these hooligans from modded-farmers are making a mockery of my fine making-mods showcase

hard fern
#

no sofrry i didnt mean to post that

#

😭

#

i thought i had something else copied

gaunt orbit
#

!sam

ocean sailBOT
#
brave fable
#

youngsters today never ask for permission SDVchargeorge

tropic thorn
#

trying to understand TMX file, so confusing...SDVpufferdizzy

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

uncut viper
#

when was the last time you unpacked your files?

tropic thorn
#

Yesterday?

uncut viper
#

which unpacker did you use?

tropic thorn
uncut viper
#

!unpack

ocean sailBOT
#

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!

uncut viper
#

follow these instructions instead

tropic thorn
#

Wow amazing!

#

don't understand why but now everything makes senseSDVpuffersmug

uncut viper
#

best of luck with the map editing!

flint fulcrum
#

Could I pay someone to make my uncle into a quick mod? For his birthday and trying to make a special present

drowsy pewter
#

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

vital lotus
#

The quickset is prolly to make him into static map tile like Gil

#

What do u have in mind?

tender bloom
#

!commissions is the list of people who are open to being paid for things

ocean sailBOT
tropic thorn
#

I am actually making mods for some of my family members so I might have some templates that others could use (for free!)

hard fern
#

there's also an npc template on the modding wiki

tropic thorn
#

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.

drowsy pewter
#

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?

tropic thorn
#

vanilla sounds?

brave fable
#

may i suggest newRecipe for big paper and shwip for small paper

inner harbor
#

Is there a noise when we read a book?

brave fable
#

yep, there's a very glam book_read, but it's more the sound of the whole book being blown through

obtuse wigeon
#

(many of the sounds aren't named how you'd expect at all, but that's a vanilla thing)

drowsy pewter
inner harbor
#

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

limpid talon
#

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

fading walrus
limpid talon
#

heheheheh

fading walrus
#

-# *Phrases used are only indicative and may not be reflective of real life conditions. Terms and conditions apply.

inner harbor
#

Blue fairy roses!

#

(Joja flowers)

hallow prism
#

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?

brave fable
#

yes, it appears you can, with most vanilla behaviour simply checking against a value of "Town"

hallow prism
#

great! thanks

brave fable
#

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

hallow prism
#

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 πŸ™‚

inner harbor
#

oooh what does Betas do?

vital lotus
#

Could it be? 'RegionalFriendship <HomeRegion> <#Amount> [Set?]'

hallow prism
#

yes

#

rather than typing 15 npc names, it sounds like a convenient shortcut πŸ˜„

vital lotus
#

Most definitely πŸ˜†

inner harbor
#

Should I make blue sunflowers?

#

Also that's cool, I might try and use that

hallow prism
#

does someone has on hand an example of mod using spacecore for larger animations?

#

maybe a snippet of code?

vital lotus
#

Is the example not working?

vital lotus
drowsy pewter
#

[Content Patcher] The 'patch reloaf' command isn't valid.

drowsy pewter
hallow prism
hallow prism
calm nebula
#

Was it "atravita.CP.TestBoots" or "atravita.TestBoots.CP" or did I ever even put "Boots" in the name in the first place?

daring shale
#

Can anyone make this a standard mod? PLEASEE THIS IS MY FAVOURITE PORTRAIT BUT ITS OUTDATED

ocean sailBOT
daring shale
#

It’s an xnb mod but I’m trying to convert it to a normal one

safe kraken
#

There's some converters out there iirc

blissful panther
#

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

vernal crest
#

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

daring shale
#

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)

lucid iron
#

You should be aware that this is very old and so there's no winter portraits

daring shale
#

Does that mean it won't work in winter?

vernal crest
#

They'd convert back to their vanilla portraits for winter and also on Ginger Island

daring shale
#

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

lucid iron
#

Well you can overwrite the winter portrait assets

#

But at that point you gotta learn a little bit of content patcher

#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

brave fable
daring shale
#

I'm on android 😭😭😭

brave fable
#

it was..... half-baked...

drowsy pewter
lucid iron
hallow prism
#

i think you can see i dislike schedules when you open my character data and see 1 (one) schedule for a npc

daring shale
#

THERE IS NO WAY I FINALLY FOUND ANOTHER MOD AND ITS RAR

#

SERIOUSLY...

calm nebula
#

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"

ocean sailBOT
#

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.

daring shale
obtuse wigeon
#

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

lucid iron
#

I don't think it's merged, just a PR

obtuse wigeon
#

Ahh okay gotcha, I thought another update cycle happened recently but I may have just been confused

true coyote
#

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

lucid iron
#

It's hard cus some machines depend on output of other machine

true coyote
brave fable
#

well that's nothing an unholy amount of recursion can't fix

true coyote
#

my brain makes the ideas but is also incapable of following through with the ideas

lucid iron
#

A "gains from shipping price" aint that bad

#

Still C# tho

true coyote
#

(because i am too untrained in coding)

#

and have 0 experience in C#

brave fable
#

but shiloh. this is the training

true coyote
#

files away sadly

gentle rose
#

imo the actual difficulty is machines that have rng outputs

true coyote
#

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

brave fable
#

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

gentle rose
#

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

brave fable
#

the computer is unfortunately completely innocent

true coyote
#

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

gentle rose
#

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

true coyote
#

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

brave fable
#

they say the real test of whether you fully understand something is in how well you can explain it to someone else SDVdemetriums

true coyote
#

its like im speaking a foreign language or something omg this is why i dont raid anymore

twilit quest
gentle rose
#

yup!

#

tl;dr this is something called constrained optimisation and it's an entire field of computing

lucid iron
#

Maffs

true coyote
#

yep thats all the math stuff that im not good with

lucid iron
#

We gotta summon a mathperson for this

true coyote
#

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

brave fable
#

at this point you probably want to hire a) a programmer, b) a couple more programmers, and c) an accountant

gentle rose
true coyote
brave fable
#

maybe a few more programmers and accountants then

gentle rose
#

this would most likely require at least one linear programming textbook

true coyote
#

i just wanna make DPs so I can make money in my house, even if a little bit SDVpetcatsad

#

time to think of something easier

gentle rose
#

ngl I think aesthetic mods are more reliable DP earners

#

farm maps tend to go hard

true coyote
#

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

brave fable
#

tiled is fun & relaxing

#

people just overcomplicate and underplan

gentle rose
#

but it can be... with my super easy trick (doctors hate it!) where you use my tiled extension

humble timber
#

tiled is not too scary just start with editing an interior map that's not the farmhouse

twilit quest
brave fable
#

imo just start with painting silly faces on the maps with the stamp tool

humble timber
#

Lol that's a way

brave fable
#

i really oughta make a demetriums map one of these days

lucid iron
#

Does it just look like demetriums

true coyote
vernal crest
#

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)

gentle rose
#

(tiled extension tiled extension tiled extension--)

vernal crest
#

Make it something witchy, people lovely that. What witchy niches aren't covered yet?

drowsy pewter
#

i get enough money to not feel bad about buying coffee from cafes all the time

twilit quest
brave fable
#

but yeah it's a fool's errand to look at mod making in the lens of money making or popularity

true coyote
#

the hard part really is that i have aphantasia so being creative... is... very difficult

#

when I cant see what I want to create

brave fable
#

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

stark spindle
vernal crest
#

I have aphantasia too!

true coyote
#

and it feels kinda listless just randomly throwing darts and hoping something sticks

gentle rose
vernal crest
#

It doesn't stop me from drawing but it really impairs my mapmaking

brave fable
lucid iron
true coyote
#

thats the fun part, I dont know what Iwant

lucid iron
#

I don't think it is worth making mods for pursuit of bigger numbers DP or otherwise

vernal crest
true coyote
#

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

drowsy pewter
#

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

true coyote
#

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

vernal crest
twilit quest
#

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

brave fable
true coyote
#

ive thoguht of a recolor mod myself but so... so much work

vernal crest
true coyote
#

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)

drowsy pewter
#

You got me to update my mod, thats the important part

twilit quest
#

I love iridium recolors

true coyote
#

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

twilit quest
#

That's a great mod

brave fable
#

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

twilit quest
true coyote
#

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

twilit quest
#

It's their art, you MUST get permission and cannot make DP off their work unless they give you permission.

drowsy pewter
#

elle is around discord

true coyote
#

I feel like currently, all my brain power is just sucked up at the moment

true coyote
#

I only would try to earn DP on any of my 100% original things

twilit quest
#

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

true coyote
#

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

drowsy pewter
#

Yeah you have to have fun doing it

vernal crest
stark spindle
#

Fun is the main reason to make mods I would have thought

drowsy pewter
#

I've been modding for sdv for six years now, only broke above 5 dollars a month in the past couple years

vernal crest
#

Yup I'm here for the fun

twilit quest
#

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.

stark spindle
#

Having said that I am looking forward to maybe getting a free coffee from the DP one day πŸ™‚

true coyote
#

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

twilit quest
vernal crest
twilit quest
#

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.

hallow prism
#

there's so much outside of our control

#

like the timing of things

twilit quest
#

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.

drowsy pewter
#

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

hallow prism
#

or coding

humble timber
hallow prism
#

but then as said it may be better as a way to master the skill for a more reliable job

drowsy pewter
#

I'm happy to give you feedback on commission prices if you want

humble timber
#

Hmmm perhaps,,,
it's funny cuz I know how I wanna price live2d stuff but pixel art/sdv modding????? my brain breaks. like. wha

vernal crest
#

Or just be like me and become a popular artist's json person SDVkrobusnaughty

humble timber
#

lmao

twilit quest
stoic elbow
#

Artist 🀝json coder = sdv mod

vernal crest
drowsy pewter
#

i have to do both SDVpufferpensive i'm getting scammed

vernal crest
#

Hey 6480... /j

stoic elbow
#

I would say same but Idk if I’m doing either correctly so I might just be doing neither lmao

drowsy pewter
vernal crest
#

(I do all my own work for my own mods haha)

vernal crest
brave fable
#

surprisingly CP is actually short for Crime & Punishment

drowsy pewter
#

Oh wow

#

I just learned some deep lore

brave fable
#

or Cuisinez le Pain whenever "Action": "Loaf" is merged in

true coyote
twilit quest
#

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. -_-;

stark spindle
#

any hints for what it is?

vernal crest
stark spindle
#

A mod is a mod but a mystery mod could be anything ...

velvet narwhal
twilit quest
sharp crystal
#

Only people with "Mod Author" role have right to share theirs mods on the discord ?

hallow prism
#

no, but the showcase channel is special in the permissions it has

gentle rose
lucid iron
#

When you get lv25 you can apply for the role too

hallow prism
#

and thanks for the help with the dialogue feature, i now have several working cases thanks to you and Button

lucid mulch
drowsy pewter
#

funny

gray bear
#

ah yes, capital punishment, the worst crime

round timber
hard fern
#

SDVpuffersweats i had a dream about.... Draw layers and nexusmods

velvet narwhal
gentle rose
velvet narwhal
#

self care > all snob /lh

hallow prism
velvet narwhal
#

i'm good enough to break things that pertain to my special interest, like pipe order of operation breaking SDVpuffersmile

oblique meadow
#

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"
                },```
lucid iron
#

, means AND in gsq land

#

You need the ANY GSQ+ syntax for OR

oblique meadow
#
                    "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?

gray bear
#

this will happen if any of them are correct

oblique meadow
#

ok. That's what I wanted to be sure of. Will make my code cleaner

brittle pasture
oblique meadow
#

Corrected the example above. Like so?

brittle pasture
#

that’s the wrong way around

#

escaped quotes must be \" exactly

gray bear
#

or the game will never forgive you

oblique meadow
#

ohhhhhh. ok

brittle pasture
#

(if you’re using one of the recommended editors it should be screaming in your face)

gray bear
#

does the any also need a quote escape

oblique meadow
#

Im using notepad++

brittle pasture
#

(I think. I use vim btw)

gray bear
#

vscode very much screams

brittle pasture
#

now you’re missing one last unescaped " to close out the entire string

oblique meadow
#

Would that just be " ", (minus the space)

gray bear
#

tis angry

#

u just need a regular " before the ,

hard fern
#

"\"Here is escaped text\""

oblique meadow
#

Ok. I get it

#

Thanks all

gray bear
#

quote escapes are the natural predator of json files

oblique meadow
#

and Im hurting myself a slight bit trying to write the code but not being able to fully test it myself currently... ha

hard fern
#

for me it's forgetting a } and wondering why my i18n isn't working

gray bear
#

what do u use to edit?

oblique meadow
#

Notepad++

gray bear
#

meant to ask forsy. pretty sure that would complain about a missing bracket

oblique meadow
#

OH. Sorry

gray bear
#

nw

gray bear
#

!software

ocean sailBOT
hard fern
#

since it's in quotes

#

vsc just says "eh ok sure"

gray bear
#

nah vsc yells at me

hard fern
#

hm really?

gray bear
#

removes closing bracket

#

if it turns red, your code is dead

hard fern
#

thats not the bracket im talking about tho

gray bear
#

o

hard fern
#

i forget brackets in my {{i18n:blah}

#

at the end

gray bear
#

oooh

hard fern
#

and then it just dies without me realizing 😭

gray bear
#

if you type it without the i18n shit it does copy the close and open ones

hard fern
#

:D

gray bear
#

not within the " "

#

outside and copy it

hard fern
#

oh then yeah it does

gray bear
hard fern
#

it's just in " " that it explodes and dies

gray bear
#

yeah it just like forgets about all its helpful features inside quotes

elfin mist
#

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

latent mauve
#

Do you have a rejection line too?

elfin mist
#

yeah

urban patrol
#

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

latent mauve
#

Also check your console for an error when asking them to dance

elfin mist
urban patrol
#

i hope one day to be as helpful as nexus commenters. no there’s no image at the bottom why would there be

gray bear
#

one part

#

hey nic, may i offer a thing

latent mauve
solemn lagoon
#

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

urban patrol
#

oops sorry @

gray bear
#

how would u feel about joining a server that's a community of modders (there's also some mod users)

urban patrol
#

sure that sounds fun!

gray bear
#

can i dm u?

urban patrol
#

yep!

gray bear
elfin mist
gray bear
#

your second block looks like it's replacing the entire busstop

latent mauve
ocean sailBOT
#

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.

gray bear
#

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

devout otter
solemn lagoon
#

this is the whole thing, i used the full sized map for easier editing

gray bear
#

better to crop

#

it'll be easier if you just edit the area u want to edit

#

also, are those earthy recolor tiles? sweats

solemn lagoon
#

i did compare the tiledata boxes with the ones in the vanilla map to make sure that i didn't alter anything

gray bear
#

bus ticket machine looks to be hardcoded

devout otter
#

Still, try removing the second action and test if the ticket machine works then.

gray bear
#

just remove the second edit

solemn lagoon
#

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

devout otter
gray bear
obtuse wigeon
#

Oh gods of feature creep, stop making me add more features SDVpufferwaaah this vscode extension is just turning to a whole automatic mod creator ughhhh

gray bear
#

do moar

obtuse wigeon
#

always always more!

solemn lagoon
#

it works! thank you all so much!

uncut viper
gray bear
#

wouldn't that mess up if someone uses a diff recolor?

uncut viper
#

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

gray bear
#

ah right they are named the same

uncut viper
#

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

gray bear
#

true thonk

hard fern
#

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

late lark
#

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?

brittle pasture
#

!decompile

ocean sailBOT
brittle pasture
#

you’d need to access game code for this
to get the farmer and their data Game1.player is the starting point

late lark
#

That looks fun... I'll bookmark it for the time being. Thank you.

limpid talon
#

does anyone know how to stop every single NPC in the game from walking into my custom map and freezing there?

hard fern
#

πŸ€” how are they even getting there?

limpid talon
#

I think it's messing with their routing because at some point in most NPCs schedules they just decide to walk over here

limpid talon
#

it even happens to my custom NPCs

urban patrol
#

have you made a circular path with your maps?

hard fern
#

where is your map, exactly

limpid talon
#

worth mentioning, most NPCs are freezing at every warp entrance

hard fern
#

like relative to the rest of the world

limpid talon
hard fern
#

...huh

limpid talon
limpid talon
urban patrol
#

weirdddd

limpid talon
#

I wouldn't even know where to start

hard fern
#

as far as i know npcs don't even go there

limpid talon
#

my custom NPCs are also freezing at the spawnpoints of warps for custom maps

urban patrol
#

i have a stupid suggestion: does it still happen if you install spacecore

limpid talon
#

so a broader issue is going on

limpid talon
urban patrol
#

it improves NPC pathing (idk what’s even up with your issue or if it will help, but worth a try)

limpid talon
#

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

brittle ledge
#

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

gray bear
#

npcs weird

brittle ledge
#

(it's because Backwoods has two entrances and the NPCs can't get from one to the other)

gray bear
#

(weirdddd)

ornate locust
#

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"

gray bear
#

banned

ornate locust
#

Banned, PC only path

gentle rose
gentle rose
#

(and just be stuck in the backwoods the entire day)

brittle ledge
#

(but also yes, I have left-right confusion SBVLmaoDog )

uncut viper
#

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

gray bear
#

left and right are the same direction wdym /j

uncut viper
#

(thats not me being pedantic, thats genuinely what i assumed they meant)

#

this space

hallow prism
#

well if they take the wrong tunnel that would obviously not work so it needs to be the right tunnel /j

calm nebula
#

(If spacecore fixed it it means they had a loop. Possibly accidentally)

#

Ie, accidentally leaving a warp to hospital in your map, Tia

brittle ledge
#

Now who would do that, Atra

brittle ledge
gentle rose
#

I would love to be pedantic right now for the joke but I have completely lost track of the conversation

hallow prism
#

it's ok, pam too lost track here

gentle rose
#

I'm gonna go read the DialogueBox decompile instead

gentle rose
#

not really, no SDVpuffersquee

limpid talon
#

alright well spacecore fixed the city map but all my other NPCs are walking through walls in other places now 😭

#

will do more investigation

autumn tide
#

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

hallow prism
#

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)

autumn tide
#

gotchaa okay, ty!

hallow prism
#

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

obtuse wigeon
#

Are there any arguments for the shortcut of the SMAPI exe other than --mods-path that pertain to testing none C# mods?

gray bear
#

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

hallow prism
#

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

gray bear
#

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

hallow prism
#

are you on first year?

gray bear
#

2nd

hallow prism
#

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...?"

gray bear
#

oh, that's, interesting. thank you!

hallow prism
#

sure!

#

let me know if it works properly

gray bear
#

it does, thank you so much! i did however, set the wrong portrait, easily fixed
πŸ’œ

hallow prism
#

"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

gray bear
#

yeah, it's very confusing! i should've checked the wiki for it, these things are known to happen in stardew

hallow prism
#

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

still shadow
#

Hi

#

I came again

gray bear
#

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?

hallow prism
#

and * for any

#

nothing default to year 1

uncut viper
#

do you mean for the "first/later year" thing?

pine elbow
#

lambdas are confusing

gray bear
hallow prism
#

like fall_17 : year 1
fall_17_* will be any year

uncut viper
#

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

hallow prism
#

oh yeah sorry i misread what bea said in even/uneven

gray bear
#

ah, i see. thank you both!

pine elbow
#

whats a lambda

hallow prism
#

a normal person /hj

pine elbow
#

i mean in coding

gray bear
#

i don't know anything further

still shadow
#

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

gray bear
#

huh, doesn't have an i18n either

hard fern
#

youd have to replace the dialogue yourself then

still shadow
#

Got it. There's a Turkish patch for this, but not an expanded one

still shadow
gray bear
#

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

still shadow
hard fern
#

good luck

gray bear
#

have fun! i am, going to bed

still shadow
still shadow
limpid talon
#

for those interested, my NPCs have stopped walking through walls simply because they felt like it

#

I did literally nothing to make this happen

golden spire
#

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:

teal crest
#

Chat GPT says that the content patcher supports Meadowlands for Farmtype, but it doesn't respond. Is it lying?

lucid iron
iron ridge
#

!chatgptcode

ocean sailBOT
#

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.

brittle pasture
lucid iron
#

i probably do have answers but this isn't a helpful way to ask per say

brittle pasture
#

(the functionality to add a prebuilt building like the Coop requires another framework like SpaceCore or Building Included)

lucid mulch
#

meadowlands isn't a farmtype its for most intents and purposes an 'additional farm' like what Selph's link would describe

clever turret
#

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

brittle pasture
#

you can use content patcher's target field, find the entry for leaves to tea in OutputRules and null it out

lucid iron
#

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

clever turret
#

Which entry exactly should I null out? I tried RequiredItemId but that just made everything make tea

lucid iron
#

you need to toss the entire rule entry

#

or perhaps change Condition to FALSE

clever turret
teal crest
brittle pasture
#

are you adding an event on the farm that happens anywhere other than the front door

brave fable
# pine elbow whats a lambda

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

teal crest
lucid iron
#

you can check the farm type with that one cp token

brittle pasture
#

and you're hardcoding the x y coords for every farm mod? that seems like a recipe for pain considering modded farms

lucid iron
#

but uh, you are very doomed on most custom farms

#

FarmType

teal crest
brittle pasture
#

in that case meadowland farms' id is MeadowlandsFarm

clever turret
brittle pasture
#

yes, null it out

#
"Entries": {
  "whatever the ID for the entry in OutputRules is" : null
}
#

with TargetField drilling into OutputRules

uncut viper
#

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

dusky sail
#

bug report on my mod
the bug isn't even from my mod
i wouldn't even call it a bug
agony

twilit quest
#

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.

uncut viper
#

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

twilit quest
#

Ah darn. Okay, time to go unpack the music

#

Thank you, @uncut viper. I always appreciate your help.

golden spire
#

you'd have to extract the game audio and include the file if you wanted to alter something with it.

brittle pasture
#

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)

lucid mulch
#

very tempted to say challenge accepted, but I don't actually care enough to actually do it

clever turret
brave fable
#

when you squeeze the words 'audio bank' into the phrase 'unique challenge' it becomes a lot less attractive all of a sudden

golden spire
lucid mulch
#

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

golden spire
#

if someone wants to use that and turn it into a Windows friendly version, be my guest

twilit quest
golden spire
#

use unxwb to extract the audio

twilit quest
brittle pasture
twilit quest
golden spire
#

are you on Windows?

twilit quest
teal crest
golden spire
#

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

violet valley
#

Any way to add custom sounds? (with either Content Patcher or C#, either is fine)

urban patrol
#

yep [[Modding:Audio]]

violet valley
#

Thx

unreal robin
#

Hello! Does anyone know the location of the Shearwater Bridge tiled in Sve so I can edit it in tiled or the xnb file?

vernal crest
tired matrix
#

can i make a custom npc dance in the flower dance? I cant find any guide on this

vernal crest
tiny zealot
#

if they CanBeRomanced that should also work, even without FlowerDanceCanDance

tired matrix
vernal crest
#

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

urban patrol
#

you do need to make sure you include them in both set up and main event

tired matrix
#

He’s in both so it should work then right

hard fern
#

You can't really dance with someone if they don't show up to the festival, now can you, haha

tired matrix
#

Was just worried he would overlap a random npc

urban patrol
#

if you only add them to set up, you dance with an invisible spot

urban patrol
hard fern
tired matrix
#

Will save this

vernal crest
urban patrol
#

file under "things i've learned the hard way" lol

tiny zealot
tired matrix
#

My npc is almost finished atp but im procrastinating making the heart events SDVpufferwaaah

hard fern
#

Real

urban patrol
#

i feel that! they're a lot of work but really rewarding to watch the final version fall into place

devout otter
gaunt orbit
#

Continuing work on my sourcegen thing, now working on gmcm boilerplate generation

desert tinsel
#

!help

ocean sailBOT
#
please get me off discord
desert tinsel
#

!help.

#

!help

ocean sailBOT
#
please get me off discord
brave fable
#

hi do you need help

desert tinsel
#

!json

ocean sailBOT
#

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.

desert tinsel
#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

brittle pasture
#

feel free to ask here if you have questions

tired matrix
drowsy pewter
#

a little visitor SDVpufferbook

twilit quest
inland rain
#

is there any easy way to get an Animated Tile from a tilesheet using C#?

gaunt orbit
drowsy pewter
#

carmen sandiego, she was added as an easter egg in 1.6.9 /j

gaunt orbit
gaunt orbit
inland rain
#

that's a bummer

gaunt orbit
#

It's still worth looking into, but that's my best guess

inland rain
#

yeah I see it's not in TileSheet

gaunt orbit
#

Turns out tIDE knowledge is not totally useless! It informs you about the terrible layout of xTile

brave fable
#

clearly you need to make a lookup of all tile instances by gid to clone SDVdemetriums

#

why on earth are you using tIDE

hard fern
gaunt orbit
brave fable
#

blessed are those who no longer need to use tide

lucid mulch
#

(and particularly when my performance mod is running where I intercept tmx loads and replace them with tbin loads as they are more performant)

inland rain
#

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

oblique meadow
#

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?

vernal crest
#

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.

oblique meadow
#

That’s the weird thing. I DO use it. Things just got wonky suddenly so I’m defaulting to I’m an idiot

vernal crest
#

I've never heard of a .tms file

oblique meadow
#

Yeah. It’s dumb. I dunno. Its a tomorrow husky problem

vernal crest
#

Have you checked the documentation?

oblique meadow
#

Yes.

#

And googled it

#

And called it names

vernal crest
#

Can you show a screenshot of what it's doing?

oblique meadow
#

I got frustrated and shut down already. I just thought maybe you guys had heard of something. I can screen grab in the AM

drowsy pewter
#

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

oblique meadow
#

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

drowsy pewter
#

Cant say anything else then

oblique meadow
#

Sorry if I came across snippy. I’m frustrated with the situation and it’s not coming across well

vernal crest
#

At what stage is it doing this? Is it after you press ok on this screen?

oblique meadow
#

Yeah. I hit ok and it makes me do a Save As to create a TMS

#

Which I’ve never had to do before

vernal crest
#

Have you definitely got embed in map ticked?

oblique meadow
#

Yup

vernal crest
#

And Type as "Based on Tileset image"?

hard fern
#

(what is a tms)

vernal crest
#

6480 said it's the filetype for tile spritesheets. I don't know what those are.

oblique meadow
#

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

drowsy pewter
#

I also think thats wise

vital lotus
#

U sounds v frustrated

oblique meadow
#

Sorry again for being snippy 6480

#

Not intentional

drowsy pewter
#

Its fine I just cant help

dawn cedar
urban patrol
#

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

inner harbor
#

Is there any way aside from MYC to make a crop deliver a flower and seeds? Like sunflower does in vanilla.

drowsy pewter
#

spacecore

#

cornucopia has examples

inner harbor
#

Awesome!

drowsy pewter
#

np, let me know if you need help, cus it can be confusing

inner harbor
#

I induibatably will

gray bear
#

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?

iron ridge
#

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

urban patrol
#

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

brave fable
#

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

urban patrol
#

ohhhh yeah i saw that pop up when i clicked and had no idea what it meant

brave fable
#

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?

urban patrol
#

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

brave fable
#

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

urban patrol
#

ohh i do have the game decompiled, thank you for teaching me how/why to actually search it

brave fable
#

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

urban patrol
#

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?

brave fable
#

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

urban patrol
#

that makes perfect sense

brave fable
#

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

gray bear
#

wiki says this command is to add a new line and the player has to click. does it just not work in i18n?

lucid mulch
#

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.

gray bear
#

do, i like, need a hashtag

brave fable
#

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

urban patrol
#

would my method that returns the bool be a helper?

urban patrol
gray bear
#

wahhhh

#

but ty

brave fable
#

it doesn't repeat! Entry is called only once, as the seed to your tree of binary operations

urban patrol
#

inch resting

brave fable
#

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

urban patrol
#

so then technically is my Entry method running until it returns? or until the game is quit? something else?

lucid mulch
#

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

urban patrol
#

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

blissful panther
#

Nope, no waiting there!

lucid mulch
urban patrol
#

oh hmm

brave fable
#

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`
lucid mulch
#

Stardew for the most part is entirely single threadded and only one thing can be happening at a time,

brave fable
#

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

urban patrol
#

OH it's just that i didn't make it a loop?

brave fable
#

loops are tools, but we aren't using them here.

lucid mulch
#

if you made it a loop it wouldn't ever change because you aren't letting anyone elses code run to change the state

brave fable
#

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");
}
}

urban patrol
#

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

brave fable
#

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

lucid mulch
#

and the next persons DayEnding event handler wont start running until yours is finished

urban patrol
#

and this is why people use harmony to control when they do stuff? because otherwise it would just be in order?

lucid mulch
#

and if you take too long in a SMAPI event handler, profiler will snitch on you

brave fable
#

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.

lucid mulch
#

Harmony has at a high level two main flavors:

  1. A convenient way to 'time' when your logic is going to run in the control flow
  2. Wanting to change/replace the behaviour of the method in question
brave fable
#

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

urban patrol
#

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

brave fable
#

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

lucid mulch
#

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

urban patrol
#

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

brave fable
#

you won't find SMAPI's events in the decompile, but for your convenience they're all available through IModHelper helper

blissful panther
#

And in the case of your IDE, it'll essentially just tell you when you start typing.

urban patrol
#

there must be a way in VS to see those, but idk how--

#

oh like the autofill?

brave fable
#

yep SDVpufferthumbsup it's called Intellisense(tm)

blissful panther
#

Say you type helper.Events....

#

Entirely accidentally chosen group of SMAPI events, but coincidentally the ones you might want to be touching. SDVkrobusgiggle

obtuse wigeon
#

Intellisense, my beloved, the best tool in my arsenal, probably best tool i'll ever have

urban patrol
#

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

blissful panther
#

(And don't worry, yours probably won't be light mode. /j)

lucid mulch
#

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

brave fable
urban patrol
#

it would be when ModEntryOutput == true, right?

#

which btw i'm going to rename to IsWeddingTomorrow

#

i accepted its suggestion to change it

brave fable
#

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

urban patrol
#

oh yeah i forgot how methods are called

#

too used to CP logic lol

brave fable
#

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

urban patrol
#

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

brave fable
#

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 β˜€οΈ

urban patrol
#

file>start window asks if i want to save...

brave fable
#

(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 😌 )

urban patrol
#

that's my circus and my monkeys, don't worry lol

brave fable
urban patrol
#

wow i literally just learned how to open a new window like that in windows 11, thank you

blissful panther
urban patrol
#

ohoho!

#

i may do that, but not at 4am for me lol

#

speaking of, oops -_-

brave fable
#

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");
}
}

obtuse wigeon
#

(What is the github decomp repo? Is it the same as the decomp on your local system when using ILSpy?)

blissful panther
#

It's a decompile with fixes so you can build and run it, along with the unpacked content.

brave fable
#

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

urban patrol
obtuse wigeon
#

Ahhh okay gotcha, so a more 'correct' decompile without the mistakes that can occur with ILSpy?

brave fable
#

actually let me check whether the npc is considered your spouse while they're engaged

#

they are SDVpufferthumbsup

blissful panther
obtuse wigeon
#

I didn't think of changes between versions, good to know thank you

brave fable
vocal mauve
#

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

urban patrol
#

are you looking to create a custom NPC?

brave fable
#

i think a new boy takes about 9 months usually

#

i'm not even going to get into how to start one 😌

drowsy pewter
#

unironically 9 months is a good ballpark

vocal mauve
#

wow

drowsy pewter
#

NPC mods are not simple so it should be something that you really like and feel okay taking a few months for at least

urban patrol
vocal mauve
urban patrol
# vocal mauve yesss

!npc the others are right, it takes a lot of work but we’re here to help if needed

ocean sailBOT
#
Creating a Custom NPC

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:

vocal mauve
#

love u

#

❀️

brave fable
#

a very good start to that boy

brave fable
urban patrol
#

definitely a good warning to have, i wasn’t sure if it was going to end up being the clippy of coding LMAO

brave fable
#

copilot is the clippy of coding. intellisense(tm) is the jarvis of coding, to use a reference you youngsters will get

crude plank
#

do you have a reference for the un-young too

brave fable
#

uhhh probably HAL

urban patrol
#

jeeves maybe

#

oh hal much better

blissful panther
urban patrol
#

i sure would!!

hard fern
#

who is jarbis

brave fable
#

intellicode's sole purpose is to shit me off by moving code everywhere at lightspeed and it must be ground into dust

gray bear
#

iron man sidekick

blissful panther
#

(I'm also learning that Google's snippet lied to me, and there aren't instructions to disable IntelliCode on that page.)

crude plank
#

why is it doing that so often

brave fable
#

naturally, the ai has learned self-preservation

#

maybe i was wrong. maybe intellicode is HAL

gray bear
#

when do google snippets tell the truth?

blissful panther
#

A teeny tiny baby HAL that runs on your local computer.

urban patrol
#

i’m sorry dave. i can’t disable that.

hard fern
#

google is tired and confused i see

desert tinsel
velvet narwhal
#

swapped to duckduckgo after accidentally clicking on google's "ai mode" one too many times and got pissed off kyuuchan_nod2

inner harbor
#

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)

gentle rose
#

otherwise they just do a bad job of suggesting strings

hallow prism
inner harbor
#

XP field?

#

I just copied from Cornucopia

hallow prism
#

                "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

drowsy pewter
#

i see

#

yeah i dont pay attention to xp

inner harbor
#

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?

hallow prism
#

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

inner harbor
#

will I need to plant more seeds?

drowsy pewter
#

you dont have to the info is not stored in the seed

inner harbor
#

wicked

#

saves time

#

and do I need a SpaceCore condition on the patch or is a required: false one in the manifest ok?

drowsy pewter
#

are you aware that cjb cheats will autogrow crops

#

you dont need a dependency on spacecore

inner harbor
#

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

vernal crest
#

Console commands can also grow crops by the specified number of days. debug growcrops 4 etc

inner harbor
#

okay they're in there

vernal crest
#

Is your phase right?

inner harbor
#

final phase is always 5, right?

drowsy pewter
#

no depends on your crop sheet\

obtuse wigeon
#

SDV Deploy And Pack: Testing and Feedback

drowsy pewter
#

0 is seed, count up

inner harbor
#

yes and it should be to the one with the flower, yes? That is 5.

vernal crest
#

No that's four.

#

The first two are the same phase

inner harbor
#

yeh cos two seeds, I see that now

vernal crest
#

They're just variants