#making-mods-general
1 messages · Page 55 of 1
It is when realistically C# is a foreign language /lh
It took me about two hours from "I don't know c#" to my first harmony mod
Yes but work is in the way, plus I suffer from perfectionism and will throw away everything as the first seemingly unsolvable error
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??"
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
}
},
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
I'll try now I haven't done modding on Stardew for 5 years I'm catching up)
This actually worked, thanks And is there a library of events (When) somewhere? I need one location to be unlocked when the volcano is open, the second when the dangerous mines are unlocked
would probably be in Data/Events somewhere
Thanks, friend!
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
I don't know if there is a condition for the activated altar of dangerous mines, but this would suit me
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
Now I'll start checking what will come out of this.
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
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
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
is the danger in the deep the one that gives the player the shrine?
danger in the deep is the mines one, skull cavern invasion is the skull cavern one
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.
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
ah yeah i think that's why i made it a mail flag because i only wanted it to check once
So?
"When": {
"Condition": "WORLD_STATE_FIELD MinesDifficulty 1"
},
or maybe
PLAYER_SPECIAL_ORDER_RULE_ACTIVE <player> <rule id>
with the ruleID being
MINE_HARD
SC_HARD```
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
i think
"HasVisitedLocation": "Caldera", Is work
Now I'll check the conditions of the dangerous mines
queries always throw me for a loop when i have to nest them into 'when'
cough (WORLD_STATE_FIELD is a GSQ, and regardless of the name similarities, CP query does not accept GSQs)
alright well you're gonna have to use my mailflag trick
i mean u dont have to use When if you dont want to 
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
you know this would've been a great joke if you were talking about c#
oh i read when as while.... nvm you're gonna need better material
my only goto ptsd is the phone service, i'll pass /lh
in my defence your honour, 'when' is perfectly legal at my workplace in typescript
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"
HasActiveQuest - is this only executed when the quest is active?
yeah, unsure how that handles special orders though
Is there a condition for the completed order?
Okay, I'll use "HasVisitedLocation": "QiNutRoom" it will be easier) Thanks everyone for your help!
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
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
I mean, it's not like it's Exclusive priority, it should do load fine
I'll try edit image though ty
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?
since it's not Exclusive, it just doesn't get to do anything
that's not how it's supposed to work
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
well the latter assumption would explain this
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
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
i think Load is when you are like
"this is my asset im making it"
edit for everything else
will editimage even work on making the trees 'larger'? i was under the assumption that trees are set to a specific size, which is why https://www.nexusmods.com/stardewvalley/mods/27123 exists
Cool New Mod
oh maybe you should just leave the vanilla tree sprites alone
why would I do that
load your stuff to your own target
yeah, tree size framework has a very specific direction
literally the entire point of what im doing is making oaks bigger
so things don't explod if another mod tries to edit the vanilla tree sprite for w/e reason
i dont want to make my own tree
but you did make your own textures i thought
thats what priority Late + 500 is for
oh no i copypasted from simple foliage bigger tree. I am not going to publish this
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
yea as long as you provide the vanilla tree ids
which I did
the way it works is that you are edit the mod's custom asset EnderTedi.TreeSizeFramework/WildTreeData
successfully, since my oaks have been dutifully bugging out ever since I started testing this
supplying all the textures there
you wont believe what I did
https://github.com/Aviroen/Mycology/blob/ff58c267a1ae0672d81712ae2f1ef252fa5e1353/Trees.json#L279 yeah, i don't actively load overtop of the originals, i call my specific textures in the tree size framework edit
and so it really doesnt matter if you use a vanilla texture target or some rando thing
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
u might have hit the editimage limitation, cant extend image sideways
i didnt know you desire bigger texture when i said it oops
(Avoiding this sort of caveat is why I tried loading in the first place)
ok new texture target time ty for the idea
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)
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
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
that's a pretty tree!
oh this looks like a fun concept
I'd drop the corn seeds
can u switch oak resin for pine sap
pls my kegs...
The corn seeds you can buy directly, which makes them potentially just money
yeah ^
I think oak resin makes it an interesting tradeoff against the kegs
that's what I was thinking about, yeah
the corn and the tree sap (whichever) are effort which is more fun
i also feel like hay should have a spot
its a big ol scarecrow that boy can fit so much hay
youre making it out of a scarecrow already
(you can buy hay too ofc, so this is a theme suggest not a balance one)
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
youd need cloth then too
this has promise, but it is already requiring a Deluxe Scarecrow to create, so it's already got that part down, I think
yall why the hell does this happen
it does, i only have a choker equipped
check that you dont have CP oversized sleeves installed
removing it does nothing
you supply tree and stump textures separately i think
but ender is here so direct questions directly to the author 
which?
i do have a folder thats just [cp] sleeves
?
disable that and try again
cp stuff just glues sleeves on your farmer, you want [fs] sleeve packs
the only mods im seeing are lambeerons and sbs oversized sleeves
you dont need CP clothes packs if you're using fashion sense
you need fashion sense packs
ah gotcha gotcha
~~you also may or may not want the automatic clothes changing mod https://www.nexusmods.com/stardewvalley/mods/19503~~
also youre in the wrong channel
lmao my bad i forgot to switch since yesterday
ok im going to try just ignoring the rest of it and overloading the tree texture directly wish me luck lads (gender neutral)
do i have to buy the game on steam to be able to make a mod or could i just do it without
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
what platform are you hoping to use the mod on 
im not gonna use it i just wanna like put it on gamebanana or whatever people use to mod on pc
you can just release pngs with open permissions
Why would you make a mod for a game if you aren't going to play the game?
/gen
i have it on switch i just don’t wanna rebuy it on pc just to make a mod😭
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
Ohh that makes sense! Well, considering mods aren't available on switch, and since you'll probably want to access the code...it'd be pretty hard to make a mod without the steam version? I think, anyway
ah
you can literally make a mod in notepad++
the problem is using the mod
I’ve never modded a game before i just can do pixel art 😭
yea there's a bunch of hoops to jump through for switch modding
you dont need steam to mod sdv
oh cool
in your situation maybe collab with someone?
have them help u with the content patcher + testing portion
I understand that it'd be possible to mod without access to the code directly, but wouldn't it be a bit difficult?
switch modding is so complicated i don’t even wanna go anywhere near it 😭
i mean it can’t be that hard to replace a few pngs right?
The first time I made a mod I literally only consulted the wiki
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
(it literally had example code for what I wanted to do lol)
it's not hard to do texture replace, but it probably helps to know what the original texture's dimensions are
True! I forgot you just wanted to recolour/texture
yea im not gonna even think about touching switch modding until it has the same fate as the 3ds
and even then
imagine if you make a beautiful retexure of pufferfish, but it's 42x28 and hard to put into game without additional work 
nothing stops u from going "here's some pngs they r CC licensed do what you want"
to pixel mod you want
- a text editor
- access to the unpacked game files for reference
- ability to launch sdv on pc (and then you need to install smapi and content patcher) to test what you made
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
ok so it’s not necessarily required but it’s an extremely good idea to have it
the only requirement is a text editor and the actual pngs
you can ask someone for texture size
id help, for example
collab 
mhm
I probably would do at most 1 crackers - mastery is not that big a blocker, but the crackers are rare and valuable. 1 is enough to gate it behind mastery
oh yeah, definitely only 1 cracker
People here are very friendly
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"
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
If you ask many times, I mean
but wasn't sure if that would make it an 'un-casual friendly' sort of end game item
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
I'm a ConcernedApe shill oooooo you wanna buy Stardew on pc so badlyyy 
/silly
(unless you ask me in the DMs)
(I would just tell you)
ooooo im gonna buy it on Xbox and playstation too despite not having either
Perfect 
modding stardew valley is so great. you want it on pc. totally
Nothing compares to seeing the big block of red text disappear and see your mod working
nothing compares to the feeling of absolute power. total control over these witless pixels. complete dominion 🔮

im gonna spend so much time and effort on a stupid inside joke and it’s gonna be worth it
the quality of life mods alone make it worth getting on PC, imo
I can't live without seasonal cute characters
for some, having it on switch is the quality of life 😌
until you see the stuff on 1.6
I’ve been starved from 1.6 content for months i need it 😭
Next month!
also the mod im making is just replacing sebastian with my English teacher because he dresses like a stardew character
that’s it😭
will it be at parity with pc 's 1.6.9 update though 
has he only worn 1 single outfit for the last 8 years
Define parity here
What does the word "parity" mean
please, i'm a thesaurus not a dictionary
no but every outfit he wears looks like a stardew outfit
im just having a good time here
honestly the thing that started this was he was wearing light blue flannel shirt and dark green pants with dress shoes
What is a stardew outfit 
you cant tell me that SOMEBODY ingame wouldn’t wear that
shane fit
exactly
JESUS
pretty sure it means 'on par with', or 'the same as' in this instance
what did those 104 disabled mods do 😭
prolly random AT packs or whateva
parity here being feature-complete, not lacking the cool fixes and changes from the last few months
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
yes
ah
theres a whole ecosystem around it
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
the bed extends, too 
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
does it eventually just become that one Charlie and the chocolate factory scene
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)
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)
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
good luck!
Personally, I'm fine with the Oak Resin FWIW - yes it's used in kegs, but that's actually a good thing, because by that point in the game I've already spammed hundreds of oak trees and already have a reliable source of oak resin, whereas if it were pine tar I'd have to put up and tap a whole pine forest just to craft 1 item.
(Also congratulations on getting it to work)
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
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)
Doesn't really fit with the item description, though, does it? It's a corn crow, not a... glowcrow.
add a corn box
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
I can tell you how to crop it out!
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?
Just open it in GIMP or Libresprite and select it and make a new sprite of it?
it means programmatically command the game to take the texture from that file and edit it into the asset you want
Yeah, I use PDN but hell, even MSPaint works here.
the beauty of compatibility
main issue is my pixel mod won't open the file unless I buy the premium version, otherwise I'd be able to get it myself XD
what file
PDN and GIMP are free.
nah, the png file
Libresprite is also free and is basically just Aseprite
This isn't really arcane stuff - open in editor -> rectangle select -> copy and paste into new image.
that's what I'm trying right now, yeah
also you dont have to do that as i said
just do it programmatically
EditImage FromArea
He's not editing the existing sprite, this is a new item.
I know, mostly just trying to work within the limits of my pixel art program without having to download a bunch of new stuff
so 1. You load an empty transparent asset the size you need.
2. You EditImage the scarecrow on it
- 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)
Only problem with that is then you're including the entire craftables image if you aren't going to edit it to remove it
?
And you should avoid including the entirety of vanilla files if you can
If you can already edit the image, there's no reason to load a transparent and then edit on top of that
oh right i dont know if what i want works
we're making a new asset
Using FromArea is fine, it won't copy the entire craftables image, but yeah, the transparent image step seems unnecessary.
Just make a new image and load it?
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
You can't FromFile an internal game asset though, it's based in your file
photopea worked like a charm! now I have the BigCraftables png in two pieces that I can open and copy-paste from as needed!
just crop it to the scarecrow then :3
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.
well I really like retexturing my everything
big craftables and all
As long as they load the scarecrow they make then anyone can retexture it
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).
And honestly, even if they use InternalAssetKey, you can just change the target of the texture and recolor it that way
that's true!
whatever, what i wanted is depressingly technically impossible )=
It's not technically impossible, just overkill for a problem this simple.
Unless you want to make it a C# mod lol
for the sake of clarity, I am only going to be having my singular asset of the scarecrow itself be in the mod. I just wanted to be able to clip out the game's scarecrow to be able to see it clearly and use it as a visual model, as something to look off of
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.
I've given up on trying to provide the distinction
it is, I'm just not happy with it, so I wanted to go back to the source and see how it handled its shading and stuff
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?
(fwiw i thought it was charming, esp the lil blush)
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
TItem is a generic type
That's a generic parameter. https://harmony.pardeike.net/articles/patching-edgecases.html#generics
(Patching generics can be unpleasant; avoid it if you can.)
I don't remember does Pathos like random PR's or requested beforehand?
Ive been avoidant to the issue where possible, but I cant tell another way to check for changed hats without an update ticked event
can u patch onEquip
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.
Lol
jokes its a empty virtual
(Mostly kidding. I know he's busy and all.)
Is onEquip called for hats?
i mean ive always just opened a PR and maybe told pathos 
lmao yeah
but he is 1.6.9 grind rn so dont expect merge until after that
they are instructions for what to do so yes they are programs. they are just... very bad at it
They're just data storage
I wasn't going to belabor the point but... no, they aren't, they really aren't programs, they are data.
The instructions are handled on CP's side
hats unfortunately do not have a implemented version of onEquip, so that path is closed
meanwhile im getting somewhere!
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
but hmm i think spacecore has a equip system
programs lite, sure. still a subtype of programs
See this is why I gave up on trying to explain that they're just data lmao
Not programs lite, not programs at all. Data.
programs are data too
remind me in 17 hours to actually try that thing
For you? Of course, xxharvzbackxx (#6287437) (17h | <t:1728402043>)
Yes, but data are not programs.
Squares and rectangles
if i write down a recipe it is data. it is also a program - an algorithm for me in the kitchen to follow
spacechase0.SpaceCore/WearableData
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
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.
In that example, you would actually be the program
json mods are like. second order programs. programs for other programs to follow
its a feature that let you have buffs on wearable items
do you know what an algorithm is
so if thats what you want then i would prob go with using spacecore
do you need something fancier?
I plead the fifth, I'm gonna get myself into trouble if I keep answering
It really depends on what you want to do
Patching Item.OnEquip works
Just check for "is hat"
yo while you guys are at it serve me up a yappuccino
atra i thought u cant patch virtuals with no body
Not to mention this conversation is pretty off topic and not really going anywhere
The other thing you can do is (very careful)
(that is true and i apologize, i just love semantic arguments and philosophy especially when applied to computer science)
Wait, why wouldn't you be able to patch empty virtuals? Some inlining issue?
No body means abstract here
ah i see, thats my misconception then 
Listen in on the netfield events
(Virtual also generally disabled inlining, which is nice for modders.)
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.
Yup!
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
tfw you really want to start working in the loaded mod folder already to simplify testing But That's Terrible Practice )=
I make mods chaotically, I don't have a minimum mod pack
but what is your maximum mod pack
what's a minimum mod pack
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
ah, yeah... i dont have that either
stardrop tells you that :3
sorry for the ping
All good. I avoid mod managers
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
I have a lot of sub folders lol
thats a bit bigger a math problem,you might need to involve notepad
just gotta grep for number of files named manifest.json
oh good point
Many of my CP mods are deactivated because they're test mods so I wouldn't want to count them
well find and then grep iirc
how do you deactivate files while they're still in the mods folder?
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)
Thanks! I'll add that in the next set of beta updates.
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
could you post the log
https://smapi.io/log/3a4b5c0b0fcf435c9092f0a849cc16e4?Levels=warn~error~critical
Says it's missing the modData fields that are required for the drawing
Meh, this hot reloading feature requires you to edit the files deployed to mod folder for obvious reasons and I don't really plan on changing it. I'm fine just copying it back to the source file when done. It's not "bad practice" if the correct file still ends up in source control.
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.
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
hmm. this is interesting!
ok trying to widen the texture just crashed my whole game so its obviously not that
You can do a harmony_summary in the console to see all the patches, or have them do that anyways
oh nvm it was just trying to load from a nonexistent file, thanks typos
I mean from a log a random person sent me, they aren't replying to get them to run the command and I'm not able to replicate the issue
out of curiosity how do you do source control? mine looks like "ModName_versionnumber" zips next to the latest version containing folder and nothing else
the answer to that most of the time is git
for json mods???
why not?
werent you saying they were programs anyway? if so, then whats the difference
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
well, it does take more work to set up a git repo than zero work, that is true
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
now i want to do a poll, like on tumblr
assuming you dont diligently click 'delete older version' every time >.> (ok i do that only after versions that need urgent bugfixes, i keep the pre-major-feature versions)
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
mhm
i dont think nexus lets you actually delete delete files, just archive them, no?
yes it does
when you upload a replacement for an older version, there's an option to "remove" the version you are replacing
i mean maybe it saves them somewhere but you cant download files you deleted
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)
i use it but i leave file archive accessable
its just so that ppl need to click 1 more time to get there
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
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
I've just gotten used to cli enough that I don't notice any more
git has a user interface?
(without moderator intervention anyway)
that doesnt sound unlikely
literally me, my first Linux stack job was cli only. I have no idea how to use any git UI features in any ide
I could probably set up git and push to github with my eyes closed
most if not all feature heavy IDEs also have git stuff built in
you still can if you move it outside of the archive
i think VSCode does too?
GitHub Desktop perhaps?
Git itself doesn't, but there's a bunch of 3rd party guis for it (I assume you mean gui)
sure, consult the documentation here https://git-man-page-generator.lokaltog.net/
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
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??"
If you mean any user interface and not specifically guis then yes, it can be used via command line, otherwise how else would you use it
wow this is great docs
yea i did mean gui
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
i only know 3 things in vim and thats i, wq, and q!
git has a gui in visual studio and also at least one other
somehow, I figured out how to quit vim before figuring out how to change directories
i like command line best
I like that git command that florps my cromulent reverse-branches on alternate even seconds, very useful
hello, it me. i am also competent with plain vi, for similar reasons
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
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
my company buys us resharper and it literally turns vs from a Toyota to a AMG gwagon
can i make a wall valid for paintings/doors/etc but not for wallpaper
Sometimes it's a PITA, but the intellisense and autocomplete are really good
oh, i found it
And the debugger is wonderful
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
I have all that shit disabled
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
if anything Ubuntu makes you do lengthy maintenance every 6 months/2 years
Or is that also a Linux thing?
yee I'm on Ubuntu, but I got rid of gnome so fast and went to kde
Arch is mature enough that should just work once you install everything (breakages notwithstanding)
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
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
from digging into the frameworks, this is the only thing i see 
aesthetics r nice, but I gotta be able to be productive too
For now I just have wsl and windows
did someone mention rice: #programmers-off-topic message
brb new hyperfixation
(after seeing the empty space instead of oaks)
im getting the vibe that i should go to sleep
(its 3am)
I'll have a little look into that, thanks
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
StardewValley.TerrainFeatures.Grass.draw_PatchedBy<EpicBellyFlop45.MoreGrass__PeacefulEnd.AlternativeTextures>(Grass this, SpriteBatch spriteBatch) that line
made me go, "is this a framework problem?"
does AT let u do grass too
The chaos of AT patching every draw call in the game lol
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 
You can change the order with annotations if you need to
i have learned that clear glasses does not like previously saved games, crashed me 
as long as you make sure they actually used their uniqueid for their harmony identifier
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?"

I've had no problem enabling and disabling that mod.
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.
weird, it screamed at me for activating it on a previously loaded game
Like an actual error message specifically about a previously-loaded game? I didn't think it stored anything in the save data...
nah just smapi's screaming red text in the console
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.
yep, i hit the (1) hiccup where i can't replicate it
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.
oh wait
i put it in the smapi log
https://smapi.io/log/51d900a32fe3434d9223cb45640c1689
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.
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.
probably just a corruption, i was slowly adding in frameworks to see if i can replicate the error
That isn’t the ysual corrupted save error
It's complaining about an extra Y field on Character.Position, which... I don't even know how that happens.
That looks more like screwing with the serializer but yeah
Idk
Quests have descriptions
That’s normal
The trace happens to be in that quest but the proximate cause is apparently a serialized Vector2 with two (or more) Y attributes.
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?
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 
unless my mouse did a funny and i did, in fact, select it
highly plausible
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.
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
nope, it blinks and it gives me the fun bush noise if i try to select it
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.
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.
excellent branding
lol, what branding, you mean my amateur logo?
yes i enjoy it 
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?
*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.
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
Any attribute can be bound include margins, so however you do it the old-fashioned way should still be possible.
I just added a test case here to make sure that *case works inside a frame the way I think it should (and it does): https://github.com/focustense/StardewUI/blob/dev/FrameworkTests/BindingTests.cs#L486
To actually make the tabs interactive, you'll need to use events.
ah i was read source and thought it'd be like <switch> and <case> 
The unit tests should be a much better reference for all that, at least until the wikis are done.
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?
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
Assuming the tabs themselves are part of a repeater, your tab is probably going to look something like <image sprite={TabSprite} click=|^SelectTab(Id)| />
Or, if every tab is a snowflake: <image sprite={FooSprite} click=|SelectTab("foo")| />
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 
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)
also what do you want with custom categories that can't be achieved with context tags?
(and SpaceCore's 'category appearance override' feature)
Tbh, it's soley for aesthetic purposes
seconding context tags (my beloved) in this situation
in that case spacecore is perfect then
Yeah, I'll have a little look into spacecore, thanks
(or Calcifer)
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
Looks about right at a glance, but have to test it out.
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;
}
}
Nothing stands out to me as wrong there. Could easily be a bug at this point.
mystery
Well you haven't said what the problem is yet.
another thing is that, if my sml is critically wrong, the game locks up on error
atm i can see the menu but i cannot click either button
I take it this is with hot reload.
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
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.
it is on 1.6.9 if that makes a difference
Oh, you didn't implement INotifyPropertyChanged on the model, did you?
This is the INPC source generator I use in the unit tests, and that I'm going to generally recommend: https://github.com/canton7/PropertyChanged.SourceGenerator Because writing INPC boilerplate is no fun at all.
That way you just have to write lines like [Notify] private string tab.
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?
stardewui template question: is .sml pronounced 'smell' or 'small'
saturday might live
Woah, blue, you're not moldy...
You can Harmony postfix the relevant function to make your items passable
Damn I was worried that's what I'd need to do. Thanks
Tbh that's still preferrable to subclassing
Oh really?
Haha - it's short for "StarML" but yes I figured people might read it like "smol"
Thinking about it subclassing wouldn't be too bad in my case, I need to override the drawing too
if you subclass you need to register your class with SpaceCore's serializer, otherwise it blows up your save
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
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
Didn't 1.6 make serialisation more resilient? Or did that not include subclassing?
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;
}
}
I don't recall anything like that, but you must register your class with the save serializer regardless
Yeah makes sense, thanks 
Coincidentally, I just this second finished a unit test version here: https://gist.github.com/focustense/e10f1e7e286f48a4d67f4ff1e216b909
I think it's worthwhile to demonstrate that you can use non-string types. It's one of the more important features, being able to toss any string into an attribute and have it converted to the right type in event handlers and bindings.
it's new with most other data models I presume
Integer works too, anything with a supported string conversion.
(This refers to game classes.)
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
Ahh, thanks for the clarification
can projectiles be serialised. i'd like to have a missile aimed at the bed overnight
o_o
@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);
sadly i'm not all that blue either, but we make do 
i'd give it all for my dearly missed blueberry's hat(tm)
@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.
Can I be a special color too wait
I have a strong suspicion that you're using a type from the Shared Project. Since those types are separately compiled into your test mod, they aren't assignment-compatible with the framework types.
(to add on to this too bc i wasnt around earlier but it also came up between me n him recently and he said you technically dont need to, PRs are always w elcome, but discussing the PR first prevents the possibility of someone doing a PR that he would know from the start would not be accepted
hence one reason for the preference)
(or might not be accepted without specific considerations/implementation discussed, so the initial PR work might be wasted and need to be redone)
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
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.
i also made same mistek with Sprite looks like
Essentially, if you are writing a model and thinking about how to provide some framework type, in order of preference:
- Don't
- Use the
stringrepresentation instead - Add a type converter for a more conventional type like
Tuple - 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.
ill rewrite with string edges and the register sprites thing
I may as well add the tuple versions now (I thought I already did, must have forgotten).
This is a good thing to consider
another thing i attempted to do is assign bg sprite on a button, but looks like that one isnt props but rather constructor arguments
Ah, I'll have to change that, I changed most constructor dependencies over to properties but missed that one.
lastly, could you/how do you call method that has args for binding
like margin={^GetMargin(ThisTab)}
You can't.
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
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.
What you really want to do for something like this is have a separate object for each tab.
yea i did that
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.)
<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)
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)
it's surely not a bother, but you could thread it up anyway for bug reports and testing later on
yea and if ppl send examples they can all go in 1 place
it'd definitely be nice to go back into
like if i have a question for later and it's already answered, i don't have to feel like a problem
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.
junimo only feature, i don't know if pins can be delegated to role in threads 
they in fact, cannot be delegated to role, cause that's a "manage messages" kinda thing 
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.)
yes, it's a discord quirk
it can be managed by hand but I don't know a way to do it automatically
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
I suppose it's not really worth the effort it would take to set up such a system. I see 8 threads with recent activity? Which is not a whole lot.
#1272025932932055121 has way more of course, but that channel has its own moderators.
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
debug whereis npcname
@uncut viper You leveled up to Rancher. That's level 250. Woot!
thanks
thank uuu!


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 
Oh noes, does Button have to go orange now that blue is no longer possible?
Hmmm, that's not what you told us last week. I sense rationalization at work here.
(i dont like blue either i just like orange less)
button's going for the shorts
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
rip
Do you have any threads?
ourple button
i have a thread that was made for me, but only mod authors can actually make threads
now u can change your icon to fern
maybe w hen i make a frieren themed mod
#1275188689152114708 yeah the one thing i go to whenever i experience something weird
So sure, you can't pin messages, but at least you could make threads!
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?
chu made my first thread so why do that when ive got a perfectly good thread jockey right there /j
spring iirc is the default fallback only if theres nothing else more specific
so, he will if you add no other schedules
ahhh! that works for today HAHAHA
Does my logo offend you as an orange-hater?
i dont recall if that the only required schedule you need or not for an npc
ill add more schedules when i have more brain juice xd
no they actually look quite nice when put together like that
It's a lot of orange.
but it looks organized to look at
oh the schedule uses a goto IL
Embrace the goto. I do.
ah the wiki has it in order of operations that's nice 
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
goto gets a bad rap, but as the saying goes, "you can write FORTRAN in any language".
C# doesn't have labeled loops yet right
since that's like 99% of my goto use case
You mean break label?
something like that
(though I usually just rewrite the code to remove the need for a goto)
oh a nested loop 
if its the decompile then the goto might just be a mangled switch case
Nope, the official advice is to use a goto: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/jump-statements#the-goto-statement

there was one big switch in GameLocation that exploded in 1.6.9
oh hey, prpl
*exploded = ilspy stopped comprehending it as a switch
(you guys are making me feel colourblind bc this doesnt even look purple to me it still looks blue)
oh, no the goto was inbetween the npc schedules between if cases and for loops 
Gotos in switches have real uses, it's not necessarily a mangled decompile.
https://github.com/focustense/StardewUI/blob/dev/Framework/Grammar/Parser.cs#L134
There's really no better way to express the concept of "do this thing and also do the default thing".
oh thats what ur supposed to do 

i been wondering about that cus C# didnt let me just
case 1:
// more stuff
case 2:
// base stuff
as i would in C
you totally can?
It's totally purple. It's #9895ef AKA "portage".
(yes)
that's definitely purple, as someone who made their entire desktop environment purple and might be slightly obsessed with the color
Oh, that's the "read" color, true that the regular is 7773f3.
i will continue to place myself in the blue camp
Well, according to color-pedia (whatever that is), #7773f3 is actually a "medium slate blue".
but thats cus i was supposed to use goto the whole tiem
welp
puts one cent in the 'spread misinformation today' jar
But whatev, it's purple.
starting with sdk8, dotnet started emitting tries for switching over strings https://github.com/dotnet/roslyn/issues/56374
yey
maybe that's the wrong issue, I can't find the absolute right one
in my defense you can do it in JS, C/C++ and some other langs
so when the decompiler can't put it back together
yeah no autofallthrough is bad
although I would liek a fallthrough operator
(I know, but like all good footguns they have their uses when not aimed at foot)
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
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).
say anyone know how to make a map wall valid for doors but invalid for wallpaper
just don't put drywall up
oh it'd need the decoratblelocation, yeah?
yea it does have that, thanks to PIF
(And just to beat the dead horse one more time, anyone who's shaken up by goto clearly has not seen comefrom.)
can that even be.... assigned from content patcher.....
my farm cave that i am also making into a pif has this spot where i normally put a mine cart
i don't know how the wallid thing works
but since its pif it'd be nice if ppl could also turn off the minecart and put a door there
remind me in 4 days to cry over reflection. See https://smapi.io/log/e0b0d2bdc12742508d6a813f8e8a8683?Levels=trace~debug~info~warn~error~alert~critical&Page=14&PerPage=1000 , https://github.com/Pathoschild/SMAPI/blob/develop/src/SMAPI/Metadata/CoreAssetPropagator.cs#L689 only handling updating the tilesheet references in DisplayDevice for one player, etc.
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>)
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
would setting WallID to none do anything? 
Also note that Pathos says that the information you want is in the dynamicly generated class LocalMultiplayer.StaticVarHolderType
is that the same issue this user was having: #1293052464324411504 message
artistically, no, to match the rest of the game, probably
LocalMultiplayer.StaticVarHolderType
I count at least 3 things wrong with that name.
3 tall should be managable with this spot
I think so
the signs are (a) map reload
when (b) player is in map
and (c) in splitscreen
That sounds right
Wall furniture doesn’t like being weird sizes

for the moment anything the user can do?
@next plaza you will know this best. How do you get another player's static instance variable.
cry?
I was trying to find past discussions on this issue: #making-mods-general message
oh thats the conversation i was vaguely thinking of, nice
yep lol
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
hm the wallid prop immediately errors 
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
well, it's awaiting for Nexus to publish it, but the Corncrow lives!
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
does he have gift tastes
nay
add gift tastes
oggeh xdd ill add some random shinanigans taste . 1 sec xd
https://www.nexusmods.com/stardewvalley/mods/28443
the monstrosity has been released
nice work! would you like for me to put it on #mod-showcase??
yes please :D
okay, write up a description and i'll post it there 
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?
the little blurb in the preview window is good. "Adds an unlockable, craftable scarecrow to the game whose range will cover your entire farm!"
thank you for posting it for me :3
https://www.nexusmods.com/stardewvalley/mods/28438 incredible timing (?)
slightly unclear description though, is it unpredictable weather report or can rain actually turn into storm midday or what 🤔
Oh wow, guess I should have check nexus first ^^ That's to test, indeed it's not clear if the weather is changing
it did get uploaded like hours after y ou asked 
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 ^^
mod with random map related things i happened to want
https://www.nexusmods.com/stardewvalley/mods/28423
Add a few map tile actions and properties for map makers to use.
@rose forge mushymato.MMAP_AnimalSpot for u
@merry rampart mushymato.MMAP_ShowConstruct for u
npc will never exist if it doesn't have a gift taste, even if it's an unsociable, that's just what the game checks for to create it
along with several other things
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)
!unpack
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!
- if you're doing a 'when' condition, i assume it's because you want your npc to be 'unlocked' at a specific time
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
there's things like setinvisible, you can also set the schedule
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)
I had forgotten about Elliot
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
the paranoid uses both at the same time
(looks at aba who's learning c# to suggest a pr to npc locations/uif2 to hide npcs who specifically have the setinvisible tag)
hmm... where's the entry for elliot's event that sets him invisible? I couldn't find it in his xnb or the beach
I believe Aba sent one of those in already
its a marriage one, so might be the farmhouse, not sure
what is that, beach?
I thought npc map loc is closed source
The other I think is being rewritten so it is unlikely to be approved even if sent in
Well maybe if u ask abs0rbed or whoever the current dev is when they show up here
It seems relatively ez to throw in
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
Maybe during the updating to 1.6.9
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
If you control the draw just don't draw it next frame
addWorldState elliottGone
It's hard to answer without knowing how deep in weeds you are with the menu
If I just don't draw, it stays behind what is drawn on the next frame
elliott gets a special case, so you'll have to do a trigger action
https://stardewvalleywiki.com/Modding:Trigger_actions
SetNpcInvisible <NPC name> <day duration>
Thank you! I was struggling figuring out the syntax! I'll give this a thorough read
thank you!
you can keep on repeating the trigger action: read for the bottom of a repeatable trigger action, and then a secondary one to check for the mailflag that you add during the "unhide" event that sets the npc back to visible
I just want to erase everything I've drawn and keep the screen looking like any menu components aren't drawn
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
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
woot!!!!
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!
If you want your invisible NPC to not be visible on the map for players using NPC map locations or UI Info Suite, you have two options: a) wait until they have integrated my PRs (which may never happen with UI Info Suite but we'll see - though I do have to actually do the pr first lol) or b) use a warp room instead.
atm I'm only mainly concerned on single player, so this is a problem for Future Az to tackle! But I appreciate the input!
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).
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
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.
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:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Aviroen has put together a template that will allow you to easily create a romanceable NPC.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
I feel like I'm getting something wrong 
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
I suppose if I set the value to 0 it'd be indefinite right?
Why do you feel like you're getting something wrong? Is he not going invisible?
he's not
I also tried calling them in an event script using /action Missing, /action Found
(Also John is a very generic internal name for an NPC, so I strongly recommend you make that more unique)
(It was a placeholder for this particular screenshot, along with the IDs)
(So that we can't see your IDs and NPC name?)
(Correct)
in terms of the markactionapplied: "MarkActionApplied Current {{ModId}}_DayEndClearer false" the <id> is pointing at my trigger action's entry id: "{{ModId}}_DayEndClearer"
(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.
oh really 
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
mm, are conditions allowed to be syntaxed like that
The reason it's incorrect is that you can't write conditions like that
this was my main concern as well, is what i mostly wanted to inquire about
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
same, atra doesn't know if the farmhand can call invisible either way
i could test it while i test that graphicsdriver failure but
friends? what are those?
same, someone else is gonna have to pr my karaoke framework for mp support because it boggles my mind
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
just the [] of reading that pathos gave me about the shadow realm left me in confusion
I used to enjoy MP games once...but everything changed when the Fatigue Nation attacked
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"
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
i mean my mini farm has a whole cove as a cave
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
make the summit area sort of northwestern angular?
and then have the hole to the backwoods next to it?
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
hold on actually this is a good idea
.q 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:
- @worn coral (Jump)

because i am a Problem ™️
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
depending on how you're gonna do it, you can probably still do it, but just make it like, 4 boulders
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
removing heart dialogue cut down my default.json by 800 lines jesus christ



yea fair

