#making-mods-general
1 messages · Page 486 of 1
If you want to combine your i18ns then do whatever you want
you can tell content patcher to sub in values by nesting your tokens and passing them along
No rule that says 1 dialogue can only have 1 i18n token call
"{{i18n:the-first-key |subkey={{i18n:the-other-key}}}}" and then use {{subkey}} inside the first value
oooh ty!
you can do this to pass arbitrary expanded values to your i18n, which is also how you access values of your CP tokens inside
it's just that i18n is a CP token 😉
okayyy I'm gonna send my code here in a sec bc my brain is short circuiting
meats?
what's the context
I will show a diagram for what I am thinking of
if its the OTHER Context than I am making a Mod that adds a machine where can make Meat without Killing your livestock by instead converting your livestock's Produce INTO meat
it is for dialog stuffs, questions specifically. basically i have half of the neutral affection marriage dialog lines set to a question (which afaik shouldn't ever show up again?), and the fallbacks set to the actual neutral dialog lines in my i18n
would like to clarify that i coded this MONTHS ago so it might be a mess
as mentioned just put the Quality field into the output (unless you have a more complicated use case)
pls use json uploader
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.
i should replace the topics with mail flags
or there might even be a 'question asked' thing
is there a way to make a shop sell an item on a random day of the month?
it sounds doable! one sec lemme see the shop code stuff
ive coded most of the shop just adding items now (but i havent added the tile to the map yet lol)
Do u want the shop to only sell it on one specific day?
just set the conditions to DAY_OF_MONTH {{now make a custom token that's random number from 1-28}}
IGNORE I'M WRONG
I suspect it's possible with a pile of mail flags tbh
The problem with this is that random will get rechecked
wont work. token will change every day
any day is fine i just want only 1 random day per month. im making emily sell prismatic shards so i dont want people to be able to just buy them any time lol
What I'd do is probably a trigger action day ending with 1 RANDOM check
On success 2 mailflag one for "sell it today" and one for "has sold this month"
Block further activation of the trigger action with the "had sold this month"
ok, time to read a lot of wiki then lol
Flip "sell it today" to false at end of day
you'd also need another trigger action that excludes the random but checks if it hasnt sold this month in order to guarantee it happens at least by the end of the month
Flip "has sold this month" to false at end of month
otherwise you could potentially never get it
Yeah maybe it could be any random dayofmonth 28
sounds,,, complex
Yep.
if you wanted to get fancy with it you could reuse SYNCED_SUMMER_RAIN_RANDOM
which increases the odds as the month goes on
Honestly I think if you don't wanna overcomplicate things
Just RANDOM on the shop cond is fine
ooh that does sound fun, but would it work for other seasons?
itd coincide with rain though unless you did even more fancy complex mail flag stuff to change that
the season doesnt matter
All the extra nonsense is just to enforce "only 1 sold this month"
HMMM so just set a 'has got this for this month' flag and then do random?
..or just do random on it's own so it's still v unlikely
like "DAY_OF_MONTH random" ?
Nah just SYNC_RANDOM 0.035 chance or something
I forgor the exact order of args pls check wiki game state queries
(this has officially become too complex for me good luck spring
)
You can also use the gsq button mentioned
lol ty :3
Which will make your thing more likely to be sold as month goes on
It does mean u can get multiple a month ofc
Gotta decide if that's alright
honestly my knowledge of trigger actions is uh, limited. i too wish you luck spring
godspeed 🫡
◀️ has no idea what's going on
i didnt think it would be so complicated ahah
uh so SYNCED_RANDOM day <i havent touched keys yet 😭> 0.035 or something
Just make it always available, have a purchase action that marks a mail flag that makes it unavailable
And reset that once per season
'ANY "RANDOM 0.1, !PLAYER_HAS_MAIL Host HasSoldThisMonth Received" "!PLAYER_HAS_MAIL Host HasSoldThisMonth Received, DAY_OF_MONTH 28"'
use that as a condition for a Trigger Action on DayStarted to send two mail flags to the host received inbox: HasSoldThisMonth and ShouldSellToday
then in the shop condition, use PLAYER_HAS_MAIL Host ShouldSellToday Received
then on DayEnding, remove the ShouldSellToday mailflag
on the last day of the month DayEnding, remove the HasSoldThisMonth flag too
oh that makes sense
(with my method you'd ofc also want to change the random chance if you want and modid prefix your mail flags)
uhhh to those who can do dialog question syntax, is this correct??
https://smapi.io/json/none/e7508f4fcac14f7883243a541ba8334f
and the wiki question stuff: https://stardewvalleywiki.com/Modding:Dialogue#:~:text=unqualified item ID.-,Question example,-[edit]
should be the same as the main question block it seems
..?
oh, is it not?
OH okay good
i thought it was on there? or do you mean the dialog? the only stuff in my i18n is just pure dialog
i am very lost lol
that's your i18n?
you don't have the question bit on here, just keys
..oh?
[18:25:47 WARN Content Patcher] Ignored EnglishClub > Adding npcs jsons (from code/npcs/fran.json) > Load Characters/schedules/{{ModId}}_Fran: the Priority value 'Early' is invalid: expected one of [Medium, High, Exclusive, Low] or a simple offset like 'Medium + 10'.
[18:25:17 WARN Content Patcher] Ignored EnglishClub > Adding npcs jsons (from code/npcs/fran.json) > EditData Characters/schedules/{{ModId}}_Fran: the Priority value 'Medium' is invalid: expected one of [Default, Late, Early] or a simple offset like 'Default + 10'.
????
why is the log saying contradictory things ?
or am I dumb ?
oh, i think you should change 'Medium' to 'Default' in your priority
[18:24:57 WARN Content Patcher] Ignored EnglishClub > Adding npcs jsons (from code/npcs/fran.json) > Load Characters/schedules/{{ModId}}_Fran: the Priority value 'Default' is invalid: expected one of [Medium, High, Exclusive, Low] or a simple offset like 'Medium + 10'.
i tried
OH misread

values are Medium, High, Exclusive, Low
i should prob try to mod less rn bc i'm sick-
Being sick is the best time thoigh
wait they aren;t- smapi lies
HOW
there are two different priority enums with different names: one for loads and one for edits
betise is using the wrong one by mistake
i mean i am sitting on the couch with a cat on my lap so
accepts: early, default and late
https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/action-editdata.md
ohhhh ok it makes sens now
it changes depending on action?
yes, because only one Load can ever apply
yeah load priority uses different words than edit priority
ooh
you cant have a "Late" load because there is only one load
it is a bit confusing because they're both called Priority and they otherwise look the same, but button's reason ^ is why
most intriguing
kinda annoying tbh
REAL
well it is documented and the error message does spell out exactly what was wrong
also they are numerically in different order, so that + and - behave as one might expect
for loads, high numerical value wins and is applied, so e.g. "High + 10" makes sense as being higher than High and applies first
what makes u need priority again
for edits, low numerical value is applied first, so e.g. "Late + 10" makes sense as being later than Late and applies last
hmm can questions repeat?
enforce patch order. if your mod needs to e.g. editimage, but it's important that your edit applies later than some other mod patching the same spot
right, yes! i literally do this 
before priority was exposed to content packs, the only way to do patch order was false dependencies (neither system is ideal or should be considered generally superior to the other)
although patch priority is the first sort, and load order (created by false dependency) only breaks ties, so patch priority supersedes
(+ you couldn't do no exclusively loads at al)
that doesnt english very well :p
oh get well soon 
aww we match :)
sick and moderately delirious modding is honestly a little entertaining
like "awww look at how stupid i am it's so cute"
I've got "internet girl" by katseye playing in the back of my head
i am literally listening to my playlist of gay songs™ rn so-
aka my normal playlist bc literally at least half of them are about the gay™-
what can i say i play sdv it fits
Got a guide to creating cooking recipes?
Thank you
is there a console command to mark an event as unseen?
I'm not seeing one on the wiki but I might be overlooking it
eventseen <id> false, apparently
https://stardewvalleywiki.com/Modding:Console_commands#Festivals_and_events
Do I need to make a mod for PC or a mod for mobile is enough for Mod Author role?
a mod for any platform would qualify, i should think
you do need to be a higher server level though
!log
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.
I think I got the mod to host multiplayer runs quite well. However, the mod is completely different than the mod I started with.
I removed a lot of features, and only implement the one that needed to keep the server working well.
I will look into releasing the mod if anyone wanted to use it. https://github.com/icyavocado/stardew-smapi-mod-skeleton/blob/main/src/AlwaysOnServer/ModEntry.cs
The mods will host an always on server, paused when noone connected.
When an user connected to the server, it will send you the mods in nexus link so you can download them.
Are people able to play as the host player in this one?
If they wanted to
You can, the host actually also run on port 8080 via VNC (if you use https://github.com/icyavocado/stardew-multiplayer)
However if you use this for your own instance, it should still work. You will have full access to host.
I was wondering bc sometimes i have to make configs host only
Yep, you have full access to host via browser. I haven't figured out how to get sounds working yet.
I have been leaving the host running since I started the development, to make sure nothing weird happens. But I wont be able to catch all the bugs. For example, it stuck on Spring 1 of Year 3 (Gram Ghost) - however, if a client connected, the bot should pass out correctly after time runs out.
I'm having the same problem as last time that some of the patch i made with ContentPatcher load but are never applied, specifically here the probleme is code/npcs/fran.json schedule load and schedule editdata https://smapi.io/log/2f3c83da987e4f5f8dfca22c5b3c9122?Levels=trace~debug~info~warn~error~alert~critical
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26200.0, with 3 C# mods and 1 content packs.
does someone know why this happens ?
last time there was a log to say mismatching something but not this time ?
can I force apply ?
loads are exclusive priority and don't show as Applied in the log
even when successful
can we see your schedule json for her to find out why it's not applying
how best to deserilize a chunk of NPC Data
{
"Action": "Load",
"Target": "Characters/schedules/{{ModId}}_Fran",
"FromFile": "assets/blank.json"
},
{
"Action": "EditData",
"Target": "Characters/schedules/{{ModId}}_Fran",
"Entries": {
"Mon": "830 Saloon 40 17 0 {{ModId}}_Fran_Reading/1400 Town 40 72 0/1530 {{ModId}}_EnglishClub 7 8 0 square_6_3_1/1700 bed",
"Tue": "1100 Saloon 40 17 0 {{ModId}}_Fran_Reading/1500 bed",
"Wed": "1000 {{ModId}}_EnglishClub 7 8 0 square_6_3_1/1400 Town 40 72 0/1800 bed",
"Thu": "830 Saloon 40 17 0 {{ModId}}_Fran_Reading/1400 Town 40 72 0/1530 {{ModId}}_EnglishClub 7 8 0 square_6_3_1/1700 bed"
}
},
!json can you please use the site
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.
What is meant by npc data?
Data/Characters or something else
yeah
I don't have a json on hand... gimme a sec to generate one
or would you like to see the data model?
Well if it is json you can use newtonsoft.json right
Add that as nuget if not a mod, add via reference if mod
var npcdata = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawnpcdata);
can't use that.. i don't think
@rose sequoia the schedule looks right to me. what behavior are you seeing in game?
not moving at all
does your blank.json have a set of {} only?
This will let you do using newtonsoft in mods
on different lines but yes
i mean I use the same blank.json for 3 other characters and they work correctly
oh you need a default
ohhhhhh
right now it doesn't know what to do on friday/sat/sun
use all 7 days or have a "spring" in there
here is a character.. i need to parse this
yeah but on monday it shoud still work
idk exactly how the game parses schedule data, but maybe not, if it can't find a default. i don't know
never assume the game will work the way you think lmao
https://pastebin.com/AjMmWQbj here is my data model
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
Ok I'll try but i have other NPCs that do not have "spring" or "default" and they work fine
do they have all 7 days?
do those give you a better idea to what I mean @lucid iron
nop, they have monday, tuesday, thurday and friday
wack i would expect errors on the other days
i wonder if it only matters if it is that day
like a character with no sunday schedule wouldn't cause problems if it isnt a sunday?
if that's not the issue, can you try doing a patch export
patch export Characters/schedules/YourModIdHere_Fran
You should be able to deserialize into a model instead of a Dictionary<string, string>
Just change the generic type
Can make a ContentPatcherMock class for that
With string Action, Dictionary Entries etc
var npcdata = JsonConvert.DeserializeObject<DataModels.NPCCharacterDataModel>(rawnpcdata);
like that?
Yeah assuming the fields all match up
I do recommend using newtonsoft just to be consistent with smapi
I got the CP stuff.. I generated the json.. now I need to get it back into the app x3
who doesn't use Newtonsoft?
C# has native json i thought
c#'s native json isn't that great, iirc
looks like smooth sailing from here
for me I was able to load custom data models via the data pipeline without needing to do any of my own deserialisation stuff thanks to pintail (including nested data models), so if you're doing data pipeline stuff that may actually be an option?
NPC Creator 4
Me: I should work on making these mods compatibile.
ah
Also Me: I should make work for myself and make these mods compatible with upgradable casks
also also me: why do I have no time for anything????
someone made a web version.. so i need to make sure NPC Creator works better than that
This one doesn't have anything to do with pintail i think
last time I mentioned it sinz said something about pintail 
It is some type shenanigans i thought
more seriously, custom cask mods are interesting, and I'm not sure how to approach compatiblity yet
Pintail is when u got 2 mod apis
anyway, back to optimisation hell
time to see if I can dispose a texture from the content pipeline and if so, what the consequences are
hopefully fun ones
Can you not
if it uses the CCM content pack format you'd probably need to make your own content pack
:')
aka the PFM situation
But also I don't think you can do that without yeeting the whole content manager
you actually can dispose individual assets!
yeah, it also implements via CP stuff so it's why I suspect I'm going to be tagging it to the "next week's project" calendar
which funny propagation deal
When a texture is reloaded
All other known loaded instances get their data overwritten
So they r never disposed

I dunno what would be the consequences if u went and did that
Tbh I think you could manage it if thr asset wss only used by you
time to look into what does that and break it
Anyways iro if u want to make it not persistent you could use the temporary content manager
The game assumes it can just update. I think you can manually remove....or that yeah
the question is if the texture gets properly gced
It does get dispose then yeah
Idk why u r concerned about memory tho wasn't the problem that it takes 3long to load
Did u look at reducing the size yet
I can have multiple problems 😌
I wonder if you could do a thing to load the data off the main thread
Crimes 😌
And then make the texture2d on the main thread
How crime chue
My paraole says I no crime
Say iro I had a related thought™
What r u gonna do about NPCs with 108 portraits
throw avi into the road
Someone had this problem the other day and they were gonna do hacks with change appearance
-# ||presumably for high res booba||
I have appearance support
If u will assert full control over the dialogue box draw portrait
Probably. >_>
Then maybe it'd be good to dehardcode the $h $l whatever
I view "don't" as a valid response to "how do I give my character 108 HD portraits"
Then ppl can use full 4096 width for their stuff
hmm, might do
Actually iro how mad would you get if portraits didnt get loaded at all until the portraits box openrd
that's what's happening rn 
so, not at all
(for some perspective, the "lag issue" is a single stumble on first interaction with an npc that even on my potato is half a second, and my potato takes .1s to load certain json assets)
(so even if people notice it, I'm not too fussed)
Can you spread the work out over a few ticks
yeah probably, though I'm not convinced it will feel different
hmm, I guess it might tbh
Well for me it'd fit under the update tick
how wouldnt it
mostly because on my potato it's enough to span multiple ticks even at the most atomic level, and I forget not everyone's computers are like that 
right, but... if you're doing less per tick, then each individual tick will change faster
Yesterday i discovered the horrors of texture swapping
texture swapping?
I don't think this affects ur mod cus it's portraits
But it seems like having to switch what textures r being drawn in a row has cost and was noticable on grass
if you really care about this minor lag issue (which i dont think you should) i think you would get more benefit out of both spreading the work out and also prefetching the portraits by guessing when they might be needed
rather than strictly on demand
Macro version of the cpu cache problem 
slight problem, I am completely blanking on how to spread this to the next tick
I guess I'm not in the headspace for programming today (I'll figure this out dw)
(Fwiw, reasoning i suggest is because dialogue box takes a few ticks to appear anyways)
Also because past atra looked into suppressing appearance changes for npcs not on thr same page as you are
Well if u just did pure on demand then it'd work
my real issue is past iro being a dumbass, btw
Let's say there's 5 frames which are 5 assets
who decided "I'll just do this via linq for now and fix later"
If u only load a frame when it's actually time to draw it then it's gonna be different tick by default
oh my god what was I thinking with this code. throwing this entire part away immediately
Another ez way is to just do a bunch of delayaction
Or put stuff in a queue to process in updateticked
okay much less noticeable stutter now that I'm not being a dumbass
lmao
50ms on my potato 
It affects batching, is probably why
Switching textures between overlaid sprites means you have to start a new mesh, whereas if the same texture is being used, it can all be a single mesh, which uses less bus bandwidth
wren do you want to do my performance stuff for me
Don't tempt me
yup, down from nearly 500ms to 50ms
so probably safe to say would be undetectable on functional computers
Yeah i did some spaget to merge it into one texture it was a lot better
It's too bad the monogame asset pipeline works the way it does bc otherwise we could just do what minecraft does and bake everything into a giant texture atlas
I am in my Color[] enthusias5 phase
Is there some kind of trick to make Nexus not completely destroy the quality of an image in media tab..? 
After my netfield phase
Dont worry sooner or later you'll find out that you can get even faster with pointers and shared arrays
Oh no im becoming atra circa 2023
Add transparency, forces it to save as png instead of jpeg, which makes it less crusty
Doesn't work on banner images though
Oh, neat, thanks
Yeah i don't really understand what the point of arraypool rent is i just did it cus smapi does it 
Isn't that kind of what Memory<T> is for?
I really wish monogame textures have native "copy rect to rect" but it doesn't seem to exist
Only found copy array to rect
Dont you make a rendertexture and draw from one texture to another
Is that really the best way...
In theory that would all be 100% gpu side
Rendertexture is a graphics buffer so operations are done on gpu instead of cpu, which will usually be faster
I just copy the color[] one row at a time it seems a little silly
This isn't a particularly hot path so I might just leave it
Does anybody know if there are any mods out there that make all floors infested floors?
#making-mod-recommendations strikes again
I think it would be really fun to try doing a run through The mines, SC, Dangerous Mods, etc. in such a situation (no staircases ofc)
Yeah. If it's not hot or causing lag, no reason to fret over it. You can always profile it later if you need to
Do u want to make the mod
I want to know what is more speeb for personal amusement
Nah was just wondering if there are any mods out there that do that or could let you configure something like that quickly
But i guess it'd be dependent on hardware slightly?
True
if you are not making the mod then you want to ask #modded-stardew
But maybe even a potato igpu is better than cpu for this
Ah sorry mb, this was the first channel I saw with “mods” in the name
If you're using VS it has a cpu flame graph you can use
I am not 
I wonder if that channel being nested between 4 other mostly vanilla gameplay channels instead of the "Game Modding" section hurts visibility
#mods-howcase once again sadly overlooked
i wonder?
Yeah, especially with the showcase being down here
i support it only if its beneath #making-mods-general
i support moving all of the modded channels up instead to usurp the regular stardew gameplay channels
i support wearing #modded-stardew as a hat on top of #making-mods-general
Is it a crop hat
in reality i will likely have the channel completely muted and hidden no matter where it is so i dont care
i think maybe a month ago i would've said 100% keep #modded-stardew in the sdv category, but at the same time now i've been in there a bit there's a lot of orange names there
at the same time though probably a lot of people just immediately hide the entire modding category so would totally miss the actual gameplay channel
doesnt help that a lot of people in there refuse to come in here even though theyre talking about making their mods
it's v funny to me that every time i've been in modded stardew it's been an entirely different crowd to in here
people avoid jumping channels in general, it's like how certain people here will merrily post in #programmers-off-topic but not #town-square even though they have a 99% overlap in topic (cats and videogames)
town-square scares me every time I merely peek at it
But #programmers-off-topic has shilling/shitting on rust
Town Square is average agr 14
tbf if posting about those topics was not allowed in programming-off-topic then i wouldnt post them there
That's important part of ecosystem
Also programming off topic has bitching ablit version control
but i dont really understand if there is a limit to what can be posted there?
but aside from the odd question about finding new mods there's not been any complaints i've noticed about where modded-stardew lives so it's probably fine
i dont really get what it is
i'm just surprised so many people have the modding category unmuted to ask for suggestions here 
i dont have any real evidence or data to back it up but in my limited experience of seeing other peoples discords i dont think people tend to really mute things
not on a category wide basis
these days the onboarding for discord often asks that you disable half the channels in the server completely, but i'm not sure if this server uses that system
chu please go to #town-square if you want to lament your lack of swedability
Also I will say I think the average age of #town-square is 14
You may ask me if I meant median instead
dont think most in town square would understand when people compare terminal emulators
Tbh #adventurers-guild is more quiet and better for off topics
i think the biggest reason to have a separate #programmers-off-topic channel is that #town-square implies you're outside in town, which is just completely unheard of
New quote added by irocendar as #6791 (https://discordapp.com/channels/137344473976799233/156109690059751424/1447716298246193356)
i'm revoking your auth tokens
what the fuck is #adventurers-guild . is this real? ive never seen this channel
be honest did you make that channel and pre-fill it with chat history just now atra
New quote added by atravita as #6792 (https://discordapp.com/channels/137344473976799233/156109690059751424/1447716528886775958)
No that was bluebs
button, i....
why outside when perfectly good inside exists
It's old history but bluebs was once green and I never was
To be fair I was also not afraid of a green bluebs
....at least after a while
fake channel
in unrelated news im running out of reasons to procrastinate on CMCT 2.0.0
someone give me a new reason please i dont want to work on the mod right now
I expect delivery by end of sprint button
thats a good enough reason thank you
I don't think I've ever had a todo list be this close to being complete, spooky
how long is this sprint
meanwhile I'm still procrastinating on releasing crop appearance even though chu did all the hardwork
look I'm still coughing from a cold two weeks ago
maybe i should release the update right around christmas, that way if it breaks existing mods it happens on the holidays when no one will be playing stardew anyway 
ah yes our office is closed for the holidays. no love of cooking bugfix until operations resume in the new year
Dw i didn't touch the additional gsq stuff at all
That's a good reason to delay 
ew now I have to do a git rebase
i love procrastination
You never banned me while you were green
Toooo late now unless you make DH or Zoe do it
i have friends in high places 😌
2.0? 👀
i was so sure you were writing a long and eager question about making mods. i stopped writing junk for nothing 
i'm missing something silly >:
namespace NPC_Creator_NT.DataModels
{
internal class FriendsAndFamilyModel
{
public Dictionary<string, string> FriendsAndFamily { get; set; }
}
}
``` I use this to list all the relationships an NPC has.. but I can't seem to pass it
`FriendsAndFamily = NPCRelationLibrary,` NPCRelationLibrary is a Dictionary<string, string> and yet I can't seem to get it in there
not really anything that content packs would likely get use out of (theres some trigger action stuff and better error handling/reporting though) but its a complete from-the-ground-up rewrite included and thats before the new stuff for C# mods to use, so it gets a major version bump bc im not 100% confident it wont break an existing thing
what's the error and relevant code
showed you relavent code already
Cannot implicitly convert type 'System.Collections.Generic.Dictionary<string, string>' to 'NPC_Creator_NT.DataModels.FriendsAndFamilyModel'```
FriendsAndFamilyModel contains a dictionary, but it isn't a dictionary in & of itself
Noted, good to know
(I really need puffer_noted emoji...)
you'd want like familyModel.FriendsAndFamily = otherDictionary or otherDictionary = familyModel.FriendsAndFamily, depending on context
(that said if there was anything you wouldve specifically expected/wanted out of a CMCT 2.0, feel free to mention it, bc im not really sure what else would go into it)
DataModels.NPCCharacterDataModel NPCDatum = new DataModels.NPCCharacterDataModel
{
DisplayName = CD_DISPLAYNAME.Text,
BirthSeason = CD_BDAYSEASON.Text,
BirthDay = (int)CS_BIRTHDAYDAY.Value,
HomeRegion = CD_HOMEREGION.Text,
Language = CD_LANGUAGE.Text,
Gender = CD_GENDER.Text,
Age = CD_AGE.Text,
Manner = CD_MANNERS.Text,
SocialAnxiety = CD_ANXIETY.Text,
Optimisim = CD_OPTIMISM.Text,
IsDarkSkinned = CD_DARKSKIN.Checked,
CanBeRomanced = CD_ROMANCE.Checked,
LoveInterest = CD_NPCLISTLOVE.Text,
Calendar = CD_CALENDAR.Text,
SocialTab = CD_SocialTab.Text,
CanSocialize = CD_CANSOCIALIZE.Checked,
CanRecieveGifts = CD_ALLOWGIFTS.Checked,
CanGreetNearbyCharacters = CD_GREETOTHER.Checked,
CanCommentOnPurchasedShopItems = CD_COMMENTITEMS.Checked,
CanVisitIsland = CD_VISITISLAND.Checked,
IntroductionQuest = CD_INTRO.Checked,
ItemDeliveryQuests = CD_ITEMDELIVERY.Checked,
PerfectionScore = CD_Perfection.Checked,
EndSlideShow = CD_ENDING.Text,
SpouseAdopts = CD_ADOPT.Checked,
SpouseWantsChildren = CD_WANTSKIDS.Checked,
SpouseGiftJealousy = CD_GIFTJEALOUS.Checked,
SpouseGiftJealousyFriendshipChange = (int)CD_FPLOSS.Value,
SpouseRoom = null,//Not Implemented
SpousePatio = null,//Not Implemented
SpouseFloors = null,//Not Implemented
DumpsterDiveFriendshipEffect = (int)CD_FPADJUSTDD.Value,
DumpsterDiveEmote = emoteValue,
FriendsAndFamily = NPCRelationLibrary,//Not Implemented
FlowerDanceCanDance = CDCanDance.Checked,
WinterStarGifts = wintergifts, //not implemented
WinterStarParticipant = CDWinterStar.Checked,
UnlockConditions = null,//Not Implemented
SpawnIfMissing = true,//Not implemented
Home = DefaultHome, //single home implemented
TextureName = null,//No implementation
Appearance = null,//Not Implemented
MugShotSourceRect = null, //No implementation
Size = new PointModel
{
X = 16,
Y = 32,
},
Breather = true,
BreatherChestPosition = null,//No custom implementation
BreatherChestRect = null,//No custom Implementation
Shadow = null, //No custom implementation
EmoteOffset = new PointModel
{
X = 0,
Y = 0,
},
ShakePortraits = null, //Not Implemented
KissSpriteIndex = (int)KSFrame.Value,//Placeholder
KissSpriteFacingRight = false, //placeholder
HiddenProfileEmoteSound = null, //No customization
HiddenProfileEmoteDuration = -1, //Default
HiddenProfileEmoteStartFrame = 16,//placeholder
HiddenProfileEmoteFrameCount = 4,//placeholder
HiddenProfileEmoteFrameDuration = 200,//Placeholder, default
FormerCharacterNames = null,//not implemented
};
sorry
hmm
hang on
is FriendsAndFamily there a field with the type FriendsAndFamilyModel?
if so, I think you'd need to use something like this
FriendsAndFamilyModel = new() { FriendsAndFamily = NPCRelationLibrary }
I'm not sure about the exact syntax during creation like that though
it may be better just to make that field a dictionary, if that's what it should be set to
yeah just thought of that
perfect... i was just being dumb xD
appreciate the head smack
trying to both be able to load character data and implement more of the data
Hmm.. nothing really comes to mind, but if I come up with something I'll let you know!
Unless maybe something that could let us dig into specific random tokens of other mods that don't use keys to edit specific option?
Although I don't think it's necessarily in scope of CMCT..
btw, how useful is the Spouseroom and Patio fields?
i dont think something like that would even be feasible
Yeah, that too 😅
technically possible, maybe, with some extreme reflecting and very convoluted syntax, but feasible, very much not
probably depends on how useful you feel the ability to define the spouse room and patio is
far easier to just edit whatever patch theyre using the token in and replace it with your own Random
I imagine most people making new marriable NPCs wouldn't want the default room or patio, but idk personally
i've never done it.. so i don't know how it works.. i have it there but no way to use it untill i get it figured out
Yeah, definitely doable, but if I see a minor dialogue with 30 random options I usually just decide it's not worth it 
i would say if the intent is to make an NPC creator, then every aspect of the NPC is kinda critical
(save for LoveInterests)
ideally i'd imagine an NPC creator would cover all the available fields, with the less-common ones available but maybe collapsed under an expanded-options section
I agree.. I'm putting in far more than the last version did
until i know how to do it, it's not implemented
basically, I need someone to make me a test spouse room and Patio
why do you even have LoveInterests implemented
some people want it
it literally does nothing
it does literally nothing
i know right?
but i was demanded to have it in
Friends and Family actually has uses
If a demand is dumb why fulfill it? 
🤔 i think if someone wanted it enough, it wouldn't be so hard for them to just put it in themselves manually
hot take: it's okay to tell your users they're idiots
I mean there's always a chance it'll be removed as an unused field in 1.7 too
(or later updates)
it wasn't even a bunch of code
I'm honestly curious how it survived 1.6 
its of far much less importance than the spouse room and patio
"*The Love Interests field is not used in the base game or any mods, and so will not be coded." and move on with your day, LOL
i agree.. perhaps I should put out a bounty for a sample spouse room
or just look at one of the dozens marriageable NPC mods already out?
probably no one brought it up tbh
_>
its not a difficult thing to do. the wiki will tell you exactly what the format of the data is
Vanilla uses Abigail as the default spouse room
So unless you really want a specific one for an example, you could do the same.
Flower dance partners are now based on the LoveInterest field in Data\Characters, if set.
i found this quote from Pathos in the 1.6 alpha thread. i guess this did not survive for whatever reason
since that is definitely not true now
Button, that would have made my life so much easier if it was implemented. LOL
thats the only mention of LoveInterest in Pathos's entire chat history so i dont know what happened to it
Just bitch at the original creator to use localized text
Am I actually white
why is your name white
Did blueberry actually
atra got banned
Oh, that's a thought, do things like UI Info or other accessibility mods actually display the Love Interest?
Blueberry come back here i heed your opinion on standing desks
darn, I can almost still hear them post
Lookup Anything would in its debug view, but no mod normally looks at it as far as i know
i do like the concept of love interest being a cool little secret if you want to go code diving
debug view doesn't show data fields I think (unless that's also set on the instance?)
i thought it just showed every field
like an animal's house type for gods know why
every one that could be displayed anyway
oh i misunderstood what you meant
yes its not just in the data
its on the NPC
NPC.loveInterest
Maybe it should
there's a couple fields that are just mirrored from the data and never changed, whose only purpose of existence is to frustrate framework makers like me specifically
I dont ask anything of thr vanilla game anymore
I just ask aboit cookie plans and standing desks
ugh.. imma stop for now.. my cat keeps destroying my code DX
is changing "dried blueberrieses" and "blueberries wine" a C# problem?
no the game has something for that now
hold on
uh I can't find the wiki reference yet but look at Strings/Objects
aha
specifically the cranberry wine thingamajig
halp
although i don't think they can become juice
hmm fascinating
maybe a "just in case" thing
Flowers and the Abyss, my favorite.
Sounds like Underworld or something 
livestock needs their daily dose of too
I'm assuming you didn't init the rendertexture2d as transparency
Or that
my :miku used to be
but after watching symphogear it is now
and i have mixed feelings about that
Now I'm thinking about an expansion mod full of ghost NPCs or something and you go there when you die pass out in game... 
i'm frustrated.. i'm glad you all helped me out...
but my cat won't get off my keyboard
Give up. Buy a dummy keyboard
i did
I had someone comment on Pelican Valley Loft today asking if I would be updating it to be compatible with 1.7
Sergeant Sprinkles wants to give me attention
(I love you, NPC mod authors, but you are living in the future and I haven't gotten there yet)
ok but will you /s /lh
Hello everyone! I need some help with a convertion from PFM to CP:
"RelativeFrameIndex": [1, 2, 3, 4, 5, 6, 7],
"FrameInterval": 15,
},
"WorkingOutdoors": false,
"ReadyAnimation":{
"RelativeFrameIndex": [7, 8, 9, 10, 11, 12, 13, 6],
"FrameInterval": 10,
},```
I've got this machine that has an animation from when it's working and from when it's ready, can regular CP handle the ready animation?
I do intend to keep it updated, though, it's a CP mod, so that's not hard. xD
(hmm didn't know PFM has ready animations before I implemented my own version)
the vanilla game doesn't but Extra Machine Config does
it even has sound!
okay i got wine to work fine but i still get Dried Blueberrieses even when i tried adding this:
"Action": "EditData",
"Target": "Strings/Objects",
"Entries": {
"Jelly_Flavored_(O)258_Name": "{{i18n:Jelly_Flavored(O)258_Name}}",
"Juice_Flavored_(O)258_Name": "{{i18n:Juice_Flavored(O)258_Name}}",
"Wine_Flavored_(O)258_Name": "{{i18n:Wine_Flavored(O)282_Name}}",
"DriedFruit_Flavored(O)258_Name": "Dried Blueberries",
},
"When": {
"BlueberryCount": "Multiple"
}
}```
in the unpacked data there are zero mentions of dried cranberries that i can model it off of 😔 there's only ` "DriedFruit_Name": "Dried",`
classic weedses
Yeah, it'd probably just be Dried Fruit, which doesn't care what fruit it is
for most things
you're missing a _ after Flavored
good catch, Selph
are you having any issues with Android?
the android dev has a EMC version that works on the Android SMAPI beta apparently
which I linked on the description
i'll check your mod, maybe switch from PFM to yours
it's highly recommended either way, CP style machines are more compatible in 1.6
I have this thing that converts the Input Identifier into the item (e.g. pufferfish roe into pufferfish), can this be implemented easily in your version?
you can use DROP_IN_PRESERVE in the ItemId field
I'll try it out, thanks
-# bannedtra
you can make machines such as the statues from mastery?
that grants you buffs?
nope
that's a C-sharpin
better crafting has "run trigger action on interacting with big craftable" so you can maybe do something with that
or spacecore with furniture
That's an interesting idea though- machines which process items into buffs
Or just on touch
I imagine 1.7 would make that easier with the new running actions on receiving item/instant consume items (I may be misremembering what it does)
but yeah check out better crafting/spacecore?
you can do it with trigger actions and some furniture interaction framework
for the WinterStarGifts field, how would mutiple gifts looks like
WinterStarGifts is a list (ie. [])
like this? "Id": "ItemA", "ItemId": "IdA", "Id": "ItemB", "ItemID": "IdB",
ahh
Isn't it your bog standard listek of item queries with conditions
how would the model appear
[] contains a bunch of {}s. and each {} has one set of "Id", "ItemId", and any other relevant item fields such as stack size
You can look in Data/Characters, Clint has entries for it
a single item entry would look like this, if fully expanded with every field (copied from the unpacked data)
"WinterStarGifts": [
{
"Condition": null,
"Id": "IridiumBar",
"ItemId": "(O)337",
"RandomItemId": null,
"MaxItems": null,
"MinStack": -1,
"MaxStack": -1,
"Quality": -1,
"ObjectInternalName": null,
"ObjectDisplayName": null,
"ObjectColor": null,
"ToolUpgradeLevel": -1,
"IsRecipe": false,
"StackModifiers": null,
"StackModifierMode": "Stack",
"QualityModifiers": null,
"QualityModifierMode": "Stack",
"ModData": null,
"PerItemCondition": null
}
],```
but if you trim out all the default stuff, that can just be something like
```json
"WinterStarGifts": [
{
"ItemId": "(O)337"
}
]```
public WinterStarModel[] WinterStarGifts { get; set; }``` i did this
as i just need this
i guess my cat won't let me code.. he was out of the way.. but the minute i start working on it.. he's back
imma go to bed for now
I'm a very neophyte mod maker (personal modding mostly) and I'm trying to make a spawned item from animals have no collision (the animals keep getting stuck on it and causing jitters). Is there any way to make the item have no collision? The mod is a mixture of Content Patcher and C# so I'm comfortable witha solution that requires either of those. Thanks in advance!
harmony patch Object.isPassable probably
I just classified it as a fertilizer in the json and that seemed to work. I had a lot of issues with trying to get harmony to work earlier when I tried. Thanks, seems like the fertizlier trick worked haha
wouldn't that also make your item usable as fertilizer on dirt
Yeah, it's still not working well. Been trying to figure it out for the last few days. It's for a "manure fertilizer" mod I'm working on. So it kind of works, but the manure needs to get processed first, so yeah, the fertilizer fix doesn't work when I actually tested it
lol what I did for my own manure mod was making them debris
Is there anywhere I can look at how the Secret Note unlock mini-event where you find Krobus in the bushes in winter is controlled? There's a sprite oddity I was wondering about and I'm guessing it's a hard-coded thing
it isnt Krobus and it is hardcoded
like that entire event
its split across 4 or 5 different functions in Town.cs
I too had the same issue that if I made every animal produce manure the entire coop/barn would be cluttered with impassable poop
Ah, I see. Yeah, I tried the debris but then it just hoovers to me when I walk near it because of my magnet ring haha
the event part of the magnifying glass thing specifies Krobus as an event actor but that's because that's the name of the spritesheet (and the character)
its not even an actor, its just a TAS
as I said harmony patching isPassable is an option, but I'm not 100% sure that would make the manure still be able to get picked up by hand
(its not an actual event either)
alternatively, bool Character.collideWith(Object o)?
if character is animal and o is your object, false?
I see, so it's not something that could be simply ripped out and turned into a more normal event
it is not no
???
"520702/a 11 23 11 24/t 600 1600/z spring/z fall/z summer": "winter_day_ambient/-1000 -1000/farmer 10 23 1 Krobus 26 23 3/viewport 24 23 clamp true/addQuest 31/skippable/move Krobus -2 0 3/pause 1000/emote Krobus 16/jump Krobus/pause 500/speed Krobus 8/move Krobus 20 0 1 true/move farmer 2 0 1 true/move false/playSound shadowpeep/warp Krobus -1000 -1000/pause 500/emote farmer 8/pause 1000/end"
theres not even any dialogue or messages in there?
is that just for the bus stop portion? the town portion isnt an event
correct but it's the part where you see him run off and enables the bush etc in Town (this fires at BusStop)
also out of curiosity how would your cake differ than the 2 existing manure cakes on Nexus (you don't have to answer)
I'm very much always interested in immersive animal mods
Mmm manure cakes
Wait, would we be able to actually give the player the Magnifying Glass with regular commands? Could dummy out the Bus Stop trigger and do a replacement event if so
But I wouldnt know if the mini-event sets any other flags or anything that need to exist
yeah it's just controlled by a mail flag
"MagnifyingGlass": {
"DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:SkillsPage.cs.magnifyingglass]",
"Description": "",
"TexturePath": "LooseSprites\\Cursors",
"TexturePosition": {
"X": 208,
"Y": 320
},
"UnlockedCondition": "PLAYER_HAS_MAIL Current HasMagnifyingGlass",
"CustomFields": null
},```
(Data/Powers)
Sorry, I'm still working on it, got it to work with harmony so we'll see if it actually functions.
I'm not sure, I haven't actually looked up any of the other mods, I just think of mods and then try to build them myself for fun, haha.
Potential workaround unlocked, thanks for the info
Okayyy would there a simple way to make dwarf’s sprites taller (the same as normal npcs) or is it hardcoded or some shit?
Cause dwarfs sprites are shorter
you can change the NPC size in the data (the dwarf is merely an apple and a half tall, aka 24 pixels)
obviously you'd need to load new sprites for them
oooh okay! that i can do

they're so teensy 
getting the proportions right in a style where the proportions are stylistically off is sooo hard-
Selph, are you there?
Do you know what's the format of "Frames": in WorkingEffects?
I had this "WorkingEffects": [ { "Id": "Default", "Condition": null, "Sounds": null, "Interval": 100, "Frames": 8, "ShakeDuration": -1, "TemporarySprites": null, } ], game complained
[Content Patcher] Can't apply data patch "More Fish > Include (from Data/Machines.json) > Hatchery Data > entry #1" to Data/Machines: failed converting entry to the expected type 'StardewValley.GameData.Machines.MachineData': Error reading integer. Unexpected token: StartObject. Path 'WorkingEffects[0].Frames[0]'..
idk machines but try a list maybe? that error looks like it’s trying to index it
the "frames" field inside effects is a list of integers, yeah
e.g. in this post the other day
ty both
it works, but not in the new one
{
"Id": "Default",
"Condition": null,
"Sounds": [
{
"Id": "dropItemInWater",
"Delay": 0
},
{
"Id": "waterSlosh",
"Delay": 1
},
],
"Interval": 100,
"Frames": null,
"ShakeDuration": -1,
"TemporarySprites": null
}
],
"WorkingEffects": [
{
"Id": "Default",
"Condition": null,
"Sounds": null,
"Interval": 150,
"Frames": [0,1,2,3,4,5,6,7],
"ShakeDuration": -1,
"TemporarySprites": null,
}
],
"WorkingEffectChance": 1,```
I have to close the game and start again so the animation works
you have to specify frames for LoadEffects as well
it's a weird thing where if LoadEffects don't run frames then WorkingEffects don't run
thank you
just make it identical to WorkingEffects
Worked like a charm
My biggest mod so far, few more refining and this will be ready for release
https://github.com/kazutopi1/Harmony/blob/main/ShopAnywhere.cs
thanks
hello! I am having issues when trying to code a crop because my smapi log keeps saying that the key already exists somewhere. Not really sure why this is happening. I've changed the seed name to caltrop seeds_TEST and that had no issues, but when i change it back, the error also comes back
I'm trying to get this to work with the machine terrain framework so it grows in water but I've been dealing with the same problem for like 9 hours now 🙁
Is this the format for MTF? It's not vanilla 🤔
i was following the vanilla for my other files and wasn't really sure how to format it since this is the only file affected by it
this is my content.json
Oh you're using Json Assets. Why?
thats how I was using my other files. Is it better to not use json assets?
JA is deprecated, so yeah it's better to not make new mods for it.
ohhh i didn't know that
Also, your IDs should ideally not have spaces in them and also should be unique. The convention is to prefix them with your mod's unique ID.
Here's a tutorial for how to make a crop using CP: https://stardewmodding.wiki.gg/wiki/Tutorial:_Adding_a_New_Crop
I see thank you!
I think once you follow that you will stop having issues with the error about your key already existing.
does anyone know location forage well? i'm looking at the unpacked data for beach forage and confused why sometimes it uses Condition for the season, with Season being null, and sometimes the opposite
is it because Season can only take one season at a time?
also, is there anything that handles not spawning forage on dock tiles? i see that it skips Buildings and water tiles
Not forage, but the NPC Appearance data is also like this and the reason is exactly this.
i see! thank you
I made a custom barn map, but sometimes animals spawn in the void outside the map. i've seen this on some other custom maps, but is there a way to stop them from doing that?
maybe try filling the void with invisible or black tiles on the Buildings layer?
I have a boarder of black tiles, but they spawn past it.
They all need to be buildings
Not just a border
I had the same issue with monsters in the monster hutches
Sorry, i don't quite understand what you mean by they all need to be buildings?
The areas you don't want your animals to spawn on need to have tiles on the Buildings layer
Like Nic said
so this is what i'm seeing. the dog is technially outside the map completely, so i should extend the map and add back tiles past that in the building layer?
No, probably not.
Did this barn already exist with animals in it before you made your custom interior map for it?
it did, i'm not sure if the same happens on a new barn, i will have to test that
Is your custom map smaller than the old one was?
just checked, it was. that makes since
Then in this instance it's probably just spawned based on the size of the old one. If sleeping another day doesn't fix it, you might need to use Let's Move It to grab your dog and move it inside the bounds of your barn. But you shouldn't see any new issues pop up.
i have played a season in game just dealing with it. so sleeping won't help.
I'm not familar with let's move it
where can i find it
It's a mod that lets you move things including farm animals: https://www.nexusmods.com/stardewvalley/mods/20943
thank you
another day, another user who cannot read
grandpas evaluating my mod testing world 😭
Ah ha yes I've experienced Grandpa being disgusted at me achieving literally nothing because I accidentally set the year too late
That is how I learned you can debug endevent Grandpa lol
i hear you get the third candle by activating windows 
probably bc i have a million gold and 8 hearts with 2 people
i tried D:
Not in the chat box, in the SMAPI console
oh
Are you trying to test your mods without using console commands?
Not even patch reload?
To reload your mod?
I can't imagine testing without console commands. I use them to warp to NPCs, to change friendship levels, give me money, warp to locations, test trigger actions, reset trigger actions, export the assets I'm editing to check that my edits have worked, build on the farm, clear the farm to make space for said buildings...basically everything. I do almost nothing manually.
oh yea i use patch reload
ive just been using cjb to warp and stuff but console commands are probably beter practice lol i just didnt really think of it before)
I use CJB for some stuff but debug warp is way faster for me than searching CJB for places to warp to
isnt there meant to be a bunch more commands like i see on the wiki?
Do you have the ConsoleCommands mod installed?
oh i need another mod
It is automatically installed when you install SMAPI, along with Save Backup, but a lot of people delete it.
i didnt delete anything when i installed it
If you just rerun the SMAPI installer it should install it again
ok 
I also don't think I normally see the commands show up when I type help
Oh no, it is there under Console Commands
its there now !
Sweet
@outer glacier
we just talked about this in #making-mods-art too
Lol I missed the actual spam
damn I've been trying to grab a new set of the spam images but I seem to not be quick enough
I have one from two days ago, want it?
oh yes please!
dmed it to you
(Are you trying to report the domains linked in them or something?
)
(I just forwarded one of them to another server at some point
)
(My goal was to match checksums and meta data, but they are not the same, I never thought of checking and reporting domains👀 ty for the idea )
(if you can get an OCR library to scan the images that might be effective? but a lot of computation
)
Hello, how do i make compat with Big Apricot?
in what way
(OCR was the route I was going to go with, espeically given I've used it before, computation isn't a major issue thankfully XD)
To show the big apricot instead of the small one on a portrait if that mod is installed
Why are you putting an apricot on a portrait?
Oclarina made me
Fruits deserve portraits too! XD
I think you don't really have a choice besides include the textures in ur mod folder
Well, it's oclarina's big apricot so just tell him to give you the texture lol
yeah make an edit and then condition it™
Condition how?
you can check for mods the player has
AssetBridge lets mods load textures directly from another mod’s folder.It’s a lightweight framework designed to reduce sprite conflicts and avoid redundant copies of the same files.
Oo
You could maybe use this thing
But yeah regardless of where tx u gotta have When HasMod etc
they're not using the apricot texture as is iirc
doing the fruit before face portraits
I will check it out, ty
Then u probably have no choice once again 
this won't help with what you're doing
Well this is also the kinda meme spritecompositor would help with
oh? 👀
that would help if people use a fruit retexture of any kind
Aba do u have the animal paintings on hand for example
I thought of just making an alt image with a big apricot but decided to complicate things for myself
Yeah
What fudge wants is basically just like that but with fruit
If it's a painting, you can use the vanilla texture and it will automatically pick up any retexture mods
It would be a painting furniture with a custom base and a fruit (springobjects) draw layer on top
Can i just say
If Big apricot is installed, show the other portrait?
Sure that's also hasmod stuff
yeah that's simple
Ok cool
I can't give u the json rn but maybe in like 10hrs 
goodnight chu!
Np xD i will try something
The MMAP way is best because it gives you compat with any retexture mod
(Animal textures by Elle)
Yeah that is a separate feature but using the same approach
I used something like that on my Minimalistic cats but not mmap, just CP
It worked too
The frame and background thing? They could, but the texture mod compat part needs MMAP
So it means if you have Elle installed, the animals will automatically become hers? Otherwise it's vanilla?
Correct
What is the name of this one?
Here is another example, this one using Qute Animals. The only change between the two pictures is that I enabled Qute Animals. I have no specific compat for it in my json.
Ermmmmm I downloaded several of hers so let me go look
Oh, this is an unreleased mod
I see
Still very WIP
Anything dynamic and i freak out. I like my things stable and simple
I've been working on it since Button released CMF in June
Whoa it will be big
And will probably still be working on it next June lol
Well yea i've been chipping away at mine for a long time, meanwhile releasing others
Hmm, I have made the whole frame and background thing so complex that it's not actually easy to show the json for just the animal
XD
Dw, i will then do it the easy way
I learn only slowly
For me it's a big win when i managed to make it configurable for frames, bg and the content
Chu's is probably a bit easier to follow: https://github.com/Mushymato/MiscMapActionsProperties/blob/main/[CP] MMAP Examples/furniture_properties.json#L185
But this is mine for just the animal (I removed the other rotations):
{
"LogName": "Add 32px animal sprites",
"Action": "EditData",
"Target": "mushymato.MMAP/FurnitureProperties",
"TargetField": [ "{{ModId}}_{{LT_AnimalName}}Photo", "DrawLayers" ],
"Entries": {
"{{ModId}}_{{LT_AnimalName}}_Rotation.0": {
"Id": "{{ModId}}_{{LT_AnimalName}}_Rotation.0", // Standing, forward
"Texture": "Animals/{{LT_AnimalVanillaId}}",
"SourceRect": {
"X": 0,
"Y": 0,
"Width": 32,
"Height": 32
},
"DrawPosition": "1, 3",
},
},
"When": {
"LT_AnimalSize": "32"
}
},
Hmm both are very complex
What does chu's do?
Plops a chicken on the Oak End Table lol
Haha lemme see
An animated one, it looks like
I have no clue what it looks like, I've never tried actually running the example in game. I just read the json and looked up the furniture Id.
And all the rugs and joja furniture?
Unrelated, just there as examples of other features of MMAP
Aha
It's a rotating chimkin
But yes for ur usecase you'd keep the portraits as they are
And add a draw layer that uses Maps/springobjects as the texture
Basically how it works is if you have your picture frame as a separate image, you can have the vanilla fruit texture on one draw layer and the frame on another one, and then the fruit can change without the frame needing to.
Today in "huh, this mail seems never to work"
"{{ModId}}_Mail_Demetrius_Fiber_Moss": "(no translation:{{DemetriusMail01.Text}})[#](no translation:{{DemetriusMail01.Title}})",
"{{ModId}}_Mail_Robin_ArtisanMachines": "(no translation:{{RobinMail01.Text}})[#](no translation:{{RobinMail01.Title}})",
"{{ModId}}_Mail_Marlon_Foodstuffs": "(no translation:{{MarlonMail01.Text}})[#](no translation:{{MarlonMail01.Title}})"```
this is from the patch export
_>
What does your json look like?
isn't my mod, so I'm in the process of troubleshooting to report it atm
otherwise I'd be able to fix it by now
(a lot of my current modding efforts is compat patches, since I'm in a playthrough)
How did they manage to get the mod id token inside a patch export
Did they Load their mail or somethign
god only knows becuase I can't figure out what mod even loaded it
no trigger for it in triggeractions
Do a find in files search for Robin_ArtisanMachines or something
Guys, Is it just me? Or constructing a custom item in c# is dang hard
Are you putting the item data into the data models first
Hard is a concept that really depends on your worldview
But there can be many steps
What did you try
I don't even know what you're talking about lmao, in fact I'm still in the process looking and understanding the decompiled game.
Btw, the reason why I think it's hard cuz I cant find the way how, unlike Buffs which has an example snippet in wiki
I haven't tried anything, I still don't know which CS holds the guide for constructing an item
Yeah so to make an item purely in C# you need to do these things
- Do AssetRequested stuff and populate Data/Objects with entry for your item at "youritemid"
- Then, you can do ItemRegistry.Create("(O)youritemid")
You get an Item afterwards
You can also just do this stuff in content patcher if you want
C# only for custom effects
Wiki has a guide for CP yeah
You can also register the item in CP and just add effects in c#
So as of now, I'm still using a wood as a place holder. Lets say I made a custom item entry in CP, will this mod recognize the custom id? Or do I still need to tweak the snippet so that it will recognize the custom item made by CP
presumably you want to check against the id of the item you are creating instead of (O)388
I'm still confused about qualified id, is the "{{ModId}}_blah" also considered a qualified id?
The qualifier is the part in parentheses
(O) for an object, (F) for furniture, (BC) for Big Craftable, and so on
So for your {{ModId}}_blah item to be qualified it would need to be (O){{ModId}}_blah
if (item.QualifiedItemId.Equals("(O){{ModId}}_blah")
So the snippet should look like this
No, you can't use the ModId token in your C# mod. You need to write your unique ID out in full
Even if the item was made by CP? My c# won't recognize it? Cuz that's what I'm planning to do, make an item entry in CP and use the item id in the c# mod
Nvm, I'm stupid, it should be my unique id instead of {{ModId}} lmao
I am trying to get pathos' translate event files script to work and it does output i18n keys but for vanilla characters only. my npc's lines remain untouched. is that script still up to date?
Yes. Your C# mod is not using CP so CP will not be replacing the token for you.
I have no idea what script that might be but has anyone pointed you to nomori's i18n tool? https://nom0ri.github.io/sdv-i18nifier-app/
https://github.com/Pathoschild/StardewScripts/tree/main/translate-event-files
this is the one I was talking about, it directly outputs the according files to your folders
i'll check nomori's tool then!
So like this right, assuming that my unique id is blahblah
(item.QualifiedItemId.Equals("(O)blahblah.blah"))
Just fyi but .Equals is java-like, in c# it's more idiomatic to see ==
(It's in pat because c# defaults the two to two different things.)
.Equals is locale aware. == is your locale unaware string compare
I'm still fairly new to c#, I'm just following the recommendation of the ide
Given that the convention for unique IDs is Username.ModName, it would be more like this: (item.QualifiedItemId.Equals("(O)YourModdingUsername.YourCPMod_item"))
No worries, in fact that's a new knowledge to me, so I might use it in my future projects
Are you set on doing your mod in C#
Depending on what you want to do it might be entirely possible in content
I just need a different item to replace the wood
Wood...
Hm if u make a big craftable
You can put all the logic for the shop opening inside the interact method
It doesn't really change the part where you gotta create the item ofc
Here r some examples for how 2 edit data in C#
Some places ban placing items though
I don't have a Data/Objects one
Like the mines
They would be Dictionary<string, ObjectData> i think?
Yes
Are the lower three rows (minus the perching sprite) completely useless?
And does this apply to all bat sprites in the game?
Yes basically 
Great.
Now, WHAT THE HELL ARE THESE SPRITE SIZES?
Oh, poor naive Radicalvice thought the game's entity spritework only consisted of 16x16, 16x32 and 32x32.
Oh, how one was wrong.
It is pretty doomed yes 
(peddling mode) do u wish to do variations on your monsters 
Can i put in two conditions, like if player has this mod AND also this config is chosen?
"spring_Mon": "{{Random: {{i18n:Spring1}} && {{i18n:Spring2}} && {{i18n:Spring3}} && {{i18n:Spring4}} |inputSeparator=&&}}"
is it possible to randomize dialogue with i18n like this?
Yes but there's an easier way.
"spring_Mon": "{{i18n: Spring{{Random: {{Range:1,4}} }} }}
Yes, I do that quite often in my stuff
"House Location": "Vanilla",
},```
Yep, are you using the When field or a Condition field?
When
the queries are different when it's a condition field though
Then void's example shows you how
AAAAAAAAAAAAAAAUGH.
You're asking a person who made Optifine resource packs for Minecraft mobs.
Oh that's great! Thank you, Aba 
Yes, I'd love to, but I'm terrified to think of how much time it'd take to do that.
is this right?
"When": { "Elliott": "Apricot",
"HasMod |contains= Oclarina.BigApricot": true, }
Are you turning elliott into a big apricot
yes
yes, not sure if spaces are needed though?
all thanks to Oclarina i complicated this for myself beyond belief
They're turning everyone into fruit, I'm pretty sure.
i would LOVE to know what is happening here though hahaha
you will see soon, void 😄 (i hope)
It's a mod that let you randomize monster looks
Well, now I gotta do it, don't I?
Pray tell, is there, like, a tutorial?
There's an author guide but u can just follow the existing packs
Would one consider this an easy process?
Visual Enemy Variety is simpler
I recommend looking at Visual Enemy Variety first
Monster Mash uses more features
I found it pretty easy
It helps being able to poke chu when needed
Just happened to have VEV installed, actually.
I'm looking over it right now and...
Yeah, this is piss easy, I'll probably give these dudes variety.
Do I gotta name all my variation files texture_(number)?
I am definitely going to have to adjust Monster Mash more
Nope, I haven't named any of mine like that
oh my god you made monster mash
So, I can just name them whatever, so long as I reference them properly in the .json files?
Yep yep
Can someone please look at my code?
Can you use the json validator please?
i did and it said its ok
No, I mean instead of putting your entire file in here
oh sorry
And please explain what help you need
ty (nonbinary equivalent of mr./ms.) monster mash
Yeah the part where png becomes an asset is the Load action, and that's where you can name your assets
You're Loading to "Target": "Mods/{{ModId}}/fruitspouses", and then using Mods\\{{ModId}}\\base
VEV was originally going to be an AT mod, which is why the files are named that way
oh sh.t! that part, ok thanks!
i forgot to change it from the last mod
IT WORKSSSS MUHEHE
one last thing
can i change the item description when it displays the apricot?
You need a mod to change the description of furniture. MMAP can do it and maybe SpaceCore can?
It's not that scary to use dependencies
Especially cus these r just "add another EditData" level of dep
Spacecore do indeed have furniture descriptions
It's not scary at all. Just download mod, use feature. Hopefully remember to add dependency to manifest.
yeah to use its ok but but to code
This is my descriptions using MMAP:
{
"LogName": "16px Animal Furniture Data",
"Action": "EditData",
"Target": "mushymato.MMAP/FurnitureProperties",
"Entries": {
"{{ModId}}_GoatPhoto": {
"Description": "{{i18n: photo.description}}",
},
"{{ModId}}_GoatSculpture": {
"Description": "{{i18n: sculpture.description}}",
},
},
"When": {
"LT_AnimalSize": "16"
}
},
i def know what's happening