#making-mods-general

1 messages · Page 313 of 1

sour sleet
#

No, I totally understand it now. Learnt a lot from adding this furniture in

pine elbow
#

Hello, I'm having problems with the first dialogue of an NPC that I created. I put the Introduction key in Dialogues, but the NPC ignores this speech and goes straight to the speech related to the day of the week.

tender bloom
#

The furniture itself has a different "draw height" when it's an item placed down as compared to when it's part of the scenery, I think

latent mauve
pine elbow
#

new save

#

spring day 1

latent mauve
#

Okay, is there anything showing up in your SMAPI console log related to your dialogue entries?

pine elbow
#

no

latent mauve
#

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

pine elbow
#
            "Action": "EditData",
            "LogName": "Add Kya",
            "Target": "Characters/Dialogue/Kya",
            "Entries": {
                "Introduction": "Olá, eu sou a Kya",
                "FlowerDance_Accept": "Vamos então",
                "AcceptBirthdayGift_Positive": "Obrigada",
                "AcceptBirthdayGift_Negative": "Era melhor me dar dinheiro",
                "GreenRain": "Aff, essa chuva atrapalha sair de casa, e faz o mato crescer",
                "GreenRainFinished": "Enfim acabou",
                "GreenRain_2": "De novo esse matagal",
                "Mon": "Ah credo, trabalho começa hoje",
                "Tue": "Tá puxado, mas a partir de amanha fica mais tranquilo",
                "Wed": "Achei que ia ser bom hoje, mas pelo jeito não",
                "Thu": "Dia maravilhoso pra trabalhar",
                "Fri": "Fim de semana, vamos trabalhar",
                "Sat": "Eba so mais um pouco.",
                "Sun": "Ai ai que tédio."
            }
        }```
#

When talking to the npc for the first time, she goes straight to speaking in "Mon": "Ah credo, trabalho começa hoje",

#

It really is something very strange, it doesn't make sense for him to ignore the Introduction, since it's on the first line.

latent mauve
#

And that's the only place you've patched the dialogue for Kya, yes?

#

If you do a Patch Export for "Characters/Dialogue/Kya" and it's still in there, and the patch summary for the asset shows it applied, then I am also stumped.

hard fern
#

It's a console command in smapi

#

You type patch export <The file path for the file you want to export>

latent mauve
#

thanks Shrimply, I was trying to pull up the full command and got distracted

valid folio
#

@ivory plume Hello, Have you ever had a bug reported in Content Patcher related to file paths? I'm getting an error saying it can't find the files in the specified location, but the files are in that exact location. I had been adding quite a bit of content to my mod, and everything was working fine until I added one more object and recipe—then the issues started. Now it won't detect my objects.json or Shops.json.
I tried recreating the folders and files, but it didn’t help. I also simplified the paths by removing subfolders and shortening the directory structure, but that didn’t work either. I really don’t know what else to try.

hard fern
#

Lol, im always lurking here

latent mauve
#

It's appreciated, had to take a work call so I unexpectedly stepped away LOL

latent mauve
tender bloom
#

Do you have file extensions displayed in your file browser?

#

Some of the common issues are things like objects.json.txt

valid folio
# latent mauve Have you put your object and shops JSON in the JSON Parser to make sure there ar...

No, because I copied the files from another recipe I made that was working and just changed the values that needed to be changed—just like I did with other recipes today, and all of those loaded fine. But this last one didn’t.

Now I tried simplifying the paths for all the recipes, and all of them are throwing the same error now.

If there’s an error inside the content of objects.json, could that cause content.json to not find it even if the path is correct?

hallow prism
#

before using the pathos signal we try the usual steps of debugging

#

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

hallow prism
#

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

hallow prism
#

(worse case, there is an error that pathos needs to look at, but there's some info, best case you got it solved faster)

#

and a screenshot of your mod folder content where the stuff is

valid folio
lucid iron
#

Please show us a log i beg you

blissful panther
#

In this case, it would be significantly quicker to just upload a zip of the folder so we can look it over if there's nothing obvious from the log.

valid folio
latent mauve
#

We need your error log, and I'd also appreciate the link that the JSON parser gave you.

ocean sailBOT
latent mauve
#

Yes, I needed the log and JSON parser link from you, Hayato, Lumina was speaking to you as well. 🙂

lucid iron
#

Vortex...

#

(CP) Nando's Artisan Goods

valid folio
#

I see now, it was a bot that replied under my log... hmm, it’s pretty clear my eyes are tired since I didn’t notice that.
Give me a minute—I'll send the log now as the bot instructed.

lucid iron
#

Is this the pack?

valid folio
#

Yes, the mod is Nando´s Artisan Goods

urban patrol
lucid iron
#

Are you absolutely sure you have assets\Recipes\DDL\objects.json

#

Json parser isn't that relevant here, we need to validate your folder structure

latent mauve
#

Hayato, can you get a quick screenshot of your assets/Recipes/DDL folder? should be something like this:

#

(except for your filepath, obviously)

urban patrol
#

this isn't the whole folder structure, but this is the problem that was originally presented, if that helps

latent mauve
#

That will help us confirm
a) exactly where the file is in your Mods folder and
b) what the recognized filetype is of your objects.json in that folder.

#

Well, that's one of the problem spots apparently, Nic, so it does help a bit.

#

I was hoping the log would show something like the file having access permissions or something that was preventing it from being seen, but no sign of that there.

valid folio
# lucid iron Are you absolutely sure you have `assets\Recipes\DDL\objects.json`

Guys, give me a little breathing room, haha—I’ll try to reply one person at a time.

Yes, the files are where they’re supposed to be; we already checked that with another user on this Discord. Still, here’s what we can do: if you want, I can roll back to the version of the mod that was working and then add the recipes that caused the error.

I can also send you a screenshot of the file location to confirm they’re there. With how tired I am, it’s totally possible I made a mistake—I won’t rule that out.

latent mauve
#

LOL, I need to go get ready for a work event, so I'll back off a bit since you're getting a ton of help. 😛

lucid iron
#

As DH said if you want to just send your current version in a zip here, people can help check directly

uncut viper
#

(id maybe also not completely rule out the possibility of Vortex fucking with it since it seems to be managing your mod folder)

lucid iron
#

But as log says, it doesn't think assets\Recipes\DDL\objects.json exists

#

NotteThink could perhaps try launching without mod manager just to see

valid folio
#

If I open the folder from Windows Explorer directly, I see the old version of the mod. But if I go through Vortex and then open Windows Explorer from there, I see the new version of the mod.

I'm going to delete the mod and reinstall it using the new version.

#

From Vortex

#

From windows explorer

pine elbow
#

Hi, I'm trying to create a teleport in cjb, for a custom map...

I can even add the section to the map, but it's not adding the entry for the teleport

{
"Action": "EditData",
"LogName": "Add section to cjb",
"Target": "Mods/CJBok.CheatsMenu/WarpSections",
"Entries": {
"turmamodssdvbr.SDVbrVillage_sdvbr_principal": {
"Id": "turmamodssdvbr.SDVbrVillage_sdvbr_principal",
"DisplayName": "SDVBR Village"
}
}
},
{
"Action": "EditData",
"LogName": "Add warps to section to cjb",
"Target": "Mods/CJBok.CheatsMenu/Warps", 
"Entries": { 
"KyaHouse": { 
"Tile": "13, 15", 
"SectionId": "SDVBR Village", 
"Location": "sdvbr_principal" 
} 
} 
}```
#

What could be wrong?

valid folio
#

😁

#

Thanks

serene moat
#

{
"Action": "EditData",
"Target": "Mods/CJBok.CheatsMenu/Warps",
"Entries": {
"{{ModId}}_PufferVillage_MayorHouse": {
"Id": "{{ModId}}_PufferVillage_MayorHouse",
"SectionId": "{{ModId}}_PufferVillage",
"DisplayName": "{{i18n: warps.mayor-house}}",
"Location": "{{ModId}}_PufferVillage",
"Tile": "16, 32"
}
}
}

sour sleet
#

I've made an entry in Data/Quests but I'm wondering how to trigger the quest? I know there's AddQuest as a trigger action, but I'm not quite sure how to use it

brittle pasture
#

the traditional way is mail

#

like all the vanilla ones that you can reference

sour sleet
#

Ahh ok of course

#

Ty

brittle pasture
#

you can of course add quests anywhere that supports running trigger actions, like even inside dialogue, but mail is the most used method (and familiar to a mod user)

uncut viper
#

(quests listed in the "next quests" part of the quest data are also automatically triggered once the initial quest is completed)

#

(if that is relevant to you)

sour sleet
#

Yep I saw that on the wiki, useful to know SDVpuffersquee

void tinsel
#

Just made (technically tweaked someone else's) CP mod fingerguns i'm officially a modder

#

Prismatic Tools has a prismatic sprinkler so I added compat to Upgrade Sprinklers, very simple lol

#

Makes me want to get into modding fr tho

merry thunder
#

I am completely lost on how to make a custom map using Tiled in 2025, are there any recommended tutorials that aren't too old? cryign

urban patrol
#

what are you struggling with? the wiki is a good place to start

#

[[Modding:Maps]]

merry thunder
urban patrol
#

!unpack you should be following these instructions to unpack, not converting xnb files

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!

urban patrol
#

the unpacked game folder has tmx files in it

merry thunder
#

OH

#

Omg thats what I was missing, thank you so much!! ;O;

urban patrol
#

good luck!

merry thunder
#

Another question how do I edit TMX files so I can draw my map? ;v;

half tangle
#

I want to give the player an item from my mod. I add the item via CP. I want to use C# to give them the item. I'm currently creating a new StardewValley.Object and then using Game1.player.addItemByMenuIfNecessary to give it to them. Is this what I should be doing or is there a better way. I know the ItemRegistry is recommended for creating objects, but my object doesn't exist in there (should it?) so I can't use it.

ocean sailBOT
#

If you want to make mods that add or edit maps:

  1. Use Tiled to edit .tmx or .tbin files.

  2. Refer to the Maps wiki page for details on how maps work in Stardew Valley.

  3. Content Patcher allows you to create custom locations through editing Data/Locations

  4. Vanilla Maps can be edited via Content Patcher as well: EditMap

brittle pasture
half tangle
#

no, it's just a plain old (O) object of my own, but if I print out everything in the ItemRegistry, it's not there and if I ItemRegistry.GetDataOrErrorItem(POINTER_ID) (qualified id or not) then all I get is an error item

brittle pasture
#

why is it not in Data/Objects

half tangle
#

that's a very good question... since this is how I add it

            "Target": "Data/Objects",
            "Entries": {
                "{{ModId}}_Pointer": ```
#

creating a new StardewValley.Object works great... I just remember hearing that's not preferred for some reason

lucid iron
#

It's fine honestly

#

ItemRegistry.Create("(O)yourmodid_Pointer") should work

whole raptor
#

... gotta love Nexus SDVpuffersquint Perfect blur

lucid iron
#

But you know what your object is gonna be so

brittle pasture
#

right, I was asking because I'm confused why ItemRegistry would not work if it's a plain object

lucid iron
#

ItemRegistry.Create is for when you don't really know what the type is gonna be

#

But i usually use it anyways since it's convenient

half tangle
#

related, then, how do I get the metadata about the object? because GetDataOrErrorItem is just giving my code an error item's data

lucid iron
#

Why is your item cursed

half tangle
#

yes

lucid iron
#

Can u patch export Data/Objects

half tangle
#

it's there... one sec... I am SDVpuffersquint at something here

#

nope, still cursed

#

patch export found pneuma163.worldnavigatorcp_Pointer
ItemRegistry.GetDataOrErrorItem("pneuma163.worldnavigatorcp_Pointer") gives an error item's data

brittle pasture
#

Try putting in the qualifier

half tangle
#

ItemRegistry.GetDataOrErrorItem("(O)pneuma163.worldnavigatorcp_Pointer") is the same, error items data

#

I just want the metadata for this thing so I can use its data for stuff rather than hard code things in other roundabout ways

#

But StardewValley.Object p = new("pneuma163.worldnavigatorcp_Pointer", 1); is what does work for getting the object itself. I just can't retrieve data about it programmatically. It's my own object so I obviously have control over it, but this seems weird that this other stuff isn't working.

calm nebula
#

Weird as heck

#

Iirc is there a cache

#

There aren't conditions right

#

!log plz

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.

half tangle
#

nope, nothing special

ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Unix 5.15.0.139, with 25 C# mods and 3 content packs.

half tangle
#

The WN: ??? line is just printing the description of the item created via the new Object... and that's the correct string

calm nebula
#

Hmm, when do you first request the object

half tangle
#

typically as requested by the user during game play. In this case I'm writing this in the game launched event

calm nebula
#

CP edits, at earliest, two ticks after gamelauncyex

half tangle
#

I see...

calm nebula
#

You're too early

#

Try saveloaded

half tangle
#

lemme be smart and move this.. yeah

calm nebula
#

(Your logging appears before the line from CP about editing)

half tangle
#

bumped it over to daystarted since I have that event set up... still error item

ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Unix 5.15.0.139, with 25 C# mods and 3 content packs.

half tangle
#

I am not observant

#

it worked

calm nebula
#

You sure?

half tangle
#

ignore that

#

lol - I left the game launched code in an looked at that before scrolling down my log...

calm nebula
#

That log was in the middle of a bunch of api requests 😛

half tangle
#

thank you for teaching me that CP does stuff two ticks after game launched... now it seems I can actually do what I wanted to do

merry thunder
#

WAIT NVM IM DUMB

#

I figured out the issue gsdasghd

brave fable
visual dirge
#

oh goodness the ui drawing code is a mess of inlined constant offsets 😔

#

oh me oh my

sour sleet
#

Is it possible to not have a time limit on a special order?

brave fable
#

not without mods, no

sour sleet
#

Ahh okee

brave fable
#

there's two or three different ones that allow it, though i don't know them

lucid iron
#

the nice things about ItemRegistry.Create is mainly the arbitrary type handling plus the error items to let u know something went wrong

sour sleet
#

Well I'm trying to make a quest where you gather resources to fix the minecart system. What would the best way be? I thought it would be a special order lol

brave fable
sour sleet
#

Oh no, that's perfect haha

brave fable
#

(remember, no ETA though, so you'll likely want to either omit the feature or use a stopgap solution in the meantime)

sour sleet
#

I don't think a regular quest is doable for this?

#

With an ItemDelivery quest, can you only deliver one item or can you do multiple?

brave fable
devout otter
#

Always thought it's a bit of a shame that 6480's cat portrait only appears for three days per year, so I put her in Central Station, at least.

lucid iron
#

Oh the handsome sailor cat

sour sleet
lucid iron
#

Special orders

#

Just require this mod only if you don't have SVE/ES/VMV/SBV/etc

sour sleet
#

Do those other mods have it built in?

lucid iron
#

Yeah it's a feature people keep making again

brave fable
#

guilty as charged

sour sleet
#

Is it possible with CP alone?

brave fable
#

nope

lucid iron
#

I think we already said no

sour sleet
#

I'm trying to avoid too many dependencies y'see

lucid iron
#

Not until 1.6.16

#

Some other ways would be unlockable bundles

brave fable
#

if it were, you wouldn't see every expansion doing their own implementation plus several mods for the same feature

#

hence the last 5 minutes haha

sour sleet
#

Oh! That's a good idea. I'm already using UB, so I will use that instead

lucid iron
#

But yeah my joke was

#

Implement ur cp to be false dependent on all the other big expansions with this feature

brave fable
#

you don't necessarily need to compromise, though. if you're not planning to release anytime soon you can just omit the special order entirely until it's supported

lucid iron
#

Surely the player will have one of em

brave fable
#

alternatively just use the Unlimited Special Orders mod until it is, since it's literally exactly what you need and can likely be cleanly removed when the feature is supported

sour sleet
#

That's a good idea also. Thanks all c:

brave fable
#

if we lived in a good and caring world then every major expansion would've just used that instead of their own bespoke workarounds, but here we are in this cruel earth

#

or like, the base game could've just included some more sensible way than having to list TwoWeeks as a duration value. but that's neither here nor there

#

it is, after all, not actually needed in the base game at all

whole raptor
#

Is this: "Event.cs.1025": "That was a beautiful ceremony. Congratulations!$h", some kind of leftover dialogue for Lewis from previous versions? SDVpufferthinkblob Cause it seems he just uses his married dialogue, not StringsFromCSFiles

calm nebula
#

Well, CT dialogue takes over event end dialogue

#

That will be visible though after your third wedding

#

clearly my man is being sarcastic

whole raptor
#

Noted

calm nebula
#

"That's a gorgeous ceremony, @! Pity none of the town is here because you divorced all of them"

#

silly mod idea

#

If you divorce someone, their friends and family freezes you out

whole raptor
#

Would be fun to see a ghost town after that SDVkrobusgiggle

#

Except for Wizard... he doesn't care probably SDVpuffersquee

calm nebula
#

You try to buy something and Pierre refuses to sell to you

#

Oh, you divorced him too

#

just like Caroline, huh

lucid iron
boreal pulsar
#

Finally found how to add dynamically generated mails to the game during gameplay (so new mails that are randomly generated instead of static pre-made ones)

they key is to reset the cache before sending the mail

...
PendingMails[mailId] = mailContent;
_modEntry.ResetMailCache();

// Add mail to mailbox
Game1.player.mailbox.Add(mailId);
Game1.player.mailReceived.Add(mailId);
...

so that OnAssetRequested gets called:

{
    if (e.NameWithoutLocale.IsEquivalentTo("Data/Mail"))   
    {
        this.Monitor.Log("receivin request to mail asset", LogLevel.Info);

        e.Edit(asset =>
        {
            this.Monitor.Log("adding asset", LogLevel.Info);

            var editor = asset.AsDictionary<string, string>();
            foreach (var mail in _trialManager.PendingMails)
            {
                editor.Data[mail.Key] = mail.Value;
            }

            this.Monitor.Log($"{editor}", LogLevel.Info);
        });
    }
}```

Idk why but without resetting the chache it doesnt gets called. kind of weird, had to make ModEntry public and change/interconnect quite a few stuff
#

but it works 😄

tiny zealot
#

if nothing invalidates the cache for a particular asset, then the next time it is requested, the content manager returns the copy from the cache instead of reading the data files again

lucid iron
#

before i do anything dum theres no gsq for IS_DAY_TIME IS_GETTING dark etc right

#

which respects the season/location's getting dark times

tiny zealot
boreal pulsar
tiny zealot
#

yeah, pretty much. if you have new data to add to an asset, it's normal to invalidate the cache on it

lucid mulch
#

InvalidateCache however will clear from all content managers and the vanilla asset propagation (for non textures / maps) would only cause Game1.content to get repopulated

tiny zealot
#

interesting. feeling good in that case about my lazy policy of always using Game1.content

lucid mulch
#

In general Game1.content is always the correct answer

inland cedar
#

is npc.isDivorcedFrom() forever or npc will forget it after a time?

lucid iron
#

dark shrine of memory

tiny zealot
#

i think it just checks relationship status, so presumably dark shrine and/or remarrying them would change the result

lucid mulch
#

There's also another fun quirk, in that if an asset is requested multiple times in the same game tick, SMAPI will just reuse the results of the AssetRequested event, and call the Load/Edit method delegates the N times needed

calm nebula
#

Why

#

Let's say in four separate mods, in game launched

#

I regksrer my event handlee

#

Then I call invalidate

#

Same asset

#

Ehat haopens

boreal pulsar
#

mhh I guess adding dynamically generated quests will be very similar to adding dynamically generated mails

lucid iron
#

im losing to map wide screenshots what r they

calm nebula
#

Fun

#

A map wide screenshot simply starts at the top left corner

#

Sets the viewport to 2048x2048

#

Renders everything to a render texture

#

Then grabs that

#

Then moves the viewport one tile

#

Renders again

#

Grabs that,

#

Repeat until entire map

lucid iron
#

i get that somewhat but im too eepy to math how to math the coords to make tiling texture still work

gaunt orbit
lucid iron
#

i havent found a real usecase yet, but you can load different class to same target

gaunt orbit
#

You can do that with Game1.content too

lucid iron
#

can u tho, it just explodes for me

gaunt orbit
#

Really? That's odd. I looked at it in ILSpy and it seemed like that would work fine

calm nebula
#

Cache poisoning tbh

#

If you're afraid game1.content might become poisoned

gaunt orbit
#

No, it has type checks for the cache

calm nebula
#

I think you can also get game1.content to make you a temporary though

lucid iron
#

what i attempted to do is that

  • i have a shared project that adds a new custom asset to a target specified by the caller
  • i have 2 mods using this shared project, so they have classes that are identical shape but ultimately different classes from different assemblies
  • i tried to load dynamic using the other mod's target with Game1.content, no go
  • i switched to helper.GameContent, it's alright now
#

but ofc theres not much practical reason cus they r still different classes 3sSmolMiku

gaunt orbit
#

Did you use the DataType from the event or just hardcode the load method?

lucid iron
#

i used dynamic i think

#

its not in a event, just attempt at Load

gaunt orbit
#

No I mean for the thing providing the asset in assetrequested

lucid iron
#

nop

#

wouldnt that still cause a problem when both mods are installed yggy

#

it would have become cached to one version or another of the datatype no?

gaunt orbit
#

Oh dynamic specifically might break the type checking on the cache since it's usually treated as object. I'll have to take another look at how it works layer

gaunt orbit
#

Then it'll just give you whichever one you ask for

lucid iron
#

cursed

#

but i already decided not to do this for other reasons Dokkan

visual dirge
#

if i wanna post a screenshot of the ui stuff i did i need to post it in #images-and-memes and link/forward here, right?

gaunt orbit
#

Yeah until you have higher rank

uncut viper
#

i thought image permissions were loosened in the mod making channels

#

but that might be my memory making it up

visual dirge
#

lemme try

#

oo look it works !!

#

anyways is there a smaller font than game1.smallfont

gaunt orbit
#

What does that measure? Friendship change over the day?

visual dirge
#

nah it collects friendship gained over the maximum and shows it as a number that keeps going up forever

#

itll be hidden at 0 hearts when im not testing the ui

lucid iron
#

+2147483647 ❤️

visual dirge
#

ah not quite

lucid iron
#

i wonder how many years it'd take assuming u did everything optimal

#

and no stardrop tea

visual dirge
#

its a long

#

so the max hearts is ummm

gaunt orbit
#

Should go with uint64

visual dirge
#

roughly long.MaxValue / 250

visual dirge
#

changing it to ulong brb

boreal pulsar
#

is this the correct way of writing item IDs? Im used to having [454] ingame but from what I see in code its (O)454 ?

visual dirge
boreal pulsar
lucid iron
#

but u can give infinite number of these

gaunt orbit
boreal pulsar
visual dirge
gaunt orbit
#

Big craftables, weapons, boots, rings, furniture, wallpaper, flooring (not the placeable kind), trinkets, tools

#

I believe [[Modding:Items]] explains qualified ids

gaunt orbit
lucid mulch
uncut viper
#

(where are you writing that data though bc that looks like quest data but it should be a slash delimited string)

boreal pulsar
#

Thanks!

visual dirge
# visual dirge

ok yes now that ive changed it to ulong the maximum number of extra hearts is +73786976294838207 ❤️

gaunt orbit
#

Not enough to express my love for lacey /jk

visual dirge
#

i think it will overflow the ui either way

#

speaking of

#

is there a smaller font

#

or should i just lower the scale on game1.smallfont

gaunt orbit
#

Lower scale is the only way

visual dirge
#

okii

lucid iron
#

for numbers only theres a tiny font, and tiny digits (which is what item uses)

visual dirge
#

ohh

#

hmm

lucid iron
#

the digits r not fonts they r just sprites

visual dirge
#

does it have +

lucid iron
#

no

visual dirge
#

hmmm maybe thats a better idea?

uncut viper
#

you can do what the game likes to do and just draw Game1.staminaRect in a cross shaped pattern real small

lucid iron
#

yea valid DokkanStare

gaunt orbit
#

Staminarect my beloved

visual dirge
#

how do i use this special digit font that is not a font

gaunt orbit
#

Why are you so weirdly sized

lucid iron
#

wait is it not a single pixel zoomeyes

gaunt orbit
#

No it is not

lucid iron
visual dirge
#

tyy

#

will look into it

gaunt orbit
#

I don't recall the exact dimensions but it is much taller than it is wide

lucid iron
#

they come from somewhere on cursors

uncut viper
#

it should be just a single pixel tho

lucid iron
#

did they fix it

gaunt orbit
#

Oh they must've changed it!

uncut viper
#

i wasnt aware it was ever anything but a single pixel

lucid iron
#

i did tho i dont use it much

gaunt orbit
#

I remember drawing it in 1.5 with the sb overload that just draws the whole image and being surprised that it wasn't a single pixel

#

But maybe I'm misremembering

visual dirge
#

oh also i switched from ulong to BigInteger bc why not yk

#

modding is about having fun

#

this mods faq:
q: "what is the maximum hearts i can get w this mod?"
a: "how much memory do you have"

gaunt orbit
#

Does stardew package Numerics?

#

If not then you probably shouldn't use BigInteger

#

Oh it does package Numerics, nvm

lucid iron
#

it was meant to be

#

finally enough numbers to express depth of love for lacey

urban patrol
#

are the fire sprites in Tilesheets/animations.png the only fire? i'm trying to put a TAS in an event that's a bonfire on the beach and hoping to use already existing assets, but i'm not sure if these look right--they almost seem to be a different scale

lucid iron
#

theres another fire on tilesheets/animations

#

the cursors fire is used with fireplaces

urban patrol
#

let me check those, thanks

#

i swear i looked in cursors but it must be too big, i get lost XD

half tangle
#

very bottom of cursors, below the witch, left of Alex's mom

#

276, 1985, 12, 11

urban patrol
#

aha! thank you

#

...why do they share a grid with that border though...

lucid iron
#

you should know better than to question the almighty Cursors

urban patrol
#

it shouldn't be a problem when i define the texture, right? since it goes by pixel?

half tangle
#

your sprite will be whatever source rect you give so should be fine if you define it

urban patrol
#

awesome

urban patrol
#

is there a better way to add light/glow during an event than doing a map patch/temporary map change?

final arch
#

you can use the addLantern command and then removeTemporarySprites I think

#

idk if that rly counts as better tho

visual dirge
#

wow discord cannot display that lol

#

bonus benefit to using my own i can just add a + to the texture

visual dirge
#

hehehe

#

it works !!

#

wonderfull

golden basin
#

I have a question

#

How do i edit a entry within the location data for a vanilla map

#

wait i figured it out

#

I made a vanilla map that is usually not pathable for npcs pathable

ashen urchin
#

I just edited the crops xnb file in data. I intended to edit the crop season. After I tried it, why did the game crash? I'm sure I edited it according to the format

lucid mulch
#

!xnb

ocean sailBOT
#

XNB mods often break the game and are not recommended. See:

For mod creators, see editing XNB files for help unpacking & editing them (including for use with Content Patcher).

median dune
#

heloo just a quick question; there isn't any difference between NPC's when it comes to what chores they perform after marriage right? Like, its only calculated on random and friendship levels but its the same for everyone

sterile solar
#

@brave fable Hello, thought of asking.
There's this daystarted error going around that blocks you from getting the book. You know which one, am not here to ask about that. Since I know your working on an update.

Can we get a compatibility with "Item Bags". Just the ability to use the items in the bags while cooking, while you finish polishing that bug. It's one of the many late game inconveniences I have.

If you plz.

rigid musk
visual dirge
#

i take it including assets directly in c# mod dlls via embedded resources is discouraged or doesn't work?

lucid iron
#

I mean if u handle the reading of stuff yourself i don't see why not

#

But i don't think smapi helpers are setup to use those

median dune
lucid iron
#

Yeah consider opening a custom asset

#

So that ppl can edit in their own info for their NPCs

median dune
#

yepp Im gonna make a class that basically extends the information and functionalities of NPC's and reads them from file when they become spouse

#

so customizing a new NPC should be as easy as just making such a file for them, however given the nature of the mod to properly work they would need to have a whole set of specific animations Im gonna include

#

now that I think of it compability would require contact with me since my mod is gonna make them do things they never do in game, so I will have to whitelist spouses it will even activate for

lucid mulch
visual dirge
lucid mulch
#

I haven't seen it because I don't know why you would even want to, seems like extra effort

visual dirge
#

it feels weird to have an assets folder with a single tiny png in it?

#

idk lol

worn spear
#

nah

#

based move

#

have 20 of them make them into a little message

lucid mulch
#

Even in winforms it was kinda annoying accessing embedded resources.
Only times I bothered was to have a clean portable executable, but for a smapi mod why bother, the manifest.json has to be there anyway

visual dirge
#

i think im still just used to bepinex modding where the entire mod is the dll file and avoiding having any separate files means users who have no idea what they're doing are less likely to mess things up

#

ik my smapi mod wouldn't be loaded w/o its manifest anyways though

#

so i should prolly just leave it

visual dirge
#

39×5 pixels

worn spear
#

you need 100 of them then

visual dirge
#

what could i possibly use those for

#

oh i suppose i could split it up into individual images for each sprite

#

since those 39×5 pixels are really 13 3×5 sprites

#

that only gets me to 13 images though

#

and that sounds like itd be a huge pain to deal with........

lucid iron
#

Just draw the whole thing using staminarect instead

#

It'll be great trust

visual dirge
#

also i will have you know i did not end up drawing the + with staminarect, my font.png has a + character!!!

#

and a - and a × hehehe

#

- only shows up if someone corrupts their save data i think lmao

lucid iron
#

Rmbr to make the color configurable

visual dirge
#

it uses game1.textcolor or something

#

is that good enough

lucid iron
#

Depends on what ui interface mod is used

#

There is a mod that just let ppl set thosw colors tho

lucid mulch
#

Iirc most of my schedule debugger mod was me just drawing with a 1x1 pixel

#

Which is how data layers did it iirc

calm nebula
visual dirge
lucid iron
#

Terrorfy 1 line transpiler Dokkan

visual dirge
#

i cant help it its pretty

#

not like i need more lines here

#

theres no labels

whole raptor
#

Would you say it makes sense to limit map and asset loading just for the wedding day? SDVpufferthinkblob And if yes, why does the game seems to randomly find or not find the map even if I don't change anything SDVpuffersquint

tidal spade
#

hi! I'm trying to add a new ore to the game using Content Patcher. I already have the ore and bar items, but i don't know how to melt the ore into bars. Could someone please help me? (sorry for any english mistakes)

lucid iron
#

Your load runs when it's needed

#

Though hm if ur event is happening on some kind of permanent but hidden location would it load all the time Bolb

#

I'm assuming temp map is as advertised

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!

lucid iron
#

Take a look at Data/Machines

tidal spade
#

ok, thank you! ❤️

whole raptor
#

Where can I find an example of temp maps being used? SDVpufferthinkblob

lucid iron
#

Ik the command is changeToTemporaryMap

whole raptor
#

Doesn't it still need the map to be loaded normally and have Data/Locations? SDVpufferthink Or at least that was it seemed like when I tried it before

final arch
#

no

#

must be in Maps tho

lucid iron
#

Oh yeah nomori what did u do about the arches

gaunt orbit
#

you can't apply location data to it, and it's always either GameLocation or Town

#

worth noting festivals do this too

whole raptor
lucid iron
#

Power...

gaunt orbit
#

if you want to use a real location with actual location data, you have to use changeLocation instead I think

lucid iron
#

@analog flower was looking into how to utilize the cursors wedding arch too

#

Instead copying arch to tilesheet

whole raptor
lucid iron
#

The theory is several temporaryAnimatedSprite that essentially does specificTemporarySprite wedding

#

But at a custom position

analog flower
#

i haven't messed with it yet but my gut says it wont work 😆 currently i just yoinked it from cursors into one of my custom tilesheets, but if i can get it to work with TAS ill let you nomori pinknod

gaunt orbit
#

it doesn't actually use the warp functions, because those draw from the game's persistent location list, instead it just directly changes the player's location and position, along with some other housekeeping stuff

analog flower
#

im looking at airyn's custom wedding ceremony to get me through this because the wiki is very vague unfortunately, so if you havent seen it it could be a good reference https://www.nexusmods.com/stardewvalley/mods/29885

Nexus Mods :: Stardew Valley

Have the wedding of your dreams! Pick from seven different locations, say your vows, and hear from your fiance's friends & family!

whole raptor
#

Now that I think about it, it'd probably be better to make the arch part of the map instead of temp actor (if not using the one in cursors)... buut oh well, I'm too lazy to change 😅

calm nebula
#

@finite ginkgo thanks for the PR! You can kinda tell how active I am...not at the moment because it took three days for me to realize it existed. Would it be easier to transfer that part of the code to you? Otherwise, I'll get it merged post haste

#

I can also straight add you to my repo since I'm apparently just into doing things like that

#

I also meant to knit Elizabeth socks but lol that ain't happening

rigid musk
#

if i changed the category for a recipe how do i make it so that the player can obtain it again ?
i.e. I have a recipe that I incorrectly tagged as 'cooking' (with category of -7) and i changed it to 'crafting' with a category of 0, but if the player already bought the recipe it doesnt show up in their crafting tab

lucid iron
#

Use a trigger action to unlearn the recipe i think?

whole raptor
#

Finished... finally SDVpufferblob

rigid musk
uncut viper
lucid iron
#

MarkCraftingRecipeKnown

uncut viper
#

I would still try unlearning the cooking one

lucid iron
#

And there's GSQ for checking cooking known right

rigid musk
#

ohhh thank you thank you

uncut viper
#

As knowing it may have perfection implications

#

Especially if they've already cooked it

lucid iron
#

So yeah if cooking known, unlearn cooking learn crafting mark as applied

rigid musk
#

No they couldnt cook it

#

because it had a crafting recipe not a cooking recipe, but it showed up in the cooking tab

#

(there was a discussion about it a couple? of days ago)

spice inlet
#

my cat just decided to hang out with trashbear SDVpufferwow

lucid iron
#

Test save default tabby cat gang

round timber
#

default orange cat and default male farmer with red shirt, name a more iconic duo

spice inlet
#

Demetrius and the 25k in my bank

tiny zealot
woeful lintel
median dune
#

should I make it easy for myself and use NetInts or use NetBytes for small values?

calm nebula
#

...what are you doing

median dune
#

well the question is if its even worth optimizing it down to bytes since its gonna get converted back and forth every time I perform calculations

tiny zealot
#

actually using NetWhatevers that aren't already in place is fraught with peril

median dune
#

huuh

tiny zealot
#

anyway it's almost certainly not worth optimizing a few bytes away unless you're like, rewriting the network protocol or something where even a tiny gain would reap huge dividends

median dune
#

would you mind elaborating on that?

tiny zealot
#

in order for a NetThing to actually get synced by the whatever-it-is that syncs them, it has to be in the hierarchy below a NetRoot that the game knows about and does syncing on

#

i think there might only be one of those. like WorldNetRoot or something i don't remember too clearly

#

i'm not sure how (or when) to add items to it, and i'm not sure if it breaks the save serializer if you do so without accounting for it

#

these are the sorts of perils i was talking about

#

do you absolutely need to use NetInts/NetBytes for what you're trying to do?

spice inlet
#

To get around that the next UB update will store tons of bundle data in a fake location context SDVpetgoat

#

big optimization

tawny ore
#

I've seen too many examples of modders obsessing over nanoseconds when there are much more glaring oversights in their approach to things that make a much bigger difference

gaunt orbit
#

Multiplayer.updateRoots

#

I'm not sure how the game knows which roots are which

calm nebula
sharp bridge
#

my friend started modded, she has a Y3 gameplay Vanilla. Would she corrupt her save if she added all the expansions?

#

i have a list i gave her

urban patrol
sharp bridge
blissful relic
#

for somebody who has 0 experience with coding, where should be a good start to learn and understand some basics of making a mod?

urban patrol
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.

blissful relic
#

so to be specific, I would like to make a portrait mod that can change any vendor NPCs portrait in their shop window

#

in HD

urban patrol
#

that’s doable with content patcher then, but you’ll need to use the portraiture framework

lucid iron
#

Naw u can use spacecore for this, probably easier

urban patrol
#

oh! i stand corrected

lucid iron
#

spacechase0.SpaceCore/TextureOverrides

#

Use SourceSizeOverride

blissful relic
#

that's the approach I wanted to take yes

lucid iron
#

Before we get to all that though, it's best to learn about content patcher usage

lucid iron
blissful relic
#

I'm gonna need some time to get familiar with the usage of content patcher, these are all new to me

rare orbit
#

hey? is it ok to link the thread i made for help on a new project im working on to here?

brittle pasture
#

sure

rare orbit
#

it's mostly for art but since i plan to make this a content patcher mod and not a replacement some help on that would be good too

#

bit rusty with content patcher cause i've been busy attending a special needs day program

sharp bridge
#

Anyone has a layout for Frontier map that is good ?

#

too tired of making mine lol

#

for other saves

round timber
sharp bridge
#

Oh oops

#

I misclicked

#

Thanks for telling me

round timber
#

no worries!

night creek
#

I feel like I'm beating my head against a wall. I've tried searches, but my Google-fu is failing me. I've tried reading through my favorite character mods. I feel like I'm missing something outrageously stupid. Maybe I'm just tired from staring at it for so long. Can anyone help me, for lack of a better term, nest questions?

For example:
Sebastian: What's your favorite color?
Farmer: Blue / Red / Green
Sebastian: What kind of blue? / I hate red. / Of course a farmer likes green.
Farmer: Blue like the ocean. / Blue like the sky. / Blue like a bird.
Sebastian: I get that. / The sky can be different shades of blue. / NULL
Farmer: Midnight blue. / Rainy blue. / Cloudless blue.

lucid iron
#

Is this events or daily dialogue

night creek
#

I really didn't want it to be an event. I'm already writing plenty of those. I just wanted it to be regular dialogue.

#

I feel like that's probably going to be my answer. If I want something more "complicated" I'm going to have to make an event, aren't I?

lucid iron
#

No it's not the answer at all

#

I ask only to know what docs to link lol

#

I believe you need to make the response key(s) also a question

night creek
#

I wasn't being snarky or anything. I'm just very tired. Had a lot of family medical stuff the past few weeks and instead of sleeping I've been staring at this as my escape.

night creek
lucid iron
latent mauve
#

Take a look at the dialogue commands

#

There's an example right under that section that might help!

night creek
#

Bless you guys. I'll give that a go. ❤️

latent mauve
#

Also, if anyone feels comfortable with editing the wiki, I found a typo:

dusk terrace
#

am I overlooking something or do every FS body/sleeve/pants really need to include all possible farmer animations for them to show up?
even the sleeve template file has mistakes...

rigid oriole
#

SDVpufferparty I am happy to announce that all of the red "these docs should be merged" headings from the "migrate to 1.6" page are now green

rigid oriole
#

all that's left now is the 1.6.9 migration page but that shall be for another day

urban patrol
#

you’re doing the lord’s work out here

rigid oriole
#

Thankfully the migration page is very well-formatted and written, and except for the last few things that i procrastinated until today because they were more complex, a lot of it is just careful copy/paste

#

My migration editing has not gone further back than the 1.5.5 migration guide, so if stuff is lost from before then I will sadly not be the one to notice it

hallow prism
lucid iron
#

(i assumed it did bc atra and im sorry for stereotyping)

hallow prism
#

(it's ok! atra would likely have done it if i needed it, but it wasn't much the case back then)

night creek
lucid iron
#

When in doubt simply ask SDVpufferthumbsup

urban patrol
#

sometimes a break is all you need!

#

i only knew of that tutorial’s existence because i was using it last night lol

lucid mulch
# gaunt orbit I'm not sure how the game knows which roots are which

The multiplayer stack has a reference to all the netroots so it can update them and when receiving packets over the wire update the correct one accordingly.

The rest of the game doesn't particularly care what netroot it's attached to, with mild exception to the location netroots due to how they are only selectively synchronised

#

Each netroot mostly has a dedicated packet type associated with them, though the farmer netroots share one, with a header saying which. Similar story for location

#

In one of my stashes was work for a smapi addition to have smapi manage a netroot per mod and smapi would do a similar job to vanilla in keeping them synchronised, as there's a bunch of scenarios where doing events back and forth is inefficient unless you also bake in your own diffing and caching systems on top, which the netcode infra does for you.

And adding net types on existing data structures has multiplayer compatibility issues if players are running different mods or different versions, if host says an object has 4 net things and a client says 3, that client will be violently disconnected/crashed with a cryptic error that's not fun to troubleshoot

lucid iron
#

I tried to add more netfields to LightSource one time it went terribly

#

Otoh game let me add as many netfields as i wanted for Companion

lucid mulch
#

(and mods themselves shouldn't try to directly create and manage netroots themselves unless they are doing it on top of smapi events as there can only be a max 255 packets, vanilla uses like 30 or so and smapis using 4 or so)

lucid iron
#

Say sinz do u know how setMapTile is sync'd (or not)

lucid mulch
#

No idea, currently on mobile

#

But the contents of the xtile map isn't synchronised

lucid iron
#

Ah i see

#

I wanted to make some kind of setmaptile trigger action

#

maybe i just queue them to apply when player actually visits the location next time

lucid mulch
#

In general with the map, stardew relies on the clients independently doing the same mutations (eg shortcuts, Pam house, joja/cc, island, bridge, etc)

lucid iron
#

Makes sense

#

But i also wanted to avoid the ghost location problem

lucid mulch
#

So for farmhands going to a non-active location, they will have a new GameLocation instance every time they warp

#

Though there is a central multiplayer map cache to prevent unneeded loads to the underlying map asset (which is semi redundant with how smapi already does a cache but whatever)

lucid iron
#

Do those have the same nameoruniquename

lucid mulch
#

Yeah the host sends that over

lucid iron
#

Hm maybe i need to change the tile data cache thing to a dict on that then

#

I was using a CWT

#

I have thing to cache certain tile data so I don't have to iterate whole location every warp

sour sleet
#

Is there any way to add function to a furniture piece? Like can I make a piece of furniture that plays Junimo Kart when interracted with?

lucid iron
#

You can add tileaction to furniture with one of calcifer spacecore mmap

#

I don't think junimokart is a tileaction though

lucid mulch
lucid iron
#

But at that point just give the home arcade machine as a prize

sour sleet
#

Ahh okee, thanks Chu

lucid mulch
#

appliedMapOverrides is also in the multiplayer cache, so despite being a new GameLocation every time, that is preserved (see: GameLocation.StoreCachedMultiplayerMap / GameLocation.ApplyCachedMultiplayerMap)

lucid iron
full hemlock
#

What would be involved in making a mod for a minigame?
Like competing with Sebastian at throwing things at the side of the mountain?
Like ker-plunk watching a thrown octopus bounce down. Try to land it on Linus's tent.
Or maybe a minigame that's a little kinder, I suppose ... sigh

lucid iron
#

Learn c# and write a subclass of IMinigame

#

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

lucid mulch
#

but if you don't handle the persistence case, it just takes another mod deciding to do a OnTimeChange map edit, and your mutations are gone

#

(and without my SpeedySolutions mod, Town is completely unloaded every time you leave it so leaving and coming back for host needs the persistence case)

lucid iron
#

I think no persistence is actually the desire here

#

EditMap covers the persistent usecase pretty good

lucid mulch
#

hope no one wants to change a map property after your trigger action

lucid iron
#

Oh i have a bunch of spaget to update the cache on these things

lucid mulch
#

The SMAPI code that powers EditMap is based off MakeMapModification, bugs/inefficiencies and all

lucid iron
#

I don't really have any way to track ppl just grabbing the raw tile and editing Properties afaik

#

But since i plan on doing that myself i can just tell myself to update the cache

final arch
lucid mulch
#

they are functionally identical to any other token, and would be a comma seperated string of values

ivory plume
brittle pasture
#

whoa this is huge!

urban patrol
#

fork deprecated? omg

ivory plume
#

(Forking still works fine, but all vanilla events use the new label approach in 1.6.16+.)

urban patrol
#

oh, i must have misunderstood

rigid musk
#

just when I was getting used to switchEvent u_u

#

/aff ofcourse its cool to see things being made easier/done with more support :3

dusk terrace
#

if a mod file has multiple mod manifests, should I leave the updatekey on one of them blank or keep it on both and make sure the version always matches?

#

I guess I'm overthinking it

brittle pasture
#

either works

#

leaving them blank do make them show up in the log as "mods without update keys", but a workaround is to use Nexus:???

uncut viper
#

personally i like them both having the same updatekey and keeping their versions in sync

#

it makes sense to me if they go together and should reasonably be the same version
and if a user somehow updates one but not the other by mistake it'd alert them to it

faint ingot
#

I have a question about the "Action PlayEvent" property for maps (https://stardewvalleywiki.com/Modding:Maps)... how can I prevent the event from playing outside of triggering the action by touch, without specifying event conditions that always evaluate false (I want to check a condition as part of the action so it needs to sometime be true)

lucid iron
#

maybe u can do it with the SC trigger action route?

calm nebula
#

Use the A condition

#

The one that specifies a tile to stand on

uncut viper
#

the event doesnt need to be in an actual location, does it? since you're giving it an id

#

cant you just put the event somewhere the player will never go and give it preconditions

calm nebula
#

(This is what vwv does)

faint ingot
calm nebula
#

I thought Action PlayEvent set it so you had to have the event on the map

#

Anyways, vmv just uses the tile precondition

uncut viper
#

it uses Game1.PlayEvent, which will try the current location first and then loop thru all locations

#

(so you'd need to do a changeLocation, presumably)

faint ingot
#

OK I'll try the tile method first and then look at that method as a backup, thank you.

calm nebula
#

Huh, okay, but if it loops through all locations you need a valid location

uncut viper
#

i do think the tile one is better ofc i just didnt know that existed when i said the other way

#

but there is a GSQ precondition too iirc so you can just put the event literally anywhere else and make the GSQ check their location

#

(i am also curious, if you conditionally patched in the event with a CP update rate of LocationChanged, would it be patched in before the game checks for events in the current location, or too late?)

rough lintel
#

Q: is it better for an npc's internal name to be like MelissaRK or {{ModId}}_Melissa? with RK being like, an author abbreviation

uncut viper
#

modid is always best

rough lintel
#

only thing is, writing out {{ModId}}_Melissa in events sounds like a PITA though

uncut viper
#

its guaranteed to be unique

lucid iron
#

if u do {{ModId}}_Melissa it work with lookup anything

uncut viper
#

you can make a dynamic token called {{Mel}} if you want whose value is {{ModId}}_Melissa

brittle pasture
#

you can use a token

#

what button said

rough lintel
#

thank u

#

shall pass that along

uncut viper
#

when in doubt it is always better for something to use ModId if its capable of doing so

faint ingot
rough lintel
#

patching the vanilla world map... are there any working examples of a mod that does this? sbv patches its own map, so i can't reference that like i usually do 😔

lucid iron
#

yea many DokkanStare

#

sve duh, but also stardew cove

#

rsv

#

check the remapping mod

rough lintel
#

i am not downloading a zip bomb to check how it does maps, but ill look at remapping

lucid iron
#

zip bomb blobcatgooglyblep

#

its not big hueg now that ogg exist

lucid mulch
#

Data/WorldMap is your friend

rough lintel
#

i was looking at it, and i. i wanted to scream

brittle pasture
rough lintel
#

too many fields, much confusion

#

but ill look at the wiki

#

and ill look at sve

lucid mulch
#

Having a world map that is remotely extensible is a complex endevour

lucid iron
#

big ol dynamic texture

lucid mulch
#

SVE probably isn't the ideal testbed as it has the luxury to mostly just nuke whatever

rough lintel
#

ok true

#

um. flip

lucid iron
#

remapping is nice in that it does it for many other mods

rough lintel
#

so i see that for new areas, there's a base texture set... but what if i want to patch the vanilla world map with an image? do i just add a texture field or something or do i patch it differently? remapping project patches it in its own seperate thing

#

like remapping does this { //32 "LogName": "Remapping Aspen", "Action": "EditImage", "Target": "LooseSprites/map, LooseSprites/map_{{season}}", "FromFile": "assets/Tilesheets/Aspen_{{season}}.png", "ToArea": {"X": 90, "Y": 0, "Width": 111, "Height": 20}, "PatchMode": "Overlay", "When": { "HasMod: |contains=FlashShifter.StardewValleyExpandedCP": false, "HasMod: |contains=invatorzen.AspenCP": true } },

#

so do i have to do this too?

#

actually ill just try and see if it works

lucid mulch
#

ah yeah thats what I was missing, the LooseSprites/Map(_Summer/_Fall/_Winter) edits where SVE replaces it, as they aren't in WorldMap but in "MapPatches"

#

that explains why none of the SVE ones seemed to specify a texture, all baked into the base texture

#

but I don't think a 1.6 native mod needs to touch LooseSprites/Map at all for WorldMap as a map area can do the overlays for you

next plaza
#

@uncut viper Noticed BETAS has a trigger action action for player mod data, couple suggestions:

  • Other mod data too - like per-save (probably only usable on the host unless you specifically workaround SMAPI limitations), or current game location (or maybe any, but obviously clients could only access current and farm)
  • Content Patcher tokens for reading various types of mod data (and reading is more flexible than writing so might be more broadly accessible for clients than writing)
    Suggested these to Pathos but he didn't seem up for it, so though I'd suggest it to you after I checked if any existing "CP extension" mods had anything like it
rough lintel
lucid mulch
#

non 1.6 native mods that wanted world map changes would be directly editing LooseSprites/Map and then only using Data/WorldMap for the tooltip data

next plaza
#

(I see you have GSQ/tokenizable string stuff for this but those aren't usable in cases where you can't use those)

lucid iron
#

say do u internally call them "trigger action action"

next plaza
#

I intentionally call them that, yes

#

Since a trigger action has the "trigger" and the "actions"

lucid mulch
#

Not entirely sure why Aspen needs the remapping team to do it, Aspen natively does world map edits

lucid iron
#

i been calling them "trigger action" which get used in "Data/TriggerActions" (plural) bc saying action twice hurts me

rough lintel
#

shrug

next plaza
#

So just "actions" wouldn't be very clear (what about CP patch Actions?), and "trigger actions" is sorta more encompassing than just the "trigger action action" part

lucid mulch
#

hmm, also edits LooseSprites/map when NPCMapLocations is loaded which seems odd as NPCMapLocations afaik uses vanilla 1.6 map

next plaza
boreal pulsar
#

m so glad I decided to dive into modding SV, its so much fun

next plaza
lucid iron
#

the other reason ig is cus i am think about tile and touch actions first

#

and then i go "ah yes they should be usable with trigger too 3sSmolMiku "

next plaza
#

Hmm, I guess that makes sense. But those are more of a simple thing, while trigger actions are more of a composite thing (trigger, conditions, actions, etc.)

#

Again, at least in my head

lucid iron
#

not if i keep exposing other places where u can just plonk an action kyuuchan_run

lucid mulch
#

also trigger action actions can be used outside of a trigger action

next plaza
#

I mean that won't stop me from saying "trigger action action" in the context of vanilla stuff 😛

lucid iron
#

yea i do agree its more lexical(?)

next plaza
#

Is it a crime against english? Maybe (if not for those other words I can't think of at the moment). Do I care? Not really 😛

lucid iron
#

i did also try to convince button of moar tokens once

gaunt orbit
#

No more so than pin number

lucid iron
#

but in button's cmct which is the cp tokens mod instead of betas

next plaza
next plaza
#

Also putting the reading in CMCT but the writing in BETAS would just mean you have to have two dependencies to really use them

#

Unless you're just doing one way communication with another mod's data

lucid mulch
#

Hmm I wonder if theres just some NPCMapLocation or vanilla bug with WorldMapAreaData.Textures that has made no mod actually use it

next plaza
lucid mulch
#

the only mod in my collection using it is Aspen, but then it edits LooseSprite/Maps anyway
and other mods populating stuff into EastScape patch EastScarps map texture via CP

gaunt orbit
#

Meanwhile just about everyone has a debit or credit card these days

next plaza
lucid iron
gaunt orbit
#

They call that a PIN now?

lucid iron
#

both button mods anyways

next plaza
#

(And also not secure whatsoever, it's literally "keep family passing by out of it" levels secure)

next plaza
gaunt orbit
#

Weird

#

I admit I haven't actually looked at the login screen in years, I just press space to focus the password input and type it out

#

It's all muscle memory now

next plaza
#

Looks like by default it's normally just numbers, but you can configure it for to include other characters (which I guess I've always done since they've introduced it)

next plaza
lucid mulch
#

local device pin can get away with being less secure than a real password due to no distributed attacks being possible.
and having a convenient but still semi secure auth mechanism keeps people from having no auth mechanism

gaunt orbit
next plaza
#

I think I did too, but I vaguely recall seeing it called a PIN on my login screen despite never paying attention

gaunt orbit
#

Or maybe it's because I installed it with a local-only account

lucid iron
#

it does kind of bother me that vanilla only has gsq for player mod data, and only gsq for location custom fields

next plaza
#

Also I think I heard recently that it doesn't allow initial set up without a local account. Sounds crazy and probasbly wrong in the strictest sense, but I wouldn't be surprised if they added a bunch more hoops to doing it

#

Actually I might not have a local account seeing as I have one drive setup and am pretty sure I never installed it otherwise

#

I definitely think local accounts are better

gaunt orbit
#

You still can, it's just more difficult to bypass

next plaza
#

Yeah, it doesn't make sense to completely block it since some people might have internet during setup

#

Hence me not being surprised about them adding "a bunch more hoops to doing it"

lucid mulch
#

(A security argument is a local account wont have bitlocker encryption keys being able to be backed up anywhere, a MS account can ensure you have an offsite backup to unfuck your drive)

gaunt orbit
#

Yeah but I don't need drive encryption lol

next plaza
#

Also you can just do that manually if you care about the security

gaunt orbit
#

What are they going to do, steal my unfinished fanfics?

next plaza
#

And you don't have to trust MS for it!

next plaza
lucid mulch
#

being able to just unscrew the ssd, copy the juicy files and put the ssd back in means leaving a powered off laptop unattended for 5min is full pwn

calm nebula
#

Hi making mods

rough lintel
#

hello atravita

calm nebula
#

What mods are we making?

#

Oh, password policy? Seems fun

rough lintel
#

im looking at the mod ideas github to see if anyones made my "buy missing materials from robin" thing real 😔

next plaza
lucid mulch
rough lintel
#

nobody has

gaunt orbit
#

Better switch to off topic before we get bapped

next plaza
calm nebula
next plaza
#

I have much more idea juice flowing for MC mods these days than SDV mods

rough lintel
next plaza
#

I modded MC way before SDV even came out

#

Stopped back in 1.8 I think, got tired of basically rewriting mods every major version

rough lintel
#

minecraft modding requires a level of autism i simply do not have, so i will never do it

#

as much as i want to update thaumcraft 😔

next plaza
#

It's not that hard compared to C# SDV mods I feel like

rough lintel
#

i cant even do those LMAOOOO

next plaza
#

You can do a lot more with just the modding APIs compared to SMAPI since they do a lot more

next plaza
sour sleet
#

Is it possible to make a custom obelisk?

next plaza
#

People do pretty crazy stuff with those these days

rough lintel
next plaza
#

You can even make basic UIs (though not ones with item slots) as of the most recent snapshot

gaunt orbit
next plaza
lucid mulch
#

I'm sure there is a concept possible to effectively embed a core aspect of minecraft into stardew

gaunt orbit
#

There's a new ObeliskWarp action you can use

lucid mulch
#

can already place and remove blocks on a grid with a 9 wide toolbar

next plaza
#

I've definitely had ideas to make SDV equivalents of some things (like modular tools, or something like Applied Energistics 1 which I even had a prototype for back pre-SDV-MP)

gaunt orbit
lucid mulch
#

I don't mean running java minecraft in stardew, I mean taking concepts of minecraft and putting them in stardew, though the lack of the third dimension limits some of it (though casey had a mod for that too)

next plaza
#

As for MC mods... I have 15 sitting in my minecraft-modideas.txt at the moment, all to varying degrees of being fleshed out (with three having their own separate file). And one of them should probably be split into two

next plaza
#

For those who haven't seen, 3d stardew jumpscare incoming

gaunt orbit
#

I have many ideas, I just hate working with gradle and java

rough lintel
#

oh hell nah they got 3d stardew

gaunt orbit
#

Though recently I did start working on a fork of Create: Better Storage to port it to neoforge and 1.21.1

ornate locust
#

pulls up Stardew discord- AAAAA

next plaza
lucid mulch
#

If it wasn't for the fact I'm not a big fan of actually making content mods, I would love to have a BuildCraft/ThemalExpansion fluid and supply chain system.
I'd love to have piping from a keg to go into the casks, rather than having it already be in item form

next plaza
# rough lintel oh hell nah they got 3d stardew

I kinda want to go back to this but unfortunately I am unwilling to make 3d models of locations.

I did the farm cave, and later backwoods as shown there, for testing purposes, but that was on my old computer and I forgot to copy the content pack over. And I don't feel like doing that again

rough lintel
#

i wouldnt want to do it either lowkey

next plaza
rough lintel
#

its a technically amazing thing and it should remain a neverever

#

🤣

next plaza
#

(The one with conveyor belts, there's a gif around here somewhere but I don't have that one favorited)

lucid mulch
#

while I like automate, I don't like how... lack of infrastructure it requires

next plaza
rough lintel
#

Yes.

next plaza
#

I got it working with a VR headset. (Mostly, one of the eyes wasn't aligned correctly or something so it was not pleasant to look at, to put it lightly)

rough lintel
#

NO...

next plaza
#

Yes

rough lintel
#

you have skills and you're putting them to use for EVIL things

next plaza
#

And I have proof

rough lintel
#

i love that. keep it up

tiny zealot
next plaza
rough lintel
#

oh krobus is still around? LMAO

next plaza
next plaza
rough lintel
next plaza
#

I think over half of the remaining activity isn't SDV, too

rough lintel
#

understandable tbh

lucid mulch
rough lintel
#

ok huge question since the coders are in chat: none of you do code comms, do you?

lucid mulch
#

code comms?

rough lintel
#

nodnod

next plaza
calm nebula
#

There are people who do

#

I personally do not

rough lintel
#

yeah i am looking at the wiki, but i know it can be out of date sometimes

#

and like 90% of the coders are on hiatus or havent made a mod in like a year

calm nebula
#

Anyways just pitch your idea

rough lintel
#

oh you already know my idea atra.

calm nebula
#

Mysterious. I have also not made a mod in a year

next plaza
#

I think my most recent ideas for automation in SDV was for MMR 2.0 (since MMR was going to be sorta spaced along the entire game, not solely end game)

#

(MMR 1.0 never happened though, or even 0.1, so who knows at this point)

calm nebula
rough lintel
#

you already know how ive been yapping about interaction tweaks and the toggle for buying missing mats from robin 🤣

calm nebula
#

Remind me because I'm exhausted

#

Ahhh yeah

rough lintel
#

i posted it on the mod ideas github but i have no faith in the free market

fallow grotto
#

i cant unpack the xnb, anyone know why?

next plaza
lucid mulch
#

use StardewXNBHack instead

next plaza
#

Also I'm just not SDV-ing at the moment, so there's taht

rough lintel
next plaza
rough lintel
#

LMAO

#

i thankfully muted the notifs on it and only came back to add tags to stuff like a few days ago

#

tia reminded me it existed

calm nebula
#

But I'm goop on the floor

rough lintel
#

what is "nerdsniped"

lucid mulch
rough lintel
#

wait i googled it. this is an amazing term

next plaza
# lucid iron i only get nerdsnipped

That's been happening to me a lot lately, like the rabbithole for my nested browser tabs but horizontal the other day. I didn't do it because of the lack of documentation for non-WebExtension FF addons though. (Meaning it would take way too long for current attention span)

lucid iron
#

tbh if u just present ur idea here the outcome is like

  • someone tells u no need C# sorry
  • someone tells u <elaborate 4 framework setup to do what you want>
  • someone adds it to their definitely not a person-core mod for u
next plaza
lucid iron
#

oh and ofc someone says "yea thats in spacecore/betas/etc"

lucid mulch
#

I'm mostly happy in my Tooling space, and my side gig of Multiplayer mods

calm nebula
rough lintel
#

god i wish it was in spacecore

gaunt orbit
#

I want to mod rn but I have to restrain myself bc I'm very low energy atm and I tend to ignore my body when I get deep into it. Which is. Not good if I am recovering from an illness and do in fact need to listen to my body.

lucid iron
#

what do u want exactly LilyDerp

rough lintel
#

remember when you walked me through what to do to recreate it

next plaza
rough lintel
#

and update it to 1.6

next plaza
#

Yes, you read that right - SDV person-core naming conventions come from MC modding

rough lintel
#

and i was like. haha yeah ill definitely do that! and then i didnt do it

lucid iron
#

oh we assigned it to @gentle rose \j

rough lintel
#

KEKW

lucid iron
#

i actually think it's a good baby's first C# mod though

lucid mulch
#

(also minecraft modding, CoreMod had special meaning as they got to load first or do bytecode patching or something)

next plaza
lucid iron
#

you can ditch the ui aspect and just do the calculate and purchase material thing

rough lintel
#

sonic shoes was my baby's first c# mod and that was like 4 hours of just taking one line of pathos code

lucid iron
#

i wont even judge you for hardcoding prices

gaunt orbit
rough lintel
#

yes LMAO

next plaza
# rough lintel trendsetterrrrrr

It's hard not to be a trend setter when you've been in the community since the beginning. 😛

JA popularized content packs enough for SMAPI to support it rather than them needing to go in a folder in the framework mod's folder.

(Technically Advanced Location Loader existed first, but it wasn't really used much, hence JA "popularizing" it rather than "inventing" it)

rough lintel
#

i wanted to make the hermes boots on the mod ideas github so i did that

lucid iron
rough lintel
#

i think i updated sonic shoes to 1.6 SDVpufferclueless

lucid iron
#

i believe in u and rmbr u can just ask if u r stuc

gaunt orbit
#

I had to stop using it though because at the time the game could crash if you tried to load a save thumbnail wearing boots that were from an uninstalled mod

next plaza
rough lintel
#

oh no no no im not doing it chu i looked at it for like 2 hours and tapped out LMAO

lucid iron
#

dont look at the original elaborate mod

royal stump
rough lintel
#

😩

lucid iron
#

do just the purchase feature

rough lintel
#

oouuuugh.....

lucid iron
#

and as mentioned u can just have it activate on a keybind for a poc

#

dont worry about menu at first

rough lintel
#

ok. ok. fine. baby's first actual 1.6 c# mod

#

i. will do it.

#

im just thinking of the math equations i have to do and i already know im gonna bork syntax

#

because my brain still cant think in c# after all this time

next plaza
rough lintel
#

unfortunate side effect of being english major-adjacent

next plaza
rough lintel
#

ok, so i think my first order of business should be to grab the current blueprint thats showing in the carpentermenu, right? and displaying what that is + its building mats?

#

and by displaying i mean printing to the log for my purposes to make sure im targeting the right thing

#

and grabbing the right.data.?

#

but i dont know what variable id grab of the blueprint, because index doesnt seem right, and skin seems to be the thing it grabs a lot

lucid iron
#

yea u want the CarpenterMenu.Blueprint

#

so basically u must first know that the activeclickable menu is CarpenterMenu

rough lintel
#

uh huh

lucid iron
#

since u r just doing it in the buttonschanged handler for now u can just check in there i think

#
if (Game1.activeClickableMenu is CarpenterMenu carpenterMenu)
{
  List<Item> ingredients = carpenterMenu.ingredients;
  // do buying stuff here
}
#

ig u can just use ingredients directly actually

rough lintel
#

do i need to set special variables for old price, the amount of wood needed, the amount of stone needed, and the new price yet

#

or can i like grab something from here
this.ingredients.Add(ItemRegistry.Create(material.ItemId, material.Amount));

#

wait shit

#

ok there we go

#

but i guess the ItemId has to match wood and stone only

fallen sun
#

Is there a mod that gets rid of the trash while fishing on the ocean farm?

rough lintel
#

the item.QualifiedItemId is the (O)388 thing, right? or would i just do 388 in code and not (o)388

round timber
rough lintel
#

also, i am noticing robin's shopdata doesnt specify a price for wood... it just has -1 as the price. wiki says its 10g and increases to 50g, but like... what.

sour sleet
#

I'm currently making a custom obelisk. Will it automatically count for 100% completion?

brittle pasture
#

no

sour sleet
#

Is there a way to make it count?

brittle pasture
#

with c# anything is possible

#

that's just a fancy way of saying no frameworks for it yet lol

gaunt orbit
#

A perfection framework? Oh no.

sour sleet
#

I'm planning on learning C# in the future - seems to be needed for making brand new features for sdv

tiny zealot
#

if i classify an object as Cooking, it will be checked for perfection (even if there is no recipe) and there's no property to bypass that, right? so i should avoid this?

calm nebula
#

Selph found this cursed fact the other day

sour sleet
#

Yep that's right

royal stump
#

I think cooking just looks at the recipe list, not everything in objects? (defer to anybody who's tested that, though)

calm nebula
#

Oh right yes it does

#

Except the cooking tab on the collections menu looks at the (normal) cooking quality

drowsy pewter
rough lintel
#

do you happen to know where its hardcoded

drowsy pewter
#

not a clue

rough lintel
#

prrbt. ok

tiny zealot
royal stump
#

SDVpufferlurk found where the wood price hike is hidden, Object.salePrice

case "(O)388":
if (Game1.year <= 1)
{
  return 10;
}
  return 50;
#

whereas I think clint's similar hike is in data (along with the mail about both)

rough lintel
#

ok, so i know how to access the player inventory with Game1.player.Items, but the way that the carpenter menu checks ingredients is by ingredient.QualifiedItemId, ingredient.Stack. so how would i be able to ONLY grab the ingredient if it matches 388 and 390, and then grab the amount required?

#

game1.player.items(wood, wood stack) and compare it to... ingredient.... how

#

ingredient.Stack = remaining wood required, but. i need to make sure its that number im checking against. i guess im asking how i make sure im not just subtracting random shit from the ingredient list

#

because there's other things in the ingredient list obviously, i just. Bwah.

#

also is ObjectFactory even used to get items anymore or is that old style grabby stuff

#

like, if i created woodObject = item.QualifiedItemId == "(O)388";, would i be able to do woodObject.salePrice or no

royal stump
#

salePrice is a method, not a field/property, so you can't set it; normally it's based on price, which you can set, but wood and a few other things just entirely ignore it

rough lintel
#

i can get it though, right?

#

like if i were doing a math equation?

#

i could do something * woodObject.salePrice()?

royal stump
#

oh, if you just need to get it, yeah, you can call that method

rough lintel
#

okay sick, yippee

uncut viper
# next plaza <@78657757846188032> Noticed BETAS has a trigger action action for player mod da...

other mod data like current location and farm ive considered, farm moreso mostly for the same reason as current player, bc its always accessible and no need to worry about host/client shadow world discrepencies (which is why i havent wanted to add one for NPCs or arbitrary locations, bc i do want to keep BETAS as multiplayer friendly as possible and things dealing with the shadow world makes that a pain)
CP tokens though i consider out of scope for BETAS, i try to keep it pretty standalone (with the PatchUpdate command being the sole exception due to its potential usefulness) otherwise i want everything in BETAS to be just as usable in a random C# mod as it is in a CP mod, generally. a different mod more focused on extra CP tokens is where id place mod-data reading tokens if i had such a mod, but otherwise i just recommend EMP or tokenizable strings where usable

#

(and i dont really have any ideas for CP tokens besides mod reading ones that already exist in EMP or a stat token that... also exists in EMP, so ive not got enough token ideas to justify a mod for adding more)

#

the only reason i dont have mod data for the farm already is just cuz i havent gotten to it yet ¯_(ツ)_/¯

boreal pulsar
#

what should I write for these fields in the quest content string if I dont want to add a value? /./ ? or //?
from checking the data in game I only see very few examples where its using a dot like here:
"Basic/Copper Ore/You found a piece of copper ore. You're not sure what you can use it for, but the local blacksmith ought to know./Bring a piece of copper ore to Clint's blacksmith shop././-1/0/-1/false",

lucid mulch
#

//

next plaza
rough lintel
#

ok i think i need to take a break from this, i feel like im running in circles

#

goodnight friends

boreal pulsar
# lucid mulch `//`

its so weird toh theres not a single example of that implemented in the game code

uncut viper
#

(actually i guess it also uses -1 for relatively newer basic quests instead of null, but the point remains, it dont matter)

boreal pulsar
#

Yeah makes sense, no real reason to leave them empty now that I think about it

#

I'm wonder how basic quests work. Most quests I plan to add are "Basic" so they require some external trigger
I guess whenever a certain action happens they receive a signal?
Very curious of finding that out but I'ma first implement the non Basic ones

uncut viper
#

there is no signal for a basic trigger at all

#

basic quest*

#

its not very useful for a content pack as the only relevant trigger action, RemoveQuest, doesnt actually complete the quest

#

which i mean, you can still use it ofc, you just need to remove it and give the reward manually, which will be differenmt from what players usually expect, as they wont go to their quest log to collect the money (if there is any)

#

and it wont play a sound when you do so without you playing it manually, via spacecore

boreal pulsar
#

Well all my quests give an item delivered through mail anyway that isn't a big problem

uncut viper
#

then yeah you can just remove it overnight at the same time you send the mail

boreal pulsar
#

But like let's say a quest asks you to how 350 ground tiles
Or
Complete the community centre
Or idk gift 400 blueberries to Clint
How would that be tracked

uncut viper
#

well, the ground tiles one cant be tracked with CP

#

CP alone, anyway

#

the ItemDelivery quest can do the blueberries one and it WOULD receive a signal, though you'd have to give 400 blueberries at once i think?

#

yeah you'd need to do all of em at once

#

the community center one would be a Basic one that you'd just check for the relevant mail flags manually for

lucid mulch
uncut viper
#

(i lied about the ground tiles, theres a vanilla DirtHoed stat)

#

wouldnt be able to do "do 350 tiles from this point on" with CP alone though

#

just "350 since the start of your save"

#

... unless you manually reset their stat to 0, i guess. id not recommend that

boreal pulsar
uncut viper
#

you do not add custom logic without C#