#making-mods-general

1 messages Β· Page 605 of 1

calm nebula
#

!reload

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

ooh, interesting

gray bear
#

πŸ”₯ reload sunglasso

rose bobcat
#

is discord search broken atm?

#

wanted to ask when content patcher does its updating

fossil osprey
#

yeah discord is having some issue, API unresponding

rose bobcat
#

(the answer is day start by default, reading the documentation explains the project)

barren tapir
#

I also can't seem to see any images

rose bobcat
#

oh yeah, big time lagging

barren tapir
#

THERES A HOT RELOAD OPTION IN VS STUDIO

rose bobcat
#

the good news has breached containment

barren tapir
#

I think it's back!

#

Nvm, still can't post images. But the colors of everyone names came back!

rose bobcat
#

search also still broken :(

old edge
#

Currently working on my first procedurally generated mine area. I got the entrance working and the levels are going down like normal level 1 level 2...etc. But I'm not sure how the actual mines work are they changed by the code. Right now my map is just a single map it doesn't change but the monsters increase as I go down which is good at least.

#

Maybe it's jsut the ores and monsters that change and the maps are made manually?

#

that would mean I have at least 20 maps to create by hand.

barren tapir
#

The mines follow a set pattern. The Skull Cavern randomly selects one of the mine floors and changes the tileset as needed

barren tapir
#

Though you could probably do procedural generation via C#

rose bobcat
#

okay, so i want to apply daily patches for my stupid event when the day starts because otherwise, if you upgrade your house, the event will use the coordinates from the smaller house still

#

sorry if this sounds really dumb, but would i use cache invalidation for this? or is there another way to edit beyond asset request events?

#

ah well, my brain is leaking out of my god damn ears, i'm just gonna have a content patcher pack in addition to the dll mod

#

not worth spending another 10 hours for something that takes 5 minutes w/ cp lol

lucid iron
uncut viper
#

(that said if you didn't use tokenizable strings or just go for a CP pack, invalidating the asset to make room for a different edit to apply in AssetRequested would be the way to go. that's what CP does every time it detects an asset needs to change)

old edge
lucid iron
#

In my event I write [mushymato.LivestockBazaar_WildPos 0 3]

#

Dreamy did you look at the spacecore dungeon stuff

#

It let you glue different pieces of map together for dungeon purposes

old edge
#

I wish someone could help me build my custom mines it’s so difficult

#

I am working in c#

#

So far monsters spawn but the stone is not it’s coming out as error items

lucid iron
#

Yeah I'm suggesting a framework if you didn't wanna do all that yourself

uncut viper
#

Don't let me stop you from rolling your own but worth mentioning that you can still use SpaceCore's dungeon stuff through C#

old edge
#

Interesting

#

I managed to get it working about 40%

deep cypress
#

Spacecore can do anything!!! πŸ™‚ πŸ™‚ πŸ™‚

late pewter
#

At this point I am deeply wary of most .dll mods. I believe Pathoschild has imprinted in me the suspicion all the latest ones are AI Vibe Coded....

ocean flame
#

hey i was looking at fishpond data and i think i noticed something undocumented??

in the legendary fish pond produce section, theirs a default option with a precendence of 100 and no condition that gives each legendary fish an additional 50% chance to produce 1-2 fish roe before its own unique roll.

Am I reading this right? the wiki doesnt mention it but if its true that would (for example) *double* the daily profit from the legend pond compared to what the wiki says.

final arch
#

maybe this is that? πŸ€”

rose bobcat
#

it was not all for naught

rose bobcat
ocean flame
# final arch maybe this is that? πŸ€”

checking the wiki history, it seems prior that the base chance for a legendary pond to produce roes was the same as a 1 fish normal pond. (15+8= 23%) and then the chance each legendary produced a roe after that check was 100%.

Now (according to the wiki) each legendary pond has 50% base chance to produce roe and then after that roll a roe is made is anywhere 43%-84% based on the legendary fish.

but this doesnt factor in the default which rolls a 50% chance to produce 1-2 before each legends own production which boost some significantly

calm nebula
#

I would vote for the tokeized string

#

It's only tokened in right when the event starts

#

And you can register ur own token handler iirc

rose bobcat
#

my brain has been sucked back into my head, excellent

barren tapir
golden spire
#

have to make it so messy that it looks too messy for AI

faint ingot
gaunt orbit
barren tapir
gaunt orbit
#

There's other less reliable tells too, like the author not being on the sdv discord, or the mod being a "quality of life" mod that isn't actually very useful, or a pathological avoidance of harmony

gaunt orbit
faint ingot
#

tbh i would be lost without CP πŸ™‚ I have a tiny tiny amount of c#.

#

just enough to make people suspicious

gaunt orbit
#

I started out doing cp but now I almost exclusively do c#

wispy bramble
#

(Doesn't help when it's an author that only has 1 singular mod obviously)

barren tapir
#

Is there a way to invalidate the cache of one specific map? This is what I have currently

if (id.Equals($"{ModEntry.ModId}_Book_Lewis1"))
{
    ModEntry.StaticMonitor.Log("Clearing Basement Cache", LogLevel.Debug);
    ModEntry.StaticHelper.GameContent.InvalidateCache("Data/Maps/LewisBasement");
}
uncut viper
#

Maps don't live in Data/

gaunt orbit
#

I also like decompiling mods from new authors which usually makes it apparent when an author is using ai

barren tapir
gaunt orbit
uncut viper
#

Same place as in your unpack.

gaunt orbit
#

The path is relative to the content folder

barren tapir
#

So I'd do InvalidateCache("Maps/LewisBasement")?

gaunt orbit
#

Yes

calm nebula
#

(Tbh I tend to prefer open sourced mods as is.)

rose bobcat
#

aren't mods produced using smapi required to be opensource? or does the license not require that

gaunt orbit
calm nebula
#

Not required but I think it makes for a better ecosystem

#

Also, like

gaunt orbit
#

Mods are all rights reserved by default

barren tapir
# gaunt orbit Also you'll want to check the qualified id instead of the unqualified id

This is the entire function (it's a harmony patch)

private static void readBook_postfix(StardewValley.Object __instance)
{
    string id = __instance.ItemId;
    ModEntry.StaticMonitor.Log($"Player has read {id}", LogLevel.Debug);
    if (id.Equals($"{ModEntry.ModId}_Book_AncientFruit"))
    {
        ModEntry.StaticMonitor.Log("Clearing Cache", LogLevel.Debug);
        ModEntry.StaticHelper.GameContent.InvalidateCache("Data/Crops");
    }
    if (id.Equals($"{ModEntry.ModId}_Book_Lewis1"))
    {
        ModEntry.StaticMonitor.Log("Clearing Basement Cache", LogLevel.Debug);
        ModEntry.StaticHelper.GameContent.InvalidateCache("Maps/LewisBasement");
    }
}
gaunt orbit
barren tapir
#

Gotcha

uncut viper
#

It doesn't really matter, readBook isn't going to happen for non-book objects

#

But it is good practice

gaunt orbit
#

It's good defensive programming

barren tapir
#

So I'd do __instance.QualifiedId == "(O)..."

gaunt orbit
#

Exactly

barren tapir
#

dope

calm nebula
#

As opposed to offensive programming?

uncut viper
#

I would say anyone manually calling readBook on something that is not a book is an offensive programmer

gaunt orbit
#

Offensive programming is when you use reflection to reassign readonly fields

barren tapir
#

Defensive programming is essentially designing code to be flexible and close off vulnerabilities that can be exploited by malicious actors

gaunt orbit
#

Yeah, or in modding terms, make it harder for people to break things by accident

uncut viper
#

I've used reflection to reassign private, auto generated backing fields for things meant to be readonly before. Exhilerating

calm nebula
#

😨

#

Offensive programming is calling out to a url to download a powershell script

uncut viper
#

It's fine, all I was doing was overwriting a mod's UniqueID and other manifest data

gaunt orbit
#

Offensive programming is calling harmony patches in your mod constructor so that when it crashes it takes smapi with it

barren tapir
#

I so badly want to make a malware joke

gaunt orbit
#

(I once installed a mod that actually did that)

gaunt orbit
barren tapir
#

I don't think I can.

lucid iron
#

lawless hours

gaunt orbit
#

Why not? It's not against the rules unless you're going to link to like, an actual malicious file or website

barren tapir
#

Offensive programming is replacing artifact spots with worms

gaunt orbit
barren tapir
hard fern
#

Mod that makes artifact spots drop artifact spots that you then have to go break at clints

gaunt orbit
barren tapir
#

Just to clarify, a worm is a type of malware. Iirc, its basically a self spreading trojan

gaunt orbit
#

Yeah

barren tapir
gaunt orbit
#

The first ever virus was a worm that actually wasn't intended to be malicious

barren tapir
#

I know. I forget the name of it

gaunt orbit
#

The morris worm I believe

barren tapir
#

That sounds correct

jaunty shuttle
#

Isn’t the most widespread evil excessive use of OnTimeChange?

calm nebula
#

Lol

ornate trellis
#

Morris, huh

barren tapir
#

I don't think CA based Morris off of the morris worm

#

Anyway, time to try modifying minecart data!

calm nebula
half tangle
#

I know the general consensus is to avoid multithreading when interacting with the game's data, but what about if I am getting info from the data and not trying to do anything to the data that is used by the game for the player?

Specifically I would want to call gameLocation.Map.RequireLayer on specific layers and then process them in new threads. What problems might come up in doing so? The only problem I can think of is that the map asset gets invalidated while another thread is processing the (now old) data, but I know how I could work around that one. Are there other problems? I've avoided trying this before, but I'm curious now whether I can try it.

calm nebula
#

If someone makes a change to a dictionary or a list while you're looking at it, it does throw an error

half tangle
#

that would be some really unfortunate timing, but obviously that means it'll come up given enough chances to...

uncut viper
#

If you plan on redoing this processing whenever the map is invalidated in order to account for new data, I don't think that's even that unlikely, since you're probably not the only person interested in redoing things when a map changes

void aspen
#

Can someone send the code ' thingy discord uses to make code look different than the main text?

#

I'm on mobile idk which it is

brittle pasture
#

if you're on iOS long pressing apostrophe (') should show it, probably something similar on Android too

#

one for a line, three for a block

void aspen
#

Tyy

whole prism
#

I like tacos

royal rover
#

Is there a way to resize the console window that SMAPI opens up? I had a recent update to my Linux Mint OS that completely messed up all of my display settings. I've gotten most of them fixed, but the SMAPI console and the SV game both are still really small.

tiny zealot
#

if you mean resize it manually, it should work like any other instance of whichever terminal emulator it's using. if you mean preset it to a particular size, that should be controlled by your settings for the terminal and/or your window manager

royal rover
#

Odd, because when I open a normal terminal, it's sized correctly based on my UI scaling. For SMAPI, both the window and the text inside it aren't scaled the same as my typical terminal.

lucid iron
#

for me when i launch via steam it always does xterm

#

instead of konsole

#

usually i just do this from cli

exec env SMAPI_USE_CURRENT_SHELL=true "$GAMEDIR"/StardewValley
golden spire
#

you can change the default terminal by editing the smapi launch script

#

line 122 of the file Stardew Valley

#
            # select terminal (prefer xterm for best compatibility, then known supported terminals)
            for terminal in xterm gnome-terminal kitty terminator xfce4-terminal konsole terminal termite alacritty mate-terminal x-terminal-emulator wezterm; do
                if command -v "$terminal" 2>/dev/null; then

move whatever you prefer to have use before xterm

rose bobcat
#

is there a consensus on whether you should use _ or this. for private fields? i feel like underscores look cooler, but both my gut tells me this. is more clear and also i'd rather adhere to any community standards

brave fable
#

this. is just used to avoid ambiguity when referencing members, such as around local variables, or just for overall clarity and readability. it isn't used to indicate a private member.
_ is most commonly used for private members, i think it's the microsoft standard to prefix with an underscore.

final arch
#

honestly with modern IDEs I dont rly see the point of using _ as prefix; whether you use this in cases you dont actually need it is personal preference

lucid mulch
#

this. is more for differentiation between class field/properties and local method variables and less whether those class field/properties are public/private

calm nebula
#

(Microsoft uses the _prefix)

#

For private, not quite sure why

royal stump
#

I always forget they rec that SDVpufferdizzy
I'm used to just seeing it in backing fields as shorthand for "don't use this one"

#

ig also because SDV just uses camelCase fields, PascalCase properties (mostly)
or private/public, but everything was made public to reduce reflection, etc

ornate drift
#

Morning

barren tapir
# calm nebula (Microsoft uses the _prefix)

I forget the standard coding practices for C#. But prefixing private variables with an underscore is fairly common, even in languages like Python that don't have visibility tokens

#

Yall, I'm hoping to maybe finish v1 of the book mod I've been working on. Or at least, all the logic (I need to do code clean up and documentation)

#

I may also try and finally tackle my firework block mod. Hopefully knock something off my ever increasing todo list.

#

Or start my weather mod... UGGHHH THERES SO MANY THINGS I WANT TO WORK ON SDVpufferwaaah

calm nebula
#

Afaik c# doesn't have a pep 008 but it does have the aging stylecop

#

Also the jetbrains one

#

Matt uses the jetbrains one

barren tapir
#

BTW, if a shop sells a crafting recipe, does the game automatically make the recipe texture?

nova gale
#

huh, turns out I was wrong about special order rewards, if you set them to a dynamic variable it will absolutely change, it's just the reward on the board that doesn't change (what you get does though)

nova gale
#

same is true in mail rewards

calm nebula
#

Yeah

#

The order is rerolled when you grab it

#

Re-parser

barren tapir
#

Excellent

barren tapir
#

How would a C# mod add mushroom boxes to an arbitrary map? FarmCave.cs does the following:

public void setUpMushroomHouse()
{
    int[] array = new int[2] { 5, 7 };
    foreach (int y in array)
    {
        int[] array2 = new int[3] { 4, 6, 8 };
        foreach (int x in array2)
        {
            Object mushroomBox = ItemRegistry.Create<Object>("(BC)128");
            mushroomBox.fragility.Value = 2;
            setObject(new Vector2(x, y), mushroomBox);
        }
    }
    setObject(new Vector2(10f, 5f), ItemRegistry.Create<Object>("(BC)Dehydrator"));
}

The issue is is that setObject is a GameLocation method. Is it possible to convert an arbitrary map to a GameLocation? And if so, how?

nova gale
#

you should be able to place them like a normal big craftable, I made them craftable and placable with a CP mod, it's just settings on the big craftable itself

barren tapir
#

How do I place big craftables in C#? I've never done this before πŸ˜…

nova gale
#

you can't go to your map if it isn't a gamelocation afaik, so once loaded into the game your map will be a new gamelocation (and I suspect you'll ahve to put it into the locations array) so you should be able to call setobject just fine

#

have you tried yet?

#

I personally load all my custom locations, items, etc in a helper CP mod just so if there are tweaks to that process they'll get handled in future CP updates automatically, then interact with things in my c# mod

#

no idea if others do it that way

barren tapir
#

Time to test it

#

It almost worked!

nova gale
#

it looks like it worked, what didn't work?

barren tapir
#

It did, it just placed them in the wrong location (I'm fairly certain I just have to subtract the initial x and y values by two) πŸ˜…

nova gale
#

oh, gotcha

#

just be glad stardew valley only has one "direction" for it's perspective, coordinate math when you can rotate gets real wonkey real quick πŸ˜›

barren tapir
#

Ohhh, trust me, I'm aware

nova gale
#

ok, time to bite the bullet and make my new event so I can add my last special order!

barren tapir
#

That's more like it!

nova gale
#

thats a neat skull

barren tapir
#

Thanks!

#

And with that, the second Lewis book is mostly finished! I just need to move a few things around and create a proper map manager class

#

And create a tile action for the skull

strong kite
#

So.. if an NPC has the same entry for gift tastes in 2 different fields (say liked and disliked) I'm guessing the more favored value goes through?
I'm looking through Elliott's vanilla gift tastes in the code, apparently he has item category -79 (fruits) in both Like and Dislike?

nova gale
#

Β―_(ツ)_/Β―

barren tapir
#

Only 1 more book left to go!

royal stump
strong kite
#

Ahh, Alright

nova gale
#

an unrepeatable special order will come back to the board until the player completes it, right? it just won't come back once complete?

calm nebula
#

Oui

barren tapir
#

The final book is done! I just have to do the following:

  • Add the actual powers for the Lewis books
  • Add the books to the store
  • Code cleanup and documentation
nova gale
#

so, looking at events at the farm, there are specific cordinates that are used for the front door events.

how do those work if a map moves the farm house? do these events just break?

barren tapir
#

Probably not

nova gale
#

(I'm considering making a "as you leave the house" event like these, but not sure how to handle folks moving the farm house)

barren tapir
#

Bear in mind that players in 1.6 can now move where the farmhouse is

#

Via robins

#

Or the wizard

nova gale
#

right, that's why I'm confused i guess, all of these farm events specifically place characters at:
farmer 64 16 2 Sam 64 18 0

So either the game looks for those and moves them at runtime if you use those coordinate sets in a Farm event, or they just break πŸ˜›

barren tapir
#

IDK TBH.

#

But one would think that the game handles that by default

nova gale
#

yeah, honestly I was expecting to find a variable or placeholder of some flavor in these vanilla events

calm nebula
#

so

#

the game ignores your spawn coords

#

you always spawn at the front door uniless you explicitly disable that'

nova gale
#

for farm events? or if you enter those 2 coordinate sets?

calm nebula
#

for farm events

nova gale
#

ah interesting

barren tapir
#

How do you mark a bug on Nexus as "Not a Bug"

#

Nvm, found it

#

God they make that button hard to find

final arch
#

[Visible Fish] OnUpdateTicked: 0ms
[Visible Fish] OnUpdateTicked: 0ms
[Visible Fish] GameLocation_draw_Prefix: 0ms
I often get OnUpdateTicked twice per draw call; that's only when the update takes too long and it skips the drawing right? πŸ€”

lucid iron
strong kite
#

Never did I think it would be Gift Tastes that would take so much time to do

hard fern
#

It's a lot of work if you want to be thorough

#

You could just let universal tastes do most of the work for you but

#

Im not like that XD and will painstakingly separate out certain items

strong kite
#

I'd say I'm being decently thorough, but man I've only done 4 characters fully and I'm already thinking "oh god this is gonna take a while"

#

It's also making me realize that some of these characters I just do NOT know like I never talk to them LUL

true coyote
#

Oh chu, can I dm you my mead spritesheets tonight when I get home?

barren tapir
#

All 12 books are finally finished! All I have left to do is code cleanup and documentation!

strong kite
#

Apparently Sebastian was very easy to come up with gift tastes for from my mod

barren tapir
hoary tartan
#

Yay!!

barren tapir
#

On to the next mod! I think I'm finally gonna try and make that firework block mod

dusky vigil
#

@brittle pasture I'm not at my code atm, but does AHM recognize the deluxe items set up by EAC for animals for pregnancy? And if not (which I'm presuming, I just didn't test it so I'm hedging) but is there a way to set up an animal that has different harvest methods for the deluxe good that AHM will recognize?

(legit if it's just "haha enable it in the AHM and it works" I apologize, I'm just not at my computer atm to try hahaha)

ornate drift
#

after Manny i may consider making a female furry stardew NPC

#

not sure

rose bobcat
#

or is that only in the pseudocode

#

kind of assuming edibility is how much energy you lose for eating it

royal stump
#

-1 to -299 is health/energy loss, yeah, -300 is the magic "can't eat this at all" number

ornate drift
#

"if you eat this you will DIE"

rose bobcat
#

that's an interesting way of doing it

ornate drift
#

how do you add a conversation topic after an event happens

#

is it something like "seen_EventID"

uncut viper
#

You don't need to, the game generates one for you automatically

#

eventSeen_<event Id>

severe cairn
#

pls @ if you answer ^_^

lucid iron
#

The basic unit of content patcher is a patch and not a json though, so the patch summary shows you which patches took effect

severe cairn
#

wowa
thats fine, close enough for me :3
I can manually check the patches that don't activate yet, just lowering the amount of files i need to manually check is good enough

uncut viper
#

Any C# person here happen to know a good and relatively simple example of a mod using GMCM's Complex Options for custom configuration stuff? I've never used it before but I will either need to for my next mod or just roll my own IClickableMenu, but I don't know any mods off the top of my head that I can look at to see how they've used it

ornate drift
#

wizard only has 2 portraits?

#

bro 😭

lucid iron
#

I didn't really enjoy doing this so when I did disco I just rolled my own IClickableMenu and made GMCM open it through some hacks

uncut viper
#

Honestly that sounds much preferable to me

barren tapir
#

Flute and Drum blocks are considered objects. How does the game know that they can be placed?

uncut viper
#

It was mostly the click detection stuff I was unsure about

lucid iron
uncut viper
lucid iron
barren tapir
lucid iron
#

I wasn't able to banish GMCM completely there

barren tapir
#
"464": {
    "Name": "Flute Block",
    "DisplayName": "[LocalizedText Strings\\Objects:FluteBlock_Name]",
    "Description": "[LocalizedText Strings\\Objects:FluteBlock_Description]",
    "Type": "Crafting",
    "Category": 0,
    "Price": 100,
    "Texture": null,
    "SpriteIndex": 464,
    "ColorOverlayFromNextIndex": false,
    "Edibility": -300,
    "IsDrink": false,
    "Buffs": null,
    "GeodeDropsDefaultItems": false,
    "GeodeDrops": null,
    "ArtifactSpotChances": null,
    "CanBeGivenAsGift": true,
    "CanBeTrashed": true,
    "ExcludeFromFishingCollection": false,
    "ExcludeFromShippingCollection": false,
    "ExcludeFromRandomSale": false,
    "ContextTags": null,
    "CustomFields": null
  },
uncut viper
#

the DelayedAction

lucid iron
#

Do stuff next tick

#

It's a easy way to get that

uncut viper
#

Is that to prevent some weird GMCM behaviour

lucid iron
#

I think so but tbh i don't remember

uncut viper
lucid iron
#

Just gotta trust the chu from the past that u die without this

uncut viper
#

I trust chu from all timelines

barren tapir
uncut viper
#
if (this.type.Value != null && (base.Category == -8 || base.Category == -9 || this.Type == "Crafting" || this.isSapling() || base.QualifiedItemId == "(O)710" || base.Category == -74 || base.Category == -19) && (this.edibility.Value < 0 || this.IsWildTreeSapling()))
    {
        return true;
    }

Shrugs

#

(this is in Object.isPlaceable())

barren tapir
#

Thanks! My dinner just arrived, but the good news is that I've (hopefully) demystified everything else needed for the firework launcher and have pseudocode written for the required harmony patches.

ornate drift
#

how do i make another character appear into an event after ive already made like 50 lines

#

do i just do name x y direction

brittle pasture
# dusky vigil <@218910376732000256> I'm not at my code atm, but does AHM recognize the deluxe...

AHM doesn't recognize the extra drops (ie. items not in Data/FarmAnimals), but I think you can add "dummy" entries with Condition FALSE and it should work
(you can have deluxe produce with different harvest methods, but obviously they will compete with each other and the regular produce in the vanilla produce "slot". the FALSE workaround prevents that from happening while still letting AHM "see" the item))

golden spire
#

then warp them in as needed

ornate drift
golden spire
#

yes

ornate drift
#

and then after a bit itd be warp farmer 8 22 0?

golden spire
#

yes or whatever you want them to appear

ornate drift
#

alr thanks :3

ornate drift
#

is wizards internal name just wizard?

uncut viper
#

It's whatever it is in Data/Characters

ornate drift
#

weird, my event isnt working

#

is his building name not WizardHouse?

royal stump
#

it is & that target asset does already exist, so I guess double-check your own NPC ID, patch export Data/Events/WizardHouse to make sure it's applying correctly, etc

ornate drift
#

weird

golden spire
#

also when you say "isn't working" that can mean a few things... it doesn't trigger, it loads and crashes, etc

ornate drift
#

it doesnt trigger

#

at all

#

i enter the wizard house and nothing happes

#

happens

#

ah, i think i forgot a comma...

golden spire
#

you don't need a comma if it's the only entry or last in the list.

ornate drift
#

i forgot to put manny at 6 hearts

#

oops

#

why is it trying to treat direction as continue?

#

does warping not have direction or

hard fern
#

Nope

ornate drift
#

so warp farmer 8 22

hard fern
#

That ought to work

ornate trellis
#

ye, you set the direction with faceDirection right after the warp, i stumble over that all the time too lol

rose bobcat
#

the world needs warpWithDirection that simply is parsed and replaces the relevant strings

torpid sparrow
#

I hate that warp doesn’t set direction

#

GRRRR

golden spire
#

grrr

rose bobcat
#

i have a quick question related to my dream of having an eventlistener that listens for a specific event w/o needing to have an updateticking listener
if i had the character warp to specific unreachable spots a couple times on the event triggering map while the screen was still black and tracked if the sequence was correct, would that work?

#

alternatively, is there a better way to listen for a specific event w/o updateticking lol

calm nebula
#

this sounds incredibly more complicated than "make an event command" tbh

#

and stick it at the start of the event in question

rose bobcat
#

oh

#

my god

#

i COMPLETELY forgot "RegisterCommand" exists lol

#

ahahhahahahhaha

barren tapir
#

How do you update an object after changing its sprite index? I currently have the following:

private static void checkForAction_postfix(StardewValley.Object __instance, Farmer who)
{
    if (__instance.QualifiedItemId == $"(O){ModEntry.ModId}_Launcher")
    {
        string colorStr = "0";
        __instance.modData.TryGetValue("FireworkColor", out colorStr);
        int.TryParse(colorStr, out int color);

        // held firework = get firework color (held). If held != 0 and held != color
        var held = who.CurrentItem;
        if (held != null)
        {
            int heldColor = Utils.GetFireworkColor(held.QualifiedItemId);
            if (heldColor != 0 && heldColor != color)
            {
                __instance.modData["FireworkColor"] = $"{heldColor}";
                __instance.ParentSheetIndex = 4 + heldColor;
                __instance.reloadSprite();
                held.ConsumeStack(1);
            }
        }
    }

Everything seems to be working, even the the sprite index is changing when viewing the object with UIInfoSuite, but the object doesn't change.

#

Correction, LookUpAnything, not UIInfoSuite

scenic ferry
#

gang I need thoughts on my mod

I'm overhauling my "Familiars" system to make them into a unique character class - not npc, not farm animal, not pet. They live on the farm, have tamagotchi style needs like food and attention, they have gift preferences, and they have portraits + dialogue. So, my dilemma:
I want to make a UI menu to track their needs and gift log, but I'm not sure if I want that UI to be accessible from the NPC Social tab, the Animal relationship tab, or... something else?

uncut viper
#

Me personally I would add my own menu tab (with Better Game Menu support if it was installed, or just require BGM) or add a button to the Animals social page to swap it to the familiar page, but still within the animal tab (and just replace that AnimalSocialMenu.cs with your own FamiliarMenu.cs)

#

(to clarify the last bit: i mean swap it out when the user clicks that button, and restore the AnimalMenu when they swap back)

scenic ferry
#

gotcha gotcha - would that be through BGM too? I want to limit dependencies as much as possible if I can but I hear messing with the pause menu is a pain

uncut viper
#

You hear that it's a pain because it is a pain, especially compat wise πŸ™‚β€β†•οΈ

#

BGM lets you add as many tabs to that pause GameMenu as you want

#

or at least up to like, 20 or something

scenic ferry
#

yeah might let my strict dependencies go for this one cause lolol its probably a good trade for compat

uncut viper
#

If requiring BGM, I wouldn't be messing with the Animal tab at all, I meant I'd make my own tab entirely

#

The animal tab thing was just if not using BGM

scenic ferry
#

gotcha gotcha

uncut viper
#

You can always make BGM an optional dependency too and if they dont have it installed, just make them press a hotkey to open your menu instead

scenic ferry
#

yeah I'll probably go for that, so its not a strict requirement

uncut viper
#

Tbh, an on screen UI button isn't a bad idea either

#

like the journal button

scenic ferry
#

oh man youre right
So many options now

uncut viper
#

Honestly I forget adding on-screen UIs is an option sometimes

hoary tartan
#

I didnt even know that was an option

uncut viper
#

Anything is an option with enough C#

scenic ferry
#

same, totally slipped my mind
I could go real wild and do both and let the player pick through config too

uncut viper
#

(but on screen UIs is very easy C# as its natively supported by the game)

inland rain
pseudo otter
#

I updated my translation mod, just to spite someone who I presume is a vibe coder trying to be "helpful".
It's here: https://www.nexusmods.com/stardewvalley/mods/21317 and has no features to enable machine translations.

Nexus Mods :: Stardew Valley

A mod for creating and updating translations for mods that use SMAPI's I18n API, to make translating mods more accessible for translators.

#

Had another one earlier who had updated my bigger backpack mod to add a second upgrade. Except there was no branching logic added to determine which upgrade was being bought. Rookie mistake I guess? But perhaps a mod that heavily uses transpilers is a bit much to take on then.

#

My translation mod can now handle files with 10.000 entries.

fierce vault
#

wow, I didn’t know there was a mod to help with translations. Might be a good thing to link to translators whenever I finally get my i18n sorted

sage jungle
#

hiii, anyone knows if the portraits file have a height limit?

#

thx SDVpufferheart

calm nebula
#

It's dependent on GPU but 4096px is pretty safe

worn turret
#

Does anyone know if it's possible for Content Patcher to load a different bark sound for a certain dog? You know how we have our choice of like five different dogs, but they all share the same bark sound file? Is there a way with CP to change out the bark for just one of the dog skins?

uncut viper
#

pet breed data has a BarkOverride field that accepts a (i assume) cue name

worn turret
#

That sounds promising. Is there a place I could read more about the syntax of using that?

uncut viper
worn turret
#

Thank you. ^_^

proven spindle
#

If I want to add an additional capability to the scythe, would that have to be done with a harmony postfix?

#

Reading up on that right now and just want to be sure it's the right rabbit hole to dive down (especially with the bolded 'should be used as a last resort' at the top of the section lol)

uncut viper
#

Harmon is perfectly fine to use. It's your only option here unless you want to make an entirely new scythe tool.

proven spindle
#

Thanks!

deep cypress
#

Is there a way to see why a patch isn't loading? Like with patch summary.

urban patrol
#

you can check if it's being applied and if the conditions are being met, but it doesn't say exactly why

deep cypress
#

Yes, the why is what I need, sadly...

urban patrol
#

what does it say?

deep cypress
#

The patch is loaded, but not applied

urban patrol
#

can you share the line exactly

deep cypress
#

[X] | [X] | [ ] | Exclusive | Include Lavinia/content.json > Schedule Dialogue (Load Strings/schedules/Lavinia)

urban patrol
#

do you have two loads to the same target?

deep cypress
#

No

urban patrol
#

you can try sharing your json

uncut viper
#

( @frosty gate can't do masked links until you're a higher level)

#

(I removed your timeout manually)

frosty gate
#

thanks, I keep forgetting that.

deep cypress
#

Lol Lavinia isn't loading at all... did Patch export of Data/Characters, she's not in there. Lol. I broke her file.

frosty gate
#

Wait, I'll post this somewhere else, maybe in #modded-stardew as it isn't technically modding related, sry

deep cypress
#

Imma go cry... I work very early tomorrow, so this problem must wait... thx all tho

sacred jetty
#

Hi, the GetModInfoAsync API provided by smapi can only retrieve mod versions that have a UniqueID.
Is there a way to perform update checks for translation-type mods that do not have a UniqueID through smapi?

royal stump
severe cairn
vernal crest
severe cairn
#

Nod nod

#

Weird tho

torpid sparrow
#

Will just need to see the content and schedule jsons

versed wyvern
#

Would there happen to be a simple way for me to have the game give the player a notification message if they haven't installed a compatibility patch? ThinkO_O

royal stump
#

not with just CP, afaik, but EMP and BETAS add trigger actions you could use for a log message about it

versed wyvern
#

Ah cool, BETAS is already an optional dependency here so that should work, thank you

royal stump
#

I think the formatting would be something like this with betas, for example

"Action": "EditData",
"Target": "Data/TriggerActions",
"Entries": {
    "{{ModId}}_CompatWarning": {
        "Id": "{{ModId}}_CompatWarning",
        "Trigger": "DayStarted",
        /* note the ! on the second one; this should be "true, !false" if you have the first mod and NOT the second */
        "Condition": "{{HasMod |contains=ModThatNeedsCompatibility}}, !{{HasMod |contains=CompatibilityMod}}",
        "Action": "Spiderbuttons.BETAS_Log {{ModId}} \"Hey you should install the compatibility mod.\" Warning true"
    }
}```
#

though ig betas also adds a has_mod GSQ that would make it more readable

dawn ore
#

Hello! I'm pretty new to C# modding and want to make a mod that adds a buildable farm building like a pump house that passively increases the range of all sprinklers on the farm, the equivalent of giving every sprinkler a free pressure nozzle, so for example an iridium sprinkler would go from from 5x5 to 7x7, and then stacks with an actual pressure nozzle to go 9x9.

after looking at the decompiled source code I think I would need to do a Harmony postfix patch on GetBaseRadiusForSprinkler(), incrementing the return value by 1 if the building is present on the farm.

Does this seem like the right approach? Any gotchas I should watch out for e.g. with how other mods might patch these methods. This is all very new to me so sorry if dumb questions.
Are there any example mods I could look at that do something similar to learn from interms of modigying other object behavior?

lucid iron
#

There's a get modify radius for sprinkler iirc

#

That's probably what you want to use instead

barren tapir
lucid iron
barren tapir
#

Huh

#

Is there a way around this?

lucid iron
#

Well first of all we need to know if this is true

dawn ore
lucid iron
#

A long while ago i did base radius != modified radius to check for whether a pressure nozzle type thing is added

royal stump
#
public virtual int GetModifiedRadiusForSprinkler()
{
    int radius = this.GetBaseRadiusForSprinkler();
    if (radius < 0)
    {
        return -1;
    }
    if (this.heldObject.Value != null && this.heldObject.Value.QualifiedItemId == "(O)915")
    {
        radius++;
    }
    return radius;
}```
lucid iron
#

Yeah there ya go

royal stump
#

at a glance it's always used, just modified if the nozzle exists, yeah

lucid iron
#

Just postfix that AquaThumbsup

barren tapir
dawn ore
#

So would it be something like this:

[HarmonyPostfix]
[HarmonyPatch(typeof(StardewValley.Object), nameof(StardewValley.Object.GetModifiedRadiusForSprinkler))]
public static void Postfix(StardewValley.Object __instance, ref int __result)
{
    if (__result < 0) return;
    
    if (IsPumpHouseBuilt())
        __result++;
}
lucid iron
barren tapir
lucid iron
lucid iron
#

I don't really know what the whole context is atm so i don't have better answer for you

royal stump
#

(also for code highlighting, cs or json)
```cs
your code here
```

void aspen
#

I think I always used js

#

is it much different

royal stump
#

not much, it's just javascript vs javascript object notation SDVkrobusgiggle

lucid iron
#

js highlights json yea

royal stump
#

iirc it technically does more/different things with js

void aspen
#

I see

barren tapir
#

So I currently have the following object:

#

And this is the object after interacting with it while holding a green fire work

dawn ore
barren tapir
#

Noticeably, the firework launcher icon DOES update in look up anything

barren tapir
#

However, this is what it looks like in game

lucid iron
#

Ok so it's an ordinary object right

barren tapir
#

Yes

lucid iron
#

Then yeah i think it's the draw in world stuff not necessarily doing what you want

#

What's the goal here

calm nebula
#

You placed it after right?

#

The game is very insistent on fixing the parentsheetindex when you grab/place smth

#

Iirc

barren tapir
#

So my goal is to allow the player to interact with this object while it's placed on the ground and while holding a firework.

When this happens, the firework is consumed, and the sprite is updated to display what color firework was provided.

Finally, once the player walks by the object, it'll launch the firework (similar to the flute block)

#

Currently, the firework is getting consumed and the metadata being used to track the firework color is also being updated. I've yet to patch the farmerAdjacentAction though

lucid iron
#

You should just make it a machine then

barren tapir
#

And that will still work with the farmerAdjacentAction?

If it wasn't obvious, I'm modeling this off of the flute block πŸ˜…

lucid iron
#

So for this mod, I setup things such that the big craftable has a working effect

#

This working effect is activated by me in C# putting a bogus held item on the "machine" rather than anything player does

#

The point isn't to actually use machine to do all the logic, just take advantage of the working effect

#

In my case I used it to animate, which will indeed change the parent sheet index

barren tapir
#

Okay. I'll look into changing it to a machine once I figure out the firework logic!

lucid iron
#

Besides this you can also just leave the base sprite alone and handle the alternate sprite draw yourself

barren tapir
#

I'm still very new to patching sprite drawing (i.e., I've never actually done it before)

lucid iron
#

Could opt for a custom class via spacecore

lucid iron
barren tapir
#

Okay!

calm nebula
#

Isnt fireworks a TAS

#

Couldn't you just queue up a bunch of TAS

barren tapir
#

What's a TAS?

barren tapir
barren tapir
#

I'll most likely end up doing that if I can't get the firework logic to work.

lucid iron
#

Well this is in fact the fireworks logic

#

A firework is a TAS

barren tapir
#

TBF, it looks very close to what I've written thus far

barren tapir
#

Time to test it! I'm almost positive it won't work

#

-# A part of me is hoping I completely borked the sprite index and it just draws random textures.

#

AND OMG IT WORKS

#

Kind of

#

Need to fix the delay time

#

And something else is being very wonky

calm nebula
#

u know abour DelayedAction right?

barren tapir
#

Yes

#

TBH, I was expecting the game to crash

#

So the fact that it didn't crash, and is somewhat functional, is a big win in my book

#

I'm fairly certain I did indeed mess up the sprite index by not making it 0 indexed. I'm also fairly certain I need to change how its keeping track of what firework to launch

severe cairn
#

Is there a way to check how a method like. Changes after Harmony patching it? Similar to patch export with content patcher and json but the changed method instead

I do know you can Harmony log txt but I can't read it T_T I just wanna get an overview on how the method ends up looking so I can try to make things more compatible.

I modified ichortower's tater toss code so you can toss Himeko, but I removed a few features I didn't need and modified other features, and seeing as most of the code is a direct copy I wanted to avoid redundancy and find potential conflicts if it detects both being installed.

They seem to work fine together but a lot of the methods are exact duplicates (which is why I'm guessing it's fine cus it doesn't matter if they override it's the same anyway) and I wanted to see which ones I could exclude if the other mod is installed... And perhaps spot some unseen conflicts...

Im guessing the answer is no considering it would probably be stated if it exists, and maybe the only way to do that is not allowed or something, but in case it does exist I'm asking anyway, I've been known to be very unlucky when I try searching for solutions lol

royal stump
# severe cairn Is there a way to check how a method like. Changes after Harmony patching it? Si...

For just "patches" in general, not really? SMAPI has the command harmony_summary that lists patches on each method, which might display them in run order, but I'm not sure on that part. I don't think Harmony or SMAPI offer a "decompile every patch on this" command or anything, so just finding the methods involved is the simplest option.

If you're using a transpiler specifically, you can dump all the instructions into the SMAPI log and see what the final IL looks like. It should include any other transpilers' edits if yours is applied after them, which it'd probably need to be there.

iron ridge
#

you can log the IL after transpiling it if you mean like that

severe cairn
#

Yeah I found the methods I just can't see the changes to them, so I guess I gotta guess by testing in game

calm nebula
#

There are also priorities, etc

royal stump
#

by methods I mean the prefix/postfix/etc methods being attached to w/e you're targeting there, too

#

nothing but transpilers actually edit the original method's code, they just run before/after it, swap places with it, disable it sometimes, etc (afaik implementation-wise)

#

so not easy to just export the whole logic of it all

lucid iron
severe cairn
#

Yeah probabbyyy

lucid iron
#

It sounds like what you need is a way to tell tator toss to let you toss arbitrary NPC

#

Much easier than copying whole thing

severe cairn
#

Still i have nothing better to do while in purgatory until tomorrow

#

I already copied the whole thing so o just gotta figure out if it conflicts

lucid iron
#

it's still fragile to do this imo

#

And if ichor fixes stuff upstream you won't be able to get it SMCPufferjail

severe cairn
#

Yeah that's why I wanted to see changes, but I'll play around with it a bit while I'm bored

lucid iron
#

Another way is to patch tator toss

#

To make it accept himiko

severe cairn
#

Oh yes I was wondering that too

#

As in I wanted to see if that was an option

merry river
#

A little embarrassed to be asking because of not knowing the lingo too well, but could someone explain to me what exactly "map" means in this context with a short example?

#

Like, how does it translate to CP?

lucid iron
#

In json land it's { }

merry river
#

And I write them to selph.ExtraMachineConfig/ExtraOutputs with an editData patch with this asset as target?

royal stump
#

there's an example below that:

"Action": "EditData",
"Target": "selph.ExtraMachineConfig/ExtraOutputs",
"Entries": {
  "JellyExtra": {
    "Id": "JellyExtra",
    "ItemId": "FLAVORED_ITEM Jelly DROP_IN_ID",
  },
},```
(edit: more relevant parts ![SDVkrobusgiggle](https://cdn.discordapp.com/emojis/898395746875875379.webp?size=128 "SDVkrobusgiggle"))
but in abstract, the map phrasing means the asset is a set of IDs that are each connected to an item data {object}
#

as in "JellyExtra" to that data, etc

merry river
#

thank you so much SDVpufferheart

royal stump
#

I got lost going back to look for it, but yeah, one of the collapsible tabs SDVpuffersquee

barren tapir
#

hmmm.. me thinks I may have messed something up πŸ˜…

merry river
barren tapir
#

I'm working on a firework launcher that acts like a noteblock. In theory, it should only be launching a firework every 1000 milliseconds

merry river
barren tapir
#

Its launching them every millisecond I believe

#

The good news at least is that it is surprisingly way more fun than I thought itd be

#

It's a good thing SV doesn't have cops... I'm fairly certain I've launched way too many fireworks to be legal

#

NGL, kinda tempted to make this the mod banner

#

Time to flood the smapi console to see what's going on

gray bear
#

are u animation-ing?

barren tapir
#

No

gray bear
#

just firework until the mod work?β„’

barren tapir
#

Yes

#

OH GOD WRONG SAVE

gray bear
#

AAAAAAAAAHHHHH

barren tapir
#

Hate it when that happens πŸ˜…

gray bear
#

loaded a wrong save once, reality collapsed (game crashed)

barren tapir
#

Yall, I think I may have found the issue

gray bear
#

that's a lot of fireworks

#

perhaps we need firefighters in the valley

barren tapir
#

Ahh, I see... I'm providing "TotalGameTime.Milliseconds" instead of "TotalGameTime.TotalMilliseconds"

#

Fixed it!

gray bear
#

πŸŽ†

royal stump
#

the game always refs ElapsedGameTime.TotalMilliseconds or ElapsedGameTime.Milliseconds, fwiw (no idea if there's any difference there, I haven't had to think about it in a while)

barren tapir
barren tapir
royal stump
#

yeah, I just mean the elapsed property

#

a few do use both sub-properties for w/e reason

#

...oh, I see it does use .Total.Total everywhere too SDVpufferdizzy I'm used to seeing Elapsed but ig it's all about the same

barren tapir
#

Time to try patching the draw function. If that doesn't work, then I'm gonna go down the machine route.

Then all I have left to do is:

  • Define a crafting recipe
  • Make the recipe available at the casino
  • Run from the cops
#

I've launched way more than enough fireworks at this point to destroy a small community (I may or may not have spent far too much time playing around with the launchers when they were launching every millisecond)

#

I'm getting the following error:

[Firework Launcher] Mod crashed on entry and might not work correctly. Technical details:
System.Reflection.AmbiguousMatchException: Ambiguous match in Harmony patch for StardewValley.Object:draw

when trying to do the following:

harmony.Patch(
    original: AccessTools.Method(typeof(StardewValley.Object),
    nameof(StardewValley.Object.draw)),
    prefix: new HarmonyMethod(typeof(Patcher), nameof(Object_draw_prefix))
    );
royal stump
#

if overloads exist for a method name, you need to specify its argument types after your nameof(... argument

#

e.g. here where I target something that takes a Furniture as its arg

Monitor.Log($"Applying Harmony patch \"{nameof(HarmonyPatch_BedPlacement)}\": postfixing method \"GameLocation.CanPlaceThisFurnitureHere(Furniture)\".", LogLevel.Trace);
harmony.Patch(
    original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.CanPlaceThisFurnitureHere), new[] { typeof(Furniture) }),
    postfix: new HarmonyMethod(typeof(HarmonyPatch_BedPlacement), nameof(GameLocation_CanPlaceThisFurnitureHere))
);```
barren tapir
#

I did try that originally, but it wasn't finding a method (I'll double check to make sure I wasn't passing the wrong arguments)

royal stump
#

optional arguments need to be included there iirc, among other pitfalls

merry river
#

@brittle pasture Sorry for the ping, but is it possible to use EMC's ExtraOutputs asset with multi-flavored items?

barren tapir
#

It compiled! I must have messed up the parameters. I just hope I'm patching the correcting override

#

Wrong override (probably)

barren tapir
#

Yknow, something doesn't look quite right. Can't put my finger on it though

golden spire
#

strand of grass in the background

rose bobcat
barren tapir
#

Progress

#

It worked!

brittle pasture
placid coral
severe cairn
#

Ugh the same method that's supposed to do almost the same things but requiring different use of them is the worst

#

You often don't figure out which library or package or whatever is the culprit until it's too late

barren tapir
#

I think I may have miscounted the number of parameters iirc

severe cairn
#

And system just adds random ones in sometimes 😭 like no go away
Or when a tutorial or guide doesn't tell you which to use... And they don't have a GitHub... So you don't even know there's two different packages...

barren tapir
#

How do I fix this? (Ignore the price, I forgot to add a zero).

The recipe is as follows 388 25 390 25 335 1/Home/{ModEntry.ModId}_Launcher/false/null/

severe cairn
#

Ah the fabled wood sap recipe issue

barren tapir
#

Still not working. I currently have the following:

// Editing Objects
    data[$"{ModEntry.ModId}_Launcher"] = new ObjectData()
    {
        Name = $"{ModEntry.ModId}_Launcher",
        DisplayName = Translation.Get("Launcher.Name"),
        Description = Translation.Get("Launcher.Description"),
        Type = "Crafting",
        Category = 0,
        Price = 100,
        Texture = AssetPath,
        SpriteIndex = 4,
        CustomFields = customFields,
    };

// Editing Shops
casino.Items.Add(new ShopItemData()
{
    Id = $"{ModEntry.ModId}_Launcher (Recipe)",
    ItemId = $"{ModEntry.ModId}_Launcher",
    Price = 2500,
    IsRecipe = true,
    ObjectInternalName = $"{ModEntry.ModId}_Launcher"
});
#

Fixed it!

prisma wing
#

Hey, I'm trying to add a simple 16x48 PNG to the town map so it shows in all seasons using Content Patcher.
It's not appearing with EditMap or EditImage. Any help with the correct setup would be great!"

urban patrol
#

!json

ocean sailBOT
#

JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.

If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.

When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.

urban patrol
#

!log and your log as well

ocean sailBOT
#

Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.

Please share your SMAPI log file. To do so:

  1. Open this page: smapi.io/log.
  2. Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
  3. After uploading, it will show a green box with a URL to share. Post that URL here.

Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didn’t occur in your last session, please load the game to the point where the issue occurs, then upload the log.

barren tapir
next plaza
void aspen
#

vr

#

nicee

#

I think Ive seen some video of the vr gameplay

#

could be from you as well

barren tapir
#

OH DEAR GOD, PENNY IS MASSIVE

next plaza
void aspen
#

what headset do you use?

severe cairn
barren tapir
next plaza
void aspen
#

I use quest 2 with the wifi link thing, really hope to see the mod one day!

#

is everything fully renders inside of the game engine sdv uses?

#

I never thought to see 3d in a stadew valley

barren tapir
#

It's a cool concept, but I can't. Just something about it makes me queasy πŸ˜…

#

Also, tall penny is very intimidating

void aspen
#

probably billboard perspective issue

#

imagine 3d npcs walking around

next plaza
golden spire
#

dizzy

next plaza
golden spire
#

2d sprites in 3d environments gives me so many nostalgia feelings of 90s adventure\rpg games

next plaza
#

Eventually I want 3d models for everything, in which case the sprites will only appear if someone has modded items or something

golden spire
#

I think the 2d sprites have a certain charm personally

#

obviously works better for certain sprites more than others

next plaza
#

Yeah, things like buildings are just not practical to stay as sprites

next plaza
#

Things like that are the first priority. Also NPCs (because of some animations being tied to facing direction in 2D)

golden spire
#

kiss me... not the air to your side...

next plaza
severe cairn
#

yeah it'll be like mario64 w some of its billboards

#

that just look 3D...

next plaza
#

I expect it to look less uncanny once not everything is a billboard

#

And the locations are more filled out with the proper decorations, etc.

golden spire
fierce vault
#

I just spent a while adding on to an npc's house until I remembered that you can't expand to the map to the left SDVpufferchickcry

#

(It was a pre-existing npc dwelling, ofc. It would destroy a ton of schedules)

#

work wasted lol

void aspen
#

wifi ones has almost no latency but depending on the signal it lowers the quality of the image

#

for a moment when it happened for the first time I though my eyes gave up on me

golden spire
#

the dark borders of the negative world.

barren tapir
barren tapir
next plaza
barren tapir
#

How would a C# mod spawn monsters on a map?

next plaza
#

...I have a script I use for Console Code for that exact purpose (including in that VR video), hold on

#
for ( int i = 0; i < 8; ++i )
{
    float dir = (float)Game1.random.NextDouble() * MathF.PI * 2;
    float dist = (2 + (float)Game1.random.NextDouble() * 4) * Game1.tileSize;
    Vector2 pos = Game1.player.StandingPixel.ToVector2() + new Vector2(MathF.Cos( dir ) * dist, MathF.Sin( dir ) * dist);
    pos.Y += 8 * Game1.tileSize;

    StardewValley.Monsters.Monster m = null;
    switch ( Game1.random.Next( 3 ) )
    {
        case 0: m = new StardewValley.Monsters.GreenSlime( pos ); break;
        case 1: m = new StardewValley.Monsters.Bat( pos ); break;
        case 2: m = new StardewValley.Monsters.RockGolem( pos ); break;
    }
    m.health.Value = m.maxHealth.Value = 100;
    m.damageToFarmer.Value = 0;
    m.resilience.Value = 0;

    Game1.player.currentLocation.characters.Add( m );
    Console.WriteLine($"spawned {m} at {pos} {Game1.player.StandingPixel}+Y8 {dir} {dist}");
}
barren tapir
#

BTW, in case I forgot to mention it, I do genuinely think your 3D SV is impressive! It's just probably not my cup of tea πŸ˜…

next plaza
#

Spawns slimes, bats, and golems centered around 8 tiles south of the player. All with 100 health, no defense, and can't hurt you

barren tapir
#

Dope. Thanks!

next plaza
barren tapir
#

Fair! Most of the mods I've made have been primarily for myself πŸ˜…

ornate drift
#

wawa

blissful panther
#

It's really funny to me that my second most downloaded mod was made to help with something I barely even do in the game.

next plaza
#

(I've been occasionally working on one manually. It's a pain)

blissful panther
#

It would be nice to just get that working normally in VR too...

next plaza
#

Once the mod is ready and out, I'm willing to help anyone foolish brave enough to add support for their own mods.

I'm aiming for it to be relatively easy for anyone who does want to.

#

There's technically no API yet, but a bunch of things should be Pintail-able already

#

Like the game mode system, or the cursors used to control pointing/interacting

#

(I'll be adding a simple no-hard-dep-needed method for getting what is currently selected by each cursor, too)

#

(Including objects / animals / terrainfeatures / etc., and more permanent stuff like tiles or walls)

barren tapir
#

Is there a source detailing the stats of each monster in the game?

next plaza
#

Data/Monsters should have it I think? Can't recall if it's a data model in 1.6.15 or not though

next plaza
barren tapir
next plaza
barren tapir
#

And just double checking, creating a new "DinoMonster" instance would use the default stats in Data/Monsters unless overriden?

next plaza
#

Yes, and passing a name in to the constructor for most monsters will use that stat block from the file instead

barren tapir
#

Dope

blissful panther
dusk terrace
#

is it weird for a mod to include a copy of spacecore in its files as dependency?

barren tapir
#

No

lucid iron
barren tapir
#

Unless you mean copying spacecore in its entirety

next plaza
uncut viper
#

That is very weird yes

lucid iron
#

like they didnt exclude the dll from being included in their csproj

next plaza
#

Very weird, but an easy mistake to make

lucid iron
#

so it got copied over

next plaza
#

I do it sometimes too

lucid iron
#

if they were hard referencing spacecore and didnt know it could happen

dusk terrace
#

how could I fix it?

lucid iron
#

you have to have their source and fix their csproj

barren tapir
#

Wait, so are they including the entirety of spacecore, or are they just including it in their manifest as a dependency?

lucid iron
#

its a build problem usually

#

now if it was like, spacecore manifest.json and all

#

then they prob just dont understand that u should use dependencies by asking ppl to download it SMCPufferjail

dusk terrace
#

nah no manifest, just the dlls
I'm seeing on taking over this mod and well... there's that lol

next plaza
lucid iron
#

which mod is it in particular?

dusk terrace
#

skill prestige

barren tapir
blissful panther
barren tapir
#

I tried to modify skill prestige for my own personal use before learning about mastery extended

next plaza
#

Time for dinner with parents for mother's day, ping me with any followup questions

uncut viper
#

Aren't skills entirely doable via its API

jaunty shuttle
lucid iron
#

no iirc there's a bunch of stuff you gotta subclass

dusk terrace
#

not entirely... if you want to add a skill yes
but prestige needs to access the professions which aren't accessible

uncut viper
#

Interesting

lucid iron
#

tbh it prob could be done if we refactor all of it to interfaces?

#

i dunno tbh i never made a skill

uncut viper
#

Who is we

lucid iron
#

royal

next plaza
#

(Okay no dinner yet, sitting in car on the way)

warm field
dusk terrace
#

idk who we is either, but I support their initative to getting this done SDVpufferthumbsup

lucid iron
#

i vote we scope creep pathos on this

next plaza
# jaunty shuttle I’d definitely be interested- it seemed like they’re voxel-ish textures from the...

They’re just .gltf model files that get loaded. Things that don’t have a model are billboards, like for most things you see there.

Locations are a bit different though. No gltf information, it’s information in map properties and new tile layers that you can patch in even with content patcher.

There is a location editor to make the relevant patches, because making them in Tiled is tedious without a proper visual for it

#

Oh and the TV has special support so that it actually shows on the screen, but it is super easy to reuse that for any TV

next plaza
lucid iron
#

was there a period of sdv modding where smapi had the concept of mod provided api but no pintail yet?

#

i was kinda wondering cus CP docs were also talking about how u had to hard reference ContentPatcher.dll (this is no longer true)

next plaza
uncut viper
#

Well afaik its conditions API isnt available via Pintail regardless

jaunty shuttle
next plaza
#

Pintail was written by Shockah specifically to make us able to do more, if I remember right

next plaza
lucid iron
#

i thought u just need to copy the relevant IConditions now Bolb

#

at least it worked when i tried

jaunty shuttle
#

Yayy awesome

next plaza
#

Before the pintail support, the interface thing was doable, but not recursively.

And before that, you basically had to hard reference. Which was how it was when I wrote the skill API

#

You also couldn’t do custom enums and some other stuff in that initial interface impl

uncut viper
#

I mightve misread it from that same hard reference mention tbh

barren tapir
#

How would a C# get a map by name? I'm trying to spawn monsters on a specific map

lucid iron
#

theres a helper on Game1 something get location

barren tapir
#

Thanks

#

getLocationFromName

lucid iron
#

i wouldnt actually get the location like that though\

#

for mp reasons, i would spawn the monster only when player enters the location

#

prob wanna clean them up when all players leave too

barren tapir
#

A) What does mp mean?
and
B) Yeah, this is currently strictly for testing purposes rn

lucid iron
#

multiplayer

barren tapir
#

Ah. Gotcha

lucid iron
#

for testing it's still easier to just

#

make a Warp get and check the new location

#

if u need something just to spawn monsters there is a debug console command

barren tapir
#

I gtg, dinner's here. But thanks for the help!

signal nova
#

Hey guys, I have a quick question. Is there any reason development-wise as to why there are not many mods that seem to overhaul mines or add new monsters or fish to them? Are the mines a location that is hard to code things into or modify?

lucid iron
#

but i know someone is making one bolbsun

signal nova
lucid iron
#

well the mines dont really exist as actual locations

#

they r transient places made by game

#

other jank include the lv100 fish hardcoding

void aspen
#

I wish mines and volcano wasn't that hardcoded

next plaza
#

One day I’ll continue my old prototype of a mine replacement…

lucid iron
#

many mods choose to just make their own dungeon-esque places

next plaza
#

(One day = after the 3d mod at minimum )

lucid iron
#

instead of touching vanilla mines

void aspen
#

sdv 1.8 update with 3d graphics

severe cairn
#

TL;DR hardcoded :(
basically from what I've gathered

void aspen
#

1.9 full vr and body tracking support

signal nova
void aspen
next plaza
#

I have one mod that makes things you place in the mines persist across days, but it’s pretty unknown

signal nova
#

Because for cutscenes it makes sense - base game Stardew valley doesn't play cutscenes IN the mines, but there are fish, monsters and ores in them.

next plaza
signal nova
#

So I wonder is that a thing that can be modified to add new content in them?

void aspen
#

ikk its just sillier this way

lucid iron
#

for example

next plaza
lucid iron
next plaza
#

(I backed the FluxPose trackers, so probably that if it does deliver through)

signal nova
#

I was also considering adding Marlon cutscenes for when you reach treasure levels (that play on those), but those seem much harder to do.

lucid iron
#

new monsters is own can of worms

next plaza
#

<flashbacks to Monsters: the Framework>

royal stump
#

ore can be done with like 3 different frameworks, fish might be doable if you don't want to replace the existing ones?, monsters are a pain

next plaza
#

New monster variants will be easier in 1.6.16 I think?

lucid iron
#

but ftm can add monster at least, as long as u dont need anything special out of them

royal stump
#

(FTM can do that soon, but the beta's not ready because I haven't been able to work on it for like 2 months again SDViconghost)

next plaza
#

New ones entirely with custom behavior, not so much

lucid iron
next plaza
royal stump
#

FTM 1.x limitation is that it spawns stuff at preset times or start of day, so if nobody happens to be in the level at the right time, new monsters won't spawn

lucid iron
#

this one covers more than just mines but it does lean in that direction

#

fish i wanna say the 20 and 40 ones r just underground mines whatever right

royal stump
severe cairn
lucid iron
#

i forget if 100 is literally eels only

severe cairn
#

100 is eels and trash i think

lucid iron
#

or if u just cant not have eel

void aspen
#

eels and trash πŸ˜‹

#

I wonder if level 100 pool will ever have volcano lava and not some red water

#

cuz I suppose it was lava back then

signal nova
#

Actually, what I was thinking of doing would be slightly more complex

signal nova
#

I had the idea of as soon as one would reach the last level of the mines a cutscene would activate that would allow new creatures, mobs and fish to spawn in the mines

#

Like a Terraria Hardmode type of thing

royal stump
signal nova
#

And through The Unlockable Bundles framework, I would gate progression with mob drops/other items obtained from these new things that spawn

#

Though, I have not looked deeper into it

royal stump
lucid iron
#

i think so

#

i tried when i was updating docs for pathos

#

like instead of hard ref go copy the interfaces Bolb

severe cairn
royal stump
#

SDVpufferthumbsup I'll make a note to try that, haven't touched the old ftm pack format in a while

signal nova
lucid iron
#

yea i wrote it

signal nova
#

Which is only a reskin of monsters

lucid iron
#

yea thats what it do, but u can alter drops too

#

goes back to "custom monsters is also a pain, independent of mines being a pain"

signal nova
#

Can I somehow detect if the killed monster is a specific variety and then replicate a loottable to drop items?

lucid iron
#

thats what it does

#

bog/aba uses this a lot in monster mash because they got a sort of shiny hunting find the rare skeleton deal going on

signal nova
#

Is there a framework for adding new fish that I could use for adding new fish into the mines?

#

If I recall there was one of the "new fishes" mods that added new fish into the mines.

next plaza
#

You can add fish with just content patcher for the most part, I think

lucid iron
#

yea i think floor 20 and 40 just gets the fish from the undergroundmine entry

signal nova
#

Are the floor levels separate locations with a name?

lucid iron
#

not really

signal nova
#

No I meant the ones with fish

lucid iron
#

the answer is still not really

signal nova
#

Cool πŸ˜‚

lucid iron
#

they only have 1 set of location data (undergroundmine)

royal stump
#

technically UndergroundMinefloor number here, but yeah, they probably share a Data/Locations entry

#

(probably in that I don't touch that stuff)

lucid iron
#

but u can use gsq to check the actual location name

#

which is actually different despite 1 data SMCPufferjail

#

there is this extremely niche framework too

#

should do exactly what it say on the tin

signal nova
lucid iron
#

that should indicate how hardcoded it is normally Dokkan

royal stump
#

I think EMP can also make the mine get fish from somewhere else entirely, but using that to add new fish would be even more convoluted SDVpuffermlem

lucid iron
#

well map editing does work normally too

#

this mod just edits the actual tmx map with the big spiral

#

emp which lets u do fish from tile data can work that way

signal nova
#

Which I don't think might be possible with some of these frameworks

lucid iron
#

i have no idea but their desc doesnt say anything

#

you can always write your own C# tho Dokkan

signal nova
#

Yeah, that's what I'd like to do.

lucid iron
#

sometimes the problem isnt "it's hard" and more that it's too niche for anyone to bother

signal nova
#

Is that possible to achieve through custom coding?

#

Because I'm not familiar with C#

lucid iron
#

you can do anything in C#

signal nova
#

Okay, neat

lucid iron
#

only thing really stopping u would be compat concerns

royal stump
#

looks like the minefish framework doesn't do conditions, since it's not a CP framework

#

EMP does since it's data asset or* map properties, but yeah, only handles redirects and not a specific list of fish

lucid iron
#

i think if u feel committed to it

signal nova
#

This one adds new fish to mines

#

But it doesn't seem to use any frameworks to do so

lucid iron
#

just MineShaft.getFish prefix and then redirect to undergroundmine<floor> from Data/Locations (if it exist)

#

but i think doing append to undergroundmine fish list will become sufficient once we get that GSQ which let u check current floor Bolb

next plaza
lucid iron
#

(as long as you dont mind inability to remove lava eel or whatever)

signal nova
#

No, I do not mind

lucid iron
#

yea then i'd just try this for now Dokkan

royal stump
#

MNF does this in just CP, like chu was mentioning

"Target": "Data/Locations",
"TargetField": [
  "UndergroundMine",
  "Fish",
],
"Entries": {
  "MNF.MoreNewFish_barreleye": {
    "Id": "MNF.MoreNewFish_barreleye",
    "ItemId": "(O)MNF.MoreNewFish_barreleye",
//etc```
lucid iron
#

its better to know what will work and wont b4 diving into the spaget

signal nova
severe cairn
#

UndergroundMine only has fish that are available all level yeah, looked into all the jsons myself and there are no specific floors, nor is icepip, ghostfish or lava eel there

#

gotta add in C#, unless adding like. a new "custom location" works

lucid iron
#

you know how fish works for normal locations right

void aspen
#

so annoying

severe cairn
#

MineShaft::getFish perhaps

lucid iron
#

there be a location whose name might be Woods let's say

#

and in Data/Location there's a entry for Woods, that have a list called Fish

#

the thing about mines is that even though you are going from floor to floor

#

there is only 1 Data/Location data entry called UndergroundMine

royal stump
lucid iron
#

however, the thing in Fish is a type of item spawn data

#

and it supports the use of Condition (game state queries) to control whether the fish will appear

#

this combined with quirk that mines do get different location names means you can do LOCATION_NAME Here UndergroundMine20 to know ah im on floor 20 allow this fish

#

more new fish didnt do it probably just for design reasons i wouldnt know why Dokkan

signal nova
#

Oh, I understand now.

lucid iron
#

in 1.6.16 there's a new gsq LOCATION_MINE_LEVEL that checks for a level range too

#

this would make it easier to add a body of water on some floors and then say ok floor 20 to 30 has this fish

#

i plan on backporting that MMAP it if u need it now

signal nova
#

MMAP?

lucid iron
#

its not that relevant to the fish talk, but my friend asked for LOCATION_MINE_LEVEL for their wip mod

signal nova
#

I think it could definitely help out just for adding specific monsters/ores/fish, so I wouldn't mind.

#

Could be helpful.

lucid iron
#

yea and when we get 1.6.16 u can just stop requiring it Dokkan

#

LOCATION_NAME Here UndergroundMine20 will work in .15 though

#

so if u r fine with write LOCATION_NAME Here UndergroundMine20 UndergroundMine21 UndergroundMine22 etc it should serve same purpose

barren tapir
#

I suppose it'd help if I were actually calling the function I'm trying to test

barren tapir
#

Strictly hypothetically speaking, how would one remove all monsters from a certain location?

dusk terrace
barren tapir
#

Even more strictly hypothetically speaking, making sure monsters despawn at the end of the day so that you aren't bombarded with one million enemies once you hypothetically reach ginger island

dusk terrace
barren tapir
#

I was kinda hoping to add this to OnDayEnd

dusk terrace
#

no idea then SDVkrobusgiggle

barren tapir
inland rain
#

and sdv, and an os, and a computer

#

and electricity

whole prism
# barren tapir Strictly hypothetically speaking, how would one remove all monsters from a certa...

Journal:

Title: The Great Attack of the Dinos

Page 1: This may be the first and last page I write. I was helping Leo with the parrots that kept eating the pineapples he was growing, and suddenly....these dino's came out of the grass, and were barricading me! I'm lucky that I got out of there alive.

Page 2: It's been some hours now, I- wait, I see another dino, hey why is it coming clos-

Player Tip: Hmm... the rest of the page seems burnt, maybe I should investigate the area

dusk terrace
#

er what was it I should put on unofficial updates so the versioning doesn't get all messed up if the original author comes back and uploads a lower version number? SDVpufferthinkblob

#

just "Version": "1.5.0-unofficial" ?

dusk terrace
#

ah thanks, that's the page I was looking for SDVpufferthumbsup

royal rover
#

My Lazy Days mod just got updated to version 1.1.0! It now includes extensive configuration options, including the ability to easily enable and disable the mod whenever you want!

Lazy Days is a game mechanics overhaul to remove time pressure from the game. Is the clock stressing you out? Then give this a try!
https://www.nexusmods.com/stardewvalley/mods/45025

Nexus Mods :: Stardew Valley

Lazy Days is a game mechanics overhaul to remove time pressure from the game. Is the clock stressing you out? Then give this a try!

jaunty shuttle
#

-# do you want it showcased?

royal rover
dusk terrace
#

done

royal rover
#

I'm really excited about this update. Literally everything in the mod is configurable now, lmao.

dusk terrace
#

heh... called me out too soon

#

-# new version still isn't ready

torpid sparrow
#

Oh that reminds me I have to write an article that was β€œcoming soon” LOLOLOL

hard fern
#

Mot authors are more likely to read a mod page's articles ... Right...

dusk terrace
#

nexus articles? what's that /jk

ornate locust
#

oh you JKed like right as I pasted

dusk terrace
#

honestly, can't say I've ever read anything in the article section though

#

wouldn't rely on it too heavily for super important stuff

ornate locust
#

I generally look there if I can't find the information I need on the page

barren tapir
#

I JUST HAD AN IDEA

dusk terrace
#

yea usually I look for a github link on the main page... and it's been there every time so πŸ€·β€β™‚οΈ

ornate locust
#

or if the page says they put something in articles

barren tapir
#

WOAH, MY NAME IS RAINBOW?!?!

hard fern
#

U talk lots

calm nebula
#

That's the role for being chatty yeah

dusk terrace
#

woah, they evolved

barren tapir
#

Yall better be careful about talking to Bill

verbal glacier
#

hi fellow rainbow

barren tapir
#

Hi!

#

I'm kinda tempted to begin hiding super vague and mysterious lore in articles

#

-# And I think I know who the lore would be about...

#

#Stardew-ARG-When?!?

dusk terrace
whole prism
#

yes yes

#

very important

barren tapir
#

BRB, gotta write an article

dusk terrace
lucid iron
#

pufferduck...

subtle spear
#

Hello fellow modders! Does anyone know how to add multiple conditions to a mail flag for a trigger action? Or is there a better way to make the game go "if this and this is true, do this"?

whole prism
#

thats cursed

torpid sparrow
#

DO separate them by commas

#

That’s what I do

#

You could also add a when condition on the patch but for a trigger action using the condition field should be fine

uncut viper
#

Do separate the GSQs by commas

torpid sparrow
#

Oh ok I wasn’t sure if it was or wasn’t SDVpuffersquee

uncut viper
#

That is how you do AND conditions

#

an OR would use the "ANY" gsq

torpid sparrow
#

When do you not separate by commas? I thought there was a case for that but I can’t remember

#

for AND*

subtle spear
#

"{{ModId}}_ShanexRosalieBFFFlagTrigger": { "Id": "Shane x Rosalie BFF Flag Trigger", "Trigger": "DayEnding", "Condition": ["PLAYER_HAS_SEEN_EVENT Current {{ModId}}_ShaneRosalieSneezeEvent", "!PLAYER_HAS_SEEN_EVENT Current {{ModId}}_Rosalie6HeartEvent", "PLAYER_HAS_HEARTS Current {{ModId}}_Rosalie 6" ], "Action": "AddMail Current stardewaly.rosalie_ShanexRosalieBFFFlag now" }

#

cause I had it like this and it didn't seem to work

lucid iron
torpid sparrow
#

Scratches head

royal stump
#

condition is only a single string

uncut viper
#

There isnt, unless the query youre using accepts multiple arguments and treats them like an AND, but it still wouldnt be incorrect to use commas instead and just write the query twice

royal stump
#
"Condition": "PLAYER_HAS_SEEN_EVENT Current {{ModId}}_ShaneRosalieSneezeEvent, !PLAYER_HAS_SEEN_EVENT Current {{ModId}}_Rosalie6HeartEvent",
barren tapir
#

BOOM...
... It begins

uncut viper
#

and I dont think any vanilla gsqs work that way anyway

proven spindle
uncut viper
#

that is not an AND

torpid sparrow
#

Mayhaps I read any as and

proven spindle
#

Yeah but it is a case of not using commas

uncut viper
#

wem asked for AND though

torpid sparrow
#

Memory fickle

subtle spear
#

okay! if I already have an event with the precondition that the player received the flag when the conditions are met, then what should I have the letter say for the action? Should I make it say nothing since the flag has been recieved and that's all that needs to be done?

#

i don't want it to actually "say" anything since it's just a flag

uncut viper
#

If you send the letter straight to the "received" inbox it skips the mailbox

#

They wont get an actual letter

subtle spear
#

thank you! should i use the null command then so it doesn't do anything but just exist?

uncut viper
#

No, just send the mail flag to that inbox

barren tapir
#

I have a command named after me?!

uncut viper
#

Instead of now

#

AddMail Current stardewaly.rosalie_ShanexRosalieBFFFlag received

#

double check my spelling of received

subtle spear
#

okay! but for the flag itself should it have anythign in it? Because I do need to make a "letter" for it to work

uncut viper
#

you dont need a letter

torpid sparrow
#

Naur

uncut viper
#

You send it to the received inbox. It counts as being received but skips the mailbox. The player will never see it

subtle spear
#

I tried it without one existing and the game told me that they couldn't send the flag because the letter didnt exist

uncut viper
#

You do not need anything in Data/mail

subtle spear
#

okay I see!

#

thank yoy!

#

*thank you!

opaque cobalt
#

Two questions.

  1. is it possible to set overlays to have certain ones load after? Say an eye color overlay apply before glasses overlay (I know dumb as easy to combine those, but bear with me)
  2. If 1 is not possible, just to double check, I can have an overlay trigger only if two configs are set correct? Say for overlay delta to apply, both X and Y need to be marked yes in configs
uncut viper
#

Within your own mod, excepting any priority differences, your EditImages are applied in the order you have them in your json

royal stump
#

for 2) yes, assuming you mean your own config settings & not a third-party mod (though there's a cross-config mod for that), just check both tokens in the When conditions for a patch

opaque cobalt
#

thanks for the answers Button and Esca. We shall now see if I am smart enough to put options in order or if I need to use the more cumbersome, but fool-proof option two.

uncut viper
#

You can also lean into priority and just make the 2nd one apply Late

subtle spear
#

Question!! I have an event that depends on whether or not my NPC arrived before or after Shane's 6 heart event. What should I put in for the "$query" or is there another way to signal to the game which dialogue to use?

#

follow up, how do I make my NPC invisible before conditions are met?

opaque cobalt
lucid iron
#

Late doesn't mean Slow

#

It's just order of operations and game will always apply all edits to an asset

vernal crest
subtle spear
vernal crest
# subtle spear The second one, and Not Yet Unlocked
  1. Okay, and is it just one line of dialogue that you're changing? If so, it'd be $query PLAYER_HAS_SEEN_EVENT Current <event id># <true> | <false> (if you only want to check the current player - change Current if you want that to be different).

  2. That's the UnlockConditions field in Data/Characters. You put a GSQ in there.

subtle spear
signal nova
#

Is stardewmodding.wiki.gg a good website to use for modding documentation step by step walkthroughs or are there better places?

lucid iron
#

Yes but the stuff there tend to be specific guides

#

You'd want the main wiki modding namespace for basics

#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

vernal crest
subtle spear
# vernal crest 1. I think there are two checks here then? First is whether the player has seen ...
  1. Right now I just have it that the player is at 1 heart with Gus but that's temporary. Then a cut scene starts with him getting ready for her to arrive.

I do have a dialogue for her for after Shane's 6 heart event (CA didn't make it a CT but characters like Jodi comment on it)

  1. Sorry I wasn't sure where or how to put it in for her arrival (it's been a while since I worked on her basics like her personality so if it's there I'm sorry!!)
vernal crest
# subtle spear 1. Right now I just have it that the player is at 1 heart with Gus but that's te...
  1. Okay, well, I think what you'd need to do is put a check into her arrival event (or dialogue or something if you're not giving her an event) to see if Shane's 6 heart event has already played. If it has, set a mail flag. Then in this later event, your query would check if that mail flag was present or not. That's the main way that I can think of to check that, since you won't be able to check at the time of this later event whether she arrived before or after Shane's 6 heart event.

(All events create CTs, by the way ^_^)

  1. You put it in the field UnlockConditions, like I said, and as for what to put in there - well that depends on what you choose to have unlock her. It needs to be a GSQ and which GSQ you choose depends on what you want to have determine when she arrives.
subtle spear
vernal crest
torpid sparrow
#

Are the auto generated CTs all 3 days

vernal crest
#

Wiki says 4 days

royal stump
opaque cobalt
#

Just to double check, if the both option is selected for these two outfits it will be a 50/50 for which beach outfit loads correct?

"{{ModId}}.Penny.Beach": {
"Id": "{{ModId}}.Penny.Beach",
"Sprite": "Characters/Penny_Beach",
"Portrait": "Portraits/Penny_Beach",
"When": {
"Penny Beach Skin": "Beach, Both"
},
"IsIslandAttire": true,
"Precedence": -11000,
"Weight": 1,
},
"{{ModId}}.Penny.Snorkeling": {
"Id": "{{ModId}}.Penny.Snorkeling",
"Sprite": "Characters/Penny_Snorkeling",
"Portrait": "Portraits/Penny_Snorkeling",
"When": {
"Penny Beach Skin": "Snorkeling, Both"
},
"IsIslandAttire": true,
"Precedence": -11000,
"Weight": 1,
},

deep cypress
#

Lavinia is back, if anyone wondered. I accidentally (I do not know how) removed her Include entry where the Data/Characters edit is....Due to complex legacy reasons, the Data/CHaracters edit lives in a different place than the Load Portrait, etc. Anyways, A Interesting Lesson: it appears that if a character has a portrait loaded, they on some level exist, even if they do not exist. There are likely cunning applications for this.

late pewter
#

I just had the stupidest silly idea ever but I regrettably lack the skill to make it.

#

Solve ALL the Problems... With BUNDLES.
Fix WIlly's Boat? Bundles

#

Solve the Wizard's Mairrage problems? Bundles

#

Golden Walnuts? Who needs 'em? We got Bundles!

#

Bundles

hollow hatch
#

random question

#

is it possible to force grandpas farm to give the farm expansion

#

mainly for planning reasons lol

hollow hatch
#

i figured it out

devout otter
subtle condor
#

Does someone know how to change the output folder for a C# mod made with Visual Studio 2022? It seems like the Pathoschild NuGet just overrides the output path, but because my mod does contain a bunch of content packs as well, the output needs to be one folder deeper and I can't figure out how to do it XD If I put the path into Output Path, it puts something else in the folder, but not the dll and manifest files SDVpufferfear does someone know how to like overwrite the forced output Path or something? Or whatever would fix that? XD

#

As for now, I am just manually moving the files into the right folder which is... quite annoying XD

calm nebula
#

Are you using this