#making-mods-general

1 messages · Page 433 of 1

brittle pasture
#

how are you looking to show that info in-game? pop up notification, additional info in the seed description, etc?
either way you likely need C# yes

#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

woeful lintel
#

debug fin "item name" my beloved always did the trick, so I never used that

fathom vapor
hallow prism
#

i would say it also depends of the context. With VMV i can have harder stuff because it's not slowing down CC completion

#

if you do care about CC completion it is harder to balance because the players expectations will vary widely

#

(i would never install a mod making CC slower than it is, CC slower than a year is too much for me)

brittle pasture
#

either way yeah peruse the c# guide

oblique meadow
#

If I’m honest. I don’t care about CC completion I am not tying any farm progress to CC progress

vernal crest
#

You shouldn't be loading one image into two different assets like that, there's no point. If every object is on one single image, you just need one asset. If you have more than one image, your FromFile needs to be "FromFile": "assets/{{TargetWithoutPath}}.png" so that it will load all of the images instead of just one.

You also still have more than one Data/Objects patch which is unnecessary. And your Texture paths are pointing to the wrong thing completely. They need to be pointing to {{ModId}}_card1.

vernal crest
oblique meadow
#

I’m making a scope creep farm 😝

slow basin
#

ooo ok let me looksee here

indigo yoke
#

For some reason, when persevering flavor, the machine wouldn't make multiple stacks. Yet when I removed the flavor preserves, it produced the 4 to 8 items.
Could just be something on my end.

Last question: do you have an example of the custom cask options? I looked on your GitHub and didn't see any, unlike with other machine options you added.

brittle pasture
obtuse wigeon
#

beat me Selph

brittle pasture
#

re: I don’t have examples for custom casks yet, I was lazy
for the most part you can set the required CustomFields fields and then copy the vanilla cask output method

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.

indigo yoke
slow basin
#

ok take 5 million trying to get this to work

fathom vapor
lucid iron
#

Yeah feel free to go build upon it

woeful lintel
#

is there a way to hide the Galaxy SignInSteamAPI error when testing mods from a terminal? It puts red in the logs, which is not cool.

brittle pasture
#

!linuxmp

ocean sailBOT
#
Linux Multiplayer

Due to a security update to glibc, Linux users are having issues connecting to multiplayer (With the game hanging on the "Connecting to Online Services" screen) - While we wait for an official fix, there is a temporary solution available here: #1377481158509465703 message

fathom vapor
slow basin
#

ugh

#

ok i need help again im not picking up what you guys are putting down

fathom vapor
#

@lucid iron what did you use to make that? like C# or what

woeful lintel
# brittle pasture !linuxmp

are you sure this is related? The error is just red in the log, it doesn't hang like described in the linked message:

[22:21:06 ERROR game] Error initializing the Galaxy API.
TypeInitializationException: The type initializer for 'Galaxy.Api.GalaxyInstancePINVOKE' threw an exception.
 ---> TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception.
 ---> DllNotFoundException: Unable to load shared library 'GalaxyCSharpGlue' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libGalaxyCSharpGlue: cannot open shared object file: No such file or directory
brittle pasture
#

it’s not mentioned but yes those red errors are related

lucid iron
brittle pasture
#

they’re just harmless until you try to get online

slow basin
#

i think im gonna take a break for awhile and get some sleep

#

ive been doing this since yesterday morning with no break

lucid iron
#

It's benign if not coop and fixable by replacing the dll

fathom vapor
vernal crest
woeful lintel
#

huh, these files to replace are downloading at single digit KB/sec, is it a discord issue or a me issue? cuz I'm watching youtube at 720p with no issue

#

oh, hold on, I'm up to 45KB/sec!

woeful lintel
#

yeah, fixed it, thanks

shut edge
#

Y'all ever have a dev version of your mod so long you forgot you didn't release it

#

It's undergoing json surgery for now so I guess the next update I been working on is just bigger now lol

obtuse wigeon
#

Yep! thats the state of like 6 mods, it's confusing a times

lucid mulch
#

My last actual public release of profiler was like 2 years ago at this point, and is hard to remember what is and isn't in that public build

obtuse wigeon
#

If I had seperate repos for my mods I could do a develop and release branch but it's a lot harder when all of the mods are in the same repo

lucid mulch
#

Just doing git tags for public releases would do the same thing

obtuse wigeon
#

Good point, I didn't think of tags

lucid mulch
#

I'm personally a hater for separate branches for develop and main (and release branches for anything that doesn't actively maintain and support multiple versions of the same codebase)

tiny zealot
#

i use release branches locally but i delete them once the merge is done

#

and i do have dev and prod branches but i'm sort of neutral on that one (tags do a good job of "what was the state of the code in the release")

#

i do like the idea that if someone goes to the mod's repo on github, the thing that appears right away is what's in prod: the most recent release, as it was then

lucid mulch
brave fable
#

i'm a fan of master-develop-feature, though i don't have many projects that have so many ongoing different tasks that they end up using it

tiny zealot
lucid mulch
#

I've just had to deal with too many merge conflicts between master and develop over the years for it to be worth the effort, and doesn't do a good job with quality control unless you also do code freezes. (Had things poorly tested sneak into prod because it merged to develop right before develop promoted to master and shipped) I much prefer main being prod-ready and do more testing in the feature branches

lucid mulch
tiny zealot
#

oh i see. yeah i don't do those for stardew mods

lucid mulch
#

And majority of codebases don't actually have multiple supported versions in parallel

#

But blindly follow git flow anyway because they don't ask questions as to what problem it's trying to solve

#

Note I don't follow my own advice in my personal repos because a team of 1 doesn't need structure, particularly when I don't have ci/cd that would like that structure

calm nebula
#

I see your feature branches and raise SVN

#

cries

tiny zealot
#

obviously if you want to support multiple release versions, the answer is JDSL

oblique meadow
#

Random question. I know I can do this easily with C# but im hoping there is maybe an easier way without additional coding

I want to create a sprinkler styled object. But instead of watering crops, it has an increased chance to spawn foragables around it.

#

is this a C# task?

lucid mulch
oblique meadow
#

that's what I thought

#

but figured i'd ask

#

thanks

lucid iron
#

I would make the object a big craftable probably

#

Instead of an object

#

The thing you ask for sounds more like a scarecrow than a sprinkler to my mind

grand birch
#

how feasible would it be to have actual windows in the farmhouse? like it draws the exterior behind the house accurately. like huge 3x3 windows that loads a small square of the exterior and whatever is going on out there, like if another player walks behind there, you can see them. or alternatively if you have a door on the wall that leads to a yard or something, it loads that room.

oblique meadow
grand birch
#

its been a minute since i been in the modding scene, so i dont know what it would cost ram-wise but i thought i'd inquire

drowsy pewter
#

How exactly does 1 tile in a 30 tile farmhouse interior compare to 1 tile in a 6 tile exterior?

tiny zealot
#

honestly the idea of loading areas you aren't in sounds like a nightmare, especially in multiplayer with shadow realm shenanigans

drowsy pewter
#

or are you just thinking 1:1 size but theres only like 1 window?

lucid iron
#

If u don't actually care about whatever is "actually" behind the house then there's a mod for that

grand birch
#

oh just have the player place square for their view.

lucid iron
grand birch
#

like when you buy something with robin, it puts you on the farm to place the thing

lucid iron
#

If you do care about it being a real view then i guess u gotta render target that NotteThink

#

The C# bit seems annoying but doable it's the logistics of how I'd use this mod as player which confuses me

tender agate
#

gotta do computer vision algos for like when player is higher than floor 1 :p
in addition to accounting for what 6480 said

lucid iron
#

Yeah the lack of native Z coordinate means u gotta smoke and mirrors a lot

tender agate
#

ram wise would be fine if you like compute once and store the result or something, only doing edits when necessary

grand birch
#

i was thinking more like portal. so you can see whats actually in the view. actually lol, better than just a window, a portal would be cool.

#

i think it would be fun to make something like this, if only it were like 10years ago and i had the time to do it.

vernal crest
#

@slow basin I'm going to send you the files rather than use the json validator because it might make my ascii go funny (I use ascii headers to make it easier to navigate the file using the minimap, you can get rid of them if you want to). I have written notes prefixed with ABA: the first time I changed anything to explain what I changed and why. Try comparing it against the file that you have and see if you can follow my explanations (if not, feel free to ask me or someone else to clarify). If you want to use either of the files you can just remove the gummigecko_card_ part from the file name.

woeful lintel
#

just finished a crime against humanity

grand birch
oblique meadow
#

I know there is a game state query for PLAYER_HAS_CRAFTING_RECIPE . Is there a way I can query that they have at least made / placed one?

vernal crest
lucid iron
tiny zealot
woeful lintel
#

nope, just implementing an actual data format for the json to be parsed instead of doing it manually, so it's actual changes.

#

nobody told me this was possible before

slow basin
vernal crest
#

You didn't sleep for long though! You need some more!

slow basin
#

Ill try to sleep more in a bit i just hate leaving things unfinished lol XD

vernal crest
#

I get the same way but remember you still have a lot more to do and if you're properly rested you will better understand it and make fewer mistakes

#

I am taking my own advice and going to sleep 😴

slow basin
#

have good rest aba!

slow basin
#

is there a specific way your supposed to save a tiled map or is it fine to leave it as a tmx file

#

nvm i forgot to change something

tender bloom
#

You need it as tmx

slow basin
#

yee i forgot to change a section from assets to Maps X3

#

yippeee everythings working

#

now to slowly add everything

nimble marlin
#

Is it possible to add separators between config options with the GMCM C# API?

tiny zealot
#

i don't think there's a built-in one, but you can use a complex option and define your own draw code that would draw it

#

or i guess you could do a section header and make it out of hyphens if you were feeling lazy

nimble marlin
#

thank you!

#

I might change it to the complex option tho

#

actually the hyphens look very bad

#

I'll make it a complex option lol

urban patrol
#

what about underscores?

tiny zealot
#

(does the dialogue font contain underscores?)

urban patrol
#

i feel like i’ve seen it but now i’m doubting myself

tiny zealot
#

properly implemented, a series of underscores should render as a solid line (fonts that do not do this are deficient for regular typesetting, although it can be forgiven for programming fonts), but the vertical spacing might be weird

urban patrol
#

TIL!

#

what if you did ye olde fanfiction divider like ~.oOo.~ /j

calm nebula
#

Please

#

.xXx.

#

Or, my favorite, doing two of those but separated with emotional poems

oblique meadow
#

If you dont seperate with a haiku from now on, I will judge you

slow basin
#

I have decided to do 10 entries, take a break
do 10 more, take a break

#

because if i churn out all 300+ items in one go again im gonna melt

tiny zealot
calm nebula
#

Dude I actually had quotes from Command and Control in Harry Potter fanfiction

#

I should read that book again

indigo yoke
#

Copied an output from cask like you said (CHEESE), still isn't accepting the item.

elder kite
#

need idea for the last 4 sprites xd

brittle pasture
obtuse wigeon
#

Various tackles and artifacts? thats the only thing I can think of that I store that I don't see

brittle pasture
#

(once you fix it make sure to wack the casks and replace them)

slow basin
#

i wish i could just verbally list off what i want my computer to write for me 😭

#

let me code by reading my list

tiny zealot
#

(the content modders yearn for the foreach)

indigo yoke
gray bear
uncut viper
#

foreach as in "for each thing in this list, do (thing)"

gray bear
#

that does sound nice

uncut viper
#

Like "for every file name I put in this list, please generate a Load patch for me"

indigo yoke
#

yay, got the star on the book that shows up when it's working. a nice little detail :3 yay~

haughty widget
#

there are mods?

#

oh wow

#

I thought there are none because there is no workshop on steam

iron ridge
#

workshop isn't an ideal solution so it's not used

ornate locust
#

Steam Workshop has an extremely specific way of doing mods that isn't supported by all games

iron ridge
#

a lot of games that either don't exist on steam workshop or don't exist on steam have mods

ornate locust
#

honestly, as a modder, I always hate using it when I have to, it can be very annoying

elder kite
#

Textures are finally done, now I need to actually make the alternative tetextures logic and I'm already confusing myself. I have a lot of questions but overal the pack is pretty simple. Coding is NOT my strong suit lol, if anyone is experienced with AT and wouldn't mind lending a hand please dm. I want to bring the mod to life but quickly realized I have no idea what I'm doing xD

#

Finding an example pack that is achieving something similar to what my goal is would be ideal

#

I have 4 spritesheets (style1.png through style4.png)

  • Each sheet has 48 sprites arranged in a 12x4 grid, each sprite is 16x32
  • I want GMCM to let players choose between "Style 1", "Style 2", "Style 3", or "Style 4" for each chest type seperately: "Chest", "Stone Chest", "Big Chest", "Big Stone Chest"
  • Based on that choice, only ONE of the 4 spritesheets gets loaded into Alternative Textures at a time per chest
  • Players can use AT interface to assign any of those 48 sprites to the different chest types.

I hope this makes sense, it was tough trying to write out this logic, brained burned

true coyote
#

But i dont think at can separate per chest type

#

It's all or nothing

#

Someone correct me on that of im wrong

#

But first off for at, each sprite needs to be split individually, not on a tilesheet iirc. Every at file I've seen never has them on a single tilesheet

autumn tide
true coyote
#

Ooh, interesting. Haven't come across one so I couldn't fully vouch that it existed

tender bloom
# elder kite I have 4 spritesheets (style1.png through style4.png) - Each sheet has 48 sprite...

the gmcm combo is probably a little more complicated to implement, it might be easiest to start with the 48 sprites for AT per chest and go from there.

here's the AT wiki tutorial:
https://github.com/Floogen/AlternativeTextures/wiki/Creating-a-Content-Pack this is probably the best place to start

here's the docs about CP/AT integration: https://github.com/Floogen/AlternativeTextures/wiki/Content-Patcher-Integration which does mention it's more complicated.

notes on texture names for craftables:
https://github.com/Floogen/AlternativeTextures/wiki/Texture-Names#craftable-item-names (this will be helpful for determining what names to use for different chests)

lucid iron
#

Is it furniture or big craftable

brittle pasture
#

chests I believe

brittle ledge
lucid iron
#

Ah yeah i think you should just leave things alone since users do already get a menu to pick stuff with

indigo yoke
blissful osprey
#

Is this the right place to seek troubleshooting help for making mods? 👀

lucid iron
#

Try making just normal AT pack and then use it in game to see how u like it

#

Yeah what ailes thee?

blissful osprey
#

im trying to make a mod that only changes titlemenu and save/load screen UI scale.

For some reason, no test logs whatsoever show up on SMAPI, but my mod still shows up in ingame GMCM pepedrooling

using StardewModdingAPI;
using StardewModdingAPI.Events;
using StardewValley;
using System;
using System.Threading;

namespace TitleMenuScaler
{
    internal sealed class ModEntry : Mod
    {
        private ModConfig Config = new();
        private float OriginalUIScale;

        public override void Entry(IModHelper helper)
        {
            Monitor.Log($"Entered Entry");
            // Load config
            Config = helper.ReadConfig<ModConfig>() ?? new ModConfig();

            // On entering title menu
            helper.Events.GameLoop.GameLaunched += OnGameLaunched;
            helper.Events.GameLoop.ReturnedToTitle += OnReturnedToTitle;

            // On exiting title menu
            helper.Events.GameLoop.SaveCreated += OnSaveCreated;
            helper.Events.GameLoop.SaveLoaded += OnSaveLoaded;

            // On saving config
            // -> MakeMenuInGMCM() -> api.REGISTER() -> save() -> onConfigSave()
        }

        private void OnGameLaunched(object? sender, GameLaunchedEventArgs e)
        {
            Monitor.Log($"Game Launched");
            OriginalUIScale = Game1.options.desiredUIScale;
            MakeMenuInGMCM();
            ChangeTitleUIScale();
        }
        private void OnReturnedToTitle(object? sender, ReturnedToTitleEventArgs e)
        {
            Monitor.Log($"Returned to Title");
            ChangeTitleUIScale();
        }

        private void OnSaveCreated(object? sender, SaveCreatedEventArgs e)
        {
            Monitor.Log($"Save Created");
            RestoreTitleUIScale();
        }

        private void OnSaveLoaded(object? sender, SaveLoadedEventArgs e)
        {
            Monitor.Log($"Save Loaded");
            RestoreTitleUIScale();
        }

        private void OnConfigSaved()
        {
            Monitor.Log($"Config Saved");
            ChangeTitleUIScale();
        }

        private void MakeMenuInGMCM()
        {
            Monitor.Log("Entered MakeMenuInGMCM");
            var api = Helper.ModRegistry.GetApi<IGenericModConfigMenuApi>("spacechase0.GenericModConfigMenu");
            if (api != null)
            {
                Monitor.Log("GMCM API found. Registering menu.");
                api.Register(
                    ModManifest,
                    reset: () => Config = new ModConfig(),
                    save: () => {
                        Helper.WriteConfig(Config);
                        OnConfigSaved();
                    }
                );
                api.AddNumberOption(
                    ModManifest,
                    name: () => "UI Scale",
                    tooltip: () => "Try testing out with small changes. Value too high or too low can break the UI.",
                    getValue: () => Config.UIScale,
                    setValue: (float value) => Config.UIScale = value,
                    min: 0.1f,
                    max: 5.0f,
                    interval: 0.05f,
                    formatValue: (float value) => $"{value:0.#%}"
                );
            }
            Monitor.Log($"Created Menu in GMCM");
        }

        private void ChangeTitleUIScale()
        {
            Monitor.Log("Entered ChangeTitleUIScale");
            OriginalUIScale = Game1.options.desiredUIScale;
            Game1.options.desiredUIScale = Config.UIScale;
            Monitor.Log($"Changed UI scale: {OriginalUIScale} -> {Config.UIScale}");
        }

        private void RestoreTitleUIScale()
        {
            Monitor.Log("Entered RestoreTitleUIScale");
            Game1.options.desiredUIScale = OriginalUIScale;
            Monitor.Log($"Restored UI scale to : {Game1.options.desiredUIScale}");
        }
    }
}
calm nebula
#

Need to have a level

lucid iron
#

Check the actual smapi-latest file

#

!log

ocean sailBOT
#

Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.

Please share your SMAPI log file. To do so:

  1. Open this page: smapi.io/log.
  2. Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
  3. After uploading, it will show a green box with a URL to share. Post that URL here.

Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didn’t occur in your last session, please load the game to the point where the issue occurs, then upload the log.

lucid iron
#

Trace logs are always written to that, but does not show on console unless you have the dev smapi

blissful osprey
#

Ohhh so this is where I was supposed to look for logs mush_poggers thanks a lot!

#

One question though, I made a test mod that does nothing but print logs on certain events, and in that case I did see the logs from my Monitor.log lines.

Any idea what might have been the difference?

indigo yoke
#

I dunno if this feature fits Bibliocraft or not but I wanted to proto-type it. Mainly due to a friend suggesting it and I liking the idea. Can write letters to giftable NPCs (friendship gained is boosted for video demonstration).

finite ginkgo
blissful osprey
finite ginkgo
#

(actually 'debug' might also show up in the console I forget which one that is)

indigo yoke
#

main issue atm with mailing letters: scalability. I like the idea my friend suggested of having letters be crafted with an item they like for +65 friendship (so a bonus of +20 vs a normal liked gift). but that means I am going to have to handcraft every letter's recipe. Then everyone is going to want modded NPCs. Especially since I need to add it to the custom crafting station.

That said for release I think I'll just do vanilla NPCs.

lucid iron
#

Moonslime what if the crafted letter is just 1 item that is universal like, but then you can combine it with a loved gift for the villager

#

Internally it can just be flavored item and then u get friendship change for giving the item which became flavor plus the friendship from liked item which is the letter

elder kite
#

Trying to get the texture.json working for just one set of textures but im getting a weird error

[Alternative Textures] Unable to add alternative texture for item Chest from Stocked and Sorted: More variations specified (48) than given (4)

lucid iron
#

AT only allows you to extend down

#

It's weird but that's just how it is

elder kite
#

So I can only make the sheet four sprites wide? (and however tall)

#

or am I misunderstanding?

lucid iron
#

Extend down meaning 1 sprite wide N sprites tall

elder kite
#

oh dang one long line

#

alr

lucid iron
#

Most people use different pngs

#

texture_0.png etc

#

You can look at a existing pack to see how it goes

elder kite
#

now i understand why people arent using spritesheets...

golden basin
lucid iron
elder kite
#

Its an extension of Chest Deco

#

i couldnt find anything free so i wrote a quick script lol

ornate trellis
#

chests need several frames for the opening animation

elder kite
#

Not if you don't animate them :D

#

A little jiggle of the sprite when interacting with it could be cool

#

But that is WAY above my paygrade xd

lucid iron
#

Wouldn't the chest open anim in vanilla not work then

#

If ur AT pack doesn't include it either

ornate trellis
#

well, we will see if smapi will yell about the dimensions once you get the textures to work

#

but a good mod to look at is guxelbits chest deco

#

what i know is that you leave the animation frames jsut empty for them to not play since they overlay on the chest or w/e

elder kite
#

That's what the whole mod is based on, they gave me express permission to make this version :)

#

I just wanted to apporach the configuration a bit differently

#

But it seems like making seperate versions of the mod and shipping an AIO pack might be WAY easier

lucid iron
#

What's an AIO pack

ornate trellis
#

not sure if that counts as configuration since vanilla is set on certain dimension for things but anyway, we will see how it turns out

elder kite
#

make four versions of the mod that each use different textures, then drect people to install the one they like

#

all in one

ornate trellis
#

like when bed needs the one that draws on top of the character etc

lucid iron
#

Hm if you want it to be more configurable

#

Maybe you should make expanded storage pack instead

ornate trellis
#

anyway i jsut glanced in here when i was getting to bed aSDVpufferleaves

lucid iron
#

It's a mod that let you add actual new chests

elder kite
#

Well Im so close to getting this working 😅

#

Using new seperated textures, but in game they load a blob :(

#

fine in the paint bucket menu

#

but when chosen

lucid iron
#

This means it's drawing from out of bounds to the right

#

So the last col of px is just repeating

brittle ledge
elder kite
#

Got it working by copying Chest Deco's apporach

#

Not sure why it works, but adding 176px of blank width to the canvas fixes it

ornate trellis
#

Exactly what i said lol its cuz vanilla exspects there to be a certain width

dire kestrel
ornate trellis
#

Had my fair share of wrong texture sizes and weird glitches SDVpuffersquee

elder kite
#

Either way I got it working, and I think im just gonna make them as different styles all acceisble in one mod with no config

lucid iron
#

Do u wish for full story explain

elder kite
#

Sure :D

craggy nest
#

oh boy howdy

#

I'm trying to get back into the modding saddle and now I'm dealing with trying to sync data between game instances in multiplayer. It's not going fantastic.

elder kite
#

Only the fourth style is loading, im assuming they cant have the same names/keywords?

#

i imagine its an overwrite and it reads the last one, well last

lucid iron
# elder kite Sure :D

If you look at TileSheets/Craftables in the decompile you can see that there's several places with the chest

#

This is for the chest opening animation, and for wood chests in particular it's entirely drawn over

#

AT doesn't exactly follow vanilla but it emulates this logic and looks for frames past the right edge of your png resulting in the brown stripes

elder kite
#

ohhhhh so if i wanted to animate them i just use the space to the left for frames

#

interesting

craggy nest
#

The modding page on the wiki is a bit sparse on information regarding using modData, which is supposedly synced between players, and I'm not quite up to speed with netcode. Does anyone know of an open source SMAPI mod with unusual multiplayer shenanigans that I could study to get a better handle on things?

uncut viper
#

what are you putting the mod data on

craggy nest
#

I'm trying to stick it on Characters, but to be honest I don't even know if that's the right move

uncut viper
#

like an NPC?

#

The thing with characters is that they do get synced, but

#

Only when the farm hand sees the "real" version of them

craggy nest
#

Yes, exactly. I wanted to store data for some globally accessable tokens that would update occasionally

uncut viper
#

Which is when the character is in an active location or the same location as the farm hand

#

Otherwise, from the perspective of the farm hand client, they do see an NPC, but it's just like a fake shadow copy of the NPC that will be replaced with the real one when the host syncs them over

#

If you want to store globally accessible mod data you can use the Farm modData

#

the farm is an always active location and always synced

craggy nest
#

Even during events?

#

(specifically, festivals)

uncut viper
#

The actual GameLocation is not disappearing

lucid iron
#

What is the particular data you want to sync

uncut viper
#

There shouldn't be festivals on the farm anyway

craggy nest
#

So I'm trying to update an old mod I made which randomizes dancers during the flower dance, but I wanted to keep data of who was paired together for the previous two dances (after occurring) to create tokens referencing the previous partners

lucid iron
#

Ah i think you want modsavedata then

craggy nest
#

Was planning on threading that through Content Patcher so people can add dialogue and stuff based on the previous events

uncut viper
#

i mean you can also store that in modData if you don't care about needing to serialize and deserialize it

lucid iron
#

Or i suppose u can store it on Farmer modData

craggy nest
#

I can keep fooling around with stuff and kick this can further down the road until I actually understand how multiplayer works

lucid iron
#

Farmer is always available i think

uncut viper
#

That won't work if the farmer wasn't there for the previous dance

lucid iron
#

Wouldn't they just not have danced with anyone then

#

Now to answer actual question if you want direct control over multiplayer sync you can use smapi mod message

uncut viper
#

As I understood it this was for NPC to NPC pairings?

#

Someone will have danced with someone and if you want every farm hand to know then it can't be stored on the farm hand themselves

craggy nest
#

I was thinking that the host player would generate pairs (or alternatively, the player with the lowest player ID that is currently active), send it via message to the clients, and then each client generates the event animation and updates their internal mod data

uncut viper
#

You can do that but remember that you can't "wait" for a mod message

#

So you'd need to set that up before it was needed

lucid iron
#

This is indeed a broadcast from host model

#

But client can send messages too if they need

uncut viper
#

As long as they don't need a response right that tick

#

Also what would be the point in using the player with the lowest ID

lucid iron
#

For a festival doing it in the morning should be ok right

uncut viper
#

Unless the farm hand joins the day of the festival

#

So you'd need to watch for the connection too

lucid iron
#

Yeah then u need to handle peer connect and then invalidate again

#

I also have example of that AquaThumbsup

craggy nest
#

Pairs generate after user input once the festival has begun (during the walk around segment), but before the animation

lucid iron
#

That's very late then bolbthinking

craggy nest
#

I could always pre-generate pairs the morning of, and then eliminate or replace pairs based on farmer-npc selection

lucid iron
#

Do you have to do it that late

uncut viper
#

Are players even able to properly connect after the festival has started?

#

Do they just get teleported directly into it?

craggy nest
#

I actually don't know, I've never done multiplayer testing of the festival

lucid iron
#

If the host does stuff like move actors around

#

Do the farmhands get updates immediately

craggy nest
#

The original SDV code has a check for farmers disconnecting during the animation instruction generation

lucid iron
#

Or are Position not net sync in festival

uncut viper
#

They're still Characters

#

If everyone is on the same map though the mod data should sync even if you put them on the NPCs themselves though

lucid iron
#

Yeah but it is an Event so r they the actual NPC or like funny event actor clones

#

That's the part I'm unsure about

uncut viper
#

They are still the same Character class

#

So they'll have the same net fields

lucid iron
#

Maybe u r bump into the 3 tick to sync limit then

uncut viper
#

Event actors are just Characters with some extra flag sauce as I understand it

craggy nest
#

From what I remeber, yeah

uncut viper
#

To make sure you don't mess with the real one

#

But you should be able to just generate pairs from the host when the festival starts and place them on the NPCs

#

And if a client asks an NPC to dance, they send a mod message to the host so the host can change the pairings as needed

lucid iron
#

Do you wish to access these after the festival somehow?

craggy nest
#

Pardon the dumb question, if I define a new network class, is that auto-magically shared between all clients?

lucid iron
#

That is the main reason why you might want to store it not on the modData imo

craggy nest
#

I can always copy the data to something else, be it internally in modData or to an external .json if I have to

lucid iron
#

It is a lot more annoying to fetch the Character instance and then the data

#

Vs saving to modsavedata

uncut viper
#

You don't want to make a new class of anything that needs to be serialized

balmy python
#

Hello! Can I ask a few questions about modding as someone who has very very little experience in coding?

uncut viper
#

Serialized to the save file that is

uncut viper
lucid iron
#

help.Data.ReadSaveData<ModSaveData>(SAVEDATA)

uncut viper
#

Also chu farmhands can't access that can they?

#

They don't have the save file

lucid iron
#

Yeah you must broadcast that

#

But it's kind of a given that host has the truth here

uncut viper
#

So would the farmhands if it's known this all happens when everyone is in the same place, though

balmy python
#

Thank you lol! Do you need a lot of coding experience to create portrait mods? I really want to make my own portraits for a certain mod

uncut viper
#

You need next to no coding at all for a simple portrait mod

lucid iron
#

No i mean you persist it via this so that it's easy to access for cp tokens

uncut viper
#

The more difficult part by far is simply having the portraits made

lucid iron
#

Nothing really stop you from doing it via modData but then u have to fight shadow npc nonsense so this just see easier

uncut viper
#

Chu maybe you know the shadow realm better than me, is a shadow copy of an NPC a freshly created NPC always, or is it always generated from what the host knows about them?

lucid iron
#

(and to be clear this is for remembering who was with who after the festival)

lucid mulch
#

Shadow copies are the existing reference now out of sync

lucid iron
uncut viper
#

SinZ knows better than both of us I'm sure

craggy nest
uncut viper
#

So they would have the mod data, right?

#

They just wouldn't receive new mod data

lucid mulch
#

Old moddata yes

craggy nest
#

(network connections are hell and have always confused me. that, and printers.)

uncut viper
#

So this seems fine then

lucid mulch
#

And if they haven't been seen at all that session it would have data as if it was a new save

balmy python
#

Ah thank you guys!

uncut viper
#

They'd then know as soon as they went to the festival anyway

lucid mulch
#

Festivals might need to check whether they are the true NPCs or event actors

uncut viper
#

The token already wouldn't work the first day because the broadcast wouldn't have happened yet

lucid iron
craggy nest
lucid iron
#

I wonder if im even understanding the desired cp token usecase correctly

craggy nest
#

An example usecase is: Player 1 dances with Haley one year. Token generated is {Haley, Player 1, 1}. Next year, when Player 1 talks to Haley sometime before dance, she says dialogue. When Player 2 talks to her, she gets different dialogue.

#

It'd probably work well in combination with some of those "rival hearts" mods, or if you want your spouse to scold you after the dance if you don't dance with them lol

lucid iron
#

yeah that is roughly what i thought is meant

#

And why i thought having the data accessible in way that doesn't involve finding the npc instance would make implementing the token easier

#

I don't know if you want mod message for the actual active festival stuff

#

Or if you even need it (can host just find out about who farmhand picked?)

craggy nest
#

(brb, but thank you guys for all your help so far! SDVpufferheart )

uncut viper
#

dont know why i thought client needed to broadcast earlier

lucid iron
#

Wow a netfield just for dancing amazing

uncut viper
#

not even just a netfield, an entire NetDancePartner class

lucid iron
#

Yeah then just you making choice on how to persist the data

#

I should also bring up that maybe u should just make GSQ for checking, instead of whole cp token (but ofc need to store data regardless)

lucid mulch
#

I would just store it on the farmer their historical dance history rather than on the npc

uncut viper
#

a GSQ wouldnt work for like, any arbitrary NPC name though

lucid iron
#

Why wouldn't it

uncut viper
#

i mean like

#

if you wanted to do something different for The NPC They Danced With

#

rather than different if The NPC Was Haley

lucid iron
#

Ah yeah different usecases indeed

uncut viper
#

like, i cant do dialogue that says "How was your dance last year with {{Partner}}?" with a GSQ

lucid iron
#

Do both then Sleepden

uncut viper
#

but, i also think the proposed format of like {Haley, Player, 1, 1} is way too clunky to bne useful anyway

lucid iron
#

Scope creep alert

craggy nest
#

ohohoh, don't talk to me about scope creep (help me I'm screwed)

elder kite
#

its up :D

wheat sundial
#

can someone explain to me how to add a map in with content patcher? I really dont understand the guide

#

adding a stair in backwoods which leads to where all my mod houses will be

uncut viper
#

which guide are you following? also, do you plan on putting NPCs in that new area, or having existing NPCs path to it? because NPCs cannot walk through the backwoods

wheat sundial
#

like

#

past the backwoods bit

uncut viper
#

they cannot pathfind through the backwoods, so they wont be able to get to town unless they warp past it, just fyi

wheat sundial
#

I dont plan on the farmer seeing thm there anywat

#

Idm them warping

#

im using the stardew wiki

craggy nest
wheat sundial
#

i dont understand how to get this into my game

uncut viper
#

have you unpacked your files and taken a look at Data/Locations?

#

and the Content Patcher documentation for EditMap, if you havent taken a look there too, for adding in that staircase

oblique meadow
#

Also. Make sure if/when you publish you specifically indicate you are not compatible with SVE

#

Based on where those stairs are

wheat sundial
uncut viper
#

you dont really need to indicate that. but you'll get told about it regardless if you do or dont

wheat sundial
#

this is mainly practice

oblique meadow
uncut viper
wheat sundial
#

not gonna publish a mod making my partner into an NPC

uncut viper
#

that will show you how the vanilla game structures its Location data, to compare with the data on the wiki to see how it works

#

you will need to add your own data that matches that via Content Patcher

wheat sundial
#

no i still dont understand

uncut viper
#

!unpack have you followed these steps?

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

wheat sundial
#

dym this?

uncut viper
#

im talking about the Data folder. not the Maps folder

#

Data/Locations.json

wheat sundial
#

oh one sec

#

ah this?

uncut viper
#

yes. that file has all the Location data for every location in the game

#

Locations are a separate thing from Maps

wheat sundial
#

i see

uncut viper
#

a Location has a map that it uses, but without any Location data to use it, it just wont be used

wheat sundial
#

ohhhhhhhhh

#

so like

uncut viper
#

so if you were looking at the Location data page on the wiki, thats what all that stuff is

wheat sundial
#

can i analogy it

uncut viper
#

sure

wheat sundial
#

so map is clothes

#

and location data is hanger

#

without location data you cant hang the clothes

#

and the wiki says how to hang the clothes

uncut viper
#

if we're following this analogy the Location data is probably moreso a closet, and the Map is one shirt hanging in the closet

#

but you also have your fishing data, what music plays, its artifact spot data, etc

wheat sundial
#

ohhhh

uncut viper
#

if you open Locations.json in something like Notepad++ or Visual Studio Code you'll see every vanilla location's data

wheat sundial
#

will it be in a programming language?

uncut viper
#

so what you'll need to do is use Content Patcher to do an EditData action with Data/Locations as your target, and add your own location data

#

it'll just be in JSON

lucid iron
#

btw is your map gonna have npcs who live there

#

and is this the backwoods

uncut viper
#

i mentioned the backwoods thing

wheat sundial
wheat sundial
lucid iron
#

this is for adding the new place mainly but there's a section on adding a warp into the new place

uncut viper
#

oh good there is a tutorial

patent lanceBOT
wheat sundial
#

at the moment im focusing on the stair though

ocean sailBOT
#

@wheat sundial You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

wheat sundial
#

LETS GOOOOOOOOO

lucid iron
#

yea stairs = adding a warp into the new place

lucid iron
#

is same idea just bigger area

nova shoal
#

Hi everyone, Im trying to get into modding and making my own Fashion Sense mods, but I have literally no experience with any kind of modding or programming. How would I even get started?

wheat sundial
#

whats fashion sense

lucid iron
#

you just need to draw AquaThumbsup

craggy nest
#

Fashion Sense is a framework that allows you to easily add clothing options

wheat sundial
#

oh ok

uncut viper
#

the Fashion Sense github/wiki/documentation/whatever would be the best place to look for a Fashion Sense focused guide, but having an understanding of JSON will be required

lucid iron
#

as for fashion sense in particular, take a look at the documentation it has info on how to write the json

craggy nest
wheat sundial
#

I'm mainly learning to do mods and coding for experience

#

I know this sounds generic as hell but I wanna make a game

#

just a passion project

#

thing

nova shoal
#

I have no idea what JSON is. Do I need any programs for modding Stardew or accessing the game files or anything else I would need?

midnight horizon
#

Anyone here familiar with the dialogue commands? I have a question and not sure which area to ask it in. I'm not using mods but I'd have to imagine you'd all have much more knowledge than me 🙂

wheat sundial
#

each means a different thing

#

png is an extension (which is images)

uncut viper
lucid iron
wheat sundial
#

out here listening to sans last breath (peak)

nova shoal
#

Ah okay lol thank you guys (this is going to be like teaching a toddler to do advanced algebra im sorry in advance 😭)

craggy nest
midnight horizon
lucid iron
#

im not sure i understand what you want

calm nebula
#

The caught Fish key?

uncut viper
calm nebula
#

An ability to increment fish

wheat sundial
#

I need C# for gamemaking right?

lucid iron
#

do you want i dunno willy to say wow you caught a big fish

midnight horizon
#

Okay, so you know how if you name animals a string of item IDs you can get x number of items, etc?

calm nebula
#

Atra to finally eat dinner?

uncut viper
lucid iron
#

oh you want to change player name to cheat ok

wheat sundial
lucid iron
#

i don't think there's anything for that NotteThink

wheat sundial
#

I know python is one

midnight horizon
#

I want to see if any of those newer commands like $action <action> or something like that could prompt the pop-up for having caught a fish so that the fish registers in the collections tab

uncut viper
#

i think Malrats is talking about maybe the conversation topic that is autogenerated for each fish caught? so sometimes someone comments on something you caught

#

oh nvm me then

wheat sundial
#

I think they mean like "ooh wow new fish cool"

uncut viper
#

you cant do that with dialogue commands

lucid iron
#

is just matter of there not being a vanilla case where willy said you caught a lingcod and voila you actually did yknow

uncut viper
lucid iron
#

whereas vanilla had case where character says they give you a thing

midnight horizon
calm nebula
#

There is not

lucid iron
#

it is a fixed list of actions

calm nebula
#

You could write a mod to do it

craggy nest
# wheat sundial oh ok but what would be recommended?

Python is good for beginners. Java is also commonly used, but it sure is one of the programming languages of all time. C# is a good place to start, in that it eliminates some of the more esoteric and confusing parts of the C language! Starting to make a game engine from scratch is tough, though. You're best off using an existing engine, something like Game Maker or RPG maker, as the base for a new game. It eliminates a lot of the hard work.

midnight horizon
#

I'm just playing the game without mods, didn't wanna do that but am having some issues with fish registering and wanted to see if that could work, just in case

wheat sundial
#

so I should go for Java C# and Python

lucid iron
#

yh i think for game making it's more useful to think about what game engine you might use, like godot or unreal or whatever

uncut viper
#

you should go with whatever language would work for you to make the game you want in the game engine that comes to you easiest

lucid iron
wheat sundial
#

oh right mb

#

back on topic

uncut viper
#

for modding Stardew though, you'd be using C#, if that sways anything

wheat sundial
#

what do i do with location data?

uncut viper
#

i would follow the guide chu linked you to earlier

lucid iron
#

sdv is C# because mr ape picked XNA as the game engine (and it later changed to monogame)

#

i dunno if i recommend monogame to a newbie

midnight horizon
#

I see dialogue commands for adding mail or learning recipes and that kinda stuff so kinda hoped there could be fishing

uncut viper
#

the C# is transferable though, since its used in Unity and can be used in Godot

calm nebula
#

Transferrable

uncut viper
#

so modding stardew can be good practice

#

a transferable skillset yes

wheat sundial
#

I'm understanding 75% of this

calm nebula
#

Every time I've seen someone use unity and then try to write non unity c# it's always so weird

#

So weird

craggy nest
#

Knowing any programming language is good, though! The logic and structure will have a degree of similarity, no matter what you choose

wheat sundial
urban patrol
uncut viper
wheat sundial
uncut viper
#

"i would follow the guide chu linked you to earlier"

uncut viper
#

the guide chu linked you to is a guide for adding a new location, which uses location data

uncut viper
#

chu wasnt talking to you with that link

lucid iron
#

right before you leveled

wheat sundial
#

oh

lucid iron
#

you may have missed as a result

wheat sundial
#

mb

#

got distracted with embed perms

#

ok I'll take a look

#

thanks guys

midnight horizon
lucid iron
#

malrats i don't think the thing you want can be done in vanilla

uncut viper
#

it cannot

lucid iron
#

it is true that there are actions for adding recipes, that's because the game has uses for em

#

is not arbitrary code

midnight horizon
#

Yeah that's understandable, that's why I figured I'd ask the experts 🙂 I've only used the commands so far for adding items like crops

urban patrol
#

yeah, you could add the fish as an item, but to register it as having been caught by you would be different

blissful osprey
#

I'm trying to modify UI scale of title menu + save/load screen only.

After some digging, I found that desiredUIScale in Game1.options is relevant only while gameMode == 3 (i.e. playing). In other words, changing it does nothing while in title menu.

So I tried modifying singlePlayerDesiredUIScale and baseUIScale instead, but turns out the game constantly reverts them back to the original value (1), at least within the title menu.

My next train of thought is to find how the game is fixing those scale values, and maybe also how it is drawing the UI for title menu.

Any hint on finding where those game logic might be at? 👀

midnight horizon
#

But if there isn't then hey, what can I do

uncut viper
calm nebula
#

Oh god

#

I recall that being Fun, Shrimp

gaunt orbit
#

if I make a farm animal building with no animal door, that'll just mean the door is always shut, right? it won't cause any crashes?

wheat sundial
#

looks at time
01:18
looks at schedule
Need to be awake at 8am
shit

#

well gn guys

#

thanks for the help

blissful osprey
#

ILSpy..something new I'll be learning today I guess

uncut viper
#

what were you using to look at the decompile before?

craggy nest
#

IL Spy is excellent, best friend of anyone messing around with SMAPI C# mods

calm nebula
blissful osprey
#

provided function for VS

lucid iron
blissful osprey
#

just right clicking the parameter u know

uncut viper
#

thats terrifying

uncut viper
#

ILSpy will make things 1000x easier for you

blissful osprey
#

xD im not so keen with vs and c#

uncut viper
#

theres no need to spam random embedded images

blissful osprey
#

been working mostly on vs code

calm nebula
#

Fwiw ShrimpManiac, the way UI and game zoom work is Fun

lucid iron
#

!decompile

ocean sailBOT
lucid iron
#

i use ilspycmd personally

blissful osprey
#

I sense a great disturbance with the word "Fun"

uncut viper
#

dnSpy is also pretty dang good, though perhaps overkill for stardew modding

gaunt orbit
lucid iron
#

oh but ur in C# right

calm nebula
#

Also you sure you can avoid having an animal door

#

Doesn't it default to 0,0?

#

Inaccessible maybe bit there

lucid iron
#

i dunno why i thought you were gonna put a 0,0 sized animal door

craggy nest
#

(also, off topic, it's funny being back here and recognizing some of the usernames! I'm glad to see people stick around)

gaunt orbit
#

I figured the easy way is to just use the data and omit the animal door value

brittle pasture
gaunt orbit
#

oh excellent!

lucid iron
#

yay

#

i think it will be fine then

#

when i was doing the migrate building thing

gaunt orbit
#

then a 0x0 door should be fine, since its closed by default and the player won't be able to open it

lucid iron
#

having no door was a ok

#

having no interior map explodes

#

u will ofc have interior map yes?

shut edge
#

I was also considering a non door animal building, good to know

gaunt orbit
#

yeah that's part of the point

#

I wanted to make an end-game hybrid coop/barn that has an interior blue grass area, then patch animal behaviors so that they can eat grass indoors if it's marked with a map property

lucid iron
#

the duck paddy dimension

shut edge
#

I want to try making an underground pond for aquatic animals eventually but effort

gaunt orbit
#

side not but why tf are some of the local captured in FarmAnimal.behaviors? I don't see a almabda anywhere in there so it seems entirely unnecessary

#

oh wait I think it's used for sprite behaviors

drowsy pewter
gaunt orbit
#

lol

lucid iron
#

say is there any GSQ to check what floor of mines you be at

uncut viper
#

in 1.6.16 there is

#

but im pretty sure you can also just check the location name manually

#

i think

#

its just like Underground27 innit

brave fable
#

UndergroundMine*

uncut viper
#

i was close enough

lucid iron
#

oh nice i dont need to add it then

brave fable
#

assuming you're using CP, i'm not sure if any operations can take the number at the end?

lucid iron
#

well it is just a gsq usecase

uncut viper
#

wdym any operations

brave fable
#

query, for example

lucid iron
#

so until 1.6.16 u would do PLAYER_LOCATION_NAME Current UndergroundMine10, PLAYER_LOCATION_NAME Current UndergroundMine11,PLAYER_LOCATION_NAME Current UndergroundMine12 and such to check floor is 10-12

#

it does suck a little blobcatgooglyblep

uncut viper
#

well you'd do ANY

brave fable
#

a little. do also doublecheck that there's not an underscore between the name and number if you're going with this, not at my pc currently

lucid iron
#

ah yea true

#

well its ok im just evaluating if i can slacc on adding a gsq and LOCATION_MINE_LEVEL is basically exactly what i was going to do

uncut viper
#

what did you needi t for anyway

lucid iron
#

monster variety

#

so ppl could be like, this variety appears on floor 50 to 70 of skull cave

#

which would be UndergroundMine170 to UndergroundMine190 right

uncut viper
#

probably

#

unless its a forced layout

#

then its UndergroundMine<floor>:<layout>

lucid iron
#

oh hrm

#

well i dont have anyone explicitly wanting this rn

#

if they do and 1.6.16 not out then ill add it

uncut viper
#

as far as i can tell, a forced layout only happens thru the debug command

near island
#

Working on a fly-by hello mod. Fires when the player clicks an NPC, they say a short "greeting" type line, and the player gets half the friendship points they'd normally get from talking to an NPC. You can still talk to the NPC afterwards like normal, but this would give you either bonus points, or keep some NPCs topped up without having to stop for full dialogue. Example pics (it was raining, is the context). Just gotta work on the dialogue!

lucid iron
#

How does it work for controller

near island
#

Going to be testing that tomorrow, but it should work.

dusky sail
#

my mod didnt work perfectly the first time i loaded it up to test SDVpuffersob now i have to figure out what went wrong

#

all i want is for everything to always work the first time is that too much to ask (yes)

indigo yoke
#

all the letters made @_@

soft lance
shut edge
#

i was considering if we can customize the icons mail gets the other day

#

tbh would be a nice feature just for debug cuz i was having a hard time finding my own mails in the pile

oblique meadow
#

That’s my philosophy

shut edge
#

if it works perfectly the first time you should be suspicious

oblique meadow
#

Agreed

dusky sail
#

I already figured out like half of the not-working bits. Somehow missed an entire very important field in my item extensions part

#

"Why arent my rocks spawning in the mines" the entire MineSpawns field i didnt type in

blissful osprey
#

I've just started trying out ILSpy and I'm having some problem slimewut

In the Visual Studio decompile window, I see 3 instances of singlePlayerDesiredUIScale from ctrl+f search.

In ILSpy, however, I only see 1. When I manually go into Options class in ILspy, I do see the missing 2. They're just not present in the search result.

What could I be doing wrong? 👀

tender bloom
#

the search in ilspy is a little wonky, and if you look at the place where it says "types and..." you can see it's only searching certain flavors of stuff in the code

#

if you want to search the whole text iirc that's not at all the default

#

ilspy sees 1 declaration, vs sees 3 copies of the string

#

in this case i feel like my subjective opinion is that 1 is a true-er number than 3

#

but it depends on what you need things for

#

in other news: mmm, delicious

#

(i figured out how to move entries shortly after this)

calm nebula
#

Right click, select "analyze"

blissful osprey
uncut viper
#

that is the analyze i mentioned earlier SDVpuffersquee
you can ofc use both ILSpy and the saved decompile (you can save the entire decompile as one .sln with ilspy) in conjunction if you need to search with strings

tender bloom
#

there's still raw olive wine allowed but i feel like if you chuck a raw olive in a keg you get what you wanted when you get raw olive wine

#

it sounds awful tbh

uncut viper
#

if you need to search actual strings like the type string, you can search by Constant in ILSpy instead of Types and Members

#

but not like, a string like "return thinghere"

tender bloom
#

i never remember what the right settings on the search are but i just fiddle with them every time

#

tbh i mostly use the sln and then use some kind of "find in files" search

#

tho ilspy crashed the last time i tried to save the whole decompile, i get mine from pathos (requires mod author role + lvl 50 here iirc)

calm nebula
#

Classical, what if realistic asparagus

blissful osprey
#

I thought this is gonna be an easy mod to make....and I should have listened to that guy in the comment sections for some mod that mutes title menu bgm.

tender bloom
#

No realistic asparagus

#

only unrealistic, on demand asparagus

blissful osprey
#

there was a good reason for surprisingly small number of mods that deal with title menu

tender bloom
#

What if instead, unrealistic friendship: NPCs who just stand there all day waiting to be gifted

#

they can have dialogue, but no events

#

maybe they don't even need to walk home at night

#

then i wouldn't have to make walk sprites

urban patrol
#

i feel like you've just described depression

#

however i sympathize, walk sprites are the worstttt

calm nebula
#

I don't know, Classical, I'm just very intent on having asparagus for dinner

lucid mulch
#

I also don't keep a sln decompile locally (though I currently do purely as I was attempting to automate the process), as I find ILSpy's search + analysis functionality to be more powerful than visual studio

#

to the point I have used ILSpy on my own work codebase in the past as it could understand the compiled binary better than I could with the source due to some unholy use of partial

calm nebula
#

I've also decompiled my own code to check what the compiler was doing tbh

tender bloom
blissful osprey
#

...shit SDVpufferdizzy

inland rain
#

where do these colors appear in game?

dusky sail
#

Text right underneath the item name that says like "Fruit" or "Vegetable" or whatever

inland rain
#

oh! ty

slow basin
#

🧘‍♀️

#

coding again

drowsy pewter
#

had no idea those colors were on the wiki, i was going ingame to colorpick them lol

woeful lintel
#

Does anyone know where is the function that draws the red/green tiles indicating if something can be placed? Specifically for Furniture? I might overwrite it to show which specific tiles are invalid for custom Furniture.

woeful lintel
#

found: Object.drawPlacementBounds

analog ivy
#

is there someone who can help me figure out to make nested pages through Generic Mod Config Menu's API? i feel like my head is going to explode trying to understand C#. i already have a config / mod set up normally with Content Patcher; just trying to clean it up by adding sub-pages (and apparently it's only possible with C#).

uncut viper
#

doing it in C# means discarding the content patcher config and doing it all in C#

#

in your own C# component, which would be a seaprate mod as far as SMAPI is concerned

#

and then you would need to expose those config options as Content Patcher tokens for your CP component to access

analog ivy
#

yikes!

uncut viper
#

are separate pages that important to you

analog ivy
#

tbh no i'm just going to leave it as is i've already had to rewrite so much code 😭

uncut viper
#

most mod users probably wont care at all as they are likely only going to configure the mod like... once, if at all

analog ivy
#

you're right haha thanks for the quick response!

slow basin
#

building my card shop interior yippeee!

#

its v fun to make maps

small nacelle
woeful lintel
drowsy pewter
#

Thats kinda adorable

small nacelle
#

Kk, ty ty

small nacelle
drowsy pewter
#

!log

ocean sailBOT
#

Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.

Please share your SMAPI log file. To do so:

  1. Open this page: smapi.io/log.
  2. Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
  3. After uploading, it will show a green box with a URL to share. Post that URL here.

Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didn’t occur in your last session, please load the game to the point where the issue occurs, then upload the log.

drowsy pewter
#

Send a link to your log here *with the error after you try to enter the cart, and someone should help eventually

slow basin
#

man

#

wait maybe ill just text it

#

*test

#

YES

#

i found the info i needed lego

#

ok i cant have the museum split up between 2 places got it boo

vernal crest
#

Not two separate maps, no.

dusky sail
#

You can make it a single map that looks like 2 maybe. And thats a big maybe bc i dont know much about the museum framework youre using

drowsy pewter
#

Omg yes two rooms on one big blank map

#

and warp between

vernal crest
#

You can, but if you want to give players the opportunity to rearrange the museum they might have a long way to scroll

drowsy pewter
#

Oh right lol

#

Letter chutes /j

vernal crest
#

But if it's not rearrangeable or it's not likely that people are going to want to do it much it's still feasible. I found that using the mouse against the edge of the screen and the movement keys made the screen move faster so it wasn't terrible going across a 100 tile map.

#

And you can have multiple donation menu areas so they don't have to scroll forever just to donate in the first place.

drowsy pewter
#

sweet

#

making a custom museum sounds very fun

vernal crest
#

It is pretty awesome and so much more flexible than the vanilla museum.

ocean sailBOT
#

Log Info: SMAPI v4.1.10.3 - 1735840167 with SDV 1.6.15 build 24354 on Android Unix 29.0.0.0, with 12 C# mods and 1 content packs.

slow basin
#

i decided on 3 museums in one building in 2 seperate rooms split up into 4

#

because theres gonna be 3 different collections

#

(eventually not right away)

#

im making room for my future mods

vernal crest
slow basin
#

wait can i make generic npc dialogue using tiledata for like a repeatable basic line if you try to interact with my tile npcs?

#

gotta check that

vernal crest
slow basin
#

oo ok thk you aba

ocean sailBOT
#

@slow basin You leveled up to Farmer. You're now a prettier shade of blue. Thanks for sticking around!

small nacelle
#

finally @vernal crest thanks for the help

slow basin
#

where do i find a list of the keys so i know what one to give it or is this like a custom thing i need to name it? :0

vernal crest
#

You would choose your own for that. In the map file it would be whatever your mod id is (written out in full because you can't put Content Patcher tokens in a map file) and then an underscore and a descriptive name for the key like gummigecko.cards_TaliaSpeak or something. And then in your EditData patch to add the actual dialogue you'd Target "Strings/StringsFromMaps" and the entry would be "{{ModId}}_TaliaSpeak": "{{i18n: dialogue.talia.hello}}"

#

I'm assuming this isn't dialogue for your museum owner though, because that is set differently if so

slow basin
#

no i have 2 little shop keeper guys who dont talk and are just there as flavor but i dont want them to just be like brooms in a corner

#

i think im gonna set up a mail that arrives to the mailbox that explains the shops need for the collecting help tbh

inland rain
#

Mod that shows inventory item categories, who loves the item, if it can be added to a bundle, and if it can be planted now

drowsy pewter
#

wow

tiny zealot
#

finally figured out a good terrain set for painting forest canopy

shut edge
#

Nice

hard fern
tiny zealot
#

those are the terrains in the set

#

you set up a terrain set and then use it to paint on the map. instead of just using a specific tile from the tileset it automatically picks from the set to make the "colors" line up

#

so it automates a lot of the tedium of changing tiles and painting in the corners and finding the transition tiles, etc.

shut edge
#

Damn I need to learn that

tiny zealot
#

i had seen people (like DH) talking about it before but never tried to set it up until yesterday/today

#

took me a bit of trial and error

vernal crest
#

ichor is your thing similar to this?

tiny zealot
#

similar results!

#

terrain sets and the terrain brush are built into tiled. this looks like maybe a plugin? but i expect that FoliageRules.tmx contains the terrain sets and the keypress makes it paint on the places you put the specific tile

shut edge
#

Neat info, thanks

tiny zealot
#

here's DH painting with his. this is how my setup works (paint with canopy)

vernal crest
#

Looks like they are different features that are built into tiled

tiny zealot
#

neat!

brittle ledge
hard fern
humble timber
#

been workign on organizing my wip pile and. man

#

SDVpufferclueless i wonder which one's the big project here

uncut viper
hexed siren
#

I have a question on my mod and the person's log file has a galaxy.api error. Anyone know what this is? Just generally.

urban patrol
#

probably that they’re running the game through GOG? you’d have to send the log for more information

hexed siren
#

Ah ok, nothing related to my mod then.

obtuse wigeon
humble timber
#

i love it for notetaking and stuff

hexed siren
ocean sailBOT
#

Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Unix 6.11.11.19, with 25 C# mods and 27 content packs.

obtuse wigeon
#

It's great, by far one of my fave programs

obtuse wigeon
#

if your doesn't touch anything multiplayer related, it isn't your fault

hexed siren
#

Alrighty! Thanks!! I don't touch anything with multiplayer, and I don't test with it either.

rocky chasm
#

Hi, any Tiled experts around? I'm practicing with a PIF map (vanilla greenhouse as base, exported the other tilesets from other vanilla maps) and everything works apart from one specific tile on summer_outdoorsTileSheet on my winter map. Everything looks normal when I open the map in Tiled

tiny zealot
hexed siren
#

Oh yes, I'll advice them on that one.

tiny zealot
#

oh, i missed that it wasn't your log. sorry, my mistake

hexed siren
#

No problem! It's helpful to know what to tell people, so many odd issues come my way, haha!

oblique meadow
#

Ok can someone help please? Im stumped. Im trying to add a flag when the player has donated 15 minerals ONLY to the museum. Following the wiki I got here. The flag is not triggering:

        "Action": "EditData",
        "Target": "Data/TriggerActions",
         "Entries": {
                    "{{ModId}}_RedshrineFlag": {
                    "Id": "{{ModId}}_RedshrineFlag",
                    "Trigger": "DayEnding",
                    "Condition": "MUSEUM_DONATIONS 15 MINERALS",
                    "Action": "AddMail Current {{ModId}}_RedshrineFlag"
                },
                
                },
        },```
twilit quest
urban patrol
rocky chasm
urban patrol
#

sometimes it’ll trigger silently and you won’t know and then it won’t ever trigger again

oblique meadow
urban patrol
#

hmm have you tried debugging each constituent part? like checking that the GSQ returns true, checking that that action does what you want

twilit quest
urban patrol
#

i don’t think AddMail requires a time of day, does it? let me check what the default is for sending mail

twilit quest
urban patrol
#

okay yeah it doesn’t require type and defaults to tomorrow

oblique meadow
#

and its weird because my other 2 shrines are flagging:

rocky chasm
twilit quest
urban patrol
#

yeah i would make sure that the condition is definitely being met first

#

let me find the syntax of that debug command

twilit quest
rocky chasm
hexed ember
twilit quest
oblique meadow
#

Thank you @urban patrol ..... apparently the word Minerals is case sensitive..........

urban patrol
#

ah glad you figured it out!

obtuse wigeon
#

Case Sensitivity is a nightmare!

urban patrol
#

i never would have guessed that lol

royal stump
#

was just about to say, yeah, any types in museum_donations are a case-sensitive type == argument loop

oblique meadow
#

It might be worth adding that little tidbit to the wiki

rocky chasm
royal stump
#

yeah, not mentioned there it looks like
I can barely read today though, I'll leave it to someone else SDVpufferdizzy

tiny zealot
#

i find case sensitivity so frustrating in stardew because in so many places it is not an issue, until you find a thing where it matters and oops!

oblique meadow
#

Im glad It was a weird nuance and I didnt get the code wrong.

tiny zealot
#

i would not be as annoyed by it if it were more consistent, even if everything were case-sensitive

royal stump
#

if only C# had good shorthand for ordinal-ignore-case SDVpufferpensive

oblique meadow
urban patrol
#

i added a note to the wiki

shut edge
#

_cryomancer.fishfactory_fishdoor1 has the CanBuildHere map property set, but its AlwaysActive option is disabled, so building is disabled here.

#

never heard of that map property, hmm

#

and my walls are still being a pain, that seems like a problem for later tho

#

think it's break time tbh

gaunt orbit
#

Assuming you're talking about AlwaysActive

shut edge
#

yeah. it's for a PIF room

#

"CreateOnLoad": {
"AlwaysActive": true
},

#

maybe it needs one of these?

#

well i'm gonna go out awhile for now, thanks

digital oracle
#

so, I wanna make a mod with custom character outfits, but I'm not sure I'm good enough to draw them yet, how can I get better at drawing them? :3

lime maple
#

draw, get feedback, improve

ornate trellis
#

post in #making-mods-art and be like "hey guys i wanna improve my art can you help me?" or something similar, all cool people in there

slow basin
elder kite
#

If anyone has some tips of locating specific map sprites I'm all ears. In vanilla, the mountain area has a darker ground pallete than the rest of the valley. I'm basically trying to find which ground textures are called for the mountain area. Thanks in advance, hoping someone can point me in the right direction.

ornate trellis
#

open mountain map, go to layer the asset is on, right click and itll give you the coords and sheet selected from all the tilesheets in the map(y,know, on the right side where they are)

ornate locust
#

It's these on Spring_Outdoors.

#

you can see the darker ground bits compared to the top left ones

#

(I was already in Tiled anyway so I just did the thing :V)

#

deep in the tile mines

elder kite
#

I'm slowly working this all out in my head, as I didn't even know the Tiled map editor exsisted

#

Alright I've got the map editor installed, unpacking all the files now, thanks for pointing me in the right direction :)

slow basin
#

tiled is so fun!

lime maple
#

is there a way to make animated sprites with only CP?

urban patrol
#

yes, but are you talking about NPCs or map tiles or what

slow basin
lime maple
#

item sprites

brittle pasture
lime maple
#

spacechase0.SpaceCore/TextureOverrides

#

I'm more of an example guy, I have so many questions T_T

elder kite
#

Why does this sprite have transparency from the bottom up?

#

not entirely sure how to replicate it xd

#

or if i even need to

ornate trellis
#

probs foggy or for water

#

dont remember of the top of my head what its used for tho. if you wanna imitate it then its done with a soft brush eraser on low opacity

lime maple
#

I'll check animated more new fish

#

it uses animated textures

elder kite
lucid iron
#

It depends on the software

#

Gimp and the like have opacity mask features

lime maple
#
    {
      "LogName": "Stardrop Animated",
      "Action": "EditData",
      "Target": "spacechase0.SpaceCore/TextureOverrides",
      "When": { "Enable Stardrop Crop": true },
      "Entries": {
        "Expanded.VanillaCrops/StardropAnimated": {
          "TargetTexture": "Expanded.VanillaCrops/Stardrop_Seeds",
          "TargetRect": {
            "X": 0,
            "Y": 0,
            "Width": 16,
            "Height": 16
          },
          "SourceTexture": "{{InternalAssetKey: assets/Stardrop_Seeds_Animated.png}}:0..5@20"
        }
      }
    }

well, I'm trying this but it is obviously not working T_T

urban patrol
#

are you sure that your target texture is correct?

lime maple
#

well, it is because it renders nothing lol

urban patrol
#

okay so then it's an issue with the source texture?

lime maple
#

the source texture must be loaded, or not?

#

it is clearly there

urban patrol
#

i would assume it needs to be loaded yeah, but i'm also not familiar with how spacecore does its thing listen to iro instead

gentle rose
#

well you're using an internal asset key so you don't need to load it

#

(which isn't a spacecore thing btw)

#

your "when" block seems suspect though

#

can we see your entire json please?

#

!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.

#

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.

lime maple
#

I changed x and y just to see if they are the culprit

gentle rose
#

don't use the command yourself, read what the governor message says and follow the instructions

#

and please don't randomly change values between fixes, it makes it harder to figure out what the issue is

shut edge
#

my PIF room is continuing to be weird about things

lime maple
#

sorry I'll paste it

gentle rose
#

but yeah, your "when" block is wrong

shut edge
#

anything in this that would make it unable to have wall decor or farm buildings?

#

here's tiled

gentle rose
#

I'm not sure config keys can have spaces? I could 100% be wrong though

#

and your config is false by default, are you setting it to true when testing?

lime maple
#

yes

#

and config can have spaces

#

"When": {"Enable Extended Crops Pack": true},

Cornocupia uses them

gentle rose
#

ah, I see

lime maple
#

I think the issue is path

gentle rose
#

where is Expanded.VanillaCrops/Stardrop_Seeds from?

#

it's not something SVE uses and stardrop seeds aren't a vanilla crop anyway

lime maple
#

it is from my mod

gentle rose
#

where do you actually turn that into a crop?

#

it isn't in the json you sent

lime maple
#

the crop is fine the problem is just the animated texture for the seeds

gentle rose
#

well it's hard to debug things for you without context

lime maple
#

oh

#

I see the godamn issue lol

#

I mixed the seeds and the crops texture

#

it works

#

beautifully as intended

#

thank you @gentle rose !

gentle rose
#

btw you have a few issues with your crop (for starters, it takes nowhere close to a year like it says, it takes two seasons and one day). There's also nothing right now to limit it to one per save (I'm not sure if you just didn't get to that yet though) and the context tags seem to be unrelated to the actual crop?

shut edge
#

neat

lime maple
#

it is a wip

#

so yeah lots of stuff wrong lol

gentle rose
#

right, as long as you're aware haha

shut edge
#

whyyyy

lime maple
#

yeah, it is yielding a cave carrot and other stuff

#

because it is a wall furniture, it must be placed on a wall

shut edge
#

yeah but why is it not considering these walls as walls

#

they have wall IDs

lime maple
#

probably got the wrong Category for your item, my bet

shut edge
#

nah that's a vanilla item

urban patrol
#

is wall ID a tile property?

shut edge
#

i think it is

urban patrol
#

i'm sure this isn't actually the issue, but are you sure that it says WallId and not accidentally mistaking Ls for capital i ?

shut edge
#

i did check that

#

cuz yeah

urban patrol
#

ok good hmm

shut edge
#

must be missing something somewhere, or one of these other map properties is disabling it

#

i made another room recently that had a similar issue

#

did the walls the same on all three tiers but only tier 3 would decorate and i have no clue

#

hmm maybe building layer messes it up?

#

that's about the only thing still making sense, i'll try that

latent mauve
#

Your WallID tiledata isn't overlapping a floorID tile, right?

shut edge
#

nah

latent mauve
#

And you've set the IDs in the overall map properties?

shut edge
#

indeed

#

i think it legit might be layer dependant

#

like the wall tile property is on the back objects

latent mauve
#

doublecheck that you don't accidentally have something on an AlwaysFront layer there?

shut edge
#

but i also had the same wall on building layer

#

i'm changing it over now so we'll see in a few

latent mauve
#

also is your original wallpaper texture from a sheet named something with walls_and_floors somewhere in the name?

#

Any tile not from there would also be broken if it wasn't, but just in case

shut edge
#

the wall tile is from the bathhouse sheet

latent mauve
#

Okay, so

shut edge
#

it specifically needs to be from that sheet?

latent mauve
#

for my bathroom renovation mod, I had to load the tiles separately into a z_walls_and_floors tilesheet in Tiled so it would recognize them as decoratable tiles.

shut edge
#

weird

latent mauve
#

It looks for "walls_and_floors" in the name somewhere to make sure that it is in fact a wallpaper that can be replaced.

shut edge
#

that's for wallpapers tho right?

#

i'm trying to put paintings up

#

does it need to be both?

latent mauve
#

ah, okay, you're doing wall furniture?

#

I missed that part

shut edge
#

i'm trying to make a wall accept wall furniture, yeah

latent mauve
#

gotcha

#

and it's not something silly like the furniture being too many tiles high?

shut edge