#making-mods-general

1 messages · Page 255 of 1

brittle pasture
#

and why is it older than I thought

ornate trellis
#

you spelled beautiful wrong

rigid musk
#

this one already scares me enough ... i dont need him to t pose on me he already does by existing

ornate trellis
#

yee sadly you cant have the t pose its too wide

rigid musk
#

it CAN be a furniture item though...

ornate trellis
#

TRUE

#

you know what that means.....get going /j

rigid musk
ornate trellis
#

hm....

rigid musk
#

players buy the t posing qi from the qi arena shop

ornate trellis
#

i wonder what other totally random thing would be great qi-fied

rigid musk
#

everything

ornate trellis
#

imagine Qi mines

#

....

brittle pasture
#

qi sprinklers
do you know those statues where there's water spewing from the mouth

rigid musk
#

I both thought of bombs and then also the actual mines

ornate trellis
#

oh my god

ornate locust
#

there's worse options for sprinklers

#

Love being in some fancy, marble-carved location, a wonder of architecture, and someone's made a cherub peeing fountain

#

you took a stone-carving amount of effort here, WHY

rigid musk
#

because hehe funny ... i guess

brave fable
#

honest thought: you will die before you finish drawing the leaves on this tree

ornate trellis
#

but i like to suffer

#

gonna have some fisticuffs with death

ornate locust
#

You could just make it be the very bottom/roots of a super big tree

#

"yeah, all the leaves? offscreen"

brave fable
#

there's suffering and then there's climbing a brick wall with your teeth

ornate locust
#

"this is just a big stump for all you can see, the rest of it is way offscreen"

ornate trellis
#

also sprinkler is too small to have a qi face i found out(or i have skill issues)

brittle pasture
#

I was thinking just have his head in the world emoji(?) sprite but shrink it further

#

and have 4 of em, front/left/right/back

true coyote
#

I know I'm not the mod author for bees plus, but they have a bug where if beehouse a has item x and beehouse b has item y, if you collect from them "too fast" the second item becomes whatever the first item picked was. They didn't define how fast too fast was, but it did happen to me with a good 5-10 seconds between behouses and I was curious why that may be

ornate trellis
#

i rest my case at it looking bad xD (theres no qi emote in emotes, hm) anyway, enough tomfoolery lol

#

i am realizing i should probs take a break from writing out my events cuz i am finding every thing to do instead of continueing

rigid musk
#

there is this one

rigid musk
lucid iron
#

QiBaby

hard fern
#

a qi baby....

#

baby qi

ornate locust
#

babqi

rigid musk
#

😭 more qi babies sounds like a nightmare good golly

ornate trellis
rigid musk
#

I still have to make the t- oh god

brittle pasture
lucid iron
#

Furniture

brittle pasture
ornate trellis
lucid iron
#

Oh no

rigid musk
#

oh my god you made them cool

#

i literally just recolored the kids i didnt - memeDogKek

#

he would look cooler with sunglasses wouldnt he...

#

Qi would put sunglasses on his kids wouldnt he

brittle pasture
# ornate trellis H

the baby was born with those spectacles
those are not accessories, but a bodily extension like the anglerfish's angler

rigid musk
ornate trellis
#

do it

#

girl jsut gets his mullet

rigid musk
#

oh m ygod

ornate trellis
#

do it i double dare you /j

rigid musk
#

alternate alternate baby sprites - do you want your children to look rad as hell? use these

ornate trellis
#

lmao

#

hmm

#

what else...

lucid iron
#

Qi House

#

There's already qi cow but what of qi chimkin

#

Just stick sunglasses on blue chicken ez

ornate locust
#

OH A QICKEN

#

because the name Qi is generally pronounced "Chi"

#

wakka wakka

rigid musk
ornate trellis
#

i originally named my folder Qinsanity if thats no testament

lucid iron
#

Welcome to the qi zone

ornate trellis
#

my silliness knows no bounds

rigid musk
#

I love all of the qi things youve made honestly theyre neat

ornate trellis
#

even t pose Qi?

rigid musk
#

Even T pose qi SDVpuffersquee

ornate trellis
#

oh my

lucid iron
#

what do u think the relation between qi and joja is

ornate trellis
#

man, I started drawing my tree and I already suffer

orchid glade
#

Please release all these Qi things

ornate trellis
#

it looks bad, man

lucid iron
#

is there anyone who likes doing trees

ornate trellis
#

i do when they arent this big

rigid musk
rigid musk
#

Maybe not that intense but I would imagine he doesn't like them very much because of the general 'easy way' of doing things (lots of shortcuts for profit etc)

brisk wedge
uncut viper
#

it mighttve broken in 1.6.9 i guess? but

  1. why do you need it
  2. its not really a making mods question
brisk wedge
#

I'm trying to debug my mod. I think I'll just make my own console commands for any info I need to get

uncut viper
#

this is maybe like the worst way i can imagine trying to debug your own C# mod

#

just add an OnButtonPressed event to do debug logging stuff when you hit F2 or something

shadow pagoda
#

bumping this

gentle rose
#

all time favourite mod. rest in pieces buddy

latent mauve
#

woo, tentative success on BV compatibility and recolor support (Earthy and VPR) for the apartment mod! And also got a shop configured for Leah's house with the spouse portraits.

golden basin
ornate locust
#

Trees mentioned, THE CLOWN RISES

golden basin
#

👁️ 👁️

#

I like trees

#

I can't draw one right now but maybe I can help with the one being made

uncut viper
#

i think chu was just commenting on void's tree suffering

golden basin
#

Ooo I see

#

I see the tree size

#

I suggest a twisted bark texture

brittle pasture
#

I like trees. Mossy trees specifically.
Expanded adds new wild trees, but make them unable to have moss, which is a crime

#

tbh I think I just like moss

golden basin
#

I also add trees without moss...

#

I didn't feel like figuring moss out xD

lucid iron
golden basin
#

I love foliage and trees way too much

#

Currently I'm practicing 16x16 animals tho

calm nebula
ornate locust
#

do you guys not have mossy trees?

#

I mean, I'm in Alabama, mossy trees just kinda happen

ornate trellis
#

I cannot for the life of me make it look 3D in this size

calm nebula
#

mossy tree ❤️

brittle pasture
#

that is a beautiful amount of moss

calm nebula
#

This is Vancouver

#

I like legit didn't know mossy trees were real

ornate locust
#

That is a lot of moss!

#

but yeah moss loves trees, just depends on the moss

rigid musk
#

Trees will haunt my nightmares for years to come once I do my apple trees

ornate locust
#

Like Spanish Moss, that stuff loooves trees

rigid musk
#

How does one make 12 unique apple trees? suffering thats how

#

spanish moss on trees is so gorgeous

calm nebula
#

Like moss on tree...normal

#

Moss entirely covering tree...

ornate locust
#

It's pretty damp here in general, so the moss goes off

#

you can even find multiple kinds on the same tree

ornate trellis
#

i think my biggest mistake was to just eyeball the shape

#

im gonna head over to the art channel and cry there probably

shut mountain
#

Does anyone perhaps know what PackedValue means in SaveGameInfo? I'm trying to change my farmer's hair and eye color via that file since the sliders on my phone are tiny and horrible, but I wish to not break things

exotic bridge
#

this has solved my steam data issue problem for now. thanks for the work around

ivory plume
#

Welcome!

ivory plume
# shut mountain Does anyone perhaps know what `PackedValue` means in SaveGameInfo? I'm trying to...

It's a single-value representation of the RGBA color values. Here's how it's calculated, in case you want to create a quick script to convert RGBA values to the packed value:

/// <summary>Constructs an RGBA color from scalars representing red, green, blue and alpha values.</summary>
/// <param name="r">Red component value from 0 to 255.</param>
/// <param name="g">Green component value from 0 to 255.</param>
/// <param name="b">Blue component value from 0 to 255.</param>
/// <param name="alpha">Alpha component value from 0 to 255.</param>
public Color(int r, int g, int b, int alpha)
{
    if (((r | g | b | alpha) & 0xFFFFFF00) != 0)
    {
        var clampedR = (uint)MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue);
        var clampedG = (uint)MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue);
        var clampedB = (uint)MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue);
        var clampedA = (uint)MathHelper.Clamp(alpha, Byte.MinValue, Byte.MaxValue);

        _packedValue = (clampedA << 24) | (clampedB << 16) | (clampedG << 8) | (clampedR);
    }
    else
    {
        _packedValue = ((uint)alpha << 24) | ((uint)b << 16) | ((uint)g << 8) | ((uint)r);
    }
}
shut mountain
sour sleet
#

I can't seem to add more than one buff to a custom item. I try, I don't get any errors, but I only have the first listed buff take effect.

shut mountain
#

On CP?

sour sleet
#

Yes

shut mountain
#

Idk how to make items with CP 😭 I'm sorry

ivory plume
shut mountain
#

Thank you sm!

#

Confirmed: PathosChild is awesome 😎

ivory plume
ivory plume
#

Can you post the version with both buffs, so we can see why it might not be working?

ivory plume
#

Okay, so it's one buff with two attributes? What does it show when you hover on it in-game?

sour sleet
#

Yes it is, it shows +2 Luck and doesn't mention Combat or give me the buff

brittle pasture
#

ah I recall that the new attributes added in 1.6.9 don't show icons

#

CombatLevel, AttackMultiplier, CriticalChanceMultiplier, CriticalPowerMultiplier, Immunity, KnockbackMultiplier, WeaponPrecisionMultiplier, and WeaponSpeedMultiplier

nova gale
#

yeah

#

I used them on my new alchemy potions, but no icons, as far as I can tell the buff is there, you just can't see it on the hover

sour sleet
#

Ahh ok, I've used CombatLevel

brittle pasture
#

you can consider using entries in Data/Buffs instead, and elaborate their effect in the description

nova gale
#

that's what i ended up doing

#

fair warning though: buffs stack unlike drink/food effects (because drink/food is a single buff that replaces with each new one)

#

but if you make foods with actual buffs then you can have all of them

sour sleet
#

Oh I have made a food item though

nova gale
#

right, what i mean is if you add it via an actual buff (isntead of the natural buff effects on the food item itself) then it becomes a seperate buff and stacks with other food or drink effects

ivory plume
#

(You can add a buff to Data/Buffs, then apply it using the BuffId field in the food's Data/Objects buffs list.)

nova gale
#

^

sour sleet
#

Ahh ok I gotcha. Thank you both SDVpuffersquee

brittle pasture
#

(also FYI extra combat levels do nothing other than trigger more and harder monster spawns. letting you know in case you thought it increases stats)

nova gale
#

so increasing combat level is almost a debuff 😛

sour sleet
#

Haha I thought it increased statsSDVkrobusgiggle

dusk mulch
#

im thinking of learning C#... is it worth it?

nova gale
#

sure?

gentle rose
#

that's a very vague question

dusk mulch
#

If I put 3 hours into learning it, but I can't do anything with it then it wouldnt be worth it

gentle rose
#

is there something you want to do with it?

calm nebula
#

This type of things depends

#

I don't think you'll learn enough c# to do much of all in 3 hrs

gentle rose
#

if the max amount of time you're willing to put in is 3 hours then no, it isn't

dusk mulch
vernal crest
#

If you put enough time and effort in, you'll be able to learn as much C# as you want

#

But it will be probably be a lot of time and effort - speaking from personal experience lol

#

I've spent hours and hours and hours trying to learn so far and can barely manage anything

gentle rose
#

"is it worth it" for c# for modding is like asking "is it worth it to learn to draw" or "is it worth it to learn a craft". We can't really answer that. Do you want to do it or not?

vernal crest
#

But I am enjoying it so it's been worth it

#

If you're just wanting to achieve an end without experiencing the means, better to put your effort towards earning money and then commission someone else for the C# lol

dusk mulch
calm nebula
#

One day I'll do more art haha

gentle rose
#

I want to do more art too

#

but crafty stuff is easier when you can't decide what to make haha

calm nebula
#

Yeahhhh

vernal crest
#

Ermagersh I managed to use a game method all by myself! DragonDance

gentle rose
#

is Elizabeth not a mathperson any more???

sour sleet
#

Does anyone know which parts of SDV Aquarium are C#?

calm nebula
#

I mean, I would know haha

#

Elizabeth is the better mathperson

gentle rose
#

oh, no, she is, discord is just being weird again

#

discord was showing me just the name Elizabeth and I got concerned that she abandoned the mathperson collective

calm nebula
#

No don't abandon me, Elizabeth!!!!

gentle rose
#

anyway back to playing this game I'm very bad at

oak dragon
#

Hi all, I have a problem, I tried to use getAllCharacters() to get the data of all the NPCs. But when it outputs I find that it outputs two Qi gentle, and there is no leo, kent and gil. Is this normal?
‘’’ public static readonly IList<NPC> NPCdata = Utility.getAllCharacters().Distinct().ToList(); // fix rare issue where the game duplicates an NPC (seems to happen when the player's child is born)’’’

rigid musk
#

Gil is a map tile iirc

#

Leo and Kent might not be spawned yet, and Qi has some weird hardcoded shenanigans

#

(there's like, the NPC Mr.Qi and then theres some weird references to other stuff for him in some places, so I think it makes sense for two to pop up)

oak dragon
#

Thank u Friendable QI

rigid musk
#

I am no longer Lily, I am become the very thing I created /silly

sour sleet
#

Probably a better question to ask is can I have a donation system (like the museum) in a CP mod?

vernal crest
#

Is there any way for me to change or intercept the vanilla method that adds the island mailbox? I need it to be created two tiles to the right.

lucid iron
#

there's a wip museum framework from button, soon™️

#

but you can use unlockable bundles for something similar PecoWant

sour sleet
#

Oh I don’t remember anyone answering. Ooo that’s good news SDVpufferthumbsup

calm nebula
#

What are you planning on

teal bridge
#

Use DataLoader.Characters if you just want the data; getAllCharacters would be to get the actual instances, and some instances may not exist yet at a given point in a playthrough.

#

(And Gil is not a character, right? Gil is furniture, or a map tile or something.)

oak dragon
# calm nebula Yes.

I m trying to make my mod compatible with other mods. Now npc list is set up manually by me and hardcoded

teal bridge
#

That doesn't really answer the question of what you are trying to do. The salient point is whether you actually need the NPC (character instance) or just the character data.

#

Because Leo literally does not exist until you get to the island, and Kent literally does not exist until year 2. They are not in the game. And mod-added NPCs may have similar rules.

latent mauve
#

Leo not existing until you have fed his parrot the 1st golden walnut was a pain for me to find out, since it meant when I replaced his sprite I had to use EditImage on his spritesheet instead of the Appearances system.

#

(He doesn't even exist yet when you see him run to his house)

rigid musk
#

Hm.. I'm guessing in order to have custom interaction tiles for furniture you would need FF yes?

#

(i.e. if I want the bounding box to be the center instead of starting at the bottom left)

oak dragon
#

ur right! I dont need npc instance

#

Silly me😭

#

I need translation sry for slow reply

latent mauve
#

Question regarding CP and local tokens: Is it possible to list a series of LocalTokens for the same value in a single patch and have it iterate each of them?

For example, I want to have a list of objects (spouse portraits) and apply a context tag to all of them, without having to make dozens of copies of the item EditData code.

lucid iron
#

no

uncut viper
#

.

latent mauve
#

Fair enough

lucid iron
#

theres talks about it

#

but it hasnt happened yet

latent mauve
#

The dream of easily applying context tags in bulk will have to wait for another day

vernal crest
#

What is the noun for calling a method? Like instantiating a class is an instance, calling a method that I've defined is a ______?

uncut viper
#

invoking

#

invocation

vernal crest
#

No that's still a verb

uncut viper
#

method call

vernal crest
#

Okay cool thank you

#

Googling that got me nowhere lol

uncut viper
#

well you did say "whats the noun for [action]" SDVpuffersquee

lucid iron
#

invoke is how u call methods from the MethodInfo tho

brave fable
#

calling -> call
invoking -> invocation

vernal crest
#

Yes and I meant what is the noun for action

lucid iron
#

perhas good to tell us what u r hoping to do

brave fable
#

i suppose 'a calling' would be a noun too

vernal crest
#

I was hoping to be able to talk about calling a method using the correct wording xD

brave fable
#

action is also a noun SDVdemetriums

latent mauve
#

In some code types, that's also a 'function'

vernal crest
#

Isn't the method itself called a function though

tiny zealot
uncut viper
#

well, how would one be expected to answer "whats the noun for running"

tender bloom
#

I might call it a “function call”

vernal crest
#

Run

#

(Noun)

brave fable
tender bloom
#

Like I would say “once during every function call, this function runs this line of code” for example

#

Is that the kind of thing you’d want to express?

vernal crest
#

If function call and method call mean the same thing, I think so

tender bloom
#

Or “before each function call, this Harmony prefix gets run”

#

I’ve never been clear on method vs function tbh

#

I assumed it was just style

brave fable
#

in C# terminology at least you'd use method over function, for C/C++ i've only ever heard function

#

personal experience only

vernal crest
#

I was asking for general understanding of the C# terminology, but my specific usecase right now is that I want to ask how to edit or replace a vanilla method call.

#

Specifically I want to change the value of the first argument in both setMapTile calls here

    public void ApplyFarmHouseRestore()
    {
        if (base.map != null)
        {
            if (!base._appliedMapOverrides.Contains("Island_House_Restored"))
            {
                base.ApplyMapOverride("Island_House_Restored", (Microsoft.Xna.Framework.Rectangle?)null, (Microsoft.Xna.Framework.Rectangle?)new Microsoft.Xna.Framework.Rectangle(74, 33, 7, 9));
                base.ApplyMapOverride("Island_House_Bin", (Microsoft.Xna.Framework.Rectangle?)null, (Microsoft.Xna.Framework.Rectangle?)new Microsoft.Xna.Framework.Rectangle(this.shippingBinPosition.X, this.shippingBinPosition.Y - 1, 2, 2));
                base.ApplyMapOverride("Island_House_Cave", (Microsoft.Xna.Framework.Rectangle?)null, (Microsoft.Xna.Framework.Rectangle?)new Microsoft.Xna.Framework.Rectangle(95, 30, 3, 4));
            }
            if (this.farmhouseMailbox.Value)
            {
                base.setMapTile(81, 40, 771, "Buildings", "untitled tile sheet", "Mailbox");
                base.setMapTile(81, 39, 739, "Front", "untitled tile sheet");
            }
        }
    }
#

(This is in IslandWest)

uncut viper
#

javascript uses function SDVpuffersmile

rancid musk
#

Yay, transpiler time

brave fable
#

i was thinking of mentioning typescript using function but we don't use either in this channel haha

uncut viper
#

its relevant for documentation!

#

not that id put my code talk about it in here anyway, even if it was for my docs

vernal crest
#

Drat I was afraid it might be Harmony

rancid musk
#

(Also while we're on about functions, C# uses call for the name of the opcode but if you have a delegate you can call .Invoke() on it so that's fun)

lucid iron
#

you can always do skipping prefix sins

uncut viper
#

Harmony is the only way to do any kind of method replacement

lucid iron
brave fable
#

yes, 'how to edit or replace a vanilla method call' is about as explicitly a Harmony thing as you can get

vernal crest
#

I don't think I am allowed to use Harmony yet :(

rancid musk
#

Why not? Who will stop you?

lucid iron
#

in this case tho i do have a no transpiler way, set this.farmhouseMailbox.Value to false in a prefix and keep it's original value in state

#

then do the actual work in postfix and restore this.farmhouseMailbox.Value

vernal crest
#

My belief that nobody should release a mod where they have no idea what they're doing lol

lucid iron
#

but aba

#

you should be more ambitious

vernal crest
#

I cannot support a mod when I don't know what it does

rancid musk
#

My experience on NexusMods tells me you are not necessarily alone in that belief, but it is certainly not universal.

lucid iron
#

buildingfy ginger island

brave fable
#

oooh yes please. i'd like to be able to put a ginger island on my farm

lucid iron
#

that is, turn the map patches of farmhouse obelisk shipping bin into buildings

#

so i can move em around

rancid musk
#

I'll put two ginger islands on my farm. One for me and one for my farmhand friend.

lucid iron
#

that's a PIF mod but i support it too

uncut viper
#

my first mod was a harmony mod where i had no idea what i was doing

#

but it did work

vernal crest
#

Right now my ambition extends to "maybe I can make a 9 tile wide farmhouse"

brave fable
#

i, too, started with harmony. god knows why. it was terrible lol

lucid iron
#

anyways you arent gonna become worthy of harmony or whatever if you don't try it

#

or i dunno

brave fable
#

my code, not the experience

lucid iron
#

button can you declare aba worthy of harmony

vernal crest
#

I said yet!

#

Not ever!

uncut viper
#

i dont think anyone needs to be declared worthy of harmony unless theyre touching the save serializer

rancid musk
#

That's worthy of madness, not harmony.

lucid iron
#

well there u go, be free and do crimes

uncut viper
#

its really the only way to break something permanently

brave fable
#

i'll give you a written note if u want to make a clickCraftingRecipe patch

vernal crest
#

Look I did not even know how to access a list until last night

rigid musk
#

Making a PIF version of ginger island so you can put multiple ginger islands on your farm sounds horrifying /pos

vernal crest
#

If I were to Harmony this, someone else would literally be writing the entire thing for me because I would not even be able to start

rigid musk
#

theoretically if you had any walls in there you could also put ginger island IN the ginger island... inside.. of the ginger island...

lucid iron
#

anyways if u do the building-fy approach

#

you are perfectly justified to go skipping prefix PecoSmile

vernal crest
#

I want to be ambitious but I also want to be realistic of what I am capable of right now

lucid iron
#

tho hm, might need to do the map patch to make them not have the rundown version of buildings? unclear

teal bridge
# vernal crest If function call and method call mean the same thing, I think so

Not that it's normally worth nitpicking about, but since you were asking, a method refers specifically to a function declared as a member of some type (e.g. a class). Function is the more general term for any self-contained piece of logic with discrete inputs and outputs, and can refer to things other than methods - for example, local functions in C# (a function declared inside a method).

#

Most of the time you actually should say "method" because it's unambiguous what you're referring to. (Unless it's one of the rare cases when it is actually not a method)

vernal crest
#

Thanks, that's helpful context :)

gentle rose
brave fable
#

declared guilty of harmony

urban patrol
#

i'm trying to make an extremely basic tilesheet modding resource--do i have my content.json set up correctly? i thought i would need to load each season separately but i looked at others for examples and they didn't

#

actually, instead can i just release these as images and give authors permission to pack them in their own mods, with credit? would that be preferable rather than making people download it?

unique sigil
#

What are you making these tilesheets for?

urban patrol
#

i made them for my mod, but then i wondered if maybe other people would want to use them

#

it's just grass/sand transitions

unique sigil
#

If you're still on the fence about other people being able to use them, you can just pack them with your mod

uncut viper
#

if a tilesheet starts with "spring_" and there are other seasonal variants loaded in, the game will swap them automatically, but they do need to actually exist

#

i believe a lot of tilesheet authors simply use the {{season}} token to load them in as necessary

#

also, your tilesheet load targets are rather non-standard and likely to confuse people, probably

unique sigil
#

Because tilesheet mods usually contain much more than just one type of tileset, I doubt people would download an entire dependency/resource for just that (this is not a critique, just what i think is realistic)

urban patrol
#

yeah that totally makes sense

uncut viper
#

as for whether or not you can just release them as images, then... ofc! theyre your images.

urban patrol
#

in that case, how could i offer these up to people if interested?

uncut viper
#

you can decide what people are allowed to dow ith them

marble verge
#

Just upload the images to the Nexus?

unique sigil
#

You can load them in your map for the time being. who knows maybe you end up making enough tile edits you end up with a big tilesheet you can eventually release as a resource.

unique sigil
marble verge
#

That's even better.

urban patrol
#

okay cool, then i guess that's what i'll end up doing, since i'm definitely using them in my mod (i've already got the map made and everything lol)

#

i did also make a whole lighthouse, but the sand/grass tiles seemed like they would be much more useful for map makers

unique sigil
#

Do you have recolor compatibility for these tiles?

urban patrol
#

not at the moment, but i was going to make them compatible with the popular recolors after finishing my mod (which i've only got one event left to code + testing)

unique sigil
#

I see! so for earthy, VPR, and starblue then?

urban patrol
#

yep and i thiiiink one more but idk off the top of my head, i'd have to re-check the list someone sent in here a bit ago

unique sigil
#

i find those three covers enough bases

urban patrol
#

good to know i won't complain about less work haha

unique sigil
#

wittily, if you want. my tilesheets have earthy, VPR, starblue, and wittily

#

Someone submitted foliage redone to me which i still havent evaluated yet, but thats also what some people use

marble verge
#

Do you use Photoshop? DaisyNiko's uploaded her Edit Layers to the Nexus.

urban patrol
#

i do! i will absolutely check that out

marble verge
unique sigil
#

There is also soft slow seasons but i definitely understand if you don't want to do that one SDVkrobusgiggle

shut mountain
#

I feel like I interrupted something 😅

urban patrol
#

i don't mind! this discord is fast-paced :)

shut mountain
#

Either everyone is talking at once or it's been hours since anyone has said anything lol

rigid musk
#

god im so done with looking at trees pain

unique sigil
#

SDVpufferlurk hi lily

#

hows the trees goin

rigid musk
#

Hi Kisaa

#

It's ... going. I regret deciding to make this catalogue

#

i realized i cant even make the trees how i want anyways cause of how CP does furniture tiles (I think I'd have to use Furniture Framework for it... and I kinda dont wanna do that so)

unique sigil
#

awww that sucks. but yeah i understand not wanting to use too many extra frameworks

rigid musk
#

blurry picture of my progress... there's so many left to do.. im ceasing

unique sigil
#

also, catalogue? 👀 will this mod have furniture too?

rigid musk
#

Ouh different mod :)

#

Though If I make furniture for Honey I will also add it as a catalogue /furniture option :3

#

Like I did with the decor I made/used for Qi

#

This one is me turning all of the foliage i could find in stardew into furniture

unique sigil
#

(puts on enabling hat) you will make furniture for Honey

rigid musk
#

I most likely will... little apple baskets...

unique sigil
#

apple baskets, apple foods (candied? pie? apple slices)

rigid musk
#

Also it's not really the framework stuff that'd bother me with this mod, it's more so that I'd have to reformat everything IIRC and ... I'm already almost 200 furniture items in so

unique sigil
#

ough yeah thats a mood

rigid musk
#

There are a lot of apple foods I'm making yeah :3

unique sigil
#

i have not touched the code for the furniture pack im working on because scope creep forced my hand

#

im scared of having to change too much kekdog

lucid iron
#

If u creep more u can redo the code from scratch 😌

#

Bery enjoyable trust

unique sigil
#

:(

marble verge
#

In CP, if I call the value of a token array without specifying valueAt, will it just return the first available value?

fierce vault
#

Hi guys. When adding a custom location, do you think having two midway points before reaching it would be a big deal to players? The end location would be nice, but mostly just the house and corresponding land for my npc. I think two middle maps, not too large in size, would emphasize the distance it really is in relatively simple way, but what do you think?

unique sigil
#

depends on how big the transition maps are, and what you put in them

hallow prism
#

and if they play a role or not

unique sigil
#

I for one wouldn't want to walk through transition maps where all you can do is walk

fierce vault
#

I was thinking a not too long, pretty forest and a small cave area maybe

hallow prism
#

also of course, it depends of what annoys you the most, feedback from players about "useless maps, take too long to get there" or "hu!! how can the location be here, there should be a beach there!!!"

fierce vault
#

I would try to avoid making the main point too long. I was thinking a somewhat short walk, like maybe the size of the secret forest

unique sigil
#

Personally i find just foraging to be one of those "pointless" activities in a transition map; id probably add a fishing spot and some resources to collect, and eventually a progress locked warp that transfers you to (near) the end destination

#

if you want an example, take a look at the hidden woods optional area in my wildflower acres farm. the end destination is ||the hidden spring|| and activities you can do in that woods map are foraging, fishing, resource collecting, and rare monster forage (e.g. slime eggs)

fierce vault
#

Interesting point. There would be more at the end location, really.

hallow prism
#

basically, if you add a map it needs to serve ideally several purpose

#

so right now you have immersion/storytelling

#

i suggest to add at least one or two

fierce vault
#

I think I need both points unfortunately for the implied distance of my end map to make sense

unique sigil
#

farmer is also essentially a 1x2 object. traversing a map you think is small can take a while once you actually see the map in game

hallow prism
#

don't worry too much about making sense

#

some people will not get it anyway, and some have no trouble anyway

#

i mean, you can worry about it a reasonable amount 😄 just not too much!

fierce vault
#

Well, that and the atmosphere I feel a forest in between would give

hallow prism
#

but basically what you can add is :

  • forage/fishing/trees/other things to collect
  • events taking place here
  • monsters if fitting the vibe
fierce vault
#

Hmm, I actually forgot about monsters as a possibility…

hallow prism
#

you don't have to go crazy about it, just a bit of forage/tree on the way to your place will already be cool enough so it doesn't feel empty

fierce vault
#

Yeah, I wouldn’t want to over complicate it…. Unless I end up making more custom stuff to make the forest feel more unique. I always have a chance in getting caught up in doing stuff like that…

#

Well, thanks for some of the ideas/opinions from you both.

hallow prism
#

sure! and maps can change so you can always have some placeholder, see how you feel when playtesting or playing, and adjust

#

i resized some of the maps in my mods/added some

vernal crest
shut mountain
#

I think I need to have SDV on mother's computer for the file PathosChild sent to work SDVpufferwaaah

#

I'm legit gonna cry ;-;

lucid iron
#

well yea it's a linqpad script

shut mountain
#

I don't know how ts works!

lucid iron
#

it's pretty hard to do C# dev on a phone yggy

shut mountain
#

That's why I'm using mother's computer

lucid iron
#

and its pretty hard to do modding without the game installed

uncut viper
shut mountain
#

Again, I don't know how that file works or what it needs

#

I'm just an idiot

lucid iron
#

but for actual C# modding

shut mountain
#

Is that for mobile?

lucid iron
#

no

#

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

lucid iron
#

the problem is bidirectional too

urban patrol
#

EDIT: i figured out my issue, no help needed! i had "AddWarps" in my edit map json from the previous version of the map and it must have been confusing them since those warps were now inaccessible. they use the elevator as planned now!

@latent mauve (or anyone else who might know): i tried adding an NPCWarp to the elevator in the community center, but the characters are getting stuck right after entering the community center. how do i get them to use the warp?

    "LogName":"NPCWarp for elevator",
    "Action":"EditMap",
    "Target":"Maps/CommunityCenter",
    "MapProperties":{
    "NPCWarp": "50 18 DeadBoyAgency 6 18"
    },
},
lucid iron
#

it's annoying as hell to test mods on android smapi since it doesn't run in emulator

shut mountain
#

I literally just want to change my farmer's hair and eye color to a specific color, why is this so damn hard SDVpufferwaaah

uncut viper
lucid iron
#

think aren't they already HSV colors

#

i.e. you have access to full range

uncut viper
#

they want to edit their save on mobile

shut mountain
#

Yeah, but mobile sliders are horrible

uncut viper
#

to fix it

urban patrol
#

if any other mod uses the name DeadBoyAgency for a location i'll be shocked

lucid iron
#

i see, hence the packed values thing yggy

shut mountain
#

Mhm, I feel like that's helpful

lucid iron
#

at least u wont need game then, just get something to run C# real quick

#

thats what linqpad is

shut mountain
#

There's something in the file that references the game tho

#

And it's not working without it

lucid iron
#

i dont see any actual usage of Color

#

ah its MathHelper

shut mountain
#

Well idk what to tell you. Again, me stupid

lucid iron
#
public static int Clamp(int value, int min, int max)
{ 
    value = (value > max) ? max : value; 
    value = (value < min) ? min : value; 
    return value;
}
#

this is what MathHelper.Clamp is, just add it as another method and replace MathHelper.Clamp with Clamp

shut mountain
#

That's not what I got sent 😭

lucid iron
#

well thats bc im telling u the thing required to eliminate Microsoft.Xna.Framework usage

shut mountain
#

Okay? So just delete the whole line?

lucid iron
#

you need to modify the script yea PecoWant

shut mountain
#

So I just delete the line with the Microsoft thing?

lucid iron
#

i can't run linqpad myself, so im not sure what is valid

#

in terms of the headers i mean

#

also not too sure where uint.Dump is

shut mountain
#

I barely even know what's being said to me

#

Okay, y'know what? I give up. This is ridiculous. I'm genuinely about to cry

lucid iron
#

why did you 👆 me then

shut mountain
#

Because I also don't know what uint dump is

lucid iron
#

but anyways i did go take a look myself and it's not that complicated without script

#

so for instance here's a hairstyle color i pulled from one of my saves

#
<hairstyleColor>
    <B>50</B>
    <G>90</G>
    <R>193</R>
    <A>255</A>
    <PackedValue>4281490113</PackedValue>
</hairstyleColor>
shut mountain
#

What if I'm still an idiot

#

Yeah, I get that part

lucid iron
#

if i convert 4281490113 to hex i get FF325AC1

shut mountain
#

And you've lost me again

lucid iron
#

i believe the order is A B G R

shut mountain
#

Oh

lucid iron
#

so we group like this:
FF 32 5A C1

#

and convert each 2 digit hex back to decimals

shut mountain
#

We get numbers I understand?

lucid iron
#

its manual ofc but no fiddling with linqpad required

uncut viper
#

https://dotnetfiddle.net/1TzBQh
if you just want to run it and dont much care how it works you can also edit this script (the values under the "Change these values!" line) and hit Run

rancid musk
shut mountain
#

Okay I think I get it

lucid iron
#

to get the packed value from some RGBA you just do the reverse

#

so RGBA to 2 digit hex, 4 of em

#

and then order em AABBGGRR

#

then do decimal again

shut mountain
#

Well, 201010FF is pretty easy 🤣

#

I'll mess around with that at a more reasonable hour (after I calm myself)

#

Honestly, I probably could've made the connection myself if I'd been looking at familiar hex numbers instead of somewhat random ones. Thanks for explaining SDVpufferheart

calm nebula
shut mountain
#

Wait. I'm scared. Why is the packed value 10 digits??

#

Actually, does the 42 in 4279905105 do anything?

#

I'm confused again

uncut viper
#

its hex converted back into decimal

shut mountain
#

Okay so

#

The decimal value I want to use is 32,16,16,255 (rgba)

#

That would be 201010FF in hex

#

Yes?

uncut viper
#

you actually want it in reverse order it seems

#

FF101020

#

big endian

shut mountain
#

Yes, but how does that become a 10-digit string?

#

Or whatever it's called

uncut viper
#

convert it to decimal

shut mountain
#

So 255161632

uncut viper
#

no. convert FF101020 to decimal

#

as one number

#

not groups of numbers

shut mountain
#

OH

#

Confirmed: Chaos is an idiot

uncut viper
#

that gives you 4279242784

shut mountain
#

Thank you 🙏

#

Also, idk about you, but my brain cell needs sleep ;-;

#

Alright. Backup has been made. Revisions have been saved. Time to boot up the game and hope it's not broken!

#

IT WORKS :D

#

Thank you sm 🙏

uncut viper
#

was it quicker than trying the sliders /lh

shut mountain
#

No, but it's more accurate, and now I know how to do it much more quickly SDVpufferparty

uncut viper
#

more knowledge is more good

shut mountain
#

Also idk what that tone tag is 😅

uncut viper
#

lighthearted!

shut mountain
#

Ah, thank you

dusk mulch
# shut mountain Ah, thank you

Hi, friendly reminder that the server is english only.
(i know it was 1 word but sometimes it can send a message to other people, also I do not intend to mini-mod, this is just a reminder.)

shut mountain
#

My bad

vernal crest
#

1,366 unseen events SDVpuffergasp

#

No wonder I've been having a hard time getting through them all!

vapid oak
rigid musk
#

how many mods do you HAVE ... how do you even tell how many events there are 😭

vernal crest
#

Chu and Atra wrote me some C# code to get all the event keys for unseen events from every location in my game. I have 499 mods.

rigid musk
#

I wonder how that number compares to Vanilla...

vernal crest
#

Wait, I have seen some of these suspicious

gentle rose
vernal crest
#

It seems that it is not actually excluding the events that have been seen

#

So it's 1,366 events total (probably)

gentle rose
#

not that I can do a better job than atra and chu, but I can contribute code if they don’t feel like it SDVpuffersquee

#

do you have a link to the code somewhere? if they sent it here as a message or something

vernal crest
gentle rose
#

hmm, it should be filtering them

#

but idk how Except works haha (I assume it’s linq but I’m not quite certain)

#

oh, I see, yeah I think it should be filtering them? in theory, at least

#

are you sure it isn’t?

vernal crest
#

Yep. If you like I can send the log that contains both the list of supposedly unseen events and the patch summary that lists all my seen events.

#

I don't know if me having used it with 1.6.8 matters?

gentle rose
#

I trust you SDVpuffersquee I wonder if it’s a string sanitisation problem

#

actually, log would be helpful

vernal crest
#

I did change one line allEvents.AddRange(events.Keys.Where(key => key.Contains('/'))); because I wanted the preconditions but not forks.

ocean sailBOT
#

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

gentle rose
#

yeah it’s what I figured, the strings aren’t sanitised properly

vernal crest
#

Ohhhhh

#

Of course

#

When I changed it so that it didn't exclude the preconditions anymore (which chu also didn't do, but atra did and then chu was like "oh I didn't know that"), it made it so that it couldn't match against Game1.player.eventsSeen

#

Dangit

#

So I just gave myself a list of every event instead

gentle rose
#

basically, yeah. I think you’re using chu’s code as a starting point right now? try using atra’s and seeing if that works

vernal crest
#

No, I used atra's

#

But then I changed it because I didn't want just a list of event IDs

#

So now I'm back to trying to figure out how to stick the preconditions back on after removing them lol

gentle rose
#

do you want to do it yourself or would you like me to send some working code?

vernal crest
#

I am going to try it myself because I have an idea

#

And then if it works I will get you to show me the better way xD

late bramble
#

Hi guys, does anyone know anything about this type of warning? I've been doing a lot of stuffs last night without testing bc I figured I'd do it today, but I forgot what I did and don't know where to begin looking

uncut viper
#

mismatched braces somewhere, i imagine

#

CP is detecting something as a patch that has no Action field

late bramble
#

Ah dang SDVpufferwaaah my worst nightmare

uncut viper
#

and probably not any other required field

gentle rose
#

or genuinely a patch with no Action field

uncut viper
#

would it say "invalid" for that?

#

i guess it does get the patch name from the action, fsr i thought it got it from the target

#

okay yeah it might just be a patch with no action

#

in whatever file E0 is

#

oh thats the mod name

late bramble
#

Ah, I think I found it

#

Yeah this was the culprit,, I totally butchered that one. Do not write code at 3am

brave fable
#

it can be as simple as {} if you like. very simple and low-effort error for a busy day

late bramble
brave fable
#

FromFiles would also be incorrect if you didn't also correct that to FromFile

late bramble
#

Yup, already fixed that typo too hahaha

uncut viper
#

i did realize it and muse about that realization immediately after saying that SDVpuffersquee

brave fable
#

{ "Changes": [ {},{},{},{},{},{},{},{},{},{} ] } is perfect for the whole family and it's ready in no time at all

hard fern
#

the children are all lined up in a row

gentle rose
#

everyone wants to integrate AI into stardew mods but nobody wants to procgen content patcher patches, the cowards

vernal crest
#

Hooray, seen events have actually been removed now! So it looks like I had 1,366 events in total and have 540 unseen.

#

Which is still a lot haha

#

Thank you to @lucid iron, @calm nebula, and @gentle rose SDVemoteheart

faint pendant
#

Under what circumstances will "Game1.CurrentEvent" be assigned by the game?

vernal crest
#

Now lol

crude plank
#

AparentlySMCKekLmaoDog

calm nebula
#

Sleep is for the weak

#

Do what I do, which is repeatedly get less than 4 hr of sleep and then wonder why I feel like shit all the time

hard fern
#

Wow

#

Are yog me

deep cypress
#

I am postfixing this to return damage anyways if it is an armored buggie.

public override int takeDamage(int damage, int xTrajectory, int yTrajectory, bool isBomb, double addedPrecision, Farmer who)
{
    int actualDamage = Math.Max(1, damage - resilience.Value);
        codeandwhatnot
        return actualDamage
}```
I want a ref int __actualDamage parameter here?
#

and at the end, I want __actualDamage = actualDamage;

vernal crest
hard fern
vernal crest
#

Then I believe you are legally distinct from Atra

#

Any person claiming to be Atra must meet those minimum requirements for their claim to be considered in court /j

gentle rose
crude plank
deep cypress
#

This error

System.Exception: Parameter __actualDamage does not contain a valid index
   at HarmonyLib.MethodPatcher.EmitCallParameter(MethodInfo patch, Dictionary`2 variables, LocalBuilder runOriginalVariable, Boolean allowFirsParamPassthrough, LocalBuilder& tmpObjectVar, List`1 tmpBoxVars)
   at HarmonyLib.MethodPatcher.<>c__DisplayClass37_0.<AddPostfixes>b__1(MethodInfo fix)
   at HarmonyLib.MethodPatcher.AddPostfixes(Dictionary`2 variables, LocalBuilder runOriginalVariable, Boolean passthroughPatches)
   at HarmonyLib.MethodPatcher.CreateReplacement(Dictionary`2& finalInstructions)
   at HarmonyLib.PatchFunctions.UpdateWrapper(MethodBase original, PatchInfo patchInfo)
   at HarmonyLib.PatchProcessor.Patch()
   at IridiumBombs.ModEntry.Entry(IModHelper helper) in C:\Users\Apryll\source\repos\IridiumBombs\ModEntry.cs:line 61
   at StardewModdingAPI.Framework.SCore.LoadMods(IModMetadata[] mods, JsonHelper jsonHelper, ContentCoordinator contentCore, ModDatabase modDatabase) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/SCore.cs:line 1861```

is from:
```cs
  private static void BugTakeDamage_Postfix(int damage, int xTrajectory, int yTrajectory, bool isBomb, double addedPrecision, Farmer who, Bug __instance, ref int __actualDamage)
  {
      int actualDamage = Math.Max(1, damage - __instance.resilience.Value);
      __instance.Health -= actualDamage;
          __instance.setTrajectory(xTrajectory / 3, yTrajectory / 3);
          if (__instance.isHardModeMonster.Value)
          {
              __instance.FacingDirection = Math.Abs((__instance.FacingDirection + Game1.random.Next(-1, 2)) % 4);
              __instance.Halt();
              __instance.setMovingInFacingDirection();
          }
          if (__instance.Health <= 0)
          {
              __instance.deathAnimation();
          }
      __actualDamage = actualDamage;
  }```
lucid iron
#

I don't think you can get locals in a postfix

#

And if that's actually a regular arg then you don't need __

unique sigil
torn beacon
#

it should be 'ref int __result'

deep cypress
deep cypress
stark pollen
#

hello i am new to stardew, how can i minimize the smap terminal when i open the game?

deep cypress
#

Are you on PC?

proud wyvern
#

same way you minimize any other app

stark pollen
#

is there anyway to make this not popup

proud wyvern
#

No

#

That window IS SMAPI

stark pollen
#

i see ty

brittle ledge
true coyote
#

@brave fable just a quick question -- sorry to ping. Is your LoC mod supposed to be split as such? if i uncheck the cp one (despite another cp version being in the mod folder for the top one and is identical to the bottom mod folder labeled cp) it won't run. I'm just working on a vintage interface recolor for the LoC ui and it'll seem this way I'll need to replace the assets in both?

brittle ledge
#

I'm not blueberry but yes, many mods are split by content pack. You can't have C# and a CP content pack in the same folder. If you look at some larger mods, like expansions, you should see the same thing.

true coyote
#

I'm just cinfused because the cp folder is here twice -- this is inside the top one but in the actual mod folder it shows as this

#

with duplicate assets in both -- I'm sure I'm just not like fully understanding

#

like I'd get if in stardrop it showed the cp separately if it read from the top folder but these are two separate folders that generated when i unpacked the file

#

anyway In the end I'm guessing I just have to replace the sprite pngs in both the cp files for changes

brittle ledge
#

I take it you're doing a file replacer and not actually doing a CP mod then?

true coyote
#

yes

brittle ledge
#

It would be a lot easier to do a CP mod because then you'd just have to target the assets they load into

true coyote
#

I was planning to hand over to nomori who is currently caretaking the latest version of vintage ui and they just have a folder of "compat" files to copy paste into things that need ui fixes

brittle pasture
true coyote
#

I unzipped as I always do; I dont open through stardrop

lucid iron
#

You basically need same cp stuff

brittle pasture
#

my answer remains; try downloading fresh

lucid iron
#

GOAT made this if u wanna ask for more details

brittle pasture
#

and yeah seconding (thirding?) the suggestion of making a CP pack
file replacements should only be used for mods that do InternalAssetKeys/direct loading where you cannot edit their textures with the content pipeline

odd ginkgo
#

hey all so I'm working on a little something

#

how would one add weather to a custom map

#

basically, make it always storm there?

#

I'm trying to make a desert canyon maze, and it'll be storming while you race through it to avoid a flash flood

#

at weather, but I'm not sure how to actually write the code

#

thank you!!

brittle pasture
shadow pagoda
#

Gonna try bumping one more time

odd ginkgo
tropic remnant
#

Let me know if this is a coding faux-pas, but I'm trying to replace sebastian's 8 heart event entirely with a custom one. I don't want the original to play. The new one has additional trigger conditions. I can't seem to figure out how to "kill" the original as "k [eventID]" doesn't stop the original from triggering. Do I make a replacement in the Entries portion of the original event with a null entry, or something to that effect?

deep cypress
#

Maybe just target the original one, and change it?

#

Like:
Action: EditData,
Target: Seb8Heart (whatever the actual event number is)

#

Cause if anything ever depends on having that 8 heart event seen, and it doesn't exist or cannot ever be seen, it will make that a huge mess.

tropic remnant
#

Hm yes that's what I'm trying to avoid, the mess of killing the event entirely for that reason. I think I just don't want it to play without preventing the new version from playing. I should poke around more, I might be misremembering something about the process, but thank you for confirming that my worries are sound! I'll play around a bit more and see what I come up with.

vernal crest
#

Is there a reason you're not using the same event ID for your replacement event?

#

Or maybe you are, actually, I can't tell from your message. If you are, it's an easy enough thing to deal with. You just null the original event and add yours. Since the IDs are the same even though the keys aren't, anything relying on the event ID will still work the same way.

tiny zealot
#

[[Modding:Event_data]] see here about the keys in the event data

tiny zealot
#

the part before the first / is the event id. leave that part the same

#

make an entry exactly matching the key as it is in vanilla and set it to null, like so:
"2349328/f Sebastian 2000/whatever/else": null,
(as you can see, i made up what the key is)

tropic remnant
#

I'll give it a go, thank you guys!

tiny zealot
#

then add your own:
"2349328/your conditions/here": "your/script/here"

tropic remnant
#

That worked perfectly, thanks! 🙂 My issue was putting quotes around null the whole time...

tiny zealot
#

ah yes. this is one situation where the distinction is significant 😅

tribal ore
#

Is it possible to i18nify the configuration settings for a mod?

tiny zealot
#

yes. it involves naming your keys in a specific way

tribal ore
#

Good to know. I had a translator ask, and wasn't sure how to proceed. Thanks, ichor!

undone hawk
#

Y'all! I was interested in your opinion on this. My best friend and coding mentor and I were having a debate about my code implementation. I wanted to write out information manually for any hard-coded exception cases (like how Ice Pip and Stone Fish have their levels and locations completely separate from the rest of the fish, etc.), and he believes I should take the stance of not hard-coding ANYTHING

#

I'd love to know what y'all think as fellow Stardew mod devs. He's a professional so I feel his perspective on this is skewed :3

brittle pasture
#

Ice pips, stonefish and other mine fish is fine to hardcode because the game itself hardcodes them

teal bridge
#
#

(It's not the best-written analysis ever, but it's directionally accurate on the basic points)

#

There's no universal rule that can substitute for actually looking at a particular piece of logic and asking: "Are these values baked into the logic itself, or are they arbitrary decisions that can change?" and "Would externalizing these values reduce the maintenance requirement, or would I have to rewrite the code anyway if something changed here?"

lucid iron
#

I suppose you could inspect the IL

teal bridge
#

On the other side of this, it depends how much you care about mod compatibility. Things that you think really shouldn't change, because they're hardcoded in the game logic, might very well be changed by another mod's Harmony patch.

So while I wouldn't "soft-code" everything and make the configuration a total mess and dump all these problems onto the end user to figure out, it's sometimes polite to other mod authors to encode your "assumptions" in a little file that's easy for other mods to Harmony patch and has the appropriate no-inlining attributes.
https://github.com/focustense/StardewFishingSea/blob/master/FishinC/GameRules.cs

#

'course that's totally optional and you can waste a lot of time on that stuff preparing for a situation that never comes up.

tiny zealot
#

+1 the reason not to hardcode is to reduce maintenance burden if things have to change

lucid iron
#

Another thing you can do is to dump your hardcoding to a json file

#

This is what lookup anything does for various can't determine from data items

tawny ore
#

To me, dehardcoding is a really nice to have goal, but I wouldn't focus on it if it competes with just doing the thing you're trying to do. By that I mean, don't overwhelm yourself trying to make something perfect when you might be better off spending your time developing your mod and quickly iterating on changes.

#

Sometimes the best mod isn't the one where you've done everything the "right way" but rather it's the one that you still enjoy working on, and you feel like you're consistently making progress on it

wispy rose
#

Hiya, is there a way to make use of another mod's configuration in a content patcher mod? I'm basically trying to extend a mod, but that means that if the mod I'm extending makes a change conditionally, I want to make my change conditional on the same thing.

hard fern
wispy rose
tribal ore
#

TIL that the FlowerDance doesn't respect _spouse dialogue. It appears to be the only festival listed as an exception. Fun!

floral canyon
#

Hi guys! I'm still struggling with the bug in my Bees Plus mod that when you have many machines working and you put different items in each, when you collect them, they all sometimes change into the first item collected. It's kind of ruining my mods gameplay and I thought I fixed it but at this point I have to ask again if anyone has any idea why this might occur? I would be really thankful. Everything related to my machine is here: https://smapi.io/json/none/f1356aec96af44b8a316831a4858844e

unreal spoke
#

Hi, guy who updated your horse mod here, and sorry for the completely random ping for a years-old post. I happened to see you made these farm animal sprites, too, and I need the sheep in my life absolutely love them. Is there even a tiny chance you'll ever release them? If there is, I'd be more than happy to help out however I can.

spice harbor
#

Hello! My creative juices have been pretty much dead for years now, but I think I have most of the coop animals done somewhere, and a rough animation for the sheep (only the left and right movement, and that is somewhere on an old phone, I'll have to dig it out 😅)

Tehnically, I do intend to finish it someday, but, knowing me, it'll take years :')
If you want, I can send you all I have so far and you can finish it if you have the will and motivation?

latent mauve
rough lintel
spice harbor
#

Hello :'D
I'm sorry I never quite manage to finish/upload anything :'D

#

But I'm very glad I'm still remembered :')

unreal spoke
#

All of your sprites are amazing, so it's hard to forget you! I absolutely can't promise I'd do your art justice, but I'd love to take a look and see what I can do. If you don't mind sharing them, I'd really, really appreciate that!

spice harbor
#

I'm currently charging my old phone, max I DM you when I collect everything?

unreal spoke
#

Absolutely!

spice harbor
#

And hey, 'done' is always better than perfect :P
Maybe my animals end up being even better from the collaboration :D

fathom rapids
#

soooo this is maybe kinda silly but. I only have the Contentsmith role but I have a SMAPI mod and a pixel mod too now >.>
(I have updated the wiki page)

lucid iron
#

You can message the bouncer about it

fathom rapids
#

oh ty!

#

yayyyyy ^^

lucid iron
#

Triforce

true coyote
rancid musk
#

Hmm. Would it be too weird for my WIP building map override framework mod, which also lets buildings have Water tiles actually work correctly, also make it possible for Water tiles to render like water but not otherwise behave like water? 🤔

#

Every tile in the WaterTiles array has two bools, isWater and isVisible. It'd only take a couple patches to let isVisible work separately from isWater.

lucid iron
#

Do u want it to take map props

#

So that indoor water works

rancid musk
#

I wouldn't be messing with the indoorWater property.

#

But doesn't it... already work?

#

Water tiles are processed in loadMap for any location that passes cs if ((this.isOutdoors.Value || this.HasMapPropertyWithValue("indoorWater") || this is Sewer || this is Submarine) && !(this is Desert))

#

And my logic to reprocess water tiles duplicates that if statement.

#

This doesn't really have anything to do with just making visual-only water, though.

dusk mulch
#

What happens if you use a Garbage tiledata on a non garbage can tile? Like what happens to the animation?

brittle pasture
#

it's probably because you didnt put the flavor id into the internal name (unless that's in the i18n? can you show it?)
side note, you don't have to put the internal name into i18n, because it's never visible to the player

lucid iron
rancid musk
#

I wasn't planning on doing that. I suppose I could make a CustomField for specifically overriding water processing in a building's footprint.

#

That would let you have water in Desert

#

(... are there any buildable Desert location mods though?)

lucid iron
#

I don't believe so blobcatgooglyblep

rancid musk
#

Anyways, my thoughts for the Water property are like... ```cs
string water_property = this.doesTileHaveProperty(x, y, "Water", "Back");

// existing logic
if (water_property is not null) {
foundAnyWater = true;
if (water_property == "I")
this.waterTiles.waterTiles[x, y] = new(is_water: true, is_visible: false);
else
this.waterTiles[x, y] = true;
}

// new logic
if (water_property is not null) {
foundAnyWater = true;
if (water_property == "I")
this.waterTiles.waterTiles[x, y] = new(is_water: true, is_visible: false);
else if (water_property == "V")
this.waterTiles.waterTiles[x, y] = new(is_water: false, is_visible: true);
else
this.waterTiles[x, y] = true;
}

#

And then in the water renderer simplify it from blah.isWater && blah.isVisible to just blah.isVisible

dusk mulch
#

Who wants to do some testing rq if they have like 5 minutes to spare

lucid iron
#

Ive made buildable indoor locations tho

rancid musk
#

Yeah, so I can see value in an override for water processing.

#

Though it will make things a little annoying since I'll need to postfix loadMap and check all buildings.

lucid iron
#

Terror

rancid musk
#

Or I could just forcibly assume any building should override water.

#

That would make things a bit simpler.

lucid iron
#

This sort of remind me of an idea matt mentioned, flooring that grant location context to whatever's on it

rancid musk
#

spoopy

lucid iron
#

A little buildable patch of spring...

rancid musk
#

Overriding location context in a submap region sounds like a complete pain. I'm glad I'm not working on that.

true coyote
#

at least, that is the issue ive been having and discussing with them and has been a known bug from the start

#

hopefully they can chime in if there are any other bugs -- i havent gotten around to being able to craft soaps and such because this bug kept me from getting beeswax so frequently

brittle pasture
#

so you have 4 beehouses ready at the same time, and if you get beeswax from one you get them from the other 3?

true coyote
#

-- i havent tested that order yet, but if you reverse it and its 3 honey and 1 bees wax, the 1 bees wax becomes a 4th honey

#

and then sometimes it doesnt display as honey being available and then i get some beeswax.. for instance earlier all of my beehouses said honey was ready, i think i have 8 of them?

#

and i got 2 beeswax, randomly

#

(and this is several in game days after loading the mod in, and last harvest)

brittle pasture
#

ah ha, I see
the real issue is that beehouses have RecalculateOnCollect set to true, which means when you collect from it the machine recalculates the output

#

this is so that if a flower nearby matures after the beehouse starts producing it can still get flavored honey

#

however I see why that could cause issue for lookup mods, because what the beehouse starts producing and what it actually spits out doesn't match

#

anyway as long as you're still getting beeswax some of the time it's not a bug

true coyote
#

i mean, it does show up but then... becomes honey in the inventory as soon as its collected

brittle pasture
#

like I said, it recalculates on collect (not on ready)

true coyote
#

😅

brittle pasture
#

ignore what's shown in the popup

#

that item doesn't exist, it's yeeted and replaced the moment your hands touch it

true coyote
#

so its incorrectly displaying beeswax/honey, is what youre saying? I think ive only gotten 4 true beeswax that havent disappeared in that case

brittle pasture
#

right, it is just how machines work

#

well how that specific machine works

true coyote
#

and i think @floral canyon had beeswax at a 0.25 spawn rate? or whatever that section is called

#

so i think ive gotten like ~25 honey to 4 beeswax

#

if that math is mathin

brittle pasture
#

0.25 * 0.5 = 0.125

reef kiln
true coyote
#

aight, i guess thats good for bird then, just a visual bug SDVpufferthumbsup

brittle pasture
#

hmm I see another bug in there, they have honey set to be 75% of the time and wax 25% of the time
what this means is that it's possible for the beehouse to produce nothing if both of them roll false

true coyote
#

hmm, it can do that?

#

I at least havent failed to get anything yet

brittle pasture
#

well in theory it will happen 18.75% of the time

#

but I'm not sure though
if they want wax to happen 25% of the time they should make it RANDOM 0.5 and remove the condition from the honey entry

#

or set RecalculateOutputOnCollect to true, keep honey RANDOM 0.75 and removd the condition from the wax

#

(also they should be using TargetField to target the OutputItem field; currently they're wiping all of OutputRules, which may cause problems with other mods that edit beehouse rules like Cornucopia or Better Beehouses)

#

apologies for the wall, I have opinions on machines lol

true coyote
#

oh thats why it was conflicting with BB

#

BB's author wrote a compat patch

#

it was crashing at save previously until then lol

#

and no worries! I'm sure this will be super helpful for bird when they come back online

#

I know it would be useful for me if my mods were constructively addressed in such manner

lucid iron
#

Selph how terrible would it be if i let users rearrange rule order

#

I don't think ill do it for many other reasons but thought experiment

brittle pasture
#

well for RecalculateOnCollect false it doesn't really matter
for true though, many machines are (should be) coded with fallthrough rules with no conditions, which may not be intuitive for the user, because rearranging some of them could mean "this gets checked earlier" or "nothing below this rule gets checked"

#

wait that's for OutputItems

#

for OutputRules, hmm

#

I... don't think there's an issue?

uncut viper
#

(how did it make it crash on save...)

brittle pasture
#

actually I think that also applies to OutputRules, but I don't think there's a machine mod currently where that could be a problem

lucid iron
#

Bc this is machine control panel, the thing being rearranged would be input

brittle pasture
#

yeah I figured haha
I think it's probably fine, for the users who want their~~ pickled teas and ~~wheat juice

#

for some gods know reason

lucid iron
#

I also can't think of a good way to do express it as UI tho

#

And you can have hops juice already

true coyote
tidal stone
#

why does it feel weird to search for mods now 😅 the interface is throwing me off

reef kiln
pine elbow
#

Does anyone know where I can see the documentation for the producer framework mod, to use it in C#, in Nexus Mods there is only an example of how to use it with .json and in C# there is only a brief text, there are no examples.

calm nebula
#

I'm not quite sure why you want to do that

lucid iron
#

Yeah if you turn off the hops to pale ale rule

#

It will fall through down to generic juice

calm nebula
#

Anything you can do with pfm c# you can do with machine data and a custom output method

reef kiln
#

Oh, I thought you meant without mods

tidal stone
#

is downtown zuzu up to date last time i played with it the map wasnt loading right for me but that could have been it interfereing with another mod

calm nebula
#

!mh for help with mods

ocean sailBOT
#

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

calm nebula
#

(I know little about zuzu)

tidal stone
uncut viper
calm nebula
#

Anyways, pfm does have an api if you want to query it's machine rules

#

Anyways

#

Good morning from 5am

#

I'm putting on a long history audio book and trying for another two hours of sleep

pine elbow
#

The interesting thing is that PFM has some interesting features to customize the fuel, which I remember you wouldn't normally be able to do just by modifying the normal data.

brittle pasture
#

you can't, but you can use Extra Machine Config to add that feature to CP machines

tidal stone
#

i keep forgetting im in here im sos orry 😭

reef kiln
brittle pasture
#

nowadays we recommend CP + EMC over PFM, it's still only one extra dependency and there's better compat with other machine mods

reef kiln
#

I have converted all the mod I use that say they need it.

pine elbow
#

I'll give you an example: items that combine in the machine to make different things, but with slightly different ingredients, depending on the fuel. In PFM I could make a variety of things by combining them, but in Content Patcher I couldn't...

lucid iron
#

Yeah you can do that with emc now

lucid iron
#

Cornucopia has wasabi mayo made from wasabi + egg

#

If that's what you want

brittle pasture
#

Cornucopia Artisan Machines + Wildflour Atelier Goods now both use it, and they have plenty of examples of recipes that do that stuff

pine elbow
#

what is the full name of the framework to search in nexus

reef kiln
#

Extra machine configs

lucid iron
#

If you want to just write a custom OutputMethod to do it it's possible, but you will need to handle automate/junimate

uncut viper
#

(this is why i think people should put their acronyms in their nexus title)

lucid iron
#

Can't just assume player inventory

brittle pasture
#

(yeah I figured SDVpuffersquee )

#

atra you're not eeping

calm nebula
#

You can't assume player inventory in vanilla either

#

Hoppers exist

lucid iron
#

The main things that one might still use OutputMethod for is knowledge of the input item state

calm nebula
#

(I'm not familiar with machine code)

lucid iron
#

If u needed to dynamically do something according to that without exploding the rules count anyways

brittle pasture
#

you can check if a machine is loaded by a hopper/automated chest by checking SObject.autoLoadFrom

pine elbow
#

And would it be possible to use emc with c#?

brittle pasture
#

you use it by just doing CP stuff, but in C#

reef kiln
# calm nebula Hoppers exist

I forget the exist all the time. Only inputting items into machines is such a useless feature. They need to pull too, to be even a little useful.

lucid iron
#

Can you tell us a bit more about what you want your mod to do LilyDerp

#

Perhaps the case is you can just cp it all

pine elbow
#

I already have the mod using cp and pfm, I'm studying c# and the idea is to translate all my cp codes to c#

brittle pasture
#

I say you should do what you want, but keep in mind that you'll just be doing CP stuff in C#

pine elbow
#

And one subject of C# that I haven't learned yet is how to use the frameworks within it.

uncut viper
#

you do it the same way just in the AssetRequested event instead

lucid iron
#

There's not many frameworks for C#, you are at the framework making zone

calm nebula
brittle pasture
#

some frameworks do expose a C# API, but EMC is a CP framework first and foremost, and you'd just be setting the same fields you'll be setting in a regular content pack

uncut viper
#

if a framework just has you editdata on certain targets or add certain data to normal things like Data/Machiens entries then you just... do exactly what they tell you to do, but in AssetRequested

#

there is no difference

calm nebula
#

I'll say I puzzled it out for More Fertilizers years ago (PFM would override my patches otherwise)

#

It's not worth it

#

It's not a transferable skill

#

Just fyi you basically use the c# mod to load a pfm json

#

If you look at 1.5.6 More Fertilizers it has it

pine elbow
# calm nebula Again, is there a point in learning this

It certainly makes sense, because when we use CP, PFM, Shop Tile framework, etc., we end up creating a bunch of subfolders within the mod, making it confusing. Doing everything in C# makes my mod independent of a bunch of subfolders, keeping everything together in one place.

lucid iron
#

Given your current situation of cp + pfm, I'd look at eliminating the pfm part in favor of CP

calm nebula
#

I think you might be trying to do this as an attempt to put c# on your resume tbh

lucid iron
#

STF is kill too

calm nebula
#

I'll say that I don't my mods on my resume at all

brittle pasture
#

in this case EMC is a CP extension so you'd just have a CP folder

uncut viper
#

if all your frameworks are for CP then there are no subfolders

reef kiln
#

I know you are retired, but I miss more fertilizer.

lucid iron
pine elbow
# lucid iron STF is kill too

But there is one thing that the shop tile framework does, that you can't do in cp, at least I haven't figured out how, which is to create a custom pet store.

lucid iron
#

This page helpfully notes whether a framework is made for usage via custom asset

#

Do you want the store to simply sell all pets like Marnie? That is available

#

I don't think you can filter for pets yet but i have been thinking about doing it, via custom item queries

pine elbow
lucid iron
#

Yeah i made the framework for that

pine elbow
#

With the STF it seems very easy

lucid iron
#

This is also a CP extension type of framework mod

pine elbow
#

interesting

lucid iron
#

STF is at least maintained tho (ty pathos) so if you want to keep it by all means

pine elbow
#

But can I create several stores and choose which one to sell in which?

lucid iron
#

Yeah

#

This example pack makes new stores for void chicken gold chicken etc but still provide option to sell at Marnie's if desired

pine elbow
#

I think it's cool how it was in Harvest Moon where there was the chicken seller on one side and the cow seller on the other.

dusk mulch
#

My NPC is stuck at the bus stop even though there is an NPC warp for them to go to the custom town

        {
            "Action": "EditMap",
            "Target": "Maps/BusStop",
            "MapProperties": {
                "NPCWarp": "7 12 {{ModId}}_TimbergateTown 37 6"
            }

(Partial)

#

No errors in the console by the way

pine elbow
#

But are you also taking away the warp to the desert?

lucid iron
dusk mulch
#

Should it be NPCWarps?

latent mauve
#

unless your Bus Stop map is different, 7 12 is a wall

pine elbow
#

Yes, but this property is where the desert one is too.

dusk mulch
#

oh.

#

I meant 17 12

#

Oops

#

Ty!

latent mauve
#

Okay. But also, do a patch export on your BusStop map

#

So you can check that you haven't erased the existing Desert NPC Warp as Sakura Uta mentioned

pine elbow
#

On the normal map 7 12 is the foot of the tree

latent mauve
#

(Default NPC warp to Desert is 22 8)

dusk mulch
#

It seems I have

latent mauve
#

22 8 Desert 18 27 is the default warp so you can add it back in along with your new NPCwarp

pine elbow
#

Worse still, these coordinates are very strange because the desert block is 17 11

But in the map properties it says 22 8 Desert 18 27

empty vector
#

Hi, does anyone know how I could EditData the "CustomFields" of another mods farm animal with content patcher? Trying to add a meatindex to the new SVE farm animals for Animal Husbandry.

As it is now:

                    "Visible": false,
                },
                "ShadowWhenAdult": {
                    "Visible": false,
                },
                "CustomFields": {}
              },```

What it needs to be:
            "ShowInSummitCredits": true,
            "CustomFields": {
                    "meatIndex": "Mizu.Quail_QuailMeat"
                }```
#

What I tried to do: ```{
"Changes": [
// add meat drop
{
"Action": "EditData",
"Target": "Data/FarmAnimals",
"Entries": {
"FlashShifter.StardewValleyExpandedCP_Goose": {

                "CustomFields": {
                    "meatIndex": "minothilos.meatysveanimalsCP_goosemeat"
                }
            },
            "FlashShifter.StardewValleyExpandedCP_Camel": {

                "CustomFields": {
                    "meatIndex": "minothilos.meatysveanimalsCP_camelmeat"
                }
            },

        }
    },
]

}```
It just removed the animals from marnies shop, nothing else

latent mauve
lucid iron
latent mauve
#

17 12 was the coordinate on the Bus Stop where the NPC needed to stand, not the Desert. 🙂

empty vector
dusk mulch
#

Not the NPC warp

latent mauve
#

NPCs don't use the ticket station, that tiledata does nothing for NPCs

latent mauve
#

Since they are trying to do two FarmAnimal entries in one code block, would Fields work better here?

uncut viper
#

not unless they wanna overwrite any other customfields

lucid iron
#

But you would need to go 1 level down yea

#

So can't real use it

dusk mulch
#

Jeez I only now realise how bug infested my mod is after I upload it

latent mauve
#

Well, if extra custom fields is a concern, does TextOperations / Append work?

uncut viper
#

customfields is a dictionary

empty vector
#

would doing two separate code blocks help here? I think it's rather obvious but I'm not brimming with experience

uncut viper
#

just use entries

dusk mulch
#

Is it possible to set up a GSQ or a mail flag for when you buy XYZ ammount from a custom shop?

latent mauve
#

Like a specific amount of an item? Or a specific amount of money?

latent mauve
#

Could possibly use a combination of ActionsOnPurchase to IncrementStat <stat key> [amount] with the amount being the price of the object being purchased, and then call the GSQ for PLAYER_STAT as a Condition?

dusk mulch
#

ooo smart

#

Ty!

uncut viper
#

keep in mind it wont work if someone changes the prices

dusk mulch
#

That's fine

dusk mulch
latent mauve
#

Vanilla example says no, but I think they're all one word for safety

#

Vanilla example: PLAYER_STAT Current ticketPrizesClaimed 17

floral canyon
latent mauve
#

It's easier to keep your custom stat key to one word or underscore-separated words and not use spaces in them to prevent issues.

dusk mulch
#

So like this?

                        {
                            "Id": "{{ModId}}_Amaranth",
                            "ItemId": "(O)299",
                            "Condition": "{{Fall Seeds |contains=true}}",
                            "ActionsOnPurchase": [
                                "IncrementStat {{ModId}}_Unlock 5"
                            ]
                        },
rotund elm
#

Hey does anybody know the smallest possible size map you can make without seeing black tiles?

dusk mulch
lucid iron
#

That depends on ppl's monitors

rotund elm
#

Forgot about that one, and ok so I guess I just want to go bigger to be safe X| more work for meeee

dusk mulch
brittle pasture
lucid iron
#

If you want you can use various transition to shadow type types

lucid iron
#

For example foilage

latent mauve
lucid iron
#

Secret woods pretty small for instance

#

Meanwhile bus stop mega hueg for what it is

latent mauve
#

I'll doublecheck to see if I can get a vanilla ActionsOnPurchase example to compare against

rotund elm
#

That is smart didnt consider that

uncut viper
#

also, keep in mind actionsonpurchase only works for the first click of an item

lucid iron
#

Oh really bolbphase

uncut viper
#

actionsonpurchase only runs if your heldItem is null

lucid iron
#

I been instant closing menu for other reasons so i didn't notice

uncut viper
#

known bug, fixed in 1.6.16 i think maybe

latent mauve
#

Wiki says "These are run once per purchase click" so that's good to know that there's a bug

uncut viper
#

so if you keep buying and placing in your inventory and buying individually, itll work

lucid iron
#

Oh ok yay

uncut viper
#

if you hold right click on a blueberry and buy 500 of them, it only runs once

rotund elm
#

Oh I actually want to ask cause this affects something I am working on in my update, is that the first and only time you purchase that item or every time you close and open a shop menu

lucid iron
#

Well if you were using the bogus no item salable

#

You never get a hold item do you

uncut viper
#

shrugs

#

dont know how bogus items work if you hold right click

lucid iron
#

Yeah shrug I didn't test ut either

uncut viper
latent mauve
#

Also, I didn't find a single shop entry in vanilla that didn't have null for "ActionsOnPurchase"

uncut viper
latent mauve
#

Wiki has an example, was just intrigued that there's not any vanilla shop objects using it.

brittle pasture
#

side note but I keep meaning to ask if the undonatable minerals fix is part of 1.6.16

uncut viper
#

they were a 1.6 thing

#

later on in the alpha iirc

#

i think the minerals is part of it?

lucid iron
#

The non item kinds of salable in vanilla are all special item query right

#

Pets wallet items and such

uncut viper
#

yes

brittle pasture
#

the fix for them showing up in the collections menu even though they cant be donated

hallow prism
#

oh that would be cool to have

#

i kinda gave up because i was under the impression it wouldn't be added

true coyote
#

so alls well in the end

tribal ore
#

I had a quick question about year variants in festival dialogue. I understand that they increment _y1, _y2, _y3, etc. What happens when you get to year 4 and nothing is defined?

floral canyon
tribal ore
#

Will it use the last one in the list (_y3), will it default back to the original key, will it grab the first one (_y1), or will it do some unholy thing where it decides to rotate the lines afterwards?

floral canyon
tribal ore
#

And if I want to rotate them manually through CP with a modulo operator, should I just define the original key without any year variants?

brittle pasture
# floral canyon So I have to also edit the wax input as well? i'm a bit confused why the wax nee...

depends on if you want UseFirstAvailableOutput to be true or false
since the machine's default to false let's use it. in this case the machine will evaluate the condition for both entries, filter out ones that are false, and randomly pick from what's left
so if you want wax to be outputted 25% of the time you'd have it be RANDOM 0.5, so 50% of the time it gets filtered out and 50% of the time it has to compete with honey (which should have no condition)

sour sleet
#

How do I make it so that my custom tilesheets change each season?

sour sleet
#

CP

latent mauve
floral canyon
uncut viper
#

the answer is the same in both CP and C#. name them [season]_[tilesheetname], load them all, and they will swap automatically

sour sleet
uncut viper
#

but make sure there are variants for each season

latent mauve
#

As long as they are all loaded to those targets, yep.

sour sleet
#

Ah ok, thanks everyone SDVpuffersquee

latent mauve
#

Yeah, game gets very mad if you only have one season variant and use that naming convention.

brittle pasture
floral canyon
brittle pasture
#

in that case that should be fine
what was your issue with the wax machine again

floral canyon
#

that no matter what you put in, sometimes when you pick stuff up from different wax station they all turn into the first item

uncut viper
#

(shouldnt you explicitly not put any internal names in i18, rather than just "you dont have to"? would doing so not break things as soona s the user swaps languages)

dusk mulch
ornate locust
ornate locust