#making-mods-general

1 messages ¡ Page 232 of 1

rancid temple
#

So the pathing can cross the bridge, but it depends on when you last slept

#

If you've just loaded the game, any place where the path across is not part of the base map the NPC's won't be able to cross (the Mountains quarry bridge is another spot)

#

But if you've slept, they should be able to cross it

#

I've seen some workarounds that involve patching in Passable T to the spots on the bridges where they should be able to cross

rigid musk
#

Yeah I just fixed the beach thing so that's all good... I probably should put some sort of exception for the beach bridge but I honestly... do not care enough for that wheeze (also if you havent fixed the bridge by the time you marry him ... what)

#

That doesnt explain his issue with the casino ones though :(

#

(I found that his skull cavern schedule works as well so that's good)

rancid temple
#

What's happening with the casino?

rigid musk
#

He just gets stuck in the door same as how he got stuc k at the top of the beach

#

im about to test him going there again so Ill get a picture

rancid temple
#

Probably because the Bouncer is a map Buildings tile

#

It would be the same thing as the bridges

latent mauve
#

Yeah, I was wondering if putting a NPC warp just before the Bouncer would fix the casino

rancid temple
#

Should

#

Though maybe janky

#

Could put a warp behind the building outside, so it looks like he uses a staff entrance or something

latent mauve
#

That would work also, yeah

rigid musk
#

I don't... want to do that specifically because then I'd have to do it twice for SVE as well

#

(i am extraordinarily lazy)

rancid temple
#

Not that lazy SMCKekLmaoDog I'd just say screw the compat

latent mauve
#

Alternatively, if you'd rather patch the indoors, make a fake door?

#

Does nothing, they just NPCWarp right outside it. (I did this for my apartment mod's elevators)

rancid temple
#

Oh, there's an NPCPassable T tile property

urban patrol
#

i had this issue because i set the destination to be across the bridge before it was fixed (which speaking of, is there a way to have the npc ignore that and cross anyway?)

rancid temple
#

Could try that on the Bouncer's spot

rigid musk
#

So with the bouncer thing... why would it do that if he can do his other (non marriage schedules) just fine

rancid temple
#

Have you tested under the exact same circumstances re: sleeping and the Bouncer being gone?

rigid musk
#

yeah I did go and check to make sure the bouncer was gone (and then I slept two days just to make sure)

#

he still decides that standing right at the door is definitely the best solution and 100% what he should be doing

#

(i want to turn him into blueberry paste)

rancid temple
#

Oh wow, Bouncer isn't just a map tile... that's annoying actually lmao

final arch
#

are i18n keys case-sensitive? 🤔

rigid musk
final arch
#

in CP

rigid musk
#

I believe so?

#

If the bouncer being there is an issue I don't know why it wouldn't have done that with... every single other schedule he has

final arch
#

they're not apparently

rigid musk
#

they arent ?

#

that's... new

#

Honestly it's probably not new I just prefer to keep things exactly the same when doing my keys

#

capitalization and all

latent mauve
#

Most things are case sensitive in Linux but not Windows

#

So it's best to be case sensitive anyway when coding

#

Or you will get bug reports from Linux users

rancid temple
#

Honestly, it might just be a marriage breaks NPC's issue... probably easiest to embrace the jank of an NPC warp right before the Bouncer's spot

rigid musk
#

A_A_misery well it worked

#

Marriage schedules make me want to explode

dusk mulch
#

I am moving it for the redesign of the town

rigid musk
#

yes thank you individual this copy paste is very helpful for your issue Judgement /sarc

#

(i cannot even replicate this so i dont know what they did, because there is absolutely a warp from sandy's oasis to the desert)

brittle ledge
#

It's not on the desert festival map.

#

The passive festivals are actually separate maps, so you have to do a warp to those too.

rigid musk
#

well there's a warp there too - sandy takes it when she goes to sit near her thing with Emily

#

(ive also watched him go to his spot in the desert festival far too many times since I was trying to figure out how to do string schedule dialogue lol)

calm nebula
#

Don't use the desert festival map name

#

Use Desert

rigid musk
#

"DesertFestival_2": "730 Desert 43 25 2 \"Strings\\schedules\\AngelOfStars.Mrqifriendable_TheMrQi:DesertFestival\"/2500 AngelOfStars.Mrqifriendable_QiRoom 4 10 3 sleep",

calm nebula
#

Huh

#

Weird

rigid musk
#

It works for me, this is just an issue someone posted... which I can't replicate (I tested it just now)

#

They also didn't actually send me a log so I don't even know if they did something to the oasis or something

brittle ledge
#

Yeah, in that case I'm wondering if they have a mod editing desert/the festival

#

@cunning kiln Not sure if you saw, but your anti-spiral mod is hotmodding! SDVpufferheart

lucid iron
#

The people desire the end of the 🍥

violet grotto
#

I am the people

#

You have my gratitude!

dusk mulch
#

Can I get permissions to edit the schedule for compatibility?

brittle ledge
#

I suppose so. I think you're setting yourself up for a lot of work though.

patent lanceBOT
#

@lucid mulch: experiment with vscode extension for cp intellisense (92h ago)

urban patrol
#

does anyone know how to adjust the positioning of the NPC on the swing? offset doesn't appear to be doing anything when i change it, and also i need him to be in front of the swing layer.

animation: "edwin_swingset": "23/23/23//laying_down/offset 0 12",

schedule: 1400 Town 15 12 2 edwin_swingset

dusk mulch
brittle ledge
#

OK. Keep in mind when you edit events that there are a number of mods that edit vanilla events and you'll need to take those into account too.

#

Also there's a ton of things that patch Town so I would be careful about adding anything in empty space.

brittle ledge
#

Unless that's what you're already doing?

urban patrol
#

would the offset be -16 then?

brittle ledge
#

Your vertical offset is currently 12, so I'd try -4 and see how that works.

urban patrol
#

okay cool

dusk mulch
brittle ledge
#

yes?

upbeat ledge
#

can anyone help me add a custom event to my mod, ive looked all over the modding guide and have absolutely no clue why it isn't working, ive tried using EditData and Load in my Json but the event just wont trigger?

brittle ledge
#

That's what SVE does too, but things get patched on top of it.

dusk mulch
#

Well I am only moving the play
ground mostly so I shouldn’t need to worry about events

brittle ledge
#

Lavril has an event at the playground (which I think you knew) and I would not want to edit one of Ark's events

#

they're wizardry

dusk mulch
#

Okay then…

#

I won’t move the playground and I will figure out something else.

gentle rose
#

honestly this is why most mods barely touch the town

brittle ledge
#

I mean you can if you want to of course! But I don't think even SVE moves major parts of the town (and they do do enough edits that they have to edit vanilla events around their maps)

gentle rose
#

sve gets away with it because it existed so early and it’s so big that other modders know to account for it if they want compat, but the town (along with the bus stop) is just one of those maps that are better off not messed with too much

brittle ledge
#

yeah at this point there's a ton more stuff to consider

dusk mulch
#

Should I scrap the idea all together?

brittle ledge
#

I think editing the town is hard because you don't want to screw up stuff like that, so you have to be pretty light and subtle on the edits/only touch things that people don't path into.

brittle ledge
ocean sailBOT
#

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.

dusk mulch
#

I will scrap it and do something else

brittle ledge
upbeat ledge
#

event*

brittle ledge
#

think you forgot to include your other NPC in the load here

upbeat ledge
#

wait did i actually

#

did i really oversee that

#

oh my god i did

brittle ledge
#

also keep in mind if her internal name is {{ModId}}_Layla (recommended) she also needs to be that way in the event

upbeat ledge
#

thank you so much

brittle ledge
#

(That would actually throw an error in your SMAPI log though)

upbeat ledge
#

im sure i put her name in the thing before though i must have deleted it on accident

#

ill test that now

brittle ledge
#

You have /speak Layla in the event, but if her internal name is {{ModId}}_Layla you need to use that in the event too.

dusk mulch
#

.Choose East, South, West

patent lanceBOT
#

Choose result: West

upbeat ledge
#

ok, sorry im new to this stuff im just making this mod for me and my friends

dusk mulch
#

OH COME ON

#

I was hoping it wouldn’t choose that one

#

Welp time to reinstall central station

upbeat ledge
#

or something like that

brittle ledge
#

yep!

upbeat ledge
#

thank you so much

brittle ledge
dusk mulch
#

I am expanding the west of the map, adding a new town of sorts- Oh boy that will take a lot of NPC’s, events, schedules and more… Meh.

upbeat ledge
#

does the mod id also apply to the other actions she does in the event like facedirection?

brittle ledge
#

West of Town or you just mean a location in CS that's implied to be west of PT?

gentle rose
gentle rose
#

oh, I see, I thought you were extending the actual map west

brittle ledge
#

that's why I asked cause I thought that too SBVLmaoDog

dusk mulch
#

No no lol

brittle ledge
#

Basically anywhere you'd use the NPC's name.

#

But if you miss one, the SMAPI console should spit out an error.

#

(Ask me how I know SBVLmaoDog )

upbeat ledge
#

it did, but the event did trigger atleast which was my main issue, this has taken me about a month to fix so thank you so much

upbeat ledge
brittle ledge
#

When I do my scripts I just use my character's name, so when I write the code I have to convert it to their internal ID. Sometimes I miss one SBVLmaoDog

upbeat ledge
#

its always the small things when it comes to coding

#

im used to python not C#..

brittle ledge
#

Events aren't even C# though, they're just long, weird strings SDVpuffersquee

rigid musk
#

long awful weird strings

#

awful

upbeat ledge
#

true, i was so confused when writing it..

dusk mulch
#

Now I need a name for the town...

rigid musk
#

when in doubt... fantasy name generator

dusk mulch
#

Oooo

rigid musk
#

they have a 'places' section

dusk mulch
#

Hmmm

brittle ledge
#

Person , are you going to continue work on your Highrest mod too?

dusk mulch
tidal stone
#

is there an easy way to find the location on a sprite sheet for a specific item i want to replace the sprite of?

#

i know i need to use the to area thing but idk how to go about findidn the exact location

brittle ledge
#

Oh I don't know what's going on with your manifest SBVLmaoDog I meant more are you going to go more indepth with that one?

upbeat ledge
#

i have more issues.. i've changed all the characters to have the modid but the fade in isnt working and i get a random error when i try to warp a character in?

brittle ledge
# tidal stone is there an easy way to find the location on a sprite sheet for a specific item ...

Yes! Though I don't recall if it includes 1.6 items or if those are separate https://stardewmodding.wiki.gg/wiki/SpringObjects_Coordinates

Stardew Modding Wiki

This is a table with co-ordinates for every sprite in the springobjects.png file. To use, reference the X and Y values in the row and column headers - eg: leek has a column header of 320 and a row header of 0, so its co-ordinates are 320,0.

tidal stone
#

Omg! ty!

dusk mulch
brittle ledge
calm nebula
brittle ledge
#

delete the third number here

upbeat ledge
#

it did have something to do with 3..

brittle ledge
rigid musk
#

^

dusk mulch
#

Hmmm...

#

True.

rigid musk
#

Who cares if it's popular or not tbh_seen

dusk mulch
#

I will keep going with it then

rigid musk
#

Do I gotta pull out my 'do it for yourself' hat again

brittle ledge
#

It is an error that 1.5 let us get away with and 1.6 does not SDVpuffersquee

upbeat ledge
#

ohhhhh

#

i was probably watching a 1.5 tutorial then

#

i forgot which one it was

#

but yeah

brittle ledge
#

Not much changed with events so that tutorial is probably okay, it was always an error that somehow just a lot of people did SBVLmaoDog

#

(If you're doing NPC stuff though don't use a 1.5 tutorial as they did have significant changes)

upbeat ledge
#

i mostly used the stardew modding wiki for that

#

sorry, but another errors happened (i hate this..) Its now just straight up saying my 2nd character doesnt exist, despite me using the modId for the character

brittle ledge
#

Is that Conny? Did you add them in with the farmer and Layla in the beginning?

upbeat ledge
#

no, did i need to...

brittle ledge
#

Yep, anyone that appears needs to be added there. If you don't want them onscreen you can set their coordinates to 999 999 0 or something like that so they spawn way outside the visible window.

upbeat ledge
#

i feel so stupid im so sorry...

brittle ledge
#

No worries, this stuff isn't easy to get when you're first starting out. That's why so many people made tutorials SBVLmaoDog

rigid musk
#

Don't worry, the amount of questions I've asked in this server (and the amount of OBVIOUS ones) is innumerable, don't feel bad for asking any at all :3

#

A majority of my messages in this server are just me asking questions in this channel...

upbeat ledge
#

my only messages are in here..

rigid musk
#

heh that's what mine used to be too lmao

#

of the 5k or so messages I've sent 3k are in here

upbeat ledge
#

honestly though events were my biggest issue in the codes im now just struggling to make portraits with my gf SDVpetbearsad

dusk mulch
#

Well since I did justt release Highrest I will give it a break for now and work on some other things.

gentle rose
brittle ledge
dusk mulch
gentle rose
upbeat ledge
gentle rose
#

just to make sure it’s not going missing during the zipping process

upbeat ledge
#

i have hopefully one final yet another issue, its now saying this

#

and its confuzzling my brain

dusk mulch
gentle rose
#

(it would be very weird for nexus to be eating the file from inside the zip, so it feels more likely that something broke while zipping, though that’s also very strange)

#

(is your unique ID meant to be NotAGardener.FL?)

brittle ledge
#

Assuming the parsing is the same as your current version, I think you need a space between the \" and your NPC's names.

dusk mulch
#

Yes

gentle rose
#

it will cause some confusion if anyone ever needs to troubleshoot it because it isn’t obvious that’s the same mod as Highrest Camp

upbeat ledge
#

ok, ill try that, thank you

dusk mulch
#

I was going to call the mod Flower Dance Unlocked so I used the ID as .FL but forgot to change it

gentle rose
#

anyway, as you can guess, the manifest is indeed there. Strange.

upbeat ledge
brittle ledge
#

hm

#

!json send your updated event code?

ocean sailBOT
#

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.

tidal stone
#

do the replacement images have to have a specific canvas size when your replacing them

gentle rose
tidal stone
#

aaah i see so thats probably why my mod isnt working, ty!

rigid musk
dusk mulch
#

@ivory plume I deleted my FarmersMarket mod, you can remove it from the description of Central Station

upbeat ledge
#

I mean the start, and through the whole event, its just black

#

unless i read that wrong and thats the issue

rigid musk
#

you need to start it where your NPCs are

dusk mulch
# rigid musk :( why did you delete it

Well I wanted to redo it from scratch and make it much smaller, I had too many vanilla game files in it which is "shipping" game files, which is technically illegal soooo

upbeat ledge
#

:0

#

thank you so much

rigid musk
#

"springtown/-1000 -1000/

#

this section here

upbeat ledge
#

do you have any idea what i would change it abouts to

rigid musk
#

you could foucs it on where the NPCs are

#

31 66

upbeat ledge
#

okay, thank you, ill try that

#

oh my god it finally works 😭 it isn't perfect but thats because of my string, thank you so much to both you and the other person (i dont know your names, im sorry SDVpufferwaaah)

#

you've saved me another month of stress

rigid musk
#

Blushcat everyone here is happy to help

#

Tia is also a great help for sure

upbeat ledge
#

but of course, theres one final issue SDVpufferwaaah

#

i can get the event to work through the debug, but i can't get it to trigger without it, like if i go to the time, with the friendship points, and walk into the town, nothing triggers

brittle ledge
#

Did you restart after you finished debugging it? or did you save the game and sleep?

hallow prism
#

oh i'm on central station page, thanks pathos 😄 this is a nice way to compensate for how tedious nexus requirement section is (aka : i'd like to have more mods in requirement for VMV but it's a pain because nexus have no order on it whatsoever)

brittle ledge
#

It won't trigger again if you already viewed it with debug ebi

upbeat ledge
#

ohhhh

#

ill restart and see if that triggers it :3

#

thanks for all your help anyways, like i said, nothing was working until like an hour ago..

#

its worked..

#

after all this time

#

thank you so much

brittle ledge
upbeat ledge
#

i just need to do the actual script properly now, instead of using a placeholder to make sure it worked..

#

thank you again for helping

#

i cant express it enough

rancid musk
#

I'm back to working on Better Game Menu today. It's a bit silly how much work some of this needs to be Efficient™️. I've started tracking and deferring window resize events because vanilla menu pages just straight up expect to be completely reinstanced on a resize, and doing that for all existing pages every time the window is resized would be dumb. So now, every time someone changes a tab, I need to:

  1. Resize the Game Menu based on the dimensions requested by the new tab
  2. Try to get the existing page instance.
  3. If there was an existing instance, and the current window size has changed from the window size the last time it was open:
    a. Try calling an OnResize method from the tab implementation definition to see if we need to recreate the menu from scratch.
    b. If the OnResize method didn't return a new instance, then call gameWindowSizeChanged on the existing instance.
    c. If there was a new instance returned, then fire off the API event for a new page being instantiated
  4. If there was not an existing instance, call the method to create a new page instance
  5. Store the current window size alongside the tab details so we can check against it in the future
  6. Call an API event for the current page changing.
lucid iron
#

Khloe are you trying your best to retain the original GameMenu class

rancid musk
#

Absolutely not I threw that in the bin

tawny ore
#

Are you using the existing SubMenus or recreating them?

lucid iron
#

What if stardewui then

rancid musk
#

I'm using the existing submenus, but writing a new container.

tawny ore
#

It might be nice if through a modapi, they could be replaced potentially. Or custom tabs be added/removed even.

#

Such a thing would probably be useful for Better Crafting, right?

rancid musk
#

Yeah, I'm using Better Crafting for testing purposes.

lucid iron
#

World map everywhere too

#

Special power utility

dusk mulch
#

For ViewportClamp <int x> <int y> <int width> <int height> what do I do for <int width> and <int height>

brittle pasture
#

and VPP

dusk mulch
#

ohhh nvm

gritty summit
#

hello

#

cĂł mĂĄ nĂ o ko

lucid iron
#

I thought vpp just had a new menu open up actually

#

Since spacecore took over skill menu already

fading walrus
rancid musk
tawny ore
#

Awesome, sounds like you've thought of everything. I wish you the best of luck with this endevor.

#

I'm imagining the possibilities, GMCM tab, CJB Cheats tab, etc.

dusk mulch
#

I will try my hand at making a tilesheet

rancid musk
#

The trick is how to handle it when a user has too many tabs to fit on one row. Do I put in a second row of tabs? Do I make them scroll? lol

tawny ore
#

I intend to insert 40 tabs between Inventory and Skills, please add support /s

rancid musk
#

But I haven't gotten that far yet.

#

That reminds me. Letting users hide tabs would probably be good.

gritty summit
tawny ore
#

Not to say all of that would translate well, but organizing tabs is a solved problem imo

fading walrus
#

sidebery my beloved

gritty summit
fading walrus
#

(speaking strictly from a user POV, being able to collapse tabs or otherwise hide them would be nice!)

gritty summit
#

My wall has this problem, my friend. Some floors I made don't have it, some floors do.

rancid musk
#

I want to be careful about something like moving tabs to the side because the vanilla expectation of the game menu is just tabs on top and everything else is under the control of the individual page.

#

Say you put the tabs on the left side, how does that work with the collections page? Say you put them on the right side? How does that work with the inventory menu's floating buttons and trash can?

tawny ore
#

It definitely shouldn't be the default option, but is probably the best solution if a modded player managed to end up with a large number of tabs to manage

lucid iron
#

Do you stack them

tawny ore
#

Like if I had 30 tabs, I would not want those things to be horizontal

#

Also, another fun thing with Sidebery... I heard you liked tabs, so I added tabs to your tabs...

rancid musk
#

Anyways, my goal for the first version doesn't solve too many tabs.

#

Just the performance issue of constantly recreating every page of the game menu all the time

#

I swear if you look at the game menu funny it recreates itself

calm nebula
#

If you look at me funny I recreate myself

tawny ore
#

If you do want to account for overflow, I feel like scrolling or wrapping should both be options. At least with your container it should handle a variable height.

calm nebula
#

I would love it if the menu deferred until after you clicked the tab

rancid musk
#

It will defer.

fading walrus
calm nebula
#

There isn't a reason to do the entire (jank af tbh) collections page layout if I'm just checking my inventorying

tawny ore
#

But for controller players, moving beyond the rightmost visible tab to access the next one is the most intuitive interaction interaction

calm nebula
#

No one cares about controller players

rancid musk
#

I do!

#

Both of them

calm nebula
#

No one cares about mouse and keyboard players

tawny ore
fading walrus
#

I used to use a controller at one point
I quickly realised it wasn't worth it when playing with mods lol

tawny ore
#

You need to save the last few pixels at the bottom just for a shadow gradient instead of the wall design

#

This is what your wallpaper should look like

rancid musk
#

Not only will my mod work for controller players, it will work for split screen players 😈

gritty summit
tawny ore
fading walrus
calm nebula
#

Please what about

rancid musk
tawny ore
#

Game controller support?

#

I want to be able to Hadouken my enemies, pls

calm nebula
rancid musk
#

I've got the bongos downstairs don't tempt me

tawny ore
#

The last one we haven't covered yet

calm nebula
tawny ore
#

Imma start posting on mod pages, "Can you please add Jungle Beat Bongos support?"

lucid iron
#

What about wiimotes

tawny ore
#

Or even better, add a comment on their Amazon listing. "2 stars because it does not support SVE"

tidal stone
#

man i keep trying to replace the gold bar (all the bars eventually) and i cant seem to get it to work but im p sure i have the right coords and the correct sizing

tawny ore
#

Want to share your json, we can maybe help you with that?

#

!json

ocean sailBOT
#

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.

tidal stone
#

ooh ok

#

do i share the link or the text bit

tawny ore
#

The link is fine

calm nebula
#

Height 116?

tawny ore
#

Assuming you have a 16x16 gold bar image that you want to replace it with, you should be targeting the area `{ "X": 0, "Y": 224, "Width": 16, "Height": 16 }

tidal stone
#

oop i wonder if that number mistype is why its not working lmao XD

#

it works! idk how i missed that number mistype but ty for pointing it out!

#

now i just have to load in all the other assets >:3c

gritty summit
tawny ore
gritty summit
#

So what should I fix? :<

inner harbor
#

So now I'm getting this rather common error message:
Requested path from EastScarp_MtEvermore to EastScarp_FireTower for Gender Male where no valid path was found, for NPC MichaelHart.
but the map does seem to have the correct map warp on the door (Warp 7 10 EastScarp_FireTower). How can I solve it?

#

(And why does it say "Gender Male"? Is it just because Michael is male?)

brittle pasture
#

(the answer is apparently Discord have been giving away automatic nitro trials without confirmation)

tawny ore
#

Sure they are... next thing you'll be telling me is I have to follow a suspicious link in your profile to get my free Nitro /s

lucid mulch
#

hmm. whats the least painful way to make a thin wrapper around Monitor to be thread safe

tawny ore
#

ngl, I'm not familiar enough with thread safety to know whether my implementation is safe or not

#

But I use a Singleton wrapper with static methods that refer to the instance

#
public static void Trace(string message, params object?[]? args)
{
    if (Instance is not null)
    {
        Message();
        return;
    }

    QueuedMessages.Enqueue(Message);
    return;

    void Message()
    {
        Instance?.Raise(
            message,
            LogLevel.Trace,
            false,
            0,
            args);
    }
}
brittle pasture
rigid musk
inner harbor
#

It is not, it's a door warp and it doesn't seem to actually work for some reason that I don't understand.

#

door warps generally work

calm nebula
tawny ore
#

Wait, are you referring to Monitor as opposed to IMonitor

lucid mulch
#

smapi IMonitor/Monitor

calm nebula
lucid mulch
#

In the first like 20 lines of code of this mod I've already started making new threads and want to log from them

inner harbor
#

Let me just check something: I accidently set a LocationContext to the same tile instead of the full map

lucid mulch
#

and I know the standard smapi IMonitor isn't remotely thread safe

tawny ore
#

Apparently, you can use Monitor to thread safe IMonitor

public void ThreadSafeMethod()
{
    Monitor.Enter(_lockObject);
    try
    {
        // Critical section
    }
    finally
    {
        Monitor.Exit(_lockObject);
    }
}

#

Note, this is not something I know anything about or have tried, but I found it interesting that this exists for this purpose

calm nebula
inner harbor
#

could be the whole occasional door not working issue too

calm nebula
#

I usually back off the logging in release builds though

empty lake
#

Hey SDVpuffersquee does someone know how to get the mod author role?

hard fern
#

Ans you have to be lvl 25

#

I think

empty lake
#

thx ^^ my lvl is to low I guess xD

lucid iron
#

what mod author privilage do u need?

#

if it is showcase we can repost on your behalf

inner harbor
#

I could try a LockedDoorWarp I suppose

dusk mulch
#

well ive almost got half the buildings done and it took me... sigh 2 hours...

teal bridge
#

I wouldn't synchronize access to IMonitor, personally. I've never really noticed a significant thread safety issue with it (maybe it corrupts console output or something but it won't crash anything) and it's going to impose a huge overhead because logging can involve stuff like file I/O.

#

If it's really important to have thread safety on the logger instance then the performant way to go about that is to have every thread post their log entries to a threadsafe collection - multiple producer, single consumer - and have the consumer do the actual logging.

tawny ore
#

In that case, you can probably use a ConcurrentBag, perhaps

calm nebula
#

There is a producer consumer queue in c#

#

But honestly

#

I usually just yolo

gentle rose
#

I have already passed my concurrent programming exam and you guys cannot force me to think about this ever again CB_no_angry /lh

tawny ore
#

I think the best bet is to just completely rewrite the entire logging system

calm nebula
#

Don't use a concurrent bag

gentle rose
#

without knowing any context, it sounds like you guys are up to some crime

calm nebula
#

You do want some degree of order

tawny ore
#

Concurrent Barf?

calm nebula
#

I'm always up to crime

gentle rose
#

british bath, baff

calm nebula
#

Concurrent barf....

inner harbor
#

I don't understand what's up 😦 Maybe it's just cursed map?

calm nebula
#

Remind me in 16 hours to take a look

patent lanceBOT
#

always, atravita <3 (#6553120) (16h | <t:1740848372>)

gentle rose
#

why is uberbot being nice to you suslysella

inner harbor
#

because atra is awesome

#

Thank you. I suspect it's something fundamentally flawed with iether my map or the game.

calm nebula
#

Any summer save?

#

Do I need to be a certain amount of friends?

inner harbor
#

yeh, it just 0 schedules Michael to be in the Fire Tower for summer

#

He exits fine but won't re-enter even though the farmer can do so

gentle rose
#

atra, have you ever played balatro? I feel like you’d like it

calm nebula
#

No

#

I haven't

astral oyster
#

I'm having trouble even knowing where I should ask this question, all these channels feel rather confusing to navigate. The question I have which I've searched for in the tab, but can't find the answer; is there a mod that allows for %verb, like how in base game you can do %noun and %adj?

calm nebula
#

Do I look like the type of person who has the free time to do that

inner harbor
#

sorry...

gentle rose
#

you should try it out, each run is pretty short, like 30mins ish sometimes

calm nebula
#

Tbh, iro, I'm in my gym era

#

That is the other half of it

gentle rose
#

I keep forgetting you have healthy hobbies

tawny ore
#

Do you knit while you treadmill. Actually, I feel that can be dangerous. Sharp objects and all.

gentle rose
#

unrelatable ngl

calm nebula
lucid mulch
#

after diving deep into this mod concept, I'm starting to realize the scope of the problem and its going to suuuuuuck

calm nebula
#

I run road and trail, but swim or do stairmaster

sour sleet
#

Anyone know where the image for the picnic blanket is (Penny 8 Heart event) Can't find it in Maps SDVpufferflat

calm nebula
#

I do knit between sets when I lift at home though

brave fable
#

it's in LooseSprites/Cursors ☀️

sour sleet
#

Thanks SDVpufferthumbsup

gentle rose
#

anyway the reason I suggested balatro is because I have a feeling you’d enjoy the Number Go Up aspect of it

brave fable
#

down the bottom, above the water, to the left of the JOTPK sprites

inner harbor
#

I wonder if it's due to my weird layering

sour sleet
#

Probably a dumb question but can Cursors.png be used as a tilesheet and applied to a map or do you need to only use files from Maps?

brave fable
#

it can be! you just need to use the mod Arbitrary Tilesheet Access

dusk mulch
brave fable
#

not a dumb question at all since it's a plague on map authors

dusk mulch
sour sleet
#

Oh good haha

#

Thank you both

dusk mulch
#

is there a command for ATA? like !ATA or !ata or !Tilesheet

brave fable
#

there's likely not much need for it since this is realistically the only channel it'll be used in

dusk mulch
#

hmmm

cunning kiln
dusk mulch
#

such as !json

lucid iron
#

yea but it's like 1 mod

dusk mulch
#

ehhh true

lucid iron
#

button can make the command if desired

brave fable
#

json is like, every mod hahah

#

i won't say whoever adds !ata will get whacked but we'll see if it's asked often enough to need a command

#

i'm a desperado not a cop

tawny ore
#

!aita

dusk mulch
#

fair enough

lucid iron
#

@ivory plume do you have opinion on incorporating the patch arbitrary tilesheet access does on ModContentManager.GetContentKeyForTilesheetImageSource into smapi itself?

inner harbor
#

okay so here's the weirdness, one is in camel case and the other is not, FireTower. But... I can't find the lowercase anywhere.

brittle pasture
#

we need a command for every framework mod on this page

lucid iron
#

!ftm

ocean sailBOT
brittle pasture
#

!mmap

lucid iron
#

at least one exist then DokkanStare

#

but man i dont think i ever see ppl use this

dusk mulch
#

where is the 1.6 migration page

inner harbor
#

OMG it is in fact the freaking case. I think/hope.

ivory plume
lucid iron
#

588
scary

inner harbor
#

yep atra, found it and solved it. But people can play the mod if they want to. It's a bit piecemeal however.

#

(I saw that it had a case difference earlier but forgot to look in data/locations)

#

mutters angrily about case related errors

lucid iron
#

hm

Note: 1.6 adds the ability to add new buildings natively via CP, which should be the preferred method. SF still supports several features not present in the base game, including custom light sources on building exteriors or archways that can be walked underneath.
i think archways that can be walked underneath is supported by collision maps now

brittle pasture
#

ah yeah I added that part from vaguely recalling another person's message here

#

feel free to yeet

#

also feel free to link to MMAP in that description regarding custom lights

astral oyster
#

Alright slightly new question, does anyone know where I can find the %noun and %adj XNB files? I've been searching the files for a while and cannot locate them, nor can locate them through a search

lucid iron
#

SF has a bunch of random things tho

#

it also lets you have a second human door

brittle pasture
astral oyster
#

Thank you

brittle pasture
#

there are also verbs, but alas you can't reference them in dialogue with %verb

latent mauve
brave fable
#

i wish you could. oh the madlibs you could play with quest board text

vernal crest
latent mauve
#

Great! I was trying to catch up on the backlog but Discord is being a butt and keeps throwing me back down to the newest messages instead of letting me read the old ones. xD

uncut viper
brittle pasture
#

why not

lucid iron
#

wow we didnt add central station to this page

#

where does it go

vernal crest
#

If someone else made a closed source C# mod and I like that mod but want to fix some bugs in it and add some new features so I make my own mod that does the same thing (figuring out my own implementation), do I need to ask for permission to do so? Is it polite to do so? What if the person doesn't appear to be around anymore?

brittle pasture
#

maps probably

lucid iron
#

can i delet train station for it

uncut viper
brittle pasture
#

do it SDVpufferwoke

crude plank
brittle pasture
#

still mindblowing that I discovered that every framework mods can be categorized into 3 neat, roughly equal in size categories: items, maps, and a nefarious third thing

vernal crest
lucid iron
#

well thats like saying most things are made of carbon or silicon or anything else

vernal crest
#

That nefarious third thing category is doing a lot of heavy lifting lol

lucid iron
#

i also feel like

#

nitv is straddling maps and items

#

cus u get items yes but its also just critters u kno

brittle pasture
#

(yeah I think it's fine in my opinion. pure ideas and mechanics are not really anything that can be owned)

#

I say NITV falls to items since it's not really direct map changes

#

hmm I should add furniture machine

vernal crest
#

Well, I now have a very concrete idea for what I want to be able to achieve with my C# learning! So...I don't feel like playing the game anymore because I want to make C# progress instead xD

lucid iron
#

what is the other mod deprecated by central station?

#

bus something...

vernal crest
#

Bus Locations

lucid iron
#

this one didnt have the deprecated message so i was unsure

sour sleet
#

Does the FTM Config html thing have the option for multiple maps? Or does it do one at a time?

brittle pasture
#

BL is outdated and only kept alive by the unofficial update

#

I vote to remove it

lucid iron
#

oh it was never on the page

#

i just wanted to mention it bc central station has support for it

#

ill come back and add peliQ once i like

#

decide what it is actually about beyond the one time thing goat wanted

#

i dont think a new modder will rly get what i mean if i just say "ok its about item queries"

royal stump
sour sleet
#

Will that work even if it's a completely different map?

vernal crest
royal stump
#

Each spawn area targets a specific map, which doesn't need to be the same, e.g. that test example looks like this in the file

"UniqueAreaID": "Area 1",
"MapName": "Farm",
//...
"UniqueAreaID": "Area 2",
"MapName": "FarmCave",```
tiny zealot
lucid iron
#

sheku did say event lookup update being worked on yea

#

apologies if that does make u less motivated but 2 cake is real

sour sleet
#

Thanks for all your help with this Esca, I appreciate you SDVpufferthumbsup

vernal crest
# tiny zealot isn't sheku still active? i thought i saw them on recently

Yes sheku is active but none of the comments on Event Lookup have been replied to for ages so I thought "maybe sheku is not interested in working on this anymore" and then, my brain being what it is, I forgot all of that and was only left with a vague thought of "author is not around". Whoops kyuuchan_scratcheshead

tiny zealot
#

(if you did make an open-source second cake of event lookup, i would consider using it)

lucid iron
#

personally i'd want it to act more guidebooky

#

let mod authors give hints to their events if they wanted

tiny zealot
#

ooh

lucid iron
#

i do enjoy S&S guidebook very much

#

so it'd be like that but lightweight

sleek flint
#

Hey everyone, I remember there was a way to have multiple mod folders in SMAPI and a SMAPI application (or a shortcut, can't remember) that is assigned to each folder, but I can't find the wiki page that mentions it because I don't remember what this method was called. Can someone help?

lucid iron
#

what

uncut viper
#

mod profiles?

lucid iron
#

!modgroups

ocean sailBOT
sleek flint
#

I don't know the exact name

lucid iron
#

i got confused bc "multiple smapi", but theres only one still

sleek flint
#

that's why I can't find

lucid iron
#

you just launch it with different arguments

tiny zealot
#

i frequently think "i would enjoy a thing to replay heart events, like cave of memories or even just a weird menu" but then i remember how events have side effects and you'd have to account for not doing the side effects in memory mode and bleugh

sleek flint
#

Oh, thanks chu!

brittle pasture
#

replaying sve andy's event 999 times to get 999 ancient seeds

lucid iron
#

what if you do sanitation

#

on the event script

#

to make a ghost event

tiny zealot
#

replaying lacey's heart events so you can speedrun getting enough mean points that she rejects your bouquet

vernal crest
# lucid iron personally i'd want it to act more guidebooky

I would actually be going in the opposite direction so I don't think you'd like what I have planned! I want to make a version that's much more explicit about exactly what events there are and their exact preconditions and IDs so that I can make sure I have not missed a single event before I uninstall a mod lol

lucid iron
#

yep sure

#

its ur mod Dokkan

calm nebula
vernal crest
brave fable
#

while everyone has complete freedom, no method is completely foolproof. just make something that covers the recommended standards and you're good

tiny zealot
lucid iron
#

doomed then

calm nebula
#

There is an idea in the game of memory events

#

But not sure how much that is....respected

brave fable
#

hey that was a serious post u cant just laugh emoji me like that

lucid iron
#

but wait i thought there is a event repeater mod

#

is that only for debuggy

tiny zealot
#

i think if you got to critical mass, you could make some kind of subclass of Event and custom event commands could check for that to gate their side effects or something. or maybe whatever atra said

uncut viper
#

implement Quick Save into the mod, make a save before the event, load the save after the event

brittle pasture
#

just swap out game1.player

uncut viper
#

not all side effects are farmer based

brittle pasture
#

swap out locations too

tiny zealot
#

abigail's 14-heart permanently alters the map, lol

lucid iron
#

just launch a second copy of the game

#

run event in there

#

close after

uncut viper
#

doesnt one of elliot's make him vanish

brittle pasture
#

make clone NPCs then

uncut viper
#

quick save would be much easier

#

trust

tiny zealot
uncut viper
#

just make a deep clone of every object in the game as a backup and swap the clones back in after youre done

brittle pasture
#

but what about event triggers that store data in a global json file to disk

#

let's clone the file system just to be sure

#

or run in a sandbox VM

lucid iron
#

dockerized events

tiny zealot
calm nebula
#

Event state, mannnnn

vernal crest
brave fable
#

doesn't Debug Mode tell you the current event id?

#

cs return Game1.currentLocation.currentEvent.id; will probably also give the same result

#

even better, you can use cs return Game1.currentLocation.currentEvent.fromAssetName; to find the file

sour sleet
ocean sailBOT
#

Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 11 C# mods and 13 content packs.

brave fable
#

invalid tile gid is actually a nightmare

#

as much as i love using .tsx files instead of embedding tilesets, do you currently have any in your project?

sour sleet
#

I do have tsx files in it yes

brave fable
#

if you embed them into your maps, this error should clear up

#

i don't know exactly what causes it, maybe to do with adding/removing/moving .tsx files, but embedding them should solve it

sour sleet
#

How do I embed them?

brave fable
#

there's a pair of buttons below the Tilesets pane in Tiled, Embed and Export

#

only one is enabled at a time depending on whether the tileset you're viewing is currently embedded (in the current .tmx) or exported (in a separate .tsx)

dusk mulch
#

While I wait for feedback I will make a list of NPC mods for people to use (since this one will be updated)

brave fable
#

if you have multiple maps, you'll need to Embed the tilesets in each of them

lucid iron
#

u can use a tsx if you want, if u have a lot of shared ones

#

cant load a tsx to a target though,

sour sleet
#

I kinda used the tsx by mistake and want to go back to png lol

brave fable
#

i'm a big proponent of .tsx files but they do actually cause this otherwise completely unresolveable issue

lucid iron
#

well u can just embed that

sour sleet
#

I'm so confused rn

#

I think both my maps are messed up:((

brave fable
#

again they should be fine if you simply embed the .tsx tilesets into each map

sour sleet
#

I've done that but Tiled is giving me problems now. The tilesheet has been cut differently and seems to have duplicated on the same sheet??

vernal crest
vernal crest
#

Not sure about the tilesheet changing though - it shouldn't if your tsx was pointing to the right tilesheet.

sour sleet
#

Ah ok so that's normal then. I've deleted my tsx files and its still messed up:((

brave fable
#

yep, the embedded and exported tilesets will both show in your tileset panel, so moving/removing the exported one should hide it in the panel

#

'cut differently' sounds ominous

sour sleet
#

This is stressing me so much. If i pay one of you will someone fix this 😂

brave fable
#

rarely, once in a blue moon, a map can be just plain fucked

vernal crest
#

If you send me your maps and tilesheets (if you have any that aren't just vanilla ones) I can try to fix it.

brave fable
#

hopefully this isn't one of those times

sour sleet
#

That's so kind of you. I'm using all vanilla tilesheets, lemme just get everything together

foggy torrent
#

Hi there!

Does anyone know how to do custom gift messages and hearts? Like you gift someone a rock and they say "rock and roll" and give +10 hearts? :D

#

Thank u

sour sleet
sour sleet
vernal crest
foggy torrent
#

Thank you abagaia and selph!!

vernal crest
vernal crest
sour sleet
unique sigil
#

oh oof discord borked a minute there, but if you do and want to use pngs i have a little suggestion for future mapmaking endeavors

vernal crest
sour sleet
sour sleet
vernal crest
unique sigil
# sour sleet I'm pretty sure that's why I tried using the tsx in the first place because the ...

Here is a list of Tiled extensions. among them is a bulk animator (lets you animate in bulk from a selection) and a plugin to one-click remove all unused tilesheets in your current .tmx file.

the second one is relevant because my suggestion is to make a template .tmx file which contains every single tilesheet you could possibly use, all animations included. it seems that you are making a full custom location instead of a vanilla map replacer, so this method won't be of much trouble - simply copy your template map before working on your actual map, and then use the plugin to remove all unused tilesheets when you're done

#

If theres a shiny new tilesheet youd like to use in your maps, embed that tilesheet into your template .tmx to update it, animate as needed, and then copy it again, etc.

sour sleet
unique sigil
#

i have two template maps, one for outdoors and one for indoors, so it cuts down a lot on the prep process

orchid glade
#

Hi! I sent you a message on nexus about a potential collab on portraits for this

unique sigil
sour sleet
unique sigil
#

yeah, my template map is totally blank, but with all tilesheets i use included.

#

(it also doubles as a test map for testing new additions to my tilesheet mod)

sour sleet
#

And how do I copy the template to the new map?

unique sigil
#

you just copy the .tmx file and rename it

sour sleet
#

Ohh I'm dumb haha

#

Thank you for all the info, I really appreciate it SDVpufferheart

unique sigil
#

anytime! i find .tsx breaks my maps way too often and i'd rather use my time working on the map than fix .tsx-induced problems SDVpuffersquee

vernal crest
sour sleet
vernal crest
#

I have learned enough about .tsx files from blueberry now that I feel safe exporting one from a vanilla map to embed into my own map, but I still only do that if it's going to be guaranteed less faff than animating/adding tile properties myself.

sour sleet
#

I want to try to avoid embedding if I can because I'm not fully familiar with how it works but in future, I won't be using .tsx files

unique sigil
#

i'm a .tsx hater unfortunately puffpensive though making the template map does involve squinting at the tile animations window bc not all vanilla objects are straightforward to animate

vernal crest
#

By the way, you don't need to use the "z_" prefix with tilesheets for non-vanilla maps because the game won't be checking tilesheet order anyway.

sour sleet
#

I just don't understand that I've made a map in the past with pngs only and it's still animated fine lol

unique sigil
#

i use prefixes if only to make some tilesheets mine appear first in the tilesheets tab kekdog

sour sleet
#

Like my old map had an animated fountain, water etc

#

But I didn't use any .tsx in there

vernal crest
#

Did you start that old map by editing a copy of a vanilla map?

vernal crest
sour sleet
#

I don't think so, but I can't be certain, it was months ago haha

unique sigil
#

i think i did use a .tsx for my last map bc i was midway into designing it and realized that i needed a beach area... it's a bit irritating because now the .tsx appears as a duplicate in the tilesheet pane until embedded (i have accidentally used tiles from a duplicate tilesheet before), so nah i dont think i can do .tsx anymore

sour sleet
#

I already know I won't be using .tsx again lmao

lucid iron
#

i aint using them until i have a way to load it into content pipeline tbh

#

thats the big pain point for me

vernal crest
#

Unless you started it by going File -> New -> New Map (which you should never do) then you probably did start it by using an existing map as a base and therefore the animation data might've already been embedded in the .tmx

sour sleet
#

Ahh that makes sense! Why shouldn't you choose New Map?

vernal crest
unique sigil
#

though making a template map does cut down significantly on my work time. i can just go right into designing kyuuchan_nod2

vernal crest
vernal crest
sour sleet
unique sigil
hard fern
#

sweaty the maps im making have no template. Im diving headfirst

lucid iron
sour sleet
#

Ah I've had a eureka moment, it's all clicking with me and makes sense dogekek

vernal crest
lucid iron
#

but also if the game itself is regoranized such that tsx is loaded separate target (if that's even viable)

vernal crest
lucid iron
#

then i'd be able to ref the waterfall 1 6 tsx and get animated

#

i dislike the general fragility of needing tsx in exact same folder as tmx

sour sleet
lucid iron
#

this is all in context of publishing a mod with not embeded tsx

sour sleet
#

Thank you so much for trying Aba

unique sigil
#

honestly from experience, breaking something so thoroughly is how i know how to do what i do now kekdog

#

(i fucked up my first map drawn from scratch lol)

sour sleet
#

Haha, well I'm kinda glad it happened because I understand things much more clearly now SDVpuffersquee

vernal crest
sour sleet
unique sigil
#

do you edit your maps directly in the unpacked Content/Maps folder?

sour sleet
#

No, I create a folder for my mod and put the tilesheets in there temporarily

unique sigil
#

ah i see

you should edit in the unpacked folder to prevent reference/pathing issues

#

i know it clutters up the folder real bad, but that's what ctrl + F is for

vernal crest
#

There's no need to put your maps into the unpacked folder to avoid directory climbing issues

#

The map and tilesheets just need to be in the same folder. Doesn't matter where on the computer that is.

#

Could be ~100 folders into your OneDrive if you wanted

unique sigil
#

oh wait, wrong phrasing, what i meant was the tileset referencing the two different pngs

vernal crest
#

The important points is just map + tilesheets in the same folder.

sour sleet
#

I just put them in my newly created folder for the map mod I'm making and I know how to solve the directory climbing issues should they arise but they don't seem to doing it this way

#

And then before I publish a mod, I delete the tilesheets from the folder

vernal crest
#

I think the tsx issue was just general misunderstanding of tsx in the first place, since creating two tsx files for the same tilesheet for use in the same map is unnecessary (and, as we have seen, breaky) no matter what folders are going on.

sour sleet
#

Yep I agree, I didn't really know a thing about .tsx before today haha

vernal crest
#

I was going to admit defeat and make myself a copy of the Content/Maps folder that I make maps in but instead I am going to try chu's suggestion of symlinking tilesheets.

unique sigil
#

i guess it all depends on what we're most comfy with SDVpuffersquee

sour sleet
#

Yep, that's what's good about this. The fact there are loads of different ways to do the same thingSDVpuffersquee

lucid iron
#

theres actually

#

1 more layer of indirection blobcatgooglyblep

#

i have a .mapwip folder where the tmx go and then i do a copy to mod folder later

#

i dont know if i recommend what make sense to me for general usage

vernal crest
#

Although I think I might make myself a copy of Content (Unpacked)/Maps anyway for opening other people's maps because I do put them into there currently and now I get confused about which maps/tilesheets are vanilla.

unique sigil
#

the only time i worked on a map in its release folder is because the map is part of a content pack for a framework thats being updated constantly in alpha. having to copy the .tmx into unpacked Maps with every released build is a hassle

otherwise i just edit in unpacked Maps folder because directory climbing confused me in my early days until i figured out i could just change the image source in notepad

vernal crest
unique sigil
vernal crest
#

Just to be clear, I do not suggest to people that they should have their map inside their mod folder and the tilesheets in Content (Unpacked)/Maps. If they keep the map in the mod folder, I tell them to copy the vanilla tilesheets in there too.

#

I never recommend anything that involves creating a directory climb even though it is easy to remove in the xml.

#

Too much chance people will misunderstand and not realise the necessity of removing the path in the xml.

sour sleet
#

I actually think it was you who helped me fix my first directory climbing issue ages ago Aba dogekek

naive wyvern
#

It was most likely aba, theyre really on top of helping people with Tiled issues (shoutout aba theyre my GOAT)

sour sleet
#

I'm pretty certain it was them, I will also shoutout Aba SDVpufferparty

uncut viper
#

pretty sure GOAT is someone else /j

vernal crest
#

Amusingly, I am also GOAT's GOAT xD

unique sigil
#

a well-deserved title kyuuchan_nod2

uncut viper
#

GOAT²

vernal crest
#

Well, this GOAT² has to go do laundry before I forget again aSDVpufferleaves

orchid glade
#

Anyone know about update subkeys?

#

When it says to put the update subkey "somewhere in the title or description", is that of the manifest.json or the nexus page?

tiny zealot
#

nexus page

orchid glade
#

Thanks!

royal stump
#

(specifically in the sub-file's title or description, rather than the mod itself)

orchid glade
#

Yep gothcha! Thanks!

ivory plume
#

Monthly mod stats time!

Mod compatibility

74.8% of SMAPI (C#) mods are compatible or have a workaround, up from 74.2% last month.

Unique mods by type

We have 268 more mods this month. That includes:

  • +182 Content Patcher;
  • +54 SMAPI;
  • +24 Alternative Textures;
  • +16 Fashion Sense;
  • +8 Farm Type Manager;
  • +3 XNB;
  • 0 Better Artisan Good Icons;
  • 0 Custom Music;
  • 0 Dynamic Game Assets;
  • 0 Mail Framework Mod;
  • 0 Shop Tile Framework;
  • -1 Custom Furniture;
  • -4 Producer Framework Mod;
  • -5 TMXL;
  • -9 Json Assets;
  • and 0 for frameworks with <100 content packs.

Content Patcher packs

We have 10,533 Content Patcher packs.

The top five Format versions are...

  • 2.0 (3,270 ↗ 3,294), 2.3 (746 ↗ 754), and 2.4 (514 ↗ 547) for Stardew Valley 1.6;
  • 1.19 (572 ↘ 568) for Stardew Valley 1.4;
  • and 1.3 (475→) in old unofficial guides.

Open source

The open-source stats dropped recently due to Nexus' export API not including mod descriptions (so the scripts couldn't detect GitHub links in the description). That was fixed this month, so I rebuilt the mod dump, added a script to detect source link discrepancies between the mod dump and compatibility list, and fixed all detected discrepancies.

Besides raising the percentage of open-source mods from 59% back to 65%, that also means changes to mods' source links after they're first published will now correctly be reflected in the monthly mod data updates.

  • We have 3,244 tracked C# mods, of which
  • 2,119 mods (65%) have a source code repo, with
  • 1,145 (54%) in a multi-mod repo and 974 (46%) in a single-mod repo.

Web costs

And finally, web hosting costs for the SMAPI.io site, update-check server, and API held steady around US$203/month. (The graph is always a bit behind due to billing cycles.)

See also

And that's it for this month!

dusk mulch
#

how do you get negative mods

ivory plume
#

That means mods of that type were either deleted, hidden, or converted to a different type. For example, a Json Assets mod converted to Content Patcher would be subtracted from Json Assets and added to Content Patcher's total.

dusk mulch
#

ohhhh

#

alright

#

how does it feel to have dominated the modding market pathos

hard fern
#

+3 xnb? 😅

ivory plume
lucid iron
#

i think it'd be pretty annoying if sdv has competing mod loaders so i am in favor of smapi monopoly Dokkan

brittle ledge
#

Hey Pathos, is there a way to use the mod dump to see what mods have the most mods using it as a requirement? Like it'd be interesting to see which non-frameworks dominate, like Spacecore.

ivory plume
#

You mean stats on the Dependencies manifest field? Yep, that'd be pretty easy to do.

lucid iron
#

oh yea i had thought about making smapi log dependencies

#

for the log parser to read

brittle pasture
unique sigil
#

i wonder how many widely used mods still have TMXL as a dependency? SDVpufferthink

lucid iron
#

hopefully 0 because it hard crash ur game when u got to forest sometimes

unique sigil
#

it also freezes the game when you load a custom farm map sometimes SDVpuffersquee

dusk mulch
unique sigil
#

and also somehow send you to a weird void dimension where the farmhouse interior on save load becomes weirdly dark..

ivory plume
#

(There are 238 TMXL content packs remaining, down from a peak of 339 in April 2023.)

ivory plume
#

(It's been steadily decreasing ever since.)

dusk mulch
#

oh at least it is decreasing

unique sigil
#

oof, that's still a lot

guess i wont be removing the preemptive warning to remove TMXL before reporting bugs anytime soon SDVkrobusgiggle

dusk mulch
#

i think my map is done! (the outside, now to do the buildings and NPC's)

#

which gives me pain to even think about

orchid glade
#

I just finished my unofficial update for OhoDavi portraits, can I share the mod here?

uncut viper
#

did you have permission to update it?

#

(i dont know what their perms are like)

orchid glade
#

OhoDavi has open permissions on their assets

uncut viper
#

nothing stopping you then, but yeah, the people in modded-farmers (who actually play SDVpuffersquee) would probably enjoy it more

orchid glade
uncut viper
#

pretty sure that channel cant get enough portrait mods

lucid iron
#

but is this the lewd mod?

#

rule 6 may apply if so

ornate locust
#

I think it's just anime

uncut viper
#

different mod

sour sleet
#

Can I request the mod author role?

brittle pasture
#

you can dm bouncer

uncut viper
#

has your mod actually been released yet

sour sleet
#

I’ve released several mods

uncut viper
#

fair i wasnt sure if you just had the troublesome tsx map mod

#

usually i just assume that if someone has A Mod then they will immediately cheeto SDVpuffersquee

sour sleet
#

No, this is my 9th mod

#

I’ve been modding for a while SDVpuffersquee

uncut viper
#

unless im there when someone posts their mod there is a 95% chance i will just never know or remember

#

and even if i am there that only brings it down to like 90

sour sleet
#

Haha that’s fair

dusk mulch
#

Does anyone know if there is a sprite of a big tv facing north?

sour sleet
#

I’m pretty sure all the vanilla TVs are facing forward - none face north

dusk mulch
#

Fun...

ornate locust
#

From what I understand you need a certain rank for a modder role too. At least that's what they said when I put in for it. It's a little confusing

dusk mulch
ornate locust
#

and yeah all the TVs face you. I think there's a mod that adds a flipped TV though

#

if I can remember what it is

dusk mulch
#

I figured something out

ornate locust
#

yeah I did the same tbh. It's funny because no couches face the TV either

lucid iron
#

you need to be level 25

ornate locust
#

I did the ol' sideways couch

lucid iron
#

the blue color

#

so 8BitAlien qualifies

merry rampart
#

anyone know where the animation vfx for the barrier to the mutant bug lair is stored? ive looked in all the game folders i can think of and cannot find...

unique sigil
merry rampart
#

i looked there and didnt see it

#

cursors has a lot going on so maybe i missed it?

unique sigil
#

worth a second look SDVpuffersquee

dusk mulch
#

so its always worth a second look

rancid temple
#

That trick is used a lot

unique sigil
rancid temple
#

Did they change that?

#

When I did it you had to add yourself to the wiki with your links there

unique sigil
#

oh that too

ornate locust
#

you see why I was a bit confused at the time

unique sigil
#

when i requested pixelsmith as a new role i had to send a mod link

rancid temple
#

#roles has more info about it and a link with more details

merry rampart
#

hmm doesnt seem to be a stamina bar....

#

ill keep looking

ornate locust
#

But the roles info says nothing about the wiki thing

unique sigil
#

you'll be requested to do so in the bouncer DM

vernal crest
#

You have to ask permission to edit the wiki

uncut viper
#

it does, the link in that role snippet tells you

unique sigil
#

you need permission first before you can edit the wi--yeah what aba said

warm imp
merry rampart
#

oh hey theres a thing here in cursors which has a trapdoor hatch with a ladder going down [/makes note for future reference]

uncut viper
#

also i think maybe what roku meant isnt that itll look like a stamina bar in cursors but that its literally just a single pixel stretched and coloured with code as is often done. so. good luck finding that pixel and not having it be messed up for anything else

#

(which is whats done for the stamina and health bars)

warm imp
#

might be these near the top? SDVpufferthink between the level up and tiny numbers to the right of menu tutorial sprites

merry rampart
#

i thiiink i may have found it

#

I think this is it

#

sadly it's not gonna help me. ill need to figure out something else for what i want to do

rancid musk
#

Hmm yes these tabs are rendering perfectly. Ship it.

#

In other news, it takes about 7100-8000 ticks right now to open this menu compared to the fastest I've seen the vanilla GameMenu opening being 22000 ticks.

#

And this is on a fairly minimal mod pack so there isn't any additional content for the collections tabs.

#

That's tested by harmony patching a prefix + postfix onto both the GameMenu constructor and the BetterGameMenu constructor.

#

Also I've seen game menu take over 40000 ticks to open, lol

crude plank
rancid musk
#

Yes. Mind you I'm talking timer ticks not game ticks.

teal bridge
#

2.2 milliseconds for vanilla? That seems incredibly optimistic for a cold start, I don't think I've ever seen vanilla opening anywhere close to that fast. It must be a warm load?

rancid musk
#

Yeah, that's a warm load.

#

For fun I'll get cold load numbers for both menus.

#

Though I don't think that's strictly fair

crude plank
#

why not?

rancid musk
#

Most players open the menu considerably more than 1 time while playing.

crude plank
#

i mean sure, but with a big modload the first time they open it is going to be possibly the only time they'd feel how long it actually takes for it to open

rancid musk
#

Cold and lukewarm time for the vanilla menu: ```
Started opening menu.
Finished constructing menu in 978500

Started opening menu.
Finished constructing menu in 24931```

Cold and lukewarm time for better: ```
Started opening menu.
Created new instance for tab 'Inventory' using provider 'stardew'
Finished constructing menu in 120856

Started opening menu.
Created new instance for tab 'Inventory' using provider 'stardew'
Finished constructing menu in 8265```

teal bridge
#

I probably obsess far too much over the cold MTFP, but to me that's the real metric.

rancid musk
#

Mind you I still haven't started caching a few things that I should reasonably cache.

teal bridge
#

Because that's where the jank comes in. 2 ms or 10 ms for a warm load doesn't make a huge difference, either way it's not a jank frame.

#

It's when the cold start takes 200 ms that the jank kills you.

rancid musk
#

I'm also getting happer with the API as I actually implement things and test everything.

#

Menu tabs, as an example, now just have a draw method instead of a Texture and Source as that was needed for the Skills tab and I had kind of forgotten about it, lol.

#

And I have a helper method in the API to create a draw method.

crude plank
teal bridge
#

(Aside, you should definitely name your mod No More Menu Lag)

rancid musk
#

No More Lag Opening The Menu

#

I Can't Believe It's Not GameMenu

crude plank
#

No More Menu because it would open before you get to say Lag

rancid musk
#

NMeo LnuaM ogre

#

(I'll add threading)

crude plank
#

lmao

teal bridge
crude plank
rancid musk
#

I am so happy that my resizing code works as intended

#

As an example: ```csharp
internal void RegisterCollectionsTab() {
static CollectionsPage CreateInstance(IClickableMenu menu) {
return new CollectionsPage(menu.xPositionOnScreen, menu.yPositionOnScreen, menu.width, menu.height);
}

AddTab(nameof(VanillaTabOrders.Collections), new TabDefinition(
    Order: (int) VanillaTabOrders.Collections,
    GetDisplayName: () => Game1.content.LoadString(@"Strings\UI:GameMenu_Collections"),
    GetIcon: () => GetDefaultIcon(TabIcon.Collections)
), new TabImplementationDefinition(
    Source: "stardew",
    Priority: 0,
    GetPageInstance: CreateInstance,
    GetWidth: width => width - 64 - 16,
    OnResize: input => {
        var result = CreateInstance(input.Menu);
        result.postWindowSizeChange(input.OldPage);
        return result;
    }
));

}```

#

When you resize the window, it calls that OnResize method. In this example, it creates a whole new instance, uses a method to copy stuff from the old instance, and returns the new instance.

That makes it easy for me to support the vanilla game menu pages of which none support the game window size changed method.

#

If you don't have one of those methods, then it calls gameWindowSizeChanged as normal and you're expected to just not be a weirdo.

#

And it only actually submits these size changed events to a page when the page is being accessed, be it via the API or because it's the active tab, so it doesn't just recreate a bunch of pages for no reason if they aren't visible.

dusk mulch
#

Whenever I try to use this warp it sends me into the void instead of the set tile. Can someone help?

#

oops

#

i didnt mean to post 2 images

hard fern
dusk mulch
#

I can show you where it is supposed to be teleporting me, I have no clue where it is teleporting me because it is just that far out

hard fern
#

Use debugmode

#

It shows the coords

dusk mulch
#

I can't zoom out that far for it to be abled to show me

hard fern
#

? Wdym

#

If you're in the void you're in the void

dusk mulch
#

Well debug mode only shows you the coords of where you're cursor is

hard fern
#

Well yes, but... If you are in the void can't you just hover your cursor over yourself?

#

Or am i misunderstanding something

dusk mulch
#

I think you are misunderstanding

hard fern
#

Ok, well show the map

dusk mulch
#

The camera stays on the map but I get teleported really far out

hard fern
#

Likez the map in tiled

dusk mulch
hard fern
#

Where is 7, 8

dusk mulch
#

The tree paths tile is where it is

#

I am just using 7, 8 as a test tile for now

#

I will change it once I fix this

hard fern
#

Oh wait no i know what's wrong lol

#

I went back to one of my own maps to check

#

Your coords are wrong

dusk mulch
#

?

hard fern
# dusk mulch

The way you have it is for a warp when you stand on a certain tile

#

As in, the coords

#

It is warping you to 42 11 on your map

#

Not 7 8

#

my explanation might be bad

dusk mulch
hard fern
#

this is off of leah's door

#

LockedDoorWarp 7 9 LeahHouse 1000 1800 Leah 500

#

it teleports the player to 7, 9

#

this tile, on leah's house

#

*in her house

dusk mulch
#

Oh, ty!

gentle rose
hard fern
#

😅 yeah, i just wanted to show that the coords are where you get spit out

gentle rose
#

hmm, if that is the case, then the wiki screenshot person sent is wrong, which I feel like we would have noticed earlier

hard fern
#

i believe that might be a touchaction warp though

dusk mulch
#

The- The wiki is wrong!

hard fern
#

not an action one

gentle rose
#

oh, I see, it was hard to see without the context - yeah, it’s important to make sure you’re using the correct one’s docs, Person

dusk mulch
#

Oh...

#

Ty!

hard fern
#

(from leah's house again) this is the warp on map properties 7 10 Forest 104 33

dusk mulch
#

i dont think that is supposed to work like that

latent mauve
#

Well, that's a new one for me: Central Station is missing its content files, so it won't work. Please delete and reinstall the mod to fix this.

#

I haven't touched Central Station since the tourist release, and the file is there when I look, so Windows/SMAPI is just like "nah, not reading that" I guess. xD

fossil osprey
latent mauve
#

In other news, another character sprite is done. ❤️ I can now scroll through the social tab and only have two screens worth of non-converted NPCs.

dusk mulch
#

god i should stop testing my mod, the more i test it the more bugs i find

hard fern
#

More reason to test it and iron out the bugs

dusk mulch
#

😭 but the bugs hurt my brain sometimes

hard fern
#

If you don't test it and fix the bugs you will have more to deal with later haha. There's nothing wrong with taking a break though

dusk mulch
#

fair enough

#

god i hate ponds

vernal crest
#

What's the TileData for?

dusk mulch
vernal crest
#

When you started making this map, did you start with a vanilla map with any water in it?

dusk mulch
#

No.....?

vernal crest
#

What vanilla map did you use as your starting point?

dusk mulch
#

I- didn't use a vanilla map... I think I see the problem now.

vernal crest
#

I wonder if that part of the maps page on the wiki needs to be emphasised more.

#

It's really recommended not to ever start a new map from scratch.

dusk mulch
#

Eh, its whatever. The tiledata can be kept.

vernal crest
#

However, that's also not how to actually do tile properties so I don't know if using TileData like that will work.

dusk mulch
#

It worked in game so

hallow prism
#

possibly it'll work

#

it's just more tedious (also not the same water than the game use usually, but this isn't a problem in itself)

vernal crest
#

Oh, chu did say you can apply object properties to tiles so it makes sense you can do the other way around. The game must see them the same way.

dusk mulch
#

Well can I make the water work like normal on a scratch map?

vernal crest
#

You can if you see a reason to remove all your TileData and do so. You just edit the tile properties in the tileset instead. That adds a property to every instance of the same tile on the map.

hallow prism
#

you can, i am just happy i don't have to do this because it's annoying to redo stuff 😄

vernal crest
#

(Also, in case your hatred of ponds was because you didn't know this: you can make one large object that covers the whole space instead of copying and pasting a bunch of individual tile objects repeatedly.)

dusk mulch
#

Oh.

vernal crest
#

Yes, though as Lumi mentioned those are not the tiles that the game uses for water so your water will look different to vanilla's.

#

(Just FYI, not a criticism)

dusk mulch
#

Meh, its fine if it isnt the same as vanilla. Something different never hurt anybody-
-# actually it might've...

#

Now, I need to think of a style/personality of the second person in the town...

#

.choose Cafe, Lumberjack, Joja?

patent lanceBOT
#

Choose result: Lumberjack

dusk mulch
#

Alrighty

flat sluice
#

Hi!
I'd like to ask - if you want some invisible-in-game dialogue checker, so for example, an event would be seen only if you saw certain (random - like if you would have 10 variants for spring 1 dialogue but only one of them would complete one of the conditions for the event) dialogue, how would you create such a thing?

Do I think correctly that I can use either #$action AddMail current XXX received that would add a mail with no content to our mailbox, and then I'd use some when to check if the mail was received, or #$action AddConversationTopic 1 to add a CT and then use some when to check if it was already seen?
If so, which one do you prefer and why? Or do you use some other method to do something similar to what I want? (I'd prefer only using CP but I'm fully open to anything)

(already asked this around a week ago (#making-mods-general message), didn't get an answer/wasn't pinged for it + I won't look for it)

vernal crest
# flat sluice Hi! I'd like to ask - if you want some *invisible-in-game dialogue checker*, so ...

Yup I would use $action in the dialogue line to set a mail flag. I wouldn't do a CT because you can only check for active CTs with vanilla/CP so unless your event was guaranteed to trigger before the player talked to the character again the CT could go inactive and then your event wouldn't trigger (or, if you didn't set the CT for very long, it might expire before the event could trigger even if the player didn't talk to the NPC).

#

I would usually try to have the $action command outside the i18n, but if you're using i18n for randomisation and not all of the lines within a pool would use the action, it'd have to be inside the i18n and just give translators stern instructions not to translate it.

flat sluice
#

(too many Dynamic Tokens there... Sorry for that!)

vernal crest
#

Is your key a conversation topic?

flat sluice
#
      "LogName": "Eleanor - spr13 festival location + dialogues",
      "Action": "EditData",
      "Target": "Data/Festivals/spring13",
      "Entries": {
        "StrojvedouciDenis.Eleanor": "{{i18n:Secret.Dialogues.festivals.spr13 |DT_name={{DT_name}} |DT_wizard_name={{DT_wizard_name}} |DT_wizard_fem={{DT_wizard_fem}}}}#$action AddMail current XXX received",
        "StrojvedouciDenis.Eleanor_spouse": "{{i18n:Secret.Dialogues.festivals_spouse.spr13 |DT_name={{DT_name}} |DT_wizard_name={{DT_wizard_name}} |DT_wizard_fem={{DT_wizard_fem}}}}"
      },
      "TextOperations": [
        {
          "Operation": "Append",
          "Target": ["Entries", "Set-Up_additionalCharacters"],
          "Value": "StrojvedouciDenis.Eleanor 30 5 2",
          "Delimiter": "/"
        },
        {
          "Operation": "Append",
          "Target": ["Entries", "MainEvent_additionalCharacters"],
          "Value": "StrojvedouciDenis.Eleanor 30 5 2",
          "Delimiter": "/"
        }
      ]
    },```
vernal crest
#

Ah, okay. That should be okay then, yeah.

#

I assume you aren't trying to implement the randomisation that you mentioned in this particular line.

flat sluice
vernal crest
#

Cool, I didn't think so but I was just making sure.

#

Do you know how to check for mail flags using patch summary?

flat sluice
#

I wanted to ask first what to do before learning that

vernal crest
# flat sluice Actually, no

If you do patch summary YourModID and then scroll up to above the patches it should show you the values of your mod's tokens and then if you scroll up more it will have save-specific info like name, spouse, etc. The HasFlag and HasReadLetter fields should show your flag once it has been added. It's helpful for troubleshooting if something relying on a flag doesn't work because you can check if it was the flag setting or getting that went wrong.

(Sorry if you already know how to do patch summary, just wanting to be thorough.)

#

You can also use debug action AddMail <player> <mail ID> to add a flag directly for testing and debug action RemoveMail <player> <mail ID> to get rid of it. The latter is especially useful because you have to sleep for a flag to be added and therefore it gets baked into your save and debug action RemoveMail lets you get rid of it again instead of having to make a new save.

flat sluice
#

Of course, I'll change XXX to something more unique

flat sluice
vernal crest
# flat sluice Did a patch summary a few times, but it's always better to hear it one more time...

It depends on your specific usecase, but in most situations you probably won't need to do a conditional patch (that's using the "When" field to determine if a CP patch will apply). For events, there's a precondition GameStateQuery that you'd use with the GSQ PLAYER_HAS_MAIL <player> <mail id>. For trigger actions you can use the PLAYER_HAS_MAIL <player> <mail id> GSQ in the "Condition" field. For dialogue you can use the $query PLAYER_HAS_MAIL <player> <mail id> dialogue command.

#

When you do want to use a conditional CP patch, I'd recommend "When" { "HasFlag": "XXX" } because it looks like CP's HasReadLetter tracks actual letter opening, which a mail flag doesn't have. You don't need the |contains=XXX": true part unless you want to actually check it's false (in which case check false lol).

flat sluice
vernal crest
# flat sluice Of course, GSQ! I should finally learn its using. So I should use GSQ, shouldn't...

You mean if you want to check multiple mail flags exist for the same event precondition or something? I think you would need to repeat it, yeah. I'm not sure exactly how it would look so you might have to experiment a little with different ways (e.g., whether you'd write "EventID1/GameStateQuery PLAYER_HAS_MAIL current <mail id>, PLAYER_HAS_MAIL current <mail id>" or "EventID1/GameStateQuery PLAYER_HAS_MAIL current <mail id>/GameStateQuery PLAYER_HAS_MAIL current <mail id>" or something else).

flat sluice
vernal crest
#

It also depends if you want to check if ANY of the flags are set or if ALL of them are set.

#

I can figure out how to check for any of them, but I'd need to do some trial or error to check for all of them, personally.

flat sluice
flat sluice
vernal crest
# flat sluice I noticed, I can use conditions like when (https://stardewvalleywiki.com/Modding...

You can use some CP tokens as GSQs if they are booleans (only return true/false), yeah. Like you can use {{HasDialogueAnswer}} but you couldn't use {{DailyLuck}}. I think I've seen somewhere that you can't use config tokens or dynamic tokens though, only predefined CP tokens. I don't know if I'm remembering that correctly though so unless someone elses bursts through the wall right now to confirm one way or another, I recommend testing it yourself to check.

I do not recommend changing all your CP conditions to game state queries, both because you literally can't use GSQs to achieve some things that you can do with conditional patches and because of the performance differences that make them useful in different scenarios.

vernal crest
flat sluice
vernal crest
#

If trying to check all the mail flags with the GSQ does get too difficult to figure out, I do already know how to do AND checks with CP because it's in the CP docs here.

flat sluice
#

Just to summarize - the only thing I have to do is to add #$action AddMail current XXX received after every dialogue I want (of course, every mail key would be different) and then do the "Conditon" thing for the event, right? Nothing added to Data/TriggerActions nor Data/Mails?

vernal crest
flat sluice
vernal crest
sleek flint
#

Is there an enumeration API for GMCM?