#making-mods-general

1 messages · Page 365 of 1

knotty echo
#

it serves quite a niche group of people, however i think it is an interesting pursuit anyhow, from a game design perspective

I am going to start working on an all-in-one vegan stardew mod. currently there are 2 vegan mods in 1.6, one that veganizes recipes and ingredients, and one that tweaks the CC bundles to not use animal products. these are cool, but so much more could be done!

I want to create a more whole experience, while changing the base game as little as possible. Re-naming and re-branding existing features while staying logical

I am going to re-brand fishing into "Grabber Fishing" where you use a trash grabber to clean up the oceans. all of the fish will be re-textured and re-named to some joja packed food or something of that sort. willy's will be re-branded as a recycling/cleanup shop

Barns and coops will turn into an adoption-sactuary thing, as opposed to profit makers. they will serve as pets essentially, that will occasionally bring gifts to you, like seeds, rare items, or other vegan goods, instead of animal products (coops will produce fertilizer from the eggs i reckon, cows and goats just wont produce milk). not sure what will be done with the animal-related skill levels

recipes will all be tweaked to be vegan--this will basically just be renaming things. to get vegan milk and eggs, some system will have to be created--i havent figured that out yet

apart from cheese/mayo as money makers/food, not much of the base game changes, and it is mostly a facade. basically everything is just a content patcher mod

opaque field
#

ooh! You can maybe implement a 'nut milk' machine for dairy alternatives or an 'oat milk' recipe?

slow basin
#

i have some beta personalities planned for the twin ringleaders

  • the brother will be kind of a boastful personality

  • the female twin will be someone with an interest in magic (she cant do real magic) but she loves learning and prtending to do it, she'll be magician coded and will have a small animal companion (idk what kind yet though) and is slightly mischevious

#

might give her an uinconventialn magicians pet like a chicken or something or maybe hm m aybe a baby elephant named Ellie that could also be cute

#

or i could also give her doves for tricks

#

let her have a ,little apiary bird thing box

opaque field
#

I love the unconventional magician's pet idea ❤️ the twins sound delightful

knotty echo
# opaque field ooh! You can maybe implement a 'nut milk' machine for dairy alternatives or an '...

one of the existing vegan recipe mods uses the oil press thing or persere jars on cocunuts and rice and stuff which seems interesting. and theres already a cheese press

im not sure how balanced that is from a game-design perspective though so i'd need to crunch numbers

but i think that would still be pretty viable in terms of access to those materials at least. not sure how many milkable crops stardew has

#

not sure how many milkable crops stardew has
thats a new sentance

blissful panther
#

I mean technically, any crop is milkable.

opaque field
#

hm, good point, I think WAG (Wildflour Atelier Goods) actually has a nut milk/nutflour machine and adds some nuts as crops if you wanna maybe take a look there for ideas?

#

maybe you can fish for cartons of the milks? XD

#

ooh! make a tofufish

#

now I wanna sprite what that would even look like

knotty echo
knotty echo
opaque field
#

reskin the chickens to be 'tofurkey'[

gentle rose
#

pretty sure tofu is soy based SDVpuffersquee

opaque field
#

oop you're right

slow basin
#

when i get to map making im gonna be asking people in here on their opnions on map size LMAO

buoyant solstice
opaque field
#

ignore me lol (still gonna sprite a tofish)

slow basin
#

I have this idea of the big top being on a hill with some parking spaces below with a couple houses and an area dedicated to some trailers

#

obvi theyll be stand ins and ill tell people they can edit my map to add their own addons though :3

#

that way they can customize their houses

blissful panther
#

On the animal sanctuary front, what if we had each animal you have give a small buff to compensate for some animals not giving produce?

knotty echo
knotty echo
#

villagers? townsfolk?

buoyant solstice
opaque field
#

Tempeh is vegan right?

ocean sailBOT
#

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

gentle rose
#

(did you guys know most gummy candy in the west isn't vegan? or even vegetarian!)

blissful panther
#

(Don't look up why if you're easily grossed out. SDVkrobusgiggle)

knotty echo
knotty echo
knotty echo
slow basin
#

i think was it japan that uses agar agar which i thiiink is vegan right? lemme check

blissful panther
knotty echo
#

pectin is a common replacement of gelatin

slow basin
#

it is!

gentle rose
#

in countries with high numbers of people observing halal, it can be common to use agar agar or plant based gelatin

slow basin
#

agar agar is made from red algae and is vegan :3

knotty echo
crude plank
#

i guess the question is the west of whatSMCPufferSquee

knotty echo
opaque field
#

I have chickens that occasionally lay eggs that give a conversation bonus :3 def doable

knotty echo
#

fuzzy peach maynards are vegan though 🙏

opaque field
#

I put tofish and tempefish ideas in making-mods-art if anyone's interested lol

buoyant solstice
knotty echo
#

:D

static garden
#

I need to ask one more silly question U_U
after marriage dialogs on desert festival disappeared
does it means I need to write dialogs in Marriage dialogs for the same date?

floral stratus
# knotty echo :D

When I made my mod for Minecraft "Cocktails Delight", I made recipes for the cheeses from Brewin' and Chewin' to be made with soymilk and the keg/wrapping on the cheese to be made with soy wax. Not even vegan, I just wanted compatibility with Vegan Delight.

royal stump
# static garden I need to ask one more silly question U_U after marriage dialogs on desert festi...

I think that's controlled by schedules, which should have versions that start with marriage_
https://stardewvalleywiki.com/Modding:Schedule_data#Marriage_schedules
so you'd want marriage and non-marriage schedules like the base game characters, e.g.

"marriage_DesertFestival_1": "800 Desert 8 10 2 \"Strings\\1_6_Strings:DesertFestival_Abigail_marriage\"/2530 bed",
"DesertFestival_1": "610 SeedShop 39 5 0/830 Desert 23 64 3 \"Strings\\1_6_Strings:DesertFestival_Abigail\"/2530 SeedShop 1 9 3 abigail_sleep",```
(the `DesertFestival_Abigail_marriage` string text isn't required though, it's just loading text from that key)
static garden
slow basin
#

is it ok to edit vanilla assets for a mod

#

i thought i might use the basic fall fair tent and stretch it for a full sized tent

#

or should i just use its shape a s abse instead

brittle pasture
#

should be fine

slow basin
#

tippee

#

*yippeee

#

ty

#

❤️

pine elbow
#

haii

modest dust
#

haiii

#

i wanted to ask if anyone here could teach me how to make my own crop mod?

halcyon nest
halcyon nest
modest dust
#

since i wanna add some themed crops to da game and havent bene able to found a good tutorial anywhere

#

so i decided to come here :D

halcyon nest
blissful panther
modest dust
#

ive never made a mod for stardew valley before, how would i setup the mod and stuff aswell?

modest dust
halcyon nest
blissful panther
modest dust
#

i am 100% new, so i'll follow the one u sent first :p

#

i mean, im not new to modding in general, but when it comes to stardew, then im 100% new

#

(i used to mod minecraft)

#

anyway

blissful panther
#

Oh, well you've gone from hard mode to easy mode with Stardew then.

finite willow
#

is there a way to launch events?

modest dust
#

i am doing this more or less cuz i have too much free time and dont feel like doing anything else

halcyon nest
#

REAL

modest dust
#

how would i check the latest version (for the "Format" thingy)?

modest dust
halcyon nest
#

hold on I got hi

#

chu

modest dust
#

alr

halcyon nest
#

This will always tell u the latest version of content patcher

#

It also gives tips as well for how to do certain things! (It was. Practically my bible when I first started out LOL)

modest dust
#

oki thank u

#

i need textures PAIN_PAIN_PAIN

#

does anyone have a texture template for a crop??

#

😭

brittle pasture
#

!unpack the game for them

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!

brittle pasture
#

you need a crop sprite and an object sprite for the harvest item

#

tilesheets/crops is where the game stores the crop sprites

obtuse wigeon
#

Hi, Making loads of paths with Content Patcher, adding them new not modifying existing ones, but they share a loads of traits with each other, specifically all these traits

"PlacementSound": "coin",
"RemovalSound": "coin",
"RemovalDebrisType": 14,
"FootstepSound": "sandyStep",
"ConnectType": "Default",
"ShadowType": "None",
"CornerSize": 0,
"FarmSpeedBuff": -1.0

Is there a way to avoid adding these all the time and only add one line? like a variable? i.e. sharedData = <all that data> or def sharedData = <all that data>

obtuse wigeon
#

I think thats the kind of thing im looking for, however a bit confused with it, the example it gives is "{{ModId}}_{{IdSuffix}}": "{{ModId}}_{{IdSuffix}}/{{Description}}/true/true//{{DisplayName}}/4/{{TextureNameInData}}", what does the true and 4 parts mean? they aren't included in the local token definition

brittle pasture
#

those are just part of the string

#

not part of any token

#

those would correspond to the common fields you listed above

vernal crest
#

That's just because hat data is a string

#

I've got an example of local tokens for a Data/Objects patch above too, I'll find that.

obtuse wigeon
#

so if it was being written for a path it would be "{{ModId}}_{{IdSuffix}}": "{{PlacementSound}}/{{RemovalSound}}/{{RemoveDebrisType}}/{{FootstepSound}}"?

vernal crest
#

You might need to scroll around a bit if the link doesn't go straight to it

#

No, you need to format the fields the same way you've got them now

#

Don't turn it into a string

modest dust
brittle pasture
#

sure

vernal crest
#

Just instead of writing

"PlacementSound": "coin",
"RemovalSound": "coin",
// Etc

You'd do

"PlacementSound": "{{localToken.placeSound}}",
"RemovalSound": "{{localToken.removeSound}}",
// Etc
obtuse wigeon
#

Ahhhh gotcha I think I understand it now, so I write a pathData.json file with the data that is the same, then in content.json I add "FromFile": "data/pathData.json", followed by LocalTokens field with the data thats different between them?

obtuse wigeon
#

unfortunatly that doesn't quite fit what I wanted, it was mostly to avoid excess bloat to the file and make it easier to read

vernal crest
#

You write the entire path patch in your pathData.json file only anywhere that the field value would differ between different paths, you put a token in as the value instead.

vernal crest
valid folio
#

Hi, how are you all? Yesterday I wanted to do my good deed of the day and I was helping a guy with a Wild Trees mod. I got it to load properly, no errors, I read the relevant documentation, but… the seed refuses to be planted. Could you please help me? I’m not sure where I’m messing up.

brittle pasture
#

post the code?

valid folio
obtuse wigeon
brittle pasture
#

both

vernal crest
modest dust
#

i need help, what my question is is if the {{ModId}}/objects and {{ModId}}/crops are in assets/ or in the mod folder itself?

#

i think in assets..?

obtuse wigeon
vernal crest
vernal crest
brittle pasture
#

[[Modding:Fruit_trees]] pls redirect that person to read the wiki

obtuse wigeon
valid folio
vernal crest
#

It feels kind of weird for you to jump in and ask someone to DM you for help when I'm actively helping them and you're asking for help yourself.

brittle pasture
modest dust
#

for the crop mod im making:

#

im tired and have no clue what language is anymore PAIN_PAIN_PAIN

valid folio
vernal crest
modest dust
#

if that helps-

brittle pasture
vernal crest
vernal crest
# modest dust i could give you the manifest.json file of the content patcher mod?

The manifest won't matter much in this situation. If you're having trouble following it, try switching to the "first content patcher pack" tutorial first and see if that is easier. Crops aren't the easiest thing to start with if you're finding CP a bit overwhelming.

Also being tired doesn't help! Having a rest and trying again is often a good idea too.

vernal crest
valid folio
modest dust
vernal crest
obtuse wigeon
valid folio
vernal crest
# obtuse wigeon I think so, include makes it so you can reference patches from another file into...

Yup basically. CP essentially combines the content of the included file into the content.json and then runs that. When we're not using local tokens, we use includes just to organise our json in a way that our human brains can follow more easily.

So to bring local tokens into the mix, they're tokens that are used only inside one include file rather than across the entirety of the content.json. This allows us to write a Data/FloorsAndPaths patch just once inside the included file, using local tokens instead of static values where we want the value to change every time we call the patch. It's basically like writing a method where the local tokens are arguments.

vernal crest
#

For the sake of this example, let's say you wanted to have five different paths where all the values were identical except that they all played a different sound when the farmer walked on them. You'd write your Data/FloorsAndPaths patch in floorData.json and it'd look like this (I take this straight from vanilla btw):

// Pretend there's an actual EditData patch here that contains the following
"0": {
    "Id": "0",
    "ItemId": "328",
    "Texture": "TerrainFeatures\\Flooring",
    "Corner": {
      "X": 0,
      "Y": 0
    },
    "WinterTexture": "TerrainFeatures\\Flooring_winter",
    "WinterCorner": {
      "X": 0,
      "Y": 0
    },
    "PlacementSound": "axchop",
    "RemovalSound": null,
    "RemovalDebrisType": 12,
    "FootstepSound": "{{walkSound}}",
    "ConnectType": "Default",
    "ShadowType": "Square",
    "CornerSize": 4,
    "FarmSpeedBuff": -1.0
  },

Notice how all the values are static (as in, every time this patch is called the values are going to be the same) EXCEPT FootstepSound, where I've added the token (as indicated by the double curly braces) {{walkSound}}.

#

(Sorry by the way if any of this is too dumbed down. Not sure where your knowledge is at except your reference to python so I am sort of going for a mix of "has never come across these concepts before" and "knows python" lol)

obtuse wigeon
vernal crest
#

Okay so in the content.json you want to write one patch that calls this file for every different sound that needs to play. So we will have five patches here, but they won't include all the data that's in floorData.json. Instead they will look like this:

{ // Patch one
  "Action": "Include",
  "FromFile": "data/floorData.json"
  "LocalTokens": {
    "walkSound": "woodyStep"
  }
},
{ // Patch two
  "Action": "Include",
  "FromFile": "data/floorData.json"
  "LocalTokens": {
    "walkSound": "stoneStep"
  }
},
{ // Patch three
  "Action": "Include",
  "FromFile": "data/floorData.json"
  "LocalTokens": {
    "walkSound": "thudStep"
  }
},
// ETC for the last two
#

When Content Patcher runs, it will repeat the patch inside floorData.json five times. Each of those five times it will substitute in a different sound in the order they're listed in your content.json (so in this case woodyStep, then stoneStep, then thudStep).

Is that making sense?

obtuse wigeon
#

Yes, that makes sense, just to check I've got this right, If i want a different name for each I have this in floorData.json:

{
      "Action": "EditData",
      "Target": "Data/Objects",
      "Entries": {
        "{{NewPathName}}": {
          "Name": "{{NewPathName}}",
          "DisplayName": "{{DisplayName}}",
          "Description": "{{Description}}",
          "Type": "Crafting",
          "Category": -24,
          "Price": 1,
          "Texture": "{{ModId}}/floor",
          "SpriteIndex": 0
        },
      }
    },
#

then this in content.json

  "Changes": [
    {
      "Action": "Load",
      "Target": "{{ModId}}/floor",
      "FromFile": "assets/floor.png"
    },

{ // Patch one
  "Action": "Include",
  "FromFile": "data/floorData.json"
  "LocalTokens": {
    "NewPathName": "{{ModID}}_NewPath1"
    "DisplayName": New Path 1",
    <etc>
  }
vernal crest
#

Yup that is looking right to me! You can local token your sprite indexes too (and in fact will have to if they're different)

#

You might find you do all this and then look at your mod and go "hmm, I don't really feel like I saved much work here" because when your include patches are quite small or there's only one of them it can be pretty similar. However, learning how to use them opens up much bigger horizons xD

obtuse wigeon
ivory plume
vernal crest
obtuse wigeon
#

just a side question, can local tokens go in i18n translation tokens? i.e. "{{i18n:{{NewPathName}}.DisplayName}}"

vernal crest
#

Sure can

obtuse wigeon
#

perfect, that makes it easier yet again

vernal crest
#

This is one of my description fields: "Description": "{{i18n: sculpture.description |name.animal.plural={{Lowercase: {{i18n: name.{{I18nIdentifier}}.plural }} }} }}",

blissful panther
#

(Just imagining Stardew modding without Content Patcher... puffer_sweat)

ivory plume
#

(C# everywhere!)

obtuse wigeon
vernal crest
obtuse wigeon
#

One other thing I forgot to ask, is there a specific location that floorData.json needs to be? or is next to content.json okay?

#

If i'm adding more things to the mod in the future I might want to put floorData,json in the subfolder pathways

blissful panther
#

Directory structure is essentially completely arbitrary within your own CP pack.

vernal crest
#

Yup

whole raptor
ivory plume
#

The convention I've been using is a patches folder for included files, to keep it organized. It can be anything you want though.

torpid sparrow
#

Hello quick question, am I able to reduce the player's friendship with an NPC using friendship <npc> <amount> and setting the amount to negative?

#

during an event^

ivory plume
#

Yep.

torpid sparrow
#

thank u!

#

had to make sure

vernal crest
#

I put my include files in my data folder with my other .json files

obtuse wigeon
sweet wharf
#

I want to make a spouse room and area for my NPC but I can't seem to find a tutorial on the wiki page for it, I found the vanilla spouse rooms, but if there's a good tutorial that anyone knows of, let me know

vernal crest
#

As long as your FromFile field in your include patch is correctly pointing to your floorData.json, it will work.

#

You don't add the path to the token itself.

ivory plume
#

(All local file paths are relative to your content.json, regardless of the included file's location.)

obtuse wigeon
#

Thank you all very much for your help, time to get cracking

vernal crest
#

That was a satisfying conclusion to staying up later than I really should have, hooray!

#

I love it when people learn the thing instead of giving up.

blissful panther
#

This is how I've structured the data for an NPC (with a censored name, because it's a reference to something from this channel, and the surprise will be nice):

├── Assets
│   ├── Maps
│   └── NPCs
│       └── NPCName
│           ├── Portrait.aseprite
│           ├── Portrait.png
│           ├── Sprites.aseprite
│           └── Sprites.png
├── Data
│   ├── Maps
│   │   └── Patches
│   │       ├── ForestPatches.json
│   │       ├── ForestPatches_SVE.json
│   │       └── Includes.json
│   └── NPCs
│       └── NPCName
│           ├── Dialogue.json
│           ├── Disposition.json
│           ├── Events.json
│           ├── GiftTastes.json
│           ├── Includes.json
│           ├── Schedule.json
│           └── Schedule_SVE.json
├── content.json
└── manifest.json

Nothing in the maps assets directory... yet.

vernal crest
#

(It is still their prerogative to decide not to pursue it further of course. I just like it more when teaching them if they succeed haha)

#

That is a beautiful file tree alab

#

Pls share your secret

obtuse wigeon
#

I agree please share the file tree secret, that is wonderful

ashen urchin
#

"^" for paragraph change, "@" for left arrow, ">" for right arrow, and "`" for up arrow. So what character to make down arrow output?

Context: for entry in Strings/StringsFromMaps

calm nebula
#

There isn't one

blissful panther
vernal crest
#

How did you get it into discord? Just copy and paste?

#

Also drat this won't work for me because usually I am trying to describe imaginary directory structures lol

blissful panther
#

Just pasted it into a code block, yeah.

And yeah, this is just for an existing folder structure.

vernal crest
#

Atra replied to you. There isn't one.

opaque field
#

So, I noticed the aseprite files in your folder, do you need those AND the pngs for making NPCs?

obtuse wigeon
vernal crest
obtuse wigeon
#

available on winget, and very easy to use

vernal crest
#

The png files are what the game needs but it seems a bit wild to only work in png format

opaque field
#

I have aseprite files too :p

vernal crest
#

Why were you asking then? /confused

opaque field
#

they exist but not in my game folder, so I'm gonna add them now

vernal crest
#

The game won't know they are there

#

Whether you have them in the mod folder or not is personal preference

#

I put a tonne of non-mod stuff inside my mod folder while I work on them and then yeet it all for release

opaque field
#

ohhhh okay.

ashen urchin
#

Help me please guys

If "^" for paragraph change, "@" for left arrow, ">" for right arrow, and "`" for up arrow. So what character to make down arrow output?

Context: for entry in Strings/StringsFromMaps

vernal crest
ashen urchin
#

I understand now, thanks guys

modest dust
#

can someone show me the file tree of a crop mod?

modest dust
#

?

#

cuz idk where to put what files n such

whole raptor
#

Wherever you want and feel like it's organized for you tbh

modest dust
#

imma take a break from this

#

cuz like its not working and im too tired

obtuse wigeon
uncut viper
obtuse wigeon
#

Perfect! Thank you Button

pine elbow
#

doing good after learning about json

urban patrol
#

what’s the convention for translation of things like NPC names? should those be i18nified as well, or do people generally leave those alone since it’s just a name?

gentle rose
#

if there is, it definitely should be i18ned

whole raptor
#

I've had people ask me to put it in i18n, since they might want to use their alphabet for it I guess

gentle rose
#

oh, true!

#

then yeah it should go in i18n regardless

uncut viper
#

alphabet is what I was thinking too

#

I often just see it left alone though

whole raptor
#

Like Sam -> さむ

#

(Just in katakana)

#

Do official translation translate names? SDVpufferthinkblob

gentle rose
#

as someone who reads in a language in another alphabet, I would definitely expect them to

urban patrol
#

makes sense 👍

gentle rose
#

it would be very strange to see english letters in the middle of text

urban patrol
#

i’ll convert them then

blissful panther
#

Honestly, I would probably recommend just i18nifying it anyway, because there's no good reason not to. Even keeps it nice and central if you want to change the name in one tiny operation as opposed to a big find and replace.

uncut viper
#

i would hope the official game holds itself to higher localization standards SDVpuffersquee

gaunt orbit
#

is tool data not reloaded when language changes?

uncut viper
#

it uses LocalizedText so it shouldnt need to?

#

unless you mean for a custom tool/edited tool data in which case i thought CP invalidated like literally everything when a language changes

brittle pasture
#

I trust past me

royal stump
#

SDVpuffersquint yeah, tools have a lazy load property for descriptions that never get cleared afaict

uncut viper
#

sounds like somethin that might be asked about in the 1.6.16 alpha thread

royal stump
#

probably, yeah

#

description and displayname have the same load code, but displayname is just a direct property => method instead
(so probably not kept for performance reasons)

gaunt orbit
uncut viper
#

i thought items were essentially reconstructed when a save was loaded anyway though

gaunt orbit
#

yeah but if the tool data is never invalidated, then the translations won't be refreshed

uncut viper
#

are they not cached on the actual instance of the item itself?

gaunt orbit
#

I should be using tokenized text anyways, hardcoded translations are lazy and outdated

obtuse wigeon
#

Could someone help me figure out why the item names and desciptions aren't working please
i18n/default.json

{
  "$schema": "https://smapi.io/schemas/i18n.json",
  "NewPathItem.DisplayName": "Testing Path",
  "NewPathItem.Description": "Place on the ground to create paths"
}

content.json

{
  "$schema": "https://smapi.io/schemas/content-patcher.json",
  "Format": "2.7.0",
  "Changes": [
    { 
      "Action": "Include",
      "FromFile": "Paths/pathData.json",
      "LocalTokens": {
        "PathNameItem": "{{ModID}}_NewPathItem",
        "PathName": "{{ModID}}_NewPath",
        "TopLeftX": 0,
        "TopLeftY": 0,
        "WinterTopLeftX": 0,
        "WinterTopLeftY": 0
      }
    }
  ]
}

pathData.json

{
  "$schema": "https://smapi.io/schemas/content-patcher.json",
  "Changes": [
    {
      "Action": "Load",
      "Target": "{{ModId}}/floor",
      "FromFile": "Paths/Assets/floor.png"
    },
    {
      "Action": "EditData",
      "Target": "Data/Objects",
      "Entries": {
        "{{ModId}}_{{PathNameItem}}": {
          "Name": "{{ModId}}_{{PathNameItem}}",
          "DisplayName": "{{i18n:{{PathNameItem}}.DisplayName}}",
          "Description": "{{i18n:{{PathNameItem}}.Description}}",
          "Type": "Crafting",
          "Category": -24,
          "Price": 1,
          "Texture": "{{ModId}}/floor",
          "SpriteIndex": 0
        },
      }
    },

(pathData.json isn't the whole file, just the bits with i18n tokens)

royal stump
#

(re: button)
the descriptions are on the instance (and XmlIgnore, so not serialized), so I'd assume reloading would fix them, just not the base game tokens or language swaps

uncut viper
gaunt orbit
#

I dunno, I just had someone report translations not applying to the tools added by hhd even though I'm using translation keys, which implies that the content pipeline simply isn't being called for tool data specifically when language gets changed

#

switching to localized text tokens will probably fix it one way or another

obtuse wigeon
uncut viper
#

(CP does update every patch and invalidate the assets they touch on a locale change and the only way you can change languages is from the title screen SDVpufferthink so i guess im just not understanding the pipeline and caching flows here very well to understand why theres a problem)

gaunt orbit
#

I'm not using CP I'm using c#

uncut viper
#

still kinda confuses me but a little less so i guess
still probably maybe worth bringing up for the 1.6.16 alpha

royal stump
#

(I may have forgotten there's no language toggle in the mid-play menu SDVpufferflat)

obtuse wigeon
#

Using Content Pacher can I use Include in another Include file? e.g.
content.json

"Changes": [
  { 
  "Action": "Include",
  "FromFile": "Paths/customPaths.json",
  }
]

customPaths.json

"Changes": [
    { 
      "Action": "Include",
      "FromFile": "Paths/pathData.json",
      "LocalTokens": {
        <etc>
      }
    }
]

pathData.json

<Other Content with {{tokens}}>
#

if this is possible, is it considered bad practice or personal preference?

uncut viper
#

you can put an Include in an Included file yes

royal stump
#

yeah, switching languages does a lot of reloading and would provoke stuff like this easily if anything's missed

obtuse wigeon
uncut viper
#

the performance implications of doing so are not something you should worry about

#

other than that, its personal preference and up to your organizational preferences

obtuse wigeon
#

Gotcha, Thank you very much

gaunt orbit
uncut viper
#

a bug is still a bug, even if theres a workaround

torpid sparrow
#

is there a way for me to force the player and an npc to break up through an event

gaunt orbit
#

can you use text tokens for furniture display names?

#

looking at the decompile and the answer seems to be yes

obtuse wigeon
#

Is there a maximum size a png can be for Content Patcher to load? its not going to replace any files, I thought there was but I can't find it in the documentation

hard fern
uncut viper
#

4096x4096 generally considered the max

royal stump
#

yeah, I'm not aware of any explicit limits in the content pipeline or CP itself
just the practical case of "most users do not have the ram to load a 20k^2 sprite"

gaunt orbit
#

the unfortunate hazards of slash-delimited data

uncut viper
#

gotta reverse the direction of your slashes

gaunt orbit
#

yeah

obtuse wigeon
#

4 times the size I was planning on having as the max, wonderful

hard fern
#

This game is kinda small, (in terms of pixels) so things usually aren't that big

obtuse wigeon
#

Really what I was hoping is the tilesheets in vanilla aren't the max which seems to be the case, I can let my (limited) creativity flow

royal stump
#

(lol)

public static int MaxTextureSize = 4096;
public GameRunner()
{
//...
GameRunner.MaxTextureSize = int.MaxValue;```
#

I think the game has stopped clamping things to that number, but it's still a practical limit for players' sake

uncut viper
#

its the lowest to really be considered safe for most GPUs iirc

#

er, highest

royal stump
#

things like spritesheets used to risk hitting that as people added items/etc, but it's better to split those into separate sprites in any case, and the data models support doing that now

obtuse wigeon
#

the actual sprite png thatll be shipped with my mod will be so much smaller, no bigger than needed, its just for testing on my end so I don't have to fiddle with canvas size constantly

halcyon nest
#

As much as I love the process of making farm maps I need rest too-

#

I’m trying to experiment a bit with cliffs this time since my other farms. Didnt really do that LOL

valid folio
lime sand
#

Hi! Sorry if people have asked this a billion times before. But is there anywhere you guys recommend a total newbie to learn about modding? Anywhere I look I can find how to install already made mods, but I want to make my own mods.
Thank you in advance!

brittle pasture
#

TapItems is a list like ChopItems

#

also you have excess closing braces

tiny zealot
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.

valid folio
tiny zealot
brittle pasture
valid folio
brittle pasture
#

yea

tiny zealot
brittle pasture
#

it's probably easier to just copy one of them and modify it

valid folio
lime sand
#

Thank you so much! Im going to start there, you guys will probably start see me here often 😁

urban patrol
#

welcome to modding SDVpufferheart

tiny zealot
#

glad to have you with us SDVpufferthumbsup

urban patrol
torpid sparrow
#

Norp

uncut viper
#

there is no way in vanilla to change rhe relationship via an event

urban patrol
#

space core has this

opaque field
#

Is there something wrong with how my Action Trigger is set up? I just did a run of my 'prologue section' but didn't get my 'assigned path ' letter "CacklingCaracal.TheWolf_BlushPathMail": { "Id": "CacklingCaracal.TheWolf_BlushPathMail", "Trigger": "DayEnding", "Condition": "PLAYER_HAS_SEEN_EVENT Current TheWolf.SlipperySlope, PLAYER_STAT Current BratPoints 0 2", "Action": "AddMail Current {{ModId}}_BlushPathMail" },

brittle pasture
#

!unpack

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!

brittle pasture
#

generally speaking what you're targeting for an edit is what you should look at

urban patrol
uncut viper
urban patrol
#

good to know

torpid sparrow
urban patrol
#

does BETAS have more detailed relationship actions?

torpid sparrow
#

Need to make it so that if you take the Joja route my NPC will break up with u

uncut viper
opaque field
urban patrol
opaque field
#

squinting at the wiki to see if I missed something

uncut viper
#

(it will also have one that simply sets the player to be divorced tonight)

urban patrol
urban patrol
opaque field
#

they send via debug command, how does one check a custom stat?

urban patrol
#

you’re using a GSQ right?

brittle ledge
torpid sparrow
opaque field
#

hmm, I'm using the event command correctly as far as I can tell, but when I check after the event it still says no points have been accumulated.

sweet wharf
#

So, I've got my house for my character in the map, and I don't know how to make the door of the building function with the tile data, how would I put the data square on the door space?

obtuse wigeon
#

Come across an issue with inside corners of my custom paths, my paths dont have a corrent inside part, however vanilla ones (the right path) does, the vanilla path tilesheet doesn't have these parts

lucid iron
#

You need to set the right connection type

#

Since you got brick floor here as working example you can go copy stuff

#

There's also corner size

obtuse wigeon
#

I'm using Content Patcher to make these would that make much of a difference? where do I find the vanilla brick as an example? I looked in the stardew files but couldn't find

latent mauve
#

share your path JSON?

#

Data/FloorsAndPaths is where the vanilla data is stored, IIRC.

hard fern
obtuse wigeon
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.

latent mauve
#

first link

obtuse wigeon
sweet wharf
latent mauve
#

"ConnectType": "Default", may need to be "ConnectType": "Path" as chu stated earlier.

Also, your corner size probably isn't meant to be 0.

#

^ That's directed at AtlasV

#

I'm double-checking the brick path for the type they used.

hard fern
sweet wharf
hard fern
#

I'll try

latent mauve
obtuse wigeon
obtuse wigeon
latent mauve
#

Yes, 4 is a pixel size, specifically it's a 4x4 square.

hard fern
# sweet wharf Could you explain it in better detail, I don't understand what you mean?

So, the map that the house is on, on the door they have a tile data, (every NPC house's front door has it). You can copy and paste that tiledata onto your own front door, but replace any of the location names with the
location name for the inside of your house, and the numbers are the coordinates you get put at when you enter. (So make sure to change the coordinates to match your interior)
(Sorry im not that good at explaining it)

obtuse wigeon
#

I completely missed the mention of corner and connect type on the page somehow

urban patrol
#

is there any way to have the farmer walk backwards/back away during an event? i know i could animate them manually but i don’t know how to move them at the same time

latent mauve
#

You can stop their walk animation as part of the event commands and then move them, most vanilla events use a combination of jump and movement for that.

urban patrol
#

oh jump interesting. do you happen to recall any vanilla events where it happens that i can go look at

latent mauve
#

I think most of those work on the side view, but the concept is the same

urban patrol
#

side view is what i’m doing so that’s great

sweet wharf
latent mauve
#

Lemme look, I'm pretty sure I remember an event that did that, but I want to be sure it isn't using temporary sprite animation nonsense instead

hard fern
obtuse wigeon
#

The CornerSize property alone fixes my issue perfectly, However the path items are invisible, how to I load the item icon from the floor.png, same as the floor tile itself

#
{
         "Action": "EditImage",
         "Target": "{{ModId}}/TerracottaPoolTileItem",
         "FromFile": "Paths/Assets/floor.png",
         "ToArea": { "X": 64, "Y": 64, "Width": 16, "Height": 16 }
      }

My best guess is I do this

latent mauve
urban patrol
#

hmm okay let me try it that way. what event is that in, for reference?

latent mauve
#

the completed Community Center one that starts in Town

urban patrol
#

thank you!

latent mauve
#

I glanced through really quickly, but that seems like it would work

#

Emily's Woods scene might also have her jumping backwards but I didn't fully read through it

urban patrol
#

i'll take a look at that too just in case

latent mauve
#

nic: Characters I remember off the top of my head that get shocked in events: Morris, Emily, Leo. xD

obtuse wigeon
whole raptor
#

Every few months I come back to fix something in the i18nifier, I see how horribly it was written SDVpuffersquint

latent mauve
obtuse wigeon
#

Nope, they just didnt have a texture applied to them,

#

This is what I Added on, I thought it would work but it doesn't

        {
            "Action": "EditImage",
            "Target": "{{ModId}}/TerracottaPoolTileItem",
            "FromFile": "Paths/Assets/floor.png",
            "FromArea": { "X": 64, "Y": 0, "Width": 16, "Height": 16 }
        },
latent mauve
#

I'm sure someone will jump in if I'm wrong, but vanilla shows that format: "Texture": "TerrainFeatures\\Flooring"

twin wadi
obtuse wigeon
#

The Texture loading works fine, cause the placed paths are showing perfectly, I just don't know how to add the texture to the actual item in the inventory, What I thought would work didn't

urban patrol
obtuse wigeon
#

Or is the \\ better for compatability with different systems

latent mauve
#

Well, the one in your inventory is the texture associated with the Data/Objects entry

urban patrol
#

\\ is just an escaped /, which is necessary in some uses

twin wadi
latent mauve
uncut viper
#

the slashes should not matter (assuming you escape as needed)

latent mauve
#

Yeah, I'm looking at the object code a bit more closely now

obtuse wigeon
#

(The spaces are placeholders for other paths to go on) I want the sprite of the path item in the inventry to be the top left of each of those 4x4 path sprites

latent mauve
#

oh, well, your spriteIndex is 0 for the object, so if that's exactly what you loaded, spriteIndex 0 is an empty tile.

#

Could try 4?

#

I think objects default to 16x16 pixel squares per spriteIndex but don't quote me on it

uncut viper
#

they do

#

you can quote me

latent mauve
#

haha, thanks button

obtuse wigeon
#

Ahhh, who would've guessed that the sprite index is important? apparently not me. Im using local tokens in another file to make it easier to add new items as many properties are the same across them all, how ever I get this error when using a token with SpriteIndex

[Content Patcher] Ignored (CP) Atlas of Paths > Include Paths/CustomPaths.json > Include Paths/pathData.json #2 > EditData Data/Objects: Entries > '{{ModId}}_{{PathNameItem}}' value is invalid: '{{SpriteIndex}}' can't be used as a token because that token could not be found.

I think it can't find the token sprite index when its present in the pathData.json and in CustomPaths.json as "SpriteIndex": 4

uncut viper
#

did you actually set it as a localtoken?

hard fern
#

😔 i wish NPCs could have heart levels with each other instead of just the player

#

I don't even know how that works though

uncut viper
#

(i was eating pizza and half paying attention, were jsons sent/have they changed since being sent)

obtuse wigeon
#

I believe so? Its set the same as all the other tokens

    {
      "Action": "EditData",
      "Target": "Data/Objects",
      "Entries": {
        "{{ModId}}_{{PathNameItem}}": {
          "Name": "{{ModId}}_{{PathNameItem}}",
          "DisplayName": "{{i18n:{{PathNameItem}}.DisplayName}}",
          "Description": "{{i18n:{{PathNameItem}}.Description}}",
          "Type": "Crafting",
          "Category": -24,
          "Price": 1,
          "Texture": "{{ModId}}/floor",
          "SpriteIndex": "{{SpriteIndex}}"
        },
      }
    },
uncut viper
#

where are you defining the localtokens?

obtuse wigeon
#
{ 
            "Action": "Include",
            "FromFile": "Paths/pathData.json",
            "LocalTokens": {
                "PathNameItem": "TerracottaPoolTileItem",
                "PathName": "TerracottaPoolTile",
                "SpriteIndex": 4,
                "TopLeftX": 64,
                "TopLeftY": 0,
                "WinterTopLeftX": 0,
                "WinterTopLeftY": 0,
                "CornerSize": 4
            }
        },
#

Here

uncut viper
#

and your Data/Objects patch is inside pathData.json?

obtuse wigeon
#

Yep

#

First block is in pathData.json, second is in CustomPaths.json

uncut viper
#

did you add in the spriteindex token and then do a patch reload? im not 100% sure if adding new ones is a patch-reloadable thing. dont quote me on that one

obtuse wigeon
#

Patch Reload? does restarting the game totally do that?

urban patrol
#

can i nest question forks?

uncut viper
#

if you dont know what patch reload is then you didnt do it

obtuse wigeon
#

Cause it's quick to start up so I just totally restart the game everytime

uncut viper
#

that said you should know about patch reload

#

!reload

ocean sailBOT
#
How do I reload my changes while I'm still in game?
  • Content Patcher pack: enter patch reload <your_mod_id> in the SMAPI console window. This will reload and reapply all your patches (but won't recalculate the ConfigSchema or DynamicToken sections if you use them).
  • Translation files: enter reload_i18n in the SMAPI console window. If it's for a Content Patcher pack, also run patch reload afterwards.
  • C#: see the Visual Studio hot reload or Rider hot reload feature.
uncut viper
#

this lets you edit your jsons and reload changes without restarting (most of the time)

obtuse wigeon
#

So this isn't vital to do if I restart the game?

urban patrol
#

it's more convenient than restarting the game a lot of the time SDVpufferthumbsup

#

see limitations above (tokens and i18n)

whole raptor
#

New update for i18nifier!
The app now handles {{ModID}} tokens across all the converters correctly (if not, then please yell at me).
As a bonus converting random dialogue no longer produces an extra i18n entry with just }}.

https://nom0ri.github.io/sdv-i18nifier-app/

uncut viper
#

"Local tokens are always considered dynamic text, so they can't be used in data model fields that only allow booleans or numbers. This will be improved in upcoming iterations of the feature."
this may have something to do with it, maybe? localtokens arent my strong suit, but SpriteIndex does only take numbers
that said the exampole in the docs uses it for Price, so i have no idea /shrug

obtuse wigeon
#

It probably would be if the game loading isn't too quick or if something depends on other factors harder to recreate in game, but this is a simple adding a new path mod for now, I may use it when the mod gets bigger however

whole raptor
#

Thanks again for reporting Button

urban patrol
#

yayyyy thank you nomori!!

uncut viper
#

(nomori does that only catch modid or does it catch all tokens)

whole raptor
#

(Do people use other tokens in ID...?)

uncut viper
#

(they do if theyre, say, using localtokens)

#

(or seasonal variants, day variants, festival variants, etc)

whole raptor
#

Welp, didn't think about that... but that should be a super simple fix

uncut viper
#

(also i think it was nic that caught it? or maybe wem? i dont remember but i just passed it along SDVpuffersquee)

#

but yeah absolutely no tokens are allowed in i18n keys

obtuse wigeon
uncut viper
#

i would double check you've saved all your files then and you're editing the ones in your mod folder cuz otherwise idk what makes a localtoken appear to not be found if it appears to be written in the json

urban patrol
uncut viper
#

i knew it was someone with a 3 letter name

obtuse wigeon
uncut viper
#

i was talking to nomori

#

and no they cannot be used in i18n keys

hallow prism
#

hmm

uncut viper
#

as in, inside default.json, you cannot write "{{ModId}}_MyKey": "Some text here"

obtuse wigeon
hallow prism
#

ah yes this way

#

i was thinking of the importing of token but it's not in the key itself

uncut viper
#

you can use tokens inside an i18n value as long as you import it via CP, and you can use a token to construct the key inside the {{i18n}} token itself, but yeah, inside the i18n folder in your mod folder, CP tokens are not a thing

#

bit confusing since they are still called tokens and "key" could mean a few things SDVpuffersquee

#

but yeah thats what the issue was with the i18nifier

latent mauve
#

AtlasV, can you do a patch export on your Data/Objects file and see how that entry pops up?

obtuse wigeon
#

Bare with, let me figure out how to do that and I can

latent mauve
#

Reading up, I do think they may be on to something with it just not liking the fact that it's a token in a field that expects an integer

uncut viper
#

if the patch is invalid bc it doesnt think spriteindex is a token then theres not gonna be anything in Data/Objects

#

the patch is just not applied

latent mauve
#

Yeah, I was just thinking about that, button

#

If it errored in the console, it won't be there.

uncut viper
#

i have no idea what the whole deal is with localtokens and inuteger only fields tohugh so i cant be much more help here unfortunately

#

chu is a localtoken expert though i hear

lucid iron
#

That's weird cus i used a local token in a object sprite index

latent mauve
#

save us with your knowledge, chu

lucid iron
#

I thought u only can't use em for like, a list of numbers

uncut viper
#

maybe the docs are out of date a bit with that line?

latent mauve
#

Does a token not being ready have a different error?

lucid iron
#

Yeah yellow no token

uncut viper
#

its not unready, its straight up not found

lucid iron
#

That's more like if u just didn't put it at all in the include

obtuse wigeon
#

Okay, so found the issue, managed to half fix it, I forgot to include "SpriteIndex": in the LocalTokens of another pathway

latent mauve
#

Oops

obtuse wigeon
#

However even with different sprite indexes (they have a different sprite) It onlt shows the same sprite

lucid iron
#

Yep

#

Yeet any existing items

obtuse wigeon
#

The SpriteIndexes work from 0 right? not 1?

lucid iron
#

Sprite indexes are persisted on items

uncut viper
#

correct

obtuse wigeon
#

There we go, Its fixed now and actually functions properly! Than you all for your help and sorry for the minor ineptitude I found myself in. restarting the game fixed the items looking the same

latent mauve
#

Glad it was relatively minor issue, despite the LocalToken thing baffling me

obtuse wigeon
#

If I want to change the item sprite in the inventory to grab from a different png would all I have to do be change /floor to say /floorsprite?

          "Texture": "{{ModId}}/floor",
          "SpriteIndex": "{{SpriteIndex}}",
latent mauve
#

My only experience with LocalTokens is "oh, apparently that's not a tokenizable string" and using the wrong token type LOL

uncut viper
#

you can change it grab whatever asset name you want, as long as its one you've loaded previously

obtuse wigeon
obtuse wigeon
uncut viper
#

if you thought the key thing was confusing wait til you find out that tokens and tokens are different things sometimes, and tokenizable strings use tokens and not tokens

latent mauve
#

^ Yes that

uncut viper
#

in fact there are 3 different things that can be called "tokens" and none of them are interchangeable

obtuse wigeon
#

The Matrix of tokenization, what a joy to look forward to

candid veldt
#

Hi peeps, was wondering if I could get some other people to look over things to see what might be wrong in my mod :/ I am trying to add two new areas that can be warped to from map patches on the beach and in Willy's shop. The map patches loaded in succesfully and the warps I put in seem to be trying to work, but the two new locations can't load into the game. I think the custom tilesheets I made (a seasonal one and one for a dynamic background) aren't being loaded into the game properly, but my JSON looks valid and I can't find the problem. Any help is appreciated!

SMAPI Log for failing to load custom map called Mermaid Cove
https://smapi.io/log/f99b1cd560434fd6820fb731eefbad93

JSON for content.json (relevant for dynamic tokens section and maps.json include)
https://smapi.io/json/none/2dc04fcbc1a1431dbfad39d3d41c482c

JSON for maps.json (has my attempt to load location data and maps for new locations Mermaid Cove and Aurel's Apartment
https://smapi.io/json/none/48d8f48eeee149c28cf05bb2627f66f4

ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 5 C# mods and 2 content packs.

valid folio
candid veldt
#

This is what my assets/maps folder looks like if it helps

uncut viper
valid folio
torpid sparrow
#

classic /lh (directory climbing)

uncut viper
candid veldt
#

I'm dumb, but what do you mean by that? I embedded the tilesheets when I imported them and did the whole z in front of the name thing.

uncut viper
#

can you send your .tmx?

whole raptor
#

Removing just the tokens is easy... but I don't want something like {{token1}}.{{token2}}.{{token3}}_Key to become .._Key instead of Key SDVpuffersquint

candid veldt
uncut viper
gaunt orbit
uncut viper
#

though, i guess that may be unwanted forf other reasons

whole raptor
#

Yeah, if it's something like Key.2...

candid veldt
uncut viper
#

as well as the actual tileset earlier on

#

im assuming the map did not look like a mess of error tiles when looking at it in Tiled

candid veldt
#

Ohhh! I had no clue you could open a .tmx file in a code editor. That makes so much more sense. I get it now, I renamed the file to make it work with my dynamic tokens but didn't go back into the tmx to change the source of the tilesheet.

uncut viper
# whole raptor Yeah, if it's something like `Key.2`...

could walk through the string and remove any non-alphanumeric characters until you find the first one that IS alphanumeric, then only remove them if theres a non-alphanumeric immediately following another non-alphanumeric?

whole raptor
#

That's an idea SDVpufferthinkblob

obtuse wigeon
#

With RegEx you can pretty much do anything, you can even keep a set list of accepted none alphanumeric character if theres specific characters you want to keep

uncut viper
#

i dont know regex well enough to use it to trim padding and trailing non-alphanumerics but keep them if theyre in between alphanumerics but ONLY if they arent repeating

urban scaffold
#

Heyo! I am trying to learn writing/editing events... Could someone guide me a bit? I am having a bit of a struggle specifically with questions atm. pleaseplease

uncut viper
#

i.e. ..!.Key.Value..One. should become Key.Value.One

whole raptor
obtuse wigeon
#

I've used RegEx a couple of times but still have no idea how it works, just that it works

obtuse wigeon
candid veldt
# urban scaffold Heyo! I am trying to learn writing/editing events... Could someone guide me a bi...

Have you taken a look at these tutorials? They are helping me: https://stardewmodding.wiki.gg/wiki/Tutorial:_Final_Boss_of_Events

Stardew Modding Wiki

You want to know how to do some crazy things? You want the immersive-cutscene heart-wrenching events?
You've come to the right place.
Step inside, take a seat, this is going to take awhile.
From other event tutorials, you've probably seen:
changeToTemporaryMap <MAP> false/bgColor 0 0 0/ambientLight 0...

candid veldt
# urban scaffold Heyo! I am trying to learn writing/editing events... Could someone guide me a bi...
Stardew Modding Wiki

This tutorial breaks down Sunberry Village's simplest and shortest event to help explain each command.

“20031402”: This is your event ID. Make sure it’s unique. You can prefix it with your update key (AKA the number on the link to your mod page). The way event IDs are formatted will be changed in 1.6 to look something like this: “skell...

Stardew Modding Wiki

When creating Heart Events for a custom NPC, it can be difficult to figure out what to write about or how to structure your story pacing. Like other types of art, the writing in this game has a common style tying everything together - Understanding how the vanilla game approaches writing Heart Events can be a useful part of the process, even if ...

Stardew Modding Wiki

I recently overcame my fear of events and wrote several in a short span of time. I wanted to share some of the things I learned that helped me.
As the page title suggests, I'm not an expert. If you're looking for information from that level of expertise, check out Siv's guide and tips by Arknir.

urban scaffold
#

Woah!

#

Let me see them!

uncut viper
candid veldt
#

Oh thats so good to know, thank you!

#

I

urban scaffold
uncut viper
#

(the tips and stuff when it comes to storywriting in general are ofc timeless)

candid veldt
#

I've just gotten started on my events.

uncut viper
#

the Final Boss of Events is less a tutorial on how to make an event and more just how to do some more advanced stuff in an event when you have the basics down

#

but it is up to date

#

i dont know where a general purpose event tutorial that is updated for 1.6+ would be

lucid iron
#

There's events for babies

whole raptor
#

I didn't even know there were that many tutorials on events SDVpuffereyes
I just use the events wiki

opaque field
#

my BratPoints aren't acumulating via events, I checked the wiki, the event command is correct, but when I check the gq after picking my answer it still says that the BP is false

whole raptor
#

Eh.. the changelog I put is just plain wrong.. but oh well.. I doubt anyone reads it 😅

opaque field
#

maybe I should try putting the trigger action within the dialogue somewhere instead of an event command...?

urban scaffold
#

so yeah I am trying to follow but something aint clicking for me... would anyone mind looking at it?

whole raptor
#

!json sure

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.

gentle rose
#

I'm confused, is BratPoints a custom stat? how are you defining it?

whole raptor
#

Wait.. what was the command for uploading jsons..?

gentle rose
#

that's the one!

#

the validator is the first link

whole raptor
#

Ah, I thought it was shorter 😅

gentle rose
#

I actually remember it being shorter too for some reason SDVpuffersquee maybe we're confusing it with !log or something

opaque field
#

it's supposed to be, yeah. I thought that if you did an IcrementStat inputstathere if it didn't exist it would be created, unless I misunderstood the wiki

gentle rose
#

does the wiki say that it would be created? /gen

#

oh right it's been down for hours

uncut viper
#

yes it does

#

and yes it should be created

gentle rose
#

wiki I miss you come back

opaque field
#

beat me to it I pulled up the wiki and found the text

#

oh isit down? maybe my tabs just haven't reloaded to say so

gentle rose
#

not fully down, just very unstable

opaque field
#

ah, got it.

urban patrol
uncut viper
#

(mood)

opaque field
#

hm, I'll try the command somewhere else besides an event command and see if that makes a difference then

calm nebula
#

You can add whatever

#

I don't care what the wiki says

uncut viper
#

you should bc the wiki says it will be created

calm nebula
#

I trust my two-year old memories of the decompile button

opaque field
#

well, any reason it wouldnt be created when used as an event command?

calm nebula
#

More than I trust the wiki

uncut viper
#

(not only is it a dictionary, but its a case-insensitive dictionary)

#

well how much do you trust me, bc i added it to the wiki

opaque field
#

i do trust you, just curious what the difference is, it's curiosity not doubt 🙂

uncut viper
#

i was talkin to atra, not you
you havent sent any jsons so theres no way for anyone to tell what you've done or why it might not work

patent lanceBOT
calm nebula
#

With my life, button

#

But not with my soul

#

Or my money, tbh

uncut viper
#

thats better than a two year old decompile memory i think/hope

opaque field
#

oh, uh what json would be most helpful? I could send the event script?

calm nebula
#

My two year old decompile memory is pretty good tbh

#

I've been thinking maybe I should do a proper event studio in game tbh

#

But also tbh

#

I'm lazzzzzzyyyyyyy

#

And in theory retired

uncut viper
#

if thats multiple of them, then multiple jsons should be sent

opaque field
#

((used the validator instead of posting since it catches anything I might have missed when checking originally but if it's more convenient I can share it the other way))

#
     "LogName": "BanterBackfire",
    "Action": "EditData",
    "Target": "Data/Events/Town",
    "Entries": {
           "TheWolf.BanterBackfire/f Shane 250/e TheWolf.DarkBlue/G !PLAYER_HAS_CONVERSATION_TOPIC Current DarkestBlue/t 1700 2300": "kindadumbautumn/45 73/Shane 44 73 1 farmer 46 73 3/skippable/pause 500/move farmer 2 0 1/speak Shane \"{{i18n:TheWolf.BanterBackfire.1}}\"/faceDirection farmer 3/emote farmer 56/pause 300/message \"{{i18n:TheWolf.BanterBackfire.2}}\"/quickQuestion  #{{i18n:TheWolf.BanterBackfire.3}}#{{i18n:TheWolf.BanterBackfire.4}}#{{i18n:TheWolf.BanterBackfire.5}}(break)speak Shane \"{{i18n:TheWolf.BanterBackfire.6}}\"\\action IncrementStat BratPoints 1 (break)speak Shane \"{{i18n:TheWolf.BanterBackfire.7}}\"\\action IncrementStat BratPoints 2 \\switchEvent BratBackfire(break)speak Shane \"{{i18n:TheWolf.BanterBackfire.8}}\"\\action IncrementStat BratPoints 0 \\switchEvent BlushBackfire/emote Shane 40/pause 600/move farmer 2 0 1/move farmer 0 -9 0/warp farmer -1000 -1000/pause 600/faceDirection Shane 2/animate Shane false false 700 20 27 20/emote Shane 28/speak Shane \"{{i18n:TheWolf.BanterBackfire.9}} #$action AddMail Current {{ModId}}_BluePlushie\"/pause 60 0/globalFade/viewport -100 -100/playMusic nightTime/pause 500/message \"{{i18n:TheWolf.BanterBackfire.10}}\"/pause 400/speak Shane \"{{i18n:TheWolf.BanterBackfire.11}}\"/message \"{{i18n:TheWolf.BanterBackfire.12}}\"/addConversationTopic Backfire 4/end",```
uncut viper
#

no please always use the validator

gentle rose
#

just make it an actual link please

opaque field
calm nebula
#

Replace the action IncrementStat with one that gives the player like 10000g

#

Let's see if it's the action or smth

urban patrol
opaque field
#

okie, editing and then testing

uncut viper
#

also, what were you writing in your debug gq to check your stats after?

opaque field
#

debug gq PLAYER_STAT BratPoints

#

the money added

uncut viper
#

you havent put a player key in there

#

PLAYER_STAT Current BratPoints

calm nebula
#

Or min/max values

uncut viper
#

dont need max, but min yeah (strangely)

opaque field
#

oh, I thought it would tell me the value that the player had already - I'll run the event again and pick an option with a stat and try that

calm nebula
#

There is a different command to list stst balues iirc

#

Also stupid ideas time

uncut viper
#

it should have shown an error in the log when you even tried

#

a GSQ is only ever true/false. it is never anything else, ever

calm nebula
#

Using stats to make a matchingmaking game within stardew

brittle pasture
calm nebula
#

IncrementStat MarnieMarlon

brittle pasture
#

if your map only has one area of water you can yeet that line

uncut viper
#

also, Cackling, are you aware that IncrementStat BratPoints 0 does literally nothing

calm nebula
#

Also please namespace your stats

urban patrol
opaque field
#

will namespace. should I have the increments as 1, 2 and 3 instead of 0 then? The gsq is supposed to check after my third decision event and set a path based on 0-2, 3-5, and 6-8 'points'.

brittle pasture
uncut viper
#

you do realize its literally incrementing them and not setting them, right?

#

./gen

#

the Increment by 0 makes me unsure if you think its doing something else

#

bc adding 0 to a stat will do nothing

opaque field
#

honestly, I kinda feel like just as I feel like I'm almost getting it I hit something that makes me question everything I've learned so far

urban patrol
uncut viper
#

it doesnt matter if the others are 1 and 2, but the third one can just be removed entirely

brittle pasture
#

you can also look at Farm_Beach for an example of a map with two areas, one for freshwater and one for ocean fish

urban patrol
#

thank you! yeah this water at the top is sort of intended to be the river that goes through town into the forest

uncut viper
#

if you were to redo this event 10 times, Cackling, and chose the second option every time, your BratPoints stat would be 20

#

if you then did the event again but chose the third option, your stat would still be 20

#

bc it is adding nothing. its not resetting it back to 0

#

if thats the way you imagined it working then thats fine, i just wanted to make sure, and in that case you can just remove the increment by 0 action

opaque field
#

erm... not quite, but I do actually feel like I have a slightly better idea of how it functions so I can figure that out

#

ty T.T

calm nebula
#

Morning, button!

uncut viper
#

good mevening atra!

calm nebula
#

What terrifying c# will you show me today

uncut viper
#

im making flag enums

#

so not that terrifying

calm nebula
#

I've been wondering whether or not having a debugger for events is a good plan

urban patrol
#

unrelated question to the fish data: is the best way to lock event #2 behind choosing a fork in event #1 to set a mail flag inside that fork, and then require player has mail in the preconditions for event #2?

calm nebula
#

I'm retired don't eyes me

uncut viper
#

probably one of the few ways you coulddo that yeah

#

i would rate it higher than using stats

#

(thats not a knock on you cackling btw /gen)

crude plank
#

@elder mountain Hi, i fixed one of your files from Great Catch and i wanted to know if you'd like me to send it to you

uncut viper
#

(stats are just synced weird in MP)

urban patrol
#

i saw there's also ChoseDialogueAnswers but i couldn't wrap my head around how that might work

#

and if it's not vastly preferable to a mail flag, then i'll go with the option i already know how to do lol

#

i yearn for the GOTOs

calm nebula
#

(Use i18n!)

urban patrol
#

oh??

#

i thought that was just for translation

uncut viper
#

while i dont know what atra meant by use i18n here, there's nothing stopping you from just putting anything you want inside your default.json

#

as long as its still a string string dictionary

#

you could store event scripts in there for all the game/CP cares

#

or just pieces of event scripts

#

or fork names

calm nebula
#

No i meane literally plz use i18n

urban patrol
#

oh yes i will be

calm nebula
#

For your user display text

urban patrol
#

i draft it like this and then put it through nomori's converter

uncut viper
#

(i figured thats what atra meant but didnt wanna assume in case atra was still in Silly Ideas Time)

lucid iron
#

Tbh it's probably better to get in habit of i18n from the start

uncut viper
#

(and just wanted to make sure nic knew you can use i18n for more than just TL)

lucid iron
#

Then the fun i18n tricks become more intuitive

uncut viper
#

i would agree with this

#

strongly

urban patrol
#

i already struggle to conceptualize the pacing and flow of my events, otherwise i would. i literally don't have any dialogue written out before i script an event

calm nebula
#

I used to actually script oit the event in the i18n file

uncut viper
#

unrelated, but back on flag enums, as i try to wrap my head around them:
if the 0 value of my enum is "None" is the only way to check that a certain enum is specifically None to do a logical comparison with it, nothing bitwise? i.e. do i have to do SomeEnum == Enum.None
similarly, if i want to check if an enum has, say, both 2 and 4 flags, is my only comparison option again a logical comparison between the enum ive got and the combination of those flags i.e. SomeEnum == (Enum.FlagOne | Enum.FlagTwo)?

(ignoring SomeEnum.HasFlag() bc i dont like it)

lucid iron
#

Flag enum as i understand it just enforces 0 1 10 100 etc values

uncut viper
#

it felt like there should be a way using the & bitwse operator somehow but i dunno it and when i tried i just got results like "yes you have both FlagOne and No Flags" so

#

it doesnt actually enforce it from what i read you need to assign them to powers of 2 still

#

otherwise it still just auto increments

lucid iron
#

Oh rly why do ppl use it then

uncut viper
#

but yes basically thats why i want it, i just brain struggled a bit with the bitwise comparisons to get what i wanted

#

better string representations, and when you want combinations of flags

#

i mean you could make a flag enum manually i guess

#

but a flag enum will apparently ToString() better

patent lanceBOT
uncut viper
#

i was surprised someone didnt do that earlier

#

basically i have this as my enum rn

public enum Permissions
{
    None = 0,
    GlobalModData = 1 << 0,
    Logging = 1 << 1,
}

and i wanted to know what the best way to check a) if someone has None permissions or b) if someone has Exactly GlobalModData and Logging permissions but nothing else (if i ever add more flags)

lucid iron
#

But putting aside the enum stuff i think u would do shift + and

#

To see if a bit is at a particular pos

proud wyvern
#

permissions == .None || (permissions & (.GlobalModData | .Logging)) == (.GlobalModData | .Logging)

#

Oh wait, and no other flags

#

Then just == twice

uncut viper
#

sorry can you explain exactly what you mean by == twice from that example
(also i shoulda been clearer (a) and (b) are two different scenarios not one single check, they were just two scenarios i didnt know if there was a bitwise way to check for (and it seems like there isnt for checking for None?))

#

(if im using "bitwise vs logical" wrong i apologize im just mimicking the msdn docs i read)

proud wyvern
#

a) permissions == Permissions.None
b) permissions == Permissions.GlobalModData | Permissions.Logging

uncut viper
#

is there any situation in which i'd use & for any comparison checks

calm nebula
#

if (permissions & ~3 != 0)

#

Be a real dev

#

Write insanely unreadable code

proud wyvern
uncut viper
calm nebula
#

Like I am currently doing

uncut viper
#

now what if i add a third flag to that combination chu

#

what would you call it then

lucid iron
#

What's that third flag

uncut viper
#

does it actually matter. lets say ClockPermissions

#

for sake of example

lucid iron
#

DoingStuff

calm nebula
#

VALID

uncut viper
#

i dont think i wanna take enum naming advice from you

calm nebula
#

That's legit what I would call it

uncut viper
#

(also thank you shockah and also atra)

brave fable
calm nebula
#

VALID

uncut viper
#

but that implies every other enum combination is invalid

calm nebula
#

It's the valid bitspace

lucid iron
#

Hm button it occur to me that this is like stats

uncut viper
#

sometimes i dont like talking to atra bc i cant tell if im out of my depth or if theyre purposely talking nonsense

#

(/j)

calm nebula
#

What about both

uncut viper
#

if its nonsense bc im out of my depth i think thats still just the former

lucid iron
#

Like u check owner and group read by buff->st_mode & (S_IRUSR | S_IRGRP) right

uncut viper
#

i what

#

put those pointers away

calm nebula
#

Nou

uncut viper
#

are those called Stats?

lucid iron
#

Yeah

uncut viper
#

i did not know that

lucid iron
#

Posix file stuff is stats

calm nebula
#

Neither did i

lucid iron
#

This is mode

uncut viper
#

in that case yeah its like stats

brave fable
lucid iron
#

But it's in a struct called stats

uncut viper
#

blueberry uses powers of 2 while chu and i bitshift
interesting

lucid iron
#

But yeah this would only check that u have those 2 enum

#

Not exclusively just those 2

lucid iron
#

Just swap out & with == for that i think

uncut viper
#

atra does it the fucked up evil way, as is expected

patent lanceBOT
uncut viper
#

whats the reason for inheriting from byte?

lucid iron
#

That said bc we r in c# land

brave fable
#

i mean really you may as well do it the fucked up way

lucid iron
#

Can u do it like

uncut viper
#

the fucked up way is harder for me to quickly parsew in my mind

brave fable
#

im wasting time doing it the clean and maintainable way since im not actually maintaining them

lucid iron
#

(Enum.One | Enum.Two).HasFlag(value)

brave fable
#

if it were just fucked I'd have an excuse for it

uncut viper
#

i dont like that theyre not at least padded to be the same length

#

but chu i dont like HasFlag

#

its aesthetically unpleasing

calm nebula
uncut viper
#

however id assume thatd work if i did do it

calm nebula
uncut viper
#

i will not worry about it then

brittle pasture
ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Unix 6.15.3.1, with 153 C# mods and 231 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

brittle pasture
#

ok nvm

calm nebula
#

You're losing your mind but i can look at your log anyways

brittle pasture
#

the issue is that the type of MasteryCaveChanges changed

hard fern
uncut viper
#

i was about to say it should be an int

#

however its a strange error to give for it

brittle pasture
#

to be fair to myself I deleted it last night but then Stardrop restored it for some reason because I didn't save config so I thought it was something else

lucid iron
#

I yeeted it (the config.json)

#

And it work after

#

Kinda assumed readconfig would have try catch here tbh

uncut viper
#

i assumed the error would be about casting

calm nebula
#

Read config doesn't

#

You'll see that a bunch of us have weird helpers lol

manic snow
#

hello friends. sorry, my eng is not too good. i am finally updating my 1.5 game to 1.6. my dga and cf mods do not work anymore. is there a way to convert them? mainly to a mod format that allowed furniture to be placed outside =0

half tangle
#

funny to walk into a Flag discussion when my next mod literally has an enum that uses them...

#

!convert

half tangle
#

hm, I don't see a DGA converter there

manic snow
#

is there a cf converter? i am trying my best to use my translator at the same time so sorry if i am slow typer SDVpuffersob

half tangle
#

what is cf? If it's Custom Furniture, the first link has that

manic snow
#

yes

#

custom furniture

#

sorry

half tangle
#

it's alright - I've only been making mods since 1.6 so I'm not as familiar with all the old frameworks

manic snow
#

ohh but content patcher doesn't allow furniture to be placed outdoors, no?

#

or has it been changed to allow so

half tangle
#

I'm trying to check the wiki to see if I can find out - it's been very slow today

#

Looks like Content Patcher does allow creating outdoor furniture

#

(you might just have to check later if it's not loading)

#

or someone else here might know specifics

manic snow
#

thank you so much!

#

i will refer to it right away

ivory plume
#

(The SMAPI server now keeps uploaded SMAPI logs & JSON files for 60 days by default instead of 30, to avoid expired logs when mod authors check messages monthly. This only applies to new uploads after this point.)

hard fern
#

Yahoo

calm nebula
#

Gmail

finite willow
#

guys I found this holy grail, how do I use it

tender bloom
twilit quest
#

Has anyone else had difficulty with the SpouseRoomPosition map property? I can't seem to get it to work in the first upgrade of my custom farmhouse no matter what I do

twilit quest
#

It doesn't even show up on the map. I don't know what I'm doing wrong

#

I changed it in Tiled in the map properties and also via CP. Zilch

urban scaffold
#

So I am trying to do the kissing animation and they are facing each other and move towards each other, but then the kiss itself ends up with them facing the other way... Anyone can explain why to me? PleadCry

positionOffset farmer -2 0/pause 10/positionOffset farmer -2 0/pause 10/positionOffset farmer -2 0/pause 10/positionOffset farmer -2 0/pause 10/positionOffset farmer -2 0/pause 10/positionOffset {{spouse}} 2 0/pause 10/positionOffset {{spouse}} 2 0/pause 10/positionOffset {{spouse}} 2 0/pause 10/positionOffset {{spouse}} 2 0/pause 10/positionOffset {{spouse}} 2 0/pause 10/animate farmer false true 100 101/showFrame {{spouse}} 52/pause 1000/specificTemporarySprite heart 71 45/pause 1000/showFrame {{spouse}} 12/playSound dwop

#

Ah... I think... I am seeing the error myself-- YueThink

#

nope, i tried and still ahahaha

twilit quest
urban scaffold
#

let me see

urban scaffold
twilit quest
#

Yay! I'm glad it worked ^_^

urban scaffold
twin wadi
#

ugh, i can't do this right? becuase of the {{ModId}} in front of the targets?

    "LogName": "Load tmxes into maps",
    "Action": "Load",
    "Target": "Maps/{{ModId}}_MinePath, Maps/{{ModId}}_SewerPath, Maps/{{ModId}}_ShadowVillage, Maps/{{ModId}}_VikaHouse",
    "FromFile": "maps/{{TargetWithoutPath}}.tmx"
},```
#

is there an alternative non-tedious way to bulk load files?

urban patrol
#

it depends on how you named your files

twin wadi
#

I named it SewerPath, MinePath, ShadowVillage, VikaHouse, etc

uncut viper
#

you can just add the modid_ to the file names

twin wadi
#

ooh yeah... do i just put {{ModId}}_ or the actual id?

uncut viper
#

your computer does not know what a token is
write the actual id

twin wadi
#

ok thanks just making sure SDVkrobusgiggle

obtuse wigeon
#

I'm trying to add an item to a custom shop made using calcifer, I've got everything sorted I think but I need the Id and ItemId of the item, I'm not sure what the ItemId or the Id is, below is the code which makes the item, which part is the Id and the ItemId?

"Action": "EditData",
      "Target": "Data/Objects",
      "Entries": {
        "{{ModId}}_{{PathNameItem}}": {
          "Name": "{{ModId}}_{{PathNameItem}}",
          "DisplayName": "{{i18n:{{PathNameItem}}.DisplayName}}",
          "Description": "{{i18n:{{PathNameItem}}.Description}}",
          "Type": "Crafting",
          "Category": -24,
          "Price": 1,
          "Texture": "{{ModId}}/floorSprite",
          "SpriteIndex": "{{SpriteIndex}}",
        },

My guess in this specific case both the Id and ItemId are both "{{ModId}}_{{PathNameItem}}"

#

"{{ModId}}_{{PathNameItem}}": {is the Id
and
"Name": "{{ModId}}_{{PathNameItem}}", is the ItemId
is my guess

urban patrol
#

the item ID shouldn't contain Name:

#

ItemId is whatever the key in your dictionary is, so in this case it's {{ModId}}_{{PathNameItem}}

obtuse wigeon
#

Need to specify I'm making the custom item with Content Patcher, I keep forgetting

uncut viper
#

its an identifier for that entry in whatever list its in

#

for a shop itd be the id of that stock entry in the Items list

#

so you could for example call it "Id": "{{ModId}}_MyPathShopEntry"

obtuse wigeon
#

Ahhh okay so the Id is specific to the shop and has no reference to the item I'm adding, gotcha, thank you!

uncut viper
#

correct. many things have an Id field. in this case its just a way to identify that shop entry

obtuse wigeon
#

In the example they gave the "ItemId" is "(FL)Example.ModId_Flooring1Id", the (FL) is an item type, do pathways have an item type?

uncut viper
#

(FL), (BC), (O), those are all item type qualifiers. they tell the game what kind of item the ID goes to (bc there could be an Object with an itemid 4 and also a BigCraftable with itemid 4, so (O) stands for Object and (BC) stands for BigCraftable, for example)

#

(FL) is Flooring and i dont know if thats Paths or if Paths is different

#

id try it

urban scaffold
#

Today I spent 5 hours learning quickquestion and question null i hate myself

torpid sparrow
#

it wasnt fun for me the first time

#

i mean it probably wont be fun for me this time either

obtuse wigeon
#

I know to make paths you target `"Data/Objects", Would that make paths have the item type (O), is it necessarily needed if my mod doesn't have a floor or big craftable with the same itemID?

urban scaffold
uncut viper
#

i dont know how paths work, so i dont know what the deal is with (FL)

obtuse wigeon
#

Just looked at the available item types and paths werent on there, so they may be (FL) or they may be (O) gunna test it to find out

calm nebula
#

(O)

ivory plume
uncut viper
#

(thank you for the correction! I think I got my wires crossed with Trinkets, being "an equippable with it's own item type" combined with the fact that rings are an equippable in Data/Objects)

twin wadi
#

hmm what's the music for the sewer location?

uncut viper
#

is it not just "sewer"

ivory plume
twin wadi
#

steam was taking too long to load so i just dug through the code, apparently it's Upper_Ambient

twilit quest
#

I left it for awhile and came back to look through the code and Tiled map properties again, and I still can't figure out why SpouseRoomPosition isn't working. sighs

uncut viper
#

is this for a custom map?

#

or a map patch?

twilit quest
# uncut viper or a map patch?

Custom farmhouse map. It works with upgrade 2, but that's to be expected, because the base map is the same as vanilla, so the location of the spouse room would match up. But the spouse room isn't showing up at all in my custom upgrade 1 map no matter what I try

#

It just stays an empty room

obtuse wigeon
#

The custom shop is only half working, I want to test it by adding a vanilla item to it to see if it works, are vanilla ItemIds only numeric? do they follow the naming scheme as modded, i.e. `exampleauthor.examplemod

lyric lotus
#

so i'm having trouble getting the bar of brown below the paintings to go away, i've tried messing with height and width values and no change. this is for AT btw. any help?

uncut viper
obtuse wigeon
twilit quest
#

With upgrade 2 it sometimes doesn't show up initially, and I have to exit to the title and reload. But then it does show up and persist. But in Upgrade 1 it never shows up

uncut viper
#

are your upgrade maps gated behind content patcher conditions?

twilit quest
uncut viper
uncut viper
# twilit quest Yes

its possible that the game is loading the spouse room before your conditions are applying

#

is there reason to gate them behind When conditions?

twilit quest
lyric lotus
#

is there a sizing limit?

twilit quest
twilit quest
# uncut viper is there reason to gate them behind When conditions?

I'm currently using two When conditions, one depending on the current upgrade level of the house, the other "LocationUniqueName": "FarmHouse" so that it doesn't affect cabins. But the first doesn't really need to be there, and I might be able to do the second a differen way. I'll try taking them out and see if it helps. Thank you!

uncut viper
#

im not sure the second one even works correctly since a spouse room is a map override applied by the game, i dont think it gets refreshed? dont quote me on that though. farmhouse is difficult to work with

twilit quest
lyric lotus
uncut viper
#

you could do that or just extend your custom texture to be 32px tall with transparent space beneath it

lyric lotus
#

ohh that's true

twilit quest
#

There's a great resource with vanilla AT stuff, one sec, I'll get it for you

twilit quest
uncut viper
#

yeah, but its an Alternative Texture for a thing thats already 16x32. if i was changing its texture id expect its hitbox to remain the same

brittle pasture
#

SDVpufferlurk any reason you can't just make these 16x16 custom furniture pieces

#

or 16x32

lyric lotus
#

...i want to but i don't know how

twilit quest
#

This is a useful resource, @lyric lotus. Download the "furniture" one and you can see what vanilla sizes are

lyric lotus
#

and i realized my texture is 17x20

twilit quest
uncut viper
#

i believe Brooke was responding to Selph

lyric lotus
#

oh no i was replying to Selph my bad'

twilit quest
#

Or find something 16x16 to replace

#

Ah, sorry

brittle pasture
lyric lotus
#

i was looking through CP and it looks really complicated. i've done wallpaper and flooring but never furniture.

brittle pasture
#

it's basically the same, what's different is what to edit
so instead of Data/AdditionalWallpaperFlooring it's Data/Furniture

#

ultimately it's your choice though
(my opinion is adding new items is much more convenient for users than specific retextures of vanilla paintings)

lyric lotus
#

i'll try it out, i prefer CP over AT anywho, faster loading.

uncut viper
#

the load speed is basically entirely dependent on how many content packs you have installed for each one

#

in most modlists, CP is much slower

lyric lotus
#

oh, i've heard the oppisite..AT is slower CP is faster.

uncut viper
#

anyone who actually knows how to determine which is faster will either say "It Depends™ " or, in the cases where it doesnt depend, "it doesnt matter"

#

(the latter being yes, the base frameworks themselves have a startup time, but the difference is utterly negligible)

hard fern
#

I only think it matters if you have a ton of AT mods

lyric lotus
#

would Data/AdditionalFurniture work or..? i need a reference..i really struggle with code i'm a total novice.

hard fern
#

There's always someone in modded farmers talking about how they have to cut down on the amount they have

brittle pasture
#

[[Modding:Furniture]]

uncut viper
#

no. its just Data/Furniture

#

dont make it up as you go along. follow the wiki

ivory plume
#

(Due to how Alternative Textures works, it's almost certainly slower than Content Patcher for the same operations. Content Patcher likely just seems slower because its content packs are doing far more than the relatively simpler Alternative Textures packs.)

uncut viper
#

that was my point in saying "in most modlists CP is slower" after "it depends on the amount of packs installed"

ivory plume
#

(i.e. it's much faster to just replace a texture asset, compared to patching every entity in-game to use a different asset.)

uncut viper
#

Textures Georg, who lives in the mines and has over 10,000 AT packs installed, is an outlier adn should not be counted

twilit quest
#

@uncut viper No love ;_;

uncut viper
#

i am unfortunately out of ideas for the spouse room

twilit quest
#

I'm not sure of SpouseRoomPosition just isn't working, or if it's being overdrawn by the map. I suspect the latter, because I can't find it anywhere else on the map

twilit quest
uncut viper
#

you're Loading the farmhouse map right? since its all custom

#

at least thats what i assumed you'd be doing

#

but if you ARE just EditMap-ing over it, map properties wont be copied over from a patch

twilit quest
#
    {
        "LogName": "Broken Farmhouse 1 Patch",
        "Action": "Load",
        "Target": "Maps/FarmHouse1_marriage",
        "FromFile": "assets/BrokenFarmhouse1.tmx",
//        "When": {
//            "LocationUniqueName": "FarmHouse",
//            "FarmhouseUpgrade |contains=1": "true", 
//            },
        "Update": "OnDayStart",
    },```
#

I removed the When condition per your suggestion

uncut viper
#

then yeah, im out of ideas

#

(unrelated, but you dont need to specify OnDayStart. thats the default)

twilit quest
#

I tried changing the priority, but that didn't seem to help either

twilit quest
lyric lotus
#

what would i put in the Entries section?

brittle pasture
#

follow what the vanilla data is like
"{{ModId}}_PortraitOfACoolGuy": "put the furniture data here"

twilit quest
#

I'll try again tomorrow. Thank you, @uncut viper! Good night.

lyric lotus
#

"Painting": {
"ID": "Rivuke.CuteCrochetArt",
"Texture": "Mods/[CP] Cute Crochet Art",
"Count": 7

#

?

brittle pasture
#

no

#

!unpack see what Data/Furniture is like

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!

brittle pasture
#

here's an example entry from vanilla: "WallSword": "WallSword/painting/1 3/1 3/1/999/-1/[LocalizedText Strings\\Furniture:WallSword]/48/TileSheets\\furniture_3/true",

#

the data consists of a string separated by slashes, with each slash corresponding to one field

#

what those fields mean are documented on the wiki (first one is item name, second one is type, etc.)

twilit quest
#

@lyric lotus Look at how other mods do it, too. If they do what you want to do, you can look at them and compare them to the wiki to see how things work in practice.

lyric lotus
#

...oh man this is hitting my dyscalculia really bad.

hard fern
#

I misread that word as dracula..m

lyric lotus
#

even though it's not numbers i'm having trouble organizing it in my brain right

#

what are these string things mean?

brittle pasture
lyric lotus
#

SDVconcernedCA uhhhh

#

"'Pathways'/painting/-1/-1/1/750/-1/[LocalizedText Strings\Furniture:Pathways]" so how would this look with a custom painting?

#

ok that didn't work..

obtuse wigeon
#

Hi, trying to make a custom catalogue, catalogue feature pretty much done, I'm just having issues applying the texture to the furniture, the first image is whats showing in game, whereas the second image is actually what it should be, black and pink with a "P" in the centre,

The texture is located at Assets/CatalogueSprite.png and it's a 16x16 png, Here is the furniture.json file also,

{
    "Changes": [
        {
            "LogName": "Load Furniture Sprite",
            "Action": "Load",
            "Target": "{{ModId}}/CatalogueSprite",
            "FromFile": "Assets/CatalogueSprite.png"
        },
        {
            "LogName": "Add Catalogue", 
            "Action": "EditData",
            "Target": "Data/Furniture",
            "Entries": {
                "AtlasV.AtlasCatalogue": "AtlasV.AtlasCatalogue/other/1 1/1 1/1/15000/2/{{i18n:Catalogue.DisplayName}}/1/{{ModId}}\\CatalogueSprite/true"
            }
        }
    ]
}
#

What am I doing wrong here?

brittle pasture
#

those are the next two fields

brittle pasture
#

(though idk how the game works if you're out of bounds)

obtuse wigeon
#

Of course it does, whoops. It doesnt do this out of bounds through, is usually just draws a weaird unpleasant grey

brittle pasture
#

yeah that's what I was wondering

#

uhh make sure you actually saved the file?

obtuse wigeon
#

Issue was entirely sprite index, set the index to "0" and its showing correctly, May have to leave the next hard part until tomorrow, modded items are appearing as error items while vanilla are appearing as they should, might need to add a soft dependancy so it loads later

lyric lotus
brittle pasture
#

lines inside a {} block takes the form of "key": "value"

#

right now you only have the value

#

your closing brackets are also wrong

#

the {on line 12 must be closed with a } instead of a ]

lyric lotus
#

fixed that but i don't understand what a key or value means

brittle pasture
#

key is the string before the colon, value is the string after

#

per the wiki:

The furniture data in Data/Furniture consists of an string → string lookup, where...

The key is the unqualified item ID.
The value is a slash-delimited strings with the fields listed below.
lyric lotus
#

i wish i could say i understand what that means but i don't, i'm sorry i feel kinda slow.

brittle pasture
#

going to have to go to bed soon, but here's the fixed code, feel free to study it as to what a typical CP mod looks like (I haven't tested it, if it doesn't work fixing it is an exercise best leave to the reader and/or you can ask other ppl if you're confused)

{
  "Format": "2.7.2",
  "Changes": [
    {
      "Action": "Load",
      "Target": "{{ModId}}/crochet_art",
      "FromFile": "Assets/crochet_art.png"
    },
    {
      "Action": "EditData",
      "Target": "Data/Furniture",
      "Entries": {
        "{{ModId}}_CrochetArt": "{{ModId}}_CrochetArt/painting/1 2/1 1/1/1000/-1/Cute Crochet Art/0/{{ModId}}\\crochet_art",
      }
    }
  ]
}