#making-mods-general

1 messages · Page 26 of 1

uncut viper
#

yes, but the time speed was slowed similarly for them too

calm nebula
#

what's breaking my brain is the resize

teal bridge
#

Yeah, those realMilliseconds fields are definitely not netfields, so I don't know how they could sync in MP.

#

But then again, neither is ExtraMillisecondsPerInGameMinute, yet it works somehow.

calm nebula
#

oh, the clock does

uncut viper
#

oh. well i mean its usually fine to assume that the farmhand should have the same configuration of the host anyway

teal bridge
#

What do you mean exactly, the clock does?

calm nebula
#

the clock syncs

teal bridge
#

So if two players are running their clocks at different rates...

calm nebula
#

NetWorldState

#

Host yells the farmhand into submission eventually

teal bridge
#

What happens? Total chaos?

uncut viper
#

(i also did not realize when i originally chimed in that this was in the context of speeding up time for short bursts when doing something admittedly)

teal bridge
#

I think I'd better just disable it in multiplayer and even co-op. I mean, how messed up would it be if the host decides to fish and you have to react 10 times faster until they're done?

#

That has to be about the worst MP experience imaginable.

uncut viper
#

could check to make sure everyone was fishing

next plaza
#

Perfect for a challenge run of the mines

teal bridge
#

Yeah, like checking to make sure everyone is frozen before freezing time.

brave fable
#

i'm sure you could have the farmhands play with a bullet-time mod in the mines to balance it out to regular time

teal bridge
#

But... eh, I think it's a narrow enough corner case to ignore.

lucid mulch
#

tbh multiplayer without mechanisms that pause time is brutal

uncut viper
#

tfw your only case is relegated to narrow enough to ignore 😔

teal bridge
#

I think a bullet-time mod in farmhands and speedup in host would break Stardew's netcode, either that or just epic fail for the farmhands.

uncut viper
#

if you didnt feel like checking if everyone was frozen you could also just have farmhands ping off a ModMessage to say "I'm fishing!" or "I'm done fishing!" and store that

teal bridge
uncut viper
#

self-referential! i dont play singleplayer, i only play multiplayer, so multiplayer cases are the only cases i encounter

lucid mulch
#

I pretty much exclusively play with pause in multiplayer, and from what I can tell all it ever needed was for the core functionality was to just manipulate Game1.gameTimeInterval a bunch

teal bridge
#

Oh, but this is just one minor feature of the mod, the rest should still work in MP.

#

Pause works in multiplayer? As in, one player can effect a pause without everyone pausing?

lucid mulch
#

in vanilla, there is no multiplayer pausing at all unless /pause is used

uncut viper
#

if you've got the mod to help, yeah

lucid mulch
#

pause in multiplayer makes it so if everyone is in a condition that singleplayer would have paused time, time is paused

teal bridge
#

It would seem to make more sense to just allow one player to force pausing for all players.

lucid mulch
#

ie, if 2/4 of the people have their inventory open and the other 2 people are in events, time is not progressing

teal bridge
#

Yeah, same in co-op.

#

But if one player has a menu open and the other player is actively doing stuff, then not paused.

lucid mulch
#

pause in multiplayer does have a vote system as well, to vote for time to be paused, and host has an override button to just force time paused (very useful when people are joining)

#

but it doesn't prevent player movement or activity during pause

teal bridge
#

All the things I never learned from single-player Stardew.

uncut viper
#

(to be clear, "Pause in Multiplayer" is a mod)

#

(not the act of "pausing in multiplayer")

lucid mulch
#

it does however pause buffs, health and npcs/mobs

teal bridge
#

Ah, I see, so it is not a true pause, it just freezes time progression.

#

For example, it does not freeze enemy AI (or does it?).

lucid mulch
#

it doesn't freeze their ai, just undoes any of the ai's outcomes

teal bridge
#

Meaning what... prevents them from moving? Disables collisions, damage?

lucid mulch
#

pause in multiplayer doesn't actually use any reflection or harmony to get everything working, just ontick setting the values to the known good values at the time of time pausing

uncut viper
#

i cant remember if it prevents collisions but it does lock position and prevent damage yeah

teal bridge
#

I'm only really curious about that in the context of radial menu, since it's supposed to freeze controls (including time and enemy AI) while opened and that obviously does not work in co-op/multiplayer.

lucid mulch
#

it would prevent them from moving as position is overriden every tick, along with the players health

teal bridge
#

So you're saying it would in fact work if they had that mod installed.

#

(the pause in multiplayer mod)

lucid mulch
#

if the radial menu meets the characteristics for pause eligibility, yes

teal bridge
#

It sets Game1.freezeControls while open.

#

Which is as good as a pause for 100% of singleplayer.

#

(and works if both players in co-op have it open)

uncut viper
#

does that affect smapi's Context.IsPlayerFree?

teal bridge
#

Yes.

uncut viper
#

then it will check that and pause it if the player is not free, so long as the player is not also using a tool or fishing it seems

#

among other various checks like taking into account the voting and whatnot

teal bridge
#

In any event, for the speedup I'm going to go with the original strategy of not doing it in MP; if you are dying to use this fishing mod and can't live without the speedup in multiplayer and want to coordinate your fishing with your buddies (lol), then we'll chat after the V1

#

(this is all assuming I get it to work at all without blowing up the game)

uncut viper
#

it wouldnt have to be coordinated, just only apply if it'd apply to everyone, but thats fair

teal bridge
#

Well I wouldn't want it to happen randomly as perceived - like one minute you're fishing at normal speed and then suddenly time starts zooming by because your peer decided to fish too.

#

That'd be slightly less jumpscare than having it happen in the mines, but still pretty weird.

lucid iron
#

it would be nice if the penpals mod had option to sort giftable people to the top

teal bridge
#

I could do that. Why are so many ungiftable, though?

lucid iron
#

cus i installed this in my almost perfection playthrough

#

so these guys are all max heart already

teal bridge
#

Makes sense. I'm with ya, it's no fun scrolling through a bunch of disabled portraits.

proven spindle
#

Does anyone know where I can find the gourmand frog's sprite? Don't see it in cursors or cursors2

proven spindle
#

I've gotten so used to sprites being in unexpected places I did not consider that lmao

plucky reef
#

I got Game1.player.CanMove = false; to work, but now it freezes the entire game which is strange, I didn't know it could do that.

gilded comet
#

best way to go about adding new mob drops? i forgot how to edit strings like this with CP

"Green Slime": "24/5/0/0/false/1000/766 .75 766 .05 153 .1 66 .015 92 .15 96 .005 99 .001/1/.01/4/2/.00/true/3/Green Slime",
next plaza
#

TextOperations

brittle pasture
gilded comet
#

oh is it just where you add an integer index to the TargetFields

lucid iron
#

SEASON Spring, 1 2 3 4 5 6 7 8 9 10

#

is this query supposed to have ,

brittle pasture
#

yeah 6 is the monster drop location

gilded comet
#

oh that's wonderful ty

teal bridge
patent lanceBOT
#

Oh okay, focustense (#6231044) (1d | <t:1725938449>)

uncut viper
teal bridge
#

Oh, I didn't intend for that to happen...

uncut viper
#

you don't have to ask for the reminder at the start of your message?!

gilded comet
teal bridge
#

Apparently not if it's special robot-to-robot comms.

gilded comet
#

if that's what you're looking for

uncut viper
#

unless you want it to be an AND, in which case you don't want ANY

lucid iron
#

right yea

#

this is one of VMV's triggers

gilded comet
#

it can't be all of those at once though?

#

waittt

uncut viper
#

it can be both spring and the days 1 through 10

lucid iron
#

the intention seems like winter or first day of spring (i didnt paste SEASON Winter)

gilded comet
#

hm i did it wrong before then

uncut viper
#

if the one with a comma is a trigger then it will never do anything except spit an error because it will look for the "1" GSQ after looking for the "Season" GSQ

lucid iron
#

@dreamy cedar hello i ran into a game freeze with exception from junimatic pathfinding while starting movie in movie theatre, it seems not consistently reproducable though. can make bug report on nexus if you prefer
https://smapi.io/log/edd986fc1f99487ab13376d66137d2a4

ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Unix 6.10.6.1, with 50 C# mods and 59 content packs.

calm nebula
#

(Quietly shrills my gsq checker)

uncut viper
#

who needs a checker if you just memorize all the GSQs

calm nebula
#

(Fun fact: that was actually written to find bugs in the base game. Found two.)

teal bridge
#

This turned out even more hilarious than I'd hoped. Just try to tell me this isn't the best thing ever.

plucky reef
#

that's awesome.

teal bridge
#

Penny got a little stuck at the end but meh. That's with 4x acceleration.

frail plank
#

Is there an easy way to prevent a tool from being recovered by lost & found if it isn't in the player's inventory after day change?

brittle pasture
frail plank
#

How'd you find that? Decompiled code?

teal bridge
#

This part of the mod accelerates time while waiting for fish bites. The speedup isn't a video editing trick, that's what the game is actually doing.

#

Mainly, watch the clock and the NPCs.

lucid mulch
teal bridge
#

(I can change the speedup to 16x in config if 4x not dramatic enough for demonstration purposes)

plucky reef
#

does the pathfinding for NPCs get worse as the game speeds up?

teal bridge
#

Could have been a coincidence, I did use world_settime to skip ahead to the part of the day where those NPCs start walking, so maybe Leah (e.g.) wasn't supposed to be in that exact spot at that exact time.

eternal mortar
#

is there a way to make an npc manifest only after a certain event?

lucid mulch
#

immediately after, no.
the next day, yes using the UnlockConditions field in Data/Characters (See: Kent and Leo)

shut edge
#

anyone know any mods that have added new trinkets yet?

lucid iron
#

I have a wip framework

shut edge
#

cool

lucid iron
#

Unfortunately no docs or anything like that yet monS

shut edge
#

thanks, i'll keep an eye on it

#

hey that just lets me push back my ideas more!

lucid iron
#

The basic things it can do is animate the companions in simple ways

#

And apply effect like "buff" or "projectile" or "drop item" on particular events

shut edge
#

can it do like arbitrary sprite sizes?

lucid iron
#

Yeah

shut edge
#

rad

#

i'd like to make a follower that shoots enemies eventually

lucid iron
#

Yeah it can do that

shut edge
#

hell yeah

lucid iron
#

Tho I didn't implement fancy projectiles yet

#

So u r stuck with the default ones

shut edge
#

yeah i'm patient lol

#

i'll get to it eventually hopefully

#

tbh the example files look solid to me tho

lucid iron
#

This stuff ain't coming out before 1.6.9 since game changed a bunch of stuff in the trinket classes

shut edge
#

directions indicated on the sheet is so rare lmao

#

i've made several animal mods and still am not confident about which frames are supposed to be what...

lucid iron
#

well i needed that for testing cus im not very good at imagination

#

its also got little dots that indicate which frame

shut edge
#

smart!

lucid iron
#

if u want a build (for 1.6.9) i can make one and put on github

shut edge
#

nah i can wait

#

glad to hear it's in the works tho

lucid iron
#

glad there's interest SDVpufferthumbsup

plucky reef
#

Interest here too, I have plans for a trinket that will a little jumino that follows you around and does stuff. Bit down the line though.

shut edge
#

that's a good concept

lucid iron
#

I haven't really tried this yet but it should be possible to use trinket tinker for the basics, and only implement a custom Ability class in C# to do the special not covered stuff bolbthinking

plucky reef
#

atm it does some healing but not as much as the fairy, maybe a root but not as good as the ice rod, some mana regen, and have an option to infuse the magic hair gel into it so you can look fly and have your minion at the same time. Subject to change though, I might discover something cool while building the rest of this out.

lucid iron
#

Oh well I didn't impl mana regen ofc

frail plank
lucid iron
#

Hair gel bolbonfire

plucky reef
#

yeah mana regen is easy enough to put in a C# class

frail plank
#

Thank you!

lucid iron
#

But yeah I would like to make it possible to use this framework while adding just the classes u need

plucky reef
#

harmony was not as scary as I thought.

frail plank
#

It's scares me 🙃 I'm working on my first ever mod

half tangle
#

this may also be helpful with its Stardew-specific examples https://stardewmodding.wiki.gg/wiki/Tutorial:_Harmony_Patching

Stardew Modding Wiki

The world of Harmony is a bit of a lawless land, but it's incredibly powerful. You can pretty much implement anything you want, but you can also break anything you want. With that in mind, you should begin by reading the main wiki's intro to Harmony to get you set up. This tutorial will focus on the actual patching and assumes you already unders...

lucid iron
#

You may want to consider if your item really ought to be a tool

#

If it's meant to be loseable like that

brittle pasture
#

I don't think the missing tools check for modded tools. I only see axe, pickaxe, hoe, watering can, scythe and the return scepter in the code

spice cloud
#

I am trying to patch a map with a config condition. Does it look right for the patching of the map or not?

plucky reef
#

asset requested has a "lost on death" bool for custom tools but you want to make it gone forever?

lucid iron
spice cloud
#

Yes, just before

lucid iron
#

Yeah looks like right syntax, can try it in game

#

The red squiggles is from default json syntax check

#

You should use jsonc instead

uncut viper
spice cloud
#

Oh! That's a good catch, thank you SDVpufferfingerguns

slender badger
#

Quick question, if you have a custom map with an embedded custom tilesheet and then later try to Load that tilesheet instead for conditional edits, will it still use the embedded version? If it does, is it possible to unembed the custom tilesheet without having to recreate the map?

frail plank
uncut viper
#

when you say embedded do you mean the tilesheet .png is just in the same folder (in your mods folder) as the map file itself?

#

or do you mean embedded as in theres no separate .tsx file defining the tilesheet

slender badger
#

Possibly using the wrong terminology, maps aren't my forte 😅

uncut viper
#

i think that just means the data about where to find the tilesheet (and its tile information) is in the .tmx itself, otherwise you get a separate .tsx file alongside the .png

#

embedded is what you generally want i think, and it should mean it just looks in the same directory that the file is in for the tilesheet

#

I think SMAPI? or maybe content patcher? one of the two makes it look in your mod folder first, and if it doesnt exist, it checks Maps/

slender badger
#

That's what I thought initially, but I don't know why else my edits wouldn't be applying SDVpufferthinkblob

plucky reef
uncut viper
#

if you keep the .png in your folder with the map, it will use that static version with priority

slender badger
#

This is my tilesheet load:

        {
            "LogName": "Load Temp Map Tilesheet",
            "Action": "Load",
            "Target": "Maps/ForestCrops",
            "FromFile": "Assets/{{TargetWithoutPath}}.png"
        },```
and this is the relevant edit code block:
```json
        {
            "LogName": "SF/VT Art Compatibility 2",
            "Action": "EditImage",
            "Target": "Maps/ForestCrops",
            "FromFile": "Assets/{{TargetWithoutPath}}_{{SimpleFoliageCompatToken}}_{{VanillaTweaksCompatToken}}.png",
            "FromArea": { "X": 0, "Y": 0, "Width": 48, "Height": 96},
            "When": { "HasMod |contains= Az.Foliage, Taiyo.VanillaTweaks.Farming": true }
        },

The conditions are met, but the patch summary isn't saying it's applied

uncut viper
#

(as far as i understand anyway, but im not 100% on it)

next plaza
#

Ack, ping sorry

uncut viper
#

oh ok i was understanding correctly

next plaza
#

Embedded status doesn’t matter though

slender badger
#

Ah, so I just need to have it located in a separate folder?

uncut viper
#

anywhere but the same folder as the .tmx

next plaza
#

Yeah, otherwise SMAPI will load it as if it was with internalassetkey

#

I helped desty with something similar recently 😅

uncut viper
#

(when i said embedded is what you want generally i just meant bc having the .tsx file is kinda useless and just another file to worry about)

slender badger
#

Gotcha! I'll get stuff moved around then, thanks!

next plaza
uncut viper
#

useful in some cases then, i stand corrected SDVpufferthumbsup

slender badger
#

It's working! SBVPufferParty Thanks again!

woeful lintel
#

Hoy, @teal bridge, now that I solved my C# issue, I'm really looking into lazy loading, but I realised that if I make the framework load the properties only when it needs them, modders will only know that their Furniture is unparsable when the loader tries to load them, isn't this an issue?

uncut viper
#

wouldnt they find that out as soon as they tested their furniture?

woeful lintel
#

yeah, but it feels like it would be easier to debug if there's an error when the game loads instead of when the player places the Furniture

uncut viper
#

its no real different from having to spawn in a custom item to make sure it works right

woeful lintel
#

also, if I load everything in advance, I can discard any Furniture that has unparsable properties, now I have to implement default behaviors for any property that failed to load

uncut viper
#

why cant you still discard it?

woeful lintel
#

that's not a huge issue for some of them (just make an empty property), but how would I do it for stuff like collisions?

woeful lintel
# uncut viper why cant you still discard it?

I don't need to parse the collisions until the player tries to place it, but when they try to do so and the collisions can't be parsed, I can't discard the Furniture type entirely because it already exists in the game Furniture list

uncut viper
#

if the collision is only being parsed when the player places it, then that doesnt solve the problem of a modder not knowing their furniture is unparseable until even later than the loader loading them

#

if they need to place it (or try to) before you can parse it, then it doesnt matter when you load it, just when they place it

woeful lintel
#

that's the question: I currently load everything at once, I've been advised to use lazy loading for performance, but that causes this issue

uncut viper
#

when were you parsing the collisions before?

woeful lintel
#

on game start, or when a pack is manually reloaded

uncut viper
#

so why cant you still do that when the data is lazy loaded?

woeful lintel
#

the goal is to parse it only when it's needed, to avoid parsing it if it's just to show the Furniture icon in he shop for example

uncut viper
#

wasnt the original suggestion just to only rebuild the data when the asset is requested after an invalidation?

#

rather than immediately after invalidation

woeful lintel
woeful lintel
uncut viper
#

i dont think half-loading furniture was the point of lazy loading, just not loading the furniture entirely if its never gonna be used. but if you are at the point of loading the furniture, then the assumption is that it is going to possibly be used, or else the asset wouldnt be requested in the first place, so you should make sure its functional

woeful lintel
#

also what do you mean by "half-loading furniture"? what's the difference with "not loading the furniture entirely" you mentioned should be done instead?

uncut viper
#

the game probably isnt going to request Data/Furniture immediately, though, is the point

#

my "half-loading" was referring to you only parsing the overall furniture but not the properties inside it

brave fable
#

is it too late to request for 1.6.9 that npc.tryToReceiveActiveObject(Farmer who, bool probe) be replaced with npc.tryToReceiveItem(Farmer who, Item item, bool probe) so people can check non-active items for gifting SDVpufferflat

lapis creek
#

I want my custom fish to show up at both sunrise and sunset, two seperate time periods. the field in the json only allows one spread opf time though? Could someone give me a pointer on how I could achieve this?

brave fable
#

i used npc.canReceiveThisItemAsGift(i: gift) in 1.5 but now that doesn't exist

uncut viper
# brave fable i used `npc.canReceiveThisItemAsGift(i: gift)` in 1.5 but now that doesn't exis...

that removal was listed as a breaking change for 1.6 in general so its potential equivalents were already considered, so its probably not likely especially this late into 1.6.9, and you'd probably have to rewrite a lot of the function to make it work (why replace it instead of add a different function, anyway?), but ofc im not Pathos

does object.canBeGivenAsGift not work for your case?

brave fable
#

well they're not exactly the same method

uncut viper
#

i know, just asking bc its listed as the closest equivalent for that removed function

brave fable
#

npc.trytoreceive() has a lot of contextual checks for the world state and such, item.canbegifted() just checks if it's a table or a fence or something SDVpufferfush

uncut viper
#

can you just store the current active object of the farmer, set it to the item you want to check, and call tryToReceiveActiveObject(probe: true) before setting the activeobject back to what it was?

brave fable
#

it feels like it'd be simple enough to swap out the Object activeObj = who.ActiveObject; line at the top of the npc method for a param

uncut viper
#

well, theres quite a lot of places in that function that specifically check Farmer.ActiveObject

#

not just activeObj

brave fable
#

consistently inconsistent

wicked gulch
#

Hi everyone)

uncut viper
#

dont get me wrong, id also find it useful to have a function that does what you want, but if something like a fix for zero schedules isnt even getting into 1.6.9 bc of possible regressions, i dont think an overhaul of tryToReceiveActiveObject is gonna be either

brave fable
#

overhaul might be a little generous, i'd just hope to be able to replace a local with an arg

#

'zero schedules' sounds a little more intimidating

floral canyon
#

hi guys, it's me still making my sunroom mod. I wonder who knows the magic behind WallIDs? I'm trying to make parts of my sunroom walls decoratable, and I have checked how it works in other mods but no results so far 😢

formal crown
#

What are you trying to do?

#

What type of location your sunroom is?

floral canyon
#

its a PIF room. farm, greenhouse, treatasoutdoors

formal crown
#

Afaik, you can use WallIDs thing only if your location is recognised as DecoratableLocation in C#, which Greenhouse map isn't

floral canyon
#

Ah okay! That's good to know

formal crown
#

I suppose you could try changing Greenhouse building data's IndoorMapType to StardewValley.Locations.DecoratableLocation and see what happens

floral canyon
#

Its easier to just delete the isGreenhouse flag from the map

#

I tried that but it made no difference

#

so The room isn't a greenhouse anymore. I guess it's not about that?

formal crown
#

Yes its not about the IsGreenhouse flag

formal crown
floral canyon
#

I have checked a PIF room that has decoratable walls and it doesn't have StardewValley.Locations.DecoratableLocation ?

formal crown
#

PIF?

#

(Plant in Farmhouse? Random guess 😆 )

floral canyon
#

Or where should the StardewValley.Locations.DecoratableLocation be in the code?

#

It's PIF personal rooms

#

It's a framework for adding rooms

formal crown
#

Ohh

#

To the farmhouse/cabins?

floral canyon
#

yes it adds doors and then you can select a room SDVpufferparty

formal crown
#

In that case ignore the whole DecoratableLocation thing, because farmhouses/cabins are recognised as that too

floral canyon
#

okay SDVpufferthumbsup

formal crown
#

This is a bit difficult to see, but Maybe try adding WallID | Wall TileDatas to top tiles of your wall, just like in vanilla sheds (which you can change walls and floors of)

floral canyon
#

I have done it 👍

#

I have added WallIDs : PersonalSunroom in the map properties. then I have two tiledata objects in the back that have WallID PersonalSunroom

formal crown
#

What happens if you change values to Wall

floral canyon
#

there is a mod PIF Balcony that has these exact values and it's working

#

Wall is not mentioned in any of the maps i hvae seen?

#

So instead of WallID I could put just Wall?

calm nebula
#

Assign the item you want to a player's TemporaryItem

#

It's amazing effective as a way to put something in activeObject without disturbing anything

#

goes back to sleep

brave fable
#

the world creates only the smallest problems to test my patience. behold, the default line spacing increased in sdv 1.6, just enough to make my text not fit

vernal crest
floral canyon
vernal crest
#

Oh, you also can only use tiles from the walls_and_floors tilesheet when you make the map in Tiled. It doesn't let you redecorate them otherwise.

floral canyon
#

ohh. so if i make another back layer that has those tiles under what i have now it works maybe?

#

or does it have to be in buildings layer?

vernal crest
#

The white ones might just cover the other ones up so they change so you can't see them, but you can try. I thought that the walls_and_floors tilesheet tiles and the object properties both have to be on the Back layer but maybe that's not true.

#

Also maybe in 1.6.9 you will be able to use any tilesheet with "walls_and_floors" in the name...I am embarrassingly hazy on that point considering how recently we ran into this issue and Pathos organised a fix.

floral canyon
#

yeahh it doesn't work. made the back layer to use the walls n floors but no difference

vernal crest
floral canyon
floral canyon
#

okay I tested and yes, the walls work when theres nothing on top of them

vernal crest
#

Okay, well that's good. Now you know you can do it so once 1.6.9 is out you can have your nice white walls be decoratable too :)

brave fable
#

use case: when gifting a wrapped gift, check if the item inside is giftable

#

cuts deeper than line spacing

#

maybe it's just better as a harmony patch

proud gyro
#

um, i guess this is the best place ro ask XD
so, if im playing on xbox, and i join someone who is playing on mobile, and thry have a mod on, will i be able to see and use it?

#

or is there anyway to get mods on console?

finite ginkgo
#

This is more a question for #modded-stardew however, no, you can’t mod on console

blissful panther
#

You kind of can on Switch, but you're heavily limited in the types of mods you can use, and you risk your Switch and Nintendo account by doing so.

lone ice
#

Hello all! Does anyone know how to program changes to tilesheet properties in content patcher?

#

Like if I wanted to make it so a specific tile on a tilesheet for every instance in a map NPCPassable

#

A lot of tutorials say "this is more commonly applied to a tilesheet instead of a coordinate on the map" but don't say how you do it

lucid iron
#

MapTiles on EditMap i think?

#

oh but that is for particular tile

#

if it's your custom map you can just edit the embeded tilesheet Bolb

lone ice
#

no I wanted to edit the properties of an embedded tilesheet for a vanilla map

drowsy pewter
#

i dont thinkn you can do that via a text CP edit

lone ice
#

ah okay

drowsy pewter
#

more like edit the map file and then patch the whole map

#

but i could be wrong

lucid iron
#

it feels like the kind of change that could mess up npc pathing too, if its not your own custom map

lone ice
#

I'm trying to make certain tiles in water passable for a mermaid

lucid iron
#

maybe instead of extending the forest map

lone ice
#

fortunately all other NPCs wouldn't start out inside the boundary

lucid iron
#

add a warp to some new custom place?

#

then u can do whatever u want

lone ice
#

I mean she has a custom map but I wanted her to swim around all the water bodies in the game

#

just randomly appearing

lucid iron
#

hm

lone ice
#

the problem is a lot of but not all water tiles have been set as non-passable and used as random decoration

lucid iron
#

i really dont think its good idea then, regular npc will start walking into water now

lone ice
#

no I mean other Buildings tiles stop you from being able to get there

#

you have to start out in the water to get there at all

#

but in the water there are barriers that don't need to be there

lucid iron
#

unfortunately its not a thing u can do with just content patcher Bolb

#

u can manually put what tiles to make NPCPassable but that seems like a lot of compat shenanigans

lone ice
#

yeah that would be insane 🤣

#

it would be one thing if it were like, one tile in my way

#

okay let me ask this then; would it cause any problems if I modify the forest map but not the maps associated with fishing days/ holidays?

#

she could just avoid the water in her schedule any day there's a specialty map and the change wouldn't be visibly obvious

#

I was avoiding modifying the town and forest maps because they're so complex

tiny zealot
#

replacing a vanilla map is asking for trouble, unfortunately

hallow prism
#

it's possible to patch small areas and maybe do stuff with 000 schedule but yeah, i think some warps to custom maps may be better in term of global compat

lone ice
#

yeah i've been working in patches

#

I'll stick to that then

lucid iron
#

for non passive festivals npcs don't really path right

lone ice
#

it's not a huge deal to cover the lower portion of the lake with an identical lake that just doesn't have rocks

lucid iron
#

just have festival positions

lone ice
#

mhm

#

okay thanks everybody!

hallow prism
#

i mean, it's not a huge deal then

#

it may be a huge deal later when you'll have to make a patch for SVE and Reimagined 3 and 4 and this mod adding a npc house in the beach and this mod patching the entire area for no reason

#

i just don't want you to think it'll be just a few patches and all will be fine

#

in the end you do the project you want to do

teal bridge
#

I'd either handle it that way, or, have a validation that runs on startup.

lucid iron
#

wouldnt furniture be accessed on load in most cases?

#

game needs to know about beds

woeful lintel
woeful lintel
# lucid iron wouldnt furniture be accessed on load in most cases?

it depends, I can parse basic info about all Furniture to fill Data/Furniture, but some of it (like collisions, lights, seats, ...) can be parsed only when the Furniture in question is actually placed/loaded in a map, and I can parse every Furniture independently

teal bridge
#

In this case, what we are referring to as lazy loading isn't exactly about the waiting per se, it's allowing it to be invalidated.

#

You say that they'd have to wait until it's loaded - but then, if they invalidate during gameplay and the data is invalid then, they wouldn't have known at game start either.

woeful lintel
#

After thinking about it for a while, I started to work towards having a default case for every property that could be parsed later and have invalid data.

teal bridge
#

So the best you can do is either allow the modders to validate on demand (console command) or validate on startup (but don't keep it in memory).

#

I am rather partial to the approach of "handle invalid data as best you can (don't fail) and just log warnings about it" plus the console command, that to me is the best of both worlds.

woeful lintel
#

validating on startup but not keeping in memory would be weird

woeful lintel
#

I'll have to make sure my default properties won't fail tho, that would be pretty bad

teal bridge
#

(re: validating on startup being weird) - I suppose, but validating on startup doesn't necessarily require you to load 100% of the assets. For example, suppose the "data" points to some files on disk and you don't need to actually read the contents of those other files, just prove that they exist. It's situational though.

SMAPI validates on startup; for example it warns if you're doing console logging. But doesn't actually run that code.

#

The trend is Stardew is definitely toward "best effort", c.f. ItemRegistry.GetItemOrErrorData and similar.

#

I'll just add that a framework is mediating between the modder and the user. So you might think it's pointless to have a console command that forcibly loads and validates the data by cycling through them all and placing them all in a map. But remember that this is a troubleshooting aid for the modder; your responsibility to the player/game engine is to be performant and memory-conservative.

woeful lintel
woeful lintel
teal bridge
#

Sounds like you're on the right track then.

pine elbow
#

I'm not sure if this is the right channel or better for the arts one, what's the easiest way to add a gradient effect to a piece of clothing? The tutorials/example packs I can find for fashion sense are for single colour items only but see in other mods like hair that there is a colour mask or something like this and also some accessory mods that have 'layers' in the FS dialog. Anyone know how/where I can find some info on doing this?

proud gyro
eternal mortar
ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on macOS Unix 13.5.0, with 41 C# mods and 39 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

cinder thorn
brisk kraken
#

For the sprites of a custom NPC, can I use Elliot ones as a base or because it has a lot of specific spirtes, that could be problematic? I want to make schedule animations like fishing, sitting and drinking and he has all of that.

cinder thorn
#

You can, it should not cause any problem at all

brisk kraken
#

And for, like, making the character go all Sundays to the same place?

#

I know about specific dates, like, spring_10. But dunno how to make it for a specific day of the week

cinder thorn
#

You use "Sun" as the schedule key iirc

brisk kraken
#

Thanks again!

eternal mortar
ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on macOS Unix 13.5.0, with 41 C# mods and 38 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

cinder thorn
#

Your tsx file had some problems?

eternal mortar
#

do i need to start over or smt then

cinder thorn
#

You can try to send the map zip file here

#

I think something went wrong with the tsx file, maybe file path and such that you didn't notice,. which can be fix by just open the file in a text editor and edit it to the correct file path (which is no path, just the name of the png)

#

For example

eternal mortar
#

I have multiple tsx files, is there a specific one not working? im so bad at this. also by map zip would that just be me sending over my maps and tile sheets?

cinder thorn
#

If you have a file called "spring_outdoorsTileSheet.tsx" then try to open that file with a text editor, and check if the png file in "source" is actually just the file name and not a whole long file path

velvet narwhal
#

(did you also make sure to embed all of your tilesheets? i can't check from this dinky laptop)

cinder thorn
#

You can also screenshot what you see inside the tsx file here

eternal mortar
#

kk

eternal mortar
eternal mortar
velvet narwhal
#

there's a little button somewhere next to "add new tilesheet" that when you have the tilesheet selected it'll say "embed tilesheet"

#

have you edited any of the vanilla tilesheets, or are you just taking from the vanilla ones, exporting the tilesheets, then creating a new map?

cinder thorn
#

See the source="../TileSheets/townInterior copy.png"? It need to be "townInterior" only

eternal mortar
#

ah ok makes sense

cinder thorn
#

Is your townInterior copy.png a custom tilesheet or you want to use the game's one

eternal mortar
#

the games one 😓

cinder thorn
#

Alright, then it should be "townInterior" only

#

Do you actually have another folder named "TileSheets" inside of your mod folder?

eternal mortar
#

yeah, is that bad?

velvet narwhal
#
 </tileset>``` oh good my github lets me look at the sourcefiles, it should look like this
keep the same width and heights that they already have, you have to nuke the /...FOLDER/CLIMBING/
#

replace spring_Shadows with whichever tilesheets you're using

cinder thorn
#

All tilesheet .png, .tsx and .tmx should be in the same folder

eternal mortar
#

ohh ok sorry lol

velvet narwhal
#

oh that'll screw with the width and height lemme fix that

cinder thorn
#

So the thing you can do to fix this is:

  1. Move the pngs to the same folder as your tsx and tmx
  2. Change the source inside your tsx files to be the png file name only, so for example source="spring_outdoorsTileSheet.png" or "townInterior.png" if you are using the game tilesheet, or "yourCustomTilesheetName.png" if you want to use your own custom tilesheet (if it doesn't work, remove the .png from the tsx file so it become source="spring_outdoorsTileSheet")
eternal mortar
#

ok let me go fix that and ill see if it works, thanks so much!

nova gale
#

turns out the monster.reloadSprite method always resets the sprite size to 16x16

#

poor poor chopped in half golems

brisk kraken
#

Okay, if the fishing animation is a 2x1, how I need to write it? If I do it normally it turns into a fishing pole xD. The numbers are 40, 41, 42 and 43

finite ginkgo
#

Spacecore allows for bigger sprite animations

brisk kraken
#

I have spacecore, how I can do it? Im using a .json

finite ginkgo
#

You can check out the space core docs

brittle ledge
#

I think Void does it with Fishmonger if you need an example?

brisk kraken
#

Yes please, I cant figure it out

ornate trellis
#

hi thats what i used

brisk kraken
#

Thanks, im going to check it out

#

I assume, I need to place inside content.json, where the others animations are, right?

ornate trellis
#

yeah

eternal mortar
ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on macOS Unix 13.5.0, with 41 C# mods and 38 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

cinder thorn
#

What's inside your spring_outdoorsTileSheet.tsx file?

eternal mortar
#

nvm i figured it out

cinder thorn
#

😆

eternal mortar
#

i forgot to correct the file path for that one

#

tysm!

brisk kraken
cinder thorn
#

Can you post your log?

brisk kraken
#

Uhhh I fixed it rn, but I dunno why. I just deleted some {}

lucid iron
#

@gilded comet so when r u make fishing overlay but faster AnnelieStare

silver snow
teal bridge
#

Looking good. So how are you planning to use it?

silver snow
#

for me it answers the question of "what's the average coins/catch for (area)"? which is my personal use case

#

besides "i like programming" and all 😛

gilded comet
teal bridge
gilded comet
#

i just got obsessed with the math. i love the math lol

silver snow
#

tbh if the algorithm wasnt terribly expensive this would be extremely viable over sampling

lucid iron
silver snow
#

for actual mods

lucid iron
#

I think this would be more of a better fishing tv channel type of mod

silver snow
#

though tbh it could be fine as is so long as mod calculations dont block game processing

lucid iron
#

For ppl into that kind of diegetic info

silver snow
#

"fishing channel" -> "the optimal place to fish 2day is [loc]. start minmaxxing NOW"

teal bridge
# lucid iron It's about how much curtain you are peel back I think

It's usefulness to me. Khloe's Almanac IIRC shows the defined probabilities of each fish. You can manipulate those with targeted bait, daily luck, seeded randoms, etc. But then you're outside the "planning" realm and into the "execution" realm and that's where the "distribution" becomes largely irrelevant.

silver snow
#

i cut out the fish data but this is what i get as-is (likely not 100% accurate)

#

it uses the same stats for each, so it's a good comparison -- but it hardly represents an individual player and their scenario

teal bridge
#

I mean, I think the best locations are already known... Spring - mountain on sunny days, forest on rainy days; Summer - beach; Fall/Winter - don't fish.

silver snow
#

yeah, sure -- but knowing more detail is what im up to here

teal bridge
#

(Why would town be different from woods, do they not have the same fish or are you incorporating waterfall stuff, legendary fish and so on?)

lucid iron
#

Woods have pond I think?

teal bridge
#

Which is also part of the problem, if you just try to sample for an area then you're ignoring differences in tiles.

lucid iron
#

Which is different than river

silver snow
#

yeah, right now this completely ignores distance and tiles

teal bridge
#

Sorry, I meant forest there, not woods.

#

Woods are secret woods.

#

Anyway, what I was getting it is that players don't fish in "forest", they fish in a particular part of the forest.

brittle pasture
lucid iron
#

The cindersnap forest pond is different than river for fish list is what I mean

#

So yeah it's probably good to consider the within map zones

silver snow
#

it should be noted that im far from done with this, the utility still needs to consider a lot more variables than it does now

#

the only variable factors not hardcoded are weather, season, and time currently

#

and ideally i avoid pulling up the game to get the max fishing distance possible per fishing area 😛 so ill probably end up hardcoding some stuff anyway under the assumption the world map will be much less subject to change than fish distribution

#

right now the utility doesn't know anything about the game map, it only looks at Locations.json

teal bridge
#

And don't get me wrong, as I said this can probably be useful if you are using it for some kind of route planning (assuming you're trying to discover something new, maybe optimize a route using modded fish instead of vanilla fish or something).

#

I was only pointing out the meh-ness of showing a random distribution overlay in the game itself, since you aren't actually going to achieve that distribution.

silver snow
#

Oh honestly I dont care much for established rules of thumb, all they do is get me asking why and how much do they matter

#

That is very much an IMO thing, but yes, thats also a part of me making this. I like knowing where that comes from

teal bridge
#

If you are min-maxing then they matter a lot... if not, then they matter not at all.

silver snow
#

I like knowing how good each spot is, I just dont like having to stick to a rule of thumb for it

#

Rather I prefer to stick to numbers I can reasonably trust

teal bridge
#

Super-cucumber fishing is immensely profitable in Summer 1; pike fishing is pretty meh.

#

(You'll have to take into account targeted bait eventually and that is a very strange implementation in the game)

silver snow
#

I can also link the repo if you want to muse at the code, otherwise I am going to start implementing more control over factors like fish and -- yes, targeted bait

#

i mean, all i have to do in my mind is recalculate the base probability it is chosen if it is selected

#

but of course i have to take a better look at it too, i know it's a bit janky

#

i got a headache enough knowing there's prob=1 for fish inside of Locations.json for those in Fish.json, which then roll their chance in the general fish requirements function

rancid temple
#

Any time I look at the spider web that is fishing, I want nothing to do with it ever

teal bridge
silver snow
#

yeah, this is a lot for that

#

but also just my general curiosity

teal bridge
#

(But in so doing I've become intimately familiar with the fishing distribution, so... there's that.)

brisk kraken
# ornate trellis yeah

Sorry to bother again, but I dont understand how "DrawOffset" works. I get that with "SourceRectSize" you make the sprite 32x32 instead of 16x32 because clint hammer sprite is quite big. Because Im using the Elliot fishing sprite as a base, it should be 16x16 so I make those four sprites into two, or I am totally wrong?

ornate trellis
#

no you make the whole thing as one sprite

silver snow
#

this is also something that is somewhat future-proof as far as new fish goes, which i like

#

not having to recalculate by hand every time a new fish is added to a loc is cool

#

though, yeah, forreal this time im going to go back to improving the code

ornate trellis
#

so you make it 32x32 and this increases the tile for the sheet so you have to count your animation frames differently

teal bridge
#

Although surprisingly 1.6 didn't really affect the best locations all that much, only the overall value of fishing and approach to it.

ornate trellis
#

so the sheets tiles change from
0, 1, 2, 3
4, 5, 6, 7
it turns to
0, 1
2, 3
etc

teal bridge
#

Fishing mods would totally change it, though.

silver snow
#

I guess it did? SDViconghost

brisk kraken
silver snow
#

I stopped playing for a good while, so I wouldnt know

teal bridge
#

The main things 1.6 added were fish smoker and targeted bait.

brisk kraken
#

Should I do the spacecore change and then the "Target: Data/animationsdescription" so it can run it?

teal bridge
#

Smoker must factor in the cost of recipe + materials + coal, bait maker materials + expected outcomes.

#

The practical outcome is mainly that fishing is a lot more profitable compared to dives on certain days or at certain times of day, but only if done "right".

silver snow
#

One thing in particular im interested in figuring out is scaling fish price by average quality, right now I clamp it to some quality based off average size and use that

ornate trellis
silver snow
#

price scaling is not quite linear when iridium quality is involved, for instance, so im thinking linear interpolation of the closest two values

teal bridge
#

Hmm... by the time you're minmaxing fish, you're probably getting minimum gold quality. Depending on player skill the distribution might be anywhere from around 75/25 iridium/gold to 10/90.

#

Why interpolate? It's your code so just predict X% gold and Y% iridium and do a weighted average.

silver snow
#

true that, though rn i assume no perfect catches IIRC

#

it would be interesting to factor in player skill because the ratio of perfect catches will depend on the fish

silver snow
#

it could just be (100-difficulty)% perfects per fish

teal bridge
#

Makes sense as a first approximation. If you're working on incorporating that then maybe make perfect % an input to the program.

silver snow
#

which puts it as 85% for carp and 0% for glacierfish for example

teal bridge
#

Granted, perfect super cucumbers or ice pips are a lot harder to get than perfect carp, but the gold difference between a gold and iridium carp is hardly anything anyway.

silver snow
#

the harder to catch, the less perfects you get. thats pretty accurate to the game

#

(and you'd get 20% perfect for super cucumber)

teal bridge
#

You could look at the fish behavior to decide that, too.

silver snow
#

true, some scale for mixed/sinker/floater could be nice

lucid iron
#

It would be fun to know how much player skill is needed to make challenge bait better than targeted bait

#

If it ever hits breakpoint

silver snow
#

oh that would be rough to calculate lol

#

player skill is subjective category anyway, but it is nonetheless important.. and truth be told im not considering bait rn either. so much to do

teal bridge
#

Yeah, sinkers/smooth are generally very easy. And then there's the % chance of... I forget the word, of reversing direction.

ornate trellis
#

just test it ingame

teal bridge
#

But really, all that being said, fishing is wildly more profitable in areas with the hard to catch fish, and profit from all other fish can be essentially ignored in the calculation in terms of strat-planning.

#

So just having one input parameter for the % of perfect catches would be a very good first approximation.

brisk kraken
next plaza
#

(You have to specify individual frames)

noble jolt
#

If I'm having Robin send a letter to trigger being able to upgrade the greenhouse, would I need to add an event entry, or would it just be triggered by the pantry being completed?

brisk kraken
next plaza
#

And yes, that might prevent the whole thing from working, depending on how it gets deserialized (there should be a warning in SMAPI if so)

teal bridge
#

Hey Casey... didn't want to bug you about this with a ping but since you're on... do you think there's any way in GMCM to replace an entire menu page with a custom control, or alternatively, have the mod or section shortcut open a submenu?

next plaza
#

You could probably use a custom widget that on clicked uses the IClickableMenu child menu stuff

teal bridge
#

I mean, without doing horrible things with reflection/publicizer.

next plaza
#

Though I might need to make input not be detected if that's the case, unsure

#

I can't recall if it works automatically

tiny zealot
#

you can in fact use a custom widget that can open a child menu. one sec

next plaza
#

(I mean, I didn't have to for Satchels, and it uses the same UI system)

teal bridge
#

That'd be the latter solution I assume, right? Custom page is probably a bit too out there.

next plaza
#

Yeah

brisk kraken
next plaza
brisk kraken
#

OnFrame should be literraly what you just send me?

#

Yes, the : takes it as a syntax error

next plaza
#

Oh, I did it wrong

#

It should be { } not []

next plaza
#

So "OnFrame": { "0": { "PlaySound": "slosh" } }

teal bridge
#

Hmm, maybe I should transpile the GMCM page renderer...

next plaza
#

Oh boy

half tangle
#

How do I get the tile index of a tile in Tiled? I can open the .tmx in a text editor and see the huge array of numbers but finding the x, y of said tile requires counting commas... I feel like I have to be missing something obvious

next plaza
#

You can hover over a tile to get it

#

In the bottom left

#

[638]

half tangle
#

ah, thanks, Casey!

brisk kraken
next plaza
#

Can you post a log and the json?

brisk kraken
#

There is no log about it

next plaza
#

Still

brisk kraken
#

And that, the log is clean. No warnings no errors

teal bridge
#

If I am reading this correctly, GMCM doesn't actually use submenus for the SpecificModConfigMenu, it just replaces itself (either as Game1.activeClickableMenu or titleMenu.subMenu) with the specific mod config.

next plaza
#

Correct, it predates childmenus

teal bridge
#

So maybe I could just hijack the click on the mod name and open up a totally separate menu. It would "feel" like part of GMCM.

next plaza
#

Ah, I thought you wanted just a single part of your config like that, not a virtual entry on the main page

teal bridge
#

Well, GMCM adds a few things, like the save/cancel buttons in the footer.

#

(of the specific mod config page)

#

But aside from those, I was indeed thinking of the entire page.

next plaza
brisk kraken
next plaza
#

Are you on 1.6.8 or 1.6.9?

brisk kraken
#

1.6.8 it seems, there has been a recently update?

next plaza
#

There's a public beta for 1.6.9, just haven't tested it thoroughly with SpaceCore myself yet

#

If you run patch export spacechase0.SpaceCore/ScheduleAnimationExtensionData in the SMAPI console and look at the resulting file, is your animation there?

rancid musk
#

I should probably test Better Crafting against 1.6.9, since there was that change made to crafting ingredients supporting qualified IDs. 🤔

next plaza
#

Yeah... fun fact, you can't sell non-object/BC recipes in shops

#

If you do you'll get the recipe item in your cursor instead of learning it

#

(I did a sword and could swing the resulting recipe item)

rancid musk
#

Perfect.

next plaza
#

(It was still transparent with the recipe icon though)

brisk kraken
next plaza
#

Okay, that log would really be helpful right now

rancid musk
#

... System.Object lol

brisk kraken
next plaza
#

.log

#

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

brisk kraken
#

Ah wait... Maybe... I need to update space core? it says it needs an update

next plaza
#

Potentially, what version are you on?

brisk kraken
#

1.23.1

#

New one is 1.25.2 so I assume yes, it could be the issue

#

If not, I found the log file

next plaza
#

Yeah that was introduced in 1.24 it looks like

#

(I really should maintain proper changelogs so it's easier to figure that out)

brisk kraken
#

Oh, it "works" now

#

I guess I used the wrong numbers, lol

#

And the sound plays

calm nebula
#

I thought that was fixed

next plaza
#

I encountered it yesterday 😄

noble jolt
#

How would I flag a letter to be sent when the greenhouse is completed? should it be "uniquid/ccPantry?" or /ccIsComplete ccPantry"

next plaza
#

(My dev workspace is still on 1.6.4)

finite ginkgo
#

(why)

next plaza
#

Because Lazy<CatInSpaceSuit> Casey;

finite ginkgo
#

You know what fair

calm nebula
next plaza
#

Ahhhh

#

Well I'll test that later today

#

(In a meeting right now)

lilac stratus
#

where does the game use the new cat/dog/horse icons?

lucid iron
#

what are you refering to?

lilac stratus
tiny zealot
#

character creation and pet adoption menus

lilac stratus
#

thanks

tiny zealot
#

(don't know about the horse)

ornate trellis
#

pet relationship menu too, right

tiny zealot
#

that one is a walking sprite, i believe

lilac stratus
#

pet relationship menu? what's that?

ornate trellis
#

🤔

#

oh right i remembered wrong for some reason

tiny zealot
ornate trellis
lilac stratus
#

ah, all animals

#

was confused by 'pet'

lucid iron
#

oh i thought these were there in 1.5 too

#

dunno about earlier

next plaza
#

There wasn't that tab in 1.5

tiny zealot
#

in 1.5, the pet and horse icons were on the status page (with their names)

rancid temple
brisk kraken
#

It finally works, thanks a lot @next plaza

velvet narwhal
#

Oh is it mail lmao mobile hates me

lilac stratus
#

okay, still looking for places which use the new horse icon

rancid temple
#

Yeah, HasFlag is for When conditions but PLAYER_HAS_MAIL is the GSQ

velvet narwhal
#

I hate that cp has "hasflag"

#

It screws with me so much

lilac stratus
#

as a bonus question: can graphics in this animal menu specifically be moved a few pixels down through CP?

tiny zealot
#

i don't know of a friendship menu offset anywhere in the data models, so i expect no

rancid temple
#

UI is pretty firmly in the realm of C#

tiny zealot
#

(for NPCs we were lucky enough to get MugShotSourceRect, but i'd say that's an exception)

velvet narwhal
#

Did that only come about because of krobus?

tiny zealot
#

i think actually because of lacey SDVpuffersquee

#

(i was in the 1.6 alpha thread and i requested support for it in order to remove a harmony patch i was using in 1.5)

finite ginkgo
rancid temple
#

I guess it didn't come up when the pet menu was coming about? Seems like it should be relatively the same in functionality

next plaza
finite ginkgo
#

That part, yeah, it's a little iffy there

brittle pasture
#

The change was to make recipes obtained outside of shops (ie. from trash diving or fishing) learn the recipe instead of just entering your inventory

#

presumably it was done via that function that runs on item entering inventory whose name I can't recall

#

while regular shop recipes still use on purchase

nocturne niche
#

hey, are we able to retrieve current stats of the player? like current speed, current xp for a skill, current health ...

next plaza
#

I had to patch the meleeweapon onpurchase thing to get mine working

#

But again, 1.6.4

#

Specifically

#
    [HarmonyPatch(typeof(Item), nameof(Item.actionWhenPurchased))]
    public static class PurchaseElysiumBladeRecipeFix
    {
        public static void Postfix(Item __instance, ref bool __result)
        {
            if (__instance.QualifiedItemId == "(W)DN.SnS_ElysiumBlade" && __instance.IsRecipe)
            {
                if (Game1.activeClickableMenu is ShopMenu shop && shop.heldItem != null)
                {
                    ( shop.heldItem as MeleeWeapon ).Name = "DN.SnS_ElysiumBlade Recipe";
                }
                __result = true;
            }
        }
    }
proud wyvern
#

although specifically XP percent/progress of a current level for a skill could be problematic, if that's what you need

rancid temple
#

Oh man, who made the mod that lets you check stats with CP

next plaza
#

Sophie I think, stats as tokens

#

I forgot about that for a moment

rancid temple
#

I thought there was a more recent one too

proud wyvern
#

(unless that changed since 1.5.)

lilac stratus
plucky reef
#

but you can't pull current xp, then do math compared to the thresholds?

proud wyvern
#

you can't easily get the thresholds, unless you also hardcode them

plucky reef
#

ah

proud wyvern
#

but mods could possibly change these thresholds without reading them

plucky reef
#

depending how the mod changes the xp curve (ugh why would you do that) I can see it being quite pesky to try to grab.

gilded comet
proud wyvern
#

i had to resort to a bisection algorithm in XP Display to get it right, without hardcoding haha

next plaza
#

Yeah, New Game+ does make levelling take slower for example

#

It does it using everyone's favorite prefix return false on Farmer.checkForLevelGain

next plaza
plucky reef
#

there's a New Game+?

next plaza
#

I meant my mod, sorry for being unclear

lilac stratus
brittle pasture
lucid iron
#

you can decompile the StardewValley.GameData.dll to see the data model definitions

rancid temple
#

Unpacking might be kinder

lilac stratus
#

can I just say this code is wonky at best?

lucid iron
#

(i suggest only bc they are already looking at ilspy, but yes unpacking is important too)

rancid temple
#

Ah, yeah, I only suggest it for looking at data because it's a lot easier to parse and the json's tend to get all the optional fields just marked as null

void aspen
#

where does sprites for seeds stored at?

#

I think I might've deleted Objects_1 file if it ever existed

rancid temple
#

Pretty sure it's Maps/springObjects

finite ginkgo
#

Maps/Springobjects

rancid temple
#

!springobjects is a command right?

ocean sailBOT
#

Most vanilla object sprites are in the Maps/springobjects asset. See a table of springobject sprites by index.

Some newer object sprites are in TileSheets\Objects_2. You can check the entry in Data/Objects to see where its sprite is stored; SpriteIndex is the position, and Texture is the asset name (defaulting to Maps/springobjects).

void aspen
#

ohh, thanks guys!

rancid temple
#

!json you can plug it into the validator site to share it

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.

rancid temple
#

!codeblock or there's the code embedding for snippets

ocean sailBOT
#

You can embed code in Discord using a series of three ` :
```
Your code can go here
Even if not a haiku
Just an example
```

For syntax highlighting, add the language code on the same line as the first
``` (with no space, like ```json).
The usual codes are cs (C#) and json.

noble jolt
#
  "Action": "EditData",
  "Target": "Data/TriggerActions",
  "Entries": {
    "{{ModID}}_RobinGreenhouse": {
      "Id": "{{ModID}}_RobinGreenhouse",
      "Trigger": "DayEnding",
      "Condition": "PLAYER_HAS_MAIL Any ccPantry",
      "Actions": [
        "AddMail tomorrow {{ModID}}_RobinGreenhouse"
      ]
    }
  }
},
{
  "Action": "EditData",
  "Target": "Data/mail",
  "Entries": {
    "{{ModID}}_RobinGreenhouse": "Hey @,^I noticed the old Greenhouse has been fixed!^If you ever want to upgrade it just swing by.^I can start by adding a watering system.^It will be 5 battery packs, 6 quality sprinklers, and 10,000g.^^-Robin[#]Upgrade Greenhouse"
  },
lilac stratus
#

oh wait lol, unmodded also looks wonky

noble jolt
#

i couldn't remember if it was ' or `

finite ginkgo
rancid temple
#

"AddMail <targetPlayer> <mailName> tomorrow"

noble jolt
#

ah, ty ♥

rancid temple
#

Target player should probably be Host for a greenhouse related thing

#

I don't think the farmhands have any real say in that matter?

noble jolt
#

i mean, they can upgrade coops and barns no?

rancid temple
#

(I don't play multiplayer lol)

lucid iron
#

there's only 1 greenhouse, are you making some kind of buildable greenhouse thing?

rancid temple
#

You would need to test if farmhands can actually do the upgrade, I have no idea really

noble jolt
#

No, i'm making it so that once you have unlocked it Robin will send a mail about being able to upgrade it.

uncut viper
#

the farmhands should still get the letter though

rancid temple
#

It wouldn't do any good to send them the mail if they can't is all I'm saying

noble jolt
#

along with the upgrades

rancid temple
#

Actually, I guess letters get saved in the impossible to search without a mod menu right?

noble jolt
#

I think they should be able to, i've been a farmhand on a friends game and been able to upgrade their barns/coops

rancid temple
#

!startmodding in general is a good place to start with modding

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.

rancid temple
#

!decompile is good for looking at how the game is handling switching languages, though I don't think you can do it in the middle of a save

ocean sailBOT
noble jolt
#

Once I get the code in a state for testing if a friend can't upgrade, i'll change the player then. Trial and error, and all that. 😄

uncut viper
#

even if farmhands can't perform the upgrade i would still prefer to receive the letter as one to know it was unlocked as an option for our game in general

rancid temple
#

Button plays multiplayer so you should listen to her moreso

noble jolt
#
"AddMail  ALL {{ModID}}_RobinGreenhouse tomorrow"
uncut viper
#

doing world state checks is probably better on the host (if you have reason not to check everyone anyway) but just receiving mail is w/e, I think anyone who plays modded multiplayer should expect that not everything will be 100% for farmhands

rancid temple
#

Right, that's where decompiling the game would come into play, but I still don't know how much of the game you would have to rewrite to make it switch languages on the fly

#

I'm going to guess somewhere in the ballpark of most of it though

lilac stratus
#

is there a place where we can submit PRs please ;_;

plucky reef
#

changing language is on the main menu right now, I wonder if trying to do it in a save would require some kind of hot reload. Interesting idea.

lucid iron
# lilac stratus

it is currently 1.6.9 beta, so if you ping pathoschild and make a decent case about why something should be refactored, it might make it in

#

otherwise there's the suggestions forum

rancid temple
#

Rewriting the game would be exceptionally difficult, well beyond a beginner level. I don't actually know if that would be required though, I think as a beginner you'll have enough on your plate just trying to figure out what it is you need to change in the first place

plucky reef
#

!ilspy

#

What's the command.

lucid iron
#

you need to look at how the main menu language change works and figure out how to both change the language and reload localized assets

plucky reef
#

Basically you run the ilspy program on the stardew file, open up the decompiled folder in Visual Studio 2022 or whatever IDE you use, and then you can search around in there to see how the game loads languages.

lucid iron
#

with mods you also need to reload_i18n

rancid temple
#

!decompile I believe is the command you're looking for

ocean sailBOT
rancid temple
#

Which I did already send before lol

lucid iron
#

yea this is gonna be C# mod for sure

plucky reef
#

ooh and a nice little config option for which languages to switch it to.

#

this one sounds fun

lucid iron
#

the hardest one to do on the fly is prob events

#

not sure if simply invalidating the content would affect an inprogress event

velvet narwhal
#

i don't think reloading works in an in progress event either? i think it sticks to the script that's already loaded?

rancid temple
#

Yeah, there's a lot of stuff that's cached, which is why I think it would involve a lot of rewriting how the game works lol

uncut viper
#

nor would it work on already opened dialogue

#

possibly not unopened but loaded for the day dialogue either

lucid iron
#

ah u can open the lang menu with debug language

rancid temple
#

Oh neat

lucid iron
#

yea the reloading is pretty spotty

#

the signs in town dont change until u change location

#

but items n description seems to work fine

rancid temple
#

Hm, I'm not sure about that lol

lucid iron
#

*non modded items

#

menu doesnt reload_i18n rip

rancid temple
#

Name but not description here

plucky reef
#

could you do something like, button press, record player position, change language, fade to black, warp player out, warp player in to recorded position, fade in, new language loaded onto map.

uncut viper
#

Both the name and description changed in those pictures though

rancid temple
#

Even switching to Spanish, a language I only took one year of but remember well enough to know that it's not a bunch of angry symbols, doesn't work quite right lol

lucid iron
#

hm it works for me when i switch to chinese

#

special linux feature trust

#

but possibly some wacky font handling too

uncut viper
#

Maybe need to reload the font file too sometimes

rancid temple
uncut viper
#

Is it a 1.6.8 vs 1.6.9 thing?

rancid temple
#

I'm on 1.6.9 if so

#

Switching back to English the broken descriptions are still broken lol

velvet narwhal
#

there were some things that did get separated for translations in 1.6.9

uncut viper
#

Tool related strings were one of them I think

rancid temple
#

I updated a couple mods and now I have coordinates and map name in the top left... but I have no idea which mod is doing it lol

uncut viper
#

Well, it's not technically difficult to just loop over every item in the game and manually update their text if necessary

#

Just kinda expensive

#

(won't help with the dialogue or signs though)

rancid temple
#

Every item in every inventory on every map and all the data assets, should only take a couple seconds maybe

uncut viper
#

I mean there's already a utility function for it

#

Utility.ForEachItem will loop over every item in the world

rancid temple
#

Huh, these are different from the last time I poked them

uncut viper
#

The utility functions?

rancid temple
#

Yeah, I can't navigate into the helper script

lucid iron
#

ah yea it dun work on tools

rancid temple
#

I think that might require more work, there's a lot of text in the game

lucid iron
#

does work on big craftables

rancid temple
#

I wonder why it wouldn't let me ctrl click into this function, I can search it just fine in the solution

lucid iron
#

you would need to make the strings asset for all lines i guess, and then somehow deal with i18n

velvet narwhal
#

were you trying to do like, some kind of 'learning language' style?

uncut viper
#

i don't even know what Ctrl click normally does in ilspy (i assume) so beats me

velvet narwhal
#

where everything is a duplicate, aka english vs whatever other language? cause that's definitely feasible but that's also extremely painful sounding

uncut viper
#

oh solution probably not ilspy. dunno even more then

rancid temple
#

Oh I don't use ILSpy normally, I typically bop around in my saved decompile with VS

brittle pasture
#

(while other items fetch their desc from object data on the fly)

rancid temple
#

Ctrl click on a function or any kind of reference usually just takes me to that appropriate code

#

Which has let me jump even into the code I don't have actually have decompiled

lucid iron
#

oh maybe check the csproj?

rancid temple
#

But this is apparently decompiled so I'm not sure why it wasn't working

lucid iron
#

whether it is point to right dlls

#

i was dum once and moved my decompile, need to fix manually afterwards

rancid temple
#

Hm, I was having a different issue with weird flickering so I redid my decompile save just this morning

#

Didn't fix that issue either lol

#

Looks right as far as I can tell too

velvet narwhal
rancid temple
#

Oh maybe I need to put a reference to Internal

#

I did actually think Internal was part of the stuff that's not normally decompiled, so I'm not sure why it's showing in my VS as normal because I don't see it in the SDV folder. I think I'm gonna just leave it alone though, it technically still works, just not the way I was expecting lol

lucid iron
#

hm i have a StardewValley/Internal in the decompiles

brittle pasture
#

Internal is part of the main dll

rancid temple
#

Hm

noble jolt
#

for this bit, i probably need to make a seperate edit for the map to load right?

  "IndoorMap": "{{Mod_Id}}_Greenhouse",
brittle pasture
#

you can change your gender in the base game, with the shrine of illusions

hallow prism
#

(why would you want a custom language with different languages for different gender however?)

supple jackal
#

How important is the step "Click View > Options, scroll to the "Other" section at the bottom, and enable 'Always qualify member references'" in decompiling? I finally got the Mac version of ILSpy to actually open but for some reason it won't let me select new options. I can deselect them but not add them (??) 🫠

hallow prism
#

(and the token for ~~language ~~ gender switch should workeverywhere i believe)

lucid iron
#

i think this is same deal as making a custom language that just displays eng followed by spanish for all lines

#

possibly worse in case a UseGenderedCharacterTranslations is needed for stuff

#

for time being i would recommend following the C# modding intro links sent earlier

#

and decompile the game so that u can look at LanguageSelectionMenu

silver snow
#

(WIP) targeted bait, and a new print-out at the top to provide an overview of the current stats in use

noble jolt
#

oh boy. I have no clue what i've done wrong here, but it made SMAPI mad

uncut viper
noble jolt
#

😮

uncut viper
#

you only closed the "Entries" part

noble jolt
#

oof

#

those things are so easy to miss. ty

#

Apparently some stuff got moved around weird, there was an extra } near the end

lapis creek
#

I really need a hand here because I cant seem to find it for the life of me. I'm looking for the location data for the ice layer and lava layer of the mines in order to put fish in them but the ice pip for instance appears to not even be tied to any location data in the game files after looking at every reference to them. Why dont these floors have location data?

brittle pasture
#

Mine layer fish are hardcoded EDIT: Kinda, only the default fish is, but UndergroundMine still works for 20 and 60

#

you need C# if you want to add new fish to them layer 80

lapis creek
#

...dang

#

thats a huge bummer

brittle ledge
#

Wow, really? I never noticed MNF had a C# component.

lapis creek
#

I guess I gotta figure out C# then? I'm terrible at programming languages

brittle ledge
#

Fiona, More New Fish adds mine fish but I'm unsure if it's updated for 1.6 yet.

lapis creek
#

it is, I can check its code again. I may have missed if it adds ice or lava layer fish tho

nova gale
#

a lot of things about the mines are hard coded btw

lucid iron
#

u can do stuff in the mine entrance though

#

maybe u add a little pool there to put fish in

nova gale
#

I updated them in a super janky way in my old dwarvish mod for 1.4, and this time around i decided to just make a new area completely "below" the mines, because it's actually less work then trying to overcome all the hard coded mine stuff

lapis creek
#

I very much want these specific layers, but if MNF has a way I can borrow from it so we'll see

lucid iron
#

and maybe volcano caldera ok to add fish in

#

need to double check

lapis creek
#

yeah the Caldera is free game

nova gale
#

yeah, it's a normal area

#

I am a curious how Lumina added a ladder to the mine, I assume it's in the C# portion of VMV though

lapis creek
#

MNF only touches floor 20 which seems to also be a normal area listed in locations

#

it's just the ice and lava floors locked

nova gale
#

sorta

#

it's because the way the mines work are by layout

brittle ledge
#

SDVpufferthinkblob huh, I could've sworn it hit all three areas. I guess it has been a while since I used MNF

nova gale
#

then the tilesheets and stuff get replaced based on floor level

nova gale
#

I'm curious if that actually adds the fish to all the mine fishing levels or only the first one

#

depends if the code clears then rebuilds the fishing list or if it adds to

#

probably clears and rebuilds

brittle pasture
#

ok taking a second look at the code for mine shaft, and it seems like for level 20 and 60 it will use UndergroundMine once all the hardcoded fish choices are exhausted?

nova gale
#

but for floor 80 it defaults to trash or cave jelly if I'm reading this right?

brittle pasture
#

yeah, 80 is hardercoded

nova gale
#

extra hard coded

#

so, you'd actually have to transpile this to change level 80?

#

or could you do it with a post?

patent atlas
#

We need a community framework called SofterCoder which replaces the entire game code

brittle pasture
#

postfix is fine, just check if it's a trash item (the default fallback) and tackle your extra logic on top

#

but anyway I think UndergroundMine can work? sorry for spreading misinformation lmao

nova gale
#

for ice and basic it sounds like it could yeah

lapis creek
#

I never expected such hurdles to add a few new fish lol

#

I just want variety on the fun mines floors :/

#

I guess I gotta figure out what the heck a postfix is

nova gale
#

I'm a bit suprised there isn't a full "just edit the mines" framework

brittle pasture
lapis creek
#

Yeah I heard you and thank you; but I was hoping to specifically add to at least just level 60 but not 20 as well.

#

Which seems like it'd need C# anyways right?

brittle pasture
#

Maybe you can use LOCATION_NAME? Dunno if it works for mine levels though, let me check

vapid rivet
#

heya! im returning to stardew after a while and im going full on with mods of every kind

#

does anyone know must have mods? im currently searching all the videos i can cus i wanna commit to a world without changing it that would make life so much better are appreciated (like tinier horse)

lapis creek
brittle pasture
#

LOCATION_NAME Target UndergroundMine60 seems to work? Tested in the console

vapid rivet
#

oh mb! thanks for informing me thoSDVemoteheart

lapis creek
brittle pasture
#

don't think so, level 100 is gigahardcoded to immediately return trash instead of checking UndergroundMine

lapis creek
#

I guess this is also relevant as I was planning to try and replace the cave trash for my trash mod, I guess if I can figure out the code for "if lava eel then actuall roll a new fish" for down there I could also "if trash then replace with new trash" using the same skeleton... I'm so happy UndergroundMine60 seems to work but I think figuring out this C# for the long run will be important for both trash and fish mod.

#

Thanks so much for the help!

noble jolt
#

17:22:32 ERROR game Failed parsing condition 'PLAYER_HAS_MAIL Zinnalynn.UpgradeableGreenhouse_RobinGreenhouse': required index 2 not found (list has indexes 0 through 1).

uncut viper
#

you missed the Target parameter

#

for which player to check

#

PLAYER_HAS_MAIL Current (mail id here)

#

(for the current local player)

noble jolt
#
"Builder": "Robin",
"BuildCondition": "PLAYER_HAS_MAIL {{ModID}}_RobinGreenhouse",``` is what i've got
#

so i need the current?

uncut viper
#

you need to specify which player you're checking the mail for

noble jolt
#

okay. ty

uncut viper
#

you can use Current, Host, Any, or a specific multiplayer id (but usually just one of those first three)

#

oh and All

velvet narwhal
#

I'm wondering if conversation topic is like spouse dialogue where it eats literally everything

brittle pasture
uncut viper
#

conversation topics do have priority aftre spouse dialogue

#

iirc

velvet narwhal
#

I put it in your thread cause it ate the dialogue

noble jolt
#

my test farm is Farmer Farm Farm lol

#

i need an i18n to fix the name here don't i?

hallow prism
#

not necessarily

#

you need to fix the building informations mainly

#

i18n is not mandatory to do that

noble jolt
#

Ah. I see what I did wrong.

nova gale
#

will give it a try!

uncut viper
#

that GSQ just checks the location's Name property so unless the edit changes that it wont change anything

#

mine locations are just different/weird

#

(different/weird in that their name gets generated like that, not that they have a special case in that GSQ)

patent lanceBOT
#

@final arch: release a JA mod (3y ago)

uncut viper
#

damn

#

long haul

brittle pasture
#

JA 😭

final arch
#

I rly need context here bot xD

uncut viper
#

no context, get to it, you've got a JA mod to make now

velvet narwhal
#

Holy crap 3y

calm nebula
#

Magical crops

noble jolt
#

If I'm trying to get a map to be watered in the morning, would that be an "EditMap" or an "Include" action? I'm having trouble finding where the action for sprinklers being activated in the morning are.

final arch
#

sprinklers should work outside the farm if you mean that

noble jolt
#

nah, I'm wanting to make greenhouse upgrades, and have the first upgrade water what is inside the greenhouse.

lucid iron
#

3 yrs ago bolbphase

lucid iron
#

there's existing mods along these lines if u want to look at em

noble jolt
#

I've looked at em. Was hoping there would be a way to do it without c# that language is goofy.

lucid iron
#

well you can wait for button's cursed harmony cp thing

brittle pasture
uncut viper
#

i dont think- oh

noble jolt
#

i mean, you can "debug water" in smapi

teal bridge
#

First time I've heard C# referred to that way.

brittle pasture
#

so you can set a trigger to water the greenhouse map every morning

uncut viper
#

well i guess with that cloudy skies thing it would be possible

brittle pasture
#

my arcane knowledge gained from remaking the Framework page strikes again

noble jolt
#

😄

lucid iron
#

for what it's worth, watering all open dirt in a particular map is simple (as far as C# mod goes)

#

u can just do it in daystarted event

calm nebula
#

Fwiw as far as languages go

velvet narwhal
#

There's one very specifically that does 3 greenhouse upgrades but I can't recall it right now

calm nebula
#

C# is not that cursed

noble jolt
#

Yeah, I've been looking at them. Most of the ones that are upgrades, not just changing the map entirely, are older.

#

From at least a year+ ago.

teal bridge
# calm nebula C# is not that cursed

I think that's an understatement, it's really one of the best out there. I get to complain about it because I've spent so much time with it and appreciate all the good things about it, same as Rust.

velvet narwhal
#

Goofiest language is the polite one that got us on a tangent

nova gale
#

lol, oops, apparently i've made it so you can teleport to the island early in my mod :X

#

(one of the items that can drop is the island totem)

brittle pasture
#

(though we agree that out vars are kinda weird right)

uncut viper
#

i like out vars

calm nebula
#

I like out vars

lucid iron
#

out vars r just better way to express "give me a ref to modify" so i like it

teal bridge
#

Sure, high-performance C# is difficult, but the fact that it even exists is pretty amazing, you don't hear about "high-performance Java" or "high-performance python".

#

It's definitely better to do that stuff in C++, Rust, etc., if you can. But if you have a million lines of code in C# and need to seriously optimize one little bit of it, well, you can.

#

(Why are vars weird?)

lucid iron
#

hm i wonder if there is better way to fit ScrollableFrameView to content think

#

i am about to just measure the length of machine rules

calm nebula
lucid iron
#

b4 building the Lane

calm nebula
#

But yeah

lone ice
#

Hi all! Anybody know why this code from the wiki wouldn't work? I keep getting an error saying the texture doesn't exist:

  "Action": "Load",
  "Target": "Mods/{{ModId}}/FruitTrees, Mods/{{ModId}}/Objects",
  "FromFile": "assets/{{TargetWithoutPath}}.png" // assets/FruitTrees.png, assets/Objects.png
},
calm nebula
#

I think it's a perfectly fine language

uncut viper
lone ice
#

yes

uncut viper
#

what does your edit look like where you give objects those textures?

lone ice
#

but my filepath is a little odd possibly, I don't remember now how my folder got stacked in a folder : "...Stardew Valley\Mods\ShipsAhoy[SA] ShipsAhoy\assets\Objects.png"

noble jolt
#

Oh yea, it's not bad, but as someone still trying to learn programming languages in general, it's all foreign. lol

nova gale
#

which of those folders is your content.json/manifest.json in?

lone ice
#

[SA] ShipsAhoy

lucid iron
#

can u take ss of the mod folder?

nova gale
#

Then you need to move assets up one folder level I think or make your path "ShipsAhoy/assets/{{TargetWithoutPath}}.png

lucid iron
#

should be able to post img here

uncut viper
#

the "assets" folder needs to be in the same folder as your content.json in this case if it isnt already

nova gale
#

yeah, i might have misread your path, just realized it hink a slash is missng: I'm not sure if thats \Mods\ShipsAhoy\[SA]ShipsAhoy\ or \Mods\ShipsAhoy[SA]\ShipsAhoy

lone ice
#

so this is what you get with the missing texture

teal bridge
uncut viper
#

right, so we need to see your edit where you give the objects those textures still

lone ice
#

I moved everybody out of [SA] ShipsAhoy and into the general ShipsAhoy folder

uncut viper
#

what is the [SA] folder for?

lone ice
#

nothing now

lucid iron
lone ice
#
    {
      "Action": "Load",
      "Target": "Mods/{{ModId}}/FruitTrees, Mods/{{ModId}}/Objects",
      "FromFile": "assets/{{TargetWithoutPath}}.png" // assets/FruitTrees.png, assets/Objects.png
    },


    //Add a new item to the game

    {
      "Action": "EditData",
      "Target": "Data/Objects",
      "Entries": {
        "{{ModId}}_BoarMeat": {
          "Name": "Boar Meat",
          "DisplayName": "Boar Meat",
          "Description": "A big juicy cut of meat, still on the bone.",
          "Type": "Basic",
          "Category": -28,
          "Price": 200,
          "Texture": "Mod/{{ModId}}/Objects",
          "SpriteIndex": 7,
          "Edibility": 80,
          "IsDrink": false,
          "Buffs": null,
          "GeodeDropsDefaultItems": false,
          "GeodeDrops": null,
          "ArtifactSpotChances": null,
          "CanBeGivenAsGift": true,
          "CanBeTrashed": true,
          "ExcludeFromFishingCollection": false,
          "ExcludeFromShippingCollection": false,
          "ExcludeFromRandomSale": true,
          "ContextTags": [
            "color_red",
            "meat_item"
          ],
          "CustomFields": null
        }
      }
    },```