#making-mods-general

1 messages · Page 200 of 1

brave fable
#

not one line or sprite

lusty elm
#

Honestly my brain just says, "Patch the Property out and replace it with text property on the tile that says "They won't be home/open today" or something. with a When Condition.

brave fable
#

surely the behaviour already exists for pierre's

#

i'd check the town map file

meager loom
meager loom
#

just seems to have a regular locked door warp

brave fable
#

and the property value is?

meager loom
#

SeedShop

brave fable
#

that's the whole thing?

calm nebula
#

Pierre is hardcosed

meager loom
#

I might be misunderstanding your question, thats the map name

meager loom
gaunt orbit
#

that can be done with just cp nowadays, but I have yet to see anyone actually do it.

#

Restricting it to only greenhouse type interiors is handled with a custom gsq

brave fable
#
public void lockedDoorWarp(Point tile, string locationName, int openTime, int closeTime, string npcName, int minFriendship)
{
    bool town_key_applies = Game1.player.HasTownKey;
    if (AreStoresClosedForFestival() && InValleyContext())
    {
        Game1.drawObjectDialogue(Game1.parseText(Game1.content.LoadString("Strings\\Locations:FestivalDay_DoorLocked")));
        return;
    }
    if (locationName == "SeedShop" && Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth).Equals("Wed") && !Utility.HasAnyPlayerSeenEvent("191393") && !town_key_applies)
    {
        Game1.drawObjectDialogue(Game1.parseText(Game1.content.LoadString("Strings\\Locations:SeedShop_LockedWed")));
        return;
    }
  // . . .

well that's suck

#

but yeah probably want a CP changes entry to add/remove the property from the tile depending on the date

amber nova
#

Oh wow

teal bridge
#

Ok, no one replied for the first 10 minutes and then everyone replied and I didn't see 'til an hour later. So, yes, the existing (older) mod had just radial menus. The current iteration now has Quick Slots, where you hold the trigger button and press one of the 8 directional/basic buttons. And the newest part, the holy grail, is going to be the ability to completely remap several of the in-game buttons, not just to switch tools but actually use them on press, i.e. you press X to swing pickaxe, Y to swing sword, B to lay a bomb, LB for slingshot, whatever. Because of that, actually needs a whole new UI from the one that Chu posted.

amber nova
#

I didn't realize how easy to work with SDV was that coding is so familiar

amber nova
#

I keep forgetting to download it and can't find it anymore

teal bridge
#

Also since it came up, the current version does use Stardew UI, but only for the configuration and for that menu I just posted above. It's technically fully usable during gameplay (not in-game config) without Stardew UI.

brave fable
#

it's all very intuitive really, but the difficulty comes from structuring what you want, interaction between the hundreds/thousands of components in the game, and the limits of creativity and brainpower

#

(very hard limits)

teal bridge
#

(The pixel mod is Clear Glasses)

amber nova
#

THANK YOU

lusty elm
jagged cairn
#

It's so nice coming back after 6 or so patches to find that all of my mods still work

brave fable
#

invariably nothing fucking works anyway and you can't get createQuestionDialogue -> afterDialogueBehavior -> createQuestionDialogue -> afterDialogueBehavior to actually call the last delegate ever

jagged cairn
#

Was getting kinda suspicious that I hadn't gotten any notifications for bug reports or comments

brave fable
#

tile action -> question dialogue with 3 options -> option 2 opens a new question dialogue with 2 options -> either option opens a regular dialogue with different trigger action behaviours

#

wonder if itd work better baked into a dialogue string

gaunt orbit
lusty elm
#

I think I'll be using LOCATION_NAME, I'm editing the Condition on the Machine to allow it to run in that area right?

gaunt orbit
#

I don't recall how it works off the top of my head, you may want to refer to the machines page on the wiki

#

[[Modding:machine_data]] i think

#

Nope

#

[[Modding:Machines]]

gaunt orbit
#

That's it

calm nebula
#

so it's finicky because you need an and irrc

#

or something stupid along those lines

lusty elm
#

Ye, I'm looking at it right now... rooThink trying to understand, cuz Honey has the itemplaced in machine... wait i'm probably looking at cask.

gaunt orbit
#

If it's enabled by conditions, you'd need ANY, if it's disabled by conditions, you can just use a comma

lusty elm
#

so its condition is "!LOCATION_SEASON Target Winter"

brave fable
#

so can Buildings Action Dialogue do question/response groups orrrr

lusty elm
#

I've never tried rooBlank

brave fable
#

maybe i can get away with registering some new trigger actions to open the shopmenu as option 1 and do the nested questions as option 2

gaunt orbit
#

It's handled in performAction just like tiles are

calm nebula
#
"PreventTimePass": [
      "Inside",
      "Winter"
    ],
#

so you need to remove "Inside" from ther

tiny zealot
lusty elm
#

good catch, so its not that they dont work inside, its that it doesnt count for their timer? rooThink

gaunt orbit
#

It's that those checks are global for the whole machine, but condition is specific to a recipe

#

Also those checks are not gsqs and support only a limited set of criteria

lusty elm
#

So If I wanted to say add it to 2 indoor locations always working i'd have to do something like patch out the preventtimePass completly, then Modify Conditions, it has "!LOCATION_SEASON Target Winter" Which is as Long as its not winter... so id have to add some kind of And to that and add Outdoors as a Condition to rematch base criteria, then add an Or "Map name" or "Map Name2"?

#

and that would likely break if anyone else edited it.

#

Granted, this isnt required to make my mod work, it would just be a nice touch for an area or 2 rooC

latent mauve
#

back on this, out of curiosity, would it be viable to use a ConditionalDoor? could you mimic the locked door requirement AND the 'closed on certain day' by the queries?

uncut viper
#

conditionaldoor is for indoor doors only isnt it

#

liked bedroom doors

latent mauve
#

if it is, the wiki did not specify, but you're probably right.

uncut viper
calm nebula
#

it's straight up in GameLocation.performAction

latent mauve
#

Why is it repeated in both sections?

#

I think that would need to go in the TouchAction table to replace the one that doesn't specify

calm nebula
#

so it's weird

uncut viper
#

idk. pretty sure its used in both layers though

calm nebula
#

the ConditionalDoor touchaction is the message shown to the player

uncut viper
#

bc if the door is already open you shouldnt be able to walk in still

calm nebula
#

the ConditionalDoor tile action is the actual door

latent mauve
#

I'm more confused by the fact that it's listed as a TouchAction inside the Action table.

#

If that's the case

reef kiln
#

Is there a way to patch a mods map patch? I want to fix an issue and want it compatible if the mod updates. I know how to just go into tiled and fix the map. But I want to make it so I don't have to do that each time it updates.

calm nebula
#

oh that's weird....

#

(not you, Frog.)

#

the tileaction

latent mauve
#

Yeah, there's this one too, Atra, which is why I got confused:

calm nebula
#

you should do both

#

or maybe one is the warp version of the other?

#

anyways

#

both exist

uncut viper
#

i imagine its in with Actions because it is suppopsed to go on the buildings layer

latent mauve
#

You wouldn't be able to target their TMX, but you could target the same spot on the map once they've patched it into the map.

reef kiln
#

So just make my mod a dependant on theirs in the manifest, so it load 2nd. Just like a CP only patch would do it?

faint ingot
#

Looking for an assist with this "PLAYER_SPECIAL_ORDER_RULE_ACTIVE" way to use a game state query in a special order condition. Can anyone point me to a mod that uses this approach?

latent mauve
tiny zealot
#

unfortunately, you can't specify "patch after this other mod" in a durable way. if they change their priority for whatever reason you might need to update your patch too

reef kiln
#

where do i find priority for map patches. I have never done that before. Is there a Wiki link?

tiny zealot
#

you're in C#/SMAPI?

#

it actually uses the same priority values as content patcher (or, more accurately, CP uses SMAPI's priority values, since it's a SMAPI mod)

#

you want to find the AssetLoadPriority and AssetEditPriority enums

calm nebula
#

What are you actually trying to do

reef kiln
#

Ok, that is a place to start. Thanks 🙂

faint ingot
# calm nebula What are you actually trying to do

So yeah after reading some more I think that's not what I'm after. Here's the issue: I have a special order that should only be available when a certain conversation topic is active. I'm doing that with content patcher conditions, but it's being reported that it isn't working.

#

so I was trying to see if I could manage that through the S.O. conditions which looks like a no

calm nebula
#

That sounds like an insane faff tbh

brave fable
#

(btw if i want a conversationtopic that applies immediately and lasts until the following day, do i use 0 or 1 as a value)

calm nebula
#

I would recommend ignoring the board entirely and sending your special order by mail or event

faint ingot
#

This is basically not a necessary trigger, it is like after you have jailed pierre from the main event, I am occassionally offering a chance to send him back to jail through the SO board

#

I could do it another way besides the SO board though it seems a bit finicky

#

the problem the user reported is that they are being offered the SO when he is still in jail the first time

calm nebula
#

You can just have Player_Has_Conversation_Topic current yourtopic

#

But it is finicky

faint ingot
#

this is what I have currently, shouldn't this work? "When": { "HasConversationTopic |contains=PierreInJail": false, "cfgJailPierre":true, },

calm nebula
#

So, the board is populated on Sunday night

#

And that is when conditions are checked

#

You'll need to add a "hasSeenEvent" for the event that originally jails him I think

faint ingot
#

I have that covered in the required tags inside the SO "RequiredTags": "!LaoJailBox, !season_winter, event_239790020",

calm nebula
#

Your issue is that CP checks tokens on day start

#

And the board is checked on day end

#

So there is a window there

#

Either use the Condition field and a gsq

#

Or use two tokens

faint ingot
#

I don't think you can use gsq for a special order though? unless you're doing it through data\triggers i guess?

calm nebula
#

Also

#

Special Orders are host determined unless some c# mod meddles

brittle pasture
#

you can, that's new in 1.6

calm nebula
#

No, special orders have a gsq field

brittle pasture
#

undocumented on the wiki

calm nebula
#

Oh

faint ingot
#

oh... is it documented anywhere else, or is there an example somewhere? I would like to try that if possible

brittle pasture
#

unpack the files, there's a Condition field

#

just put GSQs in there

faint ingot
#

OK I do have it unpacked and see that. I will try that thank you

meager loom
#

If I'm making an include in content patcher, should I have the {} in my include file as well, or should I omit them since the include itself has {}?

rigid oriole
#

you need the curly braces for it to be valid json

meager loom
rigid oriole
#

you still want the "changes" block! the "include" action doesn't just copy/paste the other file into your main content.json as is

#

included files should NOT, however, have a "format"

honest nebula
#

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

meager loom
brave fable
#

does $q have to be unique and non-repeatable by default, or can i have a repeating question dialogue

#

ideally i want the question and answers to all be repeatable

tiny zealot
#

by default non-repeatable, yes (it skips the question if you've given any of its answers)
if you can clear the id of the response from your given responses, then it should repeat

brave fable
#

'if i can'?

tiny zealot
#

if meaning predicate, not if meaning i doubt you

brave fable
#

so does that mean i can or

calm nebula
#

I believe in you also you can use the respond ID of "null"

meager loom
#

So in Tiled, it made my map tilesheets point to ../../../../../../../Steam/steamapps/common/Stardew Valley/Content (unpacked)/Maps/townInterior.png which obviously isn't working in game, where do i need to point it to instead?

uncut viper
#

theres a MarkQuestionAnswered trigger action action

#

whikch i assume is what ichor is talking about

calm nebula
#

A blueberry is already in c# and you can literally just use the response I'd of "null"

brave fable
#

i'm giving up on c# because i can't nest questions and someone said you can just fine in json dialogue

calm nebula
#

Awwww! But nick what's his face is telling me c# has a great future!!!

brittle pasture
#

nah Rust is what's hot rn

#

we should all make Rust mods

amber nova
#

Christ

#

There's actually a guy who made a closed-source rust mod for Minecraft for NO REASON and hasn't made anything since

uncut viper
#

i mean does someone need a reason

amber nova
#

Yes because why

#

Especially if you're using Fabric anyways like what

uncut viper
#

i dont think someone needs a reason

tiny zealot
#

vacuously, there always is a reason. but i agree with button that we don't need to know it

brave fable
#

i'd imagine they had a reason, but one that was probably only justifiable to them

amber nova
#

I think the situation here is a bit different than in the Stardew modding scene

#

Most people now use Modrinth which is ran mostly by people that know Java

#

Which is where it was tried

#

So it being closed source, an only project, and in a language the mods are unfamiliar with can make some confusion

uncut viper
#

i mean i know the situation there. i dont think they need a reason. people mod things just for fun and experimentation sometimes

#

if i could write a mod for stardew in javascript i would

#

just for the heck of it

amber nova
#

Yeah but there's recently already been a bunch of viruses packaged in mods (and I believe a rust mod previously that was also ARR and taken down for malware) so it just feels odd

uncut viper
#

an entirely different circumstance and discussion

uncut viper
#

i simply dont think that, outside of obvious cases like malware and such, that a modder ever needs to justify a mod they create

uncut viper
# calm nebula Why

i believe you will find the answer directly below the message you are replying to /lh

calm nebula
#

You know what

#

I don't need to know

#

You do you

amber nova
#

Yeah but the fact that there were two similar mods made in Rust and one was taken down for malware makes me feel as though there should be more than radio silence on their end

calm nebula
#

You are valid regardless

#

We support you

uncut viper
#

there doesnt need to be

#

would it make you feel better atra if i said typescript instead

calm nebula
#

I would love to write more Rust tbh

rotund elm
#

Is the author of Convenient Chests, Gaussfire in this discord?

#

if anyone knows

calm nebula
#

I think so

amber nova
uncut viper
#

(the real answer for why javacript specifically though is just bc its the only other language i know well enough)

calm nebula
amber nova
#

Being Java brained has made moving out of Java a tad difficult. I didn't realize how high level the language was until relatively recently

#

Rust was a fun change

rotund elm
#

I cant get to their profile without @ them is there another way I can see it so I can see if its ok to mention them?

calm nebula
#

God I have a bone to pick with Java right now

amber nova
#

Hehe fair

calm nebula
#

Does not have a thing to do with Java

rotund elm
#

ignore my spelling.......

calm nebula
#

Just a language that is objected oriented because Java was cool then

brittle pasture
#

I guess just at them? Idk does their Nexus profile say it's ok to contact them here?

#

otherwise if you have a bug/feature request for CI I imagine most people prefer them be posted on the Nexus page

rotund elm
#

Not that I can see on their mods profile or github

#

Its for a recolor

brittle pasture
#

they are not particularly active here fwiw

rotund elm
#

Hmmm I could just message them on nexus

#

But nobody ever checks their nexus dms X|||||

tiny zealot
rotund elm
#

Ahhh ok I see and ofc nothing in their bio

#

NoOOo

lucid iron
lusty elm
#

I check Nexus DM's, and Nexus DM's email the Author by default, so it will pop up there if they havent changed the settings

rotund elm
#

WHERE YA FIND THAT

brittle pasture
#

oh yeah I misread your question
I can confirm that gauss/gaussfire is indeed CI's author

lucid iron
#

r u looking for that person for updating that one broken transpiler?

tawny ore
#

Gaussfire is Convenient Inventory, not to be confused with the other mod Convenient Chests

#

CI is the more updated and well-supported mod

brittle pasture
rotund elm
#

No lmao and omg I cant beleieve I did that whoops

#

Its for a recolor

#

of the buttons cause I love earthy recolor

tawny ore
#

That said, I've recently communicated with Gaussfire via Nexus DMs

tiny zealot
rotund elm
#

Ok awesome Ill shoot him a dm then

#

or message/nexus email or whatever the lingo is lol

tawny ore
patent lanceBOT
#

@deep cypress: child.checkaction (8h ago)

devout otter
rotund elm
pine elbow
#

does someone know where i can see a tutorial for the coding about appearences? the site that maked a tutorial for this doesnt show anymore for me SDVpufferwaaah

lusty elm
#

I found out why this property wasn't working, This single property uses camelCase instead of PascalCase unlike everything else. rooBlank "indoorWater"

brave fable
#

i'll have you know forceLoadPathLayerLights is camelcase and asdf could even be snake_case if we believe

lusty elm
devout otter
# pine elbow does someone know where i can see a tutorial for the coding about appearences? t...
Stardew Modding Wiki

If you want to add seasonal outfits for your NPC, there's two ways you can do this: the token way or the Appearances way. Appearances is a new code structure added in SDV 1.6, so if you're looking at an older NPC's code for reference, they'll most likely be using the token way. The main difference between the two is that the token way is simpler...

pine elbow
boreal quartz
#

So sorry if this question has been asked before. But could someone give me a literal example for this so i can see it in the works?

devout otter
#

There's several examples of that in vanilla game: /quickQuestion #Yes#No#It's too difficult...(break)emote Willy 20\\speak Willy \"Aha! A ${man^lady}$ after me own heart...$h\"\\pause 500\\speak Willy \"You can always ${trust a fisherman^count on a lady who fishes}$...\"\\speak Willy \"That's what me ol' Pappy used to say, at least. Haha!$h#$b#Well, keep it goin'... if you can catch every fish in these waters, I've got a special prize waitin' for ye...\"(break)emote Willy 28\\speak Willy \"Not the fishin' type, eh? That's too bad...$s\"(break)emote Willy 16\\speak Willy \"Yes, it's a difficult sport... especially for a beginner.#$b#Have you tried the 'Training Rod'? I sell them right here, at a very low price.#$b#You should try using a 'Training Rod' until you get a little more experienced.\"/

ivory plume
#

(Central Station preview 4 is now available!

All features planned for 1.0.0 are now implemented. The next builds will mainly have polishing, bug fixes, changes to address feedback here, and the completed map when it's ready.

See the [Central Station alpha thread](#1336049684950683810 message) for more info.)

opaque cobalt
#

what is the command name for green rain to include in outfits. Also, what is green rain?

boreal quartz
lusty elm
#

rooThink is there a bit of like {{}} That does "Farm Name"?

uncut viper
#

yes its {{FarmName}}

lusty elm
#

I suppose that Tracks.

winter dust
#

Don't you love when it's just that simple?

brave fable
#

it's never that simple. i bet {{farmname}} replants your crops or something

lusty elm
#

now to see if it works the way I want it to.

#

yup, it does, Just that Simple

brave fable
#

ok mr. Just That Simple, how do i have a json string npc dialogue question response that simply closes the dialogue without opening a blank dialogue

#

i've tried "" and "$action Null"

#

i've also tried using an invalid dialogue key but that causes errors

uncut viper
#

have you tried $k (i dont know if this will work)

#

if k doesnt work then im not sure you can get around opening a blank dialogue

brave fable
#

$k seems bad for my health

uncut viper
#

it is short for kill so it might be

brave fable
#

this is an npc shop dialogue and i'd prefer if opening the shop didn't obliterate all other dialogue for the day

uncut viper
#

what is NPC shop dialogue

lusty elm
uncut viper
#

i didnt realize that was a thing

brave fable
#

it isn't a thing, but it soon will be

unborn orchid
#

Has anyone managed to get Farm Type Mannager to work with the mod config menu? I want the player to be able to choose what spawns.

uncut viper
#

GMCM doesnt automatically add config menus for mods, the mod has to integrate with it specifically (CP does it for you if you make a CP pack). im not sure if FTM does that, but if it doesnt say it does, it probably doesnt

lusty elm
#

rooBlank GMCM works off reading CP frameworks for its auto-options. FTM being a seperate framework makes it more complex, you'd have to write an interface, or request the author to add compatability.
also I'm not sure you understand How Many options FTM has.
At best, you might be able to make a few presets and offer those as options. Otherwise you'll just overwhelm most normal users.

#

^ Note that technically you can do that without coding, by having different "sets" of Content.json (ContentHighSpawn vs ContentLowSpawn) for the FTM section of the mod, and have the user rename one to "Content.json." and then Smapi will use that one and ignore the others.

brittle ledge
#

@tribal ore mind if I DM you re: your beta?

brittle pasture
#

SVE has a config option that modifies monster spawn rate, I'm sure there is something you can use

unique sigil
#

Though it depends on what you're doing. mine was to make sure FTM spawns the correct forage when a specific farm cave type is selected in the config.

lusty elm
#

screen clips that and saves it for later "Neat."

unique sigil
#

You dont need to make trigger actions for that. just the CustomFields is sufficient

unborn orchid
#

@unique sigilThanks, I'll look into it. Even if it doesn't work for this it'll be relevant when making my mod compatible with stardew expanded.

tough crater
#

I just switched from using Krita to Aseprite for pixel art and I'm already in love

#

It's a pain transferring the layers across programs, but it's possible and I'm almost there 😭

brave fable
gentle rose
#

people seem to either immediately love or immediately hate aseprite, no inbetween

velvet narwhal
brave fable
#

i'm sure a couple more times couldn't hurt

velvet narwhal
brave fable
#

really though i'm always surprised to get compliments when i only post things every few years and it takes a few more to make them actually work instead of deleting your save file

velvet narwhal
#

well i wasn't able to express it during the chaos of 1.6.9 testing but i've come to personally appreciate other mod authors who are able to find arcane bugs with detailed reports

#

and also watching the entirety of love of cooking/the halloween mod you did was great inspiration for me to be like, "i want innovation"

tender bloom
#

best wibbly lanterns

velvet narwhal
#

wibbly lanterns/dialogue crimes

tender bloom
#

inspirational rooves

brave fable
#

i was going to ask how you even remember the lanterns before remembering i specifically pinged you about simple harmonic motion or something inane like that

hollow moth
#

Im trying to download smapi and its coming up with unauthorizedaccessexception, does anyone know how to fix that?

#

ive had smapi before and didnt have this issue

velvet narwhal
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).

hollow moth
rotund elm
#

Does anyone know why the "(SVE)" is infront of the tree name? The only mods I could think would have anything to do with it are SVE itself or UI Info Suite

#

looked in the tree.json of sve didn't notice anything

tender bloom
#

Display name?

#

Iirc wild tree display names are weird

winter dust
#

Yeah I tried that, it still doesn't parse the {{ModId}} for some reason.

tender bloom
#

Maybe try grep for it?

rotund elm
#

Ill look at the i18n didnt think about it

tender bloom
#

Might be hiding i18n yeah

rotund elm
#

not in the display name from what I can tell

#

I'm looking in the CP version so let me check the others to be safe

#

Didnt see an entry for the stump or tree

rotund elm
#

No not mentioned anywhere else

brave fable
#

try a patch export data/locations and see if any of your tokens in values with tokenised keys are parsed

winter dust
#

I think it's Data/Characters.

brave fable
#

same principle for either

winter dust
#

Because, all Load instances are parsing {{ModId}}

brittle pasture
#

because trees dont actually have display name fields

rotund elm
#

So im stuck looking at (SVE) BIRCH TREE X|

brittle pasture
#

I believe the author is working on something that allows mod authors to specify display names on their end

rotund elm
#

Thank the gods

#

My ocd is kills me slightly everytime I see (SVE) Birch Tree and the Oak Tree

brittle pasture
#

it's not done yet though, and the author is currently busy with a top down rewrite, so that might be some time away

rotund elm
#

SDVpufferwaaah I shall patiently wait

winter dust
#

Okay no, Data/Characters is parsing everything correctly.

dusk mulch
winter dust
#

And the Load instances are placing the portraits and sprites in the correct location.

gentle rose
winter dust
#

Not sure why I'm getting this then.

#

Weird, I guess I'll go back to testing other things.

dusk mulch
#

what kind of console is that-

brave fable
#

looks suspiciously like windows 7 style cmd

winter dust
#

This computer I'm on has been upgraded from XP to Win 10 over the span of years, so the fonts are messed up.

dusk mulch
#

oh lol

winter dust
#

So the cmd fonts are using the XP fonts.

brittle pasture
winter dust
gentle rose
#

I can barely read that screenshot tbh, if you could send the smapi log we might be able to help you better

winter dust
#

Really? I can. Although I can read high contrast text easier than my family can.

ocean sailBOT
#

Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 26 C# mods and 25 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

gentle rose
#

not the contrast so much as the font, it's nearly impossible to recognise some of the characters for me, though I'm sure with experience you get used to it

brave fable
#

also earlier comments weren't that clear, you mentioned it was a portrait asset name tokenisation issue

winter dust
#

I'm just good at reading old fonts.

winter dust
gentle rose
#

(we ask for logs anyway though regardless of your font, reading off of a screenshot is annoying and we can only get the full context from an actual log sometimes)

brave fable
#

but the error is calling out that NPC {{ModId}}_Hekate can't load portraits from 'Portraits/{{ModId}}_Hekate', meaning your npc's name isn't tokenised either

winter dust
#

That is my current content.json.

brave fable
#

unless the error just doesn't tokenise the key

winter dust
#
// NPC Entries
        {
            "LogName": "Initialising the creation of the Hekate NPC.",
            "Action": "EditData",
            "Target": "Data/Characters",
            "Entries": {
                "{{ModId}}_Hekate": {
                    "DisplayName": "{{i18n:NPC.Name.Hekate}}",
                    "Language": "Default",
                    "Gender": "Female",
                    "Age": "Adult",
uncut viper
#

it is not correctly tokenized somewhere then, because that warning is from the game. if the game ever logs a content patcher token, something is wrong with your tokens

gentle rose
#

I'd imagine errors use the internal name for easier debugging

uncut viper
#

the game has no way to know you're even using tokens unless something is passing the value in literally

gentle rose
#

It looks like for some reason ModId specifically isn't being parsed by content patcher SDVpufferthinkblob

uncut viper
#

usually this happens if something is being Loaded in instead of being EditData'd in

winter dust
#

I'll try updating Content Patcher, could be an older version I'm using?

uncut viper
#

it would have nothing to do with the CP version

gentle rose
#

you're pretty recent according to the format, anyway

uncut viper
#

unless you're using like

#

1.23

gentle rose
#

they're on 2.5

uncut viper
#

(or whatever version was pre-tokens)

winter dust
#

Yeah, same issue even with deleting and redownloading Content Patcher.

gentle rose
#

woah, just looked at your log, that is not the only place where modid isn't being parsed

winter dust
#

Yeah, ignore the schedule.

#

I bunged that file up.

gentle rose
#

every error in your log is showing {{ModId}} being passed to the game literally in some way or another

#

which is all the same issue

brave fable
#

i'd consider unloading/unbunging the schedule first

velvet narwhal
#

should be forced as includes, not loads SDVpufferthinkblob

uncut viper
#

you're loading an awful lot of json files

#

which is not always a bad thing, but if any of them use tokens in them they wont work

winter dust
#

I've removed every instance of {{ModId}}_Hekate from my NPC entries, and it's still trying to load Portraits/{{ModId}}_Hekate for some ungodly reason.

uncut viper
#

because they just wont. thats how Load works

#

it gets sent directly to the game as normal, non-CP-formatted json

warm imp
#

have you tried loading the portraits as {{ModId}}_Hekate ? why do only the portraits use a different format

brave fable
winter dust
#

What.

deep cypress
#

Hekate likes to hide! (I'm formally a Priestess of Hekate, just got officially consecrated in November!) More serious Note: I am happy to help, if I can!

brave fable
# winter dust What.

oh i just mean that either you didn't change the tokenised npc name in your entries for Data/Characters, or the changes weren't made in your actual StardewValley/Mods/WTTDR CP folder

winter dust
#

I did, but for some reason now that I've refreshed the mod folder now portraits and sprites are loading.

#

Sometimes I wonder what even is the point of trying {{ModId}} if it doesn't work in certain cases.

uncut viper
#

it works in every single case that normal tokens work in

#

you cannot use tokens in CustomLocations and you cannot use tokens in files you add via Load and there is one other niche circumstance i think im forgetting

latent mauve
#

To be fair, {{ModId}} is still useable in MANY places so long as you are not using a Load action

uncut viper
#

everywhere else all tokens will work

latent mauve
#

Can't use them in Tiled either, obviously

winter dust
uncut viper
#

the target is not in the file you are loading

latent mauve
#

You cannot use it in a file added when creating a target using Action:Load

#

Would be the more specific limitation

#

Your Target path is parsed by Content Patcher, so it works just fine.

uncut viper
#

i cant think of a scenario when you would be using Entries and not be allowed to use tokens

#

Entries isnt a thing on Loads which is the only place tokens may not work and it'd be inside the FromFile

meager loom
#

I can't seem to figure out what's wrong with my NPC. He has a custom house interior, a custom work exterior, and a custom work interior. The work location is accessible by the player so there's a bus in this location the player can use BusLocations to get to with. My NPC has a warp in a to a slightly different spot than the player lands in the map from his house. He should leave his house, walk to the door of his work exterior and enter, stand at the counter until 9, then walk back to his house. This works all the way up until he needs to leave work. When that happens, he heads towards the exit warp, touches it, teleports back a few steps, then freezes in place facing right until his next action (which should take place in his house) where he walks directly through the wall of his work to the right into the abyss. Does anyone know what could be causing this behavior? These warps work for the player fine

uncut viper
#

and you cant use Entries inside a file you re Loading bc you cant put CP patches in there

latent mauve
#

Edited for clarity, I am sleepy

#

I should really go to bed but my brain refuses to shut off enough to sleep LOL

winter dust
#

Regardless of where I put {{ModId}} with my NPC json it seemed to break. So what should work and what doesn't?

gentle rose
#

tokens work in content.json and json files loaded in using Include. Those are the only two places

#

anything else - files loaded in via Load etc etc will not parse tokens

latent mauve
#

Also I figured out what caused my cascade of tokens not being recognized the other day. The [CharacterNameNPC] ones. I had ONE stray [CharacterName] without the npc name referenced in it and it broke them all

velvet narwhal
latent mauve
#

I have already turned them all back into static names at this point, but at least going forward I can go back to using them for the unfinished dialogue to not have to remember which version of Alfonso/Alfonzo I used for the character name spelling

vernal crest
brave fable
#

open a shop, daily rice crackers for 200g, or close dialogue. does it work? mostly. was it worth it? absolutely not

{
  "shop_main": "$q {{ID}}_Shop null#{{i18n:ui.shop.text}}#$r null 0 shop_trade#{{i18n:ui.shop.trade}}#$r null 0 shop_crackers#{{i18n:ui.shop.crackers}}#$r null 0 shop_cancel#{{i18n:ui.menu.cancel}}",
  "shop_trade": "$action {{ID}}_DialogueEffects shop",
  "shop_crackers": "$query PLAYER_HAS_CONVERSATION_TOPIC Current {{ID}}_Crackers#{{i18n:ui.shop.crackers.fail.daily}}|$q {{ID}}_Shop_Crackers null#{{i18n:ui.shop.crackers.text}}#$r null 0 crackers_yes#{{i18n:ui.shop.crackers.yes}}#$r null 0 crackers_no#{{i18n:ui.shop.crackers.no}}",
  "shop_cancel": "$action {{ID}}_DialogueEffects exit",
  "crackers_yes": "$query !PLAYER_CURRENT_MONEY Current 200#{{i18n:ui.shop.crackers.fail.money}}|{{i18n:ui.shop.crackers.yes.{{Random: 1, 2, 3, 4, 5}}}}#$action AddMoney -200#$action AddItem {{ID}}_BurntCrackers#$action AddConversationTopic {{ID}}_Crackers 0",
  "crackers_no": "{{i18n:ui.shop.crackers.no.1}}"
}
#

did you know the base game has hotkeys for "yes" = Y and "no" = esc? i didn't. they also don't work when you do this ☀️

dusty scarab
#

I'm getting a question about Android SMAPI useage for 1.6 in the comments section for one of my mods. before I respond, I wanted to double check and make sure. there's no SMAPI for Stardew Valley 1.6 for Android, right?

proud wyvern
#

!androidsmapi

ocean sailBOT
#
Android SMAPI

There is an unofficial port of SMAPI for Stardew 1.6 to Android. Please see the wiki instructions for more information.

IMPORTANT: This is a highly experimental build and may be prone to glitches, bugs, or incompatibilities. We are not able to provide support if you run into trouble or compatibility issues; please use the discord linked on the Android SMAPI github.

Do not harass mod authors to make Android specific compatibility patches.

dusty scarab
#

neat. no idea how to make my map mod compatible with that, but that will alter how I respond. thank you!

proud wyvern
#

map? is it just pure CP?

dusty scarab
velvet narwhal
#

SDVpufferthinkblob your farm maps? interesting

proud wyvern
#

then there isn't anything you should or even can do

#

it should be working out of the box

#

if it doesn't, then that's not something you should worry about

dusty scarab
#

okay. I'll let them know. thank you!

winter dust
#

So, when I'm trying to load my NPCs schedules I'm not getting anything in return when I patch export.

#

I'm adding them via EditData right now instead of external file includes/loads but it's just not working for some reason?

brave fable
#

you're editing these files, but there's nothing loading a base to work from -- use something like this:```json
{
"LogName": "Character - Blanks",
"Action": "Load",
"Target": "Characters/Dialogue/{{NAME}}, Characters/schedules/{{NAME}}, Strings/schedules/{{NAME}}",
"FromFile": "assets/blank.json"
}

#

for some blank.json ```json
{}

brave fable
#

never noticed before that the spritebatch alpha behaviour on the farmer renderer blends the hat alpha with your head, meaning my incredible egg-like skull shows bright red through the trashcan

brave fable
#

would you consider hotheads/tigerslimes to deal fire/burn damage or just physical

#

also are bombs meant to be completely useless for violence in the volcano

gentle rose
#

no can also be done via E iirc

rotund elm
brave fable
#

sure ain't

rotund elm
#

NaurrrrSDVpufferwaaah

brave fable
#

any reason why the private struct neteventarg type field Damage isn't being set here?```cs
[HarmonyPrefix]
[HarmonyPatch(typeof(GameLocation))]
[HarmonyPatch("performDamagePlayers")]
public static void GameLocation_PerformDamagePlayers_Prefix(ref GameLocation __instance, ref NetEventArg arg)
{
Type type = arg.GetType();
bool isFire = type.GetField("IsBomb").GetValue(arg) is bool isBomb && isBomb;
bool isCrackerDefence = Game1.player.hasBuff(ModEntry.ModData.BuffCrackersDefence);
if (isFire && isCrackerDefence)
{
FieldInfo field = type.GetField("Damage");
int damage = (int)field.GetValue(arg);
field.SetValue(arg, (int)(damage * ModEntry.ModData.BuffCrackersDefenceModifier));
}
}

#

field.setvalue is called just fine, but the bomb explosion damage value remains the same

#

the actual type of the neteventarg is private struct DamagePlayersEventArg : NetEventArg

#

applies (previously 15 damage), but not persistent

proud wyvern
#

is the field public?

#

i can't find that type on the decompile repo

#

nvm found it

#

i think your issue is that it's a struct

#

and reflection with structs is weird

brave fable
#

i've always hated structs, and they hate me back

proud wyvern
#

apparently you need to box it yourself kek

#

otherwise you're boxing it implicitly by calling SetValue, but then discarding that box

#

SetValueDirect is also a given answer

#

but i've never used that

#

wtf is __makeref

#

sounds scary

brave fable
#

i'll try setvaluedirect since creating a new struct from a private type sounds awful

proud wyvern
#

can't you just... cast?

brave fable
#

arg = new .. ?

proud wyvern
#
if (arg is not GameLocation.DamagePlayersEventArg damageEventArg)
  return;
damageEventArg.Damage = 1234;
arg = damageEventArg;
brave fable
#

ah well the struct type is private see

proud wyvern
#

ahhh

brave fable
#

hence all the reflection lol

proud wyvern
#

i have forgotten the times when i actually needed to do reflection

#

nowadays i mod Cobalt Core, and we've set up our ModBuildConfig equivalent to publicize the game's DLL

brave fable
#

i don't like makeref either

#

not that it works. idiot structs

proud wyvern
#

so it looks like black magic AND doesn't work?

brave fable
#

unfortunately not every stupid idea works

#

not even ideas proposed with a smarmy know-it-all stackoverflow post SDVdemetriums

gentle rose
#

maybe it just wasn't stupid enough?

brave fable
#

Ever heard of SetValueDirect? There's a reason they made it. :) ooooh you thought you knew it all, user541686, if that is your real name

#

well i'm out of ideas, not even the depths of my stupidity can get an answer

gentle rose
#

Oh, stackoverflow. never please change

brave fable
#

type.getconstructor.invoke.setfield is just another setfield to fail

gentle rose
#

I did, at some point, know about structs

#

it has all been erased from my memory and I'd imagine that was in self-defense

brave fable
#

my next complaint about Stardew Valley is that DinoMonster.BreathProjectile doesn't extend BasicProjectile and is in fact a completely different INetObject that uses an arbitrary 25 damage in a takedamage call

#

i just wanted to make a rice cracker, man

velvet narwhal
#

-# what rice cracker constitutes a breath projectile...

brave fable
#

can't believe a rice cracker needs several transpilers

gentle pebble
#

I have been going crazy trying to figure out why my warp wasnt working

#

I forgot to capitalize something SDVpufferwaaah

#

it is now working

proud wyvern
#

@brave fable worst case scenario you can serialize it, edit the binary data, and deserialize back kek

#

(that's awful, please don't)

winter dust
#

It's saying it can't find it, but I am loading it with the rest of the schedule messages.

#

I'm not sure why it's happening when it used to work fine in an older version of the game, unless they've changed something.

winter dust
#

I think I found the issue.

brave fable
#

pretty simple: The content file was not found ---> Strings\schedules\Hephaestus

#

you've got these 2 lines in Characters/Schedules/... when they should be in some Strings/Schedules/... patch:```json
"Maintenance1": "{{i18n:NPC.Schedule.Hephaestus.Maintenance1}}",
"Maintenance2": "{{i18n:NPC.Schedule.Hephaestus.Maintenance2}}",

winter dust
#

Yeah, I just figured that out.

#

It finally works.

meager loom
#

I have cart that has a random chance to spawn in difference spots in the world using content patcher edits. Is there a way to attach a message to this when it happens like "The Bookseller is in town!" message?

velvet narwhal
#

i think the only thing that can do that is spacecore SDVpufferthinkblob

#

or your own custom ui thing handwaves c# if you wanted the least invasive way

brave fable
velvet narwhal
#

wait did you just get him to burn the crackers for you........

brave fable
#

now i just need someone that can actually cook to give you the non-burnt rice cracker

#

sadly im not smart enough to come up with ideas like dinosaur cooking

#

this girl just cant cook for shit

velvet narwhal
#

ah okay

brave fable
#

burnt rice cracker = fire resistance
rice cracker = fire power

velvet narwhal
#

i wonder how cursed that would be with BETAS... a DamageTaken.. patchupdate the object... to now be a Fire Cracker... instead of a Rice Cracker..

brave fable
#

Grass Skirt -> no pants

#

these rice crackers took 2 new trigger actions 2 transpilers 3 prefixes and the most unintelligible dialogue script i've ever seen

#

augh how is this already 67 files changed since last commit

blissful panther
dusk mulch
#

Ugh timezone such so much, it’s currently 11pm for me and I need to sleep for school tommorow, I will dm you it tommorow.

blissful panther
#

That's not a problem!

dull bay
#

Hello ! I'm creating a new animals mod, does marnie have to sell an animal ? Or can I remove it from her store?

lucid iron
#

You either need to sell only the egg, or use a framework for custom animal sellers

#

For the sell only egg case, put -1 for price

dull bay
#

I would like to loot the egg like forage, and incubate the egg

#

Oh thx !

lucid iron
#

Take a look at ostrich in vanilla

brittle pasture
#

or just void chickens lol

lucid iron
#

Oh yeah Dokkan

#

I was thinking barn Animal for some reason

remote radish
#

In custom farm loader, adding new furniture was done by editing the json, which was easy. In content patcher, it seems the way to add furniture is by editing map properties. Is there an easier way for content patcher?

lucid iron
#

You can edit properties in Content Patcher

#

It's still same kind of string Field though

remote radish
#

How to add starting farm building with animals, like that of meadowland farm?

calm nebula
#

Use spacecore

woeful lintel
#

I did a huge rework back in October/November, then I started working on a script to migrate any FF pack from the current version to the reworked version (so that everyone can easily update), then winter holidays hit (I went back home to see friends and family), then I had a bunch of reports to do for classes to complete the semester (I actually still do have some left but I'm mostly done), so I started working on this again last week-end, and I have about 2 weeks to work on it, but I don't know if I'll have enough time to do basic tests and fix bugs so that I can make a preview version (to share here and have some FF pack creators test it) before I go visit Japan with friends and family.

So now, you're all caught-up with my where-about, I'll let you and other FF pack makers know when the preview version is ready so that you can update (and report bugs) before I publish it on Nexus.

true coyote
#

GM, is there anyone that could clarify this for me? ty SDVpufferheart SDVpufferthumbsup

gentle rose
calm nebula
#

The more I deal with local tokens the more I wish CP had a ternary

#

25 if {{hasmod: cornucopia}} else 15

jagged cairn
true coyote
#

better yet, do you know of a mod thats doing it similarly that I can take a peek at?

gentle rose
jagged cairn
gentle rose
#

so. much. ternary.

jagged cairn
true coyote
gentle rose
#

but let me find that massive ternary spaghetti for you

jagged cairn
drowsy pewter
#

thats because bigcraftables use the overworld sprite in the inventory as well

#

fences use a separate inventory sprite

#

the concept is not complicated to apply to your inventory sprite but you're looking for a very specific example

gentle rose
#

hmm, the repo has it expanded into an if statement SDVpufferthinkblob but it was definitely one big ternary in my decompile I think

#

nvm found it SBVLmaoDog

#
string text = (housemate ? ((gender == Gender.Female) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Housemate_Female") : Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Housemate_Male")) : (isCurrentSpouse ? ((gender == Gender.Female) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Wife") : Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Husband")) : (entry.IsMarriedToAnyone() ? ((gender == Gender.Female) ? Game1.content.LoadString("Strings\\UI:SocialPage_Relationship_MarriedToOtherPlayer_FemaleNpc") : Game1.content.LoadString("Strings\\UI:SocialPage_Relationship_MarriedToOtherPlayer_MaleNpc")) : ((!Game1.player.isMarriedOrRoommates() && isDating) ? ((gender == Gender.Female) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Girlfriend") : Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Boyfriend")) : ((!entry.IsDivorcedFromCurrentPlayer()) ? ((gender == Gender.Female) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Single_Female") : Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_Single_Male")) : ((gender == Gender.Female) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_ExWife") : Game1.content.LoadString("Strings\\StringsFromCSFiles:SocialPage_Relationship_ExHusband")))))));
true coyote
lucid iron
#

CP getting a ternary query...

true coyote
#

my regretti about this is palpable lol someday I'll be finished this...

drowsy pewter
#

basically what I'm trying to say is that. The point is to look at an example and understand why it works the way it does. Then you can adapt it for your own situation.

If you're looking for the exact example to copy it directly, you won't get anywhere unless someone else does it for you

true coyote
#

yes, I'm trying to look at them to get an idea of how they work, I'm a big visual learner. If its being given to my through text, I need every little detail explained so I can better understand, and that's just a lot of hassle for everyone involved.

lucid iron
#
{{ifelse: {{some cond}}, 0, 1}}
#

Is this too much magic perhaps

true coyote
#

so being directed to the modding pages while useful, kind of just goes over my head -- up until now I've just done simple cp replace base items kinda mods. this is much more complex, and even if some of* sdv modding is on the easier end of coding/modding, I have like no experience

jagged cairn
#

{{ifelse: {{ifelse: {{ifelse: [[ifelse: {{ifelse: . . .

#

I wonder how far someone could push it

gentle rose
#

that sounds like you’re issuing a challenge

#

though it would be nested in the second or third arguments, not the first

jagged cairn
gentle rose
#

actually… I said it wouldn’t be nested in the first argument but idk if that’s true, you could use nesting as an AND operator KEK

lucid iron
#

Well, rn u can do this shit sorta

#

It's dynamic tokens

#

But having it would be nice cus otherwise u setup dynamic token to put in a local token...

calm nebula
#

Exactly!

vernal crest
#

(I say this as a person who does exactly what I'm suggesting because I figure if I can find as close an example as possible in an existing mod then I can dissect that to understand what's going on and then expand on it.)

#

I use the wiki to provide context to what I find in other mods rather than as my starting point.

drowsy pewter
#

i personally would suggest a seasonal path with patches that do also apply to the inventory icon, because paths specifically have their own separate inventory icon just like fences do

#

can be a retexture for vanilla paths

true coyote
#

I have a seasonal hedge fence that does seasonal objects so I'll be sifting through that

drowsy pewter
#

yeah

true coyote
#

though they load individual objects for each season, since thats all they need to do and then editdata /objects and then put in entries?

#

so maybe I could load in the object png, and use when statements SDVpufferthinkblob seems to be what logically would be next if they were using more than just seasons

lucid iron
#

Do you want your fence item to look different or do you want players to obtain "winter fence"

true coyote
#

aiming to have the correct fence object sprite show up in the inventory based on what recolor, and tone they pick in the config, and obviously if they have it set to seasonal. Default fence sprite for non seasonal users would just be the spring asset for whatever recolor or tone

lucid iron
#

Ok, then yes you are basically correct in the approach, can make it easier with the season token if u want

true coyote
#

however in my objects json I have the sprite index specified so I'm not sure how to link them -- in this mod I'm looking at they just have 4 individual object pngs, whereas I have 1 large object png with 48 sprite variations

lucid iron
#

I would split it honestly

#

But hm i guess u can be like

reef kiln
#

Is there a good place to learn C# ?

lucid iron
#
  • Load your big object sheet, use spring variant as the sprite index
  • EditImage over the spring variant with fromarea toarea, using the same big object sprite sheet
reef kiln
#

specifically C# for stardew.

lucid iron
tiny zealot
ocean sailBOT
reef kiln
tiny zealot
#

the most important thing to learn is general programming concepts. those translate easily between languages

lucid iron
#

then yeah follow ichor rec

#

If u know other lang already c# is pretty easy to pickup

gentle rose
#

this is what I love about the programming community tbh

true coyote
amber nova
#

I'm currently trying to make two ContentPatcher packs compatible and I'm a bit confused. Diverse Stardew Valley has a dedicated "Sam_Jojamart" texture while Eunoia's Vanilla Sprites only has the main Sam texture. Is DSV adding stuff for mod compat or is that Eunoia's Vanilla Sprites is missing some stuff

hard fern
#

Sam's work uniform was added in a recent vanilla update, alongside shane

tiny zealot
# reef kiln specifically C# for stardew.

if you haven't programmed before and want to learn C# for stardew modding in particular, i recommend:

  1. use that yellow book or a similar source to get yourself off the ground. this will cover stuff like "how do i turn typing into programs" and accomplishing the basic programming tasks
  2. go here https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started and install the stuff you'll need, and make the basic example mod.
  3. use the wiki's API guides https://stardewvalleywiki.com/Modding:Modder_Guide/APIs and make all the little tutorial examples to get familiar with how SMAPI works and how to run code with it
    after that you will probably have some ideas about how to accomplish whatever goals you have for your mods
hard fern
amber nova
#

Yikes-- this should be fine for now 💀

lucid iron
#

I can give u an example in like 8hr

true coyote
true coyote
#

would this work so that non seasonal and spring both use the same sprite? my head sees it as "if seasonal is true, then it will use season spring. if false, it will still patch this image", maybe I'm dumb. I can always just make a duplicate of this entry and specify it just for seasonal use

        "LogName": "Starblue Light"
        "Action": "EditImage",
        "Target": "ShilohAreles.CuterPicketFence/objects",
        "FromFile": "assets/objects.png",
            "FromArea": { "X": 16, "Y": 0, "Width": 16, "Height": 16 },
            "ToArea": { "X": 0, "Y": 0, "Width": 16, "Height": 16 },
            "When": {
            "Tone": "Alt",
            "Recolor": "Starblue",
            "Seasonal": "True, False",
            "Season": "Spring",
            }
        },```
rancid temple
#

If the When conditions aren't met then the patch doesn't exist at all

true coyote
#

like all of them? so even if it gets to seasonal false, it'll keep going down to check the season condition?

#

sorry, I may be thinking of this in too much of an "order of operations" kind of view point

rancid temple
#

Definitely all of them, I don't actually know if it checks beyond the first failure point

#

Not that it would matter if it does

#

Any amount of non-matching condition will cause it to not exist

true coyote
#

yeah, cause even if it fails season spring that should be fine, I dont want it to display outside of spring if seasonal is true

#

I'll just see if it works when I get in there and get all the other kinks worked out

#

if not I'll go back to the drawing board

unique sigil
true coyote
#

I have that for the other things, but my sprite objects are just sitting in the assets folder

#

I'm too lazy to split up all 48 variations but then again I'm just doing the work in making 4 variations of the edit images

unique sigil
#

like all the assets are just in one big png?

true coyote
#

the assets for the object sprite yes, the actual fence tilesheets are separate

#

so I could break each one [sprite] down into the correct config token folder names

#

I'll think about it while I'm at the gym

unique sigil
#

i see, i still suggest splitting it up anyways. saves you the headache if you need to do any debugging in the future because your code will be more concise

#

also, if you need to rename lots of things fast, consider using bulk rename utility if you havent

true coyote
#

😯 ?

unique sigil
true coyote
#

thanks ovo

unique sigil
#

we should.. probably have a command for this. too useful of a tool

true coyote
#

anyway I'm off to the gym to hurt and get sweaty SDVpufferwaaah

#

all in the name of weightloss

tawny ore
#

PowerToys has a lot of useful tools, including a powerful renamer appropriately named PowerRename

#

I use PowerToys for FancyZones, Always On Top, File Locksmith, PowerRename, among other things

unique sigil
#

i have this many folders that contain 9 assets on average, thank god for BRU (and aba for introducing me to it)

#

wouldve lost my mind much earlier if i had to do it manually

tawny ore
#

Although PowerToys is Windows only (developed by Microsoft) so that's its only limitation

#

Here's all the stuff it can do

#

Oh ColorPicker is nice when I want to sample a random color on my screen without having to take a screenshot and open it in my image editor

rancid musk
#

I use sharex's color picker. The thing I use the most from powertoys is that one that lets you know what program is holding a file open.

tawny ore
#

Yeah, that one is a huge saver for me all the time. Because Windows constantly and mysteriously locks folders/files for seemingly no reason.

gentle rose
#

a colour picker would be nice SDVpufferthinkblob I don’t need most of the other stuff because linux but a colour picker would be very useful sometimes

jaunty sparrow
#

Hello everyone, this is my first post here so I apologize for any unintentional breach of any rules!

I started developing a mod to improve the quality of life when playing with gamepads and I'm having a hard time finding some things in the documentation. So if you could answer and attach where this information is in the documentation, it would be simply fantastic.

When opening a menu and using the analog sticks or arrows, the cursor moves exactly one "square" of the inventory. I want to create shortcuts to move to the last squares (Initially using the right analog stick combined with RT/R2, but with the shortcut configurable by the user).

Menus that have more pages, I want to advance the page with the same logic, instead of having to navigate to the visual arrow (like in the fish tab), Initially using the right analog stick combined with LT/L2, but with the shortcut configurable by the user.

What classes, functions, etc., would I need to create these functionalities?

I was able to recognize the user's keys with OnButtonPressed, recognize which Menu the user is in with OnMenuChanged and I was able to move the cursor with "Game1.setMousePosition()".

However, moving the cursor with this function does not do exactly what I would like. The expected result is:

When opening the Inventory, the first square is selected, when using the right analog stick to the right, it should go to square 12, when pressing the left arrow, it should go to square 11, and when pressing the left arrow, it should go to square 10.

The post is a bit long, because I tried to explain it in the best possible way.

agile terrace
ocean sailBOT
calm nebula
#

It's basically different for every menu tbh

tawny ore
#

Once you reassign the component, you can call menu.snapCursorToCurrentSnappedComponent()

tribal ore
tawny ore
#

@jaunty sparrow Another thing to consider is that components have neighbors which tells it the id of the component above, below, and to the left/right of it. That's how it determines where to go to based on controller input.

#

Look at IClickableMenu.moveCursorInDirection(int direction) in the decompiled code for how that works.

jaunty sparrow
#

@tawny ore Many thanks for all the explanations. I'll try this things that u tell me tonight

tribal ore
#

Hey lovelies, does anyone know how to spawn actual critters (fireflies, butterflies, etc) during events? I figured out how to add animals like turtles as temporary actors (they have sprite sheets in the Animals directory), but I can't seem to figure out how to access the critters

#

I really love the crystal butterflies that show up during the winter, and they would be perfect for an event I'm cooking

lucid iron
#

In an event they can be TAS

tribal ore
#

Temporary Actor Sprites?

lucid iron
#

Temporary animate sprite

#

Iirc the command is named that but im on phone pls check wiki

tribal ore
#

Found it! Alright, thank you. I'll give it a shot. I was really hung up on the "actor" part and missed that

pseudo junco
#

Anyone know what the path is for the effect when you read a book? CryIgnore

brittle ledge
tribal ore
#

Btw, at what point does a mod count as an "Expansion"? Aside from changing all of the vanilla events for Sebastian (and more besides), I have added at least 10 new events for him SDVpuffershy

tiny zealot
proven spindle
#

I'd consider that an npc expansion

tribal ore
#

xD Lol

tiny zealot
#

(cf. a bunch of existing "X NPC dialogue/event expansion" mods)

tribal ore
#

Cool. This became a bigger project than I expected, but I'm glad to be nearing the finish line finally

#

Just have one large event left to tackle that I've been putting off

tiny zealot
#

i wouldn't call it just a plain expansion, though. colloquially, that word on its own usually means like new areas and new NPCs and items

tribal ore
#

Got it. But "Older Sebastian expansion" wouldn't be misleading

#

I'd call it a "dialogue" expansion, except that dialogue is really just the tip of the iceberg

tiny zealot
#

yeah that seems fine. or "Older Sebastian - dialogue and event expansion" or w/e

tribal ore
#

Sweet, thank you for the advice

tiny zealot
#

any time SDVpufferthumbsup

gaunt orbit
#

is there an easy way to get the error texture?

#

or do broken things just draw directly from cursors?

lucid iron
#

itemType is a IItemDataDefinition

gaunt orbit
#

looks like index 0 of cursors

lucid iron
#

Oh there's also GetErrorTexture

#

I wonder if anyone tried to define a whole new item data definition yet kasumidetect

#

It seems like a thing u can do, for whatever strange purpose desired

teal bridge
#

The error texture is the cursors texture; if you also want the rectangle then it's best to do ItemRegistry.GetDataOrErrorItem with a bogus ID (that's what I do).

#

Or just hardcode the coordinates, I guess.

median dune
#

hold on, @lucid iron I now see that the code you gave me utilizes something from C# 12, how come?

gaunt orbit
#

I'm not doing item stuff so it's probably okay to just hardcode it based on the default implementation of GetErrorData

gaunt orbit
#

just add <LangVersion>Latest</LangVersion> to your csproj

tiny zealot
#

that, yeah

median dune
#

weird, I looked it up and it says .NET 6 supports up to C# 10

#

unless I don't understand something

gaunt orbit
median dune
#

huh

gaunt orbit
#

there are probably some things in v13 that aren't supported on .net 6 but I have yet to run into any issues

median dune
#

now time to learn wth primary constructors are

gaunt orbit
#

actually you're right, the docs say 12+ isn't supported on .net 6 SDVpufferthinkblob
still, I haven't had any issues so far

gaunt orbit
# median dune now time to learn wth primary constructors are

it's just doing it like

public class MyThing(string value, int number) {
  public string Value = value;
  public int Number = number;
}
``` instead of ```cs
public class MyThing {
  public string Value;
  public int Number;

  public MyThing(string value, int number) {
    Value = value;
    Number = number;
  }
}
median dune
#

Huh

#

Good to know

gaunt orbit
#

mostly useful with record classes, because then you can just do this

public record class MyData(string Value, int Number);
``` and it will auto-generate all the properties for you
#

can't be used for stardew data models though because because records are read-only

amber nova
#

It's better than the constant "Better X" I see all the time

#

"Better X" always meaning "a mod that vaguely changes X"

tribal ore
amber nova
#

I think if your name makes it clear what you do and doesn't make it sound like you have feature creeping or too much monolithing it's good

tribal ore
#

Monolithing?

amber nova
#

Yeah like uh

tribal ore
#

Don't know what that means in this context

#

Sorry

amber nova
#

When mods do a BUNCH of stuff to the point that you're like "what does this have to do with the name"

calm nebula
#

Was on preview for a while

amber nova
#

The biggest monolith mod that I know of is OptiFine, as an example

tribal ore
amber nova
#

It also has SO MANY resource pack changes and render changes

#

(And it's also completely closed source so compatibility is Hell but that's a separate thing)

tribal ore
#

Speaking of open source, do people just add a license file to their mods on Nexus?

tiny zealot
amber nova
#

Same

tribal ore
#

That's the Linux philosophy, actually

#

Small tools that do one job well

#

And I agree

teal bridge
#

I use primary ctors, file namespaces and collection initializers extensively and have never run into an issue.

#

(fyi on the C# 13 thing)

tiny zealot
fading walrus
#

clearly, what you need at that point is "yet another better x redux" kek

fervent horizon
#

Damn, there goes my Yet Another Yet Another mod

tiny zealot
#

anyway, having dropped some takes in the chat, i will now leave for several hours. surely nothing will come of this,

gentle rose
fervent horizon
#

If Stardew had a Nintendo like game system, what would it be called? Like what is the system that Abigail has?

calm nebula
#

I see "yet another" as one step over "redux"

#

Just means a third author had thr same idea

gentle rose
gray bear
#

"yet another x extended redux 2: electric boogalo"

warm imp
#

yet another Nintendo system

gray bear
#

i don't think it has a canon name. probably is based on nintedo

teal bridge
gentle rose
fervent horizon
#

Looks Like a Super Nintendo

warm imp
#

Does Shane's system mention a name? I know it had one for the cheating device

gray bear
#

Jotendo

fervent horizon
#

I just can't go with Joja themed though

teal bridge
#

Suit yourself, but lore is lore

median dune
#

I like the names of type <original name> - <2 or 3 summary words> the most

gray bear
#

the console is called Steve, clearly SBVMischief
source: trust me bro

gentle rose
#

(I have seen a few aedenthorn reduxes that I think were correct to use the redux naming scheme, since it includes the name of the original mod they were updating but also shows it’s been expanded. Light Mod Redux is a recent one, though I haven’t tried the original nor the redux)

fervent horizon
gentle rose
#

“More _” is also another one that’s becoming oversaturated

gray bear
#

i'mm uh updating Pride Pastries and honestly the way i'm going it won't be a redux it'll just be a 1.6 port

#

no new feature, barely can handle the existing ones

gray bear
lucid iron
#

You heard of More Fish are u ready for Less Fish

tribal ore
median dune
#

I'm thinking of a name like : A bright future - meaningful marriages

#

for my mod

fervent horizon
gray bear
tribal ore
#

I like it a lot, actually. Gives a very good first impression

median dune
#

yeah and it contains the marriage keyword

gray bear
#

see "More Fish" and "More Recipes" are more descriptive imo

#

i need some spice

calm nebula
#

More Fertilizers is accurate

tribal ore
#

I think I will end up going with "Older Sebastian - NPC Expansion"

gray bear
#

yes but it's less ✨ exciting ✨

calm nebula
fervent horizon
#

Yet another better more fish redux

lucid iron
#

Mod Name Remastered

gray bear
#

how are the fish better now

#

what are ya'll doing to those poor fish PensiveButtPuffer

tribal ore
fervent horizon
#

3x more fishy

gray bear
#

they're 100% fishy theyr'e fish?!?!

fervent horizon
#

now they are 300% fishy

gentle rose
# calm nebula I think of it as same idea new implementation

most aedenthorn updates didn’t do a full reimplementation though, and especially the specific mechanics are usually still going to be the same as the old mod, so imo it’s valid but idk haha, I haven’t proven to be very creative with names

gray bear
#

sounds reality shattering, give me 100

tribal ore
#

Mod Name Remastered Redux

gentle rose
#

I have a mod for renaming your pet called Pet Renamer, a mod for changing the radius of lights called Light Radius Mod, and a mod for putting markers for events on the map called Map Event Markers… don’t take naming advice from me KEK

gray bear
#

that's just redundant, is it not? thonk

#

are those not the same words

tribal ore
#

xD

#

They're not the same words. They are distinctly different

#

Spelled differently and everything

gray bear
reef kiln
#

Aedenthorn still has a ton of mods that have not been updated/redone. I wish there was an easy way to find them other then searching each mod name individually.

median dune
gray bear
#

actually nah i can't complain about names

gentle rose
tribal ore
#

Not just dialogue and schedule changes

median dune
gentle rose
#

we are never porting all of their mods pffft

gray bear
#

my names are just what the mod does

#

minus TSP but that one isn't very creative

fervent horizon
#

yeah,my horse mod I am working on is called Advanced Horses in my files, so I am not a good name giver at all

gray bear
#

Horses But More of them

reef kiln
proud wyvern
#

fwiw, "mod called what it does" makes it easier to search for

fervent horizon
gray bear
#

that is true nexus searching is uh

#

darnit

median dune
gray bear
#

could always go with <funky name> (<what mod actually does>)

gentle rose
median dune
#

oh shi

#

sorry

reef kiln
#

I just name my mod after what they do. But my mods are all simple so that it's the easiest way to explain them

gray bear
#

lights, camera, action (Light Radius Mod)

proven spindle
#

Convention I've seen (and used) is 'expansion' = multiple npcs, items, maps etc, while 'npc expansion' is npc specific

gray bear
#

is it perhaps a bit tacky? mayhaps

#

do i care? No

gentle rose
#

also, speaking of aedenthorn… did you know they got a lot of their ideas in the mod ideas repo? hmmmm which is now up to date with tagging so you too can find fun new things to implement (no, seriously, there are some gems in there)

#

!modideas

ocean sailBOT
#

If you have a mod idea that you aren't planning to make yourself, you can put it in the mod ideas github: https://github.com/StardewModders/mod-ideas

However, this does not mean anyone is guaranteed to work on your idea—modders who are looking for ideas sometimes go through and work on what they find interesting off this list. If you want to pay someone to make your mod idea, there are a few people who do commissions (mostly art, sometimes code); you can ask around, search usernames for the word comms, or see !commissions.

gray bear
#

NPC expansion and expansion are two seperate things, yeah

fervent horizon
#

Maybe call it a personality mod, if it is changing all the dialoge and scheduling

median dune
#

maybe Personality Expansion instead of NPC

gray bear
#

Overhaul might be the word

gentle rose
#

having looked through pretty much this entire repo with tia, I can tell you there are some ideas there from 2017 that I was shocked nobody has done yet and that are really not very difficult, for literally every type of modding (content patcher, smapi, what have you)

gray bear
#

if you're uh, changing things

gentle rose
#

anyway that’s my promo done

gray bear
reef kiln
#

I am trying to learn c#, just stared today with intro video on YouTube. CP modding is easier 😭

proven spindle
#

'Immersive' might be another but there's already an immersive seb iirc

gentle rose
#

(oh and don’t forget to leave a comment with a link to your mod if you finish any of them!)

median dune
gray bear
#

Sebastian Expanded

#

mm no that don't got a good ring to it

tribal ore
#

It's.... hmmmm xD

#

This became not PG very quickly

calm nebula
#

And I can put them in

proven spindle
#

I think having the word 'expansion' in there will help, that's what most npc expansions have so it makes it easier for people to search for them

brittle ledge
#

Atra you know about mouhraha's repo right?

gentle rose
#

there’s one person who’s made a bunch but they’re only on github— ty tia haha

gray bear
#

gotta make searching as less of a hassle as possible

proven spindle
#

At least that's been my experience, and I've made 3 so far lol

gentle rose
#

is mouraha here? I swear I saw them the other day

calm nebula
#

Like. By that metric, my mods work on 1.6

gentle rose
#

yeah, putting a mod back on life support is a bit eh

calm nebula
#

But I don't feel like I've done enough testing

median dune
gentle rose
#

but if you’re willing to fully support it but just don’t have any ideas for ways to change it, I’m relatively okay with it if the perms allow

calm nebula
gray bear
#

if u wanted wide seb just look at his beach portrait

brittle ledge
lucid iron
#

sorry atra i did in fact just do the minimum required to get ur ring mod to work in 1.6 kyuuchan_run

brittle ledge
patent lanceBOT
#

But of course, dear tiakall (#6512302) (4h | <t:1738711673>)

lucid iron
#

Originally i wanted to make combine trinkets based on that code but I did something else in the end

gray bear
#

wow maru's bot being nice to tia?

brittle ledge
#

As it should snob

tribal ore
#

tia is her favorite I guess

wanton pebble
#

It was nice to me today too

#

Someone personality transplanted the bot

gray bear
#

perhaps it's in a good mood

tribal ore
#

Have you guys been bribing it with strawberries?

gray bear
faint ingot
#

question about content patcher conditions: I know how to specify "only spring 16", and "not spring", and "not 16", but how do I specify "not spring 16"

wanton pebble
brittle ledge
#

Kantrip, re: names, you might want to call it a dialogue and event expansion? I think that's what people usually search for.

fervent horizon
#

Dialogue and Event Expansion Pack - DEEP Sebastion

tribal ore
#

But I don't do custom art for it, so maybe that would be enough

lucid iron
#

I think it's fine to have a subtitle thats only on nexus page

#

And use merely Older Sebastian for the manifest

tribal ore
#

Sure... that makes sense

gentle rose
#

@half ether hi CB_wave_boy just wanted to let you know someone stole one of your aedenthorn updates and uploaded it to nexus as the optional file of a save file. They changed the manifest to remove your name (but left it so it said x.x.x-official 💀) but I decompiled and compared against yours and it’s definitely your one. I reported it to nexus but it’s still up, I won’t send the link here but can send it to you via DM, I think you’d have to report it yourself for them to take it down.

median dune
gray bear
calm nebula
#

I have Opinions

gentle rose
#

idek why people upload save files to nexus for stardew… like what’s the point. I wonder if it was just a way to hide the fact they’re reuploading that mod.

gray bear
#

might be

brittle ledge
gentle rose
gaunt orbit
reef kiln
calm nebula
#

A lot of my mods work fine in 1.6. It's me that is the problem, and thus my decision was to take a step back

#

Reduce the load to what I could support

lucid iron
#

Are there any struggling in 1.6 frameworks tho

gentle rose
gray bear
#

(what's a FAVR)

lucid iron
#

Half of em either became vanilla or have og author still maintaining (ty digus)

brittle ledge
#

(Planned BFAV replacement)

gaunt orbit
gentle rose
#

mouahrara’s repo is gpl-3 I just realised but the mod is being distributed with the credit removed and no license so it doesn’t count anyway

brittle ledge
#

The main frameworks are all supported or legacy/also doable in CP.

brittle ledge
lucid iron
#

I guess cp anim is bit of a struggler since casey wanted people to just spacecore for a while

gaunt orbit
#

not to be a pedant but it's deprecated not depreciated

brittle ledge
#

There's a bunch of niche frameworks limping along, but part of that is because they're niche

brittle ledge
reef kiln
#

I saw an xnb mod just the other day. I was surprised with how easy CP is to do.

gray bear
#

still can't believe roku gave people wanting to exclude recipes from perfection a framework. niche frameworks my beloved

lucid iron
#

The particular thing i have in mind is like

  • add something game can't do
  • only has unofficial update in 1.6 rn
    EBAGI counts i guess?
brittle ledge
#

But yeah, I don't know anyone that's feeling held back by the unofficial update for Farm Cave Framework, for example. If anyone's interested in that they're just gonna make it

gaunt orbit
reef kiln
#

STF is still used. As is PFM but both can be completely done in CP now.

lucid iron
#

I don't know how I'd redo EBAGI in a content patchery way hm

gray bear
#

why is EBAGI still a thing?

brittle ledge
lucid iron
#

Well there's stuff u cant do without EBAGI

gray bear
#

doesn't the game just, do that now

lucid iron
#

Like unique icons

#

And the thing where u show the flavor as a little icon

gray bear
#

ah. guessing u can't do that with CP?

fervent horizon
#

like the complete bubble

lucid iron
#

No like a little fruit icon

#

Drawn next to ur wine

gray bear
#

this

fervent horizon
#

oh, like inside the cell

lucid iron
#

Im personally fine with the color mask thing vanilla has

reef kiln
#

There are still mods I like that use PFM, but I converted them for my person use. I hate having pointless frameworks installed.

lucid iron
#

And someone fixed honey bolb

gray bear
#

honey bolb?

lucid iron
#

But yeah people sure seem to make ebagi pack still

gray bear
#

old habits die hard i guess

lucid iron
#

Honey didn't have color sprite

gray bear
#

ah

lucid iron
#

Very happy this exists Dokkan

brittle ledge
#

I'm still kind of astounded it crossed the 100 content pack threshold (and is still there).

reef kiln
# gray bear

That is the only part of EBAGI that I want. So I have not installed it for just one feature.

gray bear
#

same tbh im shocked so many people still use it

#

please don't ping me in replies

lucid iron
#

The "animal vendor" thing was like

#

Occasionally desired by random ppl

reef kiln
gray bear
#

animal vendor?

lucid iron
#

I understand that bfav used to have it

gentle rose
#

ebagi? SDVpufferthinkblob

gray bear
lucid iron
#

Like an animal vendor besides marnie, i.e. what livestock bazaar is

faint ingot
gentle rose
#

that is a very specific framework and I respect that

lucid iron
#

It's an unofficial of BAGI

gentle rose
gray bear
#

to be fair back in 1.5 wine and juice didn't have custom colors

gentle rose
#

(for AND, for OR there’s an operator)

gentle rose
#

so not spring, not 16

faint ingot
#

but I want spring 17 to be fine as well as fall 16

gentle rose
#

oh it’s for When not for Condition. regardless, similar principle

#

yeah, that’s what they’re showing you.

#

they’re showing you how to put the conditions together yourself.

brittle ledge
gray bear
#

when condition will check if both are correct and only apply if they are

lucid iron
faint ingot
#

but doesn't the ! to reverse it apply to the conditions individually, and not combined?

fervent horizon
#

I want Other shops to be updated to Stardew UI and have similar options to the Livestock Bazaar Shop menu

reef kiln
#

Livestock bazaar is great.

fervent horizon
#

Like it is getting hard to shop at Pierre's with over 400 mods

lucid iron
#

2026 mod trust

gentle rose
#

there’s an OR operator for the when conditions, right?

lucid iron
gray bear
#

are you using When or Condition sdvhead?

lucid iron
#

Yeah there is with query

gentle rose
#

!(16 and spring) = !16 or !spring

do with that what you will sdvhead, I can’t remember the syntax rn lmao

reef kiln
#

Being able to select animal alternative is great.. i converted all my cow mods to be under one cow icon, same with chickens and such.

gray bear
#

(can you even use ! with When uhhh)

gentle rose
#

if you can’t, I don’t see a reason why you can’t switch from When to Condition?

reef kiln
gentle rose
#

wait no they work differently

#

content packs SDVpufferwaaah

fervent horizon
gentle rose
#

this is why my crimes are in c#

gray bear
#

yeah i think it's different uhh

reef kiln
#

True

gray bear
#

god i know it's possible to check with when if something isn't true but i forgor

lucid iron
#

It's usually like

#

"token |contains=whatever": false

#

If u originally had "token": "whatever"

gray bear
#

so would it be
"day|contains=16": false thonk

gentle rose
#

queries have a NOT operator

gray bear
#

oh

flint stratus
#

hiya i have a question Willy's sprite goes down 64 pixels and stays 16 across rather then 32 x 16 It just lists the "frames" in animation as "16/16 17 18 19/16", which should only be his body, not the rod extending down another 32 pixels so i wanted to know the logic behind that if anyone knows

gentle rose
#

so your solution is {{Query: NOT spring OR NOT 16}} but fix the spring and 16 obviously

flint stratus
#

wondering because i need a fishing sprite for my custom npc and was wondering how to do the longer version.

gentle rose
#

or there might be a way to check for an exact date, I didn’t check if this is an x-y problem situation

rigid oriole
#

anyone join the nexus mods web UI beta and is it worth?

reef kiln
#

I was reading through the east scarp discord and someone asked if there are mods with ancient Greek designs. That would be a cool mod. I want a Greek farm house. (Or Roman)

lucid iron
#

Airyn's got an obelisk mod

#

But it's not like, greek greek

teal bridge
gaunt orbit
lucid iron
#

More the kind of things modern ppl make inspired by greek

rigid oriole
#

oh ok if i can change back maybe i'll give it a shot

lucid iron
#

Idk if i am express this correctly

rigid oriole
gaunt orbit
#

personally I think the main page is too big on desktop, which makes it feel cramped, but it's worth trying

fervent horizon
#

ok, so maybe the consoles are literally a Nintendo, because Shane has a Sega

teal bridge
#

(we ask for Markdown or a BBcode implementation that's newer than 2006, and they give us... box shadows. I'm just kidding, Nexus people, never stop being you.)

lucid iron
#

What r some features of new bbcode