#making-mods-general

1 messages · Page 55 of 1

calm nebula
#

It's not a technically hard thing to do

fossil osprey
#

It is when realistically C# is a foreign language /lh

calm nebula
#

It took me about two hours from "I don't know c#" to my first harmony mod

fossil osprey
#

Yes but work is in the way, plus I suffer from perfectionism and will throw away everything as the first seemingly unsolvable error

hallow prism
#

i don't see what you mean.

#

hides the 15 messages "it's raining in spring/fall in VMV what's happening? is this a bug??"

true pendant
#

Hi all
I need to make a map change on a certain event (opened passage in the volcano), but it does not work. When I write a vanilla map (for example "Target": "Maps/Farm", "FromFile": "assets/Van_Mine8_Boulder.tmx",) It works, but on my custom map it does not work. What is the problem?

{
     "Action": "EditMap",
     "Target": "assets/Custom_Van_Mine8",
     "FromFile": "assets/Van_Mine8_Boulder.tmx",
   "When": {
    "FarmType": "Standard",

"HasMod |contains=Vanillin.VanMine": true
},
"ToArea": {
"X": 22,
"Y": 11,
"Width": 3,
"Height": 5
}
},

frigid hollow
#

you need to target the location where your custom map was loaded into

#

so "Target":"Maps/Custom_Van_Mine8" assuming that's where you loaded it into

true pendant
#

I'll try now I haven't done modding on Stardew for 5 years I'm catching up)

true pendant
frigid hollow
#

would probably be in Data/Events somewhere

true pendant
#

Thanks, friend!

frigid hollow
#

you could probably use game state queries? there's IS_ISLAND_NORTH_BRIDGE_FIXED for if the north of the island is accessible (so the volcano as well) and uhhh, one of them probably works for the dangerous mines quest completion? can't figure out which one off the top of ym head

true pendant
#

I don't know if there is a condition for the activated altar of dangerous mines, but this would suit me

frigid hollow
#

there is one for current mine difficulty level

#

oh yeah and qi quests ount as special orders so you could check for special order complete

#

but the WORLD_STATE_FIELD has both MinesDifficulty and SkullCavesDifficulty as options

true pendant
#

Now I'll start checking what will come out of this.

velvet narwhal
#

i made a custom flag for the dangerous mines because it's a "on or off" kind of thing

#
  "LogName": "Trigger Actions: Base",
  "Action": "EditData",
  "Target": "Data/TriggerActions",
  "Entries": {
"{{ModId}}_HardModeMines": {
  "Id": "{{ModId}}_HardModeMines",
  "Trigger": "LocationChanged",
  "Condition": "WORLD_STATE_FIELD MinesDifficulty 1",
  "Action": "AddMail Current {{ModId}}_HardModeActivated received"
}
}
}```
#

the volcano one you can just use LOCATION_ACCESSIBLE Caldera

#

unfortunately the "harder mines" doesn't have any like, accessible flags to check if you've completed it from what i could tell SDVpufferweary so this is just my workaround because the world_state_field changes from 0 to 1, with 0 being the "off" state, and "1" being active

frigid hollow
#

i mean you could check if the danger in the deep/skull cavern invasion order was completed right

#

or does special order complete not actually keep track permanently

velvet narwhal
#

is the danger in the deep the one that gives the player the shrine?

frigid hollow
#

danger in the deep is the mines one, skull cavern invasion is the skull cavern one

true pendant
#

I have custom volcano caves and dangerous mines. I need to make it so that if the volcano location on the island is open and dangerous mines are unlocked, the path to my custom locations is open.

frigid hollow
#

if you want the dangerous mine one to only be active when the difficulty is active then yeah it'd just be "Condition": "WORLD_STATE_FIELD MinesDifficulty 1" on your map edit

velvet narwhal
#

ah yeah i think that's why i made it a mail flag because i only wanted it to check once

true pendant
#

So?
"When": {
"Condition": "WORLD_STATE_FIELD MinesDifficulty 1"
},

velvet narwhal
#

SDVpufferthinkblob or maybe

#

PLAYER_SPECIAL_ORDER_RULE_ACTIVE <player> <rule id>
with the ruleID being

MINE_HARD
SC_HARD```
true pendant
velvet narwhal
#

when and condition are equivalent, you'd have to use the content patcher way

#
"HasVisitedLocation": "Caldera",
"{{Query: {{WORLD_STATE_FIELD MinesDifficulty 1}} OR {{WORLD_STATE_FIELD SkullCavesDifficulty 1}}}}": true```
wait no
#

SDVpuffersquint i think

true pendant
#

"HasVisitedLocation": "Caldera", Is work

#

Now I'll check the conditions of the dangerous mines

velvet narwhal
#

queries always throw me for a loop when i have to nest them into 'when'

finite ginkgo
#

cough (WORLD_STATE_FIELD is a GSQ, and regardless of the name similarities, CP query does not accept GSQs)

velvet narwhal
#

alright well you're gonna have to use my mailflag trick

lucid iron
#

i mean u dont have to use When if you dont want to think

#

its mainly applicable if you are filtering the collection, then intending to do something with the result

#

can use Any instead if u r just check for at least 1 thing that match cond

brave fable
#

oh i read when as while.... nvm you're gonna need better material

calm nebula
#

Be brave

#

Use a goto

#

Like the way we used ti

velvet narwhal
#

my only goto ptsd is the phone service, i'll pass /lh

brave fable
#

in my defence your honour, 'when' is perfectly legal at my workplace in typescript

velvet narwhal
#

in my defense, i hit 'em with a "nuh uh there's the word query in gsq and the when docs on content patcher so i'm perpetually confused"

true pendant
#

HasActiveQuest - is this only executed when the quest is active?

velvet narwhal
#

yeah, unsure how that handles special orders though

true pendant
#

Is there a condition for the completed order?

#

Okay, I'll use "HasVisitedLocation": "QiNutRoom" it will be easier) Thanks everyone for your help!

fathom rapids
#

can someone please tell me what the fuck this could mean:

      loaded  | conditions | applied | priority | name + details
      ------- | ---------- | ------- | -------- | --------------
      [X]     | [X]        | [X]     | Default  | Oak Enlargening Size Explication (EditData Data/WildTrees)
      [X]     | [X]        | [ ]     | High     | Oak Enlargening Texture Load (TerrainFeatures/tree1_fall)
      [X]     | [X]        | [ ]     | High     | Oak Enlargening Texture Load (TerrainFeatures/tree1_spring)
      [X]     | [X]        | [ ]     | High     | Oak Enlargening Texture Load (TerrainFeatures/tree1_summer)
      [X]     | [X]        | [ ]     | High     | Oak Enlargening Texture Load (TerrainFeatures/tree1_winter)```
#

the patch in question:

            "LogName": "Oak Enlargening Texture Load",
            "Action": "Load",
            "Target": "TerrainFeatures/tree1_summer, TerrainFeatures/tree1_spring, TerrainFeatures/tree1_fall, TerrainFeatures/tree1_winter",
            "FromFile": "assets/{{TargetWithoutPath}}.png",
            "Priority": "High"
        },```
#

no error messages in SMAPI

lucid iron
#

it mean u load data to Data/WildTrees but didnt do any texture loads cus its already loaded (by the game)

#

should use EditImage here

fathom rapids
#

I mean, it's not like it's Exclusive priority, it should do load fine
I'll try edit image though ty

covert mulch
#

Very random, but does anyone know of a mod that adds computers you can program? Kinda like Computer Craft in Minecraft, or even just logic like Minecraft's redstone?

lucid iron
#

since it's not Exclusive, it just doesn't get to do anything

fathom rapids
#

that's not how it's supposed to work

lucid iron
#
Low, Medium, or High: the highest-priority patch is applied. If multiple patches have the same priority, the first one in the list (by load order + patch order) is applied.

Exclusive: all or nothing. If one patch uses it, it's applied and all other load patches are ignored. If multiple patches use it, then no patches are applied and an error message is shown.
#

i understand vanilla assets as having Exclusive, but i cant say i ever investigated further

fathom rapids
#

well the latter assumption would explain this

lucid iron
#

there's other reason to use EditImage, it's not tooo likely but if the texture size ever changed, EditImage will work still

#

while Load could potentially break stuff

fathom rapids
#

changing texture size is exactly the point of the content pack im making actually

#

anyway ill try editimage

#

WHY does content patcher have different priority value names for edit and load???

#

i have to check the docs every time

lucid iron
#

i think Load is when you are like

#

"this is my asset im making it"

#

edit for everything else

velvet narwhal
lucid iron
#

oh maybe you should just leave the vanilla tree sprites alone

fathom rapids
#

why would I do that

lucid iron
#

load your stuff to your own target

velvet narwhal
#

yeah, tree size framework has a very specific direction

fathom rapids
#

literally the entire point of what im doing is making oaks bigger

lucid iron
#

so things don't explod if another mod tries to edit the vanilla tree sprite for w/e reason

fathom rapids
#

i dont want to make my own tree

lucid iron
#

but you did make your own textures i thought

fathom rapids
fathom rapids
lucid iron
#

or you can just

#

avoid that by loading to a new target?

fathom rapids
#

How will that help me play without the small oaks and with the big oaks instead?

#

The framework author confirmed it should work on vanilla trees

lucid iron
#

yea as long as you provide the vanilla tree ids

fathom rapids
#

which I did

lucid iron
#

the way it works is that you are edit the mod's custom asset EnderTedi.TreeSizeFramework/WildTreeData

fathom rapids
#

successfully, since my oaks have been dutifully bugging out ever since I started testing this

lucid iron
#

supplying all the textures there

fathom rapids
#

you wont believe what I did

velvet narwhal
lucid iron
#

and so it really doesnt matter if you use a vanilla texture target or some rando thing

fathom rapids
#

ah i see

#

Right it can do that

#

If it doesn't work again I'll try that ty

lucid iron
#

im sure it'll work if u load to vanilla ofc, this is more compat concerns

#

like if ppl wanted to use foilage mod that edited both tree and bush, but only for the bush, since they also want your big trees

fathom rapids
#

editimage didnt save me

#

ah, but perhaps i had an error this time

lucid iron
#

u might have hit the editimage limitation, cant extend image sideways

fathom rapids
#

...yes, I did

#

never had that problem before (never tried this before)

lucid iron
#

i didnt know you desire bigger texture when i said it oops

fathom rapids
#

(Avoiding this sort of caveat is why I tried loading in the first place)

#

ok new texture target time ty for the idea

finite ginkgo
#

Do I spy people talking about bigger trees

fathom rapids
#

yes

#

I am now staring at the documentation and crying silent tears bc I have no idea what this in the example pack is and what the sizes should be and how to explain and define it (since the example pack doesnt change the width)

dusty scarab
#

does this look balanced for my mapwide scarecrow, or am I going a little too over/under on the crafting requirements? tempted to axe either the corn seeds or the corn and use a different ingredient

fathom rapids
#

i want to make the oaks look like this and I am prepared to photoshop my way to victory but I just don't understand

fathom rapids
#

I'd drop the corn seeds

lucid iron
#

pls my kegs...

tender bloom
#

The corn seeds you can buy directly, which makes them potentially just money

fathom rapids
#

yeah ^

tender bloom
#

I think oak resin makes it an interesting tradeoff against the kegs

dusty scarab
fathom rapids
#

the corn and the tree sap (whichever) are effort which is more fun

lucid iron
#

i also feel like hay should have a spot

#

its a big ol scarecrow that boy can fit so much hay

fathom rapids
#

youre making it out of a scarecrow already

lucid iron
#

(you can buy hay too ofc, so this is a theme suggest not a balance one)

rose forge
#

guess what fellas, mod author of longerseasons 1.6 made tokens for me to use for the mod, only problem is now its doing things I don't understand LOL

fathom rapids
#

youd need cloth then too

dusty scarab
outer panther
#

yall why the hell does this happen

fathom rapids
#

this lookslike a cape to me

#

check accessories

outer panther
#

it does, i only have a choker equipped

fathom rapids
#

check that you dont have CP oversized sleeves installed

outer panther
#

removing it does nothing

lucid iron
#

but ender is here so direct questions directly to the author AnnelieStare

outer panther
#

i do have a folder thats just [cp] sleeves

fathom rapids
#

?

#

disable that and try again

#

cp stuff just glues sleeves on your farmer, you want [fs] sleeve packs

outer panther
#

the only mods im seeing are lambeerons and sbs oversized sleeves

fathom rapids
#

you dont need CP clothes packs if you're using fashion sense

#

you need fashion sense packs

outer panther
#

ah gotcha gotcha

fathom rapids
#

also youre in the wrong channel

outer panther
#

lmao my bad i forgot to switch since yesterday

fathom rapids
modest pawn
#

do i have to buy the game on steam to be able to make a mod or could i just do it without

lucid iron
#

well it'd be kind of hard to test anything if you cant play the game

#

doesn't need to be steam though, gog gamepass r fine too

modest pawn
#

i meant like just a graphical mod

#

or whatever it’s called

#

aesthetics

lucid iron
#

what platform are you hoping to use the mod on think

modest pawn
#

im not gonna use it i just wanna like put it on gamebanana or whatever people use to mod on pc

brittle pasture
#

you can just release pngs with open permissions

pine elbow
#

Why would you make a mod for a game if you aren't going to play the game? SDVpufferthinkblob /gen

modest pawn
dusty scarab
#

hm... I could do Iridium Bars, Solar Essence. I'm tempted to do Golden Animal Cracker, but I don't know how long it takes most people to gain Mastery, and I don't want to lock it outside of most people's ability to get

pine elbow
modest pawn
#

ah

fathom rapids
#

the problem is using the mod

modest pawn
#

I’ve never modded a game before i just can do pixel art 😭

fathom rapids
#

also gog version exists

#

its perfectly fine to mod on it

lucid iron
#

yea there's a bunch of hoops to jump through for switch modding

fathom rapids
#

you dont need steam to mod sdv

modest pawn
#

oh cool

lucid iron
#

in your situation maybe collab with someone?

#

have them help u with the content patcher + testing portion

pine elbow
#

I understand that it'd be possible to mod without access to the code directly, but wouldn't it be a bit difficult?

modest pawn
modest pawn
fathom rapids
dusty scarab
#

I wouldn't recommend Switch modding, though. that's a great way to brick your Switch if you don't know exactly what you're doing, and some games (noteably Pokemon series) don't put saves in the Nintendo Cloud, so unless you Pokebank all your Pokemon before bricking your Switch, you'll lose all of them

fathom rapids
#

(it literally had example code for what I wanted to do lol)

lucid iron
#

it's not hard to do texture replace, but it probably helps to know what the original texture's dimensions are

pine elbow
modest pawn
#

and even then

lucid iron
#

imagine if you make a beautiful retexure of pufferfish, but it's 42x28 and hard to put into game without additional work LilyDerp

#

nothing stops u from going "here's some pngs they r CC licensed do what you want"

fathom rapids
dusty scarab
# modest pawn and even then

when I jailbroke my 3DS, I bought a used one to do my jailbreaking on and would just switch cartridges between the two for save editing, lol. make edits on the jailbroken one, then put the cart back into my unjailbroken one and go about my day XD

modest pawn
fathom rapids
#

the only requirement is a text editor and the actual pngs

#

you can ask someone for texture size

#

id help, for example

lucid iron
#

collab wew

fathom rapids
#

mhm

brittle pasture
dusty scarab
#

oh yeah, definitely only 1 cracker

pine elbow
#

People here are very friendly nod many would be willing to help! Though I suspect asking for pixel dimensions will be met with "just unpack the files and check in your pixel program"

dusty scarab
#

I was wanting to gate it behind Farming Mastery, but couldn't figure out how to do it, so was thinking that requiring a Golden Animal Cracker was a good work-around

dusty scarab
#

but wasn't sure if that would make it an 'un-casual friendly' sort of end game item

modest pawn
#

should i just buy it for the convenience it’s 50% off on steam rn

#

and i don’t think im gonna get a better deal anytime soon

pine elbow
#

/silly

fathom rapids
#

(I would just tell you)

modest pawn
fathom rapids
#

modding stardew valley is so great. you want it on pc. totally

pine elbow
#

Nothing compares to seeing the big block of red text disappear and see your mod working

brave fable
#

nothing compares to the feeling of absolute power. total control over these witless pixels. complete dominion 🔮SDVdemetriums

pine elbow
modest pawn
#

im gonna spend so much time and effort on a stupid inside joke and it’s gonna be worth it

dusty scarab
pine elbow
#

I can't live without seasonal cute characters

brave fable
#

for some, having it on switch is the quality of life 😌

modest pawn
#

I’ve been starved from 1.6 content for months i need it 😭

pine elbow
#

Next month!

modest pawn
#

also the mod im making is just replacing sebastian with my English teacher because he dresses like a stardew character

#

that’s it😭

brave fable
#

will it be at parity with pc 's 1.6.9 update though SDVpufferthinkblob

brave fable
calm nebula
#

What does the word "parity" mean

brave fable
#

please, i'm a thesaurus not a dictionary

modest pawn
fathom rapids
#

im just having a good time here

modest pawn
#

honestly the thing that started this was he was wearing light blue flannel shirt and dark green pants with dress shoes

pine elbow
modest pawn
#

you cant tell me that SOMEBODY ingame wouldn’t wear that

brave fable
#

shane fit

modest pawn
#

exactly

modest pawn
dusty scarab
modest pawn
#

what did those 104 disabled mods do 😭

humble timber
#

prolly random AT packs or whateva

brave fable
#

parity here being feature-complete, not lacking the cool fixes and changes from the last few months

fathom rapids
# modest pawn what did those 104 disabled mods do 😭

you know what now im curious too
...and immediately im enabling one bc i basically just forgot to do that...
ok so, categories

  • aesthetic mod i replaced with a different one i like better but What If I Want It Back
  • mod that no longer works But What If It Updates And Works Now
  • component part of a large mod that i dont want but deleting is a hassle
  • gameplay mod incompatible with a different one i installed but if i decide i dont want that one ill want this one back
  • why do i even still have this one??? deleting now
  • aesthetic mod i dont want to use but might want/need to test my mods with
  • mutually incompatible farm/farmhouse mods that I might want to switch between in between playthroughs
  • NPC mod I installed and then decided I don't want because there are too many, but what if I want it back later
modest pawn
#

has anyone made a polyamory mod yet

#

just wondering

fathom rapids
#

yes

modest pawn
#

ah

fathom rapids
#

theres a whole ecosystem around it

modest pawn
#

oh damn

#

if you marry everyone does your house just EXTEND

fathom rapids
#

the mod i forgot to enable was a polyamory spouse room location definition for the custom farmhouse

#

which actually answers your question!

#

by default, yes

#

but theres additional mods to fix that

brave fable
#

the bed extends, too SDVdemetriums

fathom rapids
#

check this out

#

and thats in 1.6 where polyamory sweet combined into one what used to be the functionality of like 6 mods (the main one enabling polyamory and the supplemental ones fixing the wedding, extending the bed etc)

#

you can place extra spouse patios where you want on your farm

modest pawn
fathom rapids
#

Multiple Spouse Dialogs is technically broken for 1.6 (has the red message in the mod manager) but actually works (it makes your spouses sometimes talk when they're nearby each other in the house via bubbles over heads. i wrote a content pack for it once)

fathom rapids
#

my house rn (I am not married to anyone yet, this is a config setting)

#

(It can get as big as you want)

#

(The spouses spread out or clump together automatically depending on their total number and bed length)

#

you can also have as many kids as you want, though the "Make children real NPCs with schedules and gift tastes" mods only work on the first 2

#

theres a mod that lets any number of kids talk though

#

meanwhile, I have run into the problem that I cannot replace the textures via tree size framework, only add textures, and the game is using the vanilla ones instead of the ones i added. maybe the problem is that my textures are wrong and i should make them look different. heres hope

#

(I have used the palm tree texture for the current season and want to see what happens)

dusty scarab
#

hooray! my Corncrow "scares" crows, counts crows, is unlocked at Farming 9, and requires one Deluxe Scarecrow, 1 Golden Animal Cracker, 50 Corn and 50 Oak Resin to craft, making it require a good amount of effort for the ability to banish crows from the crops of your entire farm map!

...now I just need to keep fiddling with the art asset and not let perfection be my enemy

fathom rapids
#

endertedi pls ignore this i just realized an error i made

#

wish me luck -_-

dusty scarab
teal bridge
#

(Also congratulations on getting it to work)

dusty scarab
#

now I just need my asset to not look like ass, and it'll be ready for release!

#

...it's harder than it looks XD

fathom rapids
#

make it a glow effect over whatever deluxe scarecrow asset is currently loaded (devil on your shoulder)

#

(you make a glow effect by overlaying a transparent gradient over the image)

teal bridge
#

Doesn't really fit with the item description, though, does it? It's a corn crow, not a... glowcrow.

fathom rapids
#

add a corn box

dusty scarab
#

I'm considering just taking the deluxe scarecrow, finding some way to crop it out of the BC png, and putting the giant bowl of corn in its hands since it requires a Deluxe Scarecrow to make

fathom rapids
#

I can tell you how to crop it out!

teal bridge
#

I could see it being a DSC with a big ol' box, yeah.

#

I'm not sure what crop means here though, just copy and paste?

rancid temple
#

Just open it in GIMP or Libresprite and select it and make a new sprite of it?

fathom rapids
#

it means programmatically command the game to take the texture from that file and edit it into the asset you want

teal bridge
#

Yeah, I use PDN but hell, even MSPaint works here.

fathom rapids
#

the beauty of compatibility

dusty scarab
fathom rapids
#

what file

teal bridge
#

PDN and GIMP are free.

fathom rapids
#

are you trying to open the xnb file

#

if so, you're doing it wrong

dusty scarab
rancid temple
#

Libresprite is also free and is basically just Aseprite

fathom rapids
#

i use libresprite

teal bridge
#

This isn't really arcane stuff - open in editor -> rectangle select -> copy and paste into new image.

dusty scarab
fathom rapids
#

also you dont have to do that as i said
just do it programmatically
EditImage FromArea

teal bridge
#

He's not editing the existing sprite, this is a new item.

dusty scarab
fathom rapids
#

so 1. You load an empty transparent asset the size you need.
2. You EditImage the scarecrow on it

#
  1. You EditImage what you want to add on top of that
#

You need two .png files of your own (the base and the addition) and knowledge of pixels of the file you want (I can help with that)

rancid temple
#

Only problem with that is then you're including the entire craftables image if you aren't going to edit it to remove it

fathom rapids
#

?

rancid temple
#

And you should avoid including the entirety of vanilla files if you can

fathom rapids
#

why would you do that

#

hmm

rancid temple
#

If you can already edit the image, there's no reason to load a transparent and then edit on top of that

fathom rapids
#

oh right i dont know if what i want works

teal bridge
#

Using FromArea is fine, it won't copy the entire craftables image, but yeah, the transparent image step seems unnecessary.

rancid temple
#

Just make a new image and load it?

fathom rapids
#

rip, it has to be fromfile

#

my idea was to load it from an already loaded asset but it looks like content patcher doesnt support that

rancid temple
#

You can't FromFile an internal game asset though, it's based in your file

dusty scarab
#

photopea worked like a charm! now I have the BigCraftables png in two pieces that I can open and copy-paste from as needed!

fathom rapids
#

just crop it to the scarecrow then :3

teal bridge
#

Yeah I'm not sure why this needs the complexity of a composite sprite built programmatically unless we're really terrified of recolors, but unless both images come from vanilla game assets then recolors are a crapshoot anyway.

fathom rapids
#

big craftables and all

rancid temple
#

As long as they load the scarecrow they make then anyone can retexture it

teal bridge
#

That's fine, but combining a possibly recolored vanilla asset with a static mod asset is usually going to be worse than just having the whole asset be static (in the mod).

rancid temple
#

And honestly, even if they use InternalAssetKey, you can just change the target of the texture and recolor it that way

fathom rapids
#

whatever, what i wanted is depressingly technically impossible )=

teal bridge
#

It's not technically impossible, just overkill for a problem this simple.

rancid temple
#

Unless you want to make it a C# mod lol

dusty scarab
teal bridge
#

Oh, yeah, it may be impossible in Content Patcher alone - I read "programmatically" and assumed it was a C# mod.

#

JSON files aren't programs.

rancid temple
#

I've given up on trying to provide the distinction

lucid iron
#

wait i thought you drew the corncrow already

#

or have a wip that's far along

dusty scarab
acoustic summit
#

Question to those harmony patchers out there, Im trying to access the Equip method in the farmer class which is all well and good, but there are multiple equip methods. When trying to add in the parameters to distinguish between them I need to mention parameters of type "TItem". I do not know how to access this type, any tips?

lucid iron
#

(fwiw i thought it was charming, esp the lil blush)

dusty scarab
#

I think the big bowl of corn in my wip is making it so that shading is more difficult, so it just looks very flat, and I wanted to see if there was anything I could do to make it look less flat

lucid iron
#

TItem is a generic type

teal bridge
#

(Patching generics can be unpleasant; avoid it if you can.)

rancid temple
#

I don't remember does Pathos like random PR's or requested beforehand?

acoustic summit
#

Ive been avoidant to the issue where possible, but I cant tell another way to check for changed hats without an update ticked event

lucid iron
#

can u patch onEquip

teal bridge
#

Going by my experience, it doesn't matter whether you send Pathos a random PR or give a heads-up, it'll still take 6 months to merge.

rancid temple
#

Lol

lucid iron
#

jokes its a empty virtual

teal bridge
#

(Mostly kidding. I know he's busy and all.)

acoustic summit
#

Is onEquip called for hats?

lucid iron
#

i mean ive always just opened a PR and maybe told pathos LilyDerp

fathom rapids
lucid iron
#

but he is 1.6.9 grind rn so dont expect merge until after that

fathom rapids
rancid temple
#

They're just data storage

teal bridge
#

I wasn't going to belabor the point but... no, they aren't, they really aren't programs, they are data.

rancid temple
#

The instructions are handled on CP's side

lucid iron
fathom rapids
#

meanwhile im getting somewhere!

dusty scarab
#

they're not programs in my eyes, but instead more like programs-lite for those of us who can't actually code and need something human-readable to feed into a framework that will turn them into programs

lucid iron
#

but hmm i think spacecore has a equip system

fathom rapids
rancid temple
#

See this is why I gave up on trying to explain that they're just data lmao

teal bridge
#

Not programs lite, not programs at all. Data.

fathom rapids
#

programs are data too

astral prism
#

remind me in 17 hours to actually try that thing

patent lanceBOT
#

For you? Of course, xxharvzbackxx (#6287437) (17h | <t:1728402043>)

teal bridge
#

Yes, but data are not programs.

rancid temple
#

Squares and rectangles

fathom rapids
#

if i write down a recipe it is data. it is also a program - an algorithm for me in the kitchen to follow

lucid iron
#

spacechase0.SpaceCore/WearableData

acoustic summit
#

Is it possible to add a postfix for a generic method? If it is then that may be the play - right now my mod dosnt have a dependency on spaceCore so yk

teal bridge
#

Handwritten lists really don't translate to the computer science domain. There's no meatspace analogue to a computer program except maybe neural connections in your brain.

rancid temple
#

In that example, you would actually be the program

fathom rapids
#

json mods are like. second order programs. programs for other programs to follow

lucid iron
#

its a feature that let you have buffs on wearable items

fathom rapids
lucid iron
#

so if thats what you want then i would prob go with using spacecore

#

do you need something fancier?

rancid temple
#

I plead the fifth, I'm gonna get myself into trouble if I keep answering

calm nebula
#

Patching Item.OnEquip works

#

Just check for "is hat"

astral prism
#

yo while you guys are at it serve me up a yappuccino

lucid iron
#

atra i thought u cant patch virtuals with no body

rancid temple
#

Not to mention this conversation is pretty off topic and not really going anywhere

calm nebula
#

The other thing you can do is (very careful)

fathom rapids
teal bridge
#

Wait, why wouldn't you be able to patch empty virtuals? Some inlining issue?

calm nebula
lucid iron
#

ah i see, thats my misconception then kyuuchan_run

calm nebula
calm nebula
teal bridge
#

Yeah, that's why I was confused, but of course you can't patch abstract methods because they don't exist, so that makes more sense.

calm nebula
#

Yup!

acoustic summit
#

I think OnEquip will work then, yeah! Thanks for the help 🙂

#

I had originally used textureChanged in the farmerRenderer but it missed hats since they are drawn with hair and accessories

fathom rapids
#

tfw you really want to start working in the loaded mod folder already to simplify testing But That's Terrible Practice )=

rancid temple
#

I make mods chaotically, I don't have a minimum mod pack

lucid iron
#

but what is your maximum mod pack

fathom rapids
#

what's a minimum mod pack

rancid temple
#

Trying to figure out if the log will tell me how many mods I have installed since I don't wanna launch again right now lol

#

Just like a pack with only the essentials to avoid conflicts

#

I only have 103 mods right now

fathom rapids
#

ah, yeah... i dont have that either

fathom rapids
#

sorry for the ping

rancid temple
#

All good. I avoid mod managers

fathom rapids
#

after my experience with vortex i understand that. stardrop seems nicer though

#

alternatively, your installed mods are just folders in a big folder, right? your file explorer should tell you how many there are

rancid temple
#

I have a lot of sub folders lol

fathom rapids
#

thats a bit bigger a math problem,you might need to involve notepad

lucid iron
#

just gotta grep for number of files named manifest.json

fathom rapids
#

oh good point

rancid temple
#

Many of my CP mods are deactivated because they're test mods so I wouldn't want to count them

lucid iron
#

well find and then grep iirc

fathom rapids
#

how do you deactivate files while they're still in the mods folder?

rancid temple
#

I did end up just launching again since the console will update with loaded mod count

#

Put a period . in front of their name

#

SMAPI ignores things starting with a period

#

@ivory plume I made a little PR for Data Layers (hopefully this is an okay way to let you know)

ivory plume
#

Thanks! I'll add that in the next set of beta updates.

covert mulch
#

Has anyone had problems with More Grass breaking?

#

It's marked as broken in the compat list, but it works fine for me?

#

I have a log from someone but I can't really see how it's breaking like it is, curious if anyone knows if it's another mod it's incompatible with or if it actually is just broken in a way I'm not able to replicate

lucid iron
#

could you post the log

covert mulch
teal bridge
ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows NT 10.0.19043.0, with 197 C# mods and 539 content packs.

covert mulch
#

Ofc they have an insane amount of mods so I'm in no rush to download all those to try and replicate haha

#

They get set on a Grass.setUpRandom postfix, I'm not sure if I'm able to see if a mod is patching it while blocking my patch so not too sure how to narrow it down

fathom rapids
#

ok trying to widen the texture just crashed my whole game so its obviously not that

rancid temple
#

You can do a harmony_summary in the console to see all the patches, or have them do that anyways

fathom rapids
#

oh nvm it was just trying to load from a nonexistent file, thanks typos

covert mulch
fathom rapids
uncut viper
#

the answer to that most of the time is git

fathom rapids
#

for json mods???

uncut viper
#

why not?

fathom rapids
#

🤔

#

I mean, that is true

uncut viper
#

werent you saying they were programs anyway? if so, then whats the difference

fathom rapids
#

I'm just curious about how many json modders do that

#

git takes more work to set up

#

and i bet most json modders dont know how

tiny zealot
#

well, it does take more work to set up a git repo than zero work, that is true

uncut viper
#

if not git then i imagine most CP-only modders just dont worry about keeping older versions otherwise

#

and if they need an older version then, well, they can redownload from nexus

fathom rapids
#

now i want to do a poll, like on tumblr

fathom rapids
tiny zealot
#

git has a comically, famously bad user interface but it is very, very good at its job (tracking changes to files) so its dominant position among version control systems is well-earned

fathom rapids
#

mhm

uncut viper
#

i dont think nexus lets you actually delete delete files, just archive them, no?

fathom rapids
#

yes it does

tiny zealot
#

when you upload a replacement for an older version, there's an option to "remove" the version you are replacing

fathom rapids
#

i mean maybe it saves them somewhere but you cant download files you deleted

tiny zealot
#

i have never used this feature because i always leave at least one prior version available in case of emergency

#

so i don't know if it deletes deletes it or just archives it (probably the latter)

lucid iron
#

i use it but i leave file archive accessable

#

its just so that ppl need to click 1 more time to get there

fathom rapids
#

i used to not do the zip version control either but then i got confused between a half-written major feature and an urgent bugfix and learned my lesson

uncut viper
#

maybe the mod author cant access it i suppose, but i couldve sworn a while back they stopped permanently deleting files from their servers bc of problems caused when collections got deleted files

gaunt orbit
lucid iron
#

git has a user interface?

uncut viper
#

(without moderator intervention anyway)

frozen field
gaunt orbit
#

I could probably set up git and push to github with my eyes closed

uncut viper
#

most if not all feature heavy IDEs also have git stuff built in

brittle pasture
uncut viper
#

i think VSCode does too?

rancid temple
gaunt orbit
tiny zealot
fathom rapids
#

i used github once for half a year and i remember finding the command line interface useful and helpful and happy. that had been about a decade ago. rip my gitability

frozen field
#

y'all wanna know something funny? here's what I did on my first day on linux
cd . pwd cd . pwd cd .

repeat like 10 more times. I nearly broke down to my mentor asking "why am I not moving directories??"

gaunt orbit
lucid iron
#

yea i did mean gui

frozen field
#

I saw someone here is a vim user, and all I can remember is how the embedded device I worked on (medical device, very locked down) only had vi and not vim

lucid iron
#

i only know 3 things in vim and thats i, wq, and q!

fathom rapids
#

git has a gui in visual studio and also at least one other

frozen field
#

somehow, I figured out how to quit vim before figuring out how to change directories

fathom rapids
#

i like command line best

brittle pasture
tiny zealot
gaunt orbit
#

I know how to use vim but I still prefer gui editors

#

Mostly I've just used it over ssh because fuck ftp for that shit

frozen field
#

I like vs code a lot. VS 22 I find only tolerable with the CodeRush or ReSharper extensions

#

coderush is free and it's great

gaunt orbit
#

I love vs

#

Most of the time

frozen field
#

my company buys us resharper and it literally turns vs from a Toyota to a AMG gwagon

lucid iron
#

can i make a wall valid for paintings/doors/etc but not for wallpaper

gaunt orbit
#

Sometimes it's a PITA, but the intellisense and autocomplete are really good

velvet narwhal
#

oh, i found it

gaunt orbit
#

And the debugger is wonderful

frozen field
#

I splurged and bought the jetbrains suite for myself, wow I love Rider tho so much. also Linux friendly too

#

Linux, bc msft is really starting to irk me with their Copilot/Recall shenanigans

gaunt orbit
#

I have all that shit disabled

frozen field
#

same, but I don't trust them to not surreptitiously turn it back on with an update later on

#

am still a Linux n00b, and too scared to use arch. I would like an os that I can easily customize, but not one that I have to constantly maintain

lucid iron
#

i mean they cant make u do rolling release sleep

#

i am big slacc about that

rancid temple
#

Huh, my computer restarts whenever it feels like to update

#

Despite my settings

brittle pasture
#

if anything Ubuntu makes you do lengthy maintenance every 6 months/2 years

rancid temple
frozen field
#

yee I'm on Ubuntu, but I got rid of gnome so fast and went to kde

brittle pasture
#

Arch is mature enough that should just work once you install everything (breakages notwithstanding)

frozen field
#

I like looking on the subreddits on how people rice their Linux setups. tiling managers are cool, but I'm not smart enough to use only the keyboard

gaunt orbit
#

One day I'll go Linux but for now there's still some windows-only stuff that I'm too attached to to give up

velvet narwhal
frozen field
#

aesthetics r nice, but I gotta be able to be productive too

gaunt orbit
#

For now I just have wsl and windows

brittle pasture
fathom rapids
#

(after seeing the empty space instead of oaks)
im getting the vibe that i should go to sleep

#

(its 3am)

covert mulch
rancid temple
#

Yeah, if AT is prefixing before yours, it has one path that doesn't return to the original method so it could be skipping then

velvet narwhal
#

StardewValley.TerrainFeatures.Grass.draw_PatchedBy<EpicBellyFlop45.MoreGrass__PeacefulEnd.AlternativeTextures>(Grass this, SpriteBatch spriteBatch) that line

#

made me go, "is this a framework problem?"

lucid iron
#

does AT let u do grass too

rancid temple
#

The chaos of AT patching every draw call in the game lol

velvet narwhal
#

yeah i downloaded literally everything in that trace log

#

and those were the only ones with the same harmony patch

#

not the content packs, but the frameworks SMCKekLmaoDog

gaunt orbit
#

You can change the order with annotations if you need to

velvet narwhal
#

i have learned that clear glasses does not like previously saved games, crashed me SMCKekLmaoDog

gaunt orbit
#

[HarmonyBefore("PeacefulEnd.AlternativeTextures")]

#

Works with manual patching too

uncut viper
#

as long as you make sure they actually used their uniqueid for their harmony identifier

velvet narwhal
#

oh y'know, i followed button's steps so i see my harmony is set to my uniqueid, i was like "huh? is that a special step?"

teal bridge
#

Clear Glasses does patch a lot of stuff, though, so it's possible it's running into an unusual bug that just doesn't happen to crash the game in vanilla.

velvet narwhal
teal bridge
#

Like an actual error message specifically about a previously-loaded game? I didn't think it stored anything in the save data...

velvet narwhal
#

nah just smapi's screaming red text in the console

teal bridge
#

There are definitely scenarios that break differently with CG vs. without CG. I ran into one the other day having to do with threading.

#

But, as far as I know, those scenarios all require something to be already broken. Not necessarily crash-broken but "this is very unsafe" broken.

velvet narwhal
#

yep, i hit the (1) hiccup where i can't replicate it

teal bridge
#

I don't use AT so this could very well be an AT thing, some interaction between the two.

#

Not unlikely if they're both trying to patch draw calls. Add in a third thing like Portraiture and it's total chaos.

velvet narwhal
#

oh wait

ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 5 C# mods and 0 content packs.

teal bridge
#

I don't think that's Clear Glasses. That's what you get when a mod decides to screw with the serialization graph (like subclassing Tool) and doesn't use SpaceCore to rectify it.

#

Mind you, the error is oddly specific, so it could just be a randomly corrupted savegame.

velvet narwhal
#

probably just a corruption, i was slowly adding in frameworks to see if i can replicate the error

tender bloom
#

That isn’t the ysual corrupted save error

teal bridge
#

It's complaining about an extra Y field on Character.Position, which... I don't even know how that happens.

tender bloom
#

That looks more like screwing with the serializer but yeah

#

Idk

#

Quests have descriptions

#

That’s normal

teal bridge
#

The trace happens to be in that quest but the proximate cause is apparently a serialized Vector2 with two (or more) Y attributes.

tender bloom
#

Oh god thats horrifying

#

How

#

Why

teal bridge
#

That's either the Cosmic Ray Bitflip kind of corruption, or some really messed up serialization code in some mod somewhere.

#

I've never tried to inspect a savegame but apparently it's XML, there's probably some way to unpack it and see exactly what got corrupted and from there, maybe why... but is it worth the effort?

velvet narwhal
#

maybe it has to do with something about me swapping back and forth between 1-6-8 and 1-6-9? Exception occurred trying to access file 'C:\Users\aviro\AppData\Roaming\StardewValley\Saves\169_387523244\SaveGameInfo' it pulled from my 1-6-9 save for some reason even though i didn't select it SDVpufferthinkblob

#

unless my mouse did a funny and i did, in fact, select it SDVpufferyikes highly plausible

teal bridge
#

Possible, although I actually don't see how. Version changes could cause a variety of serialization issues but not that particular issue as far as I can see.

tiny zealot
#

if you have saves from newer game versions in your folder, you typically see that kind of exception when you choose Load, since the game tries to read all your save files in order to list them with relevant information

velvet narwhal
#

nope, it blinks and it gives me the fun bush noise if i try to select it

teal bridge
#

Yeah, I would definitely expect some failure trying to load a 1.6.9 save in 1.6.8, although how it ended up in that particular situation is a mystery. (It's not like the XNB format has changed.)

#

As ichor says, it does have to try to read those savegames anyway, to even be able to tell you that there's a version mismatch, know what the character name is, etc. Loading doesn't happen exclusively when you click it, it happens (at least partially) before.

teal bridge
#

I'm a little on the fence about posting this early since none of the intra-wiki links go anywhere yet, but I figured I'd share it just for the new and vastly improved example here: https://github.com/focustense/StardewUI/wiki#example-scrolling-item-grid

Probably going to be a week or more before I can actually finish writing all those pages, but don't worry, I'm not going to spam updates for every page. Just this particular one.

lucid iron
#

excellent branding

teal bridge
#

lol, what branding, you mean my amateur logo?

lucid iron
#

yes i enjoy it DokkanStare

#

i was try it out earlier and wanted to make a tabbed menu, but i realised im unsure how to switch the content of a frame

#

maybe im meant to use the conditional thing instead?

teal bridge
#

*switch with an enum, probably would be the most straightforward.

#

I assume these are "simple tabs" and you're just sticking an image or label or something inside the cases - though in a real complex tabbed UI it might also be a useful case for <include> if each of the tabs are essentially full menus in their own right.

lucid iron
#

i did want to see if i could make the way tabs move down when it's selected work just in sml but thats afterwards

teal bridge
lucid iron
#

ah i was read source and thought it'd be like <switch> and <case> DokkanStare

teal bridge
#

The unit tests should be a much better reference for all that, at least until the wikis are done.

covert mulch
#

I've been having a little look into the stardew code and there isn't a way to easily add categories, are custom categories generally something you should avoid if possible?

rancid temple
#

I believe you can use SpaceCore to give the appearance of custom categories

#

There's a lot going on with categories, not sure exactly how much you'd have to change in order to add actual custom ones, but it would be a lot

teal bridge
lucid iron
#

it is probably entirely unrelated views in practical applications yea

#

something like this?

<lane orientation="vertical" horizontal-content-alignment="middle">
    <banner background={@Mods/StardewUI/Sprites/BannerBackground} background-border-thickness="48,0" padding="12" text={HeaderText} />
    <lane orientation="horizontal" horizontal-content-alignment="middle">
        <button text="Tab 1" click=|ChangeTab("1")|/>
        <button text="Tab 2" click=|ChangeTab("2")|/>
    </lane>
    <panel *switch={Tab} margin="0,8,0,0" horizontal-content-alignment="middle" vertical-content-alignment="middle">
        <frame *case="1" layout="200px 200px" background={@Mods/StardewUI/Sprites/ControlBorder} margin="0,16,0,0" padding="32,24">
            <label text={Page1Text} />
        </frame>
        <frame *case="1" layout="200px 200px" background={@Mods/StardewUI/Sprites/ControlBorder} margin="0,16,0,0" padding="32,24">
            <label text={Page2Text} />
        </frame>
    </panel>
</lane>
#

i should just wait for docs probably, not like i have a ui heavy mod in mind atm KasumiDerp

teal bridge
#

That should be *switch={Tab}, otherwise I think it makes sense.

#

And obviously the two cases have to be different values.

#

The tab can be an enum if you want, the unit tests use an int because it's easy to set up but as a reference example for users it'd probably be better to have something like enum Tab { Foo, Bar }.
(Oh, and for simplicity, I'd probably dispense with the panel entirely and just case those labels directly inside the frame - there's no reason to keep repeating the same layout, margin, padding, etc. on multiple elements)

brittle pasture
#

(and SpaceCore's 'category appearance override' feature)

covert mulch
#

Tbh, it's soley for aesthetic purposes

tiny zealot
#

seconding context tags (my beloved) in this situation

brittle pasture
#

in that case spacecore is perfect then

covert mulch
#

Yeah, I'll have a little look into spacecore, thanks

brittle pasture
#

(or Calcifer)

lucid iron
# teal bridge The tab can be an enum if you want, the unit tests use an `int` because it's eas...

like this then

<lane orientation="vertical" horizontal-content-alignment="middle">
    <banner background={@Mods/StardewUI/Sprites/BannerBackground} background-border-thickness="48,0" padding="12" text={HeaderText} />
    <lane orientation="horizontal" horizontal-content-alignment="middle">
        <button text="Tab 1" click=|ChangeTab("1")|/>
        <button text="Tab 2" click=|ChangeTab("2")|/>
    </lane>
    <frame *switch={Tab} layout="200px 200px" background={@Mods/StardewUI/Sprites/ControlBorder} margin="0,16,0,0" padding="32,24">
        <label *case="1" text={Page1Text} />
        <label *case="2" text={Page2Text} />
    </frame>
</lane>
#

i dont think i wrote ChangeTab on C# side correctly though

teal bridge
#

Looks about right at a glance, but have to test it out.

lucid iron
#

hrm

    private void ShowExampleMenu3()
    {
        var context = new TabbedMenuContext();
        Game1.activeClickableMenu = viewEngine.CreateMenuFromAsset($"{viewAssetPrefix}/Example-TabbedMenu", context);
    }

    class TabbedMenuContext
    {
        public string HeaderText { get; set; } = "Tabbed Menu";
        public string Page1Text { get; set; } = "This is the first page.";
        public string Page2Text { get; set; } = "This is the second page.";
        public string Tab { get; set; } = "1";

        public void ChangeTab(string tab)
        {
            Tab = tab;
        }
    }
teal bridge
#

Nothing stands out to me as wrong there. Could easily be a bug at this point.

lucid iron
#

mystery

teal bridge
#

Well you haven't said what the problem is yet.

lucid iron
#

another thing is that, if my sml is critically wrong, the game locks up on error

lucid iron
teal bridge
#

I take it this is with hot reload.

lucid iron
#

no i didnt find the hot reload / watch folder bit

#

the binding do work as expected if i change the initial value of Tab so yea it is just buttons not clickable or click event not firing

teal bridge
#

I think some of that did become somewhat more fragile after the hot reload changes (even possibly if you don't have it turned on) because instead of failing once at the API call, it'll think that something's still dirty in the asset and keep trying to load every frame. It's on my list of things to fix, making sure it doesn't keep attempting an invalid binding that hasn't changed.

lucid iron
#

it is on 1.6.9 if that makes a difference

teal bridge
#

Oh, you didn't implement INotifyPropertyChanged on the model, did you?

lucid iron
#

nope blobcatgooglyblep

#

this is why i ought to wait for docs

teal bridge
#

That way you just have to write lines like [Notify] private string tab.

covert mulch
#

Last time I'll pester you guys today, how do I make an object passable? I can't find a context flag for it, had a look at furniture and it inherits Object and just overrides the method, would I need to do the same? If so (sounds so basic Ik, I'm just very rusty as I haven't done modding for a long time) how would I make created instances of the object use the derived class instead of just Object?

brave fable
#

stardewui template question: is .sml pronounced 'smell' or 'small'

lucid iron
#

saturday might live

covert mulch
#

Woah, blue, you're not moldy...

brittle pasture
covert mulch
#

Damn I was worried that's what I'd need to do. Thanks

brittle pasture
#

Tbh that's still preferrable to subclassing

covert mulch
#

Oh really?

teal bridge
covert mulch
#

Thinking about it subclassing wouldn't be too bad in my case, I need to override the drawing too

brittle pasture
#

if you subclass you need to register your class with SpaceCore's serializer, otherwise it blows up your save

covert mulch
#

If my other mods are anything to go by that's kinda fragile so if I can avoid it I'm open to it

#

Ahh

#

Yeah that sucks haha

brittle pasture
#

You can also make sure to replace every of your custom class instances with a vanilla game class before saving, and convert them back after

#

but that's annoying

covert mulch
#

Didn't 1.6 make serialisation more resilient? Or did that not include subclassing?

lucid iron
#

it is work now yay

partial class TabbedMenuContext : INotifyPropertyChanged
{
    [Notify]
    private string tab = "1";
    public string HeaderText { get; set; } = "Tabbed Menu";
    public string Page1Text { get; set; } = "This is the first page.";
    public string Page2Text { get; set; } = "This is the second page.";
    public void ChangeTab(string tab)
    {
        Tab = tab;
    }
}
brittle pasture
#

I don't recall anything like that, but you must register your class with the save serializer regardless

covert mulch
#

Yeah makes sense, thanks SDVpuffersalute

teal bridge
lucid iron
#

was CustomFields a new in 1.6 thing?

#

i did try to use int actually

brittle pasture
#

it's new with most other data models I presume

teal bridge
#

Integer works too, anything with a supported string conversion.

calm nebula
#

In 1.5.6, for example, woe befall you if you left a hothead or Dino out on the farm and the player tried to save

#

In 1.6 every game class that can be left in the world has been registered

#

So enjoy your out of the mines cosmetic plants

covert mulch
#

Ahh, thanks for the clarification

brave fable
#

can projectiles be serialised. i'd like to have a missile aimed at the bed overnight

ornate locust
#

o_o

lucid iron
#

@teal bridge i got this exception while trying to set margin

NotSupportedException: No value converter registered for Edges -> Edges.

the prop is a getter

// <button text="Tab 1" click=|ChangeTab("One")| margin={Margin1}/>
public Edges Margin1 => GetMargin(Tab.One);
brave fable
calm nebula
#

Maybe we should make blueberry a special color

#

Like deep red and green

brave fable
#

i'd give it all for my dearly missed blueberry's hat(tm)

vernal crest
#

@rancid temple I saw you already pinged him so maybe you already found this out but Pathos does prefer people chat to him about PRs before doing them.

next plaza
#

Can I be a special color too wait

teal bridge
uncut viper
#

(or might not be accepted without specific considerations/implementation discussed, so the initial PR work might be wasted and need to be redone)

brave fable
#

i recall asking him about whether a PR for one feature or another was worth the time beforehand and got a nice review back when it was submitted, it's good to ask first

teal bridge
#

If you're trying to provide a binding for Edges (to set a margin?) then you can provide it as a string for now. I could also add a converter for a 4-element tuple.

lucid iron
#

i also made same mistek with Sprite looks like

teal bridge
#

Essentially, if you are writing a model and thinking about how to provide some framework type, in order of preference:

  1. Don't
  2. Use the string representation instead
  3. Add a type converter for a more conventional type like Tuple
  4. Remove the shared project reference and take an assembly dependency directly on StardewUI.dll (they're all public)
#

Sprites are meant to be used with RegisterSprites, the framework has a great system in place for that which supports its own hot reload along with the views. (Examples are in the test mod)

#

I could make Edges convertible from Rectangle, given how prevalent it is, though I'm not super keen on it because types that look similar but have wildly different semantics can become footguns.

lucid iron
#

ill rewrite with string edges and the register sprites thing

teal bridge
#

I may as well add the tuple versions now (I thought I already did, must have forgotten).

rancid temple
lucid iron
#

another thing i attempted to do is assign bg sprite on a button, but looks like that one isnt props but rather constructor arguments

teal bridge
#

Ah, I'll have to change that, I changed most constructor dependencies over to properties but missed that one.

lucid iron
#

lastly, could you/how do you call method that has args for binding

#

like margin={^GetMargin(ThisTab)}

teal bridge
#

You can't.

lucid iron
#

the reason why it's here instead of just on my tab model is bc margin is dependent on whether a tab is the current one, and current has to go on the context

teal bridge
#

Method calls aren't supported in binding expressions (and won't be). They are only allowed in events.

#

Allowing arbitrary method calls in every frame would not be a good idea.

lucid iron
#

monS yea fair

#

will just do assign then

teal bridge
#

What you really want to do for something like this is have a separate object for each tab.

lucid iron
#

yea i did that

teal bridge
#

Each tab defines its own ID, its own sprite, and its own margin.
(Actually, the better way would probably to just have a Tab widget.)

lucid iron
#
<lane orientation="horizontal" horizontal-content-alignment="start">
    <lane orientation="vertical" horizontal-content-alignment="start">
        <frame *repeat={AllTabs} text={Label} click=|^ChangeTab(ThisTab)| />
    </lane>
    <frame *switch={CurrentTab} layout="200px 200px" background={@Mods/StardewUI/Sprites/ControlBorder} margin="0,16,0,0" padding="32,24">
        <label *repeat={AllTabs} *case={ThisTab} text={Text} />
    </frame>
</lane>
#

public List<SimpleTabModel> AllTabs (could prob be array instead)

teal bridge
#

When you use the INPC source generator, you can have a derived property and it should propagate; like, you can write string Margin => IsActive ? "lower margin" : "normal margin"

#

Ok, I just pushed a quick update to allow using tuple types and Point for edges. So you should be able to declare a property as either Tuple<int, int, int, int> or (int left, int top, int right, int bottom). You can also use Tuple<int, int> or Point if you only need to specify horizontal + vertical edges, or a single int if it's the same for all edges. Basically, same as the constructor overloads.

#

I think it is a useful exercise to see how this behaves and how easy it is to implement with regular markup, though tabs are prevalent enough in game UI that long-term there should probably just be a tab widget that goes into the core library and is usable as <tab>.

#

(btw, if the deep dives are bothering anyone here, let me know and I'll be happy to take it to a thread)

brave fable
#

it's surely not a bother, but you could thread it up anyway for bug reports and testing later on

lucid iron
#

yea and if ppl send examples they can all go in 1 place

velvet narwhal
#

it'd definitely be nice to go back into kyuuchan_nod2 like if i have a question for later and it's already answered, i don't have to feel like a problem

teal bridge
#

StardewUI - Q&A, bugs, feature requests

#

Ok, thread is open. I'll still answer questions in this channel, at least until/unless anyone complains, but we can use the thread for any long-running discussions or nitty gritty details.

#

Huh. I would have thought I could pin a message in my own thread, but apparently not.

velvet narwhal
#

junimo only feature, i don't know if pins can be delegated to role in threads SDVpufferthinkblob
they in fact, cannot be delegated to role, cause that's a "manage messages" kinda thing SDVpufferweary

teal bridge
#

Yeah, guess it's a Discord thing, you can only set individual/role permissions on a channel, or give users/roles the right to manage all threads in a channel. Lame, Discord.

#

(Thanks for the pin, Pathos.)

tender bloom
#

yes, it's a discord quirk

#

it can be managed by hand but I don't know a way to do it automatically

velvet narwhal
#

it's kind of hard to determine that cause like, we could potentially put in a request to a bot and have it handled that way, but then it's like will it be abused? will that one person ruin it for the rest of us? 😂 hard to tell

calm nebula
teal bridge
silver pelican
#

is there any console commands to know where customNPC is? it isnt appearing in the schedule I created sooo idk if he's like off the map or smth xd

uncut viper
#

debug whereis npcname

ocean sailBOT
#

@uncut viper You leveled up to Rancher. That's level 250. Woot!

uncut viper
#

thanks

silver pelican
velvet narwhal
#

i'm definitely gonna be disoriented for awhile now that button is purple and i already have a hard time seeing that color against discord's grey aSDVpufferrise

teal bridge
#

Oh noes, does Button have to go orange now that blue is no longer possible?

uncut viper
#

its a perfectly fine deep periwinkle

#

purple is my endgame!

teal bridge
#

Hmmm, that's not what you told us last week. I sense rationalization at work here.

uncut viper
#

(i dont like blue either i just like orange less)

velvet narwhal
#

button's going for the shorts

uncut viper
#

im pretty sure purple has always been my endgame bc my taste in colours has not changed in years

#

either way, orange aint for me

#

whats the point when i cant even pin my own thread messages

humble timber
#

rip

teal bridge
#

Do you have any threads?

lucid iron
#

ourple button

uncut viper
#

i have a thread that was made for me, but only mod authors can actually make threads

lucid iron
#

now u can change your icon to fern

uncut viper
#

maybe w hen i make a frieren themed mod

velvet narwhal
teal bridge
#

So sure, you can't pin messages, but at least you could make threads!

silver pelican
#

if the schedule is somewhat like
"spring": "610 Custom_SunnyfieldShops 43 0 2/650 Custom_SunnyfieldShops 44 25 2", does he follow that schedule for the entire spring?

uncut viper
#

chu made my first thread so why do that when ive got a perfectly good thread jockey right there /j

uncut viper
#

so, he will if you add no other schedules

silver pelican
#

ahhh! that works for today HAHAHA

teal bridge
#

Does my logo offend you as an orange-hater?

uncut viper
#

i dont recall if that the only required schedule you need or not for an npc

silver pelican
#

ill add more schedules when i have more brain juice xd

uncut viper
#

no they actually look quite nice when put together like that

teal bridge
#

It's a lot of orange.

silver pelican
#

but it looks organized to look at

velvet narwhal
#

SDVpufferpain oh the schedule uses a goto IL

teal bridge
#

Embrace the goto. I do.

velvet narwhal
#

ah the wiki has it in order of operations that's nice SDVpufferclueless
and maybe once i've stopped fumbling with the simplest of things for general c# i'll be not-so-afraid of staring at the d.il/goto

teal bridge
#

goto gets a bad rap, but as the saying goes, "you can write FORTRAN in any language".

brittle pasture
#

C# doesn't have labeled loops yet right

#

since that's like 99% of my goto use case

teal bridge
#

You mean break label?

brittle pasture
#

something like that

#

(though I usually just rewrite the code to remove the need for a goto)

velvet narwhal
#

oh a nested loop SDVpufferpain

lucid iron
#

if its the decompile then the goto might just be a mangled switch case

teal bridge
brittle pasture
lucid iron
#

there was one big switch in GameLocation that exploded in 1.6.9

lucid iron
#

*exploded = ilspy stopped comprehending it as a switch

uncut viper
#

(you guys are making me feel colourblind bc this doesnt even look purple to me it still looks blue)

velvet narwhal
#

oh, no the goto was inbetween the npc schedules between if cases and for loops SDVpufferpain

teal bridge
lucid iron
#

oh thats what ur supposed to do ukimasu2

brittle pasture
#

hmm that's the 1% use case I was thinking of

#

probably bigger than 1%

lucid iron
#

i been wondering about that cus C# didnt let me just

case 1:
  // more stuff
case 2:
  // base stuff
#

as i would in C

brittle pasture
#

you totally can?

teal bridge
brittle pasture
#

that's definitely purple, as someone who made their entire desktop environment purple and might be slightly obsessed with the color

teal bridge
#

Oh, that's the "read" color, true that the regular is 7773f3.

uncut viper
#

i will continue to place myself in the blue camp

teal bridge
#

Well, according to color-pedia (whatever that is), #7773f3 is actually a "medium slate blue".

lucid iron
#

but thats cus i was supposed to use goto the whole tiem

brittle pasture
teal bridge
#

But whatev, it's purple.

calm nebula
lucid iron
calm nebula
#

maybe that's the wrong issue, I can't find the absolute right one

brittle pasture
#

in my defense you can do it in JS, C/C++ and some other langs

calm nebula
#

so when the decompiler can't put it back together

#

yeah no autofallthrough is bad

#

although I would liek a fallthrough operator

brittle pasture
#

(I know, but like all good footguns they have their uses when not aimed at foot)

lucid iron
#

maybe if they just make continue; mean fallthrough

#

zero confusion trust

uncut viper
#

ive also been under the assumption this whole time that you could do that bc of the stuff i do with js

#

so good to know

teal bridge
#

C# has local functions which often makes a local goto unnecessary, but even then there are cases where it's not feasible (ref struct strikes again).

lucid iron
#

say anyone know how to make a map wall valid for doors but invalid for wallpaper

calm nebula
#

just don't put drywall up

velvet narwhal
#

oh it'd need the decoratblelocation, yeah?

lucid iron
#

yea it does have that, thanks to PIF

teal bridge
#

(And just to beat the dead horse one more time, anyone who's shaken up by goto clearly has not seen comefrom.)

velvet narwhal
#

SDVpufferthinkblob can that even be.... assigned from content patcher.....

lucid iron
#

no like, PIF makes all PIF rooms decoratable

#

thats just how it work

calm nebula
#

it occurs to me that it's weird af how like

#

video game doors work

lucid iron
#

my farm cave that i am also making into a pif has this spot where i normally put a mine cart

velvet narwhal
#

i don't know how the wallid thing works

lucid iron
#

but since its pif it'd be nice if ppl could also turn off the minecart and put a door there

calm nebula
patent lanceBOT
#

hopefully you don't mind if I end up a few hours off on that one, been a long day and I may doze off. (#6287927) (4d | <t:1728707135>)

ocean sailBOT
#

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 48 C# mods and 76 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

calm nebula
#

thank you.

#

I will cry

velvet narwhal
#

would setting WallID to none do anything? SDVpufferthink

calm nebula
#

Also note that Pathos says that the information you want is in the dynamicly generated class LocalMultiplayer.StaticVarHolderType

brittle pasture
lucid iron
#

ill try ig Bolb

#

do walls have to be 3 tiles high

velvet narwhal
#

artistically, no, to match the rest of the game, probably

teal bridge
#

LocalMultiplayer.StaticVarHolderType

I count at least 3 things wrong with that name.

uncut viper
#

i think wall furniture only assumes 3 tall?

#

emphasis on think and not know

lucid iron
#

3 tall should be managable with this spot

calm nebula
#

the signs are (a) map reload

#

when (b) player is in map

#

and (c) in splitscreen

tender bloom
#

Wall furniture doesn’t like being weird sizes

velvet narwhal
brittle pasture
calm nebula
brittle pasture
uncut viper
#

oh thats the conversation i was vaguely thinking of, nice

brittle pasture
#

yep lol

calm nebula
#

where is this even stored.

#

the long and short of it is this. Whenever SMAPI edits a map, in splitscreen, the IDisplayDevice only gets new tilesheet references for one instance, not both

#

SMAPI needs to update tilesheet instances for every player on that map.

#

so how.

#

wait I'mmmm a dumblass

lucid iron
#

hm the wallid prop immediately errors LilyDerp

#

i guess its due to lack of wall_and_floors sheet

[game] loadLocationsTask failed with an exception
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at StardewValley.Locations.DecoratableLocation.UpdateWallpaper(String wallpaperId) in D:\GitlabRunner\builds\Gq5qA5P4\1\ConcernedApe\stardewvalley\Farmer\Farmer\Locations\DecoratableLocation.cs:line 682
lucid iron
#

yea i cant get this to work at all

#

game wall detection 3 arcane 5 me

dusty scarab
#

well, it's awaiting for Nexus to publish it, but the Corncrow lives!

silver pelican
#

uhh.. he isnt moving or following his schedule. im confusedd

content.json

{
      "LogName": "Schedule",
      "Action": "Load",
      "Target": "Characters/schedules/Seha",
      "FromFile": "assets/schedule.json"
    },

schedule

// 0 up, 1 right, 2 down, 3 left
{
    "Mon": "0620 Custom_SunnyfieldShops 24 56 1/0650 Custom_SunnyfieldShops 46 26 2",
    "Tue": "0630 Custom_SunnyfieldShops 24 56 1/0700 Custom_SunnyfieldShops 46 26 2",
    "spring": "0620 Custom_SunnyfieldShops 24 56 1/0650 Custom_SunnyfieldShops 46 26 2\"Strings\\schedules\\Seha:spring.000\""
}

in his disposition, his home is

"Home": [ 
               {
                 "Id": "Custom_SunnyfieldShops",
                 "Location": "Custom_SunnyfieldShops",
                 "Tile": {
                   "X": 11,
                   "Y": 49
                 },
                 "Direction": "down"
               }
            ]
```  so he's just here at his home and ignores his schedule xd
uncut viper
#

does he have gift tastes

silver pelican
#

nay

uncut viper
#

add gift tastes

silver pelican
#

oggeh xdd ill add some random shinanigans taste . 1 sec xd

dusty scarab
unique sigil
dusty scarab
#

yes please :D

unique sigil
#

okay, write up a description and i'll post it there SDVpufferthumbsup

silver pelican
# uncut viper add gift tastes

thanks, it worked! i also went on map and found out that something was blocking the destination in the buildings layer so maybe that also did it? do npcs figure out a passable path to arrive at a destination if this happens?

dusty scarab
#

thank you for posting it for me :3

frigid hollow
#

slightly unclear description though, is it unpredictable weather report or can rain actually turn into storm midday or what 🤔

fossil osprey
#

Oh wow, guess I should have check nexus first ^^ That's to test, indeed it's not clear if the weather is changing

frigid hollow
#

it did get uploaded like hours after y ou asked SDVkrobusgiggle

fossil osprey
#

For me it says yesterday, and I asked yesterday, so maybe it was around the same time ^^

#

Yeah the first post had been posted before my question, so it was published a bit before ^^

lucid iron
#

@rose forge mushymato.MMAP_AnimalSpot for u

#

@merry rampart mushymato.MMAP_ShowConstruct for u

velvet narwhal
glad rampart
#

Hi, I'm trying to edit the entry in NPC_Data "Data/Characters", but I run into the issue that when I add a "When" condition to it, it stops working, even if that same When condition works for other entries. Is this an issue with NPC Data in specific? Do I need a different syntax for conditions for it? Additionally, I wanted to poke around at the vanilla npc data xnb to get a better grasp at how it's supposed to format, but my XNBExtract tool doesn't seem to work for 1.6 xnbs anymore (still works for xnbs containing sprite data, but not for data entry ones)

velvet narwhal
#

!unpack

ocean sailBOT
#

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

velvet narwhal
#
  1. if you're doing a 'when' condition, i assume it's because you want your npc to be 'unlocked' at a specific time
glad rampart
#

kind of, he's meant to disappear for an indefinite time until you do a specific event, and then reappear again

#

so i'm setting his spawn point out of bounds to achieve this

velvet narwhal
#

there's things like setinvisible, you can also set the schedule

lucid mulch
#

deleting the concept of the npc is a bad way of doing that, and the when clause will be failing at key points because it would need save data for the token to be "ready"

#

invisible would be the vanilla way of doing that usecase (which is what Elliot uses when he goes away for a week for his book tour or whatever)

glad rampart
#

I had forgotten about Elliot

velvet narwhal
#

if you're wanting
npc to be there -> disappears after event -> reappears again after seeing new event, you can change that around by doing a setinvisible, or you can have your own little warp room

#

where you can set a when patch on the schedule instead, to force that schedule

lucid mulch
#

the paranoid uses both at the same time

velvet narwhal
#

(looks at aba who's learning c# to suggest a pr to npc locations/uif2 to hide npcs who specifically have the setinvisible tag)

glad rampart
#

hmm... where's the entry for elliot's event that sets him invisible? I couldn't find it in his xnb or the beach

rancid temple
#

I believe Aba sent one of those in already

lucid mulch
#

its a marriage one, so might be the farmhouse, not sure

velvet narwhal
#

what is that, beach?

lucid iron
#

I thought npc map loc is closed source

lucid mulch
rancid temple
#

The other I think is being rewritten so it is unlikely to be approved even if sent in

lucid iron
#

Well maybe if u ask abs0rbed or whoever the current dev is when they show up here

#

It seems relatively ez to throw in

lucid mulch
#

pathos will hopefully get around to seeing the PR's eventually, but between all the other mods, smapi itself and working on vanilla, not much time for the outer perimeter of mod support

rancid temple
#

Maybe during the updating to 1.6.9

oak dragon
#

Heeey! One small question plz. how do I erase a menu when I've already drawn it?The way I know is to redraw the game, but I don't know how to do it

lucid iron
#

If you control the draw just don't draw it next frame

velvet narwhal
#

addWorldState elliottGone

lucid iron
#

It's hard to answer without knowing how deep in weeds you are with the menu

oak dragon
velvet narwhal
#

elliott gets a special case, so you'll have to do a trigger action

lucid iron
#

I don't recall that being how it works Thqnkqng

#

Do you have code on some git repo to show?

glad rampart
velvet narwhal
oak dragon
lucid iron
#

Yeah I mean, the normal way is to just not draw it?

#

For example the little red box on the toolbar is drawn at the index of selected tool/item at every frame

#

It doesn't stick around when u move tool but there's no explicit "undraw this" needed

#

This is why I am unsure what you are doing exactly to have the menu stick around without draws

#

Did you patch spritebatch itself or something

oak dragon
#

oh maybe I've made some mistakes that cause misunderstanding. I'm going to check my code

#

I think ur right I never "undraw" anything

#

thank u

#

The problem was solved at once I did a "drawbox" before everything was drew

#

Maybe it's the code I left behind while testing it a long, long time ago lol

vernal crest
#

Yes Pathos was happy to have my PR for NPC Map Locations but he did warn me it will be a while before he looks at it. I don't mind!

vernal crest
glad rampart
vernal crest
#

Cool in that case I do recommend making your NPC invisible it's very easy and you don't have to deal with more schedules (which are the finicky, awful bits of an NPC).

glad rampart
#

One other inquiry I had is, how do I make an "Or" condition with "When"? Since by default it runs on a "And" basis

#

Basically I want a cutscene to only trigger whether you've seen either one of two or multiple cutscenes

velvet narwhal
#

oh

#

Usage: /e <event ID> means has seen that event, then /e <event ID> <event ID> means has seen EITHER events, and /e <event ID>/e <event ID> means has seen BOTH events.

glad rampart
#

damn, I feel silly now

#

thanks!

velvet narwhal
#

no problem SDVpufferclueless

#

there is this:

#

!npc

ocean sailBOT
#
Creating a Custom NPC

Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:

glad rampart
#

I feel like I'm getting something wrong SDVpufferclueless

velvet narwhal
#

ah yeah you should make your trigger actions unique

#

since you have it repeating, i would only make it 1 day at a time for the setinvisible

#

and the markactionapplied refers to the trigger action's entry identity

glad rampart
#

I suppose if I set the value to 0 it'd be indefinite right?

vernal crest
#

Why do you feel like you're getting something wrong? Is he not going invisible?

glad rampart
#

he's not

#

I also tried calling them in an event script using /action Missing, /action Found

vernal crest
#

(Also John is a very generic internal name for an NPC, so I strongly recommend you make that more unique)

glad rampart
#

(It was a placeholder for this particular screenshot, along with the IDs)

vernal crest
#

(So that we can't see your IDs and NPC name?)

glad rampart
#

(Correct)

velvet narwhal
#

in terms of the markactionapplied: "MarkActionApplied Current {{ModId}}_DayEndClearer false" the <id> is pointing at my trigger action's entry id: "{{ModId}}_DayEndClearer"

vernal crest
#

(Okay...)

#

MarkActionApplied shouldn't matter much here for whether or not this is working.

#

That's how I have mine set up and they work just fine.

velvet narwhal
#

oh really SDVpufferthinkblob

vernal crest
#

Yeah - not to mention that if they're testing the first time this happens per save, markactionapplied wouldn't matter if it was true either

#

It only matters when it come time to try to apply the action again

velvet narwhal
#

mm, are conditions allowed to be syntaxed like that

vernal crest
#

The reason it's incorrect is that you can't write conditions like that

glad rampart
vernal crest
#

You'd need this:

"Condition": "PLAYER_HAS_SEEN_EVENT Host 87880005, !PLAYER_HAS_SEEN_EVENT Host 87880006"
#

THough if you want this to happen per person, you'd need to specify Current, not Host

#

Don't know how that works in MP for the disappearing. Do they disappear for one player and not another? I don't know, I don't test MP lol

velvet narwhal
#

same, atra doesn't know if the farmhand can call invisible either way

#

i could test it while i test that graphicsdriver failure but

vernal crest
#

I don't care enough about MP lol

#

Sorry MP players

glad rampart
#

friends? what are those?

velvet narwhal
#

same, someone else is gonna have to pr my karaoke framework for mp support because it boggles my mind

vernal crest
#

People to spend time with when I am not playing video games haha

#

Social interaction is too tiring to want it in my video gaming

velvet narwhal
#

just the [] of reading that pathos gave me about the shadow realm left me in confusion

vernal crest
#

I used to enjoy MP games once...but everything changed when the Fatigue Nation attacked

velvet narwhal
#

y'know what

#

i think i'm gonna not make heart-related dialogue for that expansion, i look at it already and i'm like, "i'm already kneecapping myself with this backstory questions framework"

unique sigil
#

wanted to make a summit subarea for my hilltop farm but,,, it wouldnt make sense with the backwoods warps,,,

#

then again a random ass beach in your farm also doesnt make sense geographically

velvet narwhal
#

i mean my mini farm has a whole cove as a cave

unique sigil
#

heres my idea: a summit area on the top of the .tmx, then a transition like in my secret grove map except it's vertical

#

i could put the forest and bus stop warps easily but where the hell do i put the backwoods warp though lmao

velvet narwhal
#

SDVpufferthinkblob make the summit area sort of northwestern angular?

#

and then have the hole to the backwoods next to it?

unique sigil
#

and then i load the quarry area through EditData on Data/Locations bc i dont want that quarry on the middle of the map like in vanilla hilltop

#

and then i,,, make a custom farm cave again,, perhaps??

#

wow this is a lot to do

unique sigil
velvet narwhal
#

.q 6240

patent lanceBOT
#
#6240

@velvet narwhal #making-mods-art message Honestly I think you do actually have a special talent for ~~derailing ~~giving inspiration and motivation cause last time I ended up releasing a whole mod for 1000+ wallpapers after you asked one innocent question! :bongo_cat_heart: :VMVLmaoDog:

velvet narwhal
unique sigil
#

why is there a command for this 😭

#

thanks a lot avi i'll start sketching SDVkrobusgiggle

velvet narwhal
#

because i am a Problem ™️

unique sigil
#

i was actually going to block off the summit area behind a boulder so you'd need some tool upgrades before you can access it, but i can compromise

velvet narwhal
#

SDVpufferthinkblob depending on how you're gonna do it, you can probably still do it, but just make it like, 4 boulders

unique sigil
#

i dont want to block off the quarry, but i will add a minecart system to warp around the farm easier

#

oh man this really is a LOT of work to do. i better get to it asap

velvet narwhal
#

SDVpufferclueless removing heart dialogue cut down my default.json by 800 lines jesus christ