#making-mods-general

1 messages · Page 210 of 1

ivory plume
#

Yep, it's certainly an option. I think the main complexities are just:

  • needing synchronization logic in case the asset is needed before the background task completes (and the potential blocking async issues that result from synchronizing an async task);
  • making sure you're not performing any GPU work (e.g. creating the Texture2D) in a background thread.

For most mods, it's probably not worth the added complexity; and Content Patcher (which would benefit quite a bit from that) can't do it because the asset is needed immediately when it gets the request.

teal bridge
#

Well, I don't do a lot with Content Patcher so it's not going affect me personally, though I would have imagined that it would be possible for CP to see what assets could be loaded and preload them in the background in advance of that.

ivory plume
#

Yep, that's what the template is for. The spam filter looks at the actual markup, not the final output from templates.

brittle ledge
#

You could ask the mod author if they could look at compatibility.

ivory plume
# teal bridge Well, I don't do a lot with Content Patcher so it's not going affect me personal...

Content Patcher's format is probably too dynamic for that. With a few expansion mods installed, there could be thousands of files which could potentially be needed based on a range of tokens/conditions (plus recursive includes which can also have tokens/conditions), and then most of those might never actually be used during that session.

Even if it preloaded the assets, it would then still need to perform all the dynamic combinations which change over time (e.g. combining three overlays based on their current conditions).

So I think trying to preload assets in Content Patcher would probably..

  • be immensely complex to precalculate all the assets that may become needed later, potentially based on user behavior like which save they load or where they warp;
  • and/or require a huge amount of memory.

I'd certainly be open to discussion if someone sees a feasible way to do it though.

brittle pasture
#

It uses machine rules under the hood so you can add a new rule for your book
or modify an existing rule to add your own
of course always a good idea to reach out to the author

uncut viper
#

why cant you just tell CP users to download more ram to store all the preloaded stuff /s

brittle pasture
#

what book is this out of curiousity

reef kiln
brittle pasture
#

oh didnt see tia's response lmao

teal bridge
#

Is RAM really the problem? I get the sense that the problem is the synchronous design of the asset system; there's just too much stuff that does Game1.content.Load or IContentHelper.Load and needs an instant response because of how it's designed.

#

So, yeah, the "long-term" architecture solution on a hypothetical project (probably no one will do it for Stardew) is to start refactoring/redesigning those to support asynchrony, and then have the content APIs be asynchronous, and both SMAPI and CP would know when they are being called asynchronously and do the async work on I/O threads.

#

Short-term solution that I'm doing locally is to just figure out what PNG files are used ahead of time and start preloading them in background on game launch.

brittle ledge
#

I typically randomize the output between books from the same mod for balancing purposes. So if there's only one book in Archaeology, I wouldn't have anything to trade for it.

teal bridge
#

(I don't worry about assets being unavailable on request, just use a read-through a cache, which never gets interrupted because there is so much time between boot and asset load)

ivory plume
teal bridge
#

Right, though I wouldn't propose to predict the outcome of individual loads, just preload whatever images are used as inputs to those rules.

reef kiln
teal bridge
#

Yeah, there's some waste. It's trading off memory for speed, which is usually a pretty good tradeoff. (Within reason)

brittle ledge
ivory plume
# teal bridge Right, though I wouldn't propose to predict the outcome of individual loads, jus...

Those input image references themselves can be pretty dynamic. There might be thousands of images, and then only a small portion of those will be selected based on arbitrary runtime conditions/tokens. Even whether an image file is (or could be) referenced by the content pack is hard to check programmatically. So the best we could do is just preload every .png file found in every content pack folder, which would probably be pretty slow and inefficient (and a huge use of memory for images that may never be used).

Just as a simplified example, which images should be reloaded for this patch?

{
   "Action": "Load",
   "Target": "Portraits/Abigail",
   "FromFile": "assets/abigail.{{Random: 0, 5000}}.png"
}
brittle ledge
#

Which, I meant to talk to Moonslime about compat anyway so

#

@indigo yoke Would it be okay if I added Little Free Library compat for your Archaeology skill book? Do any of your other skills have books I could add?

indigo yoke
#

all my skills has books

#

and go ahead

teal bridge
reef kiln
teal bridge
#

I'll grant that I might be a terrible example for this as I don't run with thousands of content addons or stuff like SVE, but I just did a search for all .png files in my entire mods folder and it adds up to just over 100 MB, which is pocket change.

reef kiln
#

But I also never check the book seller. So if I don't find it in the world I won't see it.

lucid iron
#

It might not be 5k pngs but there can be a dozen of em between seasonals recolors and other options

teal bridge
#

(It's bigger uncompressed, of course - but even if you cache just the raw PNG bytes and decode on demand, that's still saving a ton of syscall overhead)

lucid iron
#

I feel this is the kind of optimization that'd be good for AT tho DokkanStare

#

It's not as dynamic and it's all about them textures

ivory plume
teal bridge
#

I see, so the issue is not the number of them, you're saying, but the fact that the physical file paths are constructed at runtime.

#

Well, I got around that just by scanning the registered asset directories, and content packs could put a list of directories/assets to scan for preloading. Or just load them all, 'cause why not?

ivory plume
#

Yep, there's just no way know which paths will (or even can) be referenced by a content pack. So we'd essentially need to preload every PNG file, and I'd be interested to see how that works for people with 1000+ mods.

#

It takes them like 5 minutes to load the save even with just the images that are actually used, I can't imagine how long it'd take to load all the images that aren't used at that particular moment too (or what the memory usage would look like).

teal bridge
#

I mean, I have my background in the Skyrim modding scene, where having hundreds of mods with dozens of 2K and 4K textures is a trifle. I realize that Stardew players are more likely to be running on potato hardware, but how potato are we talking about? Maybe disable the preloading for Android SMAPI.

rotund elm
#

Heyo, IDK if this is a bug, or if it is just not possible, but adding "torch_item" to the context tags of the fish object breaks the aquarium data and the fish will not be able to be placed in an aquarium.

#

Is there possibly a work around for this? Or a different context tag I could try

calm nebula
#

Fwiw, focus, ameise tried preloading

#

You could ask him about it

teal bridge
ivory plume
#

Well, if you feel confident that it'd work well and you have the expertise to implement it, I'd certainly be interested in a proof of concept that players could test in practice.

lucid mulch
#

Image loading isn't the slow part, it's doing the edits in series that is, particularly when you have many mods all editing the same image (like cursors)

teal bridge
#

Image loading is the slow part, or at least a particularly slow part.

#

That's what I've confirmed through profiling.

lucid mulch
#

Maps are much larger and have actual cost in load, but they are also near impossible to cache due to the mutations that occur

lucid iron
#

Did you profile the EditImage part on content patcher

reef kiln
teal bridge
#

Didn't profile Content Patcher, wouldn't really know how at this point, but profiled synchronous asset loads vs. constructing Texture2D from preloaded bytes.

#

The asset pipeline (without a bunch of EditImage stuff in there) does add a little overhead, like a few ms. But on a high-end machine there can be more than 50ms per load that is just I/O and decode, and that is for a small image. With hundreds of larger images...

ivory plume
#

(Stardew Valley still supports Windows XP, though at least mod authors don't need to worry about that since SMAPI doesn't support the compatibility branch.)

teal bridge
#

Anyway, I feel like I've accidentally entered into some kind of debate here, which wasn't my intent - just ventured to say that I adopted this background-preload strategy at the framework level and it was effective at reducing MTFP latencies.

lucid iron
#

Well it would probably work for Load Exclusive patches right

#

Unconditional ones

lucid mulch
#

You would need to preload only the raw assets and still spend forever doing all the overlays resizing and other images each time anyway

#

As theres not a deterministic way to know what order of edits will happen and if all will happen

lucid iron
#

I think it'd be neat to try

languid aurora
uncut viper
#

correct me if im wrong but if im understanding focustense right isnt "editing is still slow" kind of irrelevant? i dont think focus was saying the editing part isnt slow, just that image loading is, and if preloading every image is still actually an improvement, then it will still ofc improve the rest of the downstream process by virtue of speeding up the first step

teal bridge
# lucid mulch You would need to preload only the raw assets and still spend forever doing all ...

I think you may be underestimating how much of that owes to synchronous I/O and decode. The pipeline has to:

  • Read asset A (base) from disk
  • Decode asset A
  • Read asset B (used in edit) from disk
  • Decode asset B
  • Mix up B with A
  • Read asset C (another edit) from disk
  • and so on.

And it's all synchronous. If you made the I/O async, you could even keep the entire pipeline synchronous and just do the patching for B and A while C is still loading its asset, and so on.

ivory plume
lucid mulch
#

Obtw pathos, I have been trying to profile Editimage.Edit or more generally PatchManager.ApplyEdits but the heavy generic code along with editimage.edit contains a exception filter block is making it impossible for profiler to get into it without crashing or just silently not applying

uncut viper
#

(it was mostly in response to chu and sinz!)

teal bridge
#

(Maybe I will do a POC someday, although owing to my lack of familiarity with Content Patcher itself it's not going to be any time soon.)

lucid mulch
#

I do have logs from someone in a mod support thread that had the LoadExact codeflow (which contains both load and edits) taking 3 seconds for Loose sprites/Cursors but haven't been able to dig deeper

lucid iron
#

I was just saying "unconditional Load patches are probably safe to do preload on all the time, without the issue of figuring out what to preload"

rare orbit
#

hey? in the smapi console? is there a way to make a specific npc show up on ginger island

lucid mulch
#

Any filesystem caches also need a mode to be turned off otherwise you make mod development suck

lucid iron
#

Well i assume patch reload works like b4

ivory plume
rare orbit
#

trying to test if sebastian's beach sprite is editted and seb will not come on that bloody island.

lucid mulch
#

ModContent.Load by design does not cache specifically for that reason

teal bridge
languid aurora
#

Could something like an opt-in preload be something that would help? Something akin to the "critical CSS" approach in web dev, where the most important assets are loaded first/preloaded. A mod could give a (potentially capped in some way) list of assets it will definitely need and those could attempt to start loading asynchronously.

teal bridge
#

Every menu loaded snappier when I added a simple redirect to the already-loaded image.

calm nebula
#

Fwiw I think it would be neat to try too

teal bridge
#

(This was not part of the recent preloading stuff, btw, this was a much older edit)

ivory plume
lucid mulch
#

I can have a cache mod done in an hour, but anything you cache from filesystem has to be deep cloned every time you let anything see it, which eats into your benefits

rare orbit
calm nebula
#

Nor do I think one set of optimizations necessarily affects another

lucid mulch
#

And for maps, it resulted in no benefit at all most of the time

calm nebula
#

What do we say? I want to see the code in hand?

#

Headsim is headsim?

teal bridge
#

I can honestly say I don't know anything about caching maps.

calm nebula
#

No point arguing over theory. Let's see it in action

teal bridge
lucid mulch
#

Maps can take over 500ms in just deserializing XML and doing data transforms to be the xtile style format

lucid iron
#

Atra how is ur fix map rendering thing going

brittle ledge
uncut viper
#

attempted optimiztion can never hurt to try (except the person spending time making the proof of concept if it doesnt work SDVpufferthumbsup)

brittle ledge
#

You are yoinking him from where he was so you may need to leave the map and reenter

lucid mulch
teal bridge
#

I use FSW for that.

rare orbit
#

kk

teal bridge
#

(Though perhaps running thousands of FSWs due to thousands of mods could also be an issue)

rare orbit
#

fsw??

#

what's dat??

indigo yoke
lusty elm
#

remind me in 1 hour to do a test to see if FarmFishLocationOverride overriding fishing ponds happens via base game or a mod interaction.

patent lanceBOT
#

But of course, dear draylon (#6525973) (1h | <t:1739401051>)

teal bridge
rare orbit
#

ohh

lucid mulch
rare orbit
teal bridge
#

In all likelihood that's something you'll never have to learn about, so don't worry!

brittle ledge
#

They're troubleshooting something else, Nikki, don't worry about it SDVpuffersquee

#

Lmao same brain

teal bridge
#

Yeah, we're having a tech talk.

ivory plume
#

(FileSystemWatcher is just a C# API which lets code detect when a file changes on disk. There's definitely a performance overhead to using it though.)

teal bridge
#

(and this time it actually is about modding)

rancid musk
#

While we're talking about asynchronously preloading image assets, has anyone yet mentioned tracking a list of assets that are actually used and consulting that the next time the game is loaded?

teal bridge
#

I do try to minimize FSWs, this is why I run one FSW for the entire Stardew UI instance instead of one per tracked directory. And also strongly discourage authors from enabling hot reload in production. Content Patcher could do the same, make realtime hot reload (as opposed to manual patch reload) an option in the JSON and say it's only for debug.

#

Hypothetically speaking, given the dozen or so other hypotheticals we've already been over. Hypothetically.

lucid iron
#

I guess u can make a opt in FSW for content patcher but i think ppl will be more confused than they are about patch reload

ivory plume
#

(I wouldn't want it in the content pack itself, to avoid mod authors releasing content packs with the option enabled; it would probably be something local like Content Patcher's config.json if it existed.)

teal bridge
#

Yeah, that works too.

#

Just anything to prevent/discourage it from being turned on any time except during development.

#

Because if you need hot reload to work anyway, you can generally assume you're in a dev environment.

uncut viper
teal bridge
#

Pathos is probably right that some content pack authors would just copy it without knowing what it does.

uncut viper
#

advanced options existing for advanced users is fine imo even if the basic users dont know what theyre looking at if they try nd delve into it

teal bridge
#

SMAPI could display a huge warning saying "FILE SYSTEM MONITORING IS ON MAKE SURE YOU DISABLE <CONFIG OPTION NAME IN CONFIG FILE> MORE INFO AT <URL>" but I guarantee some authors will ignore that too.

languid aurora
teal bridge
#

There's definitely a challenge on account of the fact that, at least in the low-level SMAPI pipeline, edits can be completely arbitrary code.

#

You could cache the edit stages before and after, though that might be going to excess on the memory side. (And won't help if some other edit inserts itself in the middle)

#

But this is SMAPI level stuff, does not prevent CP from preloading the original source assets to a partial or total degree, or SMAPI adding asynchronous stages to the pipeline. In theory.

#

(I know, yes, "show me the money". Yeesh, talk about scope creep)

languid aurora
#

A naive approach would be to - for the assets we skipped editing - invalidate their cache entry at the end of initial loading. Then whatever existing process for rebuilding that one asset would run, and we'd have - in theory - skipped the potentially hundreds of initial edits to it and just done them all once at basically the same time as they'd have normally completed.

lucid mulch
#

you can only cache applied edits if and only if, the edits are static, and run in the same order

languid aurora
#

*invalidate their cache entry and then request it, that is, so that it does its thing

#

I'm not familiar with the process SMAPI uses to rebuild an asset from all of its edits after its been invalidated, hence the naive approach disclaimer. It very much depends on how much processing it takes to do that; I'm assuming/hoping it's less than what happens during initial load, but I could easily be wrong.

teal bridge
#

I think the edit problem can only be solved at the micro level by interleaving the individual edit stages (so one is doing I/O, while the next is doing decode, and a third is doing patching, and this would definitely be a major change to SMAPI).
And can only be solved at the macro level (using more than 2 cores to load multiple pipelined assets simultaneously) by adding a high-level LoadAsync API to the content manager/helper and getting both authors and the vanilla game to use it.

So I understand that it's not easy, or simple, or quick, etc. Honestly I didn't expect to get that deep, and hadn't thought about it beyond "texture load/decode sure is expensive and doesn't actually have to be done on main thread".

lucid mulch
#

when the asset is requested and isnt in the cache, it runs the Load phase (only one can win in load, if no one tries to load it goes downstream to vanilla and attempts to read an xnb), after the load phase it enters the edit phase where edits run in order of priority and can do whatever to the asset.
once it all runs its marked as cached, and any further loads for this asset just spits out the reference, until invalidatecache happens to remove it

rotund elm
#

If I have a content pack to reproduce the bug I found do I just post it here for Pathos?

lucid mulch
#

if cp or another mod changes their mind and want to edit it differently, you invalidate and load again, to run the cycle again

dusk mulch
#

well if i need to make new npcs i think i found where to start

languid aurora
teal bridge
#

Edits can be arbitrary code so that would be quite thorny to solve for the general case, even if it could be solved for specific cases.

#

Thus my saying the "macro" problem is probably only solvable by allowing multiple asset pipelines (per asset) to run concurrently which is essentially an architecture change.

#

That said, if "micro" optimization can yield even, say, a 30-40% improvement, that's massive for the users suffering from multi-minute game starts and multi-second lag spikes.

calm nebula
#

I frankly doubt anyone will notice a god damn bit of difference otherwise

#

I'm not even sure it's the major memory leak

lusty elm
#

@ivory plume The Map Property FarmFishLocationOverride is Overriding Fish Pond pools, so you can place fish in the pools, but if you try to get them out it pulls the Fish/Trash from the Override's Location instead, so you can't get the fish out. (also skips the Fishing Minigame as it normally does for fish ponds, just pulled a Halibut out a fish pool of carp without the minigame).
Just Tested it with nothing but a Custom Farm map File, CP and Smapi. Thought I'd let you know.

(I'm just using EMP in the meantime for my farm maps to replace fishing data, since i can shove it in the tiles properties directly, and it doesnt have this issue atm. So we Do have a workaround.)

teal bridge
#

I don't think fish ponds ever did the fishing minigame?

#

Though it's been so long since I've done that, I can't remember...

lucid mulch
#

ok sweet having ContentPatcher just use Profilers API rather than having profiler or a companion mod try to harmony into profiler to do it solved the issue
I can now see every individual Cp patch edit apply individually and track them

lusty elm
#

they don't normally have the fishing minigame, i'm just mentioning that even though the pool of fish is incorrect, the interaction of how it skips the minigame IS correct.

lucid mulch
#

the code is quite clean as Profiler already had an IDisposable pattern for running the logic for this reason. It just requires consumers to have a wrapper class to handle the cases profiler isn't there

#

I really want to rewrite the website, but I need to find the time for it

#

hopefully my friendly test subject will run it soon and get back to see the juicy data it gives back

#

as my current mod folder isn't heavy enough anymore with 1.6 to actually show the symptoms

dusk mulch
#

Can someone give me an example of a translateable mod so I can understand it better?

#

Ohhh

#

I think I get it now

#

So you need a i18n folder to put the translations in, and the

   "translation-key": "simple translatable text",
   "translation-key-2": "translatable text with a {{token}} value"
}

goes in any file that needs translating

gentle rose
lucid mulch
#

been there done that

#

I know I'll spend a minute loading LooseSprites/Cursors if I do that

tidal spade
#

Hi, i'm trying to add a new crop to the game using Content Patcher (i've never made a mod before), but i don't quite understand how to add a new item, i only figured out how to retexture existing items. Could someone help, please? (sorry for my bad english)

gentle rose
#

does the mod dump even include content packs? SDVpufferthinkblob

lucid mulch
#

yes

gentle rose
lucid mulch
#

the raw one pathos does for mod stats has them, but requires some scripts on my side to even transform it enough to let smapi run it

dusk mulch
patent lanceBOT
dusk mulch
#

Then go to your mod and use EditData to add the patch that you copied to the /Objects file, but configure the patch to your liking.

patent lanceBOT
dusk mulch
#

I will also link some documentation

patent lanceBOT
lucid mulch
#

past me back in december 2023 when I was testing mod compatibility

lucid mulch
#

[15:07:11 ERROR Content Patcher] Multiple content packs want to load the 'LooseSprites/Cursors' asset with the 'Exclusive' priority ((CP) Fox Dog Replacer, (CP) Monster Men Livestock, Anthro Characters Continued, Bentley Mod, BlackNWhiteCat, CleanUI, CP Joja, Everyone is Clint, FamilyTies, Feminizer - Everyone Is Female, Gleann Dealtreul, Improved characters, Journey of the Dairy King, Meevin, Omo Valley, Penguin Pet, PokeFarm Animal Replacer, Probably Purple and Certainly Rainbows, RoosjeCat, S A P, SavaelasSebastian, Sebastians hot pink bike, Shane Doomer Replacer, Shane To Randy Marsh, Simplified Palette, Skelepet, Stardew Hetalia, SupersizedBachelors, The Mighty Nein, They Have No Eyes, Vau Serena (Occitan version), Vietnamese translation of Stardew Valley, Voltron Valley, Xiaoyang Recolored Bus, 星露谷繁體中文語言包). None will be applied. You should remove some of the content packs, or ask the authors about compatibility.

SinZ: it took 2 minutes for CP to apply all the edits to Cursors
SinZ: that list was just the loads

gentle rose
#

that’s honestly a shorter list than it could have been

#

I’m somewhat impressed

dusk mulch
#

@tidal spade Do you know about the JSON validator?

tidal spade
lucid mulch
dusk mulch
dusk mulch
gentle rose
#

I wish I knew this server existed during the run-up to 1.6

dusk mulch
#

It will check your JSON for errors and list them for you

gentle rose
#

I just kind of stalked the changes pathos was making to the “upcoming changes in 1.6” page on the wiki like every other day lmao

dusk mulch
#

No worries, have fun!

lucid mulch
#

at the time I was quite invested in trying to mitigate the modpocalypse as much as possible, and with heavy rewrites by Pathos, a decent amount of my poc and r&d made it into contentpatcher to try and salvage 1.5.6 mods where possible

gentle rose
#

did that end up working out to save those mods in the end? (I’m a fairly minimal mod user to begin with and I lost interest in stardew the day 1.6 came out so I didn’t end up experiencing the modpocalypse lmao)

lucid mulch
#

mostly yes, but had some fun edge cases that only got found out on launch anyway

gentle rose
#

do you ever hear something like that and immediately find yourself thinking about ways to make something behave even more weirdly, or is that just a me problem

#

there’s a part of my brain that hears something broke in an interesting way and takes it as a personal challenge

#

so basically, if anyone needs a QA tester…. SBVLmaoDog

uncut viper
gentle rose
uncut viper
#

Good to know.

calm nebula
#

Awesome!

#

Let's try to do some DIY plumbing

uncut viper
#

you can start by breaking atras plumbing not mine

gentle rose
#

I know better than to diy my own (irl) plumbing because that will inevitably lead to me having to fix things KEK

#

which I can do but would rather not

#

breaking is much more fun

dusk mulch
calm nebula
#

But again, I'm not sure it is the actual slow point

dusk mulch
#

Wait, is translating mods for the user or the modders?

lusty elm
#

I see the bot sets an alarm reminder for each edit SDVpufferchicksweatsip

acoustic summit
# dusk mulch This is how translations work, right?

You are right about the i18n folder, then you only add files for which you know the language. So that stuff you showed would be put into default.json (english). Typically its done this way for translators to more easily translate the mod

dusk mulch
#

Ah. So I don't have to change my content.json, only my default.json?

acoustic summit
#

Well in your content.json it'll reference the i18n keys, which rarely ever change yeah

dusk mulch
#
   "translation-key": "The quick brown fox jumps over the lazy dog",
   "translation-key-2": The quick brown fox jumps over the lazy dog {{token}} "
}

I'm new to this if you couldn't tell.

acoustic summit
#

Say in your content.json you wanted to have an npc say "The quick brown fox jumps over the lazy dog" (Which you have in your i18n/default.json file), in your content.json you would put "{{i18n:translation-key}}"

dusk mulch
#

Ah, so I just need to have 1 of those patches for each bit of text?

#

Cool, ty!

wise needle
#

Thank you, happy that others like it so much. Hoping to have Cornucopia's more flowers compat out soon, at least by the weekend

dusk mulch
#

Also, does {{i18n:translation-key}} still need to be in the quotation marks when you call it in content.json?

acoustic summit
#

You dont need multiple { }

#

Just one { } incasing them all

#

And yes it will still need to be in quotation marks

dusk mulch
#
   "translation-key": "Farm ahead has been submitted by angelofstars on discord. ^ Efficacy for money.",
   "translation-key-2": "Farm ahead has been created by NotAGardener on Nexus. ^ Farming Proficiency.",
   "translation-key-3": "Coming Soon!",
   "translation-key-4": "Farmers Market",
}
#

Ty sm for the help!

acoustic summit
#

the {{token}} is for when you are passing in variables to the text

#

Like dialogue with names, genders, items

dusk mulch
#

Oh so it isn't required.

latent mauve
#

@lucid mulch while you're around, I did have a question if you don't mind? Is the lag spike my multiplayer group gets when attempting to build, destroy, or move a spouse patio from your SinZational Several Spouse Spots expected, or is that something I should be tracking to try to report as a bug?

lucid mulch
#

moving the spouse patio causes the farm map to reload as its the only safe way to do it

latent mauve
#

Okay, I just wanted to make sure I hadn't run into an unreported issue. If it's expected because of how it has to work, that's all good. SDVpufferheart

lucid mulch
#

vanilla spouse patio gets away with it by caching the tiles underneath and constantly reoverriding it when applying the spouse patio

#

but as mine can go anywhere its not viable

dusk mulch
#

What kind of open source license do most modders use?

acoustic summit
#

MIT is pretty typical (I think, not my area of specialty)

dusk mulch
#

Alright, ty!

#

When the wiki says (See attached screenshot) does that include anyone who helped me in this chat? Like if I asked the discord for help?

winter dust
dusk mulch
#

That would take ages to track down everyone so... no. I will just use a broad definition of #making-mods-general .

#

Uhhh... I dont feel comfortable putting in my full name into the license since anyone on the discord can see it, is there any way to avoid that?

rigid oriole
#

You can put your online name. It might not hold up in court but the chance this goes to court is slim to none

winter dust
lucid iron
#

you can put your alias just be consistent

brittle pasture
#

keep in mind MIT is a permissive OSS license, meaning you give ppl permission to modify and redistribute your mod as long as credit is given

calm nebula
#

Yup

#

Also to be frank mit is a code license

#

I generally see people who do more artistic things more likely to understand creative commons

dusk mulch
winter dust
#

I'm only known online by this username, so it's never an issue for me.

dusk mulch
#

Do you know if pathos is comfortable with DMs?

lucid iron
#

i think u get answers quick if u just ping him here

winter dust
lucid iron
#

what are you hoping to ask

dusk mulch
#

Since I am using his framework I think it applies.

winter dust
ivory plume
#

Hi! You don't need to get permission for using a framework. The license applies to the actual code you're releasing in the licensed repo, so you only need permission from people who wrote the code that's being relicensed.

winter dust
#

Yeah, I did that with the code Rokugin made for me to use with WTDR.

dusk mulch
lucid iron
#

there is like a whole thing (GPL linking exception) but i dont think content pack/framework mods counts as linking right

dusk mulch
#

I'm using SourceTree to make my mod Open Source and the wiki says to click on the globe icon next to the url but there isnt a globe icon.

uncut viper
warm imp
#

is there a smapi event to directly tell when a dresser's inventory has changed? they aren't chests so ChestInventoryChanged doesn't work.

if not, am i right that the best way to check is to see if the active menu matches a dresser menu when the player's inventory changes?

ivory plume
dusk mulch
#

Okay, ty!

calm nebula
#

The menu itself has delegates it calls

#

Which you can use

#

But it won't change for other mods affecting dressers in the background

tawny ore
#

Hi @ivory plume no rush, but I was wondering if you could take a look at the Automate PR. Before I spend too much time on this implementation of Global Inventory support, I wanted to see if you had any early concerns or feedback on the overall approach I've started going with.
The majority of logical changes are in MachineManager

warm imp
vernal crest
#

Yesssss it worked! Thank you, I would never have known this existed!

latent mauve
lucid iron
#

anyone know if there is comprehensive guide to building draw layer

#

i might make one tbh, to push my draw layers agenda PecoSmile

uncut viper
#

tbh if i was gonna ask anyone about building draw layers i probably woulda asked you

lucid iron
#

there is like

#

a lot of buildings features in 1.6 that ppl do not use in favor of CP tokens/AT/Solid Foundations even

vernal crest
tawny ore
#

Just FYI, I'm prepared to support StarControl as soon as its released.

vernal crest
#

Oh no, you too are too babby! Fortunately fireredlily's suggestion worked SDVpuffersquee

lucid iron
#

if i am registered to iconic framework rn is there anything i have to change bolbthinking

tawny ore
#

You can still implement StarControl on your own if you'd like, but the user would end up with duplicate registrations for the same icon.

#

The benefit would be that they don't have to have IconicFramework installed as a dependency.

lucid iron
#

i see, but this seems fairly fixable if i just prefer to register iconic framework when it exists

#

and star control when they only have that

tawny ore
#

Yeah, the only thing is the integration between iconic and starcontrol is not reciprocal. i.e. registering for Iconic automatically benefits StarControl, but the reverse isn't true.

#

So if you exclusively register with StarControl, then the user won't have toolbar icons.

lucid iron
#

well, i only do that when they literally do not have iconic framework installed

#

or will only do that i mean

tawny ore
#

Ah, true. That seems to be the easiest way for now. Until or unless we get that theoretical neutral third mod.

uncut viper
lucid iron
#

i will slack on this anyways the gmcm sync in star control is good enough

dusk mulch
#

Do I need SourceTree for an open source mod or can I just upload the files straight into the repo?

tawny ore
#

Actually may have run into an issue @teal bridge. I setup a bunch of icons, hit save, and when I go back into the config they all revert to blank/default.

Edit: Disregard, I didn't fully implement the new item interface. It's all working now.

lucid iron
dusk mulch
#

Bruh. If I had known that from the start I wouldnt have downloaded any of this

lucid iron
#

well i do recommend it

#

anything is better than the github web interface

#

but u can also just use like, the git integration in vscode for example

#

or git cli

vernal crest
#

I do not use sourcetree. I use the github desktop program. I like it.

dusk mulch
tawny ore
#

I've gone between SourceTree, GitHub Desktop, Sublime Merge, and just VSCode. All of them have pros/cons in their own way. My daily driver is Sublime Merge for now, but I'm probably due to re-evaluate my options soon just to make sure I'm not missing out on any new/useful features.

lucid iron
#

git cli is enough for me personally

#

just rmbr clone pull push commit diff status stash log

tawny ore
#

git cli is definitely there when I need to do anything more complicated than simple fetch, pull, push. But I like have a visual interface to reduce my keystrokes/mouse clicks.

calm nebula
#

Then remember the equivalent commands for svn

dusk mulch
#

now ive got to try and uninstall every little bit of source tree scattered around my computer

uncut viper
lucid iron
#

the trick is to quit any job that forces you to use svn

vernal crest
#

I like that I can preview my file changes on github desktop so I can stop myself making silly commits lol

lucid iron
#

Just Walk Out. You Can Leave!!!

uncut viper
#

hit da bricks

dusk mulch
#

...

#

It took me an hour fumbling around with SourceTree to end up giving up and going to the github website interface to do it, and I got it done in 5 minutes.

lucid iron
#

well again you really shouldnt use the github website

#

this is because it lowkey defeats the purpose of git blobcatgooglyblep

vernal crest
#

Unless you are at the library on your laptop writing dialogue for your NPC while you wait for your friend to finish therapy

lucid iron
#

you can use the desktop app np

uncut viper
#

github desktop =/= github web interface

lucid iron
#

the point is one of the central things about git is that you have a local repo in a folder somewhere

#

and a remote repo in github or whoever else is hosting it

#

by having local and remote separate multiple people can work on stuff async Dokkan

dusk mulch
#

damn hold on

#

that sounded too harsh

lucid iron
#

and i can tell you that you shouldnt do things that may inconvienance you later

dusk mulch
#

im sorry i didnt mean it like that

vernal crest
#

Yes, chu is just giving you advice to help make your life better

lucid iron
#

and im in this convo already there's no need to ping

tawny ore
#

Success

tribal ore
#

Soooo..... are i18n keys supposed to be unique across all mods? Because the i18nify app is a little inconsistent with how it applies prefixes so I'm getting some things like this:
{{i18n:opening.4}}

And while I can guarantee that is unique to my mod, it's a bit generic for comfort

uncut viper
#

no

#

i18n only needs to be unique for you

tribal ore
#

Oh thank goodness

#

I was about to do a LOT of sed

dusk mulch
#

i REALLY should make my secret notes mod i18n folder but i have so much text and starting it now is going to take so long

tribal ore
#

and I was unhappy about it

lucid iron
#

double check that it's not a typo somewhere and maybe tell nomori about it if you are sure it's a bug

tribal ore
#

Are they on the forum? It's mostly that I was hoping that "optional prefix" wouldn't replace the event branch prefix, but prepend to it

lucid iron
#

the forum?

tribal ore
#

Sorry, the discord

#

Here

lucid iron
#

yea nomori

#

if u type @ that name they should appear in the list

#

but again, double check it is not some mistek on ur end

tribal ore
#

It might be a mistake in my understanding, but it is a reproducable behavior

lucid iron
#

either way what button said is true, there's no need to have unique i18n ids across mod

latent mauve
#

So, why were folks asking about DrawLayers?

jagged cairn
#

So you're saying I don't need to include the mod ID in every single i18n key lol

latent mauve
#

I got distracted with art, but I did convert a CP-A buildings mod to use the CP DrawLayers

lucid iron
#

i want to make a guide maybe, if theres not already one

#

so that ppl can pls stop using cp-a

latent mauve
#

ah

lucid iron
#

at least for buildings

ivory plume
lusty elm
#

I just wasn't sure who to tell, I'll make a note to try and report it though the official forums, once I'm back at my pc.

latent mauve
ivory plume
tawny ore
#

Awesome. Thank you for looking at it. I'll try to have something more testable this weekend possibly.

ivory plume
#

We'd definitely want a template for the modding wiki though, in case its domain changes again.

vernal crest
# ivory plume I don't think any sites are whitelisted for external links? That's why we have t...

Oh, sorry, I was referring to your comment here where you mention whitelisted sites which I assume are whitelisted by having templates but I am not 100% sure how to find out which sites have that. But it looks like if there's not a template for a site listed in the Modding templates page, it's not whitelisted? (Not familiar with wikis at all so I am just fumbling around a bit trying to find info lol)

#

(Sorry for awkward link, I didn't want to risk trying to use markdown and getting a temp ban in case I am not allowed lol)

tribal ore
#

@whole raptor Thanks for your i18nify app -- it's a lifesaver. That said, I did notice that quickQuestion text isn't getting pulled out of events and put into i18n strings. Is this a bug, or is this an intentional limitation?

 "{{ModId}}_choseSolids": "pause 500/speak Sebastian \"{{i18n:choseSolids.0}}\"/pause 1000/playSound stoneCrack/globalFade/playSound stoneCrack/viewport -1000 -1000/pause 1000/playSound stoneCrack/viewport 32 47 clamp true/globalFadeToClear/pause 1000/emote Sebastian 32/pause 500/speak Sebastian \"{{i18n:choseSolids.1}}\"/emote farmer 12/pause 1500/speak Sebastian \"{{i18n:choseSolids.2}}\"/emote farmer 8/pause 500/speak Sebastian \"{{i18n:choseSolids.3}}\"/pause 1000/speak Sebastian \"{{i18n:choseSolids.4}}\"/quickQuestion #No, never.#Yes, once.#Many times before.(break)speak Sebastian \"{{i18n:choseSolids.5}}\"(break)speak Sebastian \"{{i18n:choseSolids.6}}\"(break)speak Sebastian \"{{i18n:choseSolids.7}}\"/pause 1000/speak Sebastian \"{{i18n:choseSolids.8}}\"/pause 500/speak Sebastian \"{{i18n:choseSolids.9}}\"/switchEvent {{ModId}}_endBarDate",
uncut viper
#

(lvl 25 and above)

vernal crest
#

Oooh yeah

#

Thanks Button SDVpufferheart

rancid musk
#

(I really need to pay attention to rule changes more, I thought we weren't allowed to do markdown links.)

uncut viper
#

i dont think it was actually announced as a change

#

or if it was i missed it

#

but we initially only found out when someone used markdown and didnt get bopped by the bouncer and we were very surprised

tawny ore
#

Yeah I've definitely been auto timed out for attempting markdown links before

#

Especially since I tend to publish my mod updates all together on the same day, and when I try to organize the links the automod doesn't like it.

ivory plume
uncut viper
#

it was only changed around december 27th

#

give or take

tawny ore
#

Ah, maybe having a list of links is still disabled then.

lucid iron
#

-# you can whisper now

ivory plume
#

(The Markdown link filter was relaxed, it just wasn't announced to avoid misuse. There's no limit on the number of links you can have.)

tawny ore
#

I just remember I was trying to do a single announcement like, hey I have 13 updates to share, here are the links to each of the mods, and I got silenced. But maybe it was in December.

dusk mulch
#

-# spspspsp

#

-# you can whisper,

talk normally

or yell

tawny ore
#

Actually it was January 20th when that happened. So I guess having multiple markdown links is considered spammy.
#modded-stardew message

uncut viper
#

it was definitely december 27th at minimum

calm nebula
#

Spam filter may be differner

uncut viper
#

(i did slightly misread what you meant i realize now)

vernal crest
tawny ore
#

I don't know if it was spam filter, but I temporarily couldn't send any messages after making an attempt until I think Decidedly unblocked me

ivory plume
#

The wiki's spam filter is stricter if your account is new (based on some unspecified criteria like age, number of edits, etc). It's not something you need an admin for (e.g. I'm not an admin on the wiki), anyone who's edited the wiki often should be able to do it.

calm nebula
#

I've gotten spam filtered before for trying to post output from linqpad

latent mauve
#

Please consider this my +1 on requesting a template for the modding wiki link.

#

I've only ever edited the mod author page to add myself and update my mod links, so I almost certainly don't qualify xD

vernal crest
#

Cool, I'll see if iro is willing to try adding a template for the modding wiki

teal bridge
# tawny ore Success

Thanks. Just been putting on dinner so I didn't see the messages until now. That's great news - I caught and fixed a few more bugs this evening so I'm hoping to get the release out very soon, probably before the weekend, as soon as I can muster up the strength to redo the readme and Nexus page.

lucid iron
#

hm i thought TargetField on a List is supposed to preserve ordering

dusk mulch
#

Who moderates the translating requests?

uncut viper
#

are you targeting the list itself or something in the list

lucid iron
#

im adding new entries to the list

#

i was under impression i'd always append

#

sec i'll post me json

teal bridge
#

Like, translations for the entire game?

lucid iron
#

this is targeting the first item in List<List<AbilityData>> Abilities field

#

i would expect these 3 models get appended in this order

  • {{L@TinkerTarget}}-HarvestShakeable-Tree
  • {{L@TinkerTarget}}-HarvestShakeable-ItemDrop
  • {{L@TinkerTarget}}-HarvestShakeable-Nop
teal bridge
#

Huh. I had no idea that existed.

#

People request translations? I thought they just sort of... happened.

uncut viper
lucid iron
#

yea i dunno, i don't believe im sorting the list list and any point

#

kinda important that they keep order even blobcatgooglyblep

vernal crest
#

Oh yeah I've seen that repo before. I didn't realise it was used though.

uncut viper
#

well you can always still use MoveEntries

lucid iron
#

yea

vernal crest
#

I've only seen people reach out to those they know for translations or have people offer to translate (or just do translations without asking).

lucid iron
#

well in my case i switched from a reference by index to reference by Id

#

so its fine that this is the case, just strange

#

never seen it happen with shop data or machine data

teal bridge
#

With the caveat that I don't do Content Patcher stuff, I'm going to guess it's because the Entries are a dictionary, not a list.

lucid iron
#

if it was these 3 things at the end of the list but in odd order its ok too

uncut viper
#

Content Patcher edits lists like dictionaries

lucid iron
#

but they actually became index 1 5 6

#

which is even odder

calm nebula
#

content patcher should not be editing lists like dictionaries

lucid iron
#

im just gonna blame this on whatever mystery spaget i did and glad theres some workaround

teal bridge
#

The JSON data is itself a dictionary which means that the order it gets read is not guaranteed.

uncut viper
#

.. in the sense that your Entries will look like a dictionary

#

the docs specifically say "New entries are added at the bottom of the list by default." so it should be doing so

lucid iron
#

maybe its the list list

teal bridge
#

To me that sentence means "a dictionary of new entries will be collectively added to the bottom of the list" and not "the dictionary entries are going to be added in the same order that they appear in the dictionary". CP just has no way to guarantee that since it depends on JSON deserialization.

#

If you made 3 edits in order, and each added a single entry, then I would assume they get added in order. But, could be wrong.

lucid iron
#

yea sure, but as mentioned they dont even become consecutive

teal bridge
#

Is it possible that some entries already exist?

lucid iron
#

nothing got overwritten tho

#

hm

#

actually im wrong one thing got overwritten yggy

teal bridge
#

Yeah, you're right, it is weird that one gets inserted all the way at the top.

lucid iron
#

the first preexisting Nop

teal bridge
#

Oh. Haha, then I was right.

lucid iron
#

it must be bc i put Nop in the Entries

#

thinking that the key didnt matter since cp would just use Id, but it did lol

#

this is a bit strange blobcatgooglyblep

teal bridge
#

It is strange (buggy?) that it treats the key as the same, but then also adds a duplicate entry.

calm nebula
#

It uses the Key to locate by Id

#

Is interesting

teal bridge
#

Yes... yet does not replace the original entry with the original Id.

lucid iron
#

normally i always match key and id so i never noticed

teal bridge
#

Probably solved by using a different key anyhow.

lucid iron
#

this example i wanted to go "hey the key doesnt matter" but it did lol

#

does AssetInvalidated run for both players in split screen

teal bridge
#

I'm not sure I want to know the answer to that.

dusk mulch
#

Who can do translations?

teal bridge
#

For me the answer is "random people on Nexus Mods"

lucid iron
#

The thing i wanted to do is

dusk mulch
lucid iron
#

When the data is invalidated, remake any instance depending on the data

teal bridge
#

Probably not a very good answer, but it's all I got.

lucid iron
#

Learn a second language to do your own tl

teal bridge
#

Wait until it's accessed again to rebuild it.

lucid iron
#

Well yea i was just gonna set _trinketEffects to null

teal bridge
#

That way the splitscreen business doesn't matter.

lucid iron
#

So that the game does it 4 me

#

But i need to like, iterate all the trinkets that are equipped I think?

#

To Unapply, set effect to null, Reapply

calm nebula
#

I forgot how

#

so enjoy doing it

lucid iron
#

Unclear maybe i just don't do that

#

Since the 2 annoyance is just 1. Cant reload trinkets for real until you unequip by hand

#
  1. Can't use tokens with higher update rate
#

I think it also has issue with dynamic token but dynamic tokens confuse me so i don't care very much

teal bridge
#

Well if you need to "notify" all screens you could use a PerScreen variable and ResetAllScreens on invalidate.

#

Still has to be refreshed on some more explicit signal though.

#

I guess check if the PerScreen was cleared in the next UpdateTicked, which definitely does run for all screens?

lucid iron
#

what if i just have a PerScreen<bool> NeedReload

calm nebula
#

this is what I was forgetting

teal bridge
lucid iron
#

then i can check that in the places where i am get data

dusk mulch
#

well 1.0.2 of my mod is released for translation accessibility

#

now time to go do my SecretNotes mod...

teal bridge
#

Although it's kind of the opposite, PerScreen<bool> isLoaded since you're clearing it on invalidate.

lucid iron
#

yea same idea

#

hmm it doesnt quite work for companions though, i'll have to just fix it blobcatgooglyblep

dusk mulch
#

If 2 mods use the same ID for the translation keys will they get mixed up?

lucid iron
#

make it stop keeping a reference

calm nebula
#

chue, try the method I posted

nova gale
#

Person: in a default.json i18n file or a translation you added to a strings file?

lucid iron
#

but atra i need to like, have the full data right

nova gale
#

as far as I can tell, no

dusk mulch
#

cool, ty!

nova gale
#

from what I can tell, content patcher injects those default.json records into your mod before it's loaded

lucid iron
#

or whatever is going on in there

uncut viper
#

SMAPI handles loading the i18n

calm nebula
#

basically, you're going "for each screen, do this"

nova gale
#

ah, can they conflict then? as far as I could tell when I was testing it seemed to happen almost like a replacement at load time

uncut viper
#

no, i18n cannot conflict

lucid iron
#

yea but it occur to me that simply yeeting _trinketEffect is insufficient, i also have to yeet matching companion if any

#

so its prob better if i could make everything stop holding on to refs

uncut viper
#

SMAPI loads all of your i18n into a TranslationHelper specific to your mod

#

Content Patcher asks your packs TranslationHelper for the i18n

calm nebula
nova gale
#

is that why a patch reload doesn't seem to impact i18n changes?

#

or ws something else up when I was having that problem

uncut viper
#

correct, you use reload_i18n

nova gale
#

ah ha

calm nebula
#

or, save each companion to a ConditionalWeakTable

dusk mulch
#

god this is JUST the default.json file and its going to take me hours, i feel sorry for the translators

lucid iron
#

are u using the i18n-fier

#

hmmm if i do this though, ppl's companion would teleport in the middle of game blobcatgooglyblep

nova gale
#

you must have a lot of records

lucid iron
#

that seems slightly jank actually i give up this refactor for now

uncut viper
#

chu i think you should just rewrite the entire mod from the ground up with all this in mind from the very start SDVpufferthumbsup should be easier

#

Trinket Tinker 2

lucid iron
#

well it wouldnt really solve the core problem would it yggy

uncut viper
#

no but if its a complete rewrite you dont need to refactor anything currently existing SDVpuffersmile

lucid iron
#

i would need to make proper copy of state from previously existing companion

#

well i suppose so, the jenga method

vernal crest
dusk mulch
#

i18n-ifchu- wha?

#

No, I don't.

#

I am doing it all by hand if thats what you mean

#

Or well...

nova gale
dusk mulch
#

By Ctrl + C, Ctrl + V

#

Oh, nah I am good, I like doing it by hand. Makes it feel more genuine, like I am doing something.

lucid iron
#

ok well, it'd take u less time if u just use the thing?

#

its menial work

dusk mulch
#

¯_(ツ)_/¯

latent mauve
#

pacing yourself is important, sometimes it's easier on the brain to do the tedious work.

vernal crest
#

I do all my i18n manually too, but I only do small chunks of text before I i18n it, like all the dialogue for a single event etc.

devout otter
#

I make the dialogues in default.json first, then copy the keys to the patches.

dusk mulch
#

This should work for a mail data change right?
"LewisDiaryRead": "{{i18n:translation-key-46}} %item money 750 751 %%[#]Lewis's Angry Diary Letter"

fathom hound
#

think i shouldve posted this question in here now that i think about it

devout otter
#

Are they separate items?

fathom hound
#

its the same item

#

but animated in spacecore

devout otter
#

Oh, one item that says "ARCADE", with three frames of animation.

#

First you'd need to make the item first using one of the frames.

fathom hound
#

okay thank you.. it would be a different .png?

devout otter
#

The same png should be okay.

fathom hound
#

okie thank you

devout otter
#

(I don't think you'd need to duplicate that frame either.)

fathom hound
devout otter
#

Oh, you can just use this image

#

You don't have to make a fourth frame.

fathom hound
#

when you say make the item you mean just use one of the frames for the code?

devout otter
fathom hound
devout otter
#

Alright, do you need documentations on how to make it?

fathom hound
#

oh wait I made one before derp

devout otter
#

Alright! Make a working furniture first, using one of the frames (so a 48 x 16 object).

fathom hound
#

thanks! will do

dusk mulch
#

alright yall im going to take a shot at making a recolor

fathom hound
#

so no i havent made furniture LOL SDVpuffersquee

#

im checking modding wiki rn though

devout otter
#

Admittedly I was kinda confused when I made my first furniture, so I'm ready with some examples if you'd need any help.

fathom hound
#

thank you kindly!! im gonna try and figure it out first then send if I did anything wrong SDVpufferheart to make it easier

#

i dont understand this one SDVpufferthink

#

also, what do I put for texture if I don't need anything there, but want to change the value for 10?

devout otter
#

Your first question first. What do you use as tilesheet size?

fathom hound
#

my entire tilesheet is 144 x 16

#

oh but i put 48 x 16

devout otter
#

Ah, it should be measured in tiles, not pixel.

fathom hound
#

oh thats not what bounding box size is?

devout otter
#

Both are measured in tiles.

fathom hound
#

ohh

#

so 9 x 1 tiles entire thing, 3 x 1 for sprite

#

"ArcadeSign": "{{ModID}}_ArcadeSign/other/9 1/3 1/1/0/{{i18n:ArcadeSign.Name}}/3 1" have this so far

devout otter
#

tilesheet size is the size of your furniture, so that should be 3 1.

#

Bounding box is like... how much area surrounding the furniture that can't be passed. (For example, if you have a 3 x 2 television, but you want people to be able to walk behind it, you'd put the bounding box as 3 1.)

#

As the furniture you're making now is basically a painting, bounding box is kinda irrelevant and you should be able to just put -1 on it.

fathom hound
#

oh okay thanks!

devout otter
#

Also you're missing price, I think.

fathom hound
#

oh yeah i am

devout otter
#

sprite index is the location count of the sprite you want to use from your tilesheet, with the size depending on the tilesheet size you set.

fathom hound
#

its gonna be the first 3 tiles

dusk mulch
fathom hound
#

oh right because the other frames are just for the animation

#

so its just gonna be 3x1 SDVpufferkekw

warm imp
#

(bounding box also determines where the player can grab the furniture with the mouse to move it, so bounding box should match the tilesheet size here since the furniture is going on the wall)

fathom hound
#

is there a way to not put a price on it because I dont want Gus to sell it anyway

dusk mulch
#

[[shops]]

#

[shops]

#

...

#

{{shops}}

fathom hound
#

and I know how to access the wiki

dusk mulch
#

well i dont /s

#

😭

fathom hound
#

gotcha thanks!

devout otter
devout otter
fathom hound
#

"ArcadeSign": "{{ModID}}_ArcadeSign/painting/3 1/3 1/1/2000000000/0/{{i18n:ArcadeSign.Name}}/0"

devout otter
#

Okay, now you'd need to determine your texture field, else this furniture would pull sprite from the vanilla TileSheets/furniture instead of your custom sheet.

fathom hound
#

I see, how would I be able to have it recognize it?

devout otter
#

Do a Load on your sheet.

#

Then use the asset name you use for the Target field of your Load, as the texture in your Furniture entry.

fathom hound
#

like this?

#

wait it would just be Assets, i moved it out the data folder

#

Assets/arcadesign.png

vernal crest
#

No, you have mixed up two code blocks there

#

You need to Load your .png file into the game using one code block and then you need to EditData Data/Furniture with a second code block.

#

Are you looking at anyone else's mod for an example for this?

fathom hound
#

Yeah I was I guess thats why I got a bit confused cause I had it data/furniture before

vernal crest
#

Dolphin was referring to two separate code blocks in their instructions.

fathom hound
#

gotcha!

warm imp
#

sprite index goes by tiles and is independent of tilesheet size. sprite index is telling the game where to start the furniture appearance at, and tilesheet size is telling it how far it extends. setting a sprite index of 1 here would start the furniture at the second tile, in the middle of the green sign (unless spacecore messes with this for some reason)

vernal crest
# fathom hound gotcha!

Change your Load Target to "Mods/{{ModId}}/ArcadeSign" or something similar to a) ensure it's unique and b) follow convention.

#

And add a "FromFile" to your Load code block because right now you're not Loading from anything.

#

And inside your Data/Furniture entry, the texture field needs to match the Load Target exactly (except the slashes need to be different so that Data/Furniture doesn't think they're separate fields). So it also needs to be Mods\\{{ModId}}\\ArcadeSign instead of arcadesign.png

fathom hound
devout otter
warm imp
#

the forward slashes need to be two backslashes \ inside the data/furniture entry, since the forward slash will skip to the next piece of info

fathom hound
#

ahhh ok thanks i was worried about that

vernal crest
#

Whoops sorry yes I will adjust my message

fathom hound
vernal crest
#

Your FromFile is not correct. The path for that needs to match your actual folder setup in your mods folder.

fathom hound
#

oh ArcadeSign is my Mod ID though right?

vernal crest
#

It shouldn't be

fathom hound
#

ohhh gotcha

vernal crest
#

Your mod ID is the unique ID from your manifest

devout otter
#

Your ModID is whatever you set your UniqueID in your manifest.json.

vernal crest
#

But the FromFile path only starts from inside the folder that your content.json is in, not your Mods folder

#

So it should be "FromFile": "Assets/arcadesign.png" I think

fathom hound
#

thank u!

devout otter
#

Not really recommended to just use ArcadeSign in you manifest because there's a danger of duplicates (usual convention is <YourName>.<YourModName>)

fathom hound
#

i was gonna do MissAnaira.ArcadeSign

vernal crest
#

Yup that's great

fathom hound
#

yay thanks guys !!!

#

gonna check it loads in game before i do the spacecore

vernal crest
#

Very good idea

fathom hound
#

[Content Patcher] Ignored Arcade Sign > EditData Data/Furniture: one of Entries, Fields, MoveEntries, or TextOperations must be specified for an 'EditData' change. ope

devout otter
#

Oh haha the Entries. 😆

vernal crest
#

Oh whoops we missed that

fathom hound
uncut viper
#

swiss cheese theory but somehow for like 4 people at once

#

bc i was also just lurking and didnt catch it

fathom hound
#

yep! its in my game ^-^

#

using another mod for reference, what are the duration for the frames measured in? and what would my TargetRect values be?

devout otter
#

Honestly I'm not really sure about the duration measure.

#

The TargetTexture should be the asset name you've Load.

#

The TargetRect is the specific size and location of the sprite you use as your furniture in the tilesheet you loaded.

fathom hound
#

so X Y would be 48 16 & width height 144 16?

devout otter
#

X Y would be 0 0 and width height 48 16.

fathom hound
#

thanks!

#

[Content Patcher] Ignored Arcade Sign > ArcadeSign: the When field is invalid: 'ArcadeSign' can't be used as a token because that token could not be found.

vernal crest
#

Have you defined your token in your ConfigSchema?

fathom hound
#

ah no

devout otter
#

What's the When field is for?

fathom hound
#

dunno i just copied pasted from another furniture mod

rocky robin
#

So i was looking for a way of checking when the game closes and I got told we can use the IDisposable in the entry class and I just cannot figure out when to use it. Do i need to override the function? When I do that it vscode gives me a warning that i cant do that and its not a helper so idk how i would use it if that makes sense

devout otter
fathom hound
#

do i need it for spacecore? or did this person have something else

#

i dont see it on the github instructions

devout otter
#

Perhaps this person has a config option or a dynamic token to detemine whether they want it to animate or not.

vernal crest
fathom hound
vernal crest
#

So you probably don't want it right now.

#

(The When field, I mean)

fathom hound
#

thanks, when u said config schema i got a little confused cause it doesnt need configs

devout otter
#

(Personally I'd do a "When the user has SpaceCore installed" conditional so SpaceCore wouldn't become a hard dependency.)

fathom hound
#

:D it works tysm all <3

fathom hound
#

im sorry i didnt mean to ping reply

devout otter
#

Yar, I'm alright with pings.

fathom hound
#

u know whats funny? theres a visual bug with this sign LOL

#

its driving me nuts im gonna fix it even if the vanilla sign is broken lol

#

I think this is my last question for this little mod, if I have 2 mail flags, would it be formatted like this?

#

or would it be 2 separate hasflag lines?

vernal crest
#

Are you wanting to edit the data/mail asset if the current player has either Beat_PK or JunimoKart?

fathom hound
#

yeah I wanted them to get a mail from Gus if they completed both arcade games with this arcade sign

vernal crest
#

That's not both, that's either

#

So if they beat just one of them

fathom hound
#

oh how would I get both?

vernal crest
#

But you don't need to use a When field there anyway

#

Because they're not going to get that mail just because you added it to data/mail. You need to actually trigger it to send (also, your key for the mail should be unique just like any custom key needs to be, so I recommend prefixing it with {{ModId}}_).

fathom hound
#

tysm SDVpufferheart

#

i can't find a GSQ where I can put the condition for beating both jotpk and JK

vernal crest
#

PLAYER_HAS_MAIL

#

I think this is how to do AND: "Condition": "PLAYER_HAS_MAIL Current Beat_PK Received, PLAYER_HAS_MAIL Current JunimoKart Received"

fathom hound
#

thank you!

dusk mulch
#

finally i got an idea for a mod

fathom hound
#

Is there a way to console command debug having the minigames completed so I can test the mod? I'm only seeing how to actually activate the minigames to start playing, not the actual flags

vernal crest
#

You can give yourself the mail flags

#

Let me get the right syntax

fathom hound
#

ty!

vernal crest
#

debug action AddMail current JunimoKart received

fathom hound
#

thank you!

vernal crest
#

And then you can check if you have the flag with a patch summary

#

I think you need to sleep after running the commands before it actually adds the flags but I don't remember for sure

fathom hound
vernal crest
fathom hound
#

OH makes sense sorry

vernal crest
#

Did I just imagine you asking if you can edit the description for the furniture?

fathom hound
#

Is there no way to set a description for my furniture item? I only saw name yeah sorry i feel bad for asking so much

vernal crest
#

Looks like there is using spacecore, if I am interpreting Dora's Cat Cakes furniture content.json properly

fathom hound
#

ty!

dusk mulch
#

if i made a mod that people had no idea what it did, no description or title, how many people do you think would download it

unique sigil
#

You can using spacecore indeed, via EditData targetting spacechase0.SpaceCore/FurnitureExtensionData

dusk mulch
#

im trying to think of what to make next

#

because i have 2 mods on hold right know (waiting for commision and waiting for translations)

vernal crest
#

If you're lacking ideas and don't like the ones from the github repo, you could think about what feature of CP you'd like to learn about and go from there.

#

I wouldn't put a mod on hold for translations by the way unless they're in some way integral to the mod's function in any language. Most mods don't get translations (or at most they get a hastily thrown up Spanish AI translation from one of the DP farmers).

lucid iron
#

i think the benefit of i18n is yourself

dusk mulch
#

i make mods for the community, not for the interaction, so i want to make something that the people want

vernal crest
#

Then the github ideas repo is your best friend

lucid iron
#

by having it u get access to niceities like i18n dialogue randomization

vernal crest
#

Since that is literally the community asking for mods

dusk mulch
lucid iron
#

and then u attract ppl to translate

#

bc u have made it ez

dusk mulch
#

oops

#

sorry-...

vernal crest
lucid iron
#

what would be the point yggy

rigid oriole
#

i would not recommend using google translate for translations

vernal crest
#

Don't give people rubbish AI translations

dusk mulch
lucid iron
#

ppl use goolge translate bc they really want to use a mod not in their language

#

and put up with the mtl until someone can do a proper one

#

by doing this and shipping a mtl with ur mod you are killing chance of actual translation monS

dusk mulch
#

oh.

pastel sonnet
#

Out of your skill set isn’t an issue if you’re passionate enough. Anyone can learn, just depends if you actually want to 🙂

fathom hound
#

That’s literally all my mods LOL

#

It’s just stuff I wanted SDVpuffersquee

rigid oriole
#

sometimes I make mods I wouldn't want to play with because they make the game harder SDVpuffersquee

fathom hound
#

I actually really like my trick or treat mod because you can get ||magic rock candy|| as a treat from spirit’s eve SDVkrobusgiggle

vernal crest
#

My trick or treat mod can be good or baaaaaaad (||like the fact that you can get the frozen buff for an entire day and you literally just have to stand there until you pass out||)

dusk mulch
#

OOOO

#

I WANT KROBUS TO BE HOTTER

#

but i cant draw for the life of me

deep cypress
fathom hound
#

hi apryll! SDVpufferheart

#

Hm I feel like I did something wrong, the mail never showed up in my mail even after sleeping a night

lucid iron
#

did u unmark this action as complete?

fathom hound
#

my i18n

    "ArcadeSign.Name": "Arcade Sign",
    "ArcadeSign.Description": "A flashy sign made for the best gamers.",
    "Mail.Gus.ArcadeSignReward.LetterName": "Gus' Arcade Reward",
    "Mail.Gus.ArcadeSignReward.LetterText": "Hello @,^Congratulations on beating both of the arcade games my saloon has to offer! I wanted you to have this so you can complete your own game room at home. Cheers!  ^   -Gus"
}```
fathom hound
lucid iron
#

no like, trigger actions by default can only run once

#

bc of markascomplete

#

if u were testing it may have been marked already blobcatgooglyblep

#

i forgor what command it was to reset this

fathom hound
#

oh snap

#

ill just make a new save heh

#

hmmm it didnt work still

#

i got a blank letter after 2 nights of sleeping

#

ah i fixed it

#

but the item wont show up

#

oh i fixed it!

gentle rose
#

@dusk mulch I have some concerns about your Farmer's Market mod. It looks like it's shipping with a lot of the game's original assets - are these just new files that happen to have the same name, or are these the original assets themselves?

deep prairie
#

i want to change the obelisks to something else, does anyone know how i would do this?

rigid musk
#

hahSDVpufferparty my god he's real

sly nest
# fathom hound oh i fixed it!

Just out of curiosity, what was the issue? 🤔 At first glance I noticed there was difference with {{ModId}}, one entry has a capital D while the other does not. ^^

lucid iron
#

why is he ourple

rigid musk
#

he blue...

lucid iron
#

did he always have chicken pox

rigid musk
rigid musk
lucid iron
#

have i just never noticed bc he always stood in a dark room

uncut viper
#

he has always had those

lucid iron
#

horror

fathom hound
rigid musk
#

No in vanilla his clothes dont have the sparkles actually ... at least not his sprite

#

It was, in fact, tedious to add them

lucid iron
#

i am glad im not insane Dokkan

rigid musk
#

only mostly /silly

#

it feels wrong for him not to have the sparkles :(

lusty elm
lucid iron
#

what if u animate him

gentle rose
#

lily do you have a thread of your own yet? I just realised idk where to look if I want to see all the art you've been making SDVpuffersquee

lucid iron
#

even when he is still i mean

lusty elm
#

I look at him and i see a blue duck rooBlank, the lighter area on his face is his upper beak, the middle shade is the lower.

naive wyvern
#

i cant unsee it 😭

#

whatve you done draylon

rigid musk
rigid musk
gentle rose
unique sigil
rigid musk
#

well I put that in the art channel...

vernal crest
#

He iiiiiiis he's a duck!

rigid musk
gentle rose
#

but I want it in both the art channel AND a place I know I can look for your stuff KEK

rigid musk
#

I dont even know how to make a thread

#

I should probably know how to do that

vernal crest
gentle rose
unique sigil
#

im on mobile so i forgor how to do on pc, but if you click the channel name there should be a threads optio--

#

okay aba got to it first

vernal crest
#

Lol sorry Kisaa

unique sigil
vernal crest
#

Lily if you make your own you can rename it

rigid musk
#

Ill put Indigo in there then you can gaze upon her glory forever

gentle rose
#

Lily's Yet to be Named Thread

vernal crest
#

If you let iro then they will have all the power!!!

rigid musk
unique sigil
rigid musk
#

Her name is Indigo yeah!

unique sigil
#

very fitting!

gentle rose
deep cypress
#

Just to ask: Does any mods in particular patch NPC.MarriageDuties? Cause I am about to change how PolyamorySweet does the OnDayStart from using SMAPI's day start event to just patching that, because my current method is the cause of the pileups. If there are mods which do, I am happy to provide whatever compatability patching may be required, pls just let me know! 🙂

lucid iron
#

just harmony responsibly and dont do a skipping prefix?

naive wyvern
#

i tried to doodle him as fast as I could
@lusty elm @rigid musk

deep cypress
#

Unfortunately, to avoid mult spouses being piled, it looks to be it will be a skipping prefix....

rigid musk
#

GruHolUp oh my god

lusty elm
#

Holy Shit, you did that fast, and it looks awesome

rigid musk
#

That does look awesome

naive wyvern
#

thank u i try 🙏

rigid musk
#

but oh my god

lusty elm
#

The Jokey part of my brain is going, you should have a unique response to gifted food ducks love, where its just "Quack".

fathom hound
#

question, do i check this box if im just using a vanilla asset???

#

ty(:

unique sigil
gentle rose
unique sigil
#

if duck mode is active, mr. qi reacts to duck-related gifts with "quack"

gentle rose
#

no no, instead of having a duck mode config, you enable it by doing a secret cheat code of duck-related actions

lusty elm
naive wyvern
#

hehehehe

#

a stroke of genius struck me and i knew I had to write it down

gentle rose
#

you feed him sunflower seeds two days in a row and then water him with your watering can

whole raptor
rigid musk
#

I make a config for my mod where it changes literally every response to "Quack"

#

I will not do that, the amount of agony that would occur adding and changing 1.5k translation lines to "Quack" would drive me more insane than having to see "Nut Room"

unique sigil
#

now im wondering how j club will interact with this

#

mr. ji

gentle rose
#

pretty sure it will be jr. qi KEK

lusty elm
#

Gives a gift "Quack" ..... did he like that? What about this one Gives a Gift "Angry Quack", well he didnt like that.....

deep cypress
lucid iron
#

fully quacked npc

gentle rose
#

I wonder if ichor put in a way for a mod to do arbitrary overrides SDVpufferthinkblob

gentle rose
rigid musk
lucid iron
deep cypress
#

Moving people only somewhat works. What I am doing now is moving people. Unfortunately, what happens when moving people is they end up either not speaking lines, they end up piling up, or, they end up.... in weird places.

lucid iron
#

that sounds more like problems specifically caused by incomplete load of marriageDuties

fathom hound
#

thanks guys for being so patient and helpful as always, i got my teeny tiny mod out of the way SDVpufferheart good night! aSDVemoteheart

lucid iron
#

i cant stop u from committing crimes obviously but marriageDuties is huge and i doubt you want to reproduce the whole thing in ur prefix LilyDerp

lusty elm
lucid iron
#

would attempt postfix first

gentle rose
#

(and copy and pasting an entire method body is less than ideal copyright-wise)

lucid iron
#

failing that, a transpiler on every setTilePosition in marriageDuties

dusk mulch
#

Brain. Wont. Work.
Cant. Think. Of. Mod. Ideas.

lucid iron
#

just play game then

lusty elm
#

Whats something that annoys you when you play?

fathom hound
#

i actually finished my last mod idea tonight hehe SDVpufferprideowo

dusk mulch
dusk mulch
fathom hound
#

thx SDVpuffersquee now im gonna focus on visual updates and updating vanilla cooking recipes/retro spouse portraits!

#

but thats a tomorrow problem

lusty elm
#

People always appreciate new farms to play on, new sprites(critters, buildings, tools, etc), new crops, new items, new stuff in general.

vernal crest
dusk mulch
fathom hound
lusty elm
#

honestly, most of the modders mod more than play

vernal crest
dusk mulch
#

I got covid so I cant do much else

fathom hound
#

i might actually make a UI mod of my own tbh

#

and map recolor

lusty elm
#

I've long since toyed with the idea of making a recolor, but holy shit is it a lot of work.

fathom hound
#

IKR

fathom hound
#

i gave up after like 10 minutes LOL

vernal crest
dusk mulch
fathom hound
#

i know theres a lack of goth mods that people have been asking for, like a goth map recolor

lusty elm
#

I spent a few hours on it a year or 2 back, and realized you've got to take into account things you wouldnt initially expect, like eye strain when determinging coloration and intensity.

gentle rose
#

I pinged you earlier.

dusk mulch
#

I mustve missed the message

#

Found it

rigid musk
gentle rose
dusk mulch
lusty elm
#

it was a response to a few test images i mocked up and threw in here way back when, they are probably still in here actually... maybe i can find them

gentle rose
#

essentially, if someone downloads your mod without having bought stardew, you have theoretically given them a fair bit of unaltered stardew art.

dusk mulch
#

Well I just hid the mod so nobody else can access it for now.

lusty elm
#

I hope this works the way i think it does.

fathom hound
gentle rose
gentle rose
fathom hound
#

okay phew!!! aSDVemoteowo thank u

dusk mulch
vernal crest
rigid musk
# lusty elm

ouh that is pretty though... i like the second one a lot

gentle rose
#

which are that it's still illegal even if you won't get in trouble, and also it's kind of unethical

rigid musk
#

catpeek how many assets did they have in there

dusk mulch
fathom hound
#

i mean you'd probably get reported to oblivion and might chance getting banned from nexus

fathom hound
#

im not sure though

vernal crest
#

I'm surprised you managed to find so many files that actually looked good when placed on a map, to be honest. Or even how you managed to put 73 different tilesheets into one map haha

hard fern
#

I was about to suggest arbitrary tilesheet access before i scrolled up haha

dusk mulch
hard fern
#

It's becoming my best friend when map making haha, i love crops tilesheet

vernal crest
#

I'm so excited to switch to ATA and throw out my couple of vanilla assets I'm currently including in my mod.

dusk mulch
#

god this mod is a trainwreck, first the flagging, then the translations, then this

deep cypress
#

New Plan: let MarriageDuties happen, they scrub what happened entirely there entirely, with something completely different. Still hope no one patches it, pls let me know if u do.

rigid musk
#

Seventy three

hard fern
lusty elm
#

I believe CA has given blanket permission to use base game assets in mods for stardew, and even make mods for the game, provided that you also meet his caveat of, do not charge anything for mods, which i think is the BIG nono . Still technically illegal to even make mods, but thats where i believe they draw the line.

for practical reasons, you really shoudn't bundle pretty much any assets with your map if they are base game, you'd only do that if you intentionally want it to be untargetable by recolors and stuff.

dusk mulch
#

atp i think its just best if i scrap this mod all together nothing good has come from it

deep cypress
#

Don't scrap it. Just make it compliant, and keep on going.

vernal crest
deep cypress
#

There's probably people who enjoy your mod, people to whom it means a lot. Keep your light burning for them.

gentle rose
lusty elm
#

rooC I've never heard of ATA, so that tracks.

dusk mulch
#

that isnt good

naive wyvern
#

bro...

deep cypress
#

309 is three hundred and nine lives you have touched and made better.

naive wyvern
#

thats still a lot, imagine standing in a room full of 300 people

uncut viper
#

like iro and aba say including a couple things is fine and well accepted. but 73 is kind ofa lot

dusk mulch
gentle rose
#

it's not that bad, Person

ornate locust
#

I'm pretty sure everyone who has the game has those assets

gentle rose
#

just fix it for the future

#

it's a theoretical issue not one you need to stress out about

vernal crest
#

Yeah, iro was just pointing it out so you know and can fix it!

naive wyvern
#

yeah no
Just fix it, its really not that bad
A lot of old UI mods for example just put in the entire cursors.png in their folder kamo_laugh

hard fern
#

Good ol cursors.png

vernal crest
#

You're also not the only person who has had this pointed out to them, not by a long shot.

gentle rose
#

it's best practice - nobody got hurt by your mod as it is and there's nothing to worry about, all it is is that there are better ways to do things

naive wyvern
#

a pet mod I updated for 1.6 (and eventually added more content to) only replaced the dog assets instead of adding a new pet

They Also put the entire cursors.png in their asset folder kamo_laugh

deep cypress
#

I have stood before in person and spoken to (in the past, when I was a Baptist minister) a crowd of a hundred at most. That was a whole lot. You have more than three hundred now, and more to come in the future. You made your mod for a reason; you made that mod because of a spark of creative fire burned in you. Let that fire continue to burn. Let that fire burn away your dross, your mistakes, your problems you now should over come, but do not ever let that fire burn out. You have three hundred and ten people counting on you here. The three hundred and tenth person is yourself. Fix your mistakes and carry onward. Your modding days are not done.

dusk mulch
#

Its not that I am worried that people are sad or upset I am worried that CA or nexus will take some kind of action. (Nexus in particular)

naive wyvern
#

hardly happens

ornate locust
#

Wildly unlikely

lusty elm
#

nah

naive wyvern
#

just fix it

deep cypress
#

If you fix your mistakes and do what the people above told you to do, no one will do anything.

vernal crest
#

If you fix it right now, they won't have time to anyway xD

gentle rose
#

there's bigger "offenders" and CA doesn't actually enforce this stuff, like we said

deep cypress
#

Fixing your mistakes shows good faith.

dusk mulch
#

Well I should go install ATA

deep cypress
#

🙂

lusty elm
#

ATA im gonna guess stands for All The Assets?

naive wyvern
#

Aribitrary Tilesheet Access !

lusty elm
#

I have no idea, i've never heard of it before this convo, so i was just guessing.

#

now i know!

vernal crest
#

But All The Assets is a great alternative lol

hard fern
#

SDVpuffersweats i was gonna clear out my modlist so i could refresh myself on the game before continuing my mod but .. suddenly tummyache

dusk mulch
#

Ohhhh I get how ATA works now

uncut viper
#

All The Assets*

-# *ATA does not allow you to access all assets.

gentle rose
#

it should stand for ATA Takes Assets

deep cypress
#

Yes it should!

lusty elm
#

so ATATA?

gentle rose
#

recursive backronym time SDVpufferchickcool

deep cypress
#

To be fair, today is the first I have ever heard of ATA, but, mostly, I think most people just use a CPcursor patch, or just cut and paste like SVE into their own new tilesheet?

dusk mulch
#

So this is how ATA works?

uncut viper
#

its unnecessary for things in the Maps folder