#making-mods-general
1 messages Β· Page 192 of 1
Guys help me. I discovered TriggerActions and it's like I have a new addiction
I have added a whole goddamned rehab arc to my mod because of it. I can't stop.
I can do anything now
Please refer to above posts regarding scope creep, and good luck
But, but... the power
Bout the only thing I haven't been able to figure out how to do with just CP is send a kid to the farmer's house to be adopted
I think you can have event on the day after right
Could anyone explain, in the most elementary - I have zero brain cells way - how the advancedMove command works
I can see why I would want to use it in events instead of the general move one but my brain is refusing to understand how it works even with the examples provided
The basic advantages of advancedMove are that it allows you to condense a string of move commands into one command and it's also much easier to have mutiple actors moving simultaneously
How you use it depends a bit on what exactly you want to do, but as a basic example, here's a bit I did in No More Floor Fish to make Sam and the farmer walk at the same time and then pause while waiting for the other to finish:
advancedMove Sam false 0 1 3 0 0 -6 -1 0 4 1000/advancedMove farmer false 0 -1 -2 0 0 -1 -1 0 4 1000/waitForAllStationary/
oh i like that wait command at the end there
The false is a true/false on whether you want the action to loop (which is useful if you want a character running around on loop in the background or something), then the numbers are pairs of movement commands like your regular move command has, just without the facing direction at the end
The last two numbers (the single digit and the 1000) are a wait command to face in the direction of the single digit and then wait for the specified number of milliseconds
Yeah, if you're using advancedMove, you definitely want to pair it with waitForAllStationary because other commands happen at the same time as advancedMove, so if it's not there or if you don't have a long enough pause for the advancedMove to finish, the advancedMove will stop partway through and things will get wonky
This was very helpful thank you so much Airyn! 
I don't know why but the way the wiki explained it really wasn't getting through to me 
silly warning about waitForAllStationary: if your users have Random Cats in Events installed, those count as NPCs, and the command will wait for them, even if they're offscreen and no matter how long it takes
Oh no 
Gotta wait for them! they're important!
If I enter a mod idea with a firm fixed goal in mind, that also involves it being small as a base requirement, I can avoid scope creep. otherwise I tend to get scope creeped Hard, at least 3 of my hiatuses are from scope creep that I couldnt accomplish and just lost motivation. 
the other thing that is semi-fucked about move vs advancedMove is that they calculate being done differently, so if you have done a positionOffset on an NPC previously, move may never decide to stop walking and softlock your event, while advancedMove will work fine
My problem with scope creep is that I never truly know fully what I want to do. I have a concept, and an end goal, but I'll be making the mod and then realize 'hm what if I add these things and it would make it better and more interesting' ... and then I end up having to script and code 13 events
(i suspect it is because advancedMove takes the offset into account and move does not, but i haven't looked into it)
(still actively working on stuff that's been delayed by scope creep for, uh, a while)
(not that I was active during most of that time, but that's also why
)
On the plus side, with how much 1.6 opened up I haven't hit that wall in a while, and even managed to finish one of those projects
.
Now I should stop stalling and throw myself at the next stage of this project.
I didnt realize you were trying to Launch 2.0 as a goal Before I even published my first mod.
FTM's needed an overhaul since I released it, really
it wasn't made to be controlled by mods at first, just player settings
(then had a brief period of "have people download this json into their ftm/data folder", then actual packs)
so, I don't understand content.json files and will literally pay someone to code them for the two mods that I have. I'd obviously credit you on my mod pages.
!commissions
If you're looking for people who do mod commissions (either art or code), here's a wiki page with a non-comprehensive list of people who do them: https://stardewmodding.wiki.gg/wiki/Stardew_Mod_Commissions
^ the Code/Content Patcher Code lower down is probably the right group
hey uh i have question this is my first time making a mod so for my custom npc i did a house for him but it doesnt appear on the map even smapi doesnt tell it
and when it appears on the map i cant go inside even i make a warp
This is me right now
can someone help π¦
!json upload and link your content.json and we can have a look
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
(the first link is where to go)
thank you so much!
Im silly, and unfamiliar with map patches
how did you arrive at this format for your content.json? (i am thinking in particular of "did you follow a specific tutorial or video")
there are some important things wrong with it
I was a little confused by the trying to warp to it, part.
lol kind of
It does seem like you are trying to add a location for the inside
i tried everything but i cant do coding
yeah
So you still should check out https://stardewvalleywiki.com/Modding:Location_data for that
and the exterior
i didn understand about mod id actually
The mod id is what is inside your manifest.json in "UniqueID", also I am so sorry I don't how how to remove embeds
did you ask chatgpt to make this file for you? MapChanges is not a valid field for EditMap actions, and you should not be using format 1.27, and a few other things
haha yeah because i really dont understand about thattt
its so confusing
ok, so we have arrived at why it doesn't work π
do not use chatgpt to write mods. this is what happens
its fine i dont know anything either..
im ashameddd
π
Petition to make SetWeather a built-in action that can be called by events and triggers
Please just let me make it rain
CJB Cheats...
I'd recommend going to this page to get a gist of how to get things started, and then go to the location page I linked earlier. https://stardewvalleywiki.com/Modding:Content_Patcher. ChatGPT is not likely to give you reliable help for modding, so these wikis and learning from other mods is the way to go
i looked at these but its just so confusing my brain goes blank
i appreaciate it
It's a learning curve, but you can do it 
!anyonecancook
I wish there was a ready code or something π¦
!npc there's a template and a tutorial for a new custom npc!
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
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!
!modideas It might be that making mods isn't for you if it's that confusing π You can always put your idea on the ideas github instead if you want
If you have a mod idea that you aren't planning to make yourself, you can put it in the mod ideas github: https://github.com/StardewModders/mod-ideas
However, this does not mean anyone is guaranteed to work on your ideaβmodders who are looking for ideas sometimes go through and work on what they find interesting off this list. If you want to pay someone to make your mod idea, there are a few people who do commissions (mostly art, sometimes code); you can ask around, search usernames for the word comms, or see !commissions.
Well there is, just look at other mods
nevermind nevermind - that would be pretty cool actually... I know that ARV has an event where it rains I think? or at least emulates it
The great thing about CP mods is that you really can open any one of them up and learn from how they do things!
I'm pretty sure ARV uses a Spacecore command for that π
If you need help I am more than willing to let you use what I have as an example! Making Mr.Qi into an NPC has literally been a culmination of years of me making individual smaller mods to learn how to do the small things and then putting all of that knowledge together (as well as the help from the people in this lovely discord server) to make a bigger one
I am very much pro 'please use my stuff to learn' :3
O: so its possible... you just need a framework... Honestly it's really cool that spacecore can let you do that
Spacecore is?
Will I ever utilize it? ... maybe one day if I decide to make another cutscene for Qi
but I think the many like ... 16 I have for him is fine
Spacecore is another framework mod :3
I used it in my mod (as an optional dependency) to add descriptions to my furniture items
yet another example of scope creep
omg thank uu i just want my home in the map lol
Trying to avoid adding extra mods with mine. Though I am sorely tempted by the SecretNotes framework
im still looking at wiki
you could make it an event that has an optional dependancy too! load it in with a 'when' condition for when you have spacecore installed and boom you don't have to worry about people NEEDING the mod to have the event, you can just add it if they have it!
Oh yes, the event already has a weather precondition. I just hate the variability of making the player wait for rain
I'm working aroudn it right now by mailing them a rain totem
But it would be nice for CP to include SetWeather or something
No no I meant if you wanted to include a scene where it just starts raining DURING the event
optional dependancy for spacecore for that
Ohhhhhhhh, fair
I misread
you could just include a mail for the rain totem though
Still!!! The totem is a partial solution. I want to be a weather god xD
Just sad it doesn't exist
Thanks for pointing me at SpaceCore. I'm going to look at it just for ideas for future stuff π
(BETAS has a "set weather for tomorrow" action)
Current CP beta? Or am I misunderstanding?
Ooooooooooooohhhhh
Thank you @Button for making this! I'm really trying to avoid extra mods, but this is amazing
if y'ever need any other actions or anything in it feel free to ask 
So creating a custom location requires three primary things-
Loading the TMX file/map location
Actually Adding the location
Adding a warp TO the location
there are also other things like if your location needs a house or something similar to that which would require map patches and what not
Button, what does Spiderbuttons.BETAS_RemovePlayerModData actually do? Could I call that to reset a mod to it's starting state?
im done with my tmx file im just desperate for the content. the house show it for a moment but then i couldnt go inside even though i added a warp on tiled
it changes an entry in the Farmer.modData field that normally only C# mods can access
So you have a map patch that adds your house already?
ModData is like CustomFields but stored permanently on the player
Ah ok, thank you. It's not something that would remove existing triggers, conversation topics, etc
it would not no, it's just for being able to read and write arbitrary persistent data
Thank you π
yeah i guess
Actually, that's a question. When the player uses the shrine to erase an NPC
NPC's memory, what happens to mod stuff?
The warp has no where to go since you need to add the location for the warp to use π
i added warp like this on tiled
Cute house! π
Yep! Thats a beautiful home btw! The warp command works on locations, not maps π
aw thank youu
So when you reference "AtsushiForestHomeIn" that needs to be loaded as the internal name of a location
oh that is a lovely home
That's not your art. That's from Seasonal Japanese Buildings by sonreirblah
yeah i know
Which does have open permissions, but you need to specify here in the server that it's not yours
oooo ouch there - make sure you mention it next time though
Don't ping me on reply, please.
uum
For a warp like that you would likely need a lockeddoorwarp
sorry didnt know
It's okay - like Airyn said it has open perms, just make sure to mention where you got it from
It should be pretty obvious that you don't take credit for someone else's art and you say who the artist is when people compliment the art.
"Action": "EditData",
"Target": "Data/Locations",
"Entries": {
"NIVInnerInsec": {
"DisplayName": "InsideInsectarium",
"DefaultArrivalTile": {
"X": 40,
"Y": 52
},
"CreateOnLoad": {
"AlwaysActive": true,
"MapPath": "Mods/NatureInTheValley/Maps/InsectariumInterior"
},
"CanPlantHere": false,
"ExcludeFromNpcPathfinding": false
}
}
},```
Thats an example of adding a location, for reference.
The exact settings will be different, but thats again where you'd need to refer to the locations wiki
"NIVInnerInsec" would become "AtsushiForestHomeIn"
And the "MapPath" will use the map path that you already loaded 
so should i copy that and paste on my content file like changing like that
I mean you can, idm! Just change whats needed
You also probably dont need "AlwaysActive"
"LogName": "Load Room Location",
"Action": "Load",
"Target": "Maps/AngelOfStars.Mrqifriendable_QiRoom",
"FromFile": "assets/QiRoom.tmx"
},```
and loading said map woud look something like this
what means NICVInnerInsec
They loaded the map already, but yep!
minus the log name, you dont need logs, i just use them for content patcher stuff
Ohh i didnt know they did thats good
That's my location's internal name; which should be replaced for you
That's the name of their map you have to replace things with stuff that relates to your own individual map

oh okay got it
so what about the coordinates should i write the inside of the home entrance or the outside
the default arrival tile is where people ... default arrive really - so probalby at your enterence to the house near where the door is
okay, so... can someone guide me through making a custom npc? i feel stupid and i have like 5 tabs open from trying to figure it out π
uh, can you give any more specifics? I can't seem to find anything, also it may have not been clear but the inventory I want to add isn't meant for the player, I want it to be openable like a chest but not directly tied to them idk if that changes anything. To be exact I want this inventory to be opened via dialogue
Are there any other framework mods besides that I could be utilizing right now I see the mail framework mod and spacecore and thatβs about it
!npc Some temples and guides here!
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!
tysm yippee!
You don't have to subclass itemgrabmenu but i did because i was gonna do more draw stuff
i will do my best to make sense of these things and i will come back here if i need assistance. i've never coded anything before, i'm a complete newbie 
!gettingstarted
If you would like a guide to setting up mods for Stardew Valley, check out the getting started guide! https://stardewvalleywiki.com/Modding:Player_Guide
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.
Ah here
Thank you π
Frameworks are more if a "as needed thing"
Like you can send mail without mail framework mod
So it's probably nicer for user that you don't
i'm already back... i'm puzzled by this, i have no idea how to add these types of files π
Go to the folder, add a text file, at the end of it's name replace .txt with .json π
ohh okay! thank you :D
is it true now ...
or directly use notepad++ to make a json
!json
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
its always best to send a json through the smapi site to make people look at it
isn't the format like, much higher than 1.27?
Challenge: make a coherent mod using 20 different frameworks
i'll change that later
bet
Yeah, it's at 2.5.0 now
There's some errors in the json formatting, and you still want to load the other map you were loading before. Also; disable "AlwaysActive" and change the display name π
oh i didnt see the display name
huuh I'm gonna try to make sense of this but thanks
You can try it in game if u want
Dl the 1.5.0.beta from release and the mod called trinket holder
Whenever you use a trinket there u open a chest like menu
right thats actually a great idea
This is also the system used for junimo chests
So u can trust it is reliable
As long as u don't lose the key to ur global inv somehow
(Vmv ender chests also use that)
Fun fact you don't need to do cleanup
Well, on the empties
Really
Well that was a side thing
The main case is u delet trinket with stuff in it
hey atra
what's your solution to the cyclic dependency problem of a framework that copies data from other assets into itself
chu and I need it
collab
can you turn that into pseudo code for me thanks
i checked it but didnt understand again where did i do wrong...
im feeling so dumb
My brain is not awake enough to do what I want it to do, i need more caffeine i guess... or food? I haven't eaten today yet...
if you load the game and do debug warp AtsushiForestHomeIn in your SMAPI console does it take you anywhere
i dont know how do i do that
boot up the game, load your save file, go to the smapi command console that pops up with the game, and copy paste in "debug warp AtsushiForestHomeIn" hit enter
i'm once again confused... π i don't have anywhere for the goober to spawn yet, is this required?
yeah otherwise they wont spawn in
you could set it to like... the forest
while testing
okay cool
or for them to just sit in the town square etc
"Location" would be whichever map you want "Tile" is the tile location on said map "Direction" is which way they face
the mod doesnt work
Have you unpacked the game files?
it doesnt appear
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.
!unpack
Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!
if you're speaking to me, no i hvaven't and i have no idea how to :(
ohh
:3
okay cool ty
its really helpful
Thatll give you all the map names - and so much other stuff
A lot of it can be used as examples too!
at least generally
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home Single Language, with 11 C# mods and 8 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Your file had some formatting issues, if you use this you should be able to debug warp AtsushiForestHomeIn to go to the home π
https://smapi.io/json/content-patcher/ed247816248848178f6d912dd21b81a9
Though I think you removed the map patch for the exterior
Ah yeah idk how i didnt see the formatting issue lmao
Just some missing brackets, missing ]
the brackets... its always the brackets...
it gives error again
gosshhh thats so hard but i need this mod
Uh can you send the error log with the log parser not the json one
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home Single Language, with 11 C# mods and 8 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
i was just confused lol
so would i put town for location and then can i just put some random coordinates? and for directions what would i put for them to look forward? :'D
ohhh you got tilesheet climbing
!tilesheetclimbing
When creating or editing maps in Tiled, one common error is tilesheet climbing, marked by red text containing "invalid tilesheet path '../../..'. This is caused by SMAPI not being able to find the tilesheets needed by the map file. To prevent this error, make sure that you have a copy of all necessary tilesheets in the folder containing your WIP tmx file. Copies of vanilla tilesheets can later be deleted, but must be present while working on your map.
If you get this error with a completed map, an easy way to fix it is to open your tmx file in VS Code or a similar text editor, find all of the places with <image source=, and remove the filepaths to so that only the tilesheet names remain. For example, if the code says <image source="Content (unpacked)/Maps/townInterior_2" width="512" height="64"/>, change it to just <image source="townInterior_2" width="512" height="64"/>.
I'm not sure how to use mods that add other tilesheets (I've never used them before actually)
huuuhh
I think you delete them out before shipping the mod and jsut throw in a dependency in teh manifest?
i didnt delete any tilesheet actually
I suggest also downloading Tiled so you can look at SDVs maps to see the coordinates - setting it to a random coordinate will maybe have them spawn like... in a tree or something (which isnt helpful for testing)
you can really choose any map to start them in for your initial testing
Direction wise for NPCs its 'down' 'left' 'right' and 'up'
tysm! >w<
No we aren't saying you deleted any - Funtime Void was just mentioning how you can use mods that have tilesheets (like daisy nikos)
while still editing you shouldnt but to to boot up to check if everything works then probs a good idea(and then to just undo the delete to get em back)
Again your issue IS the tilesheet climbing issue (aka your tilesheets are in a folder that isnt the same as your map) so you need to fix that (not by putting said tilesheets in the same folder as the map - especially if you intend on releasing the mod) but by fixing the climbing issue by removing the paths (as explained with the command i sent)
Funtime Void is right as well because you need to add a dependancy for Daisy Niko's Tilesheets so that those can actually load since you used them
time to pause trying to make the mod and wait for profiles and sprites, yippee! :D
Quick question.
Is there a known way to fix Daisy Nikos combatting with Rustic Interiors and WBPT?
Yes, I know there is a support channel but this is a small question that isn't entirely bothersome to my game. Also I was directed, (I think) to toss this here.
My comment was directing Dottie, but we can probably answer that here as well, since it'd likely require mod editing?
I turned on a debug flag in Visual Studio, and now Stardew won't launch in debug mode, and I can't find the flag in options to turn it back off. Woooooooo
Ooop, sorry! I read it wrong π
i looked at codes of the exterior of the home but i didnt understand what exactly i should remove i looked at the command but its not the same
am i just gonna remove the <image source="paths" width="64" height="256"/> or..?
no worries, but just to get more specific: is it DaisyNiko's Earthy Interiors that's conflicting?
I just forgot I have the interior mod-
I honestly thought the issue came from having the recolor. .
I really gotta make a modlist folks.
haha, then you can probably just drop that mod to fix your issue. xD
https://smapi.io/json/manifest/bdefa66ebc434382b268532301079a7b well i ran it thru the validator, i just have no idea how to fix it
says invalid update key
well your update key is invalid
okay, so, for the UpdateKeys, if you have "Nexus:" you have to have the Mod's ID number (the number on the mod page URL) in there.
"UpdateKeys": [ "Nexus:<number>" ],
theres no id in it
Okay, nevermind, I don't have DaisyNiko's interior.
So I don't know why Rustic is bugging out.
Upon entering any place in town, opening a shop there, the frame and colors around the interior spaces experiences a lighting bug and flashes between many different frames, for specifics.
and says its all correct :D
Hey @uncut viper , am I doing something wrong in here?
"Id": "HorseshoeMagnetHold",
"Trigger": "Spiderbuttons.BETAS_ItemEquipped",
"Condition": "ITEM_ID Target (O)10",
"HostOnly": false,
"Action": "AddBuff FWB.Horseshoe_Magnet",
"Actions": null,
"CustomFields": null,
"MarkActionApplied": false
},
"Maru.MagnetUnq": {
"Id": "HorseshoeMagnetPlaced",
"Trigger": "Spiderbuttons.BETAS_ItemUnequipped",
"Condition": "ITEM_ID Target (O)10",
"HostOnly": false,
"Action": "RemoveBuff FWB.Horseshoe_Magnet",
"Actions": null,
"CustomFields": null,
"MarkActionApplied": false
},```
can you get a smapi log? smapi.io/log
(wrong Button)
I can, one moment^^
(also if the issue is now just with a single mod and they arent making it, thats tech support channel territory)
can you describe what the issue is; is it just not triggering at all?
In C# land, where should I be looking if I want to place an Object on top of a tile on the map that can be picked up by the player?
This was supposed to trigger the buff:
"DisplayName": "{{i18n:Horseshoe_Magnet.Name}}",
"Description": "{{i18n:Horseshoe_Magnet.Description}}",
"IsDebuff": false,
"GlowColor": null,
"Duration": -2,
"MaxDuration": -2,
"IconTexture": "{{InternalAssetKey: assets/assets.png}}",
"IconSpriteIndex": 2,
"Effects": {
"FarmingLevel": 0.0,
"FishingLevel": 0.0,
"MiningLevel": 0.0,
"LuckLevel": 0.0,
"ForagingLevel": 0.0,
"MaxStamina": 0.0,
"MagneticRadius": 128.0,
"Speed": 0.0,
"Defense": 0.0,
"Attack": 0.0
},
"ActionsOnApply": null,
"CustomFields": null
},```
But it's not triggering
Fair enough, Otter and I can move over to #1272025932932055121 now since it's no longer editing a mod to prevent a compatibility issue.
at least I meant to when you hold the item you get the buff
(Sorry to make you relocate yet again @unborn fog )
oh, when you hold it? not equip it?
yes
It's alright! I'll make a post and try to get videos/photos of the bug to further help and the smapi log. Would you like me to ping you upon it' creation?
because it's supposed to activate when you hold the magnet on top of your head, rather than equip it in any field
ItemEquipped only fires when you actually put equipment on and also when you select a Tool (dont ask me why, game does it)
but just holding any old item above your head isnt equipping it
Sure! I can't guarantee I'll get to it right away, as I'll be busy for a few hours, but we've got lots of folks who would also be able to help you if they get there first. π
Alrighty! Thank yous
Ohhh...so, can we have that trigger?
hmmmm,
I'm thinking about making a Farm Cave redesign for this map, but if I do, I know i'll have to make a config for it, so people can turn it off. Also I'll probably have people who want it as a standalone, also I'll need to figure out how the farmcave works in terms of determining spawn area for like the mushroom boxes vs Fruit.
its admittedly not a trigger im really keen on adding bc a trigger for "swapped to a different active inventory slot" happens like, constantly. that sounds like a recipe for lag
ok the json validator said everything was good but now smapi gave me another error.. SOBs
Got it
just scrolling through your hotbar would cause it to happen 12 times in like a millisecond
and each time would need to check every triggeraction edit to see if it applies
It's fine, I'll work around it
does anyone know offhand how the farm cave generation works?
there is a GSQ in BETAS for PLAYER_HELD_ITEM if you can find some way to use it
And what about an action that let you spawn an item in the ground (for example when you harvest Sunflower and the seeds jump from the ground, or when you break a geode or dig an artifact spot)
how do i simply target a set of sprites? trying to edit Sebastian's beach sprites and i just wanna target the vanilla sprites
you made some very good points about the possibility of lags
okay i solve this the exterior is here im glad.. but now i cant go inside
wait what. why does the file from the riceball indicators say bunny.png LMFAO
well artifact spots you can already change the loot tables of yourself with content patcher, including setting things with higher precedence based on a condition. spawning random item debris though has been on my todo list for a bit, just never got around to it, was never sure how super useful it'd be without a real way to target where it happens
no you want to remove the filepath -
Hey there sorry to interrupt- I'm new to modding and by new I mean been trying to use AI to help me make a mod and sadly it failed. Would someone be willing to inspect my code I've been making in Rider?
do not use AI
i will not inspect AI generated code and i wouldnt expect someone else to want to either
That bad?
../../../Downloads/DaisyNiko's Earthy Interiors-14790-1-2-2-1736419033/[CP] DaisyNiko's Earthy Interiors/assets/townInterior.png the error your log is throwing looks something like this so you'd want to remove literally everything other than "townInterior.png"
also, AI generated mods arent allowed in here
what is up with this wave of AI today
Oh, crap I ap[ologize
hello??
anyways the reality is that the LLM is not trained on SDV mods
it will fail confidently and we will go 
You could emulate Multi Yield Crops for example
A lot of AI models are out of date on current frameworks and SMAPI
oh im slow, the riceball pngs are named bunny. huh
you target it the same way you target any other sprites. Characters/Sebastian_Beach or whatever it is. also, please be patient, "hello??" is not necessary when people may have just missed your message in a fast moving channel
We CAN help you start making the mod in a way that ISNT using AI though :)
You might not even need C# or anything for what you want... maybe
the issue is that e.g. "Spiderbuttons.BETAS_SpawnItemDebris [itemid] [location to spawn it]" doesnt have a good way to figure out the "location to spawn it" part because it doesnt really have enough information. if you break a rock, for example, that can fire a "RockBroken" trigger, but how do you write the location to spawn it if you dont know where the rock is that they broke
thank you and sorry. i felt a lil ignored.
isnt this something item extensions can do already
I'd love to make a mod without AI, again I apologize I should have realized that would be ick. Uhm the general idea I had was to eliminate the need for a spouse to adopt a child in the beginning month..
sometimes things just get missed, if its been completely missed its accidental 99% of the time and you can just reply to your message to give it a little polite bump. the other 1% of the time is the people around dont know the answer
still very confused by this T_T
fym line 29 it only goes to line 27
ahh
u need another ] and }
No reason to apologize. AI is not evil, just a new tool that isn't quite there yet.
you dont have any closing brackets
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.
using editor that check 4 u is great
You seem to be missing a closing bracket and brace.
What do you mean by this? Like to stop children from being adopted entirely?
Single parent adoption
Bingo
I misread it
i also misinterpreted it the same way i think but that makes more sense
Maybe tie it into a phone call
!chatgptcode
Please stop trying to get ChatGPT to write your C# mods for you, especially if you don't know how to write C#. It won't work without heavy editing, and it wastes everyone's time.
Large language models fundamentally are reguritating something from their inputβwhich is roughly speaking, the written output of humanity up until 2021 or so, for ChatGPT. For specific, niche topics like "is this framework going to do what I want" or "which things does Game1.cs have access to", it probably has no idea! But it's good at detecting that people in the past have....said things about frameworks and written things in C#, so it does its best to assemble words and symbols into a nice order for you. Sometimes it tells you true things, and sometimes it tells you false things, and if you can't detect when, you're in trouble. When you're writing code, this usually produces garbage, because you can't be "sort of similar", you have to be exactly correct or it won't work.
O: that's a very cool idea - I do think it'd need C# though
Unless you could use CP to trigger the dialogue box to pop up with a custom text...
hmm im actually surprised ive not seen a mod for it before
Me too honestly
I do appreciate the wave of people WANTING to mod though 
(Or make Superman, and have a chance for any meteor crashed on your farm to come with a definitely not Kryptonian.)
It is a great idea for a mod
I didn't know that framework
thanks
Why hasn't superman come to the valley now that I think about it
It's exactly the kind of place the guy would love. Surprised nobody has made a mod for it
Maybe put it in the ideas github and someone might pick it up
the files are set up right??
That's actually a really good point...
Where would be a good place to learn C# for future attempts at making the mod myself though?
OMG, what if you get the adoption phone call the day after the strange capsule opens
have you looked at the CP documentation? you'll need to place your patch inside a CP-formatted json
What's that command with the c sharp yellow book
!yellowbook
A good book for learning c# is https://www.robmiles.com/c-yellow-book
There you go
(i had no idea if that would work)
Omg you guys are awesome
wait where's that??
My workplace also offers a C# course So I'll be using that plus the book here next month
But there's corn so it's close enough
!startmodding the top half of this governor command should be able to guide you
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.
the wiki tutorial for content patcher specifically
it also links to the content patcher documentation (see "full Content Patcher readme" at the top)
fwiw about spawning debris items earlier, I'm actively working on trigger action stuff for FTM atm & can probably add that as a spawn type once it's done (though that'll be a while, & not trying to discourage Two Cakesβ’οΈ in any case)
oh my god im so close to fixing this mod. all i need now is to figure out the configschema thing..
"[Content Patcher] Could not load content pack 'Rice balls relationship indicators': using the ConfigSchema field requires Format version 1.3.0 or later."
how do you plan on solving figuring out where exactly to spawn the item debris when you dont know where the trigger takes place
I just finished a tile query system for that in particular, aside from adding more conditions, e.g. "Tiles": "AREA 5 5 10 10, IsPlaceable"
you should be using the most up to date Format number, which matches the version of content patcher. you should be using 2.5.0 (or 2.5.1)
so i just change it to 2.5.1 and itll work?
am i correct in interpreting that as you still needing to hardcode where the tile is, though?
(incidentally, I can probably put that in the API if it's helpful anywhere else)
yes
okie!
assuming you have CP version 2.5.1 installed
Congratulations!!!!!
technically the system returns all tiles in random order for the given location dimensions, minus any that don't match the query
yup 2.5.1
e.g. that query up there would return anything between 5,5 and 15,15 that isn't obstructed, in random order
-> the action itself eats that and places a number of items based on some other fields/args
hm, i think we're talking about two different usecases here, then. for BETAS, it would be something like MinedRock -> SpawnItemDebris at the location of the rock
but you cannot possibly know the location of the mined rock beforehand
Wouldn't the mined rock be 1 space in front of the player location
not necessarily
ah, yeah, I'm not sure if it's relevant in that context then
I'm not sure about passing context like that
I guess not for a bomb
mods might increase the reach, or have the pickace work in a grid like the water bucket, bombs also count as mining
i can pass the location of the rock into the context, but then the issue becomes how to make it generic and work on things that arent just rocks
yeah, and there are no properties to read when a object is broken?
i dont understand where to remove π¦ my brain is so blank right now im just staring at the screen for 20 minutes trying to solve thissssss
there are ways to read object is broken
but i think what button is getting at is that there's a broken pipe in here
the Trigger reacts to something, the Action is context-agnostic
like, consider putting a SpawnItemDebris action in a dialogue command? or a letter? it can be used anywhere that an Action can be used
in a dialogue command you'd might wanna spawn it at the NPCs feet. in a letter, maybe the mailbox? or maybe at the farmers location, for both. i havent come up with a good, not-confusing way to allow for generic possibilities like that
Ah, I see now
yeah, that'd probably involve a lot of preset unique values that might also only work in 1 context
hm but
(incidentally I need to remember to give spawn actions an optional "spawn on this specific tile" arg, not just a custom field)
i actually cant think of a good but confusing solution either actually, bc for a custom Trigger adding context is easy, but adding it to something like a dialogue command is... impossible, unless i transpile the dialogue parser. which
is not ideal!
i remember theres shenanigans with debris appearing on locations that ur player is not in
it just dont bc not loaded
it's been a few major versions since I bothered to spawn debris anywhere, since mobile 1.4 only supported it at current location 
(and also thatd ONLY work for the dialogue parser. id need to do the same for buffs, letters, museum rewards... anywhere that an action works. which ofc wont count modded ones)
I think it used to be fine anywhere on PC depending on which spawn method you used, but idr for sure
the particular context for this was
rokugin has a mod that needs to collect bush shake drops
in trinkets i was able to do the catch debris method bc well its trinkets, player is there
rokugin couldnt for some reason, most likely player is not there, so ultimate it just use api
Hey no promises on the course being good, I'm just glad to find something that actually teaches it plus the book
tbh the other issue with a spawn item debris action is like. its not necessary either, itd mostly just be for fun, since you can just add the item to the players inventory directly
Self study is good! It's also a little limiting if you have lots of questions and you don't want to bug people 5k times for answers XD
some visual flair
yea
tbh i think it is good argument to just restrict to player current location 
cus if u r not there then why not just do placed object
restrictions... 
PlaceObject wouldnt be a bad idea tho
does picking them up work with just objects generically or does it only work with crops and like, quest items
gotta get in on the spawn items framework competition 
so some objects do funny things when placed
for example fence becomes a real fence
need tool to break
Monster musk has to be broken like a machine
its not very clean but maybe thats the point
let me drop a bomb in front of my house every day
thats a TAS not an object innit
I only know that because I have a rooster that "finds" monster muck
I think bomb melts into a tas when used, yeah
probably be easier to just make an Explode action
On The Farm Cave:
~So it looks like the Farmcave's warp property does nothing, and the exit warp is hardcoded instead?
~The Mushroom Boxes are fixed in location based on coordinates.

Not a lot of wiggle room.
When you open your TMX file for your map you're going to see something that looks like this
the part I underlined is where you would remove stuff - because that's causing the error. Your image source should only be the name of the Tilesheet.png
u can extend down and right
I would have to actually see what yours looks like to know what the full filepath you have to remove is
while sorta keeping the original cave cleared
i dunno about warps, maybe the Action and TouchAction ones will work 
yeah, but at the same time, it doesnt work well for the space i was thinking of putting the cave on the map, I had room to go up with my planned location but not east/south
I see why so many farmcave edits just add a ladder with a zone below that they have free reign over.
what if u do something dumb like
a interior warp that goes to some down/right part of map
but is implied to be top/left via a touchwarp
why is your tmx a txt
at that point there isnt much of a difference from just having my own map rather than the cave, the hope was I could make a large farmcave
i'll have to brainstorm on it.
is that what discord usually does for tmxs.. ?
i opened in txt and send it so she can see it idk if i did it right lol
i believe normally its just a Downloadable file, but you can open them as a text format, and maybe they sent that?
Also some of your filepaths look like they're just vanilla assets but you renamed them? which if you want them to load from the game they need to be named after the actual tilesheets
i.e. 'pathshj' - if it's supposed to be the 'paths.png' it needs to be named that
(from the vanilla game)
if its your own tilesheets you have to load them in if you have them in an assets folder iirc (i just keep all of my maps + my custom tilesheets together/ in the same folder)
yeah i copied them when i was working on taled i create a new sheet and opened the vanilla ones but it just made me rename it i dont understand
is this causing a big problem
for future reference you can drag vanilla tilesheets into the same folder as your map and delete/move them out when you're done to avoid the tilesheet climbing thing
I don't actually know honestly
I just know that all of the ones I use are pngs
and the ones other people use are also pngs
Do me a favor, when you look at your tilesets in Tiled, is the 2nd of these symbols lit up instead of greyed out?
https://i.gyazo.com/4f9ad7178c8e27741f8350258731355d.png
Ok so im on the part of modding where im trying to make a map for my NPC (im using Tile) Im making the mod for my gf I actually dont play stardew so I dont 100% know how everthing works. She plays with Stardew Valley Expanded is it possible for me to put a house on a already existing map such as on stardew valley expanded like in empy space. Or do I need to add a warp?
greyed out
Okay, so its not that 
i delete it now but when i opened the map in tiled it cant find the files
Yeah because it doesn't have the filepath anymore - if you want to edit the map (or need to) drag the tilesheets you used into the same folder as the map like I said
itll prevent it from doing the tilesheet climbing
(and again, rename those vanilla ones to the actual vanilla names or else they wont work in game)
should i make them png?
yes (i still have no clue why they arent)
yeah I have no idea either
well if they are tsx files then you can't just rename them into pngs
so make sure you're not doing that and actually grabbing the actual tilesheets
(Note that SMAPI / Content Patcher do support .tsx tilesheets, and there are advantages like sharing animations between map files.)
Ooo very interseting
probably got exported from one of the vanilla maps
I'm so stuck. I'm trying to lower the price multiplier for wine so that it doesn't sell for quite as much money, but I can't figure out how to do it. I've tried Content Patcher and Producer Framework Mod, and it hasn't worked. I was told here previously I need to use C# but I have no idea where to even start in that regard
Has anyone made a mod to allow 32*32px object sprites yet?
could it be because of maybe i embed it..? i dont know yesterday i tried to open the map with pngs but it didnt work i thought maybe i could embed the tilesheets
@dusk mulch Okay, the actual final thing is ready for testing. Some minor tweaks to the JSON format:
"Changes": [
{
"Action": "EditMap",
"Target": "Maps/SeedShop",
"MapTiles": [
{
"Position": {
"X": 8,
"Y": 18
},
"Layer": "Buildings",
"SetProperties": {
"Action": "PEEM_InteractionGetItem YourMod.YourItemPickupID"
}
}
]
},
{
"Action": "EditData",
"Target": "PEEM/ItemPickups",
"Entries": {
"YourMod.YourItemPickupID": {
"ID": "YourMod.YourItemPickupID",
"ItemID": "(O)256",
"Quantity": 4,
"DaysToRefresh": 3,
"LocationName": "SeedShop",
"Tile": {
"X": "8",
"Y": "18"
}
}
}
}
]
Essentially, anything MEEP was renamed to PEEM. Other than that, there should be no changes. And the pickup cooldowns should work with multiplayer, but it's completely untested. You'll want to just bundle it alongside your mod once it's been tested enough.
Attached the zip here: #making-mods-general message
im still trying to fix it tho
I think Poohcore unfucks the movement (it's technically possible in 1.6 but the movement's wonky iirc)
Yes, you can patch a map to add a house
but you will also need to add a warp in and out.
!NPC Pretty sure I link to the map patches tutorial in the first link
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!
if you use a click warp, does it let you do it on a horse or do you have to dismount
I think you can? Based on the mines, anyway
Those should be click warps and I can get on them while on the tractor (though the hitbox is a bit wonky)
(Ignore me, can't reattach to an existing message.
)
You don't need C#; you can target the Wine output item in the Keg output rules in Data/Machines and add a new price modifier (like divide by 2 or something)
Someone did the same for honey [here](#making-mods-general message)
(I have to run for a couple hours, can't stay to elaborate sorry)
Awesome thank you so much im going to play around with it
The only issue is other mods adding more wine rules
There's not that many i feel but cornucopia is one
Just rmbr to add for those as well
ive been trying for days with no luck. when you're available next could you @ me again and help explain it?
Hmm just tested, it makes me dismount my horse
You will dismount if you miss, yeah. It often takes me several tries.
ohh i didn't even think of that. i have Artisan Goods Keep Quality and checked to see if that was interfering, but i didn't realize Cornucopia also might be. thanks π
good thing to do when making mod
test with only your mod and mods strictly needed
at least if you're stuck with something that should work but doesn't always work or you have doubt or it's likely to have interaction with stuff
I tried like 2 dozen times, even when hugging the click warp, from both the bottom and the sides, i don't think its reliable as an expectation from a user.
i don't always do that (and sometimes i DO want to test interactions with stuff i play with), but if i need a clean troubleshooting stuff then i make a separate test folder
if its gonna help, should i start to make it again from the beginning..?
You don't have to do that - from what it appears you CAN use TSX files (according to the all mighty Pathos whos word I shall take as gospel in this situation)
I'm not sure why you could\n't use PNGs but you should be fine as long as your tilesheets are named with the correct corresponding vanilla file you got it from
i.e paths.tsx
Specifically here - for any tilesheet that is vanilla, make sure you change the name to be the actual vanilla tilesheet name
tsx's just store some of the information thatd normally go inside the .tmx inside a different file instead, theyre completely fine, though if theres a bunch of little errors that compounded into one hard to untangle mess it sometimes CAN be easier to just start from scratch and redo it right, but that depends on how much you've done and how much you dont know how to fix (and your patience ofc)
for your own custom tilesheets im not actually sure how to load those in from a separate folder, i think you just need to have them loaded via your content json (and then adding daisy nikos as a dependency for those tilesheets)
That's true yeah
Sometimes it can be a breath of fresh air to just... start from scratch
like using a tsx in itself is fine, but if that tsx was imported wrong and uses the wrong name, and has wrong filepaths, and is out of order if using a vanilla map, then... it can just be kind of a mess
Am I crazy? Isn't the phone menu located in menus not objects?
(Personally speaking I hate TSXs in SDV mods, but that's just because when I started out modding maps I made a tilesheet into a TSX and it was a mess... and it was for a mod that wasn't mine that I was trying to update...)
(Never again
)
which phone menu?
Like for the telephone furniture after clicking it, if I wanted to add an option to that menu I need to hook to it (still trying to grasp the logic bear with me)
oh, not the assets, the code part
The interaction code is probably in Objects.cs tbh
i can't help with code stuff
The part where menu is opened
you also cant just "add" an option to it, you need to regisdter your own PhoneHandler
Damnit I was really hoping lmao
How many Active BuffIcons added by a mod is too many Active Buff Icons?
ask 100 users that and get 101 different answers
it depends if they can be active at same time or not
37 final answer take it or leave it
they'll be permanent
this isn't really answering me
if its permanent, my personal answer is 0
Permanent and Stackable - I'm ressurecting Perks of Being Married
i mean
But this time, you get by completing special orders with Bachelors at 8 hearts
If it not simultaneous it's ok i guess, dunno what h be doing with polymod tho
Oh bachelor's ok i vote 0
I tested not having an icon, it didn't work
more is depending of user, i would dislike havig too much
my answer doesnt change whether what you tried works or not. as a player, i do not want a permanent buff icon on my screen. period
others may feel differently
invisible buff icons would still push other buff icons around. that said i was sure there was a way to make it NOT have an icon? or is that a spacecore thing?
but one icon is fine, a bit more is okish, more will be annoying, for me, which is why you need to decide what is acceptable for you
Yeah you can have iconless buffs
If it a permanent buff, just tell me I have it. Put it in special powers. I don't want a icon cluttering my screen.
You can also just register one buff with multiple actions/effects
Yeah, I think I'll make the permanent buff one only, and have it being upgraded as you gain the other buffs
i wondered if having one buff, but stacking the obtained buff would be a way to go
but powers may be a good approach too
or one power, improved by what is obtained? to avoid clutter
The thing is: the buff is added via a trigger action and it's added
anyway, i am glad i don't have to decide ahah π
I like the powers tab idea
Even if I turned it into a power, I can't add the values without adding the buff (with the icon)
Assuming iconless buff works (it should)
at least not in a C# free way
You con condition ur trigger action from having the power
but the action is adding a buff
not adding +2 to defense for instance
I don't understand the distinction
Im not 100% sure how to do it without C# but I've definitely made some complex iconless buffs, which are able to be edited post application.
If you wanted to stack the effect, for example
Doing this internal cavern is hurting my brain a bit. Why do i need to be so detailed and match elevation levels of the surface and physics 
Because u r full of love and care
For example, if I create a trigger action and have it add +2 to defense, I would have to link it to a buff. I can't say to content patcher add +2 defense to farmer I have to say add a buff to farmer that grants +2 defense - this buff will then grant +2 defense - but that would have an icon
The premise was assuming iconless buff works
8AwA8 is saying you dont need an icon
But did they "occupy" a bufficon space?
Maybe u can share log n content json
No
it defintely doesnt help that i have waterfalls flowing into the cavern from the surface, and outputs for them when they come back out of the caves, so i need to match those along with elevations, its gonna look really cool when I'm done i think, but man...
In C# buffs have a visible field, is that accessible in CP?
no
"DisplayName": "",
"Description": ,
"IsDebuff": ,
"GlowColor": "",
"Duration": ,
"MaxDuration": ,
"IconTexture": "",
"IconSpriteIndex": ,
"Effects": {
"FarmingLevel": 0.0,
"FishingLevel": 0.0,
"MiningLevel": 0.0,
"LuckLevel": 0.0,
"ForagingLevel": 0.0,
"MaxStamina": 0.0,
"MagneticRadius": 0.0,
"Speed": 0.0,
"Defense": 0.0,
"Attack": 0.0
},
"ActionsOnApply": null,
"CustomFields": null
},```
these are the only options available
new framework opprotunity just dropped? HBI (Hidden Buff Icons)
Something like a power framework
joke aside, i'm going to bed, good luck
thanks
Also: Those are the only buff effects accessible in CP?
Why is it randomly missing like, 4 buffeffects
those are taken from Buffs.json (Vanilla)
The same method that handles adding buff effects also lets you give Knockback, Immunity, WeaponSpeed, AttackMultiplier, CritChance and CritDamage
As in the vanilla logic
I think the wiki is just out of date or something, Buffs.json includes buffs that have these fields:
"AttackMultiplier": 0,
"Immunity": 0,
"KnockbackMultiplier": 0,
"WeaponSpeedMultiplier": 0,
"CriticalChanceMultiplier": 0,
"CriticalPowerMultiplier": 0,
"WeaponPrecisionMultiplier": 0
Look at buff "12" for example
Those are covered
Speed, Attack and Defense
Those are the ones it changes, but it exposes those fields (the ones in my previous message) as ones it could change
"DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:Buff.cs.453]",
"Description": null,
"IsDebuff": true,
"GlowColor": "Yellow",
"Duration": 6000,
"MaxDuration": -1,
"IconTexture": "TileSheets\\BuffsIcons",
"IconSpriteIndex": 12,
"Effects": {
"FarmingLevel": 0.0,
"FishingLevel": 0.0,
"MiningLevel": 0.0,
"LuckLevel": 0.0,
"ForagingLevel": 0.0,
"MaxStamina": 0.0,
"MagneticRadius": 0.0,
"Speed": -2.0,
"Defense": -3.0,
"Attack": -3.0
},
"ActionsOnApply": null,
"CustomFields": null
},```
I only have this ones
"DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:Buff.cs.453]",
"Description": null,
"IsDebuff": true,
"GlowColor": "Yellow",
"Duration": 6000,
"MaxDuration": -1,
"IconTexture": "TileSheets\\BuffsIcons",
"IconSpriteIndex": 12,
"Effects": {
"CombatLevel": 0,
"FarmingLevel": 0,
"FishingLevel": 0,
"MiningLevel": 0,
"LuckLevel": 0,
"ForagingLevel": 0,
"MaxStamina": 0,
"MagneticRadius": 0,
"Speed": -2,
"Defense": -3,
"Attack": -3,
"AttackMultiplier": 0,
"Immunity": 0,
"KnockbackMultiplier": 0,
"WeaponSpeedMultiplier": 0,
"CriticalChanceMultiplier": 0,
"CriticalPowerMultiplier": 0,
"WeaponPrecisionMultiplier": 0
},```
I just extracted this from it's xnb
Is it bc u put "" instead of null
If you'd like you can test it - but I'd say they are real fields and the wiki doesn't want you to know about it 
I'll test it - since it makes my life easier - I saw Animal Husbandry food buffs had these fields, but I wasn't aware if it worked
i renamed them but its still not finding the files
do yo umean when you try to open the map in tiled
yeah
because if you're talking about that you need to have the tilesheets in the same folder
i have them
renaming them just makes sure the game can read them when you load your mod
are they named the same thing
i renamed the original ones how they should be
everywhere
on notes on tiled on proporties
You may have to replace them then 
theoretically it should just work
could you send a picture of what your window looks like here?
i see
Right so, what im guessing is that some of the tabs there on your tilesheets - if you click on them - just look like a bunch of grey boxes right?
yeah
like this
that's okay that too - do you have a box up at the top of the window that says stuff like this?
yupp
perfect - you're going to double click on each one (one at a time) and follow these steps:
- scroll for the little section until you see the name of the file
- click on it so it opens the window in the second image
- click browse
- open the corresponding tilesheet that is in the folder with your map
then you can press the x button up at the top and when it prompts you on if you want to save click yes
if you need help at any step let me know
every time you do that you should see the proper tilesheets show up for each thing again
If I use a AddMail received action, does it ignore the need to have anm entry in mail.json (working as a flag only)?
Yep.
Thanks!
"Name": "recolor",
"Value": "DNEarthyRecolour",
"When": { "HasMod": "DaisyNiko.EarthyRecolour, Aimon_WitchyDGR" },
},```
Is this ```"When":``` condition formatted correctly?
Is there any issue if I use it several times to add the same "mail" (because I'm not sure which event will occur first)?
Yep. The condition will be true if either mod is installed (or both are).
Thank you. ^^
Like, would it be true the first time and be false the next time I add it?
The behavior depends on the mail type argument you set:
Now: it'll get added to the mailbox multiple times.Tomorrow: it'll only be added for tomorrow once, even if you call it multiple times. However that will happen even if it's already been received on a previous day.Received: it'll only be added once (adding it again does nothing since it's a hash set).
If you're setting a mail flag, you can just use Received.
Thanks, that's what I wanted to know
Hi, sorry to bother again, but does "ConfigSchema": need to be the first section in the content.json? Or can I add other sections before it, such as "DynamicTokens":?
The order is usually format > config > dynamic tokens > changes by convention, but the order of sections doesn't actually have any effect. So you can put them in any order you want.
(The order of entries within a section does matter though.)
Thanks; it's a relief to know. My internal logic dictates dynamic tokens should come before config since they're references for actions performed in the config and changes section. O:
well, putting them before it in the content.json wont force any specific order of operations. CP processes them in the same order regardless
(Yep, so it's fine to put them in whatever order is most readable to you.)
Here's the first early technical preview of Central Station, the upcoming successor to Bus Locations and Train Station.
See:
This build includes:
- the boat/bus/train networks;
- a placeholder Central Station map with the shop actions;
- integrations with Bus Locations and Train Station;
- all features documented in the mod author guide.
Not included yet:
- the actual Central Station map and its various flavor interactions;
- random NPCs;
- mod pop-up shops.
Feel free to try it out and report bugs, feedback, or suggestions here!
i have been waiting to click the download button ever since i saw pathos start typing. dunno what im gonna put in there yet but ill be danged if i dont wanna try it
(i, too, have been summoned)
If you edit the layout of that map, you can optionally add the ticket machine yourself. Central Station won't re-add the machine if the Action: CentralStation Train tile property is already present, and it'll automatically adjust its train stop to match the position of the ticket machine.
im confused about this a little
is it potential mod arms race
But does it support SVE?
no
i think directly editing the map is kind of inherently a mod arms race
the question to ask is "does SVE support Central Station"
brain hurst, i'll be back after dinner with more brain power. I think I may have designed an entire area in a way to accommodate something that didnt need to be accommodated?
That's basically there to support SVE (and any other mods that replace the railroad with a custom layout). So let's save SVE moves the actual railroad somewhere else on the map; if it adds the ticket machine itself, Central Station won't add a duplicate in the original location. (It deliberately edits the location late to allow for that.)
naruohodo so it is yield
i open the game and see yet another livestock bazaar update 
can we keep this as an easter egg?
hm
Pathos, in the StopData, is it supposed to be Network or Networks and is it a list of strings or a comma separated list single string? the docs use all of those
Should be Network, and a comma-delimited single string. (It went through a few iterations; I'll clean up the readme to reflect the current format now.)
would that make it difficult to edit the networks with TextOperations?
TextOperations only support a text field, so it works because it's a comma-delimited string.
@ivory plume unrelated, but since you're here. Would you consider a split string/number range local token feature for Content Patcher?
mostly wondering about the delimiting with a comma, i couldnt remember if having that would mean if you appended one itd have a trailing comma at the end
i dont use textoperations much and can never remember them fully 
TextOperations has built-in support for that; you'd just set the delimiter to ",", and then you can add/remove/edit values as you want.
i thought its 1 more attempt to get foreach into content patcher
Can you give an example of what you mean?
The idea is to replace multiple Includes with a single one that repeats based on a local token taking on one value from a list of values
afaik textoperations search just hates space delimited
I think I was looking for something similar at some point if I understand the idea correctly
space delimited is fine its just when the values you want to edit have a space in them but are just one value in actuality
{
"Action": "Include",
"FromFile": "data/box.json",
"LocalTokens": {
"L@Capacity": "{{Iter:2, 3, 4}}",
"L@SheetIndex": "{{Iter:0, 1, 2}}",
}
}
proposal 
seems like that way would get real weird if the lengths of the iterations didnt match
hm
i guess the iter need a key too
cus the intention was for these to be same level
but i see how it could seem like nested
i think this is like the 4th time the features been brainstormed/discussed and much more than the 4th possible implementation suggested 
(4th time discussed in any detail anyway)
the yearning 
I prefer not having magic behavior (e.g. special token names that trigger hidden behavior). So I'd prefer an approach that adds actual fields which can be schema'd/validated/documented.
tbh i think theres only a few mods that would seriously benefits from this though
theres only a few mods that benefit from TargetLocale too, but its a t hing
I think there are multiple ways to go about it, but in the interest of simplicity my opinion is that it'd be a new field that simply defines what to split on, and what local token it is assigned to
do most mods add that many templated things
no bc it didnt exist until like this month
well as in, things that r concievably templated ig
machine progression system was the big one i have in mind
in my mind it benefits when you need to do something for each thing in a list but dont know ahead of time how big the list is
maybe more ppl make these kinds of thing if its easier ofc
What is targetlocale
it targets a locale
my heavily simplified usecase was wanting to use a token to refer to, say spring_1, ..., spring_5 using a numbered range (to make changing the end of the range using config options simpler etc in templates), so basically a range with a string prefix (I still don't know if I'm understanding the idea you're proposing correctly but it's late so lmk if I'm off base Matt)
"TargetLocale": "fr-FR" will only touch the french version of an asset
TargetLocale covers cases where you need to edit a specific language variant of an asset regardless of the current language. It's used in certain edge cases like bundle data, where the game loads both English and translated assets.
(It exists because there are certain edits that aren't possible without it, it's not just a convenience feature.)
oh yeah, i think i hit the limit of it in regards to the FarmAnimal stuff where I just,, sucked it up,,, and just did targetfields
in the end i feel like this is still the better option due to not having to invalidate FarmAnimals every single time
Wdym invalid farmanimals every single time
uh i had the itemIDs set to a random token before and selph/button/chue was like, "you're gonna invalidate every single day" and went, "you're right"
you say our names like we r some kind of council
yeah the council of bonking me for my crimes
@ivory plume this example is a bit sloppy, but something to this effect. Where you can include the cartesian product of tokens from a set.
From this:
{
"Action": "Include",
"FromFile": "assets/Example.json",
"LocalTokens": {
"NumberToken": 1,
"StringToken": "A"
}
},
{
"Action": "Include",
"FromFile": "assets/Example.json",
"LocalTokens": {
"NumberToken": 2,
"StringToken": "A"
}
},
{
"Action": "Include",
"FromFile": "assets/Example.json",
"LocalTokens": {
"NumberToken": 1,
"StringToken": "B"
}
},
{
"Action": "Include",
"FromFile": "assets/Example.json",
"LocalTokens": {
"NumberToken": 1,
"StringToken": "B"
}
}
To this:
{
"Action": "Include",
"FromFile": "assets/Example.json",
"SetTokens": {
"NumberToken": {
"Range": {
"Min": 1,
"Max": 2
}
},
"StringToken": {
"SplitString": {
"String": "A,B",
"Delimiter": ","
}
}
}
}
Hot take: per day inval is kinda finnnneeeeeee
given two lists, it would be nice to be able to do (maybe using special text operations?) list product and list zip (the latter only if they match lengths ofc)
How about per tick inval?
I invalidate myself every tick
i make myself suffer for 30s by typing it all out instead of my random token, unless you're saying its a .0001ms negligible difference
Someone gotta keep my ego in check, I'm an engineer
got it, invalidating the asset once per day the player has played. 500 invalidations every morning by year 3
dont check my math
28*4*2 approx 200
If you needed a zip list, couldn't the include itself handle the switch logic based off of just a range?
i will not,,, add another,,, dependency,,, 
how so?
I couldn't think of a way to do it but I'm not super familiar with content patcher advanced stuff tbh
anyone know where I can find the achievement tiles in content unpacked?
Data/achievements
I might be mistaken, but I thought there was a way to select a value from a comma separated list using the index
ValueAt
I see the .json but not a png sheet
{{SomeListToken |valueAt=0}}
I don't know if the index can be a local token though, so can't say if that would actually work
i just did that but the same thing happened again (tilesheet climbing)
the tilesheets need to be in the same folder as your .tmx file when adding them
But if it's possible then a local token range could effectively select an item from a set assuming the range refers to the indexed element
they are π¦
if I'm understanding correctly, that works for accessing individual elements of the zipped list but not the whole list as a single token, right?
are you positive its actually the same error then
you are loading the png and not a tsx right
Not that would work as well, assuming the local token holding the values is something like "A, B, C"
or at least not the old broken tsxs
i will be perfectly honest i havent been following you and matts convo at all for a bit so forgive me if this is irrelevant and im misunderstanding. but if a token is a comma separated list then just using the token IS inputting the whole list as a single token
This is how I'd imagine it could work:
// content.json
{
"Action": "Include",
"FromFile": "assets/include.json",
"SetTokens": {
"NumberToken": {
"Range": {
"Min": 0,
"Max": 1
}
}
},
"LocalTokens": {
"Elements": "A, B"
}
}
// assets/include.json
{
"Entries": {
"Example": "{{NumberToken}} {{Elements |valueAt={{NumberToken}} }}"
}
}
I'm specifically referring to whether the result of a zip the way matt is proposing would be storable in a local token as a whole, which it seems like it would but I'm just having some trouble wrapping my head around it rn tbh
On top you have the include which iterates the range 1-2, but also includes a static local token with the elements you want to zip. On the bottom you have the included file which uses both the number token as well as the corresponding item.
I genuinely forgot you can use tokens inside local tokens
thank you for being so patient explaining this to me matt
Oh wait, index is 0 based isn't it?
yes
There we go, updated the example then
i cant make them png it just wants tsx and now it doesnt even open
i guess ill make a new one
yeah, now with the local token example it makes perfect sense, for some reason I was thinking that local tokens have to be static...
it would still be nice to be able to do it without having to define a local token each time but that's very much just a shallow convenience thing
I guess it'd be good if I could update my example to follow any existing conventions that Content Patcher already uses
Like content patcher already has a Range function, so maybe it should just reuse that same syntax
Does this look like it fits better?
"SetTokens": {
"NumberToken": "{{Range: 0, 1}}",
"StringToken": "{{Split: A, B, C |inputSeparator=,}}"
}
},
my dream would be to have some kind of {{Map "@@ some kind of string asset with {{tokens @@}}" list_asset |= placeholder=@@}} feature but that would require changing the token resolution order just for this specific token to work, which is definitely not a good idea for just one, relatively niche token
I feel like this follows CP's existing conventions pretty closely
@ivory plume I want an event to trigger an EditData, but I needed the editdata to happen before the event end - is there currently a way of making that?
Who pinged me I was busy receiving psychic damage at work
yeah, they were recommending them to draylon
Basically - I have a Buff, that I want it to be changed during the event - and then, at the end of the even I'd use a addbuff action
i ping you again to bring you the fruits of your labor 
They'll be out soon, once I have some psychic-damage-free time
If I add the comand at the end of the event, the patch is applied later, then the event changes do not apply to the buff
that is normal content patcher behaviour as things follow the patch update rates
Ohhh I'm so glad the rail tracks are usable to other people
yep, that's why I'm asking if there's a way - I could add a onlocation change trigger action that would update the buffs once
I was worried they'd be confusing
you can just make the patch update rate for your patch to be OnLocationChanged
dont know what that would mean for an existing buff of the same ID the player currently has though
Ok ten hours of psychic damage is plenty, time to go home and work on my tilesheets
There's some limitations with that approach (e.g. how would you pass a token which actually contains multiple values, without splitting it into single values?), and I think usage might still be a bit confusing.
It might be worth making it an action-level feature, so you could do stuff like...
// call the patches with each combination of tokens: [0, A], [0, B], [1, A], [1, B]
{
"Action": "Repeat",
"Patches": [
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"NumberToken": "{{NumberToken}}",
"StringToken": "{{StringToken}}"
}
}
],
"FromCartesianSplit": {
"NumberToken": "{{Range: 0, 1}}",
"StringToken": "A, B"
}
}
And then we could have other From* options, like a list of token dicts to use:
// call the patches with the specified tokens: [SomeId, 500], [AnotherId, 700]
{
"Action": "Repeat",
"Patches": [
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": { ... }
}
],
"ForEach": [
{
"Id": "SomeId",
"Price": 500
},
{
"Id": "AnotherId",
"Price": 700
}
}
}
(i think more people would be confused by you pulling out terms like Cartesian Split /j)
a new Content Patcher Action...
ngl I understood it better when they added the word cartesian /lh
set theory general 
Yeah, I only used that term as an example because it's probably well-understood here so it conveys the purpose easily
(Content Patcher is all sets under the hood.)
ive got no clue what a cartesian split is
I do database work so that's a term I use quite often
Based on 'cartesian join', which is a database join where every combination of rows is selected.
(i also didnt notice matt used the term first earlier i just looked at the code)
oh i do vaguely remember this now from my db class
(We'd probably come up with some friendly field names, this is just a rough idea.)
the thrill of seeing ForEach appear in a potential CP schema π
that does actually also make me now understand it a lot more now that my memory has been jogged
I only recognise it from cartesian products in maths, but I assume that's where the name comes from anyway and it's basically the same thing
(Can't wait to see people complaining about lag when mod authors add nested repeat patches calling include patches which contain repeat patches within repeat patches.)
Mod author: works for me, I don't see the issue.
Content Patcher recursively creating 13 million edit patches under the hood.
I almost felt like for performance considerations, whatever this was used for should be "compiled" once into effectively the same model as if you had manually written out each include
Like, this isn't allowed to change dynamically, but rather is only considered on loading
a foreach/map field would be amazing, especially if it can be done over a list token rather than individually listed items
If we go with the "Action": "Repeat" approach, I'd probably start with just the ForEach option which would cover most use cases. We could maybe have more dynamic options in the future, but it'd need a lot of thought and planning to make sure it doesn't introduce major performance pitfalls (e.g. being able to create millions of separate patches with a few lines of JSON).
having a content patcher preprocessor/transpiler of some kind would be very cool (if somewhat overkill)
The only thing with ForEach is that it doesn't save that many lines of code
Like you're still defining each instance of LocalTokens so you're saving on the Action and FromFile
the token resolution order where it comes to nested tokens is just that the innermost tokens are resolved first, right?
Yep.
I tried it with a real mod using the feature. It doesn't save much on lines, but it does make it a bit more readable at least:
Where this discussion started (today) was based on a desire to write like 20 machine rules that were mostly identical other than a numerical condition. So that's sort of where the brainstorming started.
plus even if they dont save many lines on their own they can still then be used as a template which will save more lines
(But at the same time, Content Patcher isn't a programming language. At a certain level of complexity, you might as well just edit the content through the SMAPI content API instead.)
I was just about to say, we're bordering on making it turing complete right now haha
I don't even think the split string example is needed necessarily if valueAt works based on a local token
The MVP that accomplishes most of what's helpful in the "simplest" way would be a numerical local token based on a numerical range
I was mostly looking at cases where, for example, you had a template which you wanted to use with i18n keys named prefix_1, prefix_2, ... in some kind of action that takes a token list of i18ns and you wanted to keep the template flexible so you could set a different total number of i18n keys each time you use it. So you would want to have some range token (whose end value is set in the template's local tokens) that can get all the i18n keys, then a way to apply the {{i18n <key>}} token to each of them, then to combine them all into a list to feed to the action
it's a very niche case though, and only really necessary if you're templating pretty aggressively
Even the cartesian thing may not be necessary since CP can already do math, so simply iterating over a range can probably be used for just about everything
Something like this should be able to do what you're describing:
{
"Action": "Repeat",
"Patches": [
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"Key": "prefix_{{NumberToken}}"
}
}
],
"Range": "{{Range: 1, {{MaxValue}} }}"
}
(Pssssst you're missing the floor under the back wall)
Do you want coloured sigils? Is that why the blue one is underneath? The white sigils are on the main _extras/outdoors sheets because they need to change colour in the winter, but I can slap some palette swapped versions at the bottom of the animations sheet in two minutes flat. It's seasonless and the only recolour compat is an HSL saturation adjustment so it's nbd
Ahg that was supposed to be a reply
.
The range is from 1 to MaxValue (which comes from a parent local token). And that is used as an input to Key which takes on the values of prefix_1, prefix_2, ... prefix_N
it's missing the ability to individually apply a token to them I'm pretty sure - you combined all the keys into a list but it didn't put them into the {{i18n}} token
Can you share an example, I'm not sure what the expected output is?
prefix_1,...,prefix_N individual keys in the i18n file to a single token containing the list {{i18n prefix_1}},...,{{i18n prefix_N}}
You're asking for a list concatenation?
I'm asking for a map - take a list of strings and map it into a list of tokens with a single one of those strings as an input
I don't understand how what this is intended to do wouldn't effectively accomplish the same thing you're asking for
uh in python syntax it would be something like [i18n(prefix + x) for x in range(N)] essentially
You can't generate an undefined number of tokens because how can you possibly know what you can refer to in the include?
That's why a single token taking on every possible value is the only way you can actually use the token
Like, you won't have {{Key1}} {{Key2}} ... {{KeyN}}
But you'll have {{Key}} which takes on all values of 1 through N
that part's fine π
I'm not trying to save them to individual tokens, I'm trying to make it so instead of doing {{i18n <list of tokens>}} I get token containing list of {{i18n <token 1 from list>}},...,{{i18n <last token from list>}}
all totals are known in advance and stored in a list
Yeah, that's what I'm confused about. This is exactly what the example I shared is intended to do
I'm confused then, since yours doesn't seem to be applying a token at all to the result?
it's almost definitely me tbh but I'm missing something
// this
{
"Action": "Repeat",
"Patches": [
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"Key": "prefix_{{NumberToken}}"
}
}
],
"FromCartesianSplit": {
"NumberToken": "{{Range: 1, {{MaxValue}} }}"
}
}
// is basically just this
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"Key": "prefix_1"
}
},
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"Key": "prefix_2"
}
},
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"Key": "prefix_N"
}
}
Think of Repeat as if it's just doing the same thing over and over again for every number in the range
i think the confusion might be in not knowing where you're getting NumberToken from
So instead of typing the same patch 500 times, you could just set the MaxValue to 500
or at leas thats whats confusing me
I assume numbertoken is just an index from the range?
Oh, yeah that's supposed to be from the earlier example. Need to fix that.
OH yeah I see what the issue was. I want to be able to use all of these resulting tokens in a single token list so they can be used in a single trigger action, rather than separate patches
in our case it was for randomisation purposes
There we go, I changed it back to the "CartesianSplit" naming
Yeah, that's why I was asking if what you really wanted was a list join method then
For you to take a list of values and join it together into a single string
I feel like that's a whole different idea than what this is trying to solve for, but still worth discussing as well. Just isn't really trying to do the same thing at all.
I think it's just a different implementation of the same idea tbh - to use python code as pseudocode again bc I'm lazy, it's the difference between for x in range(N): do something and [some stored result for x in range(N)]
(aka why I called it a map, because that's what the latter is)
I guess I'm not understanding how having a glued together list as a single string help accomplish generating a bunch of distinct patches?
it's not - it's for cases where you need all the strings to be in one patch (e.g., you're putting them together in a single action that does some custom randomisation)
Okay, so different implementations of different ideas
ultimately it's just map vs foreach loop, they have pretty heavy overlap in use cases but a few things on the edge cases the other can't do very well
If you disregard the terms (map vs foreach) the effective outcomes are two different things
yup! which is why I suggested it as an additional thing to consider haha
similar vein of "tool based on iteration", different overall implementation/specifics
Yeah, no worries. I was just getting confused because I thought you were suggesting an alternative approach, and I wasn't understanding how it would work.
honestly it's probably on me, I shouldn't be messaging this late but I ruined my sleep schedule again because of an asthma attack haha. I'll stop trying to use my brain now though, it's far too late at night for that 
It almost seems like CP is almost there with what you're looking for with Merge and Range being tokens that operate on lists
im sure the confusion of this discussion means good things for how easy the eventual documentation will be to write and understand for the layperson 
(we ended up just making a custom trigger action in c# so this isn't actually needed for the original use purpose tbh, it was just an interesting thing I ran into)
Do you know if {{Range: 1, 3}} is basically just parsed into the string "1, 2, 3"?
should do
Yes
So basically, if Range had a delimiter field then you could accomplish exactly what you're looking for
key_{{Range: 1, {{MaxValue}} |delimiter=, key_}}
it would do like half, because you'd still need to split the tokens apart, put them each into the i18n token separately and put them back together
you can't put a list into {{i18n}} and get a list of tokens back
Oh, the problem is that the i18n part wouldn't be used
I actually think my original-original idea (half joking) would work, which would just be to create a superset format to CP that just compiles into CP.
the zip part was doable (though clunky) except for the fact it led to not being able to use that token in that way. I ended up just making a special action that took the prefix and range and other inputs for the original action, processed them properly then returned them to the original action
Like, I'd take CP and add some basic templating language so you could do things like loop
yeah, I won't lie and say I didn't think about the possibility of building a language that transpiles into content patcher at various points 
Imagine something like this:
<% for i in range(1, 5) %>
{
"Action": "Include",
"FromFile": "assets/some-file.json",
"LocalTokens": {
"Key": "prefix_<%= i %>"
}
}
<% endfor %>
Clearly you need to make a graphical programing language for production flows
I'm going to call this language Content Patcher Plus, or CPP for short
Second time making that joke, I apologize
there will be a third
Anyway, that implementation would meet my requirements since it wouldn't add any overhead to CP itself. It would remain completely backwards compatible, but perhaps allow me to add other convenience features.
It'd just be a CLI tool that converts this templating language into an actual CP mod
in fact, it would be completely independent of the users, it would just be a build tool
(until someone suggests the next level of scope creep which is on-the-fly interpretation of that language)
"ForEach": {
"var": "npc for npc in npcs"
}
I mean, Typescript has influenced some of the Javascript developments
there's something very cursed about how pythonic that is, I approve
It would technically be possible for me to ship this as a mod that is interpreted in "realtime" since I could just use SMAPI to dynamically load it as a CP content pack
aaaand the prophecised scope creep is already upon us
If that functionality existed, I'd only recommend it be used during development. And even then, that would be the same as doing a compile and patch reload.
I hear typescript is actually a fairly reasonable and pleasant language to use, which does feel like it's missing part of the core javascript experience
It's just C# Javascript
TS is a superset of JS. You can still get the full JS experience if you really want.
(I meant in terms of personal experience using it, not potential results. Less headbutting walls)
i only begrudgingly use it not bc i think TS is bad but bc i got so used to not being restricted for a while since i only used JS for the longest time and i am stubborn and dont like being Made to do things the Right Way after so long
/hj
Just use any if you need to break the abstraction.
like once you have to learn the art of javascript's operator type casting does somewhat feel like you're one with the matrix
but if you're using a typed language, all of a sudden you "don't need to" which "is a good thing" because "the javascript operator type casting is famously really weird and kind of dumb" 
im sure all the TS devs out there will love me for that one
True enough. But there are other less hostile options, especially structural interfaces.
I tried that but, since the patch applies after the trigger action, it didn't work...I found a work around though, it's not pretty...I have a master buff that will be applied through a trigger action every morning, and this one will receive the patches after the events. Then I have a secondary version of the buff that only uses the patched stats from the "master" bufff - this is just a temporary buff and the icon will disappear after you sleep
Which still let you do "almost" anything but in a less wild-west way.
shoo you guys #programmers-off-topic
in my case it is modding related bc i used JS for my mod docs!!
(basically, I'm sure typescript is better but I spent so long learning how javascript does things that I refuse to move to a language where you don't have to
)
Isn't that the pot calling the kettle black. Who was the one ranting about static typing yesterday?
and would probably have had a much easier time of it if id written my docs using TS instead
I should like, sleep actually
im more surprised you didnt call out all the knitting
I thought about it, but... too easy.
(and besides, maybe I'm making a mod to let TypeScript run in Stardew. I'm already halfway there)
im for it
one day we will make a framework that allows mods to be written in like, brainf*ck or LaTeX commands or something, and then we will know we have finally reached the limits of what we can achieve
please, let me write a mod in VHDL
A web-style scripting language is actually useful when a web-style DOM is involved. You want esolangs, you'll have to do that yourself.
Imagine if we could just write mods in C#, compile them into optimized DLLs, and just load them straight into the game.
yes, vhdl is an esolang
got it, compiling everything under debug flags
As far as game dev is concerned it may as well be an esolang.
(and in any case, I wasn't replying to that)
where in the contents folder do I put the dlls again? /lh
Anyways, what about vba
that's too far even for me
I will accept php as an alternative though
there is!
that one that calls the gc every night
something something memory something
I'm sure it would technically be plausible to write content packs in SQL 
I'm not sure if this is the right spot for this question, but it is being asked because of a mod I am working on. That weird area that Harvey walks around that is north of Sam's house, is there any reason to not mod a building into it besides having to repath Harvey?
But with a generous donation of just 1$ per month to the Pathos Espresso Machine Fund, viewers like you can-
Does SVE have something in that area?
