#making-mods-general
1 messages · Page 222 of 1
Good
should i be worried that the object itself is not working in the first place?
Assuming your stuff is in the right location as your screenshot shows, I can almost guarantee this would work:
{
"Format": "2.5.0",
"Changes": [
{
"LogName": "Fish as items",
"Action": "EditData",
"Target": "Data/Objects",
"Entries": {
"{{ModID}}.Goldfish":
{
"Name": "Goldfish",
"DisplayName": "Goldfish",
"Description": "A common household pet.",
"Edibility": "10",
"Type": "Fish",
"Category": -4,
"Price": "200",
"Texture": "{{InternalAssetKey: assets/Goldfish.png}}",
"SpriteIndex": 0,
"ContextTags": [
"color_orange",
"fish_talk_bass",
"fish_has_roe",
"fish_pond_ignore"
]
}
}
}
]
}
Like that should spawn an object with the right texture
ok i'll try it with this
apparently something i am doing with this map is bugging out the greenhouse entry path
I don't understand what "there's no error but there's no sprite" means. How can there be no error icon instead of a sprite yet not have a sprite?
It might help if you enable extensions. I'm sure you're working with json and png, but having those enabled in Windows Explorer ensure you never accidentally save as something else
A sprite can be invisible
i enabled it thanks to everyones' suggestion
How could the sprite be invisible?
The Error Item is only a result if the item was spawned correctly and then the data for it is deleted from Data/Objects
You don't get an error item for a missing sprite. i.e. texture
this is what it looks like same in inventory
I think it looks great
also unfortunately changing Texture's line didn't work
it might be something with my computer? could permissions be affecting something?
Oh really? Every time someone has shown their sprite not working before it's been an error item, in my memory
Is it a wrong sprite index
No, I checked the sprite index
Hm
If it's a 16x16 picture and SpriteIndex is 0, then that shouldn't be the issue
Can you drag the Goldfish image into here?
Can I use Stardrop to install collections?
No pun intended
That is 64x64
this is 64x64
mfw
You might want to make a unique sprite for testing just for fun, like a red square or a blue circle or something
Up to you, but practicing the creation workflow might be helpful
That makes sense, here's the part it was displaying
lol
So yeah, all transparent
(Presuming you eventually want to go from pixel art software to mod stuff etc etc)
Congratulations, you've been inducted into modding. I'm sure we all have spent too much time on something that ended up being a silly mistake at one point or another.
Stardrop doesn't support collections at the moment, that's a Vortex-only feature.
Gotcha, thanks! Wondering how to easily transplant my collections from Vortex to Stardrop, its reading the entirety of my mods folder and the symlinks for each collection/profile so in stardrop I have 400+ mods instead of a collection with 130, another with 300~ etc
do you have a lot of experience drawing large sprites in the sdv theme? if not, why would it ever be quick or easy haha
ok thank you you and chu for helping me, i've got the formulas i want and i'm EXCITED NOW since i got the awful part out of the way
took me forever even to be a little satisfied with my take on the art
go easy on yourself if it's your first time
And recolouring is tedious and takes a long time
yay feesh
peesh!!!!
it still wont go into a fish tank and there's no minigame while catching it :(
for tank u need them aquarium sprites
if anyone is still willing to help me with that i'd greatly appreciate it
i'm also legally required to ask whether you're recolouring a sprite pixel-by-pixel @dusk mulch
Are your aquarium sprites 24x24px?
I'm still not confident in pixelart larger than like 32x32
yes
And can you share your updated json so we can go on that instead of the older one?
sure
the guide said to include the base sprite too but idk if that's outdated information
it's not that it doesn't appear in the fish tank it's more that it just will not go inside it
IDK my fish was just a recoloured carp lol
like i cannot put it into the tank
really my best advice for bigger sprites is to focus most on silhouettes and shapes and mentally blank out all the details until the very end. also disable the pixel grid in whatever art program you use, actively ruins the process
really just disable the pixel grid no matter what
Lol I always start with the grid
Otherwise I cannot stay within the space
what's wrong with the grid?
16x16 or 24x24 etc is fine, just not 1x1
To be fair, more specifically the only things i've tried that are over 32x32 are buildings and trees.
Oh yeah I would never have 1x1, mine is 16x16
photoshop defaults to a 1x1 pixel grid if you zoom in enough. properly nasty
best tip i've ever learned for pixel art is to just scribble on different layers to get a feel for what you're drawing
you can clean it up very easily just understand your outline and the general shapes you need to fill
i never start with an outline, always a thick brush blob
this also works!
blob it out, cut it down, then refine the outline based on the shape you're left with
i think it's more a taste thing or dependent on what you're drawing
more sculpting than drawing i think gives good results
i always blob for irregular shapes
Ok so for your aquarium entry, try adding a forward slash at the end so it's like "0/fish/////Mods\\{{ModID}}\\AquariumFish/". For the data/fish entry, add /true at the end. You're missing the final fields for both entries and they may not be optional so that might be the problem.
New Farm map.
https://www.nexusmods.com/stardewvalley/mods/31803
One thing you can do (and you don't need to keep it this way it just helps keep things simple for now) is change your AquariumFish patch to this:
"{{ModId}}_Goldfish": "0/fish/////{{InternalAssetKey:assets/AquariumFish.png}}"
I never blob, it's never been helpful for me
i like blobbing for shape
Took me longer than I expected to modify the 4 Seasons greenhouse into a new map.
and then i shave off as i need
god i thought making a custom npc would be a walk in the park, I was so wrong
then i outline
custom npcs are probably one of the hardest things to do in terms of level of tedium
like yeah, it's mostly all CP, but you need to harness all of the skillsets to create one
There is a reason i told you earlier that they are one of the most difficult
You can definitely omit most of the fields, because this is all that the vanilla fish care about. Everything else is defaulted:
{
"128": "0/float",
"129": "1/fish",
"130": "2/fish",
"131": "3/fish",
"132": "4/fish",
"136": "5/fish",
"137": "6/fish",
"138": "7/fish",
"139": "8/fish",
"140": "9/fish",
The only thing extra that's needed for modded is the texture
NPC are alot of work. I started to make one for a mod, then gave up and just made them part of the map.
Art isnt too hard for me anymore
Events, dialogue, knowledge of festivals to add npcs to them.
Lol I almost did the same
festivals i just copy what someone else does and change the positions, too lazy for typing that out
Hold up I just realised the key is still wrong
silhouetting is good since even if you're mainly chasing an outline, it's far faster to end up with a consistent and natural outline by carving a blob than it would be to manually draw and fixup one long line
plus theres like One way you can syntax it and if someone else already did it... yoink
oh yeah. events. haha. forgor about that.
Evil.
you never did mention whether you're recolouring SafariGuy sprite pixel-by-pixel or not 
Your keys are wrong! They should not have Mods/ in them. Both data/fish and data/aquariumfish entry keys should just be "{{ModID}}.Goldfish"
In fact, this is all the game cares about when it comes to inserting fish:
return this.GetAquariumData().ContainsKey(item.ItemId);
Meaning the key exists in AquariumFish and that it exactly matches the key in Data/Object
I did not need them to move (or even talk) really as they where just a shop keeper. I wanted them to feel real so I was trying to make them an NPC, but started the process and gave up with how much more work it added.
the first event i did had seven forks in it. i started off in hell but now everything else is shrimple in comparison!
shoot
Animate them to blink. Bam, alive
Yeah I forgot how minimal the vanilla ones were but I couldn't see any obvious problems. Because I was overlooking the obvious problem with the keys whoops lol
i need to learn more about this syntax lol
you will as you mod more
How important is it to encourage fletch to change from {{ModID}}. to {{ModID}}_?
LA needs the _ to work
i mean, uniqueIDs have . in them already, so its not critical
fairly important, since LookupAnything uses the _ delimiter
but it is helpful to encourage
Ooh LA needs underscore? Yes, change it immediately lol
me looking at my old content mods that use dots, mourning the fact it's too late to change
its never too late
at least in this case, the Data/AquariumFish entry needs to match the Data/Objects entry
Same actually, I just used that little squirrel stone statue sprite for a shop keeper, I didnt know how to make sprites back then.
(also just ftr in case it wasnt clear LA doesnt need it, but it does if it wants to identify what mod its from)
Looks like you are never getting a reply from Person, bluebs 
It was clear to me since I highly value that aspect of LA and was therefore immediately what I thought of, but worth clarifying for others xD
I am, just recoloring though
Pixel by pixel?
Not using the paint bucket/fill tool?
Not using the magic wand tool?
on it lol
Oh no I meant I learnt to use the bucket tool after the second one
so you did the first one,,, how
Pixel by pixel, I had to get the colors just how I wanted them
also the fish works! i'll have fun spamming a bunch of random fishies into the game
oh god
It was torture
well you got your answer blue
yeah you willingly inflicted that on yourself dawg 😭
i cannot even fathom doing that. i would've been five pixels in and gone "there has to be an easier way"
but you just.... did all of that?
Nice.
sometimes you gotta learn how not to do it in order to learn how to do it
Are you giving it fish pond data? or just not letting it go in ponds.
Their process sure ain't mine but that is okay
i just disabled fish ponds for now
I'm writing a C# mod and what I want to create a ball, which bounces for a bit then zips to another position and stays there until something happens. Is TemporaryAnimatedSprite the way to go with this? Anybody know mods that do something similar that I can crib from?
next issue: i need to make the tiered seeds result in... that crop tier, or above. so silver seeds will grant silver crops (at the lowest), and higher.
THAT is a c# patch now, right?
Yes
thank you, had to make sure
yes, and a particularly fun™️ one to make
enjoy
dont lie to me 😔
just wanted to thank everyone again for helping me make my first mod even with all the troubleshooting you're all awesome!
if i just make it like a fake fertilizer, i dont think it will be too bad
i don't believe that's possible with just TAS unless you're somehow also controlling the zipping elsewhere
i'll let you get back to your advanced modding now
if you want a more complex controlled clientside sprite i often just use Critter as a base
can you just copy the dustsprite class and make the ball a monster
critters won't be synchronised between players, though
I think what I suggested earlier is the dead simplest way you could do it, but not as flexible as you may be looking for
You can override HoeDirt.GetFertilizerQualityBoostLevel to return 1 if the seed was Silver, 2 if the seed was Gold, or 3 if the seed was Iridium which would make the seeds functionally behave like Normal, Quality, and Deluxe Fertilizer.
I think what I'd do with the TAS would be to create it (somehow in such a way that it repeats its animation rather than deleting on complete), then do my own translation during an 'update()' call (unless there's some easier way). I'm pretty sure the TAS will be broadcast multiplayer (at least if you do the right thing with Game1.Multiplayer.broadcastSprites.
how flexible was i looking for. i repressed the previous hours of this convo because i fried my processor chip
i have 3complicated5me example
movement
https://github.com/Mushymato/TrinketTinker/blob/main/TrinketTinker/Companions/Motions/LerpMotion.cs
bouncing
https://github.com/Mushymato/TrinketTinker/blob/main/TrinketTinker/Companions/Motions/BounceMotion.cs
Yeah, if you want to make it a guaranteed thing, it might be more like a transpiler patch on harvest
it would be a simple transpiler if you did it that way
nod nod
For the NPC portraits do they go like a sprite index would? Top left is $1, top right is $2, ect?
i am shlooking at it now
sprite indices start at 0
Oh, right
$0 or no portrait command is neutral portrait, then progresses like $1 and whatever
like button said
Alright, ty!
@rough lintel I just thought of a different, maybe even easier way. You can postfix GetData() because of this:
cropQuality = MathHelper.Clamp(cropQuality, data?.HarvestMinQuality ?? 0, data?.HarvestMaxQuality ?? cropQuality);
If I'm reading that correctly, then you can adjust the Min/Max quality to be exactly what you want it to be, and the clamped value will be exactly that.
So cropQuality = (a number between 4 and 4) would guarantee you get iridium by just setting data.HarvestMinQuality and data.HarvestMaxQuality both to 4.
@weak pulsar Pinging to let you know that all that documentation stuff is now usable 🙂 It took a while since I was limit testing my current optimization capabilities
[Sorry chat for the big(ger) message]
TLDR of main feature changes:
You can release creatures wherever now so that they act like they would in the insectarium
Creatures can optionally have a soft "following AI"
Creatures can have specified health and/or damage and can be specified to be only caught once "defeated"
Creatures have optional DRUL idle animations
Creatures can play sound effects when you're nearby
4 GSQs, 2 Actions. Fixes to how the GSQs, Triggers and Actions interacted to make them work correctly.
i am now pleased as cheese, thank you matt
to make this mod viable, though: i'll have to nerf the impact farming level has on harvesting, which feels lowkey bad
or ... what would i even do.
unless i do it so regular seeds can only grow up to silver at highest, silver can grow gold at highest, and gold can grow iridium at highest
which locks qualities behind seed tier
Farming level is not suppose to effect harvesting. That field is not used. It I broken if you set it to anything above 0.
crop quality is affected by farming level though
it says here
unless thats just not right anymore?
farming level does affect crop quality yes
Quality yes, I thought you meant the field in the crop data. It needs to be 0. One sec I will get the name of entry I am thinking of
This "HarvestMaxIncreasePerFarmingLevel": 0.0,
It needs to be 0 or you get a ridiculous amount of crops
you might be thinking of ExtraHarvestChance, which rolls repeatedly until it fails
I just know i have downloaded multiple mods that had it set above 0, and it make it so you harvest a ton of crop with each harvest.
you have because it's listed in the common bug solutions channel as a Json assets thing
it is broken. I have fixed my copies and report it to the authors
not so much anymore. but before
and they're CP crop mods?
yes. I don't have any JA crop mods anymore. I phased them out. again, I have not seen if recently with any mod I downloaded.
well
the reasons JA had the issue is because it used to only allow whole numbers in the field (and the field was broken before 1.6 so nobody noticed). Actually the intended behavior is that you set a decimal like 0.1 per level
a CP mod can still have the same issue if they use whole numbers
its not that a non zero number causes the issue. Its just that the number is too big for what the field does
does anyone know if there is any NPCs with pathing in this section of the dock? I am not really sure how to check all the pathing
add a small vending machine that is 2 tiles tall and one tile wide
i als feel like willy checks that bucket
Dont want npcs to walk through it
He does but I think he is infront when he does that
I was thinking closer to the back since the player can already walk back there
anyone have luck using multiple recolors? mostly asking since for vanilla i'd like to use stardew foliage redone unofficial 1.6 update and for the mods, east scarp and luminesteria, i'd like to use vpr
replace the bucket?
Honestly thats a good idea
ig that would cause potential lore problems though 
Oh true
was told to do onlocationchange patches but idk how to
my next npc mod bucket admirer admirers the bucket on the docks every day
Now I have to make my own custom portrait, lets see how I do...
not possible without a bunch of fuckery since each mod will be fighting to override tilesets
son of a
Also I just realized, why does safari guy have 2 sets of eyebrows?
because that lower set is his eyelid, not his eyebrow
oh
if vanilla's dirt didn't hurt my eyes i'd be cool ;-; but noooooooooooooooo that'd be too simple for my brain
Or he could have some killer thick lashes 
That is actually good to know
no prob
Make sure that whatever you do doesn't affect the map during festivals (I can't remember if the night market uses a separate map or not)
Yes! I will double check the maps before I do anything
ok thats it im making a mod list
It should be possible to make a mod for Love of Cooking that makes it teach vanilla cooking recipes as you skill up, right? 
Was thinking that lots of recipes in the base game don't really get unlocked at any point where you could use them because of the Queen of Sauce being timegated, having LoC unlock them might make for a more natural progression
Does anyone know the name of a mod where it adds winter fruit trees as well as fruit trees/crops for other seasons including wisteria trees and yuzu?
I am trying to refind it, it was very aesthetic
@brave fable if you're up
cornucopia?
(also you want to ask in #modded-stardew )
K I will ask about it there, im not sure if cornucopia was it but I will see if it has the same trees
you may also have been thinking of PPJA (of which Cornucopia is the direct successor)
they have Wisteria and Yuzu among other winter trees
(Reliable source links on smapi.io/mods are back!
The open-source stats dropped over the last few months due to mod descriptions not being in Nexus' export API. That was fixed a few days ago; so I rebuilt the mod dump, added a script to detect source link discrepancies between the mod dump and compatibility list, and fixed all detected discrepancies.
So essentially:
- The percentage of SMAPI mods with a source link rose from 59% to 66%.
- When a mod adds/changes source links on a mod page, it'll now be reflected in the monthly compatibility list updates.)
yatta pathos
say is the 66% of all mods or of all compatible mods?
Friends, is this actually in use in the game? (Farm Perfection stuff under the spoiler) ||"Farm_Perfection_Description": "Waterfall Farm_Grandpa left you a magic lamp that grants a powerful bonus. However, you've also inherited his 1,000,000g debt to JojaBank, and must pay it off in seasonal installments...", "JojaGrandpaIntro_0": "???: Very touching... Now, just sign the paper here...", "Joja_Debt_Notice": "NOTICE:^^At the end of the season, {0}g will be debited from your account.^^Failure to pay will result in a negative balance.^^Thank you for your patronage.^-JojaBank",||
66% of all (C#) mods.
i have never seen that
idk
may have been added in 1.6.9+
I found it while editing strings for my mod, it's in 1_6_Strings
oh neato
Nope, those are unimplemented content.
oh?!
I've seen zero mention of it on the wiki so wanted to check
implement it and be funny
I wouldn't know how to implement the owed money portion, and I am not a C# modder
The "negative balance" is the part I wouldn't know how to do, mostly
Otherwise it'd just be like the pass out mails
well theres existing debt mods
nodnod
dewb is not c# iirc
Is there a like template somewhere I can find for adding some decoration items via content patcher? I downloaded a couple to try to reverse engineer the method to add my own stuff but I'm having a little trouble understanding i18n, is it worth learning/understanding it so I can add to and eventually expand a catalogue of fall decoration
oh mmy goodner tomorrow at work im gonna read harmony documentation to know how to do a … postfix
yea i18n now so u dont explode later 
i18n is generally used for translations in the case of your items (probably, anyways) but it can be utilized many ways
!i18n
So you'd like to stop writing all of \"your strings straight in your content.json?\" and/or you'd like the capability to see all of your strings across all of your .jsons?
Introducing i18n!
-
How to make your mod compatible with other languages: stardewmodding.wiki.gg
-
The file where you can put all of your strings is called default.json, and it sits in a folder at the same level of your assets, named "i18n".
-
If you're converting from an older version of the game, there's a converter for ease-of-access.
Not to be confused with
{{DynamicTokens}}since these require the specific{{i18n:<KEY>}}modifier
yeah, this still doesn't make a negative balance though, based on the information there? It just curses you until you pay
So what would be the best way to simply add a catalogue with some deco items, is there a template or example mod somewhere that isnt a convoluted i18n mess 😅
I think Calcifer supports adding custom furniture catalogues? https://www.nexusmods.com/stardewvalley/mods/20628
not really. whatever examples there are would be on nexus, and most probably have i18n
if the grandpa thing was completed 1.6 content im sure they would have done the C# to make it possible 
there is no template idt
You'd need to look at H&W furniture mods for the example as listed in the mod description, at least to work with Cacifer
(hxw is guaranteed to use i18n however, so …. )
you kinda just gotta tough it out man
gotcha
hxw is probably the cleanest example youll get
if you just want to add furniture items, there probably is a template for that floating around somewhere
If you take a bit of time to pick apart and learn the i18n part itself, it should be pretty easy to then separate that out mentally when learning how to do the furniture part. https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/translations.md
The i18n in H&W is fairly straight-forward, it seems to mainly be used for the description text and item names
anything in brackets is just one entity if it makes u feel better
It appears the i18n command doesn't actually link to the CP docs about i18n which is a pity because I think that's the most straightforward and easy to understand explanation and examples of it.
good point
soooooon 👀
real talk: how many of you guys have seen a parsnip irl
I've only ever seen them in fancy food stores or in csas
I'm not sure I've seen them in grocery stores really tho
looking on google, I have decided that they’re just Weird Carrots
i have eaten parsnips and parsnip chips
Its a very common food where I live, we eat them boiled atleast once a weak 
Weird Carrots and Weird Carrot Chips, you mean
They are... not very good
where I come from, a different form of large white root veggie is prefered
cauliflower
god this is what happens when it’s 4am, I can’t sleep and I have a headache 
Cauliflower is evil brocolli, my mind is made up on that
is a flower
not a root veg
cauliflower is not a root veggie, I love caluiflower
it's a root to me
the best root veg is potato
pretty sure those are flowers
I am fascinated by the taxonomy on your planet, Button
Parsnip puree is pretty good when you know the secret ingredient
thank you!
Button, I want to see a crop mod from you rn
Clarification I went to culinary school
The secret ingredient is a little bit of white chocolate in parsnip puree
i think i would kill for radishes
I don't fucking believe you
Balances out some of its acrid-ness
my crop mod will just be recategorizing potatoes to flowers
It's true! We did it all the time in our college setting
and cauliflower to....
is there cauliflower in vanilla?
New quote added by atravita as #6322 (https://discordapp.com/channels/137344473976799233/156109690059751424/1342343843445604498)
i don't know how to take this
button when was the last time you played the game 
(yes. yes there is. and no, it isn’t new to 1.6)
recently, with a bunch of crop mods installed, as with all my playthroughs of the past 3 years except one
i actually can't remember the last time I played without a bunch of modded crops aside from right after 1.6 dropped, and that playthru didn't last unmodded for long
Im new here obviously and don't know where to ask this, but i just got a pc and I want to add mods to my Stardew valley. So far I've gotten only one to work
pls help
!mh
For help with modding issues, please ask in #1272025932932055121! When asking for assistance there, sharing an error log will help others identify your issue (see https://smapi.io/log for instructions).
you should try playing vanilla sometimes 
!gettingstarted probably actually
If you would like a guide to setting up mods for Stardew Valley, check out the getting started guide! https://stardewvalleywiki.com/Modding:Player_Guide
then again I can’t talk, my personal choice is currently vanilla (…balatro)
i did! After 1.6 came out, and probably after 1.5 too. that's enough for me, I've had my fill of vanilla Stardew since my first time in 1.0
my personal choice is a vanilla sock!
vanilla ice cream might actually be good rn
though my headache is right where brain freezes are, so maybe not the best idea…
i did a 1.6 playthrough with only lookup anything my beloved
besides, I don't think anyone should play vanilla Stardew at this point. they need extra books, after all
a totally unbiased opinion
as long as they add about 30 extra books it's fine by me
I still have my saves from when I first played; my 2nd one is also my last pure vanilla one
I still have the save I moved from 1.4 on ipad to 1.5 vanilla on pc to 1.5 modded on pc
i have like 2 dozen actual playthrough saves on my drive still
What about after 1.7
Tbh I only have 4 real gameplay saves
depends how the 1.7 alpha goes
@tawny ore Thanks for the teaching today by the way! 
wait atra you might know this actually. Has anyone ever brought up the fact that the code controlling the hands on the gold clock and cc clock is wrong?
can't wait for clickCraftingRecipe refactor
Niooooooo
(red is CA’s implementation, green is correct lmao)
welp literally unplayable, I'm refunding now
Close enough
im fascinated that the clock is practically an hour behind
I expect 1.7 to be rushed out to fix this
!officialbug
If you've checked that it's not a mod bug:
- Report gameplay bugs to the Stardew Valley developers here: https://forums.stardewvalley.net/forums/12/ (do a quick search first so you don't report something they're already looking into).
- Report typos or translation errors here: https://forums.stardewvalley.net/forums/32/
Alternatively, you can emailsupport@stardewvalley.net
half an hour at most I think
Too much time in support, iro
the only reason I’m back looking at screens is because I’m bored, with this headache I should really be staying away 
I keep benadryl on hand for insomnia emergencies
Heyo, would anyone know specifically how I am supposed to set an item to be purchasable only once like a recipe, without it actually being a recipe, I see the Fields for limiting stock, but it doesn't say anything about non replenishing stock, only stuff that will refresh every day?
Ok, I wasn't sure if that was the only route. Thank youuu
What sorts of things does the Linux case sensitivity affect in Stardew mods? Is it only for file names (like in FromFile or InternalAssetKey)?
SMAPI is pretty good about making things case insensitive as much as possible
ask in #modded-stardew
Anything that uses AssetName for comparison is case insensitive
(Content Patcher normalizes paths accessed through its own tokens and fields, so things like FromFile and InternalAssetKey are case-insensitive. It's mostly C# mods accessing files directly that tend to be affected.)
wait really
there was this animal mod that was definitely borked for me bc the sound cue paths were wrong casing
I suspect {{AbsoluteFilePath:}} isnt' doing that
Oh that's good to know. I always worry that I might be introducing problems (with my CP mods) for Linux users if I miss getting any capitalisation anywhere in the mod exactly correct but it sounds like I don't have to be as concerned.
Sounds might be one of the things that is an exception since it has a reference to the absolute file path
but i also remember fixing FromFile problems sometimes 
Rather than using the IAssetName wrapper
aba if you want to be safe u can just lower case everything (or install gentoo)
Install gentoo instead of windows?
Is there a dialogue key for when you first talk to the NPC? I cant see one on the wiki
I was actually asking because I wasn't sure if there'd be a difference between AddMail Current {{ModID}}_BoughtSword received and AddMail Current {{ModID}}_BoughtSword Received for Linux users.
Introduction, it's a conversation topic added to NPCs when you create a new save. It lasts for 6 days.
Alright, ty!
AddMail Current lowerCase received and AddMail Current lowercase received are different
this breaks on windows too i thought
thatsa what atra is saying
dictionary keys are case sensitive
(that said i dont know if they are case sensitive when working in e.g. Content Patcher Entries)
But that probably has less to do with Linux and more to do with how dictionary keys work in C#
For all of my mods I tend to use case insensitive Dictionary keys and HashSets by default
Welcome to, Let's see if this JSON works or if the console gets flooded with errors!
Come to think of it. How would you make Newtonsoft Json deserialize into case-insensitive dictionary keys?
for all my mods I use the german locale's case insensitivity
WHAT- I GOT NO ERRORS WHEN LOADING IN!? I DID MY CUSTOM NPC RIGHT FIRST TRY?
i dont believe you can, i think you'd have to convert it after you deserialize it into a different dictionary
Out of curiosity, what effect would that have on look up times? My mind is thinking it would kind of "tolower" both the key and input string.
At least not without getting into the Json Converter stuff
maybe specific JsonSerializerSettings
It doesn't
It's actually very fast if you're doing it with ascii only
Dictionary lookups are O(1) complexity, and they are still O(1) even using StringComparer.OrdinalIgnoreCase. Any possible difference is negligible.
It's like if you're trying to optimize, there are a million other places to start before you worry about dictionary lookups
Very cool 🙂
(HybridDictionary is pretty neat though)
Isn't hybrid dictionary a list at low n and a dictionary st high n
Anywyas, the difference between uppercase and lowercase is very much just bit 6
i double checked and HybridDictionary is actually a ListDictionary at low n
There is possibly the tiniest bit of overhead when it comes to computing the hashcode
i was experimenting with these collections when i was working on the CMCT rewrite
thats why its better until about n = 10 i believe
the ListDictionary that is
It's why one of Nick Chapsas videos shows you how to unsafely combine lookup/update into a single call to save on that slight overhead
I'm surprised
however you do lose some efficiency if you start with a HybridDictionary but dont give it a predetermined size
I've seen (rust) benchmarks where hashing is slower at n=32
bc the process of swapping from ListDictionary to Hashtable involves some work
But Rust has a fairly slow hash
you can initialize a HybridDictionary with a minimum size to avoid that but then im not sure what the benefit over a dictionary is
Unsafe, you say?
It's perfectly safe, i do it all the time
It's so small that no one should care about it unless you're literally handling millions of lookups per second
(since if it detects a minimum over the ideal itll skip straight to Hashtable)
i wanted to use them with CMCT originally for the actions registry bc, why not, free optimization
but they dont implement the TryGet pattern so i abandoned them
Ignore the clickbait title:
https://youtu.be/8dI_nsmcW-4?si=iyXEI0SRF7IEDQGb
Check out my workshops and use code WORKSHOP20S for 20% off: https://bit.ly/4jmXbpI
Subscribe to my weekly newsletter: https://nickchapsas.com
Become a Patreon and get special perks: https://www.patreon.com/nickchapsas
Hello, everybody. I'm Nick, and in this video, I will show you how you can fix an issue with the Dictionary class' performance...
i like the TryGet pattern
I wouldn't say millions, millions is ns range
I would say thousands. If you do thousands of hashes per second you may want to do something about that
The video summed up
Sometimes windows spawn on the wall even though they arnt in the map, any idea why?
As long as you don't mutate anything while you have an object checked out
As an alternative to if (!dict.TryGetValue(key, out var val) { val = value; dict.Add(key, val); }
Check your map properties for a DayTiles and/or NightTiles property and remove them
Since TryGetValue and Add both require the overhead of hashing key twice
Thank you!
For once Nick talks about an optimization without actually demonstrating the Benchmarks
So disappointing
Buddy, get off the damn wall.
I mean I got him off the wall... he isnt very talkitive though...
Does he have gift tastes?
I just used the example from the wiki and edited it to what I wanted
But yeah
Well I got him to talk
But he wont follow his schedule...
His schedule that you made for him to just stand in one place?
I moved him across from where he is supposed to stand so he should move to stand there
Are the file names case sensitive?
Not unless you're on Linux but you should try to always match case anyway
is this meant to imply you either haven't seen or don't believe in parsnips
This is the schedule https://smapi.io/json/content-patcher/89e64212e2fa47dab6e690658d66835e, still havnt gotten it working
I've had mashed potatoes and parsnips and seen em in stores
wait, stardew valley isnt IRL?
I wish...
it's not ☀️ or at least not without me updating the mod. assets/mod-data.json:CookingSkillValues:LevelUpRecipes assumes that every list item is the name of a recipe that starts with blueberry.LoveOfCooking_, so only recipes from my mod will be added currently
how did anyone even learn to start modding stardew
replacing game files has been a thing since games have had files
it just evolved a lil
You need quotes around spring and the schedule itself
Surely this must have given you an error in your log. You have no quote marks around the key or the value.
Pff
No error
even now there's nothing stopping you from just replacing random windows .wav and .ico files with whatever you like, go wild (don't)
Hi Aba 
Oh, okay, thanks for the info, I guess a vanilla cooking revamp's gonna be trickier than I thought 
Just patch data/recipes to re-add every recipe with blueberry.LoveOfCooking_ at the start. Seemples!
OMG HE MOVED
HE FOLLOWED HIS SCHEDULE
I HAVE NEVER BEEN SO HAPPY TO SEE SOMEONE MOVE
uve eatied a parsnip... as ive said it's the lovechild of turnips and carrots
i'm sure part of the reason why i made it this way is because LOC originally did incredible and stupid things like including campfire/cookout/egg/trail snack recipes as cooking skill level-ups and i vowed never to do that again
wish CA would've added a chocolate bar in 1.6 so i could've removed the last random object in the mod
Oh yeah, regarding how vanilla Cookies and Chocolate Cake both take the exact same ingredients and chocolate just materializes out of nowhere?
now to go fix the dialogue 😭
ah yes chocolate cake. ingredients: flour, egg, absence
There's a chocolate cake I could enjoy
Mmmm! What a yummy cake!
How do I make it so the dialouge instantly goes to the next string, so like
"spring": "blablabla$0#etman" but when you click on blablabla it instantly goes to etman
#$e#
You don't need the $0 btw
If you're doing it to remember that's okay I was doing that too lol
The $0 is for the portraits?
Whenever you have neutral portraits you don't need to use the indicator
Oh
It'll automatically use that one
I dont want to end the dialogue though I want it to go to the next bit of the dialogue
#$b#
Ah, ty!
So this would be a good dialogue?
Introduction: "A customer?!$1#$bHow did you get into the area?$bThe bridge is repaired? Well that is wonderful news!$1",
(In terms of the commands)
You're missing the hashes around the second line break command $b
So the commands have to be encased in "#" and seperated with "#"?
every command needs to be separated with #
its only encased because "$b" is itself a command
and must be separated from the next command
or dialogue
Alright, ty!
Oh yeah I missed the first one nice spotting Lily
Hmm... I'm examining Harvey's schedule to see where I can make some changes and... am I reading this right that he only works half a day on Fridays, and the local hospital just has no one staffing it on Saturdays?
seems accurate to irl 

I think calling it a hospital is really a stretch
It's a miniscule GP clinic
(I realise it's not your stretch)
Well it's where you go when you get your butt handed to you and Harvey's licensed to perform "emergency surgery"
Nah, its barely even that
But now that I talk about it, I guess in a small town it's not a huge deal for someone to just go fetch the local doctor from the museum or the saloon or wherever he is at the moment
But from a gameplay perspective the Clinic sure is useless compared to the Saloon
Harvey at the saloon, drunk out of his mind
"Harvey! We need you to perform emergency surgery!"
Harvey: "Will-Wi-will hich nbe there i-n a hich second..."
yall i really want to make a plotline for the campsite but idk how to do it, i could maybe do an event or a dialogue...
if you die on saturday you die in real life
wait what
I say this as someone who just had some damn medical problems: the urgent care closes at 5 on weekends. You deal with it or find a real hospital
hope one's nearby!
but they've got one doctor, he cannot be on 24/7, that is not fair to him. You're heading to Zuzu or something if you really need it
Is it possible to call on another mod's config in your When conditions?
It is, I've actually done that. lemme see
(yay finally I have an idea that might work!)
"When": { "HasMod |contains=FlashShifter.StardewValleyExpandedCP": false, "HasMod |contains=Rafseazz.RidgesideVillage": true, "Rafseazz.RidgesideVillage/ExpandedFestivalMaps": true, },
ah shoot- Well, you can see it anyway
You do it like a path
That's me changing a festival map only if Ridgeside's festival map expansion setting is on
you need a mod for this (obtaining config tokens from another CP mod)
You do the HasMod and then do it like a path
so thats, they dont hace SVE, they do have RSV, and the important part is: "Rafseazz.RidgesideVillage/ExpandedFestivalMaps": true,
Yeah that's right
And I didn't need CMCT to do how I did it...
I didn't think anyway
it depends on how RSV provided the token too
It's just part of their settings, the bit that turns their maps on
if it's straight up a C# mod using content patcher api to provide a token
then you don't need cmct
hence obtaining config tokens from another CP mod
let me look at the one I want to reference
it's a CP pack, and it starts with "ConfigSchema":
does that mean i don't need CMCT?
or I do because it's CP not C#
?
but is RSV C#
Sorry, thought it was a simple answer since I managed to do it pretty easily, but there appear to be hidden speedbumps
Can I have multiple dialogue entries for the same key?
It's RSV having a C# component that matters for this
Not your mod, Midnight
So yes bezajel you would need CMCT
ok, so I can use CMCT - does that mean it becomes a requirement for users of my mod?
Yes
I see, that makes sense! Again, sorry. Only saw the tip of the Answer Iceberg
that said, there may be alternatives?
it kinda depends on how the og mod is structured 
Just need confirmation that I can before I try (i have checked the wiki and i cant find anywhere that mentions it)
Yes you can, several different ways. One way that you cannot do so is by just listing the same entry key multiple times.
How do you want the game to choose between your different lines?
Chu is there any way I can scrape data/fish for a list of fish IDs without C#? For use in flavouring bait. (Or anyone else, not specifically chu)
Randomly, there is a chance that you get A line or B line
You can just throw a randomization token in the i18n token, right?
Yes
Are you using i18n?
sorry, alternatives to using CMCT ?
No
you cannot directly do "get other mod's config token" without CMCT
however, depending on the details, you may have another approach that bypass the need all togther
this is why when you ask questions it's important to give context
Definitely recommend changing that. But if you don't (or even if you do, actually), you can use $query RANDOM 0.5#<if true>|<if false>
The XY problem is a communication problem encountered in help desk, technical support, software engineering, or customer service situations where the question is about an end user's attempted solution (X) rather than the root problem itself (Y or Why?).
The XY problem obscures the real issues and may even introduce secondary problems that lead t...
I am using BETAS and it is so frustrating to set up i18n with it
I have no idea how BETAS could make i18n any different to usual.
You just plop an i18n key where you'd normally have user-visible text, then write that user-visible text in the i18n file.
I am using BETAS to display a message with a touchaction
it's the thing I was talking about yesterday, one mod uses load to change vanilla portraits (selectively and according to complex config settings), and I want to get anime portraits working with it
i will try to do it again then
isnt your problem the exclusive loads the 2 authors are both doing
you can't fix this even with CMCT
Even if you never manage to get that one bit into i18n (and Button already said how to) it's still worth using it for the entire rest of your mod.
no anime portraits uses edit image, but it overwrites the other mod's loads
what exactly do you want anime portraits to do then?
do you have matching alt portraits made
yep i've made matching alt portraits for the mod that uses load
then yes, you can use CMCT to match the load
so i want to use a mix of the original anime portraits (ohodavi ones) and the versions i made for this other mod
sorry i'm being a big vague because the mod in question is nsfw 😅
fair enough, the thing you need to confirm then is
this look like load not appearances to me:
{
"Action": "Load",
"Target": "Characters/Alex",
"FromFile": "assets/Characters/Alex.png",
is it actually all Load to the vanilla Target and not using 1.6 appearance system (which just let mod load portraits to multiple targets and use GSQ to control them)
oops that's the characters, but its the same for portraits
slightly cuter aesthetics is example of appearances mod, as well as the vanilla winter outfits
Unless they're knowledgeable about InternalAssetKey wouldn't they need to Load/EditImage the assets to be able to use Appearance anyway?
yea
i'll look at SCA see what that looks like in comparison
hence why i said vanilla targets
or isn't appearances set up in character data somewhere?
anyways if u confirm this is indeed true, then go ahead with CMCT plan 
no changes target data/characters
that would be an even bigger change than going to EditImage 
I just assumed that mods that used Appearance were still loading their custom portraits to (e.g.,) Portraits/Alex for the base portrait rather than leaving them as vanilla, hence my confusion.
they are pretty busy i think so i don't know that i'll be pushing too hard
i mean the appearances model supports portraits
if you want to take advantage u would load to {{ModId}}/Alex_RelevantVariantName
I know it does
I meant I was confused about why using Appearance would circumvent modifying Portraits/Alex and it doesn't inherently do so, but it can.
And I assume you were suggesting doing so
prob could have emphasized >multiple targets
but basically if u were to mod SCA, and it does have multiple targets where portrait variants go
to match you just editimage those
won't need to know about SCA's config
I have not managed to grasp what the issue actually is for bezajel (too busy thinking about how to get fish IDs) so I have no actual thoughts on that anyway lol
yeah sasdly it doesn't use appearance
the issue is desire to add ohodavi style portraits that go with mystery nsfw mod 
it just plain loads new versions of vanilla portraits
I assume this is not just for personal use
and the mod analogous to SCA here just uses config tokens to conditionally Load over the vanilla target from the sounds of things
i'd like to make a mod for it
so theres no {{ModId}}/Alex_RelevantVariantName to target
as in i'd like to share a mod for it 🙂
hence need to do CMCT to obtain their config, and do EditImage that match the Loads
permission pending, just working out what's possible
thanks for the help! I may be back with questions about CMCT but i'll see how I go!
you can take a look at rasmodia for example of doing this stuff
not quite same problem, but it has to match the various wizard romancable mods
what is fish id
cool, i'll check those out
ItemIDs of fish in data/objects. I want to get a list of all of them to flavour bait.
I don't know if it's possible to do that without C#
It's for selling
So it looks like the item query needs to be repeated for every individual fish "Id": "FLAVORED_ITEM Bait (O)129|FLAVORED_ITEM Bait (O)131|FLAVORED_ITEM Bait (O)132|FLAVORED_ITEM Bait (O)136 (this is pulled from FishShop)
hm this is a limitation i believe
there is no item query that generates a list of FLAVORED_ITEM
need to write your own item query that does this
I was thinking if I could grab a list I could use a dynamic token to make it "Id": "FLAVORED_ITEM Bait {{FishID}}
I don't even know if it's possible to use dynamic tokens in item queries
well you could but it'd be fixed with dynamic token refresh
and also u cant generate list o fish according to mod list 
So I can't grab the info from data/objects after it's been populated? Is that specifically for dynamic tokens because they run earlier?
(How often do dynamic tokens refresh?)
well you cant put a item query inside dynamic token afaik, that thing only supports CP tokens right
unless someone's made glue for it i dunno
Yeah I thought it only supports CP tokens
But I didn't know if it's possible to get the info with CP tokens or not
Fish shop
it prob make sense to have limited selection tbh 
Actually I assumed it's Goat's vending machine
where the heck is willy getting planet fish bait from
Yeah he wanted to have a random choice of a few different flavoured baits every day
But with any fish as a possibility of flavouring the baits
i did think it would be very useful to have like, nested item query somehow
I was about to ask that lol
the content pack modders yearn for the foreach
Because then I could maybe combine FLAVORED_ITEM with ALL_ITEMS or something
Maybe I will just your harmony for CP Button (I joke, because I have no idea how to use harmony)
it wouldnt help here anyway !
I could just break the user's game so they wouldn't notice there was no flavoured bait
GSQs are all bools, right?
yep, GSQs are all basically input values for bool CheckConditions
yes and no
And item queries return item IDs instead? (Button's reply was not to this message)
yep, those narrow down a set of matching IDs
IEnumerable<ItemQueryResult> in code, though that's not as clear as bool 
Thanks ^_^
Well, it makes item instances not item IDs but there isn't a ton of difference
If it was just IDs it wouldn't be able to do flavored items, since those are special
ah, fair, I'm not really familiar with how the item part works internally
I think technically it returns ISalable instances even, not Items or SObjects. Though I'm not sure any item queries would return non Items
yeah, ItemQueryResult basically contains an ISalable and related data; ISalable implements IHaveItemTypeId, but ig that doesn't technically mean it's an Item
if there was a query for house renovations too that would also be a possibility, but there isnt one
but one could be made
i guess that counts as an ID
public string TypeDefinitionId => "(Salable)";
public string QualifiedItemId => this.TypeDefinitionId + "PurchaseableKeyItem." + this.id;```
Right I forgot about those queries
the black sheeps of the query resolvers
i guess im writing this instead of sleep now
And mods can register their own query resolvers that return any ISalable instances they want
I Can't Believe It's Not Roe
broken xmldocs smh
Thank you!!!! 
Im gonna have to find someone to take custody of this probably
Give it to me and then I'll be one of those people who uploads a mod to Nexus that they don't understand enough to support 
Or give it to button and she can release BIQS
It seems kinda useful in general but I don't know anyone with an item query framework
I guess I could just make one
It is and I can use it for my fishing mod and for the furniture store one
You just saved me so much pain, I can never thank you enough XD
That's for chu in like 14hrs gn
im not sure what the value is for furniture? is there flavoured furniture?
unmilled rice bed..
Oh is it just for flavored items thats fine because with permission I could make it work with some effort I believe, unless Chu did it himself
Technically you can next any 2 item query
its for nesting queries in general but
i dont know why you'd wanna nest any other two
There's just not much value beyond flavor item niche case
im not sure how it helps for furniture
Idk what nesting is tbh so I can't really answer that fully X|
i mean what do you have in mind for a f urniture shop that you cant do already
I need to pull a list of furniture based on type to have seperate areas in the store you go to for that type of furniture
This is literally what is done in the example
nesting queries wont help with that
This usecase is simply more item queries
Nested item query does nothing for you here
do you know what a russian nesting doll is
thats nesting. putting something inside a something
this is putting an item query inside of an item query
Thank you! Everything makes sense now XD
These things make me dumb with happiness. I gush every time but I legit don't think I can play Stardew without your little bugs running around everywhere ever again and these features are to die for

Would anyone happen to know where cooked dish sprites are located? 
At least it's not in Cursors
If food was in cursors..
found food in cursors
Those are the heart event meals, those don't count xD
Close enough, the unholy prophecy has been fulfilled
Would there happen to be any way to make an NPC not have collision with the player? Like say if they're supposed to be a ghost
with C# sure, i don't believe so otherwise
oh the c++ tbin parser is mit anyway
i could've just ported it without worrying about gpl
oh well this was fun anyway
Shrug
Ciao, i'm making an NPC mod and I would like to know how to modify the 'Concession' and 'MoviesReactions', by adding my NPC in them. Anyone got a tip?
https://stardewvalleywiki.com/Modding:Movie_theater_data
have you unpacked the files?
yes yes, i tried editing it by adding entries in the 'content' npc file, tho it gives me problems.
!json feel free to post your code so we can look
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.
let me get it wait
I've added this in my content file
I didn't edit it yet, as it gives me problems to being with
"Entries" has to be a dictionary that looks like
{
"YourUniqueIdHere": {
// one block
}
}
just wrap what you have in another block with an ID
Thank you a lot
oh there we go
I'm sure that's fine
!NPC there's a section in the tutorial here on movie stuff!
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!
didn't know, thanks a lot 
going to have to work on exporting to tmx later, but it's on github now!! https://github.com/AnotherPillow/tbin.js
Hi, does anyone know why this would crash?
var newInstruction = new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(ShopMenuPatches), nameof(TryToPurchaseItem)));
foreach (var label in codes[index].labels)
{
newInstruction.labels.Add(label);
}
Log("Inserting method");
codes[index] = newInstruction;
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24354 on Unix 5.15.0.130, with 11 C# mods and 1 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Are you reusing a label?
Oh is the goal to replace the opcode/operand without yeeting the labels?
yeah, i copied the labels just in case (but there's none) 
i'm replacing tryToPurchaseItem by my own method, but apparently there's invalid code somewhere
What is the method you're replacing
can do matcher.Opcode = whatever and matcher.Operand = whatever
I think you forgot the implicit this
Assuming you are using code matcher
But I'm not at my computer and therefore can't check for sure
The labels stay if u do that
There's also extension methods for copying labels and blocks from another code instruction in Harmony
I'm transpiling ShopMenu.receiveLeftClick, specifically replacing this: call instance bool StardewValley.Menus.ShopMenu::tryToPurchaseItem
Add ShopMenu instance as the first parameter to your replacement function?
Yup. The labels weren't your problem
Instance methods always have an (implict) first param of this
Or is it self in c#
R u trying to do smth for mobile 
Ohh, I see. I'll keep it in mind for next time, thanks
Yes! I'm trying to make item extensions android compatible (and fix a custom trade bug that no one has noticed yet
)
It is admirable but man I don't want to have to test on me phone
so far, i need to fix this code (now that it works) and then find what this little window is in android
how are you doing that btw, do you compare against the android code base you decompiled yourself
That's pretty much how I did it!
How do u decompile tho 
(not that I'd do it
but good to know)
(though now that all 7 of EMC's recent comments are about Android I might have to care eventually)
(cant believe my mod is entering the big leagues)
ooh which mod? 👀
Extra Machine Config
Export the APK from the installed game, extract everything from that, extract the assemblies from the Xamarin blob using https://github.com/jakev/pyxamstore, and... decompile as per usual!
Soon you will be on TV right next to queen of sauce
that sounds pretty useful! 
also, "Define extra loved items for Junimos aside from Raisins" i'm surprised about that feature
thanks!
no one's using that feature yet, you could be the first
hmm...i do have a WIP mod that could make use of it 
it's just GI extra locations redux lol, though i'm pretty proud of some features I added
(coming...someday, whenever i finish jackie's backstory)
I feel like the decomp repo should have a branch for Android if it's that easy
yeah thatd be very useful
Really, yeah, the most difficult part is getting pyxamstore to work.
Pathos has a separate repo
You can ask him
...you know, I forgot that exists.
Is it also just lv50 mod author invite or separate ask 
I imagine it would be the same level requirement, but you definitely don't get added to it automatically when you request the main one.
I will ask later then 
No reason not to just ping and ask now!
But it is updated for 1.6.15
Probably not tbh
Yea but im at work so presumably pathos also at work
Also keep in mind mobile updates more

Hoo boy, it is not updated for anything past 1.5.
I'm very glad that when I was active atracore was dead in the water for mobile
Tbh I've also not seen Pathos around lately
Ah unfortunate, but it'd be good to have it exist
I'll probably try doing it on my own first
Ciao, anyone got a good tutorial on how to modify the spouse room and outside area?
I understand why menu code is probably very different
But why is sound cue exists gone on phone
Also wonder if these types of differences could be handled by rewriters instead of each individual mod
Tbh when I found out about the sound code I was like "myuuu please bail me out hereeeee"
I wonder if anyone's ever toyed with the idea of integrating FMOD...
(It's because that isn't part of monogame normally. PC added it in 1.6, it hasn't been added to mobile though not sure why)
Oh interest
👏 thread 👏 safe 👏 audio 👏 engine 👏 when
Could i just like, copy the little bit of code that checks sound and have it work™️
Thread? Sounds like a job for the knitting expert. 
👏 never 👏
You can't inject a new method on an interfaces
Anyone here knows how to make an NPC custom spouse room and outside area? i'm new to map edit
sure you can do that but you'll have to write the code for each recolour to only/not apply to east scarp locations
!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:
-
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!
You basically need to have a tmx for SpouseRoom and SpouseaPatio
thanks everyone who helped me get my mod out

sorry for the late reply, but what does the if statement looking for exactly? Is it saying that it can't find the Shops asset?
(I don't work on Android myself and people rarely ask for the Android repo, so updating that one isn't really a high priority. The process to update it is fully documented in the readme though, if anyone wants to submit a PR!)
(I'm usually around even when I'm at work, but I don't chat much unless someone pings me or has unanswered questions.)
(Hi pathos
)
The AssetsInvalidated event is raised when any assets get invalidated, which can happen anytime with any asset. For example, if another mod does this:
this.Helper.Content.InvalidateCache("Data/Machines");
Then your OnAssetsInvalidated handler will be called with Data/Machines in that list. So the if checks whether Data/Shops is one of the assets that got invalidated.
That said, in most cases you should use AssetReady instead of AssetsInvalidated if you want to read the new data after it changes.
(I even remembered you had similar issues to me running pyxamstore when I saw the process in the repo!)
Just to make sure I understand (I was reading this https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Content#Cache_invalidation), invaldating an asset is used in modding in order to "change" and possibly inject a modified version of that asset into the game? But in my case, it can be used to change the items in a shop in the vanilla game. Then whenever an asset is invalidated, it will then be reloaded when it's requested through the AssetReady event?
wouldnt the problem of using AssetReady is that you have to wait for something else to request reading it before the event is fired? just wondering
I assumed hawker wants to read it as soon as possible for the caching thing they are doing
yes, I am trying to cache as soon as it changes. But I don't want to load it too frequently
"let's add android compatibility" i said, unaware of the horrors,
(aka this is how earlier's thing is going)
The general process is:
- The game code requests an asset. For example, it requests
Data/Shopwhen you open a shop to get its data. - The content manager checks if it's in the cache. If not:
- SMAPI loads the asset from a mod, else it's loaded from the
Content/<asset>.xnbfile. - SMAPI applies all edits to the asset.
- The final result is cached.
- SMAPI loads the asset from a mod, else it's loaded from the
- The content manager returns the cached value.
If Data/Shops is requested a second time, it just returns the cached value directly without reloading it or reapplying edits. However, mods often want to make changes after the asset is first loaded; that's where SMAPI introduces two concepts:
- Cache invalidation removes the asset from the cache, so step 2 will run again next time the asset is requested.
- Asset propagation is an automatic process where SMAPI will immediately reload the asset and update all references to it (for supported assets only).
So in many cases, you can just listen to AssetReady (since it'll be reloaded immediately). That said, Data/Shops is only requested on demand when you access a shop, so you'd need to use AssetsInvalidated and a one-tick delay to properly read the updated data.
So my suggestion from earlier was basically a way for you to update your cache as soon as you need to access the data, and only refresh whenever the data changes
OH matthmaticus while you are in chat: for my postfix, i can just do a switch case that is like if (seed context tag quality_silver) then clamp the min/max at whatever values, right?
or do i have to somehow store a variable about the quality of the planted seed
The seed only exists when you plant, so you'll probably need to save in mod data to remember the seed first
i was dreaming about this last night i need to write code while im in a fugue state
ah okay!
so i will create a lil tag for it of some kind ^_^ somewhere
when you say “in mod data” is that a field in seed data or you just mean i have to add my own var in my project that checks and stores this
@shadow pagoda
This is your cached copy of ShopData:
private Dictionary<string, ShopData>? data = null;
This is how you access the cached data. It automatically reloads the data whenever your cached copy is null:
public Dictionary<string, ShopData> Data => data ??= DataLoader.Shops(Game1.content);
This is how you "forget" the cached data whenever it changes due to invalidation:
public override void Entry(IModHelper helper)
{
helper.Events.Content.AssetsInvalidated += this.OnAssetsInvalidated;
}
private void OnAssetsInvalidated(object? sender, AssetsInvalidatedEventArgs e)
{
if (e.NamesWithoutLocale.Any(static assetName => assetName.IsEquivalentTo("Data/Shops")))
{
this.data = null;
}
}
I was thinking the HoeDirt could be where you store the mod data since TerrainFeatures support mod data
I have a question about mod compatibility using CP: If you're making a mod that replaces an NPC and you want to make sure that the events added by another mod for the original NPC don't get triggered, do you just make sure the other mod is listed as a dependency in the manifest and write the new events using the same event ID so it overwrites? (That doesn't feel right)
In theory, I wouldn't mind updating the android repo... I expect that repo doesn't leave the source code in a compilable/playable state? My big problem there would be that I have no access to historical versions of the apk, just the latest version, unless there's a way to download outdated apks from the play store that I am unaware of.
Unfortunately, as it's a paid app, it's not archived on apkmirror or sites like that and I don't really want to pirate it and assume the pirated copies are untampered.
I mean, yeah, true, but the NPC replacement is just as much a reason for the mod as adding the new character
Honestly, if you are replacing a vanilla character, all compat for other mods with expansions for that vanilla character go out the window anyway
(I say as someone who is replacing all the vanilla characters with Legend of Zelda characters)
(Oh that's cool lol, also a daunting task!)
I was hoping to make it play nice with Expanded and not worry about any others for now
Yeah i think if i was making say
Yeah, it's probably considered poor taste to do things that affect other mods depending on the changes. You can just be incompatible with that mod. Creating any unexpected behaviors could lead to bug reports going to them that really shoudn't be.
Mod that replace Sam with Goku
I would expect people who care about immersive to not install further Sam mods
I assume the schedule's unchanged
economy so bad goku's working at jojamart
Yep, I think a non-playable decompile is fine. You can't really run the Android decompile directly like you can on PC anyway, and deeper investigations into the game code would probably happen with the PC repo instead.
Replacing a vanilla character involves a lot of things to provide immersion, up to and including changes to every dialogue or event from OTHER characters that refer to them by name or relationship. It's simply not reasonable to try for compatibility with other mods unless you are limiting it severely.
How do I (& anyone else) apply for access to the Android decompile 
Same as requesting access to the PC repo, just need to ask here!
(And be level 50 and a mod author.)
and I want to echo matt's post that changing another person's mod, especially one that touches on events and dialogues, is very frowned upon
(Hi! I'm always here, just sitting in the shadows until I'm summoned.)
I heard if you say his name three times he appears
Pls gib access to Android sauce, github: mushymato
Also Khloe last time for 1.6.9 your fork didn't inherit the parent repo's ACL
If you are do PR it'd be good to remake fork first, or somehow sync that 
hiiii :3
Invite sent! See the README for more info when you get access, and feel free to ask if anything is unclear.
wait, if you’re always here in the shadows, who is your employer……. mr. qi?!
That definitely makes sense, and I definitely don't want to disrespect anyone's great mod work
I've never actually forked the android repo yet. Though, me updating that is kind of a weird thought since, again, I don't have access to old versions of the game for android.
(me as well
github: zombifier
thanks a lot!)
I'm not sure anyone does or cares that much tbh
Just do latest
Yeah, android repo is most beneficial to modding, and up until the latest version Android Modding hasn't really been a thing
Yeah, latest is fine. The full history is in the PC repo; the Android repo is mainly just to see what's different for compatibility fixes.
Invite sent!
Ah. Well if we don't care about history then I guess it's time to poke this
Please ban me permanently from the Android repo so that if anyone asks for Android support I can say my hands are tied.
🤣🤣
Gonna just commit all my android updates using focus's email address
That's OK, I never check my email.
I'm going to exclusively become an Android modder so that I never get those questions, but instead people will ask me to support PC



