#making-mods-general
1 messages Ā· Page 167 of 1
i guess if i leave it this way it'll make it easy to do that in the future if i want to
trying to add my own personal use recolor of some rural outfitters shirts with sleeves but its not showing up in my game?
I've got it set up the same as how the mod author had their own shirts already there
is your json actually a json file and not a txt file?
yes it is
json suffix
does your shirt file say .png after it?
I copied one from the teddy shirt i recolored and changed the name in the json file for my recolor
cooking something up https://medal.tv/games/stardew-valley/clips/jsw178mFIlJSub59r?invite=cr-MSwyNlgsMTI4MDI2MzUzLA
Watch Become Enemies(Cake) and millions of other Stardew Valley videos captured using Medal.
abigail gonna sword u in ur sleep
it seems like the shirt picture is supposed to be named shirt.png
atp she has such beef with me i don't think she'd even tell me she likes to sword fight/adventure
she'll show u
feels like the game doesn't like the {{ModID}}s in the target field
the game doesnt care about tokens
its content patcher only
and content patcher is fine with tokens just about anywhere
with limited exceptions
it should be fine unless u got like slashes in ur mod id
oh damn it
thx it shows up now just doesn't look like I hoped 
forgot a { again lol
idk why my sleeves are blue and the collar is ahhhh
a manifest wont even let you use special characters in it besides the dot
(probably underscores too)
i don't think that's allowed to be mentioned here is it 
yeah maybe not
i'll delete
many mammoths have been killed in the creation of this mod...
huh, well i got it to make both wool and milk but milk is still shears
babby steps
feels like animals that get their data changed keep the old data and you need to get new animals, is that right?
"TargetField": ["{{ModId}}_mammothbrown", "ExtraProduceSpawnList"],
can i make this also target mammothblack and mammothwhite or do i need to just repeat the code block three times
three times is easy, anyway. guess if i did skins instead it would just be one.
i think i gotta restructure this whole thing anyway
if they're not skins
extra animal config does things....slightly confusingly
well that is also confusing
made one mammoth work with my new code....now they're all doing it correctly??
i guess maybe it's adjusting the harvest tool by item? unclear
computers am i right
feel free to tag me in the future if you have questions about EAC
(though I'm currently touching grass irl so I'll probably be online only a couple hours per day)
oh hi. neat mod, thank you
i am hammering square pegs into it's round holes at the moment probably
but i think i'm getting somewhere
my current code if you wanna peek at it, EAC stuff at the bottom
probably only the white mammoth is currently close to correct in that
yeah the white mammoth entries look fine. the other ones should work too but most of them are unnecessary
tusks are not currently appearing but that might just be bad luck lol
it does need rather high friendship and only a 11% chance every day
the concept here is i want all the thingsit can make in the animal data, and then use EAC to modify how those are harvested?
yeah
alright
aha
just luck indeed
perhaps i should actually make textures for tusk and milk
as they both just use the wool one
thanks for the assist, i'll fix the other mammoths up
oh right that was my other question, can i just slap ignorewinter in with the produceextention data?
no, that would just be Fields, or just TargetFields-ing the animal
solved this by using onEventFinished to force reload the map (and in the case of overrides, remove the overrides that were saved)
"LogName": "white mammoth ignorewinter",
"Action": "EditData",
"Target": "selph.ExtraAnimalConfig/AnimalExtensionData",
"Priority": "Late",
"TargetField": ["{{ModId}}_mammothwhite", "IgnoreWinter"],
"When": {"HasMod|contains=selph.ExtraAnimalConfig" : "true"},
"Entries": {
"IgnoreWinter": false,
}
}, ```
like that?
well, i should set false to true
just "TargetField": ["{{ModId}}_mammothwhite"],
tried turning the oversized shirt sleeves from GH Peach Body into a FS sleeve variant and adding a brown stripe, but ingame it's invisible
not sure what's wrong as the sprite sheet looks the same as the other FS sleeves in the pack for it, and I've got the files named correctly
Hey 6480, with regards to this message, is it ok if I took the art but like edited it? As long as I put credit for you as original asset creator?
can i use a content patcher condition to see if a player has received a specific secret note? I thought so but can't find the documentation
i dont think there is any token for that one no
you can send a mail flag with a trigger action and the secret note GSQ though
and then have content patcher check the flag
sorry GSQ?
game state query
oh maybe that's what I was remembering
not usable in content patcher When conditions
without another mod to add a custom CP token
OK but I could say use CP to edit Data/TriggerActions, and send a mail item when they've received a secret note?
correct
dont bother with the If query though
use the Condition field on the trigger action
and just send the mail
"Action": "EditData",
"Target": "Data/TriggerActions",
"Entries": {
"{{ModId}}_Triggers_LewisNote": {
"Id": "{{ModId}}_Triggers_LewisNote",
"Trigger": "DayEnding",
"Condition": "PLAYER_HAS_SECRET_NOTE Current 19, PLAYER_FRIENDSHIP_POINTS Current {{Russell}} 1500",
"Actions": [
"AddMail Current {{ModId}}_Mail_LewisNote",
]
}
},
},```
look OK?
AddMail Current {{ModId}}_Mail_LewisNote received if its just a mail flag with no actual letter to go with it
this will also only trigger one time ever, if that matters to you
even if you remove the mail later
I think that's fine thank you for the heads up
If there is an outdated mod or broken mod, and the permissions on the nexus page say you can edit post patches etc ( as long as credits are given) should you still reach out to the author for permission? New to modding and don't want to start off on the wrong foot lol
If the page says yes, then it's alright
And if the author complains, then it's kinda their fault for not modifying the permissions
You can still reach out to let them know, many are happy to hear / be made aware that someone is taking care of their mod š And it covers your bases if they are really against it
Thats fair, I appreciate it. One more question as well new to stardew valley modding but not necessarily coding* C# was the first language I ever learned and the Jsons are pretty straight forward. However I was curious if there is a video or more in depth article I can read for what tools can be used to debug etc. as the current mod im looking at SEEMS to be written correctly however ingame is different that whats written in the json (looking in the nexus page posts alot of folks are having similar issues as well)...
Im not sure about a guide per say, but I always reccomend NoClip, LookupAnything, DebugMode, Profiler (particularly for c# mods) and SkipIntro for when you are testing mods. You can also use https://smapi.io/json to double check if json is correct. Patch reload can also be used to test some changes without reloading
patch reload sounds like a HUGE time saver lol making changes and restarting constantly is rough lol
When was the last time the mod was updated? Knowing when it broke can give an idea of how it broke
Last updated
24 July 20243:38PM
the Smapi.io link actually may have already helped solve the issue
Sounds like it was probably 1.6.9 then that broke it. Oh nice!
I need to learn more about writting for content patcher lol the "logic" makes sense but I have never used that format so I should probably brush up on formating etc
!cp you could check out that bottom link if you havent already; the modding wiki has a tonne of amazing resources for cp
Content Patcher (https://www.nexusmods.com/stardewvalley/mods/1915) is a mod which loads content packs to change the game's images and data without replacing XNB files. If you want to make mods using Content Patcher, start at https://stardewvalleywiki.com/Modding:Content_Patcher.
might need to read up on it
looks like github has a nice article as well! Thank you!
so if I understand... sorry for all the questions š
if you were to add... say a new crop.. you would "load" the asset and if you wanted to add it to the shop and edit the price you would then "edit" the asset and target the shops.xnb from the SDV game itself?
Yep thats about it! You'd also need to "edit" the crops data from the game after "loading" the needed assets for that crop (like its sprites and stuff)
Example from wiki;
{ "Format": "2.4.0", "Changes": [ { "Action": "EditData", "Target": "Data/Crops", "Entries": { "Example.Id_CucumberSeeds": { "Seasons": [ "summer" ], "DaysInPhase": [ 1, 2, 2, 2 ], // grows in 7 days with four growing sprites "HarvestItemId": "Example.Id_Cucumber", "Texture": "{{InternalAssetKey: assets/crops.png}}", "SpriteIndex": 0 } } } ] }
Ah right, give the crop its data of course
When looking at the decompiled data for Stardew, I can find the code for the GSQ PLAYER_PLAYER_RELATIONSHIP, but a comment says to refer to a different part of the code. Am I supposed to replace any of the words to make it work?
in the Edit data action with target being shops wouldnt you need to add a price?
"Action": "EditData",
"Target": "Data/Shops",
"TargetField": [ "SeedShop", "Items" ],
//"When": {"Enable Basic Pack": "true"},
"Entries": {
"{{ModId}}_TestSeeds": {
"Id": "{{ModId}}_TestSeeds",
"ItemId": "{{ModId}}_TestSeeds",
"Condition": "SEASON summer",
"Price": 20,
However looking at the wiki if you dont add "price" it would be default price? but if its a new item.. how would it have a defualt price unless specified?
You need to use the same key as you used in cropData in objectData to create the seed item
And that is where you can determine default price
The way you've done it will ignore default price though, which I think is correct (unless you want the seed to sell for as much as you buy it for)
I'm making a mod editing tool in Unity.
Is there a list of all of the valid Map locations for schedules?
reloaded it price I changed to 80 but ingame shows at pierres to buy for 160 š
Youd likely need to interate though locations and check for "ExcludeFromNpcPathfinding". Looks awesome btw!
Thanks! š
Im so proud, you can click a little guy in the scene and set its position. Going to be sooo much fun to put little dudes in the game!
My next step is going to be allowing the user to change facing direction and animation visually, and add schedule keys from a little widget maker. Once it's done I'll put up an itch.io link.
I already have the character creator mostly done.
What does it mean if i had a dream about sdv mapmaking...
It means its time to get to work 
Do iiiiiiit
Hi, has anyone ever figured out if it is possible to use arrays/lists with GMCM? While I can create and edit arrays fine with just using config.json, whenever I try to read it I get a bunch of errors with GMCM
I'm trying to create a list of custom options the user can edit but having some trouble
Fixed-size lists are somewhat doable with a lot of hacks. Variable-sized lists, I'd say don't bother.
You can make a drop-down with string option, or make a bunch of checkboxes, but you need fancy custom thing for anything more elaborate
If I want an event or something to happen when it is not a specific condition, I put a "!" in front of it, right?
So if I want an event to not happen on Year 1, Day 1 (i.e. not the very first day) but any day after is fine, would I do "/y !1/u !1/season !spring"? I am not sure if that says specifically not Spring 1, Year 1, or if that says not in Spring, not on the day 1, not in year 1 (all three individually).
"Condition": "DAYS_PLAYED <min> [max]" Replace <min> with the number of days; [max] doesn't have to be there.
https://stardewvalleywiki.com/Modding:Game_state_queries#Date_.26_time
Silly question for you all. When making maps in Tiled, have you seen an issue when you clone an existing tile on your map to use again it creates a new tilesheet reference instead of using the same. I have 5 of the same sheet now
Oh, thank you. That is much more elegant!
No, I haven't (yet?) but curious to know how you do it. Do you ctrl c + v it or like right click to clone?
Right click to clone.
I might ctrl click to find the first layer a tile is on. But otherwise, its all right click
That's odd. I do this and I don't experience having a new layer or tilesheet reference created upon pasting a copied tile.
Yeah. It's such a weird thing. I dunno. Doesnt hurt anything per se. Just annoying
someone should put up a teach stardew modding gig on fivver lol
You can find modding guides in two places:
- intro to modding and technical docs: https://stardewvalleywiki.com/Modding:Index;
- various modding tutorials: https://stardewmodding.wiki.gg.
They are like C# and C++ though and python videos and teachers would be MUCH more helpful also putting it out there never hurts
Just nerd snipe ppl in this channel
the one I just linked to is not? There's plenty of CP tutorials.
Modding a single game is a relatively niche skill compared to learning how to program in general
I don't see a market for this
I'm not saying its unhelpful Its VERY helpful I've been reading it almost all day. I'm saying for little questions here and there and helping to understand the theory/concept its nice to brainstorm with another human vice an article
"Someone should" - be the change you want to see, my dude.
if you want to ask questions that's what this channel is for, and it's also free
(Tbh I associate fiver with insultingly low pay.)
Like, wouldn't get out of bed for that, would rather sell plasma bad
yeah tbh if you need help beyond what tutorials and this channel can get you it's gonna cost a lot more than $5
I'd pay 100$ for an hour of screen share and voice chat
Most of us would rather do our own thing and receive $0 (or whatever trickle of DP the DPers get).
but nonetheless I feel sorta bad asking 100 questions lol but if yall dont mind I thank you all in advance!
Hobby 
Job š®
If you're actively trying to learn people generally don't mind a lot of questions!
Only time ive seen people refuse to help is if you ask the same question a number of times, or argue with the answer
I guess the issue I have is C# C++ they have variables "if-then" etc it was easier to grasp and it was sorta linear. Maybe I just don't understand the framework/conditions lol Edit: I learned C# and C++ 8 years ago and am still in IT but network operations and not coding so i've lost alot of it lol
Are you familiar with JSON as a syntax?
Hi,
I'd like to ask, when creating an NPC, I wanted to add a mail. It won't trigger any event or do something else (just a debug one), the only thing I want from it is to show it in my mailbox, like any other mail. Sadly, I'm not quite sure what should the code for mail include. For now, I have this code below (or here: https://smapi.io/json/content-patcher/31fb3c80acea439fbd38736eb4a203ff):
"Changes": [
// triggering mails
{
"LogName": "Eleanor - mails",
"Action": "EditData",
"Target": "Data/Events/Farm",
"Entries": {
"{{ModId}}_mail_DebugT": "null."
}
},
// the mail itself
{
"LogName": "Eleanor - mails",
"Action": "EditData",
"Target": "Data/mail",
"Entries": {
"{{ModId}}_mail_Debug/x {{ModId}}_mail_DebugT": "StrojvedouciDenis.Eleanor-DEBUG:mail_Debug"
}
}
]
}```
However, for some reason I don't quite know, I can't trigger the mail (just sleep to next day is correct, right?). I guess that I missed some part of the code (inspired by SVE's `Mail.json` file as I found https://stardewvalleywiki.com/Modding:Mail_data not providing enough information, if any; wrong wiki page?), but I don't know.
Would anyone be willing to help?
I'm not š®
That's the old fashioned way to do it
Button made a guide for some of the basics of understanding it! https://stardew.button.gay/tutorials/json
"x {{ModId}}_MailKey": "null" if you must
The x sends the mail
But people tend to use trigger actions now
the UI looks like the learning python stuff I've dabbled in as well looks really nice thank you! I'll give it a run
So in general I would not use SVE as a code example because it's very complex and isn't necessarily up to date on best practices. You don't actually need the event to trigger mail anymore.
Old way? Then may I ask, how does the correct one look like?
Contribute to atravita-mods/StardewMods development by creating an account on GitHub.
When I'm looking for examples I typically look for a small mod that's doing the same thing I want to do.
e.g., if I want to add crops, I look for a mod that adds two or three, not, say, Raffadax or Cornucopia
Makes sense
Cant thank you enough the 5 minutes i've been in this and its cleared up a number of questions I had!
Yeah, so this is the correct/best way how to add the mail's triggers, if I got that correctly, but I don't see f.e. the mail text itself nor anything that would trigger it. Or am I just blind?
the main thing I'd say about json (and CP mods) is that it's an object notation, rather than a programming language, so it just describes a static thing that is read by another program
Either way, thanks for providing that link.
(though reading up, button's tutorial presumably covers that)
correct, you do still need to edit both the triggers and the data/mail itself
(is my understanding)
https://stardewvalleywiki.com/Modding:Trigger_actions for how to actually send the mail
https://stardewvalleywiki.com/Modding:Event_data#Event_preconditions for "do not use the x/SendMail event precondition" š
@flat sluice discord nuked my reply @ i guess
And I should do that by the way I did?
@flat sluice You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
trying to figure out if I want to get back into C# or stick with JSON
Thanks, Governor!
To be precise, I should remove the
{
"LogName": "Eleanor - mails",
"Action": "EditData",
"Target": "Data/Events/Farm",
"Entries": {
"{{ModId}}_mail_DebugT": "null."
}
},```
part, rewrite it with the provided example and keep the
``` {
"LogName": "Eleanor - mails",
"Action": "EditData",
"Target": "Data/mail",
"Entries": {
"{{ModId}}_mail_Debug/x {{ModId}}_mail_DebugT": "StrojvedouciDenis.Eleanor-DEBUG:mail_Debug"
}
}```
part?
Pretty sure you should remove the x precondition since that's an event thing
just a sec, let me grab an example from my mod
your key should just be the mail's id: "{{ModId}}_mail_Debug": "mail contents here"
json files' data is read by C# mods (usually CP specifically), so technically C# gives you more control, but if you just want to edit the game assets, CP is a lot more direct about how to handle that
so swapping textures, adding objects/NPCs that act like the other stuff already in-game, etc, is a lot quicker/safer to add via CP
And I am supposed to write that where, exactly? To the event-like part or somewhere else?
Here's a trim from my Elliott mod that adds four letters: ``` {
"Action": "EditData",
"Target": "data/mail",
"Entries": {
//Penpal letters
"elliott_penpal1": "{{i18n:elliott_penpal1.text}}%item conversationTopic elliott_writing_letter1 7 %%[#]{{i18n:elliott_penpal1.title}}",
"elliott_penpal2": "{{i18n:elliott_penpal2.text}}%item conversationTopic elliott_writing_letter2 7 %%[#]{{i18n:elliott_penpal2.title}}",
"elliott_penpal3": "{{i18n:elliott_penpal3.text}}%item conversationTopic elliott_writing_letter3 7 %%[#]{{i18n:elliott_penpal3.title}}",
"elliott_penpal4": "{{i18n:elliott_penpal4.text}}%item conversationTopic elliott_writing_letter4 7 %%[#]{{i18n:elliott_penpal4.title}}"
},
},```
the i18n part is where the actual text is, you can ignore the conversationTopic bit if you don't want a CT
I've never messed with json always enjoy learning new stuff... plus my C# knowledge is probably painfully outdated lol Thank you!
So this code adds the mail itself, but I should do triggering that mail with the code like it is here: https://github.com/atravita-mods/StardewMods/blob/34f5e2013f95aba2c980c9dcf6ef44f0f96654be/ContentMods/[CP] Spam Mail/assets/sendmail.json#L372
Am I right?
oh, sorry, that was meant as a follow-on to what tia said. this patch:
{
"LogName": "Eleanor - mails",
"Action": "EditData",
"Target": "Data/mail",
"Entries": {
"{{ModId}}_mail_Debug": "StrojvedouciDenis.Eleanor-DEBUG:mail_Debug"
}
}```
Yeah, now I got that.
I've been searching for a while now, and is it true that there's no true solution for knowing what quests have been completed/knowing when a quest is completed? I want to send a letter when a quest is completed but I can't see a way to do that? or am I just looking at things wrong...
i think that's right. there's no trigger for a quest being completed, and once it's completed there's no record of it left to check.
one workaround is to go one level higher and attach the thing you want to do (send mail) to the thing that completes the quest (e.g. an event) instead of to the quest itself
Hmm that's unfortunate, I'll have to settle for just the json then. Thanks though!
If it's a quest you created you can add a trigger action to the end dialogue to set a mailflag
I have just used a super simple LostItem quest which functions almost exactly like Robin's axe quest. Is it possible to attach mail to that or do I need to restructure the quest slightly
if nothing else, it seems like quests generate a conversation topic when they're done? if so, a trigger action could check for that at DayEnding to send mail
Game1.player.autoGenerateActiveDialogueEvent("questComplete_" + this.id.Value);```
Nice. I'll look into this. Thanks
I've spent the last hour writing a complex system which tracks the QuestLog and caches the last known data of any quests that are removed, including whether they were completed or removed without completion. I was in the final stretch of figuring out how to save data to disk when I thought "maybe I should ask if there's an easier way"
This has happened twice now where I do way more work than I need to lol
I think this kind of setup should work, though I haven't tested CT stuff much
"Action": "EditData",
"Target": "Data/TriggerActions",
"Entries": {
"{{ModId}}_QuestCompletionMail": {
"Id": "{{ModId}}_QuestCompletionMail",
"Trigger": "DayEnding",
"Condition": "PLAYER_HAS_CONVERSATION_TOPIC Current questComplete_YourQuestIDHere",
"Actions": [
"AddMail Current {{ModId}}_YourMailFlagHere tomorrow",
]
}
}```
or just set a flag to check later, etc, depending on the specific setup
(or whatever the C# asset-editing setup would be if you're on the code side
)
Are conversation topics removed if you have the conversation? Or does it stay in memory for the 4 days I'm seeing on the wiki?
they're not tied to any specific NPC (or actual dialog) and basically work as temporary flags, so they should persist until the expiration date
thanks, esca! i wrote the current version of the dang wiki section on how CTs work and i forgot there was a questComplete auto-topic 
hell yeah, thanks for the help guys
(Just fyi. There are events raised by basically every net class.)
Yes, I did try Game1.player.questLog.OnElementChanged first but after hooking that up to a Log() I was not seeing any changes when I cancelled or added quests so I gave up on that
I was very likely doing something wrong but I couldn't figure out what
Hm isn't there new quest complete events
For each type
If u be in C# then u can use those, many previous answers were based on doing stuff in content only
Tbh content only hacks also are useful in c# land
Like, for a lost item quwst, you bet I would have just dropped an $action AddMail in the dialogue you get when you return the item
oh my god this is possible?!
man
definitely a cleaner option than a trigger, if you can throw that in 
that especially sucks I missed that, cause I was staring at that part of the wiki for so long
but there it is, right at the top lmao
Hey! Can anyone tell me how to schedule āfunLeave/jobLeaveā data for a custom NPC spouse? Iāve done it backwards Iām sure.. I put the dialogue in and just kind of expected him to go off and do one of his usual days randomly at some point during the week, but when I tested it he always just stays on the farm so Iāve obviously missed out some important information. Any advice appreciated! Iāve almost finished this is pretty much my last hurdle š®āšØ
You do need to set him to go somewhere in the married schedule
(I put in MarriageDialogue.json āfunLeave_nameā: ātextā etc)
The dialogue json is only for the lines spoken, not the actual NPC movement
I thought so, do I need a separate json file for marriage schedule? Or can I lump it in with the normal schedule?
jobLeave is also only used by Elliot and Penny. I think I saw that if you wanted to use them for an NPC, you need to use C# to make it work
You can still use fun_leave to make your character "go to work"
Got it š thank you
marriageJob is the schedule key that needs C#, you can still do the rest with a schedule starting with the marriage_ key
So would I just add fun leave to the normal schedule? Sorry for all the questions. Itās my first mod. Itās been a journey
Ahh okay. So āmarriage_funLeaveā?..
i have been summoned 
the funleave/funreturned is a very specific key
in Character/Dialogue/marriageDialogue<NPCNAME>
funLeave_<NPCINTERNALNAME>
funReturn_<NPCINTERNALNAME>
Actually I was wrong! I use marriage_<season>_<day>
^
i think what's also missing context is:
Correct, I was typing up an example, funLeave is not a schedule key
Characters/schedules/<NPCINTERNALNAME>
is where you put the schedule for them to physically move
that's their dialogue if they leave the farmhouse
if the schedule demands it
Yep, doesn't matter what they are leaving FOR in the schedule (fun or work)
The game doesn't know that distinction without C#, so it's all "fun"
You would not use fun anywhere in your schedule key, if they are leaving the farm while married, it's assumed
Right, so in the marriage dialogue json I put āfunLeave_nameā: ādialogueā? Iāve got that part. And in schedules I put what? š sorry itās not sinking in
Does npc internal name just mean their name?
Marriage schedules ALWAYS end with /bed
So for example, if X is going to the saloon on Friday night, you would use marriage_Fri as the schedule key, and it goes in the normal schedule file
Gotcha. Would you just do this instead of funLeave then?
i see there is a disconnect
funLeave is used as a DIALOGUE KEY only, not a schedule key.
Iām sorry š
Ohh okay!
those are all of the valid marriage dialogue keys
So you can keep that in dialogue but you ALSO need a schedule key starting with marriage_ that takes the NPC off the farm to even get the game to use the dialogue line
I can't really explain it any more clearly than that, I am fighting a migraine today
there could be more added in 1.6+ but i haven't bothered to add them because if you want to write more dialogue than that, there's better ways (like randomization)
Okay I think I get it now. Thanks everyone I really appreciate it šš¼
im writing my first event and i think im almost done ><
im trying to have the event start in the quarry mine entrance specifically, but its technically connected to the regular mine entrance. does anyone know how to specify that?
Set the map to the mine, then move the viewport coordinates to be where the quarry mine entrance is
wouldnt that still trigger the event when they walk in the normal mine entrance though?
I think there's an event condition where it only starts the event if you enter a map on certain coordinates
okay, ill look for that. thank you!
No problem!
Query: I know Content Patcher (or Smapi) added in the option to set three gender options in dialogue, I think using this code: ${Mr.^Ms.^Mx.}$ but how do you set the game to recognise that you are using the third option? Is there something else you need to do in the content pack, or can I just include the code within it? (code taken from Disappearing Villagers, a new mod that includes it)
Let me know if I'm doing this the wrong way, but I'm attempting making tokens again. This is based on a set of dynamic tokens I wrote in my JSON.
The name to call I'm trying to call in my JSON is sevenA, and in my C# code, I put a string that's meant to put 700 in the code.
I originally did this in my code by using {{7am}} which turns into 700.
What might I be doing wrong? 
There's an undefined gender option, though player normally cannot access it
I think undefined was made so modders could C# their way into making it functional
Is there an alternative schedule debugger since GIMA doesnāt work in 1.6? š„ŗ
I just need the get schedule command
has anyone actually made it functional? Will adding this code to the game work, or for a gender neutral option am I better to just re-define the gendered lines as I have previously done?
I don't know of anyone that's made it work
was it... GNT? i don't remember the gender mod
okay so maybe I'll just stick to my old way
where's tia
https://www.nexusmods.com/stardewvalley/mods/722 gender neutrality mod i think>
You should use the new way because u can have less dupe text
This is true even if you do not set the third value
But since undefined is 1 value while ppl can have various pronouns, the gender neutrality mod provides tokens that ppl can use
I think it just edits gendered lines
I feel several ES writers are adding in options to config, but i also like to minimize config options
undefined has existed for gender for ages, the dwarf uses it
It'd only work through modding
ah, i have misread
adding a entirely new crop you need to also have Json assets and use Json assets "formating" from their github right? its not just content patcher
No
json assets is no longer necessary
content patcher can now do the job of several old popular frameworks
using json assets for a modern mod is not recommended
mmm maybe im blind.. I missed the fields in the wiki but on json assets github the fields are right in my face lol
content patcher makes edits to the game data. it's a generic framework not geared toward adding any particular kind of thing
if you've unpacked your files, you'll see there's a Data/Crops json and a Data/Objects json. You can edit those two assets with content patcher
along with any of the other data files you find in there. or map files. etc
Yup I unpacked them! maybe I'm misunderstanding..š
it can be a good idea to find a small mod that already does the idea you want (adding a crop) and seeing how they did it
as long as the mod was made after 1.6 ofc
right ok so creating a json and inside content.json you would want to "load" the new crops with the target being data/crops. and the from file field (this is the json I created)
You want to "editdata" to add new crop data
you "load" your new sprite assets (images)
ahhh so loading spites and editing (basically the games code to make changes to vanilla or ADD whatever your trying to do)
you only really want to use Load if the asset doesn't already exist, because if you Load into an asset that DOES exist, like Data/Crops, it will replace the entire Data/Crops with your file
I was thinking load was like in a twisited way of thinking about it "injecting" your new data
yeah dont want to do that lol
EditData will edit the data of the existing Data/Crops
and will not involve any fromfile
I'm probably over thinking all this I've been staring and reading the wiki for hours and this is all I got lol...
i'll take a look
Thank you
how do I make a mail with question fork event?
i'm really confused
only if you choose a specific answer
you've got the general idea to start, just make sure you read the EditData documentation! it should hopefully clear things up more
Is it possible to conditionally change an NPCās home coordinate in 1.6 or will that cause bugs and death and chaos?
iirc as long as they have a fallback home that doesnt change its fine
Right now I am getting bugs and death and chaos and Iām not sure if thatās the reason or if itās something else
just in case
I grab mods off nexus that add a single crop(within a week or two upload date) take a look at the files theres no content json though... crops and objects folders and crop and object jsons in them but theres no editdata anywhere how is the data/crops being edited lol for these new crops? this is why im confused I think lol
{
"Id": "Default",
"Condition": "PLAYER_HAS_SEEN_EVENT Any {{ModId}}_RydenRescued",
"Location": "Custom_Malha_Castle",
"Tile": {
"X": 6,
"Y": 5
},
"Direction": "right"
},
{
"Id": "Ryden_WashedUp",
"Condition": "MINE_LOWEST_LEVEL_REACHED 120",
"Location": "Beach",
"Tile": {
"X": 49,
"Y": 24
},
"Direction": "right"
}```
with this he keeps spawning at the beach at 6 5 and of course that's on a building tile so it gets super frazzled
Which makes zero sense
How do you write a fallback home?
by fallback i just mean like in the same way the spring schedule key is used if no other valid key is found
if the player has not seen that rydenrescued event and has not reached mine level 120, then they have no home
but they need a home
so just make sure there is always at least one home that will be true for them to use
Technically there is always a fallback home
the town, right?
you're probably looking at a JA (JSON Assets) mod, which was a framework for managing new objects prior to Stardew 1.6 or so, which reworked the game's assets for those
Are there any other noticeable issues with that home json
Hmmm not sure didnāt have the assets framework as a pre req uploaded last week
can you post a link to the mod?
Sure!
they might not have tagged the reqs correctly, but you could check the manifest.json's ContentPackFor to see which framework reads it
JA packs have a particular folder structure with subfolders for each item category, etc
that has Json Assets in its requirements
that one also does
sorry I think this is what I was looking at but the manifest is
yeah I see that now
so they are using old frameworks..
You should follow a content patcher crop mod instead yeah
ok gotta look at them more carefully then
cornucopia afaik doesn't depend on JA, so you could glean some information off of that, but crops are convoluted
tbh im kinda surprised that you managed to pull 2 recent JA mods
Cus they had crop in the titles
it's seeing a resurgence 
clicking through the crop category itself, it looks like a bunch are still using JA
(especially the small ones)
Cornucopia is a mod that adds a lot of crops but i was hesitant to suggest it bc it can be very overwhelming
yeah was tyring to find a 1-4 crop mod to get an idea
(Mouseear cress.)
(ill reword: im surprised theres still that many people using JA for crop mods as we near a year after 1.6)
(Also 6480)
Eh, it's easier
so is making an xnb mod
It's probably people that don't wanna update to 1.6 standards
The modders I mean
their reasons dont make it any less surprising to me
Making an XNB mod sounds like way more trouble than it's worth
looks fairly small relative to crop mods
making an xnb mod is easier than figuring out content patcher from nothing
not allowed to be discussed in here
so, delete that link
No problem 
You have unpacked the game right
A lot of content patcher is just look at game and use editdata to do more of it
mouse-ear does use spacecore crop extension data, but you can probably ignore that part while using it as an example (not that I make mods like this)
Once I can grasp the concept Iāll be fine just finding the entry point difficult lol
Esca crop mod when
yeah that's a part of the convolution
Chu farm map when
oh me next what mod am i assigned
seeds + crops need to be the same iirc
npc mod
Pollen Sprites drops seeds by category from your installed mods, that's like a crop mod, I'm done
does that couint though if i was already planning on it i thought atra was giving people work they didnt wanna do 
i thought it was just "something the author hasn't released" delegations 
Iāll check this out
tbh i just don't wanna deal with crops so that's why mine is just "oops all trees" because doing that is convoluted enough for me 
Isnāt the concept the same though?
trees don't have some fields that crops do
Trees is a whole other asset
there are similar elements between the data types, but yeah, separate assets with different options
I mean as far as adding them to the game itās the same how they work inside the game is different but thatās just writing in different fields right?
yeah the EditData concept is the same
some data is just more annoying to think about
Fair lol seems I went straight to the most annoying one
i will disrespectfully stare at data/machines from a distance
(just noticed that my 20+ wiki bookmarks didn't include crop data
)
https://stardewvalleywiki.com/Modding:Crop_data
being the theoretical centerpiece of the game, they have a bunch of options and some are a little unintuitive, e.g. how growth phases are defined
though really that one just confuses me in C#, because the "crop is done now" code is ambiguous
Scoured that page too
Was trying to find the prices like seed price sell price quality price buy seed price
ah, that's the other odd part, since seeds are a basic "object" separate from the "crop" that's actively planted/growing
Hey! Question for Map nerds (because I might just need my SMAPI updated from .9 to .10) - Anybody else been seeing issues with tiles I've placed mirrored in Tiled showing up in their original orientations?
Right but then the object of the crop the fruit from it would have to have a sell price be affected by skills for harvest higher quality
Save as tmx not tbin
so there's the seed object that needs certain definitions to act like a seed, then the crop that's actually growing, then the object(s) that are produced when it's finally harvested
which basically means a bunch of definitions at once, vs some simpler item types
Seed one object crop second object I imagine the crop fields is where prices would be but
So like 3 objects per crop
It is saved as .tmx, I don't use .tbin for anything
I think the prices are all in object data, so the seeds and produce each have their buy/sell prices but the crop data doesn't affect it
Oh yeah, update smapi
and skill/quality bonuses are probably percentage-based and done automatically, if i had to guess, but I haven't actually looked at that 
Growth stage etc for the plant is an object produce second object for selling and seeds 3rd object for buying (obviously you can sell back seeds but keeping it generalized)?
pretty much, yeah; when I say "object", I mean the entries are in Data/Objects specifically, for simple in-game items like seeds/food/produce/etc
whereas data about crops (how they actually grow when planted) is an entry in Data/Crops
so for one custom crop, you basically add "Custom Crop Seeds" and "Custom Crop Produce" entries to Data/Objects, then "Custom Crop" to Data/Crops, 3 things total
(aside from more fiddly stuff like that Spacecore addon data in the mod earlier)
Right ok Iām starting to grasp the theory lol and then all the fields are on the wiki so thatās easy enough
Next part is pixel art which Iām awful at so thatāll be fun lol
Some kids would make pixel art in Microsoft paint I was the kid that scribbled and used the paint can to fill in all the random spaces š š
I thought MSPaint was more well-known for making dank memes than pixel art.
silly question. to call the cursors tilesheet. I cant just reference cursors.png. So im assuming I need to manually call / load it in my content file. Yes?
what do you mean call it. what are you trying to do with it
Im trying to use tiles from it in a map. Like i would with Springisland_1 or something. But those are already in maps/ so i dont have to handle differently
Wait, what could you possibly want with the Cursors file for map-making?
by default, you cannot use any tilesheets from anywhere that isnt the Maps folder in your map, without making a separate copy of that tilesheet to use (which means its not compatible with recolours)
there is a mod to allow this though
Rockslide
Needed it to make this
Huh, that's wild, I know Cursors has literally a little of everything but I didn't expect it to have map features that are only available in Cursors (assumed they must have been duplicated like the tree).
Well, as they said, you have to use a mod dependency for it.
(though there is a noticeable seam on the right there if you care about that)
Late reply because I haven't had internet access - I did report it, but Nexus didn't do anything about it since it turned out to be just the names (even though it's blatantly obvious that it's taken from mine given that their mod previously required mine and it's exactly the same number of items with exactly the same names) and the thief has been taunting me in DMs about it š I'm doing a big overhaul of Star Fragments though with a bunch of new content, so the thief can live with their mod being stolen and unnecessary.
anyone know a fix for CP Content packs UI in game being huge and not letting me see the options to reload patch š worked for a couple minutes now its idk lol
Oof. I'm sorry to hear that
I'm not sure what you mean by content packs ui
That's just a console command, there's no UI
I'll take the console command š® but there is a mod that gives a UI š
Huh interesting, never heard of that
Most ppl use a text editor + patch reload from smapi console
its pretty neat but I didnt know there was console commands to reload patches is there a list of SMAPI commands or something? š®
yeah just type help in the console
All C# mods can register their own console command if they want, patch reload is from content patcher itself
... ui 
There's also a list of console/debug commands on the wiki š
Debug is slightly different, those r commands from game itself
In a year or two, all UI made before winter 2024 will be deemed ugly.
for being inside CLIs all day for work... idk why i didnt think SMAPI had commands.... or even was able to take my inputs...
Ah right, I misread. Yeah, CP debug commands are in the CP docs š
The console commands mod let u do debug whatever
if i can make pretty embellishments in stardewui you've got a whole new cornerstone for payouts
now if only I could tab out commands and ? them LOL
No payouts. But I'll take the uniques.
You can just run sdv in windowed mode
alt enter 
Focustense when is stardewui gonna support textmate syntax highlighting \j
Gotta let me edit sml in me sdv game
i'm already contemplating that spinning ui thing as an april fools toggle tbh 
You mean like... a text editor in the game that highlights its own syntax?
That's very meta, yes.
(The non-joke answer is... probably never. I'm not even sure if I can do multiline text input, although that's at least a maybe)
Yeah it is joke, though u did have rich text somewhere on roadmap right
For display only
Yes, I still do. It was going to be in 0.6 but then I found a ton of other things I wanted to put in right now to support the RM update.
So the 0.5.1 update turned into a 0.5.5 update and is probably going to be released as 0.6, and everything else gets bumped to 0.7. (I'm picky about versions, yes)
anybody know if the game has an "OK" string? And if so, where?
Come to think of it, that sounds more like your kind of project. In-app JSON editor.
I found it
I'm not sure if there is purpose to have it all in game yet keep the json learning curve 
There probably isn't, it's just an excuse to fool around with regular expression parsers.
It would be the most direct way to access all the game data types tho, for the hypothetical in game mod maker
Someone was working on an editor thing IIRC, but I haven't heard hide nor hair of it for some time.
tbh the json learning curve is what weeds out the weak /lh
Editor is too complicated, can't someone just train an LLM to do it for you?
tried turning the oversized shirt sleeves from GH Peach Body into a FS sleeve variant and adding a brown stripe, but ingame it's invisible
not sure what's wrong as the sprite sheet looks the same as the other FS sleeves in the pack for it, and I've got the files named correctly
Any links for keeping quality in artisan machines from crops?
You want a mod or you want to make a mod?
Thereās a couple out there already. I just started today and made a mod that added 4 crops didnāt seem sensible to ask them to add compatibility for mine š š so I was trying to make one
Plus itās fun
So your mod adds new artisan products?
If you're just talking about the vanilla wine, jam, etc, it will already be compatible
It doesnāt but the new fruit(crops) I added would just be made to wine jam etc
Then it should already work with those other mods
You didnt add any machine data at all, right?
No no
So yeah it should work then, because those mods would have already edited the vanilla data for making wine, etc
Are you having issues with testing it?
I was looking for a mod to test it in and reading in the posts section a lot were talking about compatibility now that your saying this it seems I jumped ahead and should have just tested it with https://www.nexusmods.com/stardewvalley/mods/21278?tab=description
I don't get it; by default, most machines don't preserve item quality. There's a specific flag on the machine data for doing it and it's usually false. If you want to preserve quality, need to use custom machines/rules.
Yes you should just test it
Ok, so that's a mod that changes the machine rules to preserve quality. As long as your newly-added crops follow the same rules as vanilla crops, it should just work.
Yeah I mean itās the most basic mod that could be created I learned and made it today š
(It's odd that the screenshot puts the fish smoker in there, since that's the one machine that already preserves quality, but whatever)
Congrats on making your first mod, btw!
Thanks! All the credit goes to the folks in here who put up with all my questions lol
another question
do non social npcs NEED a dialogue file? they wont be speaking outside of the shop interface and the intro event (which has all of its dialogue included)
Don't think so but don't quote me on tjat
okay cool cause im tired of writing my i18n file for now š
@wanton pebble: update Saloon Breakfast if not done previously (25h ago)
Fairly certain that if your NPC doesn't have a dialogue file and is social, they'll just say "..." when spoken to directly
Should be able to just make them nonsocial if they only exist as a shopfront though
Does anyone have any post-GIMA schedule debugging tips? My NPCās schedule is in the fritz and itās driving me bonkers
Does anyone know of any guides on beginning to create smapi mods?
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itās easier to start with making content packs, since you don't need to learn programming.
Thank you!
there are also assorted tutorials on the (separate) modding wiki. what are you thinking of making? maybe we can link you to something specific
(oh, the modding wiki tutorial category link is in there! silly me)
Im wanting to work up to eventually make a new town
Im into creating new npc's, buildings, etc.
"work up to" is a good idea š even a single standalone NPC is a lot of work and can be overwhelming if you're new. take your time and don't forget to have fun!
It seems pretty stressful but im already having fun just trying to learn!
(you'd want to look further into content patcher lest ye attempt to reinvent the wheel)
!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!
any clue why this would be happening?
the trough tile is set to T in it's options
the kibble is just reskinned hay being auto fed
did u try exploding these
can you post a screenshot of your map in Tiled
they just respawn the same way
sure sec
only thing i can think of is maybe it doesn't like being on the back3 layer?
Trough checks Back specifically
I'm surprised it works at all
hah, ok
the extra layers are supposed to be purely decorative
Does anyone know what namespace/function/file in the decompiled code that the game calculates the player's end of day profit is in?
It's in Game1 somewhere IIRC
hm, still doing it
_newDayAfterFade
let me crack open one of the animal interiors
hmmm, seems right. let me check the decompile
I see absolutely no reason it wouldn't work, but I have a thought- do you also have Trough on the top tile of the feed bins?
i do not
i just did a check against every other tile on both sheets to check even
hell this WAS working fine the other day and somehow started doing this along the way so i'm puzzled
does the hopper location effect it at all?
like, it shouldn't, right?
can you post your building data just in case
as far as I can tell it just checks every tile on the map for Trough on the back layer and dumps hay there
I have no idea what's happening here
can send you the map if you wanna look
maybe i should make another barn as a test and make sure something else isn't just broken
yeah ok, deluxe barn working fine
that's baffling me then what the hell
also confusingly, i can manually place hay in the correct spots
confounding hovering kibble
hm, strange
guess i'll donk around with making all my other content for this mod instead awhile
Received this error from my i18n file, this is my first time using these. can anyone help?
!json Likely a typo somewhere
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.
if i had to guess you missed a comma, but please post your json using the uploader
!log (also this for future reference for posting error logs)
Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.
Please share your SMAPI log file. To do so:
- Open this page: smapi.io/log.
- Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
- After uploading, it will show a green box with a URL to share. Post that URL here.
Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didnāt occur in your last session, please load the game to the point where the issue occurs, then upload the log.
you should really use a program like Notepad++ or VSCode or something that will auto format it for you
I've been doing okay doing it by hand, I actually just forgot to put any formatting in this file LOL. ill check out notepad++, i didnt know that was a feature
Ahoy good people! I've been playing around with some minor tweaks to existing mods and was wondering if there's a way to fully remove the update key from the manifest? When I make a copy/fork for my variation, I've just removed that entry in the manifest, but SMAPI still complains that one doesn't exist
SMAPI will always talk about mods that dont have update keys
Ah, bummer... and I'm assuming the update key is tied to public release on nexus, etc? which personal, local mods/forks won't ever have
you can turn off checks for individual mods if you really want but you have to edit smapi's config file yourself
if you wont ever release it the only issue is an extra line in the logs
if you remove it, remove the whole section
that should stop it from complaining at you, though it will still be listed as not having any keys, which in your case is okay
probably not worth the hassle of trying to exclude it, I'll just learn to live with it š just nice to have clean logs
i thought that was the complaint
I've removed the whole line for "UpdateKeys", so it says it doesn't have an updatekey... which I already know š
if you have an empty array, SMAPI will give you a warning(?) instead of just listing it
that's the best you're gonna get im afraid, unless you fiddle with the smapi config
you coudl maybe put it on nexus privately if you cared to, i guess?
i always use an empty array for my wip/test mods and it always just lists it
oh, I didn't realise you could do that...
huh, maybe I'm misremembering. maybe it only does that if you have an invalid key
putting it privately on nexus is more work than tweaking smapi's config
i agree
and might not even work if SMAPI tries to check it but cant
yeah i dunno if it would actually work, bad solution idea lol
it's a variation of a greenhouse mod, keeps it vanilla but just makes the tillable space 10x15 for neatness and symmetry ... it's nothing big or complex
there is no actual "private mod" function on nexus, cryo just meant uploading but not publishing
i'll just live with the log message, good to know what the options are/aren't, thanks!
I was looking at editing another modded map, but that one might be a bit more complicated. I just wanted to switch some tiles around, and tried looking at Tiled though wouldn't work as I don't have the original assets to load with it
if it uses custom tilesheets they'll be somewhere else in your mod folder, if it uses vanilla tilesheets you can just grab them from your unpacked content folder
ooh, neat.. yes, it's all vanilla, I'll give that a try, thanks!
TIL that to successfully deserialize a string back into a class, the class needs a default (parameter-less) constructor (you can have other constructors in addition). I took a guess that that was the issue I had been having and it worked! It's weird getting the hang of more and more of C# as I keep going...
Yup
Sweet
until you need to do something complex and unsupported in which case you need C#
you can technically make a Content Patcher mod with YAML too if you want
(theres a mod to make that possible)
Oh right. Yeah I'm not too well versed with C#, my area is more JS.
But if you're coming back to modding since 1.6 hit, be aware that many frameworks that used to be necessary (like JA or DGA or Custom Music) are now obsolete because Content Patcher can do most of that stuff now.
Ah
context tags cant have spaces right
correct
i think theres SplitBySpace stuff that happens during their parsing
for objects it might just replace spaces with underscores itself
Any good articles or guides on sprite sheets? Dimensions etc looking at the unpacked and doing some reading the sheet has to be 64x (16*x) but as far as the actual sprite dimensions inside the sheet when I was counting them they are all different š š
items are 16x16
bigcraftables are 16x32
things like cursors is whatever the ufck
i dont know what you mean by 64x or what you're reading
So a crop seed is 16x16 and I could make it 10x10 but I canāt have the next sprite inside that 16x16 āsquareā
Dimensions for the entire sheet
you should be using your own sprite sheets in which case you can make them whatever size you want
as long as its divisible by 16
assuming its for custom crops
but yes even if there is blank space around your seed sprite, that is part of the sprite
likely want the 10x10 just in the center of the 16x16 grid
Yeah I made a mod that added 4 crops and Iām trying to consolidate them into a sheet just trying to figure out the row column set up lol
I guess whatās confusing is we say a crop has to be 16x16 which mine are but trying to reference other sheets I see crops that are 16x24 and 16x30 š wouldnāt anything more than 16x16 get cut off?
well
the sheet should be divisible by 16 not that the crops are strictly 16x16
when you said seed i thought you meant the Item version of the seed
i assume the crops you're referencing are actually 16x32
with just some empty space on top or below
Itās possible thatās what I was trying to figure out I have all separate 16x16 pngs for each seed and stage of the crop and Iām trying to consolidate it into a sheet and referencing other sheets I guess it wasnāt intuitive for me š
https://smapi.io/log/8c701c720e6946d6b2d117ccdbde3e3a can anyone help me figure out why Smapi can't find my event? I've done everything in the guides ive read and triple checked. im so lost
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 42 C# mods and 7 content packs.
So the sheet itself has to have dimensions divisible by 16 ok and each individual sprite doesnāt have to be 16x16 but that leads to if they are all different sizes how does stardew know what location that exact sprite is in the sheet Iām close but Iām missing something lol
how it knows depends on the sprite sheet in question. like for items it knows to split it into 16x16 chunks. for crops it knows how big a crop sprite should be and splits the image up appropriately
!json can you share your json please?
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.
im not familiar with the specifics of crop data but i assume you can set a spriteindex maybe?
posted!
use the uploader in that governor command to send jsons
oh. icant read LOL
yeah there is a spriteindex, a spriteindex of 0 means it look at the first 16x32 chunk of the sheet. spriteindex 1 means it moves 16 pixels over to the right and looks at the next one. and so on, going to the right and downwards
(tho actually for crops it probably moves further than 16 pixels to the right to get to the next crop, since they come with a set of sprites)
(i was thinking of items which are always 16x16 so it just moves 16 to the right to get to the next item on the sheet)
Yup! You can set sprite indexes
They all seem to be 16 wide itās the height that varies and after you said 16x32 I checked and they all fit inside the 16x32 āboxā on the sheet Iām referencing
I wasn't aware that they varied, thought they were all 16x32. Except for giant crops which are really multiple tiles.
With blank space above or below if it doesnāt take up the whole 16x32 āboxā now I have to figure out if all crops are 16x32 and then I can adjust and index from there or if not idk how tf to index them once I get it into a sheet š
the actual content of the sprite varies they mean, but all within a 16x32 space
Right
no matter what you do, it always assumes a 16x32 space
Yeah, the tile is 16x32. That space may not be entirely occupied with pixels, but it is always 16x32.
it doesnt matter if theres blank space
Ok ok perfect thatās exactly what I was trying to figure out so I just need to space them in a 16x32 manner and I can index them
even if you dont fill the top half of your crop sprite, that top half is still part of its texture
Thank you so much!! Sorry for all the questions itās a steep learning curve but itās getting much easier the more I figure it out lol
thats what this channel is for!
it still says event not found š¦ https://smapi.io/log/1fa4250860934c3f89113aceb8f25618
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 42 C# mods and 7 content packs.
Have you confirmed that you have the IntroLetter?
and also slept a day after reading the letter
i didnt try this, trying now
also to confirm. you need to NOT be in the location of the event when using debug right?
i dont think that should matter but ive not used the command before myself so i suppose i could be wrong
I use the command from the same location as the event all the time
Apparently it can cause problems but I've never run into them
okay, i had an error with the filepath, fixed that. but now its saying my event json is invalid but i didnt change it and the validator says no errors
do data json files need the "format" in them? i read somewhere that only the content file needs that. now im wondering if im wrong
https://smapi.io/log/53f9c0b9d9414294bee4c7da41392082
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 42 C# mods and 7 content packs.
if you're just Loading the event straight from the .json it should just be a json file, not a content patcher formatted json
also you cant use tokens in a Loaded file if you have any in it
its recommended to load a blank json file into the asset and then use EditData to actually put the event in it
also Data/Events/Mine already exists so you're just completely overwriting it
so you should absolutely not be Loading into it
does that include {{ModId}} ? that might be my problem
ModId is a token and will not work in a Loaded file
are you perhaps confusing Load with Include?
I think so
if the file you're loading has a Changes field and patches like EditData and whatnot, you need to Include it, not Load it
got it! thank you so much!
this is my first time making something that isnt just a simple machine
As I recall, the whole "don't be in the location when you ebi an event" is from 1.5 and earlier, so it should no longer be a concern
oh okay cool
yeah, from the Migrate page on the wiki: ebi Fixed event not played correctly if called from the same location as the event.
alright I'm so confused about how forgeable work when harvesting:
if ((bool)forageCrop)
{
Object o = null;
int experience2 = 3;
Random r = Utility.CreateDaySaveRandom(xTile * 1000, yTile * 2000);
if (whichForageCrop == "1")
o = ItemRegistry.Create<Object>("(O)399");
else if (whichForageCrop == "2")
{
soil.shake((float)Math.PI / 48f, (float)Math.PI / 40f, (float)(xTile * 64) < Game1.player.Position.X);
return false;
}
if (Game1.player.professions.Contains(16))
o.Quality = 4;
...
}``` wouldn't o.Quality = 4 cause NPE if whichForageCrop is not 1? where is o coming from?
thank you so much guys! I got it to load!!! now i just have to fix the event itself š
whichForageCrop can only be 1 or 2, I think.
The comments are not consistent with its usage.
that's interesting
I believe that code is never called for whichForageCrop that's not 1 or 2
other forage crop already got replaced with the object on NewDay
I see
I believe it can be other values (see getRandomWildCropForSeason)
If I want to make sure an event can be seen the same day as the one it depends on, is it best to use a mail flag for that?
nevermind I think I found the answer searching a past discord conversation
at least I think so... if I put "AddMail Current {{ModId}}_MyMailFlag received" in an event, does that mark the mail as having been read immediately, or not until end of day?
immediately
OK, so I guess I'm back to square one... should I just make it so that my first event only triggers in the afternoon and the second event in the morning (or fiddle with what days of the week each can trigger)? or is there an easy way to prevent them from happening on the same day.
ideally i'd like both events to be available at any time, on any day, as long as you have met certain other conditions
i don't want to actually send a letter after the first event
you can just send a different mail flag then
Is there a reason why you're not just using the has seen event precondition for the 2nd event, if you want them available one after the other?
it is a precondition, i just want the player to 'sleep on it' and not go from one event and see the other event
Ah, I see
like there needs to be a feeling that a little time has passed at least
i thought you said you wanted to make sure it can be seen the same day?\
What about a time precondition?
no the opposite
Yeah, Button, that's why I was confused.
i see now that i mistyped
i assume this was a typo then
Could set one to be available in the morning and one in the evening?
sorry
if you pair has seen event with the evening time, I think that'll satisfy your requirement.
does your mail flag have an actual letter attached to it, or is it just an invisible flag?
that's fine if that's the solution I was just asking if there was something more elegant. the mail flag was just an idea to make a precondition that wouldn't trigger until the next day, but as you said its immediate
well, if it has an actual letter attached, you can put it in their "for tomorrow" inbox. or just use that mail flag to trigger another mail flag the next morning
You can add the mail without immediately receiving it
only issue with adding it Not to the received inbox is that it needs to have an actual letter, because it will appear as a letter icon on the players inbox
oh yeah I guess I could add an end of day triggeraction for it? ... I think to keep things simple I'll just use day of week or time triggers to separate the events
thanks for all the feedback and apologies again about the confusion from my typo
private void OnAssetRequested(object sender, AssetRequestedEventArgs e)
{
if (e.DataType == typeof(Texture2D))
{
e.LoadFromModFile<Texture2D>("assets/bonched.png", AssetLoadPriority.Medium);
}
}
you're welcome
true that's a possibility I hadn't thought of
bumping
Do I have to use the Append operator for a new entry to be added to the end of a list of values? Or does CP handle that?
can depend on what the exact thing you're changing is
Just adding a new letter to Data/mail
But I wasn't sure if it would just get chucked on the end by default, because I'm not modifying an existing entry?
the new entry gets added to the end by just using EditData yeah
Okay I am very dumb, but I don't know why my letter won't show up haha
Anyone have the patience to deal with me rn?
[18:35:24 WARN Content Patcher] Can't apply data patch "(CP) Rainy Day Clothing > EditData Data/mail #1 > entry #1" to Data/mail: failed converting entry to the expected type 'System.String': Can not convert Object to String..
This is my patch:
"Action": "EditData",
"Target": "Data/mail",
"Entries": {
"RainTomorrow": "ADVERTISEMENT:^^KOZU 5 have predicted rain all day tomorrow... and they're never wrong!^^Stop by Pierre's General Store TODAY and check out our new rainy day gear![#]Rain Tomorrow",
},
"When": {
"Season": "spring",
"Day": "2",
"Year": "1",
},
},```
I can't make the mail key spring_2_1 because that's already used by Willy's note
can you upload the file to smapi.io/json and link it here? i don't know what the issue is but that could help
As I recall, that code just adds the letter to the game's mail data (and does so on the second day of year 1). You have to also actually add it to the mailbox. I think you'll want a trigger action for that - they can add mail to the mailbox.
the error they have is a json parsing error, not one related to actually getting the mail
Oh, then I think it's one or both of those commas at the bottom. The json parser will probably show that
(that's what I get for looking at this on my phone and not scrolling up enough)
that would give a different error from the one they posted. its just difficult to point out without a full json though
"Can not convert Object to String" means you have a {} data model or similar where you shouldnt, but that code looks correct to me, so its likely somewhere else
(or perhaps a case of editing the wrong json and not actually the one thats in the mod folder)
Will do in one sec, thank you so much
FWIW, I'm just trying to update this mod because it relies on depreciated mods
(My mod)
Ah, okay! I used MFM to handle all of that for the previous version haha
are you 100% sure you're editing the right file in the right folder and not a copy of it?
(unrelated, but you should put your mod ID somewhere in your mail key)
(and in your clothing item IDs and shop entries)
thats not how youre supposed to add new clothing or item textures either, with the editing the vanilla images directly
again though these are all unrelated to the error you got
can you use object context tags in gift likes? For example, coudl I make my NPC love all "bauble_plush_character"
you can yes
This throws System.NullReferenceException: Null method:
harmony.Patch(
original: AccessTools.Method(typeof(Event), nameof(Event.DefaultCommands.ShowItemsLost)),
postfix: new HarmonyMethod(typeof(Event_command_showItemsLost_Patch), nameof(Event_command_showItemsLost_Patch.Postfix))
);
What am I missing or doing wrong? It's not harmony being null, there are other patches in front that work.
that means either the method you're trying to patch or the method you're using to patch it is not being found
that would be typeof(DefaultCommands)
nameof(DefaultCommands.ShowItemsLost)
as is you're looking for Event.ShowItemsLost
Makes sense, thanks. Thought I need to provide the full "path"
cool thanks. Just making my children love the Baubles plushes
Huh! Are there help documents about how to do it?
It's such an old mod now haha
I didnt get a ping for that but yes its okay
Okay omg I think I'm nearly there
Just not sure how to conditionally load one of two image assets
Loads normally occur at game launch, right?
I tried this:
"Action": "Load",
"Target": "{{ModId}}/Hats",
"FromFile": "assets/hood up.png",
"When": {
"WeatherCheck": "true",
"OutdoorCheck": "true"
}
},
{
"Action": "Load",
"Target": "{{ModId}}/Hats",
"FromFile": "assets/hood down.png"
},```
but the sprite was blank
hey ho, a quick question: how do i make maps load seasonally?
I'd use EditImage rather than having 2 loads, a target can only be loaded once (unless you add a non-exclusive priority to one of the loads)
Someone earlier mentioned not editing vanilla files directly - is that possible with EditImage?
Like I just change the Action (in theory)?
is there something like "Update": "OnSeasonChange" ?
Yes, you'll be editimage-ing your own target
Nope
What do you mean exactly by loading a map seasonally?
There's only "OnLocationChange", "OnDayStart", and "OnTimeChange" for the Update field
hmm dayum since i can load maps on time change i thought i might load maps on season change. 4 diffenrent maps for each season
iirc, any sprite sheets you use in a map that start with spring_ will switch to their other seasonal ones, if the location is considered outdoors
oooooh
you could probably also load other map files with "when" conditions, if needed too, it's just not an update rate
Also can I ask why people are something about bouncer?
It might be a new community meme lol
i assume this got typo'd somehow and people noticed, but idk really
(it sounded like they fixed it and then unfixed it)
thank you i think the season_ solves this :)
Is there a method to manually trigger animals producing their product? Went through FarmAnimal.cs but couldn't find what I need.
Only discovered NetString currentProduce but can't figure out what it needs to be set to. Does it just need to be anything but null?
The code you want is buried in farmanimal.dayupdate
if i rename the png it wont be recognized anymore in tiled and i have to rebuild the whole tiles on my sheet. any way to solve this?
That's where I discovered the currentProduce but I guess I'm just blind and not seeing what I need :D
in practice, yes, a Load without any When conditions should be active immediately
(in a nitpicky sense, I think CP starts applying changes a frame or two after the GameLaunched event, and it doesn't edit assets until code tries to load it
)
even then, I haven't seen anyone try to edit the load screen graphics in a long time, so idr
Open the .tmx file in a text editor and find the line that starts with <image source="YOURTILESHEETNAME" and change the tilesheet name to the new one.
ā¬ļø there are lines like this for each sheet when you open it as a text file
<image source="spring_outdoorsTileSheet" width="400" height="1264" />```
if each of your seasonal maps have a different feature (i.e. an area that only appears in summer) you can load a different .tmx file using a season condition (i.e. "When": "Summer"),
but if the maps are all the same, then the seasonal changes are automatically handled by the tilesheets, as long as the name starts with {{season}}_. If your map has a custom tilesheet, make sure all seasonal variants use that format.
thank you these are both good solutions 
is your map a replacement map or a custom location map?
The only other possibility is shears.doaction and milkpail.doaction?
it's a Playground recoloration that is loaded as EditMap From/To Area
oh, a map patch to the vanilla Town map?
yes
okay, i was going to recommend to not rename the tilesheets at all if it's replacing a vanilla map, but if it's a patch map there shouldn't be any problems
alright, thanks for the thought : )
the majority of FarmAnimal.dayUpdate decides whether and what produce is created, while the tools' doFunction generates the item for non-chicken types, fwiw (basically just this)
ItemRegistry.Create<Object>("(O)" + this.animal.currentProduce.Value);
I tried to write an abbreviation of the day update stuff, but there're a lot of steps involved for cases like eggs 
and quality, picking an rng seed, etc
Thanks, that helps.
If only vanilla code had a method to just trigger that for any animal.
This is where I'm at:
{
"Action": "EditImage",
"Target": "{{ModId}}/Hats",
"FromFile": "assets/hood up.png",
"When": {
"WeatherCheck": "true",
"OutdoorCheck": "true"
}
},
{
"Action": "EditImage",
"Target": "{{ModId}}/Hats",
"FromFile": "assets/hood down.png"
},
{
"Action": "EditData",
"Target": "Data/hats",
"Entries": {
"RainHood": "Rain Hood/Optional extra for your rain coat./false/true//Rain Hood/0/{{ModId}}\\Hats"
},
},```
SMAPI currently says my asset doesn't exist š But it's in the game! And in Pierre's shop! It's just the sprite that's still missing... It's nearly 1am, so I'm heading to bed, but I'd appreciate any nudges in the right direction!
Thank you all for your help!
It could be becuase your png has a space in the name. Some programs don't like to read the space in names for some reason
use an underscore in the file name and code and see if it works hood_down.png
Simple thing to check! Thank you!
No problem! 
Good morning, all! I am trying to add more content and compatibility to my mod with other large mods. but I am getting a token not found warning in SMAPI
"Action": "EditData",
"Target": "Strings/StringsFromCSFiles",
"When": {"Fixed": true,"HasMod|contains=Rafseazz.RidgesideVillage": true, "HasFile:{{FromFile}}": true},
Any ideas on what I may be missing. This is copied from a another mod.
wasn' there a command like "MapType": "Overlay" or so? how was it, i can't quite remember
Edit data has no FromFile for {{FromFile}} to pull from
Thanks!
ah great^^

soon...
We need a good stone boi in our lives
kinda confused on how i'm meant to get screenshots for this mod, really.
What do you mean? :O
like some mods have screenshots showing their content. i guess that doesn't apply for this one, tho. 
for the mod where i got rid of bigfoot
i just screenshotted an empty forest and called it a day
ur right, shouldn't overthink it heh. not like u can really see the monster names while playing normally c:
when... do monsters start spawning if u set the option for it anyway
Hey, I'm super super new to making my own content packs and I have no base understanding of it but I was trying to recolour Daia from RSV (I am also using the seasonal vers of her) and SMAPI doesn't find an issue just in game nothing changes. Please forgive me if this is a simple fix I've just not seen! The mod I'm trying to add is my own '[CP] RSV Daia Edits'. I have all the files I thought I would need but truly I've no idea. Any help would be nice! (Also super sorry if I'm interrupting just trying to consolidate my thoughts.)
https://smapi.io/log/b559579a2ef34e3ea41dcb4ad0795028 , https://smapi.io/json/content-patcher/6477448509f84d74aaf690608f5000e6
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 50 C# mods and 146 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
since i havent added an item to the game yet, is doing so still considered a cp mod? I feel like that might be a dumb question lol
A CP mod is any mod that uses any of CP's features
Yep u can add new objects with content patcher
What specific objects do u want to do?
You're not interrupting! You can't edit other mods assets using your own afaik
i mean you can if they load in the assets you're editing, but looking at the RSV seasonal mod that isn't the case.
better off making replacer files in your case (files that overwrite the original mod)
it'll be in preparation for a fence mod i'm doing -- im focusing on finishing the recolors first before getting to coding though
~~ I don't think that's necessary, it should be enough to use "Priority" in the code.
More on that here:https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/action-editdata.md#overview ~~
Please, ignore my mistakes. Thanks!
However, that would mean rewriting the whole code.
EditData wouldn't help them in this case
EditImage should be better? (https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/action-editimage.md)
Please, ignore my mistakes. Thanks!
Nope, can't target other files in other mods with that. Only if they've loaded it using Load
OH! My knowledge failed one more time... Sorry for bothering and suggesting wrong code!
It's alright, that's how one learns. No harm done!
Please don't ping me in replies, though.
Yeah, sorry for pings, I just keep forgetting to turn them on/off (I have quite a small history of messages on Discord or other social media platforms, so still learning new things, so sorry again, no intention there).
Yeah, It's quite annoying to have to turn them off each time, huh? No worries, didn't think there was.
Yep u can make whole new custom fences, i remember there being a bit of jank with gates tho
no, the jank with gates is that people don't know how to use the gates
like, to the point where I almost want to make a mod to fix that shit
(shhhhh)
you have to place down all your fences, then place teh gate into the fence
that's how you get matchy match gates
oh yeah i'd stuffed that part of my to-do list to the back of my brain.. i still gotta make the gates and recolor those OTL
I noticed that the 'Home' Spawn Rule https://stardewvalleywiki.com/Modding:NPC_data for npc data is optional. If I don't include it, can I assume that a character will default to its first schedule element? If not, is it better to have these set? Is Home only used for 'SpawnIfMissing'?
Thanks!
That is a good question, indeed. If I were you, I'd set it either way, but I won't even try to answer your question because I don't know the answer.
it's technically optional if you accept the default (dead center in town) as a good option
it does not default to the first schedule element
I am making a modding tool to add characters to the game and I want to ensure that I only have necessary information as editable to make it streamlined.
Do you think it's a good idea to allow users to edit the Home option for a character through the UI?
That'd be pretty tricky, especially depending on how the condition(s) the creator wants their NPC to have for their home change
I have a conditional home spawn as well, but it involves Trigger Actions to make it work
I'm going to be completely honest with you - I'm not an wysiwyg person, I'm never going to use your tool anyways
so I'm not in your market
No trouble!
I think I'll go ahead and add it in. Thanks!
The mismatched pixel sizes with that big Grandpa bothers me, as does the general strange use of whitespace like not centering the portrait. But i am also not the target audience here 
How do you envision people testing the resulting (content patcher?) mod?
I see that I've trained you well.
The game has random places that r less than the usual 4x scale which i feel ok with tho
Blowing it up is different than drawing it smol i guess
A second issue is that the grandpa sprite is probably not scaled using nearest-neighbor.
I'm not as Expert at recognizing algorithms as Mr. Graphics, but I'm guessing bicubic or bilinear.
im so confused š my npc was working yesterday, but now it says it cant find a .xnb file? why is it looking for a xnb file, does anyone know?
https://smapi.io/log/6120421079424d8bac5b57ef308a6eb9 - log
https://smapi.io/json/content-patcher/bf0844b0e7f944ec80f516f9dce8b72e - content json
https://smapi.io/json/content-patcher/9fafa85fd0c54056a04b373756542188 - npc data json
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 42 C# mods and 7 content packs.
When the game says can't find xnb file, that's actually a monogame error
For content patcher stuff it usually just means ur files were named wrong, didn't correctly load, or loaded to wrong target
Yeah, it's a misleading error that says "I couldn't find any assets of the correct type/extension and XNB was the last one I happened to try"
is there a way to check why they wouldnt load correctly? I didnt change any of the file path names and i triple checked them today lmao
Oh it is probably cus u only did editimage
On a target that doesn't exist without load
OH
You will want to make the vanilla one load i think
Unconditionally, to avoid any underlying asset not exist errors
that makes so much more sense T>T
And gate nyapu behind the when
thank you! 
just to check, does that mean that my sprite sheet should be load instead of editimage also?
If your target doesn't exist then you need to do a Load
The default priority of Load is exclusive, meaning you cannot do 2 Load to same target
Changing this priority is fine, but ultimately only one Load gets to do anything
Dynamic Golem Rename is now out!
Ever wanted to change how golems were referred to in game? tired of the same old name, want something new? boy do I have the mod for you! That's it that's my sales pitch
Apparently I broke something but I am not sure what...
Report Log
https://smapi.io/log/be027b14f35345d2b8c6d9c281f82cdb#filterHolder
JSON of Special Orders
https://smapi.io/json/none/757ba2e42da8499f9072f2700fbf4aa7
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 124 C# mods and 245 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Just to clarify, it broke your own mod's code or you're looking for something that might've generally broke the game?
looking for what might've caused the special order to nullref
It looks like it's something related to the C# code

This error came from s&s special order time limit code
I don't see how ur regular ol special order could bork it
Maybe ask atra about it? Idk who's the main code person atm

Desty is active over in the ES discord, not sure if theyre here too though
Yeah but desty focus on content side not C#
Desty might be the mod author
Desty handles releases iirc, but the mod had mutliple authors
This would have been a casey question but casey on vacation, doesn't hurt to go ask in ES just in case
oki
Are there any frameworks that would allow you to have a higher quality sprite? For example a 256x256 in one tile?
I think @finite ginkgo is the person to ask
Yeah there's a couple, though I'm not sure what you mean by tile
16x16
But is this a map tile? An object icon?
Map
āEllo, yes, I would in fact be the person to ask, Iāll look into it though not sure why thatād be causing an error
I don't know if any texture upscaling framework that specifically targets maps 
U could try spacecore hd textures on the tilesheet but no clue if that works well
Is anyone here comfortable editing/compiling a C++ library (re the latest message in this support thread about PNG errors)?
Wow, spacecore really has it all.
How do you plan to ship this?
While i think i could probably figure out building it on linux I don't have the knowledge about cross platform stuff
let's try and see how much pain i suffer
Ty pillow i believe in u 
I'm not planning to release it, it's just so we can see what the underlying error is for the affected player.
is it not a c# library? (it is https://github.com/mono/SkiaSharp, right?)
or does it just build to a dll that can be used in c++
Specifically the tvOS version linked? Because that... doesn't even seem to have any source, let alone a header file that isn't empty. I'm trying to find the actual source now, but without knowing which exact version we need...
jellyfin seems to get it from https://github.com/mono/skia (https://github.com/jellyfin/jellyfin-skiasharp-native/blob/master/Jellyfin.SkiaSharp.NativeAssets.LinuxMusl/compile-libSkiaSharp.sh)
All I really know is that the issue is with the extern calls into libSkiaSharp.dll in the game folder, which seems to be a C++ assembly. Not sure where the source code is unfortunately, C++ is a bit out of my wheelhouse.
I'm going for "let's build Skia, and see what it gives us".
(Feel free to discuss in the thread to keep it in one place if you want.)
Which OS?
definitely seems to be from mono/SkiaSharp, that has references to a libskiasharp.dll (as in, a compiled output)
The player is on Windows.
I'm not at home and won't be for a while, so I can't promise anything
No worries, I'm already on it!
I have to say though, wow the build docs and build system for Skia is spooky.
Skia is a massive project targeting way too many platforms, even web browsers, so yeah it's pretty ridiculous at times. libskiasharp.dll is a P/Invoke wrapper, if memory serves - since .NET can't interop with C++ directly. Have to either expose C headers or create a C++/CLI library and I think they did the former.
On a totally unrelated note, I've been searching without success, both in the game assets and on the web, for a CC-* asset of a warning/error sign (like the caution or danger emojis) that's sort-of consistent with the Stardew style. Does anyone have one or know where I can download one?
(It's not exactly hard to draw the shape itself, but I'd never be able to get the shading right)
Can you clarify what you mean by CC-*? Not sure I have ever seen that term before.
Does it need to be Creative Commons, or does any open license work? You could maybe use open-licensed font characters like ā ļøš«š, though I guess they're not really consistent with the game style.
