#making-mods-general

1 messages · Page 68 of 1

valid folio
#

I looked at several bottle designs but they all require more pixels than I can use, but I'll keep trying.

vernal crest
#

I wonder how fast I can make an NPC...

knotty phoenix
brittle pasture
#

you still need to set where that music will play, but looks good to me

tiny zealot
#

looks more or less right

uncut viper
knotty phoenix
uncut viper
#

shapeshifting monster npc that steals the sprites and portraits of other characters...

tiny zealot
calm nebula
#

My academic advisor calls that self plagiarism

tiny zealot
#

(they probably won't like it if you do it)

uncut viper
#

selph got confirmation that you could submit a mod that was already a WIP but i guess the jury is still out on previously released

calm nebula
#

(Which is a nonsense concept imo. Self plagerism?)

uncut viper
#

i would also think they wouldnt like it

knotty phoenix
vernal crest
#

Okay got my coloured name

uncut viper
#

the preferred way is through the Data/Locations entry for that location

vernal crest
#

Event over

uncut viper
#

you can set music in the .tmx itself but its not recommended and only in specific circumstances is required (i dont remember that circumstance but it came up once)

brave fable
#

still no modding contest submissions SDVdemetriums nobody claiming an easy 15pts for renaming an npc to Seboostian and calling it a day

brittle pasture
#

I think I did it, goodness

    matcher.MatchStartForward(
        new CodeMatch(OpCodes.Ldftn),
        new CodeMatch(OpCodes.Newobj),
        new CodeMatch(OpCodes.Callvirt, AccessTools.Method(typeof(List<FarmAnimalProduce>), nameof(List<FarmAnimalProduce>.RemoveAll)))
          )
      .ThrowIfNotMatch($"Could not find entry point for {nameof(FarmAnimal_GetProduceID_Transpiler)}");

    staticHarmony.Patch(
        original: (MethodInfo)matcher.Operand,
        transpiler: new HarmonyMethod(typeof(AnimalDataPatcher), nameof(AnimalDataPatcher.FarmAnimal_GetProduceIDDelegate_Transpiler)));
uncut viper
#

(actually i think the circumstance was constructed building interiors? maybe?)

brittle pasture
#

(it's not throwing errors so it works, probably)

uncut viper
knotty phoenix
brittle pasture
#

wait do you only get 1 per person

knotty phoenix
#

so much has changed in the last year

uncut viper
#

you only get one submission yes

valid folio
#

I'm trying to copy that form but it's not going to work hahahaha I think I'll make a more standard form.

uncut viper
#

you can submit one entry to both the art contest and the modding contest but you only get one of each

#

i saw a junimo in #1292670497665974272 say that if you want to recant an earlier submission and resubmit you technically can if you ask them but they would really prefer you didnt

brittle pasture
#

what are they gonna do, ban me

#

(for legal reasons I must clarify it was a joke, pls dont ban)

uncut viper
#

even if they didnt would you be able to live with yourself for making the junimos sad for giving them extra work

#

you'd need to ban yourself

tiny zealot
valid folio
#

What do you think about using the game's own bottles and making it in another color? I have seen that many mods that add alcoholic drinks do that.

brittle pasture
#

editing vanilla sprites is a time honored tradition

#

feel free to do it if you want/if it makes your life easier

brave fable
uncut viper
#

you get one contest submission

tiny zealot
#

i'm sure you can make as many spooky-season mods as you want. but you only get 15 points once and only one entry gets judged

uncut viper
#

i would assume it means you cannot post more than once in the channel

#

i imagine they have the bot detecting that

#

hence why you'd need to ask to resubmit

tiny zealot
#

i'm not sure what the system is for choosing the one mod. last wins? locked out? dunno

vernal crest
#

I'm with Button in thinking you can only submit once

valid folio
uncut viper
#

the channels specifically say they are for submitting entries

#

so if you can only submit once, it stands that you can only post in there once

vernal crest
#

Last contest they said that you could submit as many times as you wanted but only the last one counts. This time, they only say "one submission allowed"

uncut viper
#

bc posting there is synonymous with submitting

#

just a maybe

#

so yeah id just bank on getting the one and dont be tempted into making a joke mod if you want to make a real mod too SDVpuffersquee

tender bloom
#

think I'm purple now

#

yay!!!

#

good color

tiny zealot
#

loving the purple so far

uncut viper
#

god this contest is gonna wreak fucking havoc on my at-a-glance name colour + length associations with people

#

thats how i remember who everyone is before reading their username

heady crest
#

how do i flip the npc animation on the schedule thing? :(

tiny zealot
#

the temporary roles will last an extra week, too, for more mayhem

tender bloom
#

yeah I had a hot sec where I didn't recognize atra between the color and the name

uncut viper
#

three weeks will be just long enough for me to get used to it just to have it yanked awayu again

#

do the colours of the contest winner roles override the normal server ranks if you dont have the mod author role SDVpufferthink

brittle pasture
#

one way to find out
one expensive way to find out

uncut viper
#

are you implying i should bribe the junimos

brittle pasture
#

are u willing to bet your shiny prpl

tiny zealot
#

as a contest winner, i'm fairly sure contest winner ranks below everything else

uncut viper
#

F

deep cypress
#

@ivory plume would it be OK to make the SocialPage.drawNPCSlotHeart, SocialPage.sprites, and SocialPage.isCharacterSlotClickable public?

uncut viper
#

well thats fine y'all are allowed to submit entries now then

vernal crest
#

Drat I need a way to make buffs on food hidden

#

In the description

uncut viper
#

surprise trick or treat candy..

vernal crest
#

Or...I can just force the player to eat the food

#

Yup that is my idea

uncut viper
#

i love it

calm nebula
#

also damn, I need to change my pfp too

next plaza
vernal crest
#

I have no idea, I've never done buffs or objects

uncut viper
#

if you use spacecore as a dependency can you call it a collaborative submission

vernal crest
#

xD

brittle pasture
#

very niche question: there is this runtime class, which is apparently automatically castable to FarmAnimal when passed into functions (without needing to call .<>4__this). should I rely on this behavior?

ivory plume
next plaza
ivory plume
#

That looks like the compiled type for a closure?

brittle pasture
#

yes, it's a delegate

#

I have code that does just that, which by all account should throw an error, but it doesn't

ivory plume
#

I wouldn't recommend depending on specific compiler artifacts, since they could change at any time (e.g. because the compiler decided a different way is more optimized).

next plaza
#

Are you sure it’s casting correctly? And not say resulting in null

brittle pasture
#

I'm not casting, just ldarg-ing it into a function call as is

#

a function that expects a FarmAnimal

next plaza
#

And the function call is getting the farm animal instance properly? Weird

#

I would expect the method to error when run or something

brittle pasture
#

heck I expect it to throw a 'invalid IL' on patching time, not even when run

brave fable
calm nebula
#

I agree with casey - I expect segfault

brittle pasture
#

me too, but it's not
anyway I made it work 'properly' because I'm nervous as hell lol

#

if you're trying to follow my madness: make a new function that accepts a FarmAnimal parameter, find this class, patch the <GetProduceID>b__0 function to add some code that calls that function, and just pass ldarg.0 to it ignore everything it doesn't work

#

(the only thing scarier than when code that you expects to work doesn't, is when code that you expects to crash and burn doesn't)

uncut viper
#

question about serialization and custom location types
if i wanted to make a custom location that only needs to exist temporarily, like a door that leads to a randomly generated room like a mineshaft, do i still need to register the location type with spacecore
also is there a good way to go about making a custom temporary location type

next plaza
uncut viper
#

got it SDVpufferthumbsup thats what i thought but i wanted to make sure before i got into it

next plaza
#

For locations not in the locations list you’ll need to do some extra stuff for Mp

#

Like what SpaceCore does for the dungeons stuff

uncut viper
#

oh this is for the mod contest multiplayer is ENTIRELY an afterthought

#

itll be a happy accident if it works well enough

#

ill try a little bit. but not a lot

next plaza
#

You might need to do some stuff for SP too

#

Can’t recall if the location update methods get called normally

#

Probably not if they aren’t in game locations list

uncut viper
#

SDVpufferthinkblob how do the active mineshaft locations get updated then?

#

i guess they probably just go through that list huh

next plaza
#

They’re in another container, which is also updated in Multiplayer I think (even in sp)

#

I think it’s updateNetRoots?

#

Or updateRoots?

#

SpaceCore patches that function to also update the other locations I think

#

Same way I did it for original Moon Misadventures

uncut viper
#

hmm. wouldja mind if i took a glance at how spacecore did it to help me figure it out if i cant on my own?

next plaza
#

It’s all in Dungeons/Dungeons.ca

#

Yeah of course

uncut viper
#

SDVpufferheart thank you!

velvet narwhal
#

SDVpufferthink what wouldn't bog down my modlist.............................

vernal crest
#

LOL whoops I just went to test my mod without having written a content.json or manifest.json >_<

blissful saddle
#

if I define a var ex = null on Entry and sucessfully give it a value on OnSaveLoad, it will reach with the given value at DayStarted, right?

#

I know I could test it, but it is past midnight here and I am tired of seeing the game title screen for today

#

just trying to close it to hit the bed

brittle pasture
lucid iron
uncut viper
#

we've all been there SDVpufferflat

brittle pasture
#

(yes, it will crash and burn)

velvet narwhal
#

i need a "me" emote

ivory plume
#

(Nexus accurately summarizing SMAPI's posts tab. SDVpufferpensive)

lucid iron
#

i wish i could make description text colorful think

uncut viper
#

cant you?

#

oh you mean in game

#

not on nexus

lucid iron
#

yea

#

the tooltip text

haughty charm
next plaza
brave fable
#

ha ha you forgot to call your function

uncut viper
#

me spending half an hour debugging my code before realizing i never hooked em into OnUpdateTicked

#

id like to say this has only happened a few times

#

but i cannot

velvet narwhal
#

i spent, what, 12 hours on a harmony patch that never ran?

brittle pasture
deep cypress
#

This bool charClick = (bool)Helper.Reflection.GetProperty<bool>(__instance, "isCharacterSlotClickable").GetValue();

makes this:

System.InvalidOperationException: The StardewValley.Menus.SocialPage object doesn't have a 'isCharacterSlotClickable' instance property.```
#

It also growled with GetField.

#

Is this I guess not a field or property?

    private bool isCharacterSlotClickable(int i)
    {
        SocialEntry entry;
        entry = this.GetSocialEntry(i);
        if (entry != null && !entry.IsPlayer && !entry.IsChild)
        {
            return entry.IsMet;
        }
        return false;
    }```
brittle pasture
#

it's a method

deep cypress
#

I see! Thanks! I will give GetMethod a shot! (it kept getting mad about something when I tried it but I forget what)

brave fable
#

your GetMethod call will look like this:```cs
int i = 0;
bool charClick = Helper.Reflection.GetMethod(__instance, "isCharacterSlotClickable").Invoke<bool>(i);

deep cypress
#

Awww thanks love!!!!!!!!!!!!!!!!!!!!!!

vernal crest
# next plaza You could use spacecores trigger action on eaten to apply a buff 😛 (or what atr...

Help, what am I doing wrong? The bagel item works and I can eat it, but nothing happens when I do (I just want the buff but I added the PlayEvent and ShowHudMessage in case I was just doing something wrong with the ApplyBuff action).

{
    "Changes": [
        {
            "LogName": "Add Trigger Actions",
            "Action": "EditData",
            "Target": "Data/TriggerActions",
            "Entries": {
                "{{ModID}}_Buff": {
                    "Id": "{{ModID}}_Buff",
                    "Trigger": "spacechase0.SpaceCore_OnItemEaten",
                    "MarkActionApplied": false, // Do I want this? Action doesn't happen either way
                    "Condition": "ITEM_ID Target {{ModId}}_Bagel",
                    "Actions": [
                        "spacechase0.SpaceCore_ApplyBuff statue_of_blessings_1 \"Ehh?\"",
                        "spacechase0.SpaceCore_PlayEvent 16",
                        "spacechase0.SpaceCore_ShowHudMessage \"message goes here\""
                    ]
                }
            }
        }
    ]
}
uncut viper
#

i think you need to add the food itself to spacecore's objectextensions or somethin i think to mark it as applicable for OnItemUsed stuff? i might be misremembering tho

vernal crest
#

Like this?

        {
            "Action": "EditData",
            "Target": "spacechase0.SpaceCore/ObjectExtensionData",
            "Entries": {
                "{{ModID}}_Bagel": {
                    "UseForTriggerAction": true
                }
            }
        },
uncut viper
#

i believe so

#

also MarkActionApplied: false means that the trigger action is repeatable

#

if it does get marked applied then it only happens the one time (or until its unmarked again)

#

so you do want it to be false

vernal crest
#

Thanks

uncut viper
#

(also looking at it again for food im not actually sure if UseForTriggerAction is the issue i mightve been confusing it with OnItemUsed SDVpufferflat)

vernal crest
#

I already had the ObjectExtensionData thing, by the way, so that does not fix my issue. I wasn't sure if it applies for OnItemEaten as well as OnItemUsed so I added it when the action didn't happen.

uncut viper
#

did you already test it before adding MarkActionApplied: false to it beforehand?

vernal crest
#

I've tried both ways

#

Having gone back to title to ensure the action wasn't marked as applied

uncut viper
#

have you tried changing Target to Input?

#

in the Condition

vernal crest
#

I have not, I will give that a go

#

! The event played!

uncut viper
#

\o/

vernal crest
#

Woo!

uncut viper
#

yeah custom triggers can decide whichever one of Input or Target they wanna send to

#

or both, if they wanted

vernal crest
#

Thank you, it did not occur to me to try Input. I had enough difficulty even figuring out what the <target> in ITEM_ID <target> <item ID> was meant to be.

#

Thank you!

#

Now to figure out how to make it apply a random buff

uncut viper
#

if you cant figure out another way, BETAS does have a RandomAction action

#

so you could have it choose from a list of ApplyBuff actions

vernal crest
#

Ooh nice

#

(The ObjectExtensionData was not necessary for OnItemEaten, just to confirm)

uncut viper
#

(v good to know, thank u!)

brittle pasture
uncut viper
#

those meanings are only guaranteed to be correct for those stated things though (machines, trees, shops). for a custom trigger it wouldnt help to know which should be which if the custom trigger doesnt document it

vernal crest
#

I was reading that, Selph, but got confused by the fact that it says they take a <type> argument but then the condition column in the table was referring to <target>.

brittle pasture
#

yeah I want to add "modded GSQs contexts can choose whatever the heck they want to lol" to the wiki page

#

just to clarify that it doesn't apply for modded GSQs contexts

uncut viper
#

its not the GSQ itself that determines it though

vernal crest
#

(Also once I did figure out the <type>/<target> thing I didn't know that custom triggers can choose which they want, so I went "well, a farmer isn't a machine so it must be Target")

brittle pasture
#

(and correct that)

uncut viper
#

the GSQ gets passed a context with the target and input items already set (or null)

#

my farmer is a machine

brittle pasture
#

s/GSQ/context/g

vernal crest
#

I wouldn't be surprised to learn that the farmer is actually considered a machine though lol

brave fable
#

the farmer is a machine that turns 🍝 into 💕

brittle pasture
#

fixed the wiki, hopefully it should be clearer-ish

#

anyway back to maze solving for my shiny color

velvet narwhal
#

oh true

brave fable
#

maze solving SDVdemetriums

velvet narwhal
#

i literally woke up, read through the event page, and started on my art submission SDVdemetriums

vernal crest
#

Button, how does your Spiderbuttons.BETAS_RandomAction <Action>+ account for quotes inside one of the actions in the list? I currently have "Spiderbuttons.BETAS_RandomAction \"spacechase0.SpaceCore_ApplyBuff statue_of_blessings_1 \"Ehh?\"\""" and while I haven't tried it in game, VSC is cross at me. Can I use single quotes somewhere to make it happier?

uncut viper
#

you can nest escaped quotes but i would just use ' for the very outside most quotes

vernal crest
#

Whoops ignore the <Action>+ bit

uncut viper
#

'Spiderbuttons.BETAS_RandomAction "spacechase0.SpaceCore_ApplyBuff statue_of_blessings_1 \"Ehh?\""'

vernal crest
#

All right I will give that a go, thanks.

uncut viper
#

VSC will still be cross with you if you arent using json5

late pewter
#

Stupid question but: Why is "0.0.0" not a valid verison number?

uncut viper
#

if something exists then there is at least A version of it

brave fable
#

same reason why 0 isn't a valid number of oranges

vernal crest
#

Hooray, that worked beautifully. VSC is cross but I can deal with that.

brave fable
#

question: can i use the changeToTemporaryMap <map> command during the event, and leave the player there after the event?

velvet narwhal
#

i've never tried that but i assume because the temporary doesn't 'exist' as a location, it'll bug out?

#

there is that uhhhh playerControl but i haven't been able to figure out how to wrestle command back from the player

brittle pasture
brave fable
#

i won't be taking control back 😌 i did just stumble across it tho

#

seems like you can't get away with a temporary map though since there's apparently no collisions

ivory plume
#

SMAPI implements the semantic versioning standard, where the numbers have specific meanings; 0.0.0 doesn't make sense in the context of that standard.

velvet narwhal
#

wdym no collisions? i remember being stuck in my temp map because i blocked things off SDVpufferthinkblob with playerControl

brittle pasture
#

(interesting, the standards recommends 0.1.0 as the first initial version. I've been using 0.0.1 lmao)

ivory plume
#

(0.0.1 would be a bugfix for the previous release, which never existed.)

#

(But mods don't actually need to follow the standard, as long as the format is valid and the numbers go up for each release.)

brave fable
#

nevermind, collisions are back for some reason SDVpufferthinkblob must've been the wind

#

map property warps don't work though for real, so maybe a cunning tile action SDVdemetriums

#

what're the rules regarding walking onto a TouchAction PlayEvent from within an event SDVdemetriums

velvet narwhal
#

SDVpufferthinkblob will it even let you is the real question, i know dialogue worked but i couldn't force a doAction <x> <y> to a sleep tiledata

brave fable
#
[game] Couldn't create the 'MovieTheater' location. Is its data in Data/Locations invalid?
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> Microsoft.Xna.Framework.Content.ContentLoadException: Failed loading asset 'Data\Movies'.
 ---> ArgumentException: Object of type 'StardewValley.Season' cannot be converted to type 'System.String'.

is this a nightly build thing SDVdemetriums

#

i haven't even looked at the movie theatre

#

and no, the game doesn't seem to respect touchaction playevent

#

unless SDVpufferthinkblob okay yeah it's not allowed

rancid temple
#

Oh dang, SpaceCore died in the latest beta huh

#

I'm not having any issues with my movie theater though

brave fable
#

aarrrg you can't even use Buildings Action PlayEvent

#

it'd be so nice to have a TouchAction NextEventCommand

ivory plume
rancid temple
#

Ah thanks, I didn't even look at the updates, got distracted looking for the movie theater stuff lol

brave fable
#

spacecore loads with the new smapi beta SDVpufferthumbsup

velvet narwhal
#

why must i have weird niches, i gotta go ask bouncer again SDVpufferweary

twin stirrup
#

Anyone remember/know the mod that patches this?

vernal crest
#

!recolor Do you mean the fix?

ocean sailBOT
vernal crest
#

The Partial Complement to DaisyNiko's Earthy Interiors

twin stirrup
brave fable
#

i was really hoping to be able to do this with just CP

#

event changes to temporary map, gives player control, player ends event when they touch a point

#

just can't seem to end the event

#

no clues in any event files i've looked in. only "Demetrius": "Egg... what a strange thing to eat."

velvet narwhal
#

i know there was the fancy thing in RRRR of a playerControl, with the skippable and it skips the playerControl into a new event

#

i have yet to recreate it because skippable and unskippable confuse me

late pewter
#

This is how the Multiplayer cabins work, right? There's 7 close cabins and 7 far ones?

brave fable
#

it's so rude that map property warps don't just not work in playercontrol events, they block whatever tile they're on

#

not even noclip mode passes through. incredible

teal bridge
unique sigil
#

man this reminds me, ive never really tested my maps in MP. but so far no reports, so i hope theyre fine haha

faint remnant
#
                        {
                            "Id": "Default_FeedHopper",
                            "ItemId": "(BC)99",
                            "Tile": {
                                "X": 7,
                                "Y": 4
                            },
                            "Indestructible": true
                        }
                    ],```
This isn't placing the FeedHopper in my building is there something special I need to do on the TMX side or in the code. The feed areas/trough I can still walk through which seems wrong too. I know it's pretty niche but you all have been amazing with helping me everything in the past!
brittle pasture
#

tiles need to be on the Buildings layer for them to be impassable

#

as for the feed hopper, hmm that code looks right to me. how did you build this building?

faint remnant
#

Like steps taken in tiled?

brittle pasture
#

Sorry, as in how you built it in your save

faint remnant
#

Built at robin as an animal house it gets the bugs in it correctly so I think that bit is right idk

brittle pasture
#

Did you build it before adding the feed hopper to the code

faint remnant
#

I did have it in there but I've moved it since but I'll try building a new one and see if that helps!

#

Genius

#

Appreciate you!

brittle pasture
#

that means that worked right 😅

faint remnant
#

haha yeah!

#

Hmm still can't place the Hay in the trough though

brittle pasture
#

did you add the tile property "Trough" to the "Back" layer (with value "T")

faint remnant
#

Dont think I know what that is

brittle pasture
#

recommend opening up a vanilla coop/barn map for reference

#

(huh this isnt documented on the wiki, which is strange since it's kinda important)

faint remnant
#

I did try to find an answer and I've looked at the vanilla ones just not super familiar with Tiled. I only see map properties. I dont see, on the vanilla ones, any Layer Properties

brittle pasture
#

it seems like vanilla maps set the property on the tilesheet itself

faint remnant
#

I tried using that tile from the normal coop tilesheet but that still didnt work :/

brittle pasture
#

yeah about to say

#

need to set them yourself in your map I think

#

Maybe you didn't add the tiles to the Back layer?
anyway I'm on my bed and about 5 mins to passing out so I can't help further, but yeah Back layer > "Trough" property

faint remnant
#

Yeah I was missing this bit in the actual code of the map

  <properties>
    <property name="Passable" type="int" value="0" />
    <property name="Trough" type="string" value="T" />
  </properties>
</tile>```
Thank you! It's working now
tough crater
#

Hello to all the nocturnal SDV modders! I have a question when it comes to the syntax for concession tastes and movie tastes.

After doing the typical EditData setup, I'm curious about which value is supposed to be the internal NPC name and the NPC display name:
"Entries": {
"JortsCat": { (#1)
"NPCName": "JortsCat", (#2)

Is #1 / #2 the internal name or the display name?

#

I pulled the code from the modder wiki

velvet narwhal
#
                    "Name": "Edelweiss", << display name```
brave fable
#

Data/Characters entries have no field named NPCName; the entry key is their internal name, and they have a DisplayName field inside

tough crater
#

Oh, so the code on the modding wiki needs updating? That makes sense! I'm still getting the hang of things

velvet narwhal
#

bluebs it's the moviereactions.json

#

#1 is internal, #2 is display

#

i think SDVpufferthinkblob

#

unless it just wants double internal

tough crater
#

I'd find it confusing for it to want double internal since it'd be pretty redundant, right?

rancid temple
#

I don't see a Name field in MoviesReactions

velvet narwhal
tough crater
#

That's from the unpacked XNB, right?

velvet narwhal
#

yeah

rancid temple
#

Entry keys aren't always used when CP adds entries to data

#

They're necessary for CP to know that something is part of that dictionary of entries, but not always used in the actual data transcribed

tough crater
#

Should I still keep the token "NPCName" or have it changed to "Name"?

rancid temple
#

The field NPCName is necessary for that data model

tough crater
#

Perfect 👍🏽

#

used the wrong thumb on accident 😭

velvet narwhal
#

i pulled mine from concessiontastes so that's my bad SMCKekLmaoDog

tough crater
velvet narwhal
#

moviereactions has uh, mid-interactions scripts

#

concessiontastes is their 'gifttastes' during the movie basically

tough crater
#

ahhhh makes sense

rancid temple
#

The wiki page for MoviesReactions probably could do with a reformat though

velvet narwhal
#

i've avoided making my own moviereactions tbh

tough crater
#

idk who the ones in charge of the modding wiki are, but I'm happy to provide the link to the page

rancid temple
#

It's basically everyone

tough crater
velvet narwhal
#

moviereactions are basically heart-events

#

they're unnecessary... iirc?

tough crater
#

They're more to spice things up?

velvet narwhal
#

yeah

#

that's from me vaguely handwaving because i've never tested it on my npcs

rancid temple
#

Making bigger changes to the wiki is still pretty low on my list of priorities lol

tough crater
#

That's understandable. Real life and working on mods takes a bigger priority lol

velvet narwhal
#

my own page on the wiki.gg: SDVpuffersquee
editing mainwiki: SDVpufferyikes

rancid temple
#

I can't even muster the desire to finish my wiki.gg pages lol

#

I reached an okay stopping point on the two tutorials I did and almost completely abandoned the mail flag page

velvet narwhal
#

valid

#

there's just Too Many Damn Mailflags ™️

rancid temple
#

Yeah, I mean I think I have all of them listed at least, but I was working on sorting and explaining them better

#

Which is tedious because that means tracking them down in the code and reading all the code around them to see where they're being added from

#

And trying to translate that into some kind of plain description of what is being done

vernal crest
#

We'll get it done one day

rancid temple
#

Eventually ™️

#

That's funny, the TM emoji doesn't auto convert to emoji format until after being sent

vernal crest
#

Oh it's an emoji? I was wondering how people did it without getting bonked for using superscript

rancid temple
#

Oh it's like actual text

#

I wonder if that's a built in function of Discord ©️

vernal crest
#

™️

#

If I copy it, it copies the whole :tm: thing, that's fun

rancid temple
#

That's very neat lol

velvet narwhal
#

man

#

i really didn't wanna rush this art submission but my brain is losing traction

#

i can now go and make that scarecrow building with ample excuse

rancid temple
#

Ah the crows, another project I may end up backburner-ing lol

#

I've got the building working mostly how I want, but I couldn't decide how I wanted to handle random item drops

velvet narwhal
#

i was gonna ask if you wanted to collab since i couldn't get the crow spawning and i don't think my brain would be able to handle it right now

#

SDVpufferthinkblob critters don't drop things huh

rancid temple
#

I'm not opposed though also I can't say I'm very reliable for such things lol

#

Yeah, was just gonna make the building drop an item if crows spawned that day on a percent chance

velvet narwhal
#

oh maybe with the item_spawning?

rancid temple
#

Which actually, I still need to make the item actually drop, currently just creating an instance

velvet narwhal
#

just, on the floor, like animals SDVkrobusgiggle

rancid temple
#

Alternatively, giving it a chest to hold the items might be better. Not sure how long dropped items can live on the ground

velvet narwhal
#

i am also contemplating a 'crow' as either a pet or a coop animal

rancid temple
#

I did consider adding a raven critter that doesn't spook the way crows do, but that felt too much like scope creep lmao

velvet narwhal
#

i do those mazes while i rest

uncut viper
#

open a bunch of different tmxs to mess with a bunch of them to see which one i wanna base my edit off of
(so like 12 different maps with various amounts of mess made on them with different tilesheets added/removed/painted tiles etc)
finally decide on one and make a bunch of edits and go to save it
and accidentally do File > Save All to save every map i still had opened
SDVpufferflat

#

(all bc i decided "maybe ill work in the unpacked folder this time"...)

vernal crest
#

Oh nooo

uncut viper
#

ill just re-unpack later SDVpufferpensive

vernal crest
#

I also never work in the unpacked folder for that reason. Also because I am always accidentally leaving mod maps and tilesheets in there and then think they are vanilla (which I saw you say you do as well).

uncut viper
#

yup, thats exactly my usual reasoning lol

#

also i lied i forgot i need to unpack Now actually bc i need to make several variants based off this same map. which ive now saved over. rip.

tough crater
#

Do custom maps require using C#?

uncut viper
#

they do not

vernal crest
#

Nope

tough crater
#

thank god

#

I kinda wanna avoid using C# for mods, but I feel like doing some might add some extra depth

uncut viper
#

you make a map in Tiled and can make your custom location use it by adding it to Data/Locations with Content Patcher

vernal crest
#

Does the game actually use the "Full" and "Quenched" buffs anywhere?

velvet narwhal
#

well fed? SDVpufferthinkblob

tough crater
#

Do those happen when you eat/drink a ton at once?

velvet narwhal
#

idk about quenched

rancid temple
#

I'm pretty sure quenched is used, but it's like hardcoded I think

vernal crest
#

I shall have a look in the decompile then

#

I don't remember seeing them in game but that doesn't mean much haha

#

How on earth am I going to search for something with an id of "6"

rancid temple
#

I suggest not lmao

#

Is that the buff ID?

vernal crest
#

Yes

#

6 for full, 7 for quenched

rancid temple
#

You can try searching for hasbuff("6

vernal crest
#

Ooh that gave me something

rancid temple
#

Looks like if you have quenched it adds a hud message and returns

#

So stops you from drinking I guess

#

Definitely not the buff I was thinking of lmao

vernal crest
#

I don't know how you reach that

velvet narwhal
#

SDVpufferthinkblob a ginger island drink...maybe?

vernal crest
#

I was just non-stop eating before when I was testing the trigger action

rancid temple
#

I dunno if those buffs are ever used

#

They exist and are checked but I'm not finding them being applied lol

vernal crest
#

I also am not sure

velvet narwhal
#

looks like, 17, 23, 28 are the only buffids that are in objects.json

vernal crest
#

I can't find how this section determines what buffId can be included. (Not sure if this is the section that would apply those buffs anyway, but yanno)

        /// <summary>Apply a buff to the current player.</summary>
        /// <inheritdoc cref="T:StardewValley.Delegates.TriggerActionDelegate" />
        public static bool AddBuff(string[] args, TriggerActionContext context, out string error)
        {
            if (!ArgUtility.TryGet(args, 1, out var buffId, out error) || !ArgUtility.TryGetOptionalInt(args, 2, out var duration, out error, -1))
            {
                return false;
            }
            Buff buff = new Buff(buffId, null, null, duration, null, -1, null, false);
            Game1.player.applyBuff(buff);
            return true;
        }
rancid temple
#

That's just the debug command

#

Er trigger action

#

It takes arguments

#

If it's a built in trigger action it should be on the wiki

vernal crest
#

Oh yes there is an AddBuff trigger action

#

So not what I am interested in

rancid temple
#

Chances are good that the base game code would just apply the buffs directly, rather than use a trigger action

#

Which it does in several places, but I can't find anything that applies either of those buffs

vernal crest
#

Yes that makes sense

rancid temple
#

I guess it was just a feature that was skipped lol

vernal crest
#

I am just looking at a bunch of bits of code with "buff" in them, trying to find where buffs are applied

rancid temple
#

Probably because it sucks

vernal crest
#

So basically doing what you're doing, but slower and worse

rancid temple
#

I searched buff, saw over 1k hits and decided that was the wrong way lmao

vernal crest
#

And have successfully manipulated you into doing it for me SDVkrobusnaughty

rancid temple
#

Let's say half manipulation, half my brain latching onto literally anything other than writing my documentation SDVkrobusgiggle

vernal crest
#

We both win!

#

Thank you for checking for me. I will ignore those two buffs and move on.

#

Numeric IDs are the worst

rancid temple
#

Yeah, it's a shame it would have been so troublesome to switch them all to plain text during the change

velvet narwhal
#

oh no

#

i think i might let uber pick what idea i'm going to go with

#

i now have a list

vernal crest
#

Humm I can't get it to apply a modified hardcoded buff, I don't think

rancid temple
#

The trigger action?

tough crater
#

[Unrelated] I swear I had a file in the past that had a complete list of movies for my NPC's reactions and whatnot. I can't find that file anymore and I can't find a comprehensive list online either (Google is the absolute worst). Can anyone help me with tracking down the whole list for Content Patcher purposes?

vernal crest
#

I am making copies of all the vanilla buffs with edited durations to use with the trigger action, because I can't use the trigger action itself to adjust the duration.

#

But I have to give them new IDs for that, which will stop mine from being able to apply the effects of the hardcoded buffs.

tough crater
#

I want unique responses to each movie, and some of the responses are very generic (using tags for genres)

rancid temple
#

Sometimes the translated text strings have the actual english name of the thing they're for, I miss that when I come across ones that don't (like for buffs)

tough crater
vernal crest
#

Some of the buffs do - if you mean like "DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:Nauseous_BuffName]",

rancid temple
#

Ah yeah, that's what I mean, I guess that's good lmao

vernal crest
#

I wonder if they're from 1.6?

rancid temple
#

I think nauseous has been in the game for a while

vernal crest
#

Weird that it's inconsistent then

tough crater
rancid temple
#

Well, unfortunate, but not that weird actually lmao

vernal crest
#

Like frozen is "DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:Buff.cs.466]",

#

Maybe he's like me and changes process halfway through things

rancid temple
#

How are you applying the trigger action?

#

I was able to give myself naeusous for 1000 milliseconds with debug action which just runs a trigger action as far as I'm aware

vernal crest
#

I guess I don't need the spacecore action

rancid temple
#

Oh, I would guess it's probably an issue with the SpaceCore action in that case lol

vernal crest
#

I forgot that AddBuff was a vanilla trigger action

#

I wonder why Casey made ApplyBuff

#

Maybe to allow for the source message

rancid temple
#

Maybe it was from before trigger actions and then was updated just for compat

vernal crest
#

Maybe. Well, that simplifies things a lot if I don't have to add any new buffs.

uncut viper
vernal crest
#

Just think how clunky this mod would be if I wasn't basically live-blogging it in here 😂

rancid temple
#

Design by community

vernal crest
#

Yeah I feel like I will need to submit this as a collaborative mod

velvet narwhal
#

i don't think it'd count tbh, i consider collab as like, one person doing code/the other doing art or something

rancid temple
#

I think there's a definite difference between getting help for something and having people actually work on a project with you

vernal crest
#

I was kidding....mostly...

#

I do feel like if everyone else is thinking for me then does my part even count haha

velvet narwhal
#

you thought of it to then ask where to go SDVpufferthinkblob

rancid temple
#

We're still not writing the actual code :P

velvet narwhal
#

hmm, if i make the farmhouse image...bigger via spacecore it won't get the collision huh

#

i'm not really interested in making a farmhouse + farm for this idea SDVpufferpain

vernal crest
#

Hmm I was going to suggest adding buildings layer tiles to the farm with CP but that would rely on knowing what map the farmhouse was on.

velvet narwhal
#

i could combine two ideas but ........i'm uninterested in making the farm cave

vernal crest
#

Can't it just be a normal farm cave?

velvet narwhal
#

will my perfectionism allow that though SMCKekLmaoDog

vernal crest
#

If your perfectionism is going to stop you from even starting something you would otherwise enjoy, I kick it

tough crater
#

I will beat up your perfectionism for you

#

Free of charge 👊🏽

velvet narwhal
#

y'know, on second thought i might not make a building, i have realized it is one of my weakest points SMCKekLmaoDog

tough crater
#

Can someone explain what "reaction_<number>" actually does in MoviesReactions?

#

It doesn't function like emotes

velvet narwhal
#

kinda like sprite index but it's just for indexing the movie number iirc

#

an npc's 'numerical id' of their reactions, i guess?

tough crater
#

That's strange

#

When looking at the unpacked file, the numbers seem arbitrary

#

reaction_0 has the most uses and goes as high as reaction_11

velvet narwhal
#

yeah basically every npc has a numbered list for their reactions, some don't react to all movies, kind of like their portraits i guess is the better way to describe it
some npcs have $0, $1, $2 etc, while some only have $0

tough crater
#

Does it impact their dialogue in some way?

uncut viper
#

those are just the IDs of those list entries in their list of reactions

#

they dont mean anything they just uniquely identify that reaction entry

tough crater
#

Oh that makes more sense now 😂

uncut viper
#

same way the id on a shop entry just uniquely identifies that for sale listing

lucid comet
#

@rancid musk just wanted to say thank you for making it pretty darn simple to make the ingame HUD fit in with the rest of my ui shenanigans <3

#

(also, maybe trying to read documentation at 4am in the morning might not be the smartest idea ...... after sleep this was way simpler SDVpuffersquee )

brave fable
quartz dagger
#

alright yall... time to make another interface mod for the event hc_hype

brave fable
#

shoutout to the most bizarre pattern i've seen in the decompiled game code at Event.setUpPlayerControlSequence():

switch (id.Length)
    case 10:
        switch (id[0])
            case 'h':
                if (id == "haleyBeach")
                ...
                break;
    case 11:
        switch (id[0])
            case 'e':
                if (id == "eggFestival")
                ...
                break;
    ...
#

i can't even begin to imagine why

lucid comet
#

bizzarre sounds about right .... i get what it does. but why? o.o

#

could maaaaaaybe be optimisation stuff? so you dont have to switch over all ids at once? dont remember how expensive switch was

#

but then why wouldnt you also switch in the innermost part?

rancid temple
#

atra had linked me something about this before

velvet narwhal
#

maybe, playerControl <id> and then... a break? like (break) in the event commands?

fossil osprey
#

That's a perfect case of optimisation vs readability
Although I'm not sure it is truly more efficient, sometime it's better to not be fully optimised if it means it's more easy to maintain

velvet narwhal
#

does it run like a quickquestion? that's wild

blissful panther
#

Which decompile version is that? It looks completely different in mine...

velvet narwhal
#

i have this:

{
case 10:
    switch (id[0])
    {
    case 'h':
        if (id == "haleyBeach")
        {
            Vector2 tile = new Vector2(53f, 8f);
            Object item = ItemRegistry.Create<Object>("(O)742");
            item.TileLocation = tile;
            item.Flipped = false;
            this.props.Add(item);
            this.playerControlTargetTile = new Point(53, 8);
            Game1.player.canOnlyWalk = false;
        }
        break;
    case 'p':
        if (id == "parrotRide")
        {
            Game1.player.canOnlyWalk = false;
            this.currentCommand++;
        }```
rancid temple
brave fable
#

i trimmed it down a little to avoid filling chat. you can see its natural beauty in the method yourself

blissful panther
#

I have:

public void setUpPlayerControlSequence(string id)
{
    this.playerControlSequenceID = id;
    this.playerControlSequence = true;
    Game1.player.CanMove = true;
    Game1.viewportFreeze = false;
    Game1.forceSnapOnNextViewportUpdate = true;
    Game1.globalFade = false;
    this.doingSecretSanta = false;
    switch (id)
    {
    case "haleyBeach":
    {
        Vector2 tile = new Vector2(53f, 8f);
        Object item = ItemRegistry.Create<Object>("(O)742");
        item.TileLocation = tile;
        item.Flipped = false;
        this.props.Add(item);
        this.playerControlTargetTile = new Point(53, 8);
        Game1.player.canOnlyWalk = false;
        break;
    }
    case "eggFestival":
        this.festivalHost = this.getActorByName("Lewis");
        this.hostMessageKey = "Strings\\StringsFromCSFiles:Event.cs.1521";
        break;
brave fable
#

i needn't have bothered cutting it down since now there's 3 in chat of different sizes lol

blissful panther
#

We made it worse, yes.

brave fable
#

i didn't think this method could get much worse SDVpufferfush

velvet narwhal
#

i assume DH is on the latest latest beta

#

unless my ilspy is just hiccuping

frigid hollow
#

DH's one is the same as i have and mine is 1.6.8

velvet narwhal
#

SDVpufferpain mine is from build 24290 of the beta

blissful panther
#

But yeah, I don't even have an id.Length anywhere in it... and this is just from the latest 1.6.8 decompile repo.

brave fable
#

ilspy on tonight's 1.6.9 update gives switch -> case -> switch -> case -> if

#

so you're telling me it got worse in 1.6.9

#

who's responsible for this

velvet narwhal
#

who did this

lucid comet
#

or this is optimisation 😉

brave fable
#

this method is called once per festival SDVpufferfush

rancid temple
#

I am pretty sure it's just decompiler weirdness

lucid comet
#

wouldnt be surprised if that is some compiler optimisation over long switch stuff

velvet narwhal
#

tbf i haven't installed a new ilspy since i first started modding, and that was back in june

rancid temple
#

Or compiler weirdness I guess

brave fable
#

oh my god events even have a doAction x y command i could use. if only i could

#

this playercontrol @*!#( has wasted so many hours of my time lol

velvet narwhal
#

i wonder if i can make a quickrepro for what you're asking for, because i have seen it done

brave fable
#

you can try if you like, but i'd be worried you spend time making a repro for something slightly different to what i'm after

velvet narwhal
#

well you just want

#

a temporary map + playercontrol + switchevent, right?

brave fable
#

yessss temporarymap optional if need be

#

i put a moment into making an npc that'd wait at the touchaction i wanted and with a dialogue containing an event-change command.. then realised npcs don't appear in events

velvet narwhal
#

SDVpufferthinkblob if you summon them at the start they should always be there

brave fable
#

with dialogue?

velvet narwhal
#

like festival dialogue? probably not unless you called it with the localized string

#

actually what does the doAction say an npc will say SDVpuffersquint

#

If you use it on an NPC you will talk to them, and if the player is holding an item they will give that item as a gift.

#

so, force an addconversationtopic, have that conversation topic in the NPC's data

#

and maybe they'll hopefully say it?

brave fable
#

jfc

velvet narwhal
#

i will add that into the list and check- LMFAO

brave fable
#

i thought this would be simple

velvet narwhal
#

noh

brave fable
#

true

velvet narwhal
#

noh it is not

brave fable
#

maybe loadActors in the event script will let me bake an npc in. and somehow let me get the dialogue right

#

schedule the event and dialogue to have the same condition

blissful panther
#

The more I see people talk about event creation, the more I think it might be less effort to just make a completely custom event system than make a few events...

velvet narwhal
#

is casey still doing that yarn implementation

brave fable
#

oh nice loadactors uses pictures of vanilla npcs as tiles instead of listing npc ids

#

very cool

brave fable
velvet narwhal
#

honestly if you're used to that you might have an easier time, but i continue this Hell ™️

brave fable
#

oh my god..... bald gus..

velvet narwhal
#

ooookay

#

time to see if this chaos will work

brave fable
#

loadActors works, but krobus isn't interactible still, so no dialogue tricks

#

not sure why festivals have a free pass for you to talk and warp and stuff but sure can't do it here

velvet narwhal
#

i don't think i can do the playercontrol from a temporary map

#

lemme see if i can just make it all in the farm

velvet narwhal
# brave fable loadActors works, but krobus isn't interactible still, so no dialogue tricks

sadly i cannot talk to him SDVpufferflat

  "Action": "EditData",
  "Target": "Data/Events/Farm",
  "Entries": {
    "{{ModId}}_playerControlrepro/": "continue/0 0/farmer 0 0 0 Marlon 0 0 0/addconversationtopic {{ModId}}_ControlRepro 1/speak Marlon \"Well g'day.\"/skippable/switchEvent {{ModId}}_playerControl1",
    "{{ModId}}_playerControl1": "pause 300/speak Marlon \"Avi is too lazy to do i18n strings.\"/pause 300/addmailreceived {{Modid}}_playercontrolexplored/playerControl jellies",
    //continues to this event once playercontrol is skipped?
    "{{ModId}}_playerControl2/e {{ModId}}_playerControlrepro/n {{ModId}}_playercontrolexplored": "continue/0 0/farmer 0 0 0 Marlon 0 0 0/skippable/pause 300/speak Marlon \"This is the third dialogue box.\"/pause 300/end"
  }
},```
brave fable
#

yep i tried too
"communityCenter/-2000 -2000/farmer 1 2 1/pause 500/spriteText 4 \"test\"/pause 500/changeToTemporaryMap Custom_bbhm_1/loadActors Set-Up/playerControl Custom_bbhm_1/viewport player clamp true unfreeze/globalFadeToClear"

velvet narwhal
#

could you somehow finagle a TileData dialogue?

#

i know those actually worked but that'll unfortunately just be a "message" box, not a portrait box

brave fable
#

action and touchaction don't work 😌 npcs were the last ditch effort

velvet narwhal
#

wait

vernal crest
#

So many buffs!

velvet narwhal
#

you did the whole strings/stringsfrommaps?

brave fable
#

well i didn't give him any dialogue, but he'd have his own already on the stack surely

#

or do i try that now lol

velvet narwhal
#

the strings/stringsfrommaps will let you interact during playercontrol but it will be a portraitless box

#

i don't... know how to make it force a portrait one

brave fable
#

as long as i can use $v <event id> from it it's fine

velvet narwhal
#

i don't remember if actions are fixed for TileData dialogue SDVpufferthink i know that my i18n key just shows the command

brave fable
#

fuck it, c#

calm nebula
#

Search "dotnet switch on string trie"

blissful panther
#

There's no way it would have ever been hand-written that way, yeah... but that's good to know!

brave fable
#
Event.checkAction() {
  if (!isFestival)
    return false;
  ...
}```
![SDVpufferfush](https://cdn.discordapp.com/emojis/1168274651701575772.webp?size=128 "SDVpufferfush")
#

stupid game

#

that really is a very silly optimisation

#

still, that really is a very impressive prformance boost lol

lucid comet
#

it makes sense when you think about it, but at first glance? very perplexing ^^

calm nebula
#

Memo to self: actually just unroll a switch manually and hide it in my repo somewhere

velvet narwhal
#

SDVpufferthinkblob are synced_random keys anything? like i just basically have to put a uniqueid like cp's random pinned key?

vernal crest
#

Yup

velvet narwhal
#

.......weird

#

i drop this in button's thread then

vernal crest
#

Why is that weird?

velvet narwhal
#

i got a bugreport about BETAS

#

and the entry key shouldn't give a damn about me putting a period in it SDVpufferthinkblob

rancid temple
#

Depends on how it's being used

velvet narwhal
#

{{ModId}}_RightInTheKisser2.5

#

for triggeraction

#

sorry, orange son is now in front of my monitor

rancid temple
#

It's possible that whatever is consuming it is treating periods as delimiters

velvet narwhal
#

i can't tell exactly because i have no idea why it's giving a quest error out of BETAS

#
  "Id": "{{ModId}}_RightInTheKisser2.5",
  "Trigger": "Spiderbuttons.BETAS_NpcKissed",
  "Condition": "ITEM_ID Target Lance, PLAYER_HAS_MAIL Current {{ModId}}_SPICY12, SYNCED_RANDOM day cart_rare_seed .5 @addDailyLuck, PLAYER_HAS_SEEN_EVENT Current 6951319",
  "Actions": [
    "Spiderbuttons.BETAS_SetNewDialogue \"Lance\" \"{{i18n:Lance.MODERATE_{{Random:{{Range: 0, 5}}}}}}\" false",
    "MarkActionApplied Current {{ModId}}_RightInTheKisser2.5 false"
  ]
},```

err mesg: `[Button's Extra Trigger Action Stuff] Could not get raw quest type from quest id : argument list is null`
#

ig i can just throw these trigger actions and just change out the npcname to see if i can repro

#

well that was terrifying

#

oh i'm dumb i didn't set up the stupid spouse room

#

SDVpufferthink yeah i have... absolutely no idea how this person got that error

blissful saddle
#

Anyone knows how and when game uses Game1.NewDay as a boolean mark?

#

I really don't want to look at the decompiled game, but if I have to...

#

I found it. It doesn't work to me...

small meteor
#

hi i noticed there are no sandbox commands as its developers console only, is there a mod that lets me play the game in sandbox? like commands for money etc

thorny tiger
#

bonk

#

but yeah use cjb cheats and cjb item spawner and honestly that's probably all you need

frigid hollow
#

and noclip mode

fair river
#

so, i have a quick question to those, who are more in this stardew valley modding thing

i started playing modded stv with expanded, and ridgeside, and i found out, that, there is this "east scarp" expansion, that i wanna add as well, if its possible, im in the first year, end of spring, is it still possible to add it, or will i just corrupt my current world?
if possible, i dont wanna start a new character

brisk kraken
#

Im making a question fork for an event that changes the event depending of the answer. How does exactly work? I looked at the wiki and SebastianRoom event. I know how to make the question fork, but I dont understand how it picks A or B for the answer

brisk kraken
ocean sailBOT
#

@brisk kraken You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

crystal stone
#

Good morning~ new modder here. I am trying to make a content patcher mod that re-colors the dirt in Stardew. I have been following the steps on the Stardew wiki page but have hit a snag. 1. I still don't where I should get the coordinates for the sprite from (which I think is what the issue is) 2. The mod is installed correctly according to SMAPI but I see no change once I go in game. Other than the coordinates probably not being right am I missing anything else? See the content.json file below and let me know if you need anything else. Thanks a bunch SDVpufferblob

#

{

"Format": "2.3.0",

"Changes": [

{

    “Action”: “EditImage”,

    “Target”: “TerrainFeatures/hoeDirtDark”,

    “FromFile”: “assets/hoeDirtDarker.png”,

    “FromArea”: { “X”: 300, “Y”: 312, “Width”: 192, “Height”: 64 },

    “ToArea”: { “X”: 300, “Y”: 312, “Width”: 192, “Height”: 64 }

    

},

]

}

lucid iron
#

the hoedirtdark is only used in mountain and mines/volcano

tiny zealot
crystal stone
lucid iron
#

TerrainFeatures/hoeDirt is the general one

lucid iron
#

TerrainFeatures/hoeDirtSnow for winter

tiny zealot
#

hi gamingkitty, i was replying to a different user

vernal crest
# crystal stone { "Format": "2.3.0", "Changes": [ { “Action”: “EditImage”, ...

When you find the correct thing to edit, your X and Y coordinate for the FromArea will usually need to be 0 for both of them and your X and Y for your ToArea needs to be the upper left corner of the spot on the tilesheet you want to target. Right now, with hoeDirtDark, you're telling Content Patcher to start from a point that doesn't even exist on either tilesheet.

crystal stone
lucid iron
#

nah these 3 sets of tiles are dry, wet, paddy

#

the dry dirt always shows, and the wet & paddy tiles are overlay that apply when you meet conditions

vernal crest
#

(Chu I am just advising them on how FromArea works - I have no input on whether it's the actual tiles they are intending to make darker lol)

lucid iron
#

yea its good that u r explain this bolbwawawa

#

but i did want to clarify how dirt is work

crystal stone
#

Thanks for everything! I will see if I can locate the correct file and give this ago again!

proven spindle
brisk kraken
#

Hmm so you need to make a separate event for that option? Like

Event A:

Answer 1-->Proceed Event A
Answer 2-->Start event B

#

works like this?

fair river
proven spindle
tiny zealot
velvet narwhal
# brisk kraken Hmm so you need to make a separate event for that option? Like Event A: Answer...

trunicated for clarity
/quickquestion {{i18n:Lance.11Heart.25}}(break)speak Lance \"{{i18n:Lance.11Heart.25.1}}\"(break)speak Lance \"{{i18n:Lance.11Heart.25.2}}\"/pause 900/emote farmer 40/emote Lance 8/quickquestion {{i18n:Lance.11Heart.26}}(break)switchEvent LEBattlegroundSTOP(break)switchEvent LEBattlegroundSWITCH

"Lance.11Heart.26": "...#'Is it alright if I rest for awhile?'#'Can you... keep me close?'",

"LEBattlegroundSWITCH": "pause 200/quickquestion {{i18n:Lance.11Heart.26.2.1}}(break)switchEvent LEBattlegroundFIRST(break)switchEvent LEBattlegroundSECOND(break)switchEvent LEBattlegroundSTOP",
"LEBattlegroundFIRST": "pause 200/quickquestion {{i18n:Lance.11Heart.28}}(break)switchEvent LEBattlegroundSECOND(break)switchEvent LEBattlegroundSPICE(break)switchEvent LEBattlegroundSTOP",
"LEBattlegroundSECOND": "pause 200/quickquestion {{i18n:Lance.11Heart.29}}(break)switchEvent LEBattlegroundFIRST(break)switchEvent LEBattlegroundSPICE(break)switchEvent LEBattlegroundSTOP"
      }```

the quickquestion can be shoved into a singular i18n key separated by hashes to indicate a 'separate answer'
and this is my crazy looping quickquestion that'll keep on looping until the player says 'i've had enough' in a quickquestion

nonlooping:
```"LEHighlandsPredicament/e 65360188/f Lance 750/": "continue/-1000 -1000/farmer -100 -100 2 Lance 129 113 0/skippable/quickQuestion {{i18n:Lance.3Heart.03.q}}(break)switchEvent LEHighlandsPredicament_handle(break)switchEvent LEHighlandsPredicament_offer(break)switchEvent LEHighlandsPredicament_together",
"LEHighlandsPredicament_handle": "pause 200/end",
"LEHighlandsPredicament_offer": "pause 200/end",
"LEHighlandsPredicament_together": "pause 200/end```
#

but every (break) indicates, "hey, the player picked option 2, not option 1! use that one instead"

brisk kraken
#

Thanks, now I can at least use something as a guide! ^^

velvet narwhal
#

lemme see if i have a uh... less chaotic one

velvet narwhal
#

YARN IS HERE

next plaza
#

I still haven't released it 😛

#

Still need to make it where you can use your own mod's tokens

velvet narwhal
velvet narwhal
#

i might have an example of that one sec

blissful panther
velvet narwhal
# brisk kraken Ohh I like the chaotic mode!

"LEFeelingsYes": "pause 500/quickQuestion {{i18n:Lance.10Heart.pt2.21}}(break)setEngaged Lance false 1\\addmailreceived {{ModId}}_1DayEngage(break)setEngaged Lance false 2\\addmailreceived {{ModId}}_2DayEngage(break)setEngaged Lance false 3\\addmailreceived {{ModId}}_3DayEngage(break)setEngaged Lance false 4\\addmailreceived {{ModId}}_4DayEngage(break)setEngaged Lance false 5\\addmailreceived {{ModId}}_5DayEngage/pause 600/end" with the chaotic route, note that THE VERY LAST COMMAND continues the original event script

brisk kraken
#

Ohhh is like an inside but independent box

#

Alright, alright, thanks

velvet narwhal
#

as soon as you use a / for the last command, it continues

next plaza
#

Which I'm not skilled enough for yet

lucid iron
#

Can't believe emoji kitchen doesn't have cat + yarn

finite ginkgo
calm nebula
#

What about a hamster

blissful saddle
#

Ok, I really need help now...

I have this event that triggers a new day if the clock hits 600 again:

        private void GameLoop_TimeChanged(object? sender, TimeChangedEventArgs e)
        {
            if (!TCtriggered)
            {
                this.Monitor.Log($"TimeChanged Triggers", LogLevel.Debug);
                TCtriggered = true;
            }

            if (e.NewTime == 2200)
                Game1.player.doEmote(24);

            if (e.NewTime == 2550)
                Game1.timeOfDay = 150;

            if (e.NewTime == 600)
                if (!isNewDay)
                {
                    this.Monitor.Log($"NewDay Triggers", LogLevel.Debug);
                    isNewDay = true;
                    NewDay();
                }
                else
                    isNewDay = false;
        }

Or would it, because it triggers twice every morning, skipping one day

#

what am I doing wrong?

#

ok, forget it. I think I found. I just needed to see it in another context...

#

if farmer goes to bed before it triggers on the day, and the flag is false, it will hit 600 with the flag false next morning, and triggers it

#

I thought I could do with with only one flag, but seems not possible...

#

RubberDuck indeed lol

finite ginkgo
# calm nebula What about a hamster

i mean I'm up for a hamster too, but considering Casey's "They just don't bring me joy like cats do" attitude that would be a no, but maybe I should make my own yarn adjacent mod for a hamster yarn icon instead

latent mauve
#

Hear me out: What about a hamster sitting on a cat's head?

velvet narwhal
#

just make one of those collages where it's all smaller images that make up a bigger image, the smaller images are all hamsters that make up a cat + yarn

finite ginkgo
#

"why is the icon so large"
"don't look too much into it"

velvet narwhal
#

a hamster in a halloween costume of a cat, playing with a normal sized ball of yarn and it's looking at it like

latent mauve
#

I have a mental image of a cat playing with a ball of yarn while a hamster is hanging onto a loose string for dear life.

#

Thank you, I needed that laugh. xD

whole raptor
#

I wish we could hide broken translations on our mod pages or something...

#

I've already gotten like 50 comments/bug reports with the same exact problem because of that SDVpuffersquint

blissful saddle
#

my Night Owl Plus is almost done

tiny zealot
#

i have outdated translations, but also no one has complained because my mod isn't that level of popular

whole raptor
#

My reports are caused by me switching to i18n way later than I should've 😅

velvet narwhal
#

ah, a shot into the foot SMCKekLmaoDog

lucid iron
#

was i18n not a thing when you started the mod

whole raptor
#

I mean... the mod is 3 years old, but it probably was a thing, just less used iirc. But it took me a while, cause I was always modding other mods, so if said mod wasn't in i18n format I never took the initiative to covert it myself (until I made the converter specifically for that hah)

#

I fully converted it a little over a year ago, but people still like to choose the first translation from the list instead of the most recently updated one...

calm nebula
whole raptor
#

I did post a suggestion (didn't even know Nexus had a feedback section...)

velvet narwhal
#

SDVpufferpain now it's my turn to suffer sprites in detail debugging

whole raptor
#

Time to see how Button's CMCT works in action

blissful saddle
#

having a ModEnabled on GMCM menu, which is the better way to disable the mod midgame?

#

I thought about make a secondary bool flag and take the events out on UpdateTicking event

#
        private void OnUpdateTicking(object? sender, UpdateTickingEventArgs e)
        {
            if (!Config.ModEnabled && ModRunning)
            {
                helper.Events.GameLoop.SaveLoaded -= this.OnSaveLoaded;
                helper.Events.GameLoop.DayStarted -= this.OnDayStarted;
                helper.Events.GameLoop.TimeChanged -= this.OnTimeChanged;
                helper.Events.GameLoop.DayEnding -= this.OnDayEnding;
                helper.Events.GameLoop.Saving -= this.OnSaving;

                ModRunning = false;
            }

            if (Config.ModEnabled && !ModRunning)
            {
                helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded;
                helper.Events.GameLoop.DayStarted += this.OnDayStarted;
                helper.Events.GameLoop.TimeChanged += this.OnTimeChanged;
                helper.Events.GameLoop.DayEnding += this.OnDayEnding;
                helper.Events.GameLoop.Saving += this.OnSaving;

                ModRunning = true;
            }
#

but not sure if there is a less clutersome way to do it or if it works mid game

#

another way is to put a big IF on every custom event, but I hate this option

#

just want to know what is the common community practice

tiny zealot
#

i have had better luck making event handlers/harmony patches always on and doing early returns out of them if they're disabled, rather than adding/removing and patching/unpatching on demand. handlers are not idempotent so you have to be very careful not to re-add them (you will get multiple instances)

#

then again, i also probably wouldn't have a config option for "mod enabled"/"mod disabled". if the user wants to disable the mod, they can uninstall it

blissful saddle
#

yep, thought about this possibility (after almost doing it anyway SDVpuffersquee )

tiny zealot
#

anyway, gotta go

blissful saddle
#

I thought about the enable possibility in case they (and me) want to test how things are going mid game

#

thanks!

#

now I want to test what happens if I make an OnDayStarted event that self add them on the handler over and over again

lucid iron
#

ppl who have desire for activate/deactivate mod tend to use stardrop which provides the feature

blissful saddle
#

oh

#

I loved your new nickname

#

will take a look at StarDrop

lucid iron
#

!stardrop

ocean sailBOT
#

Stardrop is a mod manager written specifically for Stardew Valley. See the Stardrop wiki for installation and usage.

See this tutorial for connecting Stardrop to Nexus or updating mods in Stardrop.

If you have issues with Stardrop, see the issue report guide.

lucid iron
#

its a mod manager

uncut viper
#

(also wanna throw my hat into the "love the new nickname" ring)

uncut viper
blissful saddle
whole raptor
#

I can finally yeet like 10 configs that were just there to match thanks to you SDVkrobusgiggle

#

Those queries get... interesting SDVpuffereyes
"Query: ('{{Spiderbuttons.CMCT/Config: Jellonip.RRRR, Hidden Love Interest Mode}}' = 'true' AND '{{Spiderbuttons.CMCT/Dynamic: Jellonip.RRRR, WizardDating}}' = 'true') OR ('{{Relationship:Wizard}}' IN ('Dating', 'Engaged'))": true

noble jolt
#

So, I'm working on Portraits for a mod. I'm going to have 2 resolutions for people to use. When uploading, should I just do the low res(so you don't need the HD mod) and have the HD file as an optional, or should they be their own mods?

velvet narwhal
#

i would make low res base and the hd one a separate file because once you go portraiture You Cannot Go Back ™️

noble jolt
#

okay lol. I can see why. so much deatil gets lost when shrinking the images

lucid iron
#

the portraiture mod requires a different setup that isnt content patcher or content pack

#

so yes just have 2 main files, or even 2 mod pages

noble jolt
#

Gus's shirt goes from oh cute! slimes! to hm, blue blobs.

lucid iron
#

whatever feels easiest to manage for you PecoSmile

noble jolt
#

portratiure is the one to use for sure though for HD ones?

lucid iron
#

atm it's the only one that works for 1.6

noble jolt
#

good to know

lucid iron
#

hd portrait update eventually™️

whole raptor
tardy adder
#

Oh look Smapi imploding

#

At least its not red 😄

lucid iron
#

anyone can cook DokkanStare

#

what happens in game? do you see multiple of an item offered

tardy adder
#

Yeah

#

Even if its just one entry >->

lucid iron
#

ig the item query must have overlaps then

tardy adder
#

Its using SPU

latent mauve
#

Thinking about improvements to my bathroom renovation mod, how does this sound for a letter from Robin? You'd get it after upgrading your house for the 2nd time.


Come on by and place your order when you're ready for me to start your renovation!
- Robin```
#

The thought is that the tiny bathroom renovation is free but you have to pay to expand it to a bigger bathroom, after Robin hooks you with the free renovation.

#

I'm struggling with the wording a bit

velvet narwhal
#

my brain can only think of the way pierre/morris would write it

#

which is like, "With an addition of a kitchen, a farm outhouse doesn't sound quite pleasant, does it? I now offer renovations and I'll even throw in a bathroom renovation for free since you're a repeat customer."

latent mauve
#

Yeah, I'm trying not to sound super like Pierre's adverts, which is my struggle. Robin's definitely the type to needle you into an upgrade, (given her 'rustic' comment at the start), but more passively.

velvet narwhal
#

"Still enjoying that rustic living? Home renovations have been a hit lately and you can test out a brand new bathroom for free if you're interested."

latent mauve
#

Also seems weird for Robin to necessarily mention outhouses, since, you know, no other house has a bathroom either. xD

velvet narwhal
#

true, gotta change that

latent mauve
#

And since my bathroom has a "Shrine of Illusions" mirror, she's gotta have partnered with the Wizard or something. xD

#

but I can't even think of how I'd include that tidbit

lucid iron
#

looking forward to the outhouse building mod \j

latent mauve
#

I suppose if all else fails, I could use the Pierre-sounding one and add a Post-script that says "Sorry, Pierre saw me writing this note at the Saloon and decided to 'improve' it."

velvet narwhal
#

i have had the urge for an outhouse building mod to do a nod to the og harvest moons tbh

lucid iron
#

robin finds some weird magic looking glass the wizard left in the forest to absorb spiritual energy and turned it into a mirror SDVpufferthumbsup

latent mauve
#

After you get the mod installed, just a random conversation topic pops up from Robin: "How are you enjoying the new bathroom? The mirror just showed up one day while I was designing it. Weird, right?"

velvet narwhal
#

i mean technically robin could've gone into the witch swamp after you get the ink and she could just be like "don't tell the wizard but i found some cool stuff for a building idea"

latent mauve
#

Or "P.S. The Wizard randomly showed up and told me that he wanted to add this mirror to your renovation. Not really sure what that's about, but it seemed harmless enough."

calm nebula
#

Yes, because in Stardew it takes magic for you to style your hair differently

latent mauve
#

Yep.

#

Oh man, is there a conversation topic / way to check if you've used the Shrine of Illusions lately and start one?

#

Just a random "Huh, are you trying out a new look?" type of deal xD

velvet narwhal
#

i don't remember if it's SVE or something that adds an event to the shrine of illusions unless that's base game

latent mauve
blissful saddle
#

Maybe putting it here help again. Now I am having problems with loading my moddata from save.

I am saving and loading with these methods:

        private void OnSaving(object? sender, SavingEventArgs e)
        {
            this.Helper.Data.WriteSaveData($"{this.ModManifest.UniqueID}", Data);
        }
        private void OnSaveLoaded(object? sender, SaveLoadedEventArgs e)
        {
            Data = this.Helper.Data.ReadGlobalData<NOPlusData>($"{this.ModManifest.UniqueID}");
        }

The data is being written on the save file:

<item><key><string>smapi/mod-data/maxrw.nightowlplus/maxrw.nightowlplus</string></key><value><string>{"RestorePos":true,"Map":"Farm","Tile":{"X":33,"Y":22},"Facing":null,"Health":100,"Stamina":47.0,"IsBathing":false,"IsInSwimSuit":false,"Sittable":null,"Horse":null}</string></value></item>

Why the key is being named with the ModManifest duplicated? like /maxrw.nightowlplus/maxrw.nightowlplus? and it is the reason it is not opening?

lucid iron
#

you used the wrong read method

blissful saddle
#

I thought I got it from the tutorial

lucid iron
#

global data is a different thing

blissful saddle
#

ok, I got it mixed

lucid iron
#

as for the key, it's prefixed with your mod id yes

blissful saddle
#

probably when I was copying-pasteing =.=

blissful saddle
#

interesting...

#

feeling really dumb, but thanks a lot

lucid iron
#

Dunno what tutorial you are following, but the smapi data stuff is mod scoped by default

blissful saddle
#

Now I have a better Night Owl mod. Next steps is implementing Atra's fishedit solution and try to solve the night light/tiles thing

lucid iron
#

Btw could you stop pinging me on reply blobcatgooglyblep

uncut viper
blissful saddle
#

I am sorry

lucid iron
#

Normally I don't mind but there's no need to ping if I'm still in the chat

blissful saddle
#

the bottom session of the guide may just apply to storing custom data for individual game entities. there is the manifest indication as key id

#

it is the same link that you sent

#

maybe I just got confused side reading that, as well copying the wrong read method...

#

to learn to mod a game, although less work, takes a lot of understanding of others logic and practices than learning a coding language from start

#

less work than building an entire project from scratch I meant

#

now I need to dwell in DynamicNightTime to really understand how it treats night. but for now, I am satisfied

heady crest
#

can i use the random token on the i18n thing? i wanna use it but 99% of my dialogues have random stuff

inner harbor
#

how does one stop the furniture being added to the furniture catalogue by default?

calm nebula
#

It's one of the boolean fields

brave fable
#

IsRandomSale

#

i think

inner harbor
#

furniture doesn't have boolean fields

brave fable
#

per shops.json -> Furniture Catalogue -> items:
"ItemId": "ALL_ITEMS (F) @isRandomSale"

inner harbor
#

(I don't think)

uncut viper
#

the 10th field in furniture data seems to be the boolean one you want

#

after the texture name and before the context tags

inner harbor
#

is that the "true"?

calm nebula
#

Field 10, yeah

uncut viper
#

i dont see another boolean one so yeah probably the true

calm nebula
uncut viper
#

which, true is what you want to make it not in the catalogue

inner harbor
#

ah rightio can fix that

patent lanceBOT
#

@next plaza: begin the m o d (21h ago)

safe mortar
#

Is there a way to utilize the farmer's sprite in events? I want to use the shocked jumping one that happens when the farmer does something in the abandoned community center and the junimos pop up. I looked up some of the known ones online and looked through game files, but can't find that one. This is my first mod i'd be posting ^.^ fun prompt, wanted to give it a go!

safe mortar
#

Yes! Thank you!

velvet narwhal
#

you'd have to do some trickery, if you can remember where you've seen that animation not the community center one that'd be a good place to look

safe mortar
#

something liek frame id 94 would work, i'll explore that spreadsheet more, thanks

safe mortar
thorny tiger
#

where in the content folder do i find the professions to be able to reference them

lucid comet
brittle pasture
#

do you mean the profession texts? it's in Strings/UI

lucid comet
#

that one?

thorny tiger
#

how do i explain it

#

uhh

#

"PLAYER_HAS_PROFESSION Target 19"

#

these

#

no idea which one that is

#

copy pasted from lumisteria nodes+clumps

brittle pasture
#

the numeric IDs are hardcoded

#

19 is Geologist

thorny tiger
#

ah ty

#

im so lost in the content folder

#

objects 2 is in tilesheets

#

wheres objects 1

velvet narwhal
#

springobjects.png

#

in maps SMCKekLmaoDog

lucid comet
#

not sure if there is a objects 1, but springobjects deserves that name

velvet narwhal
#

welcome to the hazing of a new modder

lucid iron
thorny tiger
#

w h y

lucid comet
#

because yes

thorny tiger
#

good point

velvet narwhal
#

just like how there's 1 pixel in cursors that's used as what is it, fog?

#

like it's 1 pixel of the moon or something that's used as fog or something

lucid comet
#

would not surprise me

#

i am more surprised that there are tilesheets for each language instead of one base/main and patches but eh

thorny tiger
#

whats this next to amethyst

velvet narwhal
#

i think that's just a localization thing

thorny tiger
#

like its clearly amethyst but what is it

brittle pasture
#

a lot of item sprites have those unused shatter sprites

thorny tiger
#

ok then

lucid comet
#

huh, i thought those might be used to overlay over base stone, interesting

brittle pasture
#

mining nodes have their own sprites

lucid iron
#

hm i been assuming these r debris sprites

#

if u shoot them in a slingshot

lucid comet
#

and yes, it is localisation i am just wondering why you'd copy everything instead of patching just the parts that have signs ^^

uncut viper
#

seems easier to just make a new spritesheet for it

lucid iron
#

it could have been patching just the parts that have signs internally

velvet narwhal
#

(boo squad)

lucid iron
#

we r looking at the baked outputs

uncut viper
#

dont think CA really had the concept of patching mind like we do with CP during development

lucid comet
#

hmmmmmmm fair

brittle pasture
#

also I think patching has performance costs compared to just loading a new spritesheet

#

disk space is cheap

lucid comet
#

true true

thorny tiger
#

so like should my nodes go on the same sheet as objects

uncut viper
#

patching definitely has performance cost

#

better to avoid it if you can

thorny tiger
#

lumisteria seems to use a different sheet i think?

lucid comet
#

but us only seeing the finished/baked outputs makes sense

brittle pasture
#

just load your own

thorny tiger
#

like obv crops and objects are separate sheets

brittle pasture
#

then feel free

thorny tiger
#

are nodes and objects also separate

#

or the same

brittle pasture
#

as long as they're all 16x16

lucid iron
#

you can do whatever make sense to you for your own sheets

lucid comet
#

you can do both, the freedom of creating your own stuff

brittle pasture
#

there are big rocks on the springobjects sheet

thorny tiger
thorny tiger
brittle pasture
velvet narwhal
#

selph seeing the future

#

should've taken the wizard role smh

thorny tiger
#

so how do i deal with big rocks

brittle pasture
#

it's probably better for your own sanity to put them in your own sheets

#

but nothing stopping you from using the same sheets for those as well

thorny tiger
#

but theyre a different size how does that work

lucid iron
#

if u put the same sized sprites in same sheets there's less maff for counting sprite index

brittle pasture
#

they're 32x32, so four 16x16 squares together

thorny tiger
#

do i just load multiple sprite indices

brittle pasture
#

so item objects index can just ignore them

lucid iron
#

u can have multiple textures loaded no problem, hence do what make sense to you

brittle pasture
#

for big rocks you usually have a top left coordinates + tile size

thorny tiger
#

im just gonna make a sheet for nodes and a sheet for big things

brave fable
#

CA sort of patches things sometimes, like drawing sprites over map tiles, or conditional map patches. never patching his own sheets though

thorny tiger
#

TIL the amethyst node does not share a single colour with the amethyst gem

calm nebula
brave fable
#

never heard of it SDVconcernedpride

thorny tiger
#

oops forgot to add i18n

#

went through about 3 iterations of changing the code and wondering why it wasnt working before i realised i hadnt reloaded the patch

#

[game] Letter 'BonkersTurnip.Test_GiftForAbigail' has unknown crafting recipe '{{ModId}}_PerfectGift' or '{{ModId}} PerfectGift'.

#

uh oh

#

not again

vernal crest
#

Time to check for typos

thorny tiger
#

no typo

#

but

#

i think i know the issue

#

I AM SORRY I TAKE IT BACK PLEASE NO

#

so i used this

#

"{{i18n:mail.giftforabigail|modid={{ModId}}"

#

%item craftingRecipe {{modid}}_PerfectGift %%

#

^ from the i18n file where mail.giftforabigail is defined

#

what did i do wrong

calm nebula
#

who's the guy doing xmlser stuff? Yeah, that's just how the damn attribute works apparently

thorny tiger
#

DOUBLE

#

DOUBLE

#

BRACES

#

I NEEDED

#

}} }}

#

my fix was broken

#

lets try this again

thorny tiger
#

yeah ok it works i just cant syntax to save my life

vernal crest
thorny tiger
#

which is {{ModID}}_PerfectGift

brittle pasture
#

it's recommended you put the instranslatable part outside of i18n

vernal crest
#

You run the risk of someone translating your ModID and breaking your mod though

brittle pasture
#

(is that a word)

thorny tiger
#

idk the example i looked at put that part in the i18n

#

but now i think about it

#

it was probably sve

#

so how do i do that then do i just need two i18n things

lucid comet
#

what kind of editor are you using btw? most i know allow for highlighting open/closing brackets and stuff like that to save that kind of headache at least

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.

thorny tiger
#

yes i do need 2 things ok

uncut viper
lucid comet
#

ah, fair fair

brittle pasture
#

(vim do highlight matching brackets even in that case though. they don't discriminate)

uncut viper
#

you're gonna have to do a LOT more than that to convince someone to use vim

lucid comet
#

(as does notepad ++)

uncut viper
#

my n++ does not

lucid comet
#

o.o

#

i forget how much you can configure that

uncut viper
#

if i set the language to json in my N++ and something is inside a string, its all the same colour throughout

lucid comet
#

and add addons

thorny tiger
#

alright im using 2 separate entries in my i18n file now and it seems to work fine

#

i should note it just took 5 tries to type entries

#

i still didnt spell it right the first time typing that followup

#

oh that makes sense it just went 2am im gonna pass out from exhaustion or something

#

tomorrow im going to try to tackle custom machine input

#

that should be

#

fun....

blissful saddle
#

tomorrow I will play my game

#

I learned a lot in one week. I am very tired

calm nebula
#

considers being purple

blissful saddle
#

thanks for all the help here. you all are awesome

#

tempting ghost on the shoulder: Just do it~

blissful saddle
brittle pasture
#

purple is a nice color

blissful saddle
#

hitting the bed early today. good night to all you

tender bloom
#

A purple supporter here

#

The icon is not as good but the color is the best imo

latent mauve
tender bloom
#

(Sorry to bone lovers but the stardrop is cooler)

latent mauve
#

They worked earlier, but now they won't appear and I'm not entirely sure why.

#

No errors in SMAPI

tender bloom
#

Hmm what does a patch summary say?

latent mauve
#

Patch Summary shows that the strings are applied

#

I'm attempting to make my second renovation an expansion that overwrites the first one, if that matters

#

So they patch the same area

#

...

#

okay, it was absolutely something silly, I think

#

nope, nevermind, that didn't help at all.

#

I found that I'd messed up one of my requirement tags, so I fixed that, but it's still not loading it properly

tiny zealot
#

update: i have been doing some reflection crimes and i am making good progress here (thanks focustense!)

uncut viper
#

reflection crimes SDVpufferparty

latent mauve
#

Okay, I apparently missed TWO requirement tags

#

Oops.

#

So, it loads in the menu now, but now the patch is wrong/not overwriting the area for the expansion renovation

#

and I know the asset name is right

#

Is there a way to set a renovation to check 2 mail flags instead of one in AdditionalRenovations map property?

#

Because I feel like this is an ordering problem right now

#

If I put the expansion reno before the base bathroom reno in the map properties, the inactive state of the expansion shows up instead of the inactive state of the base bathroom reno, even when the base bathroom reno is not purchased yet.

#

And if I swap the order, the active expansion map never loads, even after the expansion is purchased.

acoustic summit
#

Is it possible to add custom monsters to events as temporary characters? I tried to add a monster with its id but when loading it via event as a temporary actor it shows it as null

brave fable
#

it should be possible, data/festivals/fall27 uses addTemporaryActor Wilderness_Golem 16 24 18 59 2 false Monster

#

just be sure to use underscores instead of spaces

latent mauve
#

My brain's not working tonight, how do you make a When condition that can check if a flag has a value of 0 or 1?

#

Trying one last thing as a workaround since the renovation is refusing to cooperate

#

"HasFlag" isn't working for checking the mail flag that is added as part of the Renovate Actions, so I have to try something else to find the flag value

acoustic summit
latent mauve
#

Nature, it should work as long as you've loaded in a monster with that ID beforehand, I think?

brave fable
uncut viper
#

that said there shouldnt be any difference between a mail flag added by a reno vs any other? assuming it is actually a mail flag

latent mauve
#

It tells me the token can't be found, so something's off.

uncut viper
#

hasflag wouldnt tell you that if the flag wasnt found, hasflag would just resolve to false in the when condition

latent mauve
#

that's what it was doing, yes. I need a true not a false.

brave fable
# acoustic summit Im pretty sure wilderness golem is a vanilla monster though, tough

it shouldn't make a difference so long as you've got a sprite loaded to Characters/Monsters --

// public static void AddTemporaryActor(Event @event, string[] args, EventContext context)
switch (typeOrDisplayName?.ToLower())
{
case "animal":
    textureLocation = "Animals\\";
    break;
case "monster":
    textureLocation = "Characters\\Monsters\\";
    break;
case "character":
    break;
}
string fullSpriteAssetName = textureLocation + spriteAssetName;
if (!Game1.content.DoesAssetExist<Texture2D>(fullSpriteAssetName))
{
    string newSpriteAssetName = spriteAssetName.Replace('_', ' ');
    string newFullSpriteAssetName = textureLocation + newSpriteAssetName;
    if (newSpriteAssetName != spriteAssetName && Game1.content.DoesAssetExist<Texture2D>(newFullSpriteAssetName))
    {
        spriteAssetName = newSpriteAssetName;
        fullSpriteAssetName = newFullSpriteAssetName;
    }
}
uncut viper
#

thats very different from the token not being found

#

what did you write for the hasflag condition?

latent mauve
#

but it was still telling me it couldn't be found

#

hold on, I'll grab my text again after I change it back.