#making-mods-general
1 messages · Page 67 of 1
and i don't remember if the uh
dialogue $action thing for maptiles is fixed in 1.6.9
i can retest it but 
oh man don't make me work on the 1.6.9 stuff yet, i don't wanna
fix your stuff <t:1730731440:R> 
so im a bit lost on what it means by: If you just use {{i18n: today}}, it'll show the literal text "today is {{DayOfWeek}}"). You can pass in the token like this instead: {{i18n: today |dayOfWeek={{DayOfWeek}} }}, in which case it'll show something like "today is Monday".
i dont understand what its saying you should call i18n with and what you should put in the i18n file
tried to look at the sve dialogue for examples but searching for }} }} it doesnt seem like they used it at all?
it means i18n is just text storage and doesn't understand content patcher tokens
SVE uses it in things like characters/dialogue/NPCNAME
but content patcher can edit the string when it fetches it for you ({{i18n}} is a CP token that fetches i18n strings)
if i pass in {{i18n: today |dayOfWeek={{DayOfWeek}} }} what do i put in the i18n
so you pass a parameter to the i18n token (that's what the |dayOfWeek={{DayOfWeek}} is in the example)
let me grab an example that doesn't use the same text for all three parts. one second
if you mean code/NPCs/NPCNAME then i searched and couldnt find it, if you mean actually characters/dialogue/NPCNAME im not sure such path exists
(I have a lot of examples for fun things with i18n)
SVE is a very simplified thing in the form of it's literally only {{i18n: <key>}} i don't know if they actually use tokens within tokens
except maybe the gendered terms? but then idk
every time i think a mod uses assets/ only for images im missing so much stuff there and every time i think its got stuff there it uses it only for images 
it's literally whatever the author wants to do with it, like i've named claire's .jsons something stupid like Chaos.json Incarnate.json
Yeah, CP doesn't care, it'll just use whatever path you tell it too.
so if im understanding this correctly then when you say |replacementToken={{InsertTokenName}} then in the i18n file you can just use {{replacementToken}} instead of {{InsertTokenName}} and it will recognise that?
anyway in your i18n you make up your own "token", like this:
"my.i18n.key": "Here's some text but it has {{replacement}}."
and when you load it with the CP token, you do this:
{{i18n:my.i18n.key |replacement=style}}
and you would get
Here's some text but it has style.
Remind me in 8 hours to add token explanation to the i18n modding wiki page
yeah whatever. leave the request on my desk. i'll get to it. maybe.
(#6307080) (8h | <t:1729202085>)
typically the value of doing this is that you don't know what "style" is ahead of time, so often you use another token for that (like the {{DayOfWeek}} example you asked about)
so youre effectively just loading a string defined by the i18n file with another string
yeah, you are putting parameters into your i18n string using content patcher's ability to do so
which is pretty much always a CP token otherwise no point replacing instead of just writing it in the i18n file
?
its cus i18n isnt a content patcher system, so it doesnt do tokens
Yeah
those are actually arguments
right
ok that makes sense
ig its just the syntax throwing me a bit since its the same
you can raise concern with pathos ig
it'd be a big change though, i dont recommend it
think of all the old mods that change would explode
Yeah, you'd need another rewriter in CP
PR rejection any% speedrun
And poor Pathos has done enough of those 
yeah like it wouldnt be that difficult to change for old mods but it would be time consuming and a lot of mods just wouldnt and would break permanently
so many mods already lost to new updates because they didnt want to update to be compatible 
and for pretty limited value, at that
yeah so not realllyyy worth it
(potentially making it less confusing at a glance in exchange for modders needing to remember where the syntax is different)
"yeah guys i know you lost half your mods folder but now we use single square brackets instead of double braces!"
dont think people would be too ecstatic
you joke, but the vanilla string tokens use single square brackets 
make it 1.7, reasonable excuse since 1.6 was a 'maybe' as a modpocalypse
yea i mean, i guess you could use vanilla token strings??
idk if u can format stuff though
"1.6 might be the modpocalypse!"
"shame"
"its okay, turns out its fine!"
"we will make sure it is not"
Guess why I always do }} }}
With the space in between
Despite the fact that the parser doesn't need it
because thats too many braces to never miscount by 1
One of the first mods I tried to make was a special orders mod
That uses {} for substitutes
But why 
Ask CA that
@calm nebula: look at the dotnet string rehash code (3d ago)
Fair answer, I'm not going to do that
Im going to leave that for someone braver than me
It is fairly standard token syntax for things in various languages/frameworks I guess...
is there some sort of tool for generating entries for content patcher actions
because there is just no way that flashshifter types out all of these fields that dont make a difference to the item
"Buffs": [
{
"Duration": 400,
"CustomAttributes": {
"FarmingLevel": 0,
"FishingLevel": 0,
"MiningLevel": 0,
"LuckLevel": 0,
"ForagingLevel": 0,
"MaxStamina": 0,
"MagneticRadius": 0,
"Speed": 0,
"Defense": 15,
"Attack": 0
},
},
]
you would think it would just be
Maybe he grabbed a vanilla entry from the unpack and filled in only the fields he needs
"Buffs": [
{
"Duration": 400,
"CustomAttributes": {
"Defense": 15,
},
},
]
The wiki should tell you which entries are optional and what the default values are if it's omitted
But it's really common to grab a completed example and just change what you need, as Selph said
any programming language can spit out formatted text if you ask it to. i would expect any sufficiently large mod to have something of the sort (or at least a text editor macro or whatever)
hm
ok
also whats up with like "Name": "Ancient Fiber"
dont you need to put the mod id
fair enough
if you are allowed to prefix something with your mod id, do it
usually yoinking from unpacked is a good start
sometimes it is inconvenient (using your NPC's internal name in event scripts), but CP's tokens can solve that easily
does this also apply to i18n entries
no, those are fine without, since they're already scoped to your mod
because clumps and nodes uses the very long "GlimmeringNodesAndClumpsEmeraldNode_Translated"
whereas sve is like "Phone.Leo" and calls it a day
Old mods typed out their modid, iirc {{ModId}} is a newer feature
If you're talking keys then only a few for npcs actually require their internal name because they're required
SVE also knows it is the most popular mod and that other mods serve at its pleasure, so it makes decisions accordingly
lmaooo true
seems like DynamicNightTime can't handle times between 150 and 600, and I am a bit lost
those times are not accessible in gameplay. the day runs from 600 to 2600 and abruptly ends at that time
and that's what Nightowl circunvents
the mod I am fixing right now
when the clock hits 2550, it changes it to 150 to avoid the abrupt end. and when the clock hits 600 again, the player colapses so the day can end and start a new one
most problems are fixed, like the fishes and the crash at 600 that was happening, because SMAPI updated how warp works
the last fix is to hit a light transition from 2550 to 150 and onwards that feels natural
the original code does this:
// transition morning light more realistically
if (this.Config.MorningLightTransition && Game1.timeOfDay > 400 && Game1.timeOfDay < 600)
{
float colorMod = (1300 - Game1.timeOfDay) / 1000f;
Game1.outdoorLight = Game1.ambientLight * colorMod;
}
also, given the changes I had to make, I am sure the mod circunvented the abruptly end of day in another way, so light would be taken smoothly until 400
I changed it to this:
// transition morning light more realistically
if (this.Config.MorningLightTransition)
{
if (150 <= Game1.timeOfDay && Game1.timeOfDay < 400)
{
float colorMod = (2400 + Game1.timeOfDay) / 1000f;
Game1.outdoorLight = Game1.ambientLight * colorMod;
}
else if (400 <= Game1.timeOfDay && Game1.timeOfDay < 600)
{
float colorMod = (1300 - Game1.timeOfDay) / 1000f;
Game1.outdoorLight = Game1.ambientLight * colorMod;
}
}
but the light doesn't go on as expected for the full night cycle
if someone has a suggestion, I am open
also thinking in how to make a compatibility patch to DynamicNightTime or the other way around
vsc doesnt like trailing commas
Because VSC uses stricter JSON formatting, technically trailing commas (and comments as well) are not allowed by the JSON standard, but Newtonsoft (the library the game/smapi uses for JSON) uses is less strict and allows them
yeah im using jsonc to allow comments but idk if its ever gonna stop complaining about trailing commas
as long as it doesn't crashes, warnings can be ignored
yeah its just annoying innit
being on the fixing and updating old mods all week, I know
i can just do this to add to her dialogue and schedule right?
Yes
thanks
game is taking ages to load, would rather to make sure before waiting 30 minutes for it to load
30 minutes seems like too long
also to make absolutely sure: you haven't clicked the SMAPI window too much and put it in select mode by mistake?
i could see 30 if you were already out of ram and thrashing constantly during the load, but otherwise i don't think you should hit that sort of load time
Occasionally people have weird antivirus problems
But 30 minutes is well outside the usual
Regarding select mode: If you accidentally click on the cmd or PowerShell window, it may highlight/ select text. When it does that, it pauses the output. This is also indicated by the title bar including the word "select" at the beginning of the title.
Hitting enter or space clears the selection and allows it to catch up.
Something like 1-5 min is typical, with a range of typical mod quantities
Occasionally people install a huge number of mods on a slower machine and load times go up, but that’s pretty rare and really hard to do by accident
I have a problem with save load, I changed my data model and then it doesn't read properly. I'm just simply reading and storing like this. The result of the debugging is that the model is fine before storage, but when I re-read it, the model is always null
oh sorry
my problem is not the light, but the tiles
it is not case senstive?
// read data
var model = this.Helper.Data.ReadSaveData<ModData>("example-key");
// save data (if needed)
this.Helper.Data.WriteSaveData("example-key", model);
not sure if it works how you are trying to do
I changed the data model a bit and it didn't work. Until then, it's fine
@oak dragon You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
seems like to read, you need to use <ModData>
ModData is just the name of the model in the example. i think seven is right to have used their own data type
yep It worked well for a loong time
if you changed the model, you probably need to include fields for the old values that you may expect to find in users' saves. if you deleted them, the parse is probably failing when it can't assign to the missing fields
there's a way to exclude fields like that from serialization when you need to write out the data, let me pull it up
I saw it now reading further
I ran a new game but still failed
oh
public sealed class PlanData { public List<Plan> plan = new(); public int max_plan = 20; }
public sealed class Plan { public string title = ""; public string npc = ""; public string location = ""; public string action = ""; public string time = ""; public int special = 0; public string repeat = ""; public string item = ""; }
heres my data model
I changed special from str to int
I was looking for my key in the save file of the new game, but I couldn't find it, it means writesavedata failed. But I cant figure it out
just to make sure, you are calling WriteSaveData at whatever point you have new data to write, then sleeping a day so the game actually saves?
Does anyone have all of haleys portraits
!unpack
Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!
People generally won't agree to redistribute game assets here (over Discord), you can unpack them yourself pretty easily though!
In which event are you writing
you are right
fk me plz. how can it work well for such a long time
I called savedata in OnSaved
thank you all very much
If I could avoid all my stupid mistakes, I would have lived more than twice as long as I am now
mistakes makes us wiser if we learn with them
ok, I am done. I can't make the night transition smooth
seems like it is hard coded, and even DynamicNightTime, that should be able to handle it, doesn't
the beginning of DNT event that should take care of it:
private void OnTimeChanged(object sender, TimeChangedEventArgs e)
{
//handle the game being bad at night->day :|
if (Game1.timeOfDay < GetSunriseTime())
{
Game1.currentLocation.checkForMusic(Game1.currentGameTime);
Game1.currentLocation.switchOutNightTiles();
isNightOut = true;
}
if (Game1.timeOfDay >= GetSunriseTime() && isNightOut)
{
SwitchOutDayTiles(Game1.currentLocation);
technically it checks and manage if sunrise would happen after the current time and sets it to night tiles. but thing seems to be hardcoded somehow. And DNT uses Harmony to handle some things
I am just ranting. you may ignore me
I will upload my fixes. at least the fish are fixed and it doesn't crash at 6AM anymore
hey, friends. i don't see anything suitable in Fashion Sense's API (https://github.com/Floogen/FashionSense/blob/development/FashionSense/Framework/Interfaces/API/Api.cs), but does anyone know a way to get a list of all available items of a certain category (in my case, hats)?
i'm sure it's possible to do something like this with ill-advised dredging in the mods folder, but as you might expect i would rather not
would the foreachitem in utilities be able to do something?
context: it would be nice to show fashion sense hats in Lacey's hat registry menu, but the only hat i can get data for is the one the farmer is currently wearing (unless i simply did not see it)
oh, saved outfits, too, but that's not suitable here either
some reflection might also work, but i don't want an assembly reference and i don't think i can reflect into it without one
You can always reflect into the graph without needing an assembly reference via the API itself. (Just read the private target field)
hmm, i will investigate this. thanks!
It might be incredibly inconvenient, mind you, if you have to traverse a ton of internal types, or worse, collections of internal types. Harmony Traverse is a lot better than SMAPI's reflection helper for that if you already have a Harmony dependency.
i absolutely have a harmony dependency already 
hi! I'm trying to use Stardew planner to plan out the new SVE frontier farm and the expansion but I can't find a high enough resolution image to upload, would anyone here know how to get a png or jpeg file out of a TMX file?
Tiled has a thing for exporting map as image
You should make copy of frontier farm, then unpack game to get all the tilesheets
tiled okay, I'll take a look at that
@weak oyster can we use monogame shaders?
I assume if anyone knows its you 
.. wrong casey, Im so sorry
@next plaza
Yeah I've used them before
You just have to pass it in the Begin call (which does make things difficult if you want it sorted in the game world I guess)
An unreleased mod that was a custom farm type. Certain parts of the map could flood, so I made it where the bottom few pixels of each item placed in the flooded area were overlayed with water
In a very janky way
tidal farm 
Oh, hmm, looking into it further, there is a way to get depth sorting and multiple Begin() calls working
i thought about a map like that
but i wasnt very ambitious and was just gonna slap nofurniture on all the tidal spots
You just need to enable the depth stencil state
But that would require harmony
(Making the base game use that for its appropriate sprite batches)
And also, uh, transparent pixels would mess with things some
My map was very ambitious and had a bunch of custom mechanics in mind. 😅 Was gonna get Draylon to make the map itself if I remember correctly
sounds awesome tbh 😄
the map I mean
Ive 0 idea of shaders so I thought maybe I could play around with them in SDV 
thanks!
but this farm map isnt skyfarm right
just wanted to update and thank you! it took a little figuring out since it couldn't find all tilemaps but I got it to work!
screenshot with 100% resolution doesnt work?
@brittle ledge: add token explanation to the i18n modding wiki page (8h ago)
someone has an easy access to the emotes list to use in Game1.player.doEmote(int)?
Hello! Basically, I'm trying to find a way to put a temporary building where the traveling cart is. Not that I want to replace the cart, just to put my building there on days the cart is not there. ( I literally just want my building there on Mondays) I can't find a guide that talks specifically about how the traveling cart works. Is this something too difficult or am I not finding the right guides, thank you!
You just need to do a conditional map edit
The game probably uses C# to patch that area on cart days, but afaik this shouldn’t affect non-cart days at all
nope, just the asset image
Ok, you’ll need to make a tmx. Buildings are just bits of a map that look like a building
Unless they’re the kind you build on the farm
!mapmaking
If you want to make mods that add or edit maps:
-
Use Tiled to edit .tmx or .tbin files.
-
Refer to the Maps wiki page for details on how maps work in Stardew Valley.
-
Content Patcher allows you to create custom locations through editing Data/Locations
-
Vanilla Maps can be edited via Content Patcher as well: EditMap
thank you guys!
if you want the exact behaviour for the cart, the game code simply places the cart at 23, 10 in the Forest every Sunday:
/// <summary>Get whether the traveling cart should visit the forest today.</summary>
public bool ShouldTravelingMerchantVisitToday()
{
return Game1.dayOfMonth % 7 % 5 == 0;
}
/// <summary>Get the tile coordinates for the top-left corner of the traveling cart's bounding area.</summary>
public Point GetTravelingMerchantCartTile()
{
if (!TryGetMapPropertyAs("TravelingCartPosition", out Point tile, required: false))
{
return new Point(23, 10);
}
return tile;
}
(or at wherever a map mod may place it using the TravelingCartPosition map property)
cant believe this isnt hardcoded
it was until 1.6, you're still hardcoded to every sunday though lol
but at least its ez to change? maybe
late on posting this but YACS actually has multiple, a brown pot looking then, a chef hat, or a knife and fork crossed.
you can choose in the config menu which one you want xD
sure, just harmony patch the method, but it'd break any mods that naively & foolishly assume that the traveling merchant will only appear on a sunday 
(and friday)
and what
how did you even find that message hahah
oh no i was thinking u put it in ur custom location class
yes, she appears on fridays as well
I'm sorry if this is how you found out
Sunday and Friday
i don't think very many people are going to be subclassing Forest.cs lol
yea i thought it's like
I ctrl+F yacs to see if there are any issues or bugs like once a week xD
on GameLocations
cant you just manually open up her shop menu anyway if you want
Like maybe a bit of dialogue or something but I’m having trouble imagining
East Scarp Jacob visits the cart every Friday and Sunday., though technical-wise It's only for flavor/lore
Yeah, it would be slightly awkward but maybe he likes forest visits
He could be going for a walk near Marnie’s
travelling merchant on friday.... what's the world coming to
Blueb… do you suffer from the modders curse
it'd be weird if he says he's delivering letters through the cart while standing in front of a lotta nothing
No playing the game, only modding?
do i look like i play the game to u
You can tell I did not manage to notice this 😆
You could!!!
It could happen!!
i could. but i don't 😌
dr witchmathperson what are some good functions for point clouds
Like Python libraries or?
no just math
Or like algorithms to process them?
You are picturing 100% correct
public Cloud(Vector2 position) works but you'd need to call point.ToVector2()
That meme lives rent free in my head
Do you want them to move in circles or do you want like a random distribution?
they should move like brownian motion i think
that reminds me I should work on that water sifter Automate integration
though circle should look fine too
There’s methods to prune or otherwise make a random-ish distribution without overlap
I don’t remember the math of them offhand
But I can picture the website explaining the corresponding Python library perfectly lol
ill take names that i can google 
Random motion isn’t too hard
I was going to say that I implemented that for the dragon pearl lure and then I remembered I did something way weirder
Because dragons are bats
And the game’s bat movement code makes no goddamn sense
I set the bat “target” to a randomly moving location
Anyways, for butterflies
I’m not sure you need something more than a random x, y movement?
You could look at what the butterflies do in game
Or the fireflies
they gotta stay in a set bound ig 
it should anchor to the player
but u know i can just add to player position so not big deal
If you know the bounds, then sampling over that space and making them move towards the new point?
Like if you can have +/- 5 in both x and y (from farmer), then pick a new x, y and set a step distance per timestep to move from current to target?
So that you don’t have worlds fastest butterfly
then i can just make them go random radial direction
Ooh yeah they could vanish if they go too far

yea hm
if it helps at all, the game has a builtin method Utility.getVelocityTowardPoint to get a motion vector from a to b
I just think the game has sort of pretty movement
i need to think about how to organize this
yea i use this for me bullets
ty it was helpful 
I suspect the decompile is what makes most of the movement code nearly incomprehensible to me
But I also suspect the original code is no picnic and that there was a lot of trial and error along the way

i looked at fairy trinket motion code
and immediately threw everything labeled velocity/acceleration out
Like I literally could not figure out whether I was diverting the serpents from the player or not for a long time
nobody can get motion right on the first try, there's always going to be trial and error
Because the serpents move so randomly even when locked onto the player
I resorted to making a new Farmer and making the serpents chase this secret invisible body double
i think i just have to like
the solution to this is to never decide your "first try" is over and you're now on the second try until you get it working 
have a queue of positions + rotation and pass them on maybe
ship of theseus but with motion code
my first try runs from when i start to when i give up. i'll book in my second try sometime next year
you get it
what happened to do or do not there is no try
i'm trying to do 
Idk that yoda guy seems suspicious
omg DialogueLine has a field Action SideEffects. this changes everything
I’m not sure he’s ever even opened a tmx file
oh nvm sideeffects are only invoked if there's no text in the dialogue. man
the evil masterplan foiled before it could even start
Hello! I joined this server in hopes that someone could help teach me how to mod a few simple things?(Like a button/key that lets you see the avalible community board quests and such)
(Tbh I think this is true.)
do you know programming
I looked at the game's parabolic motion, went wtf, and rederived kinematics instead
Hi Pathos!
You can do <side effect>#$b#<side effect>#$b#dialogue text. The game will apply each side effect as it goes until it finds text to display.
No not yet but im willing to put in effort to learn
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually it’s easier to start with making content packs, since you don't need to learn programming.
Hi! Can you report that in the bug report forums? Even better if you can add info like screenshots; the less investigation needed, the more likely that it can still be changed this close to the Stardew Valley 1.6.9 release.
Most coding ive ever done is scratch 😭
so the mod you described (button to check help wanted board) is something you need C# for, but not that involved
oh, interesting - i've got a (almost perfectly) working implementation of effects on text in dialogue like so:
"i18n.test": "First line#$b#(shake 2)Second line#$e#(wave 3.5 1)Reset dialogue#$b#Next one",
need to find the right menu to call ofc
Okay!
!decompile
If you want to make SMAPI mods with C#, one important resource is decompiling the game to read the game code. Here's how to do it: https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#How_do_I_decompile_the_game_code.3F
(also just an FYI UI Info Suite 2 has that feature. Don't let it stop you though)
How did you guys learn? Did anyone deconstruct the code and game itself?
where (shake) and (wave) set some per-screen flags for a transpiler on SpriteText.drawString() to edit the draw position, then trim out the (word) from the dialogue text
yes, see the link from Governor above
game not encrypted/obsfucated so the decompile has all the real names 
setting the flags from SideEffects could be perfect though like that, just need to find just how they work hahah
Ah got it! Would it effect the game itself when decompiled? Should I not open it when im making the code?
$action
So you would need to make trigger actions for that
decompiling provides the source code so you can look at how the game works. it shouldn't affect the game in any way
(well, you COULD look at the dialogue line itself if you really wanted)
no effect on game, unless you try to compile it again over the Stardew Valley.dll
i saved whole thing to separate folder
you can have ilspy open with the dll open while the game is running too and thats also no issue
i've heard of triggeractions before but there sure is a lot more to them than i thought lol
making a custom trigger action is ezpz and could easily be used to set some flags though you'd need a way to unset them after
which, could just be another action after the dialogue
Is there still a page on the wiki for people who do asset commissions?
!commissions
If you're looking for people who do mod commissions (either art or code), here's a wiki page with a non-comprehensive list of people who do them: https://stardewmodding.wiki.gg/wiki/Stardew_Mod_Commissions
no
Which one is it?
get the x86 x64 one
Okay!
(correction, x64)
Thank you!
unless there is an off chance you are doing your modding work on an arm64 laptop i suppose
No Windows
Does stardew run on windows arm64
¯_(ツ)_/¯
doesnt it struggle with mac already
one could theoretically game on one computer but mod on a laptop
for mystery rosetta reasons
it's definitely confusing that no entries in data/triggeractions seem to be referenced by id anywhere in the unpacked game lol
most likely not, but there's probably a arm to x64 translator
That's because they run automatically for vanilla use cases
Some of the uses like side effects in dialogue were added for modding
so there's trigger actions, and trigger actions. the former is commands like AddItem, RemoveItem or MarkEventSeen. The latter is in Data/TriggerActions, and defines a list of the command trigger actions to fire depending on game conditions
so i'd use something similar to
"i18n.test": "First line is normal#$b#$action Custom_MyMod_TextEffects wave 3.5 1#$b#Second line is wavy"
errr can these take params
I like to call the former trigger action actions (not confusing at all I swear)
do you want examples of custom trigger actions being added
yes
i called it trigger handlers
(i also do this bc i saw you do it in the spacecore docs)
(ignore me using ArgUtilityExtensions and TryGetTokenizable, you'd use just ArgUtility and TryGetWhatever is in the vanilla code)
(totally not an excuse to shill the shiny new wiki page)
(also you dont need to use the reflection stuff i did to register all my actions automatically obviously lmao you can just pass in a delegate to the RegisterAction function)
hmm chu I think the wiki example for trigger action is missing the actual trigger function itself
your delegates need the same signature though with the string[] args and context and out error
isnt that the trigger
do you mean the part under Adding a Trigger on the page you just linked
that part is the thing u r Raise
bc that all there is
not the handler/action
a Trigger itself does not have a function
its simply you saying "This thing happened"
Done!
dang this is confusing lmao
tbf its an easily confusable set of things
words stops having meaning when u look at them too long
The code looks interesting! I cant belive he did all this alone!
there's a bunch of ppl who work on sdv now 
though idk who implemented trigger initially
Probably Pathos
I believe so
if you ask me in my totally unbiased opinion i think theyre the most importantest and bestest 1.6 feature

Eh, I would argue string item IDs is more significant
even if i do wish there were a few more vanilla actions included
i think event system for content is pretty important
Even if it killed JA
oh, just mod them in. rake in the dp
theres like almost infinite numbers, how badly did we need string ids anyway
Well, uh, there is limited spritesheet room since they use to have to all go in the original spritesheet
JA had a hack to extend the tilesheets past the vertical limit
(Since I think the limit was 4096 pixels)
sounds like it was all figured out then! nothing to worry about /j
otherwise I'd have made my item IDs TREE(3) + 1
Well, technically it was SpaceCore
guaranteed no collision
thats the goal but even if i do get a couple bucks from it i have to dream about what coulda been if there were actions like SetHealth or Warp available without a dependency 
for someone whose mods are like. all things that are meant for people to use as dependencies. i very much would rather never need a dependency myself if i can help it
errr so do i need to edit Data/TriggerActions and TriggerActionManager.RegisterTrigger for a custom trigger action
what did you want to do again
not RegisterTrigger
a side effect in dialog?
i want to do that
blueberry wants to have actions in dialogue set flags to control transpilers
No, raccoons best feature
So cute
oh yea no need to raise cus u can just call the action
they are very cute
thats the Adding an Action heading on the wiki page
i was asking about Register not Raise haha
chu said that bc you asked about RegisterTrigger
which is not needed if you dont plan on raising
theres RegisterTrigger and theres RegisterAction
err i see
you want the second one
maybe the wiki needs a little more info lol
yea hm
work in progress 🌈
maybe i do need to include the CP side?
i think the problem is less with the wiki and more so just. the confusing names that have been given to these features
i.e. the fact that theyre called Trigger Actions or Trigger Action Actions
but you dont need triggers involved at all
in C# terms
but calling them just Actions is. vague
the more words i read the less i understand
RegisterTrigger is event MyEvent<EventArgs>
and RegisterAction is defining a delegate
+= is editing Data/TriggerActions
but there is special way to just call the delegate
so i want.. registeraction
and also edit data/triggeractions for the id called in dialogue which calls that action
for dialog
if you look up an action in the decompile like AddMail you can make a function with the same signature and do whatever you want in it and check for parameters the same way the vanilla ones do
then using AddMail as an example still you'd do TriggerActionManager.RegisterAction("NameOfYTourAction", AddMail)
with the 'AddMail' in the parameters being the function itself to pass it in as a delegate or w/e its called
using my repo i linked as an example for maybe more clarity if i wasnt doing reflection stuff id do RegisterAction("ChangeMusicTrack", Actions.ChangeMusicTrack.Action)
(the function does not need to be named Action)
so how do i then pass the args from the $action in diaogue to the Action field of the entry in triggeractions
oh no u are use special way to just call the delegate
if your custom action takes one argument for example like an int
so u dont need to edit Data/TriggerActions
then in the dialogue string you'd write $action CustomAction 4
and it'd be given to your action handler function in the string[] args
this stuff is prob worth adding to wiki ill edit it
with the 4 being at index 1
since index 0 is the name of the action itself i.e. CustomAction
ArgUtility has built in functions to try and grab values from indices in the args list and optionally can verify that they are parseable as ints or floats or what have you
if you've added a custom CP token before its kinda like doing that
(it annoys me unreasonably much when args[0] is the name of the action/command/whatever, the amount of times i've messed stuff up because i assumed that it would actually be one of the args
)
you can take this up with the whole programming world
i like to think of it as the same reason ldarg.0 is this
i get confused in the other cases where they did split off args from command
I prefer cmd name to be separate from args
historically this is so you can have stupid shit like reboot and shutdown point to the same binary but do different things
(also blueberry it probably goes without saying but you Should include your UniqueID in the string name you give and not just CustomAction lol)
Yeah, I figured but.... still hate it 😛
you have no idea how many years of messages i have asking people to prefix their names in this chat 
just makin sure bc i realized i mentioned it being similar to a CP token which auto prefixes for you. triggeractionmanager will Not
(it will also tell you if you try to register an action that already exists in the dictionary that you will be overwriting the first one!! and then just doesnt overwrite it actually)
The fact that it differs between smapi console commands and everything else
(is that even worth reporting)
(oh gods latest 1.6.9 beta converted a line of code into a predicate run time class)
(this is a stealth call for help on what's the best way to approach patching this. just replace with my own class?)
What's a span /s
Okay, something I'm unclear about as I read documentation- do I still need Json Assets to create custom items, or can CP do that directly now?
what r u patching ser selph
CP can do it now
(i dont evne know what predicate run time class means so all i can say is good luck)
cp can do it directly
It's the thing I was arguing with at work today. It's the width of the filter used to produce
... I am being told things
(I'm kidding. Btw.)
https://github.com/atravita-mods/StardewMods/blob/627bf287174af0eb47a976f37d769355ed127d7b/SinZsEventTester/ModEntry.cs#L331 this glue code annoys me though
Atra: like this?
so this is the old chunk of code:
for (int i = 0; i < list.Count; i++)
{
if (list[i].MinimumFriendship > 0 && this.friendshipTowardFarmer.Value < list[i].MinimumFriendship)
{
list.RemoveAt(i);
i--;
}
else if (list[i].Condition != null && !GameStateQuery.CheckConditions(list[i].Condition, base.currentLocation, null, null, null, r))
{
list.RemoveAt(i);
i--;
}
}
not the prettiest, but easy to commit Harmony crimes on. this is the new one:
list.RemoveAll((FarmAnimalProduce produce) => (produce.MinimumFriendship > 0 && this.friendshipTowardFarmer.Value < produce.MinimumFriendship) || (produce.Condition != null && !GameStateQuery.CheckConditions(produce.Condition, base.currentLocation, null, null, null, r)));
cleaner, prettier, better, more Functional™? yes. but so much worse for criminal purposes
But I have a username!
like
actually bc ig i cant know what the intended behaviour is supposed to be i suppose its worth at least askin about, @ivory plume is TriggerActionManager.RegisterAction() actually supposed to overwrite previously defined actions? It will log a warning saying it will overwrite the action, but it returns immediately after that so it doesnt actually do it. RegisterTrigger() will simply always try adding a trigger and not bother checking if it already exists (makes sense, its just a hashset of strings), and TokenParser.RegisterParser() though will throw an exception if you try to register an already existing token parser. so iunno which one RegisterAction is supposed to but it currently does not do what it says it will do, tho i assume itd be a simple fix either way
ooh new mod jam thingy
What are you going to make?
well sorry custom museum framework looks like you're shit out of luck for the next 2 weeks
was there another place u can use trigger actions that i forgor
20ft skeleton has already been done. but what about 40ft skeleton
Maybe I can force goose murder into the spooky theme somehow, but that means 1. Re-breaking my transpilers for 1.6.8, and 2. Kinda cheating since I worked on it before the event started
wait nooo why did they do contest now
i dont wanna release a mod ill have to fix 4 days later
I'll correct the message in the next 1.6.9 patch. Thanks for reporting it!
i was thinking the same actually i thought for sure it'd be after 1.6.9
but halloween waits for no one
shops ActionOnPurchase, Museum rewards i believe also have actions when you meet their requirements
letters can use actions
slightly different syntax since it uses %
i've been noticing in the past few days that a 1.6.9 fam with building interiors gets warnings in the console about overriding existing lights by id on time changes after StartingToGetDarkTime, likely from window lights. not sure if it's the old saves i'm playing on or if something broke in a recent nightly build
I mean we can make CP mods but that means artistique skills are needed
i already need some artistic skill for the mod idea i have for it. rip
also chu Buffs also can use actions
maybe i just slacc and resume original plan of finishing them trinkets b4 1.6.9 
wow they r everywhere
this is why theyre so fun and useful
i guess i should just split this heading up
and why its a shame theres only 3 vanilla triggers
hrm
i guess i should just change the ability i have which raises a trigger to calling action directly
given all this precedence
Why isn't there a witch role for event, what a travesty
actions are also used in events ofc
What are you going to make, casey?
I dunno
a 1.6.9 nightly build is quite scary
Yeah, Pathos is good at making those scary
I'm gonna have tons of netfield fixes to do next time I need to compile
(BEcause copy pasted code for harmony patches)
are mods made for the contest playtested for the judging? id assume so but does that mean i should be making it on 1.6.8 only instead of the beta 
are dialogue codes case-sensitive btw? it's irritating that i have to hold shift for all of #$b# except the important bit
That's... a good question
yea uh, can i just release a mod and slap a big ol "FOR 1.6.9" on it
i'm pretty sure mods aren't playtested given love of cooking won summer one year
Heyyyyy blueb
No
Love of cooking has many die hard fans
I won with Surfing Festival one year for summer
I know this because it was definitely one of the post 1.6 FAQs 😛
If only I hadn't gone on hiatus, I'd still have my contest winner role
i bet they're dead waiting for a 1.6 update
assuming parseDialogueString is the main place things like that are checked it doesnt seem to ignore case i think? i might be missing it tho
oh nevermind atra knows more than me
Maybe we can ask DH or someone moldy about the 1.6.9 thing
you already have the contest winner colour hahah. the winner role doesn't even show up in my profile so not so valuable
i nominate atra to ask
hm is the mail way of trigger different than dialog
i dont see any extra info about it on mail data page
Hi loves! I am trying to write a transpiler. (Cause I don't want to prefix). Here is the inline.
IL_01d1: ldloc.3
IL_01d2: ldloc.s 6
IL_01d4: or
IL_01d5: brfalse IL_039e
I want to add a not ldloc.4 in there.
In c#, it's
if (datable || housemate)
I want to add the fourth variable (which in the code is this case is isDating. Except I want to add !isDating.
How does one go about this
It's about the prestige 😔
im pretty sure mail stuff is still on the migrate page lol
I can go ask in #1292670497665974272
Toooo fast 
crimes approved 
crimes approved but
now im worried like
what if i submit my mod
and the contest ends
and a beta patch breaks it
well.
We cross our fingers
it'd be novel for a mod to be like version 1.1.1 by the time it's judged
maybe someone else can submit an unofficial update as a contest entry 😌
then again its also possible that if i make it on 1.6.8 then if the judging takes a few days 1.6.9 might just release and break it that way too
dang it why is tile stuff also named actions
yea dooemd
Those are tile actions 😄
ackshually those are TileData Actions
not to be confused with TouchActions
cant believe events already have doAction
im just gonna make my contest mod for 1.6.8 and then update to 1.6.9 like a day or two before and rapidly fix it if it breaks
it'll be fine trust
surely there are other names for this 
Me too... if I make a contest mod
ask pathos to rename every instance of Trigger Action everywhere with Trigger Effect
i think it ought to be named handlers
though that wouldnt solve the problem anyway
i think they should be named Wubblers
bc then you'd have Triggers and Trigger Effects and Trigger Effects Effects
then we'd have no confusion

eye corer 
whatever it is, make sure you wait until five days before release. that's the best time to ask for changes (determined empirically)
Triggers, Data/TriggerWubblers, and Trigger Wubbler Wubblers. does have a nice ring to it
trigger wubbler wubbles are Mubblers
Uh wut
to distinguish them
no longer gonna enter the contest, now im gonna work on a mod to transpile every instance of trigger actions into trigger wubblers
sorry, it's for backwards compatibility
That's require ceciling if you want to do method names too
:cecil:
i was thinking of just finding everywhere that a method is called and redirecting it to a method in my assembly instead that does the same thing
the originals get to live. barely.
Do you plan on patching every loaded mod too
its a token
(Fwiw I think you do great work!)
i mean. i could. wouldnt be too difficult to scan every type in every assembly and dynamically construct harmony transpilers with codematchers function that can replace every instance of one method call with a call to another method
do you plan on replacing instances in dialogue strings to use the new $wubbler format?
or was it mubbler
it was mubbler
i think we need another new standard, this one's still too confusing
dw ive already thrown out the old terms from my brain and replaced with the new i got this
blocked. blocked. you're all blocked. none of you is free of sin
Triggers, TriggerWouldYouKindlys, Trigger WouldYouKindly WouldYouKindlys
I think the play would be Trigger Action -> Triggers and Effects
Not keeping the redundancy
One last question and then I think I'm finally good with the 1.6 stuff- does SpaceCore (or any other mod) allow for crafting recipes for weapons, now? I remember having to have someone hack together something in Harmony for me before to do that, and I doubt that specific mod will work anymore
tbh the main problem really is just the fact that Data/TriggerActions is called what it is and uses b oth terms in one
SpaceCore does allow that (or it should?)
Using the crafting recipe overrides
(and in 1.6.9 the vanilla game should too.)
Oh, nice
you can put any qid into the recipe output slot
this is huge for my mod, ty!!
SpaceCore supporting it is more a side effect of the recipe overrides system
The primary purpose of that is context tag recipes
For once I actually have an idea for a mod/game jam
How bizarre
it better not be mine 
Only problem is it kinda overlaps/overshadows some S&S stuff 
(I await a picross, junimos.)
this mod jam is a good opportunity for me to use my updated dotnet template
finally using conditional logging based on building in debug, are you proud of me atra
very
animated wobbly things 🥖
I'm always proud of you
i also only just noticed that modders have a different set of concepts we can choose to incorporatye for our entry than the artists, i wonder why 
can you please make the baguette wobbly next
Darkness is allowed in art but not mods. there goes my spooky mod idea of just making the entire screen black
alight
wubbled
no darkness ebony whats her face for moddders eh.
omg if i set the rotation to 0 i can just have a weathervane that animates in the wind
raven dementis way or smth
raven mcnight
Shadow the Edgehog
i dont see why not
how cursed
Would you prohibit Pathos from making a CP pack for the competition? 😛
(Or me and my beloved content engine)
(Ebony Dark'ness Dementia Ravenway
)
making a BETAS mod that just adds trick or treat dialogue to all the kids when you knock on their door
whyd i say all the kids as if theres more than 2
i was thinking of the reverse situation
Leo!
have you considered playing the game sometime
that sounds heretical atra
I did a vanilla perfection playthrough with friends earlier this year
you're not even orange!
why do you think i play the game so much?
what does ur multiplayer partner do when u r modding all day
Dumb question. Zero schedules are a vanilla feature right?
yes
believe it or not my multiplayer partner has a life of her own /lh
Yes, but semi-broken
(also i mostly mod all night anyway)
I have an experimental fix in SpaceCore for when 1.6.9 comes out, but it needs some work
Mainly it breaks marriage schedules right now
Oh, I shouldn’t need to worry about marriage schedules
(IT's in spacecore and not base game because Pathos says its too risky this close to release)
Well, the thing is
It's an all or nothing fix
This is a conditional zero schedule that’s only active for like the first day you meet an NPC
wait does reusing vanilla sprites for something new count as plagiarism/stolen content for the contest—
It fixes all zero schedules, but breaks all marriage schedules
Hence why I need to fix it in the next few weeks
Is there a reason why mine would be broken if the player isn’t married?
Nah, this is specific to something if you have an upcoming version of SpaceCore installed
0 schedules are just kinda not working properly in general at the moment (with or without spacecore)
there is anything against using the local ModData model vars to store data we are using before saving them? except not sounding a good practice of course
Oh dear.
I have an NPC that I have to have at a static location if the player hasn’t seen a certain event, but this location is quite far away from the home location
I wonder if I could add a conditional NPC warp that’s active only when the player hasn’t seen the event - it’s to a custom location so it wouldn’t interfere with vanilla
That could work, it would be the dirty fix but it could work
Just use the NPC's home field
additional crime permissions granted #1292670497665974272 message
Is anyone teaming up for the modding contest
I'm teaming up with me, myself, and I
The three of us might manage to gather a braincell long enough to get a quarter-baked mod done
i dont think im useful to other people 
If I end up participating I'm teaming up with me, Toil and Trouble
Free game for the first person who grabs it:
- Midnight Fight Express on GOG (redeem code)
pathos did u mean to post here
Huh, when I saw Pathos typing, I was not expecting that
Yep.
hmm can I cheat by submitting a mod I'm about 25% done before the event started
is.. is this a nightly build
(I'm collecting game codes to donate to the event prize list, and that one expires in a few days.)
the rare pathos free game code, seen only once before by myself... i don't need the game tho have fun whoever got it
I'm currently working on a farm map maybe I could do a small Halloween farm
technically only the art contest stipulates the entry must be fresh but that also might just be an oversight
Like, the point I am at is
int index = codes.FindIndex((CodeInstruction c) => c.operand != null && c.opcode == OpCodes.Ldloc_S && c.operand is 6);
if (index > -1)
{
codes.Add(new CodeInstruction(OpCodes.Ldloc_S, 4));
}
How do I make it Not that? Like, how do I add a not that here?
I don't play nice with others and am not going to produce a mod anyways
this is the point where understanding il really helps. you don't negate it.
I am nice
you could easily make a mod for knitting costumes though
I am trying to make a if !isDating.
(you also probably want to replace codes.Add(new()) with codes.Insert(i, new()) )
let me show you
Thanks! That is in addition, or change what I have?
I have an idea. Werewolf
what's your idea. werewolf
oh, weirdly enough, I try to go for an example and linqpad optimizes the hell otu of it
making it entirely not comprehendable

just asked, I can. maybe I can finish that murderous farm animals idea in time
(it's not that creative, just makes them home in on you and deal damage on contact, but maybe that's spooky enough for Halloween)
anyways, what you want is
ldloc.3
ldloc.s 6
or
brfalse IL_039e
ldloc.s 4
brtrue IL_039e
(mr Linqpad entirely removed ONE OF MY LOCALS ENTIRELY
Sorry for the late response but doesn’t changing an NPC’s disposition mid save usually yield dastardly results
Thanks! Also, I hope you can get your local back! 🙂
Don't alter it, home is already an array, it'll use the first matching home entry
i thought more than one home entry worked strangely/sorta buggy
Hm, haven't personally heard anything about that but if it's just 2 homes where 1 permanently turns off after an event I don't see how it could go awry
yeah, endertedi is right here
it's funky when you expect to go back and forth, it fires a day early
but a Leo situation is...likely fine
the only downside is that you do not get teletransportation
hi boo-berry
wouldn't it still go a day early even if it never goes back after then?
I've never seen a boo-berry before
ok i've got the best goddamn mod idea and nobody is going to take it from me. i'm bringing this one to the grave

oh so it's a graveyard mod
it'll be the death of me 
Wonders if blueberry is gonna scoop my idea like Gourmet Overhaul vs Love of Cooking
a rematch
i'll see you in court
you don't have to worry about me, my brain is full of
- Trying to understand fourier transforms
- Trying to understand set theory
- Ignoring teh existance of 1.6.9
even with infinite possibilities I'm also worried that somehow I've chosen the same idea as either of you two
you owe me damages for emotional pain caused by spacecore bug reports on love of cooking
on the other hand, I suspect most of you would find fourier transforms scary
The npc would've already started the day by the time the condition turns false/true (depending on which order you put them in) from watching an event so it shouldn't matter
cool, Button
surprisingly we covered fourier transforms well enough in uni so they're friendly
can you help me pick the right window for this spectrum analyzer
And you owe me for stealing my market share
absolutely not. I said I liked it but I like seeing other people figure out the right way to use it more
Fourier transforms don't sound too scary. Fiveier transforms on the other hand...
what goes around comes around. now there's 3 competing cooking skills 
we have a doctor math person in here for that stuff
I would rather help someone bring their idea to life but I suppose I can compete against others
oh, mazes!

....let's do a flood fill algo
(in other words, atra tried a maze for 30 s and gave up)
Ughhh I’m so tempted to make a quick contest mod but I’d need a +1 💀
hey, would anyone be willing to help a non modder make a modification to an existing mod for personal use(would post but first id like to see if I could do it before asking the author to upload it)
its just removing some lines of dialouge
if I am saying something I cannot do I apolgize I am not familier with nexus policy
If you wanted to publish it anywhere, you’d need to ask the author’s permission. But if you just use it yourself it doesn’t need to be uploaded to Nexus
you can just download the zip
ik that, kust wanted to make sure modifying at all was ok first
then id ask ofc
People modify mods for personal use all the time, it’s all good as long as you don’t upload
looks at my unreleased 1.6 port of the lance coming earlier mod
whats the mod in question?
What's the idea?
i ask cus i want to know the permissions
canon friendly dia expansion
mainly just gotta remove 2 things that contradict SVE
Vampire npc (non romanceable because I’m not doing all of that for a contest) that once you get infected by them gives you a combat buff
u can just find the dialog and comment it out in your local copy
it only gets more involved if you want to actually make it a mod
Ok how can I be of help? @dim yew
Are you interested? 😸
what I have to remove "*SVE redesigns the Spirit's Eve festival maze from year to year, while my mod includes additional dialogue sets with only the original two mazes in mind.
*My mod includes a brief explanation for what happened to Sebastian's biological father, which is included in the screenshots on this mod page. SVE has a contradicting explanation. Apparently, there is no contradiction if you toggle the "mature events" to off.", is this as simple as text file edits, I assume id have to remove some scripts to tho right?
Ok squido
sorry for the @ forgot to turn it off
I see all the spirit's eve stuff is referenced here, would removing the block work to get rid of the new dialouge
im scared to break it XD
if u did break it just install mod again 
but yes removing that block should do what you want
you could also stick a hasmod there
you want it to be "HasMod |contains=svemodid": false to turn this block off when you have SVE
I want to break it
ok so same would apply by removing the referanced dialouge "summer_Sat10": "{{i18n: CFE_Robin_repeated_1}}",
is it?
Something like this?
"LogName": <LogName>
"Action": "EditData"
"Target": "Data/Festivals(...)"
"When": "HasMod: contains=svemodid : false"
"Entries":
{
\\Bunch of entries
}
You look half way between villager and cowpoke
a villpoke...
Evillpoke?
we'll keep it for a while but I'm going purple next
https://smapi.io/json/content-patcher/7d6dedb58c20471e99d15c8bd37d6a68 could anyone perhaps diagnose what exactly im doing wrong here
you have 3 opened { but closes 2 before closing []
trying to put it simple
don't worry. Coding blind sight is a real impairment
also Notepad++ helps a lot to see these things. I just had to copy-paste it there
Can't recommend enough
it's appreciated!! of course now my weapon isn't loading so i get to figure that out instead, but
thank you for the help
what do you mean? I am too green on this
I just wanted to know if I had understood it correctly
CP edit is kinda sorcery to me yet
I don't know how can I explain that more clearly
The Logname for the include is just for the include. It doesn't apply to any code blocks inside the included file.
Aw ok
Doesn't it do somthing like Include Name > Patch Name in the patch summary?
That's not really a bad thing, since CP never applies includes so if the logname was for the code inside the file as well you'd never get to see whether it applied.
I didn't think so but maybe I'm wrong. I will go check.
https://smapi.io/json/content-patcher/46429ce35a1041798cd0676782dda262 Okay, this isn't throwing any errors, but the item just... doesn't appear in the game? If someone more familiar with CP could point out what I'm doing wrong, I'm still trying to get accustomed to adding custom items with it
it doesn't show up in CJB Item Spawner?
nope
Is your weapons.png in the same folder as your content.json and not inside an assets folder?
This is showing the logname for my festival file "Include Festival Participation" and then because I don't have a logname for the code block inside it it's just showing what asset the code block is editing.
it should throw an error if the texture isn't valid right
wait, hold on. i'm a moron. i still had it requring json assets in the manifest
actually why are you loading your weapons.png into a target and then using internalassetkey
This one shows the logname for the festival file and then my logname for the actual code block inside the festival file. (And which asset it's editing.)
bc i was cribbing off another mod i have without really knowing what i'm doing and it did that
only thing i could think of at first ¯_(ツ)_/¯
Loading a .png into a target like that is basically creating your own asset name, just like Data/weapons is an asset name
so you probably wouldnt wanna name it Mods/[CP] Anna's ... like that but rather just name it like, {{ModId}}/Weapons
and then in your Texture field for the weapon patch, you'd write "{{ModId}}/Weapons" instead of internalassetkey
your FromFile for your Load action also i assume actually needs to be assets/weapons.png which it looks like you may have thought your target was the asset path in your folder
That's how you'd do it yeah! i dont actually remember if capitalization matters for custom assets or not tho. but yeah that FromFile does assume your weapons.png is in the same folder as your content.json
is there debug command for spawning a bunch of terrain feature around you
blessed be, it works!! it's using the wrong sprite but it works!! tysm
also Poppiii just to make sure, does your weapons.png have more than one weapon texture on it? or is it just the one Alondite texture?
it has many
ahh, gotcha
then the SpriteIndex being 1 is probably the reason
the top left most sprite in a .png is actually SpriteIndex 0
yeah i was about to say i think it's probably just one off
starts at 0 in the top left then goes to the right and downwards from there
row by row
probably reset terrain features?
this tool use ability is consume stam but cant water anything...
More savefile shenanigans
How can there be two elements with the same name?
And what does it do? Can you revert your enchant to a previous one? (I never made this far 😭 )
Remind me in 21 hours to begin the m o d
rofl that's what you need a reminder for? yeah ok (#6308234) (21h | <t:1729293717>)
theres no reason there cant be two elements with the same name
Hii Does anyone know what Game1.SetFreeCursorDrag() is used for?
its not like json in that they need to be unique keys
Looking forward to it 
(as for the other question im pretty sure the game tries to prevent giving you immediately previous enchantments)
hmm, I see! but I'm still a bit confused as to how to exactly parse this.
this mod contest idea is the worst ever. this is going to take absolutely forever
same way you'd parse any other xml, i suppose. what are you trying to parse it for?
i regret all
if it was a list, wouldn't it be like this:
<previousEnchantments>
<string>...</string>
<string>...</string>
</previousEnchantments>
a savefile editor, I'm using https://serde.rs/ for parsing it
or well.. to deserialize it. Another library parses it. But the way it works is, I can't really do what the savefile is doing.
I've only seen lists in this variant
Hmm, the idea to make a monster mod, after just the other day traipsing through the monster data and code... nope, I think I'll keep my sanity.
unfortunately i know not enough about xml (de)serialization to give any further guidance or answers 
Ooh, serde!
(Maybe I can think of a Scarecrow themed mod. All the others sound art-heavy.)
Yeah, Serde in the mods-general channel? What is the world coming to?
Uh, I would have to see the game implementation of xmlser for netstringlist
I finally might have a use for rust at work!
(But probably not.)
Wellll I have S&S stuff to do still so we’ll see how much progress I make
Either way, s&s or mod jam 
How do people already have the badges, anyway, did you submit a mod 5 minutes after the contest opened? I thought you didn't even make mods anymore.
No, I did the puzzle
The maze lol
Oh, I missed those.
They weren’t there at first
The mazes showed up a few hours after the initial messages
few hours... i think your sense of time may be a bit skewed there
I just saw the channel now but I guess it was banner blindness.
you havent actually missed the channel by much it was only opened 2.5 hrs ago
Yeah, that's why I wondered how people had responded so quickly (before I noticed the maze things).
Sowwy I like a puzzlr
i did the mazes and entered the bone zone
i just like free points and mazes are easy to solve. though it did distract me from starting my mod entry
Hmm, technically the art contest rules don't specify that it has to be good art. MSPaint, here I come.
I checked the message timestamps 
I guess they prefilled the channel
Before making it public
i would expect it to be standard in any huge server for the channels to be prefilled!
the bulletin board announcement is the canon timestamp
Interesting use of canon 😛
thank you
life itself is but a serialized dramedy for a higher level of existence
okay.
(I uh wasn't trying to be deep or something, just poking fun at the term 'canon' above)
anyway anyone here tried to patch a RuntimeMethodInfo? should I even be doing it?
Hello, a question: Is it possible to use item sprite larger than 16x16? For example items like bottle, jars, vegetables, etc. The size I was thinking in 32x11px, it's to make a bottle, with 16x16 I'm having a hard time giving it a good look.
you'd need anoither mod for that, Sprites in Detail i think? or Scale Up? smth like that
(but I highly recommend trying to work with what the game gives you)
iirc you have to find the runtime method it generates somehow 
I understand, well I guess I'll keep trying to give it a good look. I had thought of using some sprites that already exist in another mod, and also make my mod compatble with his, this way the vodka and rum would be made using his mod and I could take advantage of the sprites of his drinks but the modder has not responded me, so I started to make my own and in an effort to not look like I'm copying his designs, I want to do something different but I do not like the way the bottle looks.
small item sprites are a challeng efor sure! but worth it if you can make it work, larger things tend to stand out a lot
