#making-mods-general

1 messages · Page 101 of 1

teal bridge
#

That is not normal... I do see that animation if I do the overhead left-click thing but never when just putting an item in the bin directly from the menu. Not for main farm nor GI.

#

...though I am using the Better Shipping Bin mod, maybe it's supposed to animate in vanilla and the mod is breaking it.

worn coral
#

I haven't tried with anything that changes the bin myself (I usually would have better chests... but I only use bare bone frameworks for testing) but this is just vailla with nothing, not even smapi on it

#

I'll re-install and re-validate the files, just in case

drowsy pewter
#

i was starting up my game and closed it because everyone was already testing it, but now theres so much confusion that I'm starting it up again to see for myself lol

#

yes, im able to get the animation to play on both the farm and GI

#

BUT

#

when im in the menu it only plays on the farm, not on GI

worn coral
drowsy pewter
#

GI animation is only when i drop it in from outside the menu

#

Yes

worn coral
#

Yep, exactly that

drowsy pewter
#

So there is a disparity between the farm and GI bins

teal bridge
#

Yeah, if I run without mods I get the same result.

#

So I guess BSB takes the animation away from the main farm as well.

lucid iron
#

oh i know its cus of the afromentioned thing

#

where islandwest is getting farm to use thier ship items method

#

IslandWest.cs

ItemGrabMenu itemGrabMenu = new ItemGrabMenu(null, reverseGrab: true, showReceivingMenu: false, Utility.highlightShippableObjects, Game1.getFarm().shipItem, "", null, snapToBottom: true, canBeExitedWithKey: true, playRightClickSound: false, allowRightClick: true, showOrganizeButton: false, 0, null, -1, this);

ShippingBin.cs

ItemGrabMenu itemGrabMenu = new ItemGrabMenu(null, reverseGrab: true, showReceivingMenu: false, Utility.highlightShippableObjects, shipItem, "", null, snapToBottom: true, canBeExitedWithKey: true, playRightClickSound: false, allowRightClick: true, showOrganizeButton: false, 0, null, -1, this);
uncut viper
#

if the farm shipping bin goes homf when using the GI bin, but no one is around to see it, does it make a sound?

teal bridge
#

I probably don't want to know why that difference in code causes that difference in outcome.

calm nebula
#

I can't see the difference in the codes

lucid iron
#

gotta check what is different about Farm.shipItem and ShippingBin.shipItem

#

oh yea tea you aren't testing with cueswap right, just vanilla?

uncut viper
#

does it animate the bin on the farm when someone uses the GI bin

teal bridge
#

Probably the only way to test that would be with coop, and ew.

lucid iron
#

just coop with yer self

teal bridge
#

You coop with yer self

worn coral
thorny tiger
#

yoyoyo

#

who knows the file path for the big craftables

#

in content unpacked thing

hard fern
#

tilesheets/craftables ?

ornate trellis
#

shrimply is right

hard fern
#

:3

thorny tiger
#

thank you muchly

rain basalt
#

just shrimply the best

patent lanceBOT
calm nebula
#

(The lightbulb has been changed.)

teal bridge
#

Is this a real or metaphorical lightbulb? If you needed nuts and strippers (heh) then it sounds more like you changed the whole fixture.

calm nebula
#

Yup. Replacing old fluorescent tube's with leds

lucid iron
#

is anyone on a mac wiling to help me debug mystery mod issue

#

yes it's my turn now SDVpufferpensive

rain basalt
#

sorry windows 11 here

velvet narwhal
#

wait what bug are you working on

worn coral
#

Win11 as well, sorry SDVkrobussad

lucid iron
#

so basically my trinket mod depends on a particular data field getting assigned

#

TrinketEffectClass

#

normally i do this automatically via a data edit to put typeof(TrinketTinkerEffect).AssemblyQualifiedName! in there

#

note the ! blobcatgooglyblep

#

i thought it cant rly be null, but i guess im wrong

#

maybe i just hardcode a backup Thqnkqng

tight ocean
#

hi possibly newbie and already asked questions but i couldn't find a solid answer searching: testing a beach sprite, is the easiest way just going to be fast forward mod + patience waiting for the weather/npcs to line up? or is there a faster way?

brittle ledge
#

SDVpufferthinkblob there's debug wctm but I don't know if it checks for location change

brave fable
#

other than that, wctm sounds like a good bet

tight ocean
#

gotcha, thank you both! i'll give those a shot

thorny tiger
#

i was about to ask why my machine wasnt working

#

i didnt have the additional item in my inventory

indigo yoke
#

@brittle pasture So looking at Archaeology to update to the latest version, you claim the bug that the restoration table showing 293214 days is on my end. Saying it's since it didn't set the data right in the machine data.

yet when I look at a cask output vs my output, they are identical aside from the input.

Cheese input: https://pastebin.com/mDHKhkP8
vs
Artifact input: https://pastebin.com/jMbZSiLz

#

they both have

    "MinutesUntilReady": -1,
    "DaysUntilReady": -1,`
drowsy pewter
#

isnt it the output method that determines the time

brittle pasture
#

I think the 999999 part is responsible

indigo yoke
#

tho that's the same as the cask code

#
        if (result > 0f)
        {
            Object @object = (Object)inputItem.getOne();
            if (!probe)
            {
                cask.agingRate.Value = result;
                cask.daysToMature.Value = cask.GetDaysForQuality(@object.Quality);
                overrideMinutesUntilReady = ((@object.Quality >= 4) ? 1 : 999999);
                return @object;
            }

            return @object;
        }
#

yet casks return the right value

brittle pasture
#

maybe UI Info have a special exemption for casks?

#

because its logic is kinda screwy in the first place

indigo yoke
#

It does, which is why I said it's on UI info and not archaeology

brittle pasture
#

ahh got it. in that case I suppose log it under known issues and/or throw a PR UI Info's way

indigo yoke
#

2Bthink that said, I could most likely change the minutes to ready to 7 days instead of using 999999. so it would give a semi-close answer

#

also since you're here, you said your mod that introduces water crops and machines framework takes care of automation mod compat right?

calm nebula
#

grumpy

drowsy pewter
#

i still need time to draw some nice water crops

calm nebula
#

(1) transpiler fails.
(2) but not for me (or lumi)
(3) user has provided harmony summary
(4) but no other transpilers on method

drowsy pewter
#

guhhh

calm nebula
#

nexus not loading so I can't inspect other mods code

uncut viper
#

transpilers remain the most fun method of patching, confirmed

rain basalt
#

trick question or not im working on a work around for things and was just wondering if you use multiple maps that replace the same map will Smapi complain or just ignore the layering

thorny tiger
#

yo

#

so

#

its not loading the next index when the machine is processing

#

ive got "ShowNextIndexWhileWorking": true

drowsy pewter
#

is it in the right location

thorny tiger
#

on the same level as MinutesUntilReady

drowsy pewter
#

no

calm nebula
drowsy pewter
#

it has to go under the machine data as a whole

#

not under the rule

#

let me double check

thorny tiger
#

i figure its on the right level as the wiki places it with WobbleWhileWorking

#

oh

brittle pasture
#

yeah it's global

rain basalt
thorny tiger
#

i had it on the machine as a whole and it said no

#

the machine just didnt work

calm nebula
#

I. Just. Want. To. Figure. Out. A. Single. Harmony conflict

brittle pasture
#

post your json then?

uncut viper
calm nebula
#

on object.placementaction

drowsy pewter
#

"it said no" sounds like you got the syntax wrong or something but we wouldnt know

frozen elm
calm nebula
#

here are my suspects

thorny tiger
#

ok turns out the problem with putting on the machine as a whole wasnt caused by that

rain basalt
rancid temple
#

If you do an Exclusive Load it will complain, if you set a priority then the higher one will do the Load and the other will not

thorny tiger
#

that works fine now the problem was LightWhileWorking

uncut viper
thorny tiger
#

not super sure how that works the wiki is a bit vague on how its used and smapi complains at me seemingly whatever i do

rain basalt
#

lol at this time i have 0 yellow and red messages

rancid temple
#

Look at all those prefixes

calm nebula
#

yeah, I WOULD if NEXUS WOULD LET ME

velvet narwhal
#

i unfortunately only have ... 3 of those?

calm nebula
#

you stupid 3209q3485t website <gets pulled away>

brittle pasture
uncut viper
#

theres a transpiler there thats failing

calm nebula
drowsy pewter
uncut viper
#

but only when you're not looking at it

indigo yoke
#

xD
toooo dynamiccccccc

uncut viper
#

what the heck is Nature.1011112

calm nebula
#

my guess is skillful clothes revamped

#

ahhh I wish I could get a harmony il dump from that user but that's a lsot cause

uncut viper
#

it is not

calm nebula
#

it's not?

ocean sailBOT
#

Log Info: SMAPI 4.1.6 with SDV 1.6.13 build 24313 on macOS Unix 14.5.0, with 210 C# mods and 629 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

uncut viper
#

oh wait i didnt download the revamped

#

maybe

#

"Nature.1011108" SDVpufferflat

calm nebula
#

joy

#

no source on smapi.io, let's see if nexus lets me in at last

uncut viper
#

its Nature's Boss Battles

brittle pasture
calm nebula
#

thank you! Let me decompile and take a look

uncut viper
#

(i am, very curious about this unique id naming scheme)

calm nebula
#

(I'm more mad at Nexus tbh)

#

for being a derp and making my mood worse

brittle pasture
#

(gladdened it's not my mod. I would not want atra be mad at me)

uncut viper
#

to be clear

#

im not saying thats the source of the conflict

#

im saying thats what that unique ID is for

calm nebula
#

yeah, and I was trying to be clear that I'm fundamentally mostly mad at Nexus here

#

that doesn't feel like it would be it

#

big fridge also seems fine

#

(I'm looking for some fool trying shit with generics, or not using a static method.)

rain basalt
#

<.< well ... map wise im using some generics but technicly its only for the config portion

#

and running into alot of troubles lol but working out my mess

calm nebula
#

you know what? fuck it

#

let's do the stupid thing

rancid temple
#

Unpatch SDVkrobusnaughty

velvet narwhal
#

i was gonna ask, how do i generate the harmony il because i have them all (plus more)

rancid temple
#

Trying to remember, I think you have to go into smapi-internal/config.json and set SuppressHarmonyDebug to false and then in your mod you set Harmony.DEBUG = true; somewhere, not sure if it's enough to just do it in your own mod though

calm nebula
#

(this is the stupid thing )

teal bridge
calm nebula
#

the problem is that I need the USER to do it lol

teal bridge
#

Check if a nullable value type got introduced somewhere.

calm nebula
#

so we're just dumping the isntructions to the log lol

tiny zealot
#

i hope all of those are narrowed to only the specific items they care about, like mine

calm nebula
#

so far so good!

#

just can't find my broken-il-suspect

rain basalt
indigo yoke
# brittle pasture yeah it should!

Okay so just making sure I am reading this right.

I make the bigcraftable object like I would any other. I then add in the context tags "custom_crab_pot_item" and "draw_water_overlay".

#

hmmmmm

#

might be a problem. I change loot tables of the machine based on what profession the player has

brittle pasture
#

spacecore has GSQs for its professions right

indigo yoke
#

to my knowledge I hope so xD

tardy adder
#

Oh CS critters property is 🤌✨

indigo yoke
#

also i don't know what GSQs is

uncut viper
#

[[Game_state_queries]]

#

fuckin a

#

they go in Condition fields

#

typically

lucid iron
#

is gsq new in 1.6 too

brittle pasture
#

yeah it is

indigo yoke
#

i thought binning had some machine outputs based on profession but looking at it's github it doesnt seem like it

brittle pasture
#

well I guess you'll need to roll your own then

lucid iron
#

pre 1.6 is like prehistory to me blobcatgooglyblep

tardy adder
#

GSQs are a wonder

brittle pasture
#

register your own "has X profession" game state query, and then use them in the Data/Machines condition field

uncut viper
#

you will still have to use spacecore's api for that query ftr if you want spacecore professions

brittle pasture
#

oh wait nvm SC does have it

uncut viper
#

as that is the only way to get the professions ID

brittle pasture
#

Every custom skill registered through the C# API automatically registers a PLAYER_<SKILLID_IN_CAPS>_LEVEL query matching the vanilla ones (such as PLAYER_FARMING_LEVEL).

#

wait no that's only for levels

uncut viper
#

thats for skills innit

#

there's a vanilla GSQ for professions but

#

afaik spacecore doesnt assign them ids determinsitically? or maybe it does? idk

lucid iron
#

yea ig u gotta roll own, maybe worth a PR to spacecore

uncut viper
#

or like, deterministically in a way you can predict

#

(due to varying mod lists and whatnot that also might add professions)

#

disclosure: im not 100% sure how spacecores system for it works

brittle pasture
#

yeah nope SpaceCore doesn't expose professions GSQs. but on the bright side rolling a new GSQ is like top 5 easiest C# task

indigo yoke
#

so I can do multiple conditions right? with like...

"Condition": "HAS_X_PROFESSION target, RANDOM .1"?

brittle pasture
#

yep!

lucid iron
#

a gsq is just a predicate that u can call from content

#

u do what u want with the args, as long as u return a bool

uncut viper
#

return this.Skill.Id.GetDeterministicHashCode() ^ this.Id.GetDeterministicHashCode(); yeah good luck without a custom query here

#

sorry thats a lil unfair i should copy the whole line
return this.Skill.Id.GetDeterministicHashCode() ^ this.Id.GetDeterministicHashCode(); // TODO: Something better

#

(/lh)

lucid iron
#

this does seem like, a good feature though Bolb

#

for skill mods in general

brittle pasture
uncut viper
#

3 years!

#

actually wait no maybe 6

#

idk how to read git blame on the website

#

ok no yeah its 3

#

fwiw its not like its really that bad, either

#

(actually it might still be 6 years, the 3 years is from pathos changing it from GetHashCode to GetDeterministicHashCode after 1.5.5)

indigo yoke
#

is there a wiki or guide on how the conditional "RANDOM .1" ect work?

Like if I have 50 times on the loot table, would I need to add them all up to 1 using .02?

uncut viper
#

idk shit about machines where is this Condition going again

shut grove
#

is it possible to have an alternate event if a player has a specific mod?

lucid iron
#

you would use a item query to roll all the possible drops into 1 rule

uncut viper
#

if its in the OutputItem entry then it just means it will only output that 10% of the time

shut grove
#

asking because I was wanting to have an event in the secret woods, and I know SVE totally changes it

brittle ledge
lucid iron
#

does every drop have same context tag?

shut grove
#

that way it doesn't double up

#

?

tiny zealot
indigo yoke
uncut viper
#

do you mean 50 different entries in the OutputItem list?

indigo yoke
#

yes

shut grove
#

thank you both! I'll keep that in mind so I can do the alternate versions of the event

uncut viper
#

i think machines just go down the list til they find the first valid entry right? <--- waiting for selph or chu

lucid iron
#

ya

brittle pasture
#

Are these entries weighted or anything?

lucid iron
#

theres a bool to control it, UseFirstValidOutput

brittle pasture
#

If you want 50 different possible items each with a 2% chance just toss all of them into one item query and use RandomItemId

uncut viper
#

if you have 50 different OutputItem entries each giving one possible item, then theyd each get a 10 sided dice roll until one succeeded or they got to the end of the list, yeah

proven agate
#

hi idk if this is the right chat for this but i just downloaded a few mods on stardew (i had them last update just updated this time) and whenever i open the game it keeps crashing, what can i do?

brittle pasture
#

!mh

ocean sailBOT
#

For help with modding issues, please ask in #1272025932932055121! When asking for assistance there, sharing an error log will help others identify your issue (see https://smapi.io/log for instructions).

uncut viper
#

but i also second what selph says

indigo yoke
uncut viper
lucid iron
#

the docs say u get a random one

uncut viper
#

hm. would it keep randomly choosing until it found one with a valid Condition, then... ?

brittle pasture
lucid iron
#

ig if u have 3 rules that would output Apple Orange Banana, UseFirstValidOutput=false would make u possibly get Orange or Banana too

uncut viper
#

what do machines do if none of them have valid conditions? does it just not let you put an item in in the first place

lucid iron
#

UseFirstValidOutput=true means always get Apple? i havent really tried

#

yep

indigo yoke
lucid iron
#

acceptance of item is tied to being able to output something

indigo yoke
#

ty for the help btw

proven agate
#

i just downloaded a few mods on stardew (i had them last update just updated this time) and whenever i open the game it keeps crashing, what can i do?

#

can someone help

lucid iron
#

but also it needs to be a itemplacedinmachine trigger

proven agate
#

thank you

lucid iron
#

thats why u cant put anything into coffee machine

#

it just magically coffee everyday

brittle pasture
#

anyway as mentioned, just use one item query with RandomItemId, or better yet, tag all your items in the loot table with a context tag, and then use RANDOM_ITEMS + PerItemCondition filtering on your context tag

uncut viper
#

wouldnt you still want to separate some out into different entries to separate different profession loot tables?

brittle pasture
#

yeah that too if you are so inclined

next plaza
#

Re: the profession GSQs

#

It's stored with the vanilla ones, you just need the int ID used for the profession

#

ie. Profession.GetVanillaId()

uncut viper
#

which is the determinstic hashcode of the ID spacecore assigns it that is then boolean logically XOR'd with another id

#

so not very achievable with just CP SDVpuffersquee

lucid iron
#

well its a skill mod anyways

next plaza
#

True, but you can output it from C# then use it in CP

lucid iron
#

could do asset edit to put in the real id

uncut viper
#

thats what the solution ended up being

#

or so i thought

lucid iron
#

rather than make a whole GSQ

uncut viper
#

you could also just make a token that returns the id

#

which is probably better now that i think about it, since that can be used with the CP HasProfession token

calm nebula
lucid iron
#

$"PLAYER_HAS_PROFESSION Current {Profession.GetVanillaId()}"

indigo yoke
#

The last question is what to do with the existing custom machines. I think instead of deleting the code and object completely from the mod, I'll keep the code and have the machines just delete themselves on day update. That should prevent issues for when the player updates the mod.

lucid iron
#

but only if u r do the data edits with C# rather than cp

lucid iron
uncut viper
#

my default assumption is usually "someone wants to use pure CP as much as possible". not always a good assumption, but it is my assumption most often

lucid iron
#

(jk tim coffee succ)

uncut viper
#

even when talking about C# mods sometimes i forget that they dont care to stick with just CP

tiny zealot
brittle pasture
#

tbh nowadays I try to stick with CP as much as possible

uncut viper
#

bc most people in here usually come asking for help with CP stuff

lucid iron
#

i think sticking to CP isnt that different than sticking to content (that i somehow edit)

lucid iron
#

its distinct from doing harmony stuff u kno

uncut viper
#

im still really into the idea of writing my mods with IL as suggested earlier

#

speaking of, hows that conflict going atra?

tiny zealot
#

sticking to CP is just a good idea. i am fond of saying on here that if you do anything even remotely complex via the content API, you will find yourself reimplementing CP's features but worse

lucid iron
#

what r some reimplement cp things u did ichor

limpid iris
#

Hi, I'm creating an stardew launcher, and I want to display the modded stardew's SMAPI version in detail screen, but I only found it in dll with ilspy decompile
Is there any way to get like vanilla version in "Stardew Valley.deps.json":[libraries][Stardew Valley/{version}]

uncut viper
#

cant do it worse if i just copy it from the CP repo in the first place #MITlife

tiny zealot
lucid iron
#

i dont think i used content api for anything more complicated than add a single new entry

#

that is pretty sin yes

brittle pasture
#

I wrote Fresh Farm Produce's notification mail, competition rewards, even the JojaFresh(tm) eligibility logic in C# before stopping and thinking "wait, this is just trigger actions" and redid all of it in CP lmao

uncut viper
#

tbf

#

trigger actions are a very easy system to reimplement

tiny zealot
#

(i'm sticking to SMAPI and the content api for my current thing because it's Not That Big and i like to keep myself fresh and have fun, but i did have to implement a few basic tokens and it was annoying)

uncut viper
#

so at least its not like it takes up too much time or has a large chance of being worse

#

im not sure how you could get worse without it being nonfunctional, tbh. which is not to say its bad, just that its very "does what it says and nothing more"

calm nebula
#

(....oh, not that MIT)

uncut viper
#

no, thats my normal life

tiny zealot
#

none of the context/update rate stuff, though. just basic ones that don't need to refresh like ModId and i18n

lucid iron
#

why do u need tokens if u just

#

format string blobcatgooglyblep

#

unless im misunderstand what tokens r

tiny zealot
#

i'm probably being glib or something but i have placeholders in my strings that i replace with other things

lucid iron
#

oh yea format string

tiny zealot
#

and i just made them look exactly like the CP ones

lucid iron
#

hm but c# format is {}

indigo yoke
#

just checking, this would be the correct way to do the GSQ? Apologies for all the questions

uncut viper
#

you probably dont want to hardcode it only checking the Current player

#

but like, you could if you did actually want to

indigo yoke
#

Target player would be better?

uncut viper
#

well, do you want it to only ever check the current players profession, or do you want to be able to check for e.g. the hosts profession when you're a farmhand too

indigo yoke
#

I would rather have it check the machine's owner

uncut viper
#

i have no idea how to do that

#

in the context of a gsq delegate anyway

#

i dont think the machine itself gets passed into the context

tiny zealot
#

if you have a way to get the correct Farmer via C#, i think you can pass that along to WithPlayer in some fashion

lucid iron
#

do machines have owner think

uncut viper
#

you can get the items that are being input or output, but not the machine producing the item itself

indigo yoke
#

dunno if all does tho

tiny zealot
lucid iron
#

well you do not have access to the machine object in the condition

uncut viper
#

yeah, so there is no real way to check the owners profession specifically

lucid iron
#

gotta prefix MachineDataUtility.CanApplyOutput if you want that

uncut viper
#

you could, in theory, transpile CanApplyOutput to use the GameStateQueryContext overload of CheckConditions instead (which it doesnt right now...) and send the data about the machine in that context's CustomFields dictionary

#

which is a string to object dictionary, which is perfect bc you'd need to store an int! /j

#

a long. whatever

#

(you can also ofc prefix this too but do you really want to skip prefix CanApplyOutput)

lucid iron
#

why dont u do it in BETAS button

uncut viper
#

no ones ever asked

#

and like

indigo yoke
#

2Bthink
I Wonder if I could just intercept each object during day update, then check if the owner has the profession, then just do a secondary loot roll in the code rather than trying to make a GSQ

uncut viper
#

it'd still only be accessible to a custom query anyway

lucid iron
#

and explod everyone else transpiler maybe

uncut viper
#

im very good with my transpilers, thank you very much

#

ive not exploded one yet

lucid iron
#

i wonder if u could like

#

do the content edit in c#

#

supply "FALSE" if owner no profession

#

oh but that is shared im dum

uncut viper
#

how would you apply that per machine

#

yeah

calm nebula
#

Transpilers::pufferthumbsup

#

The reader should note that I'm both exhausted and running a fever so coherence is negative today

rancid temple
#

Just don't say you do or don't support multiplayer, when people complain about a multiplayer issue, ask for a log and then close the report when they don't respond for a week, EZ

indigo yoke
#

actually, a postfix if Object.DayUpdate I think would work best.

I could have it be something like

postfix DayUpdate(args) {
    If game1.player == owner && game1.player.hascustomproffession {
      change the output item here
  }
}
uncut viper
#

hmmm

lucid iron
#

you could also consider doing output method

uncut viper
#

the Player in the context of a machine might actually be its owner?

lucid iron
#

like cask

#

Object machine, Item inputItem, bool probe, MachineItemOutput outputData, Farmer player, out int? overrideMinutesUntilReady

#

u get these things to work with in the outputmethod delegate

indigo yoke
golden basin
#

anyone else getting this audio error where when trying to play cusotm music your game just crashes?

brittle pasture
golden basin
ocean sailBOT
#

Log Info: SMAPI 4.1.6 with SDV 1.6.13 build 24313 on Microsoft Windows 10 Pro, with 103 C# mods and 288 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

brittle pasture
#

anyway I feel like just using the player in context should do it. that's what every other machine does

lucid iron
#

did they check for u that Assets\Music\FC.Marketpalooza.ogg is on their machine

tiny zealot
#

hey friends (perhaps especially button), anybody have an opinion on whether it is better or makes a difference to use a mail flag versus a stat for the unlock conditions on a new Data/Powers entry? the vanilla ones seem to use mail flags for the old ones and stats for the new (books)

uncut viper
golden basin
uncut viper
#

without another dependency

#

so mail flags are still good

lucid iron
#

if its multiple mods at once then even more likely that their mod folder is just messed up blobcatgooglyblep

teal bridge
uncut viper
#

books use stats bc they set a stat on read

golden basin
#

oh lordy

lucid iron
#

i was testing tea's mod earlier and it was fine

indigo yoke
uncut viper
#

correcting myself yet again, they increment a stat on read*

lucid iron
#

(tea's mod that has special sound for shipping bin open/close, done with cp)

golden basin
#

thats a replacement mod

#

right?

brittle pasture
# uncut viper when does Object.performDropDownAction happen then?

for "on machine put down" rules, use the farmer that put it down
for "input->output" rules, the farmer that put the item in
for "output collected" rules, the farmer that collected the output
for "day update" rules, the main farmer because the game cannot tell who interacted with it last

indigo yoke
#

(which does default to the current player if who?.UniqueMultiplayerID returns null)

lucid iron
#

yea

#

i did run into case sensitive at first but this person is on windows

tiny zealot
teal bridge
#

Psst, Selph, did you build your just-released mod against StardewUI v0.2 or v0.3? (Or rather, against the released version of 0.2 or the dev version?)

brittle pasture
#

0.2
I don't think I need to rebuild for 0.3? all the API functions I use seem unchanged

teal bridge
#

Yeah, the API hasn't changed, as long as you're not using any of the 0.3 markup features like translation bindings it should be OK.

brittle pasture
#

(other than the hot reloading one but I pulled that out of the interface)

teal bridge
#

Just asking because I saw your showcase post - ping me if you run into any issues in case I need to put out an earlier-than-expected Nexus release for 0.3.

indigo yoke
brittle pasture
#

no prob so far! I'm playing on my main save with 0.2 rn, everything is fine, the hover issue notwithstanding

indigo yoke
#

oh I guess I have another question...

If I change an object ID in the player's inventory from a regular object to a bigcraftable, everything will be alright with it?

brittle pasture
#

hopper maybe?

uncut viper
#

is a hopper what calls performDropDownAction

brittle pasture
#

like performObjectDropInAction will default to the owner, but in that case there is someone placing an item into the machine

uncut viper
#

my ilspy doesnt even tell me anything uses it

teal bridge
uncut viper
#

but i dont trust that it has too much code

indigo yoke
teal bridge
#

You'd have to create a new Item entirely to replace it.

faint ingot
#

I have this in my i18n to substitute the farmer name: "Events.239790020.009":"Oh, it's farmer @!",, but when I use it in an event it displays like this:

tiny zealot
#

@ is not replaced by the farmer name in textAboveHead, as you have noticed

faint ingot
#

oh, it only works for speak?

brittle pasture
tiny zealot
#

speak, mail, and some other places i imagine

uncut viper
#

the only thing textAboveHead does is apply gender switch blocks

brittle pasture
#

hoppers use performObjectDropInAction (putting something inside a machine). performDropDownAction looks very used to me (it handles placing a machine on the ground)

brittle pasture
#

one of the "for each item helpers" actually supports replacing one item with another seamlessly

#

look at the struct ForEachItemContext and the delegate type ForEachItemDelegate and the functions that use it

late pewter
#

Does anyone know if it's possible to force [AT] to display a larger sprite (for example, 32x32) for something like a BigCraftable? (Which normally uses a 16x32 Sprite)

brittle pasture
#

do you mean a big craftable that takes up 2 tiles instead of 1

#

there was a framework for that but it's not updated

#

higher res sprites in general need something like Scale Up

late pewter
#

No, I mean like it's still the regular old BigCraftable, but [AT] displays it with a 32x square sprite instead of a rectangle.

#

Or to put it another way:

{
"ItemName": "Basic Log",
"Type": "Craftable",
],
"TextureWidth": 32, <- Wider than Normal
"TextureHeight": 32,
"ManualVariations": [ ...

#

Will this display correctly or will Alternative Textures just cut the sprite off?

brittle pasture
#

It will cut it off yes. I don't think AT supports sprites beyond the game's dimensions

#

A 32x32 BC means it takes up two tiles like a furniture item

#

which is not a thing (not without the aformentioned framework that allowed for bigger BCs)

#

if this is not actually a machine, have you considered just making it a furniture

late pewter
#

No, I just want a bigger drawing canvas when making alternative textures for stuff.

tender bloom
#

There's no way to do that in AT that I'm aware of

#

And I would be very surprised if it was there

#

It would take significantly more C# to achieve that

brittle pasture
#

If you want more high res sprites, then scale up is your thing:
https://www.nexusmods.com/stardewvalley/mods/3130
(but I honestly recommend you just work with what the game gives you)

Nexus Mods :: Stardew Valley

Allows adding larger and or higher resolution textures via ContentPatcherImportant: Currently only available for the Stardew Valley 1.6 alpha !!

#

16 pixels are plenty

late pewter
#

TIL that Alternative Textures will gladly and willingly load the entire 32x image for a BigCraftable. And simply Squash it to fit. This implies that Alternative Textures may be able to natively handle an HD sprite? If I gave it a 32 x 64, it may well look normal, just 2x HD.

For anyone who wonders in the future what [AT] does with oversize sprites: This is what it does.

rancid temple
#

I think the reason is that AT is patching every draw call

#

Whenever you do your own draws you can put whatever texture size you want there, doesn't mean it'll look right if you didn't do the math to account for the scale

#

That's generally what Portraiture and Scale Up 2 are doing, the math to account for scaling

brittle pasture
#

huh that is interesting. I guess you don't need scale up for this after all

late pewter
#

What I WAS hoping for, however, was for the Junimo Tea Table (Placeholder example Testing sprite) To draw normally, just centered on the location of the Scarecrow here.

#

But alas [AT] cannot do that

brittle pasture
#

junimo tea table is just a decorative item right? Why not just make a furniture item then

late pewter
#

I was VERY hopeful for like a fraction of a second, but it was not meant ot be.

brittle pasture
#

you get to work with sizes beyond 1x2

late pewter
#

oops, ping

#

Well it wasn't a total loss, at least I learned something.

brittle pasture
#

(I don't mind pings!)
yeah that table will definitely look good as a furniture

late pewter
#

It already is.

velvet narwhal
golden basin
indigo yoke
#

hmmm, @brittle pasture anyway to make the item look better in the inventory or will it be stuck with it being bigcraftable size?

brittle pasture
#

nope
spoiler alert: ||look at garden pots some time||

indigo yoke
#

garden pot code or gardpot object data?

brittle pasture
#

nah I was making a joke, the garden pot looks weird in inventory as well since it's a 16x16 BC

slender badger
#

Jumping over here, Selph SDVpuffersquee
"{{Query: (({{FarmhouseUpgrade}} + 1) + {{Esca.EMP/GameStateQuery: BUILDINGS_CONSTRUCTED All}}) * {{BillScalingMultiplier}} / {{MultiplayerMultiplier}} * {{WeeklyMonthlyBilling}}}}" is what I've got for my current query check

indigo yoke
#

ah darn it xD

brittle pasture
#

so I filed that under "intended"

indigo yoke
#

cursed, CURSED I SAY

slender badger
#

I'm not sure how to convert the buildings GSQ into a number

brittle pasture
#

aaaahh I see, I guess you can manually put in a bunch of numbers

velvet narwhal
#

hmm yes math

tardy adder
#

Oh you want to use the number of building built

brittle pasture
#

yeah I don't think what you want is possible in CP only, sorry Airyn 😆

slender badger
#

Yeah, I'm thinking I'll have to set up dynamic tokens that just have a number as the value with When checks for the GSQ and go with >10 or something as the upper-most value

slender badger
indigo yoke
velvet narwhal
#

could you possibly make a customStat for each building with GSQ?

slender badger
#

Is that possible in CP? 😅

velvet narwhal
#

set a trigger action on Buildings_Contructed, with an incrementStat? this is me doing some crazy things

slender badger
#

Hm 👀

tardy adder
#

Stat: Taxability

brittle pasture
tiny zealot
brittle pasture
#

pathos pls

slender badger
#

All good on that front, Ichor, I'm using EMP to access them

tiny zealot
#

ah, carry on then

velvet narwhal
#

i rescind the F

uncut viper
slender badger
#

Not if the trigger action marks itself false afterwards, right?

uncut viper
#

it'd just increment endlessly, then

#

even if you're not building any more buildings

faint ingot
#

if you are referencing the farmer's farm name in an event, would you normally say %farm farm, or just %farm?

brittle pasture
#

former I think

velvet narwhal
#

oh right, becuase it's not counting new yeah

uncut viper
#

because if the condition was checking for one constructed building, that will be true every day

#

however

velvet narwhal
#

however "BETAS--"

uncut viper
#

you could, harmony patch a prefix onto performActionOnConstruction

#

yes, actually

velvet narwhal
#

will airyn be the first harmony crime-r?

brittle pasture
#

yeah about to say this looks like something throwable into BETAS

slender badger
#

As soon as the word harmony appears, I'm officially SDVpufferyoba 😆

uncut viper
#

thats the fucked up part, BETAS lets you do it in CP

velvet narwhal
#

yeah, airyn gets to be the scapegoat

uncut viper
#

one sec i need to

#

look at my own docs lmao

atomic vale
slender badger
#

I'm just gonna stick with my dynamic tokens, I think 😆

velvet narwhal
#

decrement counter on removal aSDVpufferbrows

slender badger
#

Dynamic tokens my beloved, who aren't unknown and scary 😆

#

(but thank you all for the suggestions!)

uncut viper
#

i could put the entire editdata patch in here for it even, but i can also definitely understand not wantin a dependency just for that

#

esp one you dont fully understand SDVpuffersquee

velvet narwhal
#

i am going to side with atra, harmony crimes aren't scary, it's when you do them wrong that atra comes out swinging

#

button finally makes a content pack for BETAS--your own harmony crime

uncut viper
#
"Action": "EditData",
"Target": "Spiderbuttons.BETAS/HarmonyPatches",
"Entries": {
  "BuildingCounter": {
    "Id": "BuildingCounter",
    "Target": {
      "Type": "StardewValley.Buildings.Building",
      "Method": "performActionOnConstruction",
      "Parameters": [ "GameLocation", "Farmer" ]
    },
    "PatchType": "Postfix",
    "Action": "IncrementStat BuildingsConstructed"
  }
}

for those following along at home who are curious how it'd even look

acoustic summit
#

That is a fun concept to entertain though

velvet narwhal
#

i forgot, what brought about the "i'mma implement harmony through cp" anyway?

uncut viper
#

literally nothing

#

i just felt like it

velvet narwhal
#

brainworm said, "commit crimes"

ivory plume
#

(One of the benefits of content packs is that they're generally stable and rarely break in game updates.
Button: "Let's fix that!")

uncut viper
#

this is the strife all innovators must deal with before their genius is recognized

velvet narwhal
#

am i still sole consumer of BETAS, i swear i'm not channelling the arcane power to break things

uncut viper
#

for what its worth itd totally work here though—

velvet narwhal
#

oh good, i'm no longer alone, there are others who can fall with me

uncut viper
#

it couldve been worse too, i almost kept the option to write literal C# in your json too, and the only thing that stopped me was that i just didnt feel like packaging in an extra dll just for source gen

velvet narwhal
#

afaik the only thing left you need to do is set a log of which content pack failed/error or did you already implement that // or could you not implement that

latent mauve
#

So, how painful would it be to create a furniture item that stored weapons (like the dresser) if I don't know C#?

rancid temple
#

So if you really think about it, Button actually saved us all

uncut viper
#

i cant implement patch priority, if something fails it already says which patch ID it was

uncut viper
rancid temple
#

Slightly more painful than if you did know C#

uncut viper
#

but i cant confirm that

velvet narwhal
#

i don't know if FF implemented dresser

#

lemme go look

#

functional wardrobe, looks like it does

latent mauve
#

Wonderful!

velvet narwhal
#

which is funny because it says.. "don't use this" SMCKekLmaoDog

rancid temple
#

I mean, that's concerning lol

velvet narwhal
#

i can always ask tea again for .pngs but i don't remember if the furniture i made actually worked as a dresser or not

rancid temple
#

Last I was aware, you could also just ping Leroy

velvet narwhal
#

true, leroy is also working on that 3.0.0 so honestly i might just throw it in and see what happens

latent mauve
#

Looks like you would just use Special Type instead for dresser?

#

It says it later down the page

velvet narwhal
#

ah i see

faint ingot
velvet narwhal
#

you're using i18n?

faint ingot
#

yes

slender badger
#

You need to pass it in as a token

faint ingot
#

oh like {{@}} ?

slender badger
#

{{PlayerName}}, but yep

#

Basically in the i18n, you'd have "What do you think, {{PlayerName}}?" etc and then in your i18n key, you'd have "{{i18n:DialogueKey.Name.Etc |PlayerName={{PlayerName}}}}"

velvet narwhal
#

i guess i've never come across these SMCKekLmaoDog TIL

slender badger
#

Not sure on %farm - it should be a similar process, but it'd be easier just to change the farmer's response to "Those are definitely from my farm"

uncut viper
#

do tokenizable strings work in quickquestions?

velvet narwhal
#

{{FarmName}} exists as a standard

uncut viper
#

not i18n tokens, those i know, i mean the vanilla system

slender badger
velvet narwhal
#

my brain is too smooth to understand, but my quickQuestions are formatted like quickQuestion {{i18n:key that has question, 3+ answers}}
/quickquestion {{i18n:Pelican.6.5.9}}
"Pelican.6.5.9": "#'Yes.'#'No.'",

slender badger
#

Also random question, but what counts as a farm building when you're first starting out? I know the farmhouse is one and I'm guessing the broken greenhouse is another, but my farm building count is showing 4 on a new game SDVpufferthinkblob

uncut viper
#

shipping bin too i think

velvet narwhal
#

...mailbox?

uncut viper
#

any cabins on your farm?

slender badger
#

Nope. Shipping bin & mailbox would make sense though

velvet narwhal
#

mailbox is a crapshot, i have no idea if it does

#

OH

#

PETBOWL

#
[XmlInclude(typeof(Coop))]
[XmlInclude(typeof(FishPond))]
[XmlInclude(typeof(GreenhouseBuilding))]
[XmlInclude(typeof(JunimoHut))]
[XmlInclude(typeof(Mill))]
[XmlInclude(typeof(PetBowl))]
[XmlInclude(typeof(ShippingBin))]
[XmlInclude(typeof(Stable))]```
![SMCKekLmaoDog](https://cdn.discordapp.com/emojis/965981699982901348.webp?size=128 "SMCKekLmaoDog")
slender badger
#

The pet bowl is a building?! What the heck SBVLmaoDog

#

Wouldn't have guessed that one lol, thank you!

uncut viper
faint ingot
velvet narwhal
#

the |PlayerName part?

slender badger
#

You said you're using i18n, right?

velvet narwhal
#

that's a content patcher thing iirc but i can't remember where the docs are for that

faint ingot
#

this is what's showing up now not sure where to define those

velvet narwhal
#

in your event code where you put the {{i18n:key}}

next plaza
#

(Partially)

velvet narwhal
#

quickQuestion {{i18n:Question |PlayerName={{PlayerName}}}}#{{i18n:Answer1}}#{{i18n:Answer2}}/
default.json:
"Question": "What do you think {{PlayerName}}?"

faint ingot
#

and if I have multiple keys to define it's another pipe character? like quickQuestion {{i18n:Question |PlayerName={{PlayerName}}|FarmName={{FarmName}}}}

latent mauve
uncut viper
#

you'd separate them with a comma i believe

faint ingot
latent mauve
#

I didn't see your original json, so sorry if I missed it

#

Ok good

uncut viper
#

never mind im wrong

#

ignore me

velvet narwhal
#

i didn't wanna answer it cause i have no idea either

velvet narwhal
#

airyn, famed dialogue extraordinare to the rescue

uncut viper
#

do you need a space between the pipes

slender badger
#

I do with mine, but I'm not sure if it's strictly required or not

uncut viper
#

like between the first token and the second pipe i mean

#

easy thing to figure out if it breaks i spose

slender badger
tardy adder
#

Airyn speed

velvet narwhal
#

water too? did you count how many sprinklers are on the farm? SMCKekLmaoDog

slender badger
#

Nah, it's just flavour text SBVLmaoDog I'll change it though so that players aren't confused

velvet narwhal
#

actually, could you check sprinklers

uncut viper
#

not with a vanilla gsq

faint ingot
late pewter
#

I have a new Alternative Textures Question: How do I make the Auto-Grabber Animated??? Normally "To the Right" is used for extra animation frames, but the Auto-Grabber already uses one frame to the right to show "Having Stuff Inside".
Does this mean the Auto-Grabber can't be Animated or...?

lucid iron
#

the auto grabber isnt a machine right

late pewter
#

It's a BigCraftable

#

I guess it isn't a machine in the sence it doesn't "Make" stuff??

velvet narwhal
#

it's not in data/machines

lucid iron
#

a thing is a Machine if it has a Data/Machines entry

late pewter
#

Are only Machines (The kind that physically make stuff) animatable?

#

Uhh... let me check data

#

It does not appear to be a machine as I cannot find "Grab" in Data/Machines.json

velvet narwhal
#

AT has a base Animation property it looks like though

lucid iron
#

the id is (BC)165

lucid iron
#

either way you need C# or framework here

late pewter
velvet narwhal
#

looks like it'd work then

#

what does your AT json look like?

late pewter
#

I haven't made it yet because I don't know how to apply an animation to the Auto-Grabber. I went to look at other people's packs for examples, but none of them are animated. And present the above-described issue of having 2 frames already.

#

Is the creator of Alternative Textures here? Maybe I can ask them directly??

velvet narwhal
#

idk if they respond here tbh

#

auto-grabber might actually be a strange exception, it's not under the /crafting section of the wiki SDVpufferthink

late pewter
#

Oh, PeacefulEnd IS on here!

#

uhhh... IDK how they feel about pings?

velvet narwhal
brittle pasture
#

yeah it is a big craftable, but since it never produces anything it usually doesn't animate

#

this is AT we're talking about though

late pewter
#

Yes. [AT]

shut bane
#

Wait, how am I supposed to call the player's name in an i18n file now?

brittle pasture
#

it's probably just something in your AT pack then?

velvet narwhal
#

i don't think they've made it yet selph SMCKekLmaoDog

silver pelican
shut bane
#

I will need to make a very quick update if @ doesn't work anymore

late pewter
#

Selph, I haven't made it yet because I'm trying to figure out how to even start.

uncut viper
#

nothing has changed with player name in dialogue

#

its just bc they wanted to use it in the quickQuestion command

late pewter
#

Ah screw it, let me write a very kind letter to them and ping them, gimme a sec.

silver pelican
#

Ive just chosen $q and $r even when it was a quick question lmao

velvet narwhal
#

@ works just fine under speak, it's just the weird interaction for whenever a message bubble is called

slender badger
silver pelican
#

yeah but i meant for every dialogue where it prompts the user's response TuT

#

in the ones im editing rn. ive not thought of adding tokenizable strings in my responses though

late pewter
#

Hello @polar escarp, my apologies for the ping. I've been using Alternative Textures on the most recent SDV Update and it runs great, no issues or bugs whatsoever. Love the mod, been using it for years.

Hey, so quick question, but could I request an Example? I'm trying to animate the Auto-Grabber, but have no idea how to start because it would appear as though it technically already has a second "Frame" which it (And by extension [AT]) use to show the thing has stuff in it. Does this mean it is not animatable? Or do I need to write special instructions? An Example JSON would be greatly appreciated; I have used the other examples from the example pack with great success, so any assistance with what looks like an edge case would be great.

Thank you for any assistance, and keep up the great work! SDVemoteheart

woeful lintel
#

For now, you can only make a classic dresser to store clothes

silver pelican
#

Ooooh thats something to look forward to!

lone arrow
#

Can anyone help me make a content patcher mod? I made a recolor of Linus's tent but I need help on writing the content.json I've done stuff before with the farm house and buildings, but I've never done anything with buildings and homes of the villager's before and I have no idea were to start coding wise.

#

sorry if I phrased that badly

velvet narwhal
#

you did a recolor on the spring_outdoorsTilesheet?

lone arrow
#

No, not on the tilesheet it's self, here's the recolor it's self

lucid iron
#

All u need is EditImage

lone arrow
#

Ah ok! thank you, just editimage and make sure I have the right coordinates?

slender badger
#

Look up the Content Patcher documention and find the EditImage section, it'll have an example code block you can copy & edit

tight ocean
#

when crediting inspiration from other mods, is the general etiquette to reach out to the original creator before publishing? no assets taken, obviously. also, does it matter if you credit insp in description or credits?

fiery cobalt
#

I want to make the portrait change for when it is rainy but while the first shops up the rain one doesn't

slender badger
slender badger
# fiery cobalt

You can set the weather in the SpringRain Appearance condition directly, you don't need to use a When condition for that

tight ocean
#

right, i see! you're actually one of the creators i was inspired by, airyn 😭 i'm doing a harvey portrait mod + really liked the way you did the chest hair for the vanilla beach portrait, so i used the same technique when making mine

fiery cobalt
#

I tried that with 'Condition: 'WEATHER here Rain' but it didn't work?

slender badger
#

Can you show me the code you tried?

#

You'd probably need to set the precedence lower

velvet narwhal
#

(same precedence sets RNG at play)

woeful lintel
# fiery cobalt

please write with proper indentation, it will make it easier to catch errors and for other to help you

fiery cobalt
#

I did not write is I am copying a code from another mod. Or else I wouldn't be able to do this

slender badger
#

Ah. Which mod did you copy it from?

#

Depending on how much you copied & which mod it is, that's plagiarism

woeful lintel
#

isn't this possible by just doing an editimage over Portraits/Leah instead of editing data?

velvet narwhal
#

you can stick the Portraits/Leah_SpringRain into the first load, delete the second load cause it doesn't matter
then add "Condition": "SEASON spring, WEATHER here Rain", on your second one with a precedence of something like -140

slender badger
velvet narwhal
#

it's also more uhhhhhh processing efficient iirc?

fiery cobalt
#

Let us see

#

Also I'm not planning on uploading it or anything

velvet narwhal
#

tbf copying and pasting cp syntax is vague

woeful lintel
#

really? I'm surprised I've never seen this in portraits mods I've edited. Editing a data file and loading a sprite feels heavier than only editing/loading an image.

uncut viper
#

appearances are new in 1.6

slender badger
fiery cobalt
#

Ah and smapi now needs to be updated. When it rains it pours one sec

uncut viper
#

its much better to load them once and apply them with appearance Conditions than re-load or editimage anything

velvet narwhal
#

iirc appearances also lets you utilize {{InternalAssetKey}} right?

#

so that's an even deeper level of processing efficiency SMCKekLmaoDog

slender badger
woeful lintel
velvet narwhal
#

yeah the old way would constantly re-call the load, but appearances loads it once and remembers iirc

slender badger
ocean sailBOT
#

Diverse Stardew Valley (https://www.nexusmods.com/stardewvalley/mods/17059) is an expansion mod that adds extensive seasonal, festival, and location-specific outfits and alternate diversity redesigns for NPCs supported by dialogue, event edits, and map edits. Outfits are available for either the vanilla or alternate character designs and nearly every aspect of DSV can be configured individually. See the DSV website for more details, including a list of mods with special compatibility: https://diversestardewvalley.weebly.com/

woeful lintel
velvet narwhal
uncut viper
#

i wouldn't personally consider changing to InternalAssetKey to be a fix tbh

velvet narwhal
#

SDVpufferthink if a portrait/sprite mod wanted to overwrite mine, i just have to remove my precedences to default weight and they just have to be a lower one to overwrite mine

#

long run: not useful for singular npcs, but i'm contemplating it for my expansion since it'll, ugh SDVpufferpain

uncut viper
#

the more things that are directly targetable should a user wish to do so the better, imo

velvet narwhal
#

oh i don't mean my defaults, defaults need to be loaded no matter what

uncut viper
#

i dont mean your defaults either

slender badger
#

Currently DSV uses a combination of Appearances & CP tokens because otherwise it has a lot to load and the Targets get chonky 😆 Not sure if it'd be better to switch it all over to Appearances

velvet narwhal
#

(though that's speculation at this point, i might not even have appearances because i am getting lazier by the day and i might not do seasonal outfits)

slender badger
#

Like at the moment, I've got it set up with Appearances for the base indoor/outdoor, each festival, and special outfits, then I token patch the seasonals, randomisation, and weather outfits

velvet narwhal
#

but i coulda sworn we could do the flat appearance overwrite even if there's an {{InternalAssetKey}} if the precedence was just set lower

fiery cobalt
#

Part of knows I shouldn't do seasonal outfits and that it'll drive me crazy but it hard not to

uncut viper
#

you can, its just annoying if a person ever wants to patch your portrait itself

#

for that person i mean

velvet narwhal
#

oh was it the targetfield thing

fiery cobalt
#

It worked!

#

The worse part was waiting for Leah to leave her dang house

#

4:30 Leah reallly

uncut viper
#

i dont have exact numbers obviously and like, obviously we're also talking on timescales that no one is ever really gonna notice, but i think doing EditImage as often as a token might update is more expensive than a one time load of everything and then conditionally switching the texture name

#

esp since, well, you'd have to load those textures anyway once the editimage applies them

#

and along with that "it doesnt practically matter (until you're doing it thousands of times maybe)" goes "its not worth refactoring an entire existing mod to change to one system over another" ofc

#

the only thing im sure of is that EditImage = expensive

slender badger
#

For what it's worth, I do have as much of the time-based/quick-updating tokens moved into Appearances as I can, so the majority of the token patches should only be OnDayStart

uncut viper
#

any removal of an OnTimeChange token is worth a lot

slender badger
#

Yeah, that was the killer for the previous versions of DSV, we had a lot of OnTimeChange 😅 It's why we brought in the Full/Light/Ultralight configs

uncut viper
#

those are what i would call exceptions to the "its not worth redoing a mod for" thing SDVpuffersquee

velvet narwhal
#

honestly wanna dig more into {{InternalAssetKey}} though, cause when we did the thing with passerby cemetery it made me think about how to cut down, but honestly i look at how many mods people pull up and i'm like, "should i... care about optimization?"

faint ingot
#

very excited to have reached this point in my mod even though there's still plenty to get done

slender badger
#

Uh, do I want to know what's going on in your mod...?

fiery cobalt
#

👀

#

I dooo

uncut viper
#

i honestly dont even know if using internal asset key really has that big of an advantage... smapi still has to manage it anyway

slender badger
#

(personally I'm really not a fan of the Pierre hatred in certain parts of the fandom)

faint ingot
slender badger
fiery cobalt
#

I love this

teal bridge
#

Got a report (confirmed) of another instance where a mod seemed to break for no reason; this time, it's a MissingFieldException on ShopMenu.itemPriceAndStock. Except, the field is still there, as far as I can tell has not changed at all. Simply rebuilding the mod fixes it. It was a field in 1.6.8, and it's a field in 1.6.9+.

I can update the mod easily enough but I'd really like to understand why this happens, so I don't have to keep updating mods for future game updates for (what appears to me to be) no real reason. Anyone have ideas?

uncut viper
#

the "as if you'd loaded it directly" bit here makes me thing that the performance difference is negligible at best

teal bridge
#

(I'm not even accessing it with reflection or anything. It's just silly.)

next plaza
velvet narwhal
#

welp throw that out the window then, i don't think i do anything heavy enough for it to necessitate

uncut viper
#

you save on the overhead of managing the patch and any conditions or tokens it may or may not use, but... if you're worried about the performance impact of tokens reloading patches, you're probably not using content patcher

#

(and if they dont have conditions, then, yknow. moot)

teal bridge
#

There must be something not showing up on the call stack, it's a very reflection-like message coming from a non-reflection context.

lone arrow
# lone arrow Ah ok! thank you, just editimage and make sure I have the right coordinates?

Sorry to interrupt, but does this look ok?

{ "Format": "2.3.0", "Changes": [ { "Action": "EditImage", "Target": "Maps/spring_outdoorsTilesheet", "FromFile": "LinusTentRecolor.png", "ToArea": { "X": 224, "Y": 96, "Width": 192, "Height": 384 }, } ] }

also, my image isn't too big is it? cause I thing the normal tent is 40 by 80 ish, should I downscale it to that size?

velvet narwhal
#

if it's bigger than your ToArea it'll cut off SDVpufferthink

lone arrow
#

ah oh

#

*ok

velvet narwhal
#

ToArea is the original tilesheet iirc, lemme actually look at that cause i actually don't look at it that often SDVpufferclueless

slender badger
#

Yes, you need to have it at the original game size otherwise it'll overwrite random other things

velvet narwhal
#

also i think it'll only replace during spring so you'd... have to change it to {{Season}}_outdoorTilesheet right?

slender badger
#

Linus's tent is 48x80 by default, so if you have the width and height as 192x384, it wouldn't actually work for starters because it's wider than the tilesheet edge and if it did work, it'd replace a huge chunk of the cliff, dirt, the carpenters' house, and Marnie's barn tiles

lone arrow
#

crap

lucid mulch
#

Yeah I don't see how it's a performance benefit, it would mainly be a QoL benefit of not needing explicit loads.

Indirect performance benefits from not letting edit flows happen.

For example using the appearance system with internalassetkey is massively more performant than conditional editimages on the base portrait/sprite

#

But appearance system with explicit loads that just so happen to have no edits should be matching

lone arrow
#

I tried resizing it but it came out to 48x96 so it's still too big...

#

I'mma need to recolor it again at the proper size

#

cause something is off about the proportions of the tent I did recolor

#

it's not too hard of a fix but it's gonna take me a hot sec

velvet narwhal
#

ye generally best to use the unpack, i just set a new layer if i plan to do recolors just so i'm not doing something too big

slender badger
#

What exactly is InternalAssetKey? SDVpufferthinkblob

lucid mulch
#

It's a cp token that generates the magic asset names that when smapi sees, will immediately just read from that mods folder rather than attempt the load/edit asset pipeline

#

iirc they end up looking like SMAPI/{{ModID}}/Path/To/asset.png

#

but its very much an implementation detail that no one other than SMAPI contributors should even really know

#

even C# mods get an api to construct the values so they don't need to know

velvet narwhal
#

(i am just always filled with curiosity of docs SDVpuffersquee )

slender badger
#

Ah, that makes sense, I think

indigo yoke
#

I lost the link and can't find it T_T where is the 1.6.9 update guide?

slender badger
#

So to confirm, this is DSV's current setup for the seasonals & weather outfits:

            "LogName": "Abigail Base Seasonal Outfits",
            "Action": "EditImage",
            "Target": "Portraits/Abigail_Indoor, Characters/Abigail_Indoor",
            "FromFile": "Art/VanillaNPCs/Abigail/{{TargetPathOnly}}/{{DSV.Core/ConfigValue:AbigailVariant}}/Abigail_{{Season}}_{{RandomThreeToken}}_Base.png"
        },
        {
            "LogName": "Abigail Outdoor Seasonal Outfits",
            "Action": "EditImage",
            "Target": "Portraits/Abigail_Outdoor, Characters/Abigail_Outdoor",
            "FromFile": "Art/VanillaNPCs/Abigail/{{TargetPathOnly}}/{{DSV.Core/ConfigValue:AbigailVariant}}/Abigail_{{Season}}_{{RandomThreeToken}}_{{DSV.Core/Weather:Abigail}}.png"
        },```
with `Abigail_Indoor` and `Abigail_Outdoor` both Loaded & edited into Appearances. `{{Season}}` obviously is a default CP token, `{{RandomThreeToken}}` is a dynamic token, and `{{DSV.Core/Weather:Abigail}}` is a custom C# token. Is there any realistic performance benefit if I switch all that over to separate indoor/outdoor/season/weather Appearance blocks?
#

There's a bunch of stuff like the overlays that I have to keep as CP edits, so this'd be the main section that could potentially change

lucid mulch
#

its faster reloading Data/Characters than reloading (and editing) an image, if those images can stay loaded at all times

#

that and the appearance system can be lazy and only needs to re-evaluate if the player or npc moves (and maybe menuing cant remember) so huge spikes from having to edit every npc's sprite and portrait simulataniously at 7pm shouldnt be a thing

slender badger
#

Yeah, I switched as much of the time & location-based stuff to Appearances as I could to avoid that sort of thing. If I switched it over though, I'd then be editing more files for the overlay patches though - would that also cause delays?

lucid mulch
#

from a performance standpoint, the main thing is if the overlays are ever being invalidated and having to run over and over again

slender badger
#

Like this is the current mermaid pendant Target line for Abigail:
"Target": "Portraits/Abigail_Indoor, Portraits/Abigail_Pyjamas, Portraits/Abigail_EggFestival, Portraits/Abigail_FlowerDance, Portraits/Abigail_Luau, Portraits/Abigail_MoonlightJellies, Portraits/Abigail_SVFair, Portraits/Abigail_Maternity",
If I switched all the seasonal/weather stuff over, it'd be three times the size SDVpufferthinkblob

velvet narwhal
#

(eeeuh i should probably change my overlay then SMCKekLmaoDog )

slender badger
ivory plume
#

(There's a tradeoff between the performance impact of reloading textures and the memory impact of having them all kept loaded indefinitely. I think the sweet spot is generally to use Appearance for things that can change often like indoor/outdoor, and patches for things that change rarely like marriage and maybe seasons.)

woeful lintel
velvet narwhal
#

don't look at my crime

  "Dynamic Eyepatch": true,
  "Time": "{{Range: 0600, 1800}}"
},```
lemme just uh, change these to appearances... ![SMCKekLmaoDog](https://cdn.discordapp.com/emojis/965981699982901348.webp?size=128 "SMCKekLmaoDog")
slender badger
#

And thank you as well, SinZ

lucid mulch
#

(I come from the background of having 128gb of ram so I want maximum performance and dont care about the memory usage :P)

slender badger
#

I'll take the easy option and leave it as-is then 😆

velvet narwhal
#

(i'm pretty sure because i do that, it invalidates every target so away i go, back to the trenches SMCKekLmaoDog )

devout otter
#

Sorta related, but is a liberal use of dynamic tokens (with lots of randoms and conditionals, and also some cascading) taxing? I'm growing worried I'm using too much for such a small mod.

slender badger
#

I hope not, because I use a lot of dynamic tokens across my mods 😆

lucid mulch
#

CP Conditions only run on the update frequency of the patch, defaulting at DayStarted only.

Dynamic tokens iirc should be similar performance as just copy+pasting those expressions
C# Tokens depend on their implementation details as to whether they are fully dynamic or can be immutable or deterministic

ivory plume
#

Content Patcher has a lot of optimizations to skip unneeded updates. So if the dynamic token wouldn't actually change (e.g. because it only uses tokens which haven't changed), they won't impact the performance.

shut bane
#

Odd question: Does anyone know off the top of their head when the power index changed for upgraded tools?

lucid mulch
#

Also stuff like {{Range: 0600, 1800}} is only ever evaluated once and cp just remembers the value as Range is deterministic and 0600 and 1800 are constants and therefore immutable, making the full range expression also immutable

shut bane
#

I was under the impression it still started at 1. Just learned it now starts at 0?

lone arrow
#

ok I fix the recolor to be the correct size and fixed things so that the recolor applies to all tilesheets instead of just the spring one

   "Format": "2.3.0",
   "Changes": [
         {
         "Action": "EditImage",
         "Target": "Maps/{{Season}}_outdoorTilesheet",
         "FromFile": "LinusTentRecolor.png",
         "ToArea": { "X": 224, "Y": 96, "Width": 48,"Height": 80 },
      }
   ]
}```

does this look good now?
#

discord why did you screw up the formating

slender badger
lone arrow
#

ok thanks!
now I just need to do the same thing but for the interior

#

although now I'm wondering if I want to go through the trouble...

#

I'm gonna test it first before I do the interior, the decide if I want to actually do it

lone arrow
#

so I just tested the mod and the tent is still the same, but there's a line under the entrance, I think it loaded but some how is under the vanilla tent?

velvet narwhal
#

do you have any other mods that could possibly overwrite that, like SVE?

lone arrow
#

I don't have anything that effects the tent, no sve, no map changes, I have elle's dirt recolor but that's it, maybe my tent is under elle's tilesheet?

velvet narwhal
#

i don't know what dirt recolor does, so lemme go look

#

"Target": "Maps/{{season}}_outdoorsTileSheet", yep

lone arrow
#

I had the same problem with their seasonal farm buildings and my house recolor, what fixed it was renaming my mod so that it loaded after elle's

velvet narwhal
#

you can do that in the manifest dependency

lone arrow
#

ok! thanks!

rancid temple
#

Ah nexus connection issues, why not

#

I'm gonna scream

#

I asked this user for a fucking log, they sent me back TIMESTAMPS AND LINKS TO THEIR LIVESTREAM OF THE FUCKING GAME WHAT

hallow prism
#

that's a new one

velvet narwhal
#

that's a whole new level on par with sdampi

calm nebula
wise berry
#

Hmmm anyone else's mods falsly showing up as not opted into DP?

hallow prism
#

not checking at the moment but it happens often when nexus has issue

#

it happened to me and others in the past

wise berry
#

Oh alrighty, good to know

#

(Though I have to wonder when Nexus isn't having issues ahaha)

hard fern
woeful lintel
#

I got this today, "I updated and it works now!" yeah, no shit

#

I somehow managed to hide "without more information"

proud wyvern
hard fern
#

🤔 this might be an odd question, but how hard would it be to update Free Love? update broke it lol

calm nebula
woeful lintel
#

their first message was "Doesn't work anymore in the new update.... " btw

calm nebula
#

hiking in the alps seems fun

calm nebula
hard fern
#

🥲 i have none

#

im not sure what needs to be fixed to make it compatible either...

slender badger
calm nebula
#

Endertedi has a fork of the project in the ES server but also I think it's not 1.6.9 ready either

acoustic summit
hard fern
#

im not sure?

acoustic summit
#

Maybe send the smapi log when you try to play it in 1.6.9

hard fern
#

the only thing it says is "not compatible" so it's not being loaded

acoustic summit
#

The real smapi log usually has more inf9

#

info*

#

In your %appdata%/stardewvalley folder

#

Or atleast thats where it is for me

hard fern
#

ah Broken code in FreeLove.dll: reference to StardewValley.Farmer.checkForQuestComplete (no such method). i think is what broke it

rancid temple
hard fern
#

....

#

SDVpuffersweats so it's not even related?

rancid temple
#

Not even a little bit lmao

hard fern
slender badger
#

People will come up with the weirdest crap to somehow link to your mod, I swear

acoustic summit
rancid temple
#

They're playing with a ton of mods, they probably just installed mine at the same time and assumed because it's one they haven't used before

#

I've run into 2 people blaming one of my mods or AGE for a conflict when it was DTZ the entire time

#

Also had another issue where AGE was changing load order between two mods and making it seem as if it was the root issue for a conflict between two mods trying to patch the same method lol

rancid temple
#

AGE being a CP mod and changing absolutely nothing about any in game methods lmao

hallow prism
#

well, as modders we saw the weirdest stuff about how a mod break things inexpectedly because whatever BUT we also like, try to confirm the issue before

rancid temple
#

If the video had shown even a partial relationship to my mod I would have continued to entertain this, but like this is nuts lmao

hallow prism
#

like, the "eggs can't make mayo anymore because the mod i installed changes context tags in the pre 1.6 way and CP rewrite erase some data"

#

once you know why it happens the link makes sense, but before that, we were "???" "what do you mean this mod prevent eggs to make mayo?"

#

and yeah you're right to indeed not waste energy trying to understand it if the user isn't

slender badger
#

I suppose to be fair, I did once have an issue with Professional Morris causing a random black square in the Wizard's tower because, for some reason, CA decided to put one of the Wizard's tiles on the townInteriors map right under Morris's blink sprite and I'd just EditImage replaced the whole section without realising 😆

calm nebula
#

He what

#

Tbh I suspect he uses a packer

slender badger
#

This little bastard tile 😆

hallow prism
#

ahah 😄

#

yeah that is sneaky

#

and it's why i can accept users having weird "i installed this then noticed that" moment BUT then they need to have more solid elements before coming with "it IS this mod"

long jungle
#

Anyone here have any experience of modifying monster base spawn rate?

hard fern
#

🤔 so the game isn't happy about reference to StardewValley.Farmer.checkForQuestComplete (no such method). which got changed in 1.6.9? but im not sure how to fix that...

rancid temple
#

Once I'm back at my computer I can look for where chu and Pathos told me how to fix a couple of specific issues that might help

devout otter
finite ginkgo
calm nebula
brittle ledge
tardy adder
#

Query for weather would be like
'{{Weather}}' = 'WeatherID'
? SDVpufferthinkblob

slender badger
#

Yep

rancid temple
#

Assuming that's like fake syntax anyways

tardy adder
#

Man the quotes are making me confused

#

I rarely use query

rancid temple
#

Are you trying to do an actual Query?

slender badger
#

Basically for queries, if the token returns a word rather than a number, you put single quotes around it

rancid temple
#
"When": {
  "Query: {{Weather}} = 'Rain'": true
}
tardy adder
#

Rokugin be like KATH where your syntax

rancid temple
#

Better me than SMAPI :P

slender badger
#

What's your full query, Kath?

calm nebula
#

What are you trying to accomplish because not using query is easier

rancid temple
#

But yeah, query is for like advanced stuff, you could just do a normal When for that lol

tardy adder
#

Query for if weather is happening today or happened yesterday then: true

slender badger
#

(forgetting quotes and such around tokens in my queries was why it took me longer than expected to finish my electricity bill lol 😆 )

tardy adder
#

using EMP and CS

rancid temple
#

Hm, the Weather token only tracks weather in the current or specified location context

tardy adder
rancid temple
#

Not sure if you have something else that tracks previous weather

tardy adder
#
"When":{
"Query: '{{Weather}}' = 'kath.weathering_HeatWave' OR '{{Esca.EMP/GameStateQuery: CS_WEATHER Town -1 kath.weathering_HeatWave}}' = 'true'": true,
}
slender badger
#

The second part will need to be '{{Esca.EMP/GameStateQuery: CS_WEATHER Town -1 kath.weathering_HeatWave}}' = 'true'

tardy adder
#

le evil quotes

tardy adder
#

the game doesn't complain yet to the disaster I am causing

fast urchin
#

Does anyone know where the code is for players to get a prize ticket after completing a special order?

slender badger
#

Gotta run a patch summary & patch parse to figure out where the problem is

lucid iron
tardy adder
#

hence the yet, gotta check if the disaster works first

fast urchin
tardy adder
#

Good lord the cows went boom, I edited something weird in the animal data 😄

obsidian sable
#

Does anyone can desinge the title for my modpack

slender badger
ocean sailBOT
slender badger
#

No one will do it for you for free

obsidian sable
#

God damm

proud wyvern
#

Also, modpack? Like Minecraft modpacks? I hope you don’t mean ZIPping up multiple mods and letting people get that from somewhere

velvet narwhal
#

yeah it's that curseforge thing

rancid temple
#

Nexus has collections or something right? Not quite like modpacks

hard fern
#

are collections like the thing where they're all in little groups and you download all the mods shown in the group?

rancid temple
#

I believe it's something like that

proud wyvern
#

It goes through Nexus though, and all mod authors actually get credit

rancid temple
#

(my only experience with multiplayer is going to my partner's computer and downloading all the necessary mods lmao)

proud wyvern
#

It does require you to use Vortex though…

rancid temple
#

Ew

tardy adder
#

Time for cow heat stress simulation... if I edited the data correctly 😄

hard fern
#

aand im stumped SDVpufferflat

tardy adder
#

player stat beveragesMade is ze wine and juice?

calm nebula
#

Le vine et le jus, vrai

#

....I hope no actual French person finds that butchered French offensive

brittle pasture
#

It's for every item harvested from a keg

calm nebula
#

Oh, hmm

#

What else can I keg

tardy adder
#

Oh tres bien

#

(pretend the ` is there)

brittle pasture
#

as of 1.6, rice to vinegar!
hmm a refreshing vinegar beverage

tardy adder
#

Tasty vinegar

granite bluff
#

hey, what's the "NoFurniture" Tile-Action doing?

rancid temple
hard fern
#

well nothing exploded so i guess it works

granite bluff
#

what is needed to talk to gill? i changed the adventure guild map here and there and now his dialouge won't pop up anymore :S

hard fern
#

this is a sve bug isn't it?

#

also this is not the right channel for that

granite bluff
#

nope i never used sve, i work on my own mod that changes interior maps

rancid temple
#

Guess it depends if they broke Gil or if there's still an SVE bug with him

#

Oh ok, so just a standalone mod

hard fern
#

ohh

#

hm

#

did you put a tile data on gil?

velvet narwhal
#

SDVpufferthink he doesn't have a tiledata, is he hardcoded?

hallow prism
#

you may have removed an important tile or changed a tile position that is needed

hard fern
#

(what is gil, anyways?)

granite bluff
#

i mean there's no tile property that says "gill talking" nor map proverty so i'm lost xD

velvet narwhal
#

an old man in a rocking chair

hard fern
#

let me look at the adventurer's guild map

granite bluff
#

ty : )

hard fern
#

then he's probably hardcoded..?

granite bluff
#

i mean he's not doing much, but still better than numb : I

rancid temple
calm nebula
#

That's amazing

rancid temple
#

If you change his tile index you break him

hard fern
#

rule of thumb: never move gil

velvet narwhal
#

this.gil(); i am trying so hard not to laugh right now

hard fern
#

(if this was a try not to laugh challenge, i already failed XD)

granite bluff
#

ok thanks folks x D

rancid temple
#

Looks like those tile indexes are all just the bottoms of his sprite in the three different frames of his animation

granite bluff
#

yep it's all the 12 tiles existing on the sheet about him

hard fern
#

SDVpufferflat i am drained....

rancid temple
#

Lol, that method is private too SDVpufferpain

calm nebula
#

Nothing a little publicizer won't fix

#

Lol

#

(Skill issue /jk)

granite bluff
#

sorry 😅

#

i'm new to all this just learning by doing. but thanks for the help

#

yay i fixed it ^^

#

where can i find the hardcoded stuff if i want to check myself?

tardy adder
#

I keep finding missing commas SDVpufferwaaah

granite bluff
#

*commata

ocean sailBOT
latent mauve
#

Nonsense like this is why I'm just replacing the base tilesheet sections for things like Gil in my Zelda NPC mod. xD

hard fern
#

is this the aformentioned beam?

rancid temple
#

Avi's Beam

velvet narwhal
#

nuh

latent mauve
#

Nope

velvet narwhal
#

my nemesis is the 90degree angle on the right side

latent mauve
#

That was the right-angled portion of the spouse room in base

hard fern
#

SDVpufferdead then it's something funky with my farmhouse map

#

i dont have a beam though

#

leah's room is beam-free

latent mauve
#

The pillar's been there AFAIK

velvet narwhal
#

it used to not draw the 90degree, so i used to be able to have a fun angular room

hard fern
#

ah

#

and now i can finally test what ive been trying to test this whole time!!! 😭 my greenhouse

rancid temple
#

That's weird, did the spouse rooms change then? I never really looked at them before

latent mauve
#

RIP rounded corner spouse rooms SDVkrobusgiggle

#

I was gonna say octagonal but that was too many sides

#

I don't know that anyone's made an octagonal spouse room YET

hard fern
#

SDVpufferflat guess who forgot to tile these leeaves

#

the fact that it works though

tardy adder
#

Oh wonderful I broke the mail somehow 😄

hard fern
#

SDVpuffersweats uh oh

tardy adder
#

uh oh indeed

#

the little envelop appears but its empty

hard fern
#

farmer just spawns out of the bush ig.

#

maybe i should move it...?

green patrol
#

question anyone know exactly what this bug means?

#

this is the corresponding code for the object it's referencing

#

a little confused cause I did the exact same format for the name with one of my other mods, and it works fine there

hallow prism
#

!json may help seeing the full thing and where there's an issue