#making-mods-general

1 messages · Page 132 of 1

lucid iron
#

Stardew Boilerplates

rancid musk
#

Maybe StardewDelegateHelper

#

Since 99% of stuff is registering delegates with things that take delegates

urban crest
#

hi everyone

#

can anyone help me?

#

I'd like to make a conversion of the farmer body types for fashion sense

#

but I have no idea how

#

I've read on reddit that there's some type of automation process to convert something to FS, but I haven't seen it anywhere

tender bloom
#

Not for body types

#

Farmer body is sort of cursed

urban crest
#

huh
can you explain it more?

indigo yoke
#

see, I am the opposite. I would actually like all of those to be in one file due to it basically being a general requirement for a lot of mods.
Custom NPC Fixes and Custom NPC Exclusions feel like functions that should be included in the API.

But I am also the type of person who likes an extensive API with a lot of features and functions built in (Think like forge for minecraft, or the inscryption API) compared to the more bare bones API like SMAPI or Fabric.

brittle pasture
#

I think the point is that out of that list 3 is obsolete and FTM is the only one that's still relevant. if they're bundled together that means installing a huge mod to use exactly 1 feature, with the other features only being kept to not break older mods which you don't care for

uncut viper
#

(i only used those as examples bc someone else used them as examples, i would feel the same regardless of whether or not they are obsolete)

brittle pasture
#

true lol

fervent horizon
#

Just curious, would the unused portions of the framework being bundled cause more lag or is it just a preference thing

brittle pasture
#

there is definitely a balance between "this mod introduces 1 CustomFields that allows dying your dog green" and "this mod cooks dinner, prepares laundry, makes your bed, and dyes your dog green, unfortunately you only care about the green dog"

uncut viper
indigo yoke
royal stump
#

there's technically more load time, and often some extra cpu/memory use, for anything a framework does, but yeah, it's pretty trivial

#

adding a new NPC or map is much more significant than having every framework installed for no reason SDVkrobusgiggle

uncut viper
#

(and in a big enough mod list, its likely that you have one mod that will use every feature in the framework anyway)

fervent horizon
#

I would prefer content patcher to just gobble everything up

indigo yoke
fervent horizon
#

but in a nice get help from the framework people and give credit kind of way

uncut viper
#

content patcher isnt really the kind of mod to absorb other mods. it only does so bc of incidentally the vanilla game making it possible

lucid iron
#

I think it's a build tall vs build wide situation right think

indigo yoke
#

that said the guide book feature of spacecore does seem kind of out there and random compared to everything else it adds

uncut viper
#

people say content patcher eats other frameworks and things but its only bc content patcher allows you to add stuff that vanilla can work with, so its really more that vanilla changed to make those frameworks vanilla-ly possible

royal stump
#

it's ultimately a balance between user convenience, centralization, and who actually makes all of this code

uncut viper
#

"vanilla" not in the strictest sense obv when talking about mods but i didnt know how else to word it

lucid iron
#

Like imagine if custom skills was a specific framework rather than part of spacecore, the hope is that a 1 job framework can dig deeper

#

Even content patcher is a 1 job framework ultimately, it's just the most important job Dokkan

uncut viper
#

if anything i think CP's old customlocations stuff was an outlier adn should not have been counted

tiny zealot
#

centralization is a good point, too. we mentioned before the fear of casey burnout, like when the surprise update broke spacecore and casey got an avalanche of complaints over like six hours, because spacecore's net is so wide that it's critical for tons of mods

uncut viper
#

a more accurate way to describe content patcher eating things would probably be "the game now lets you use the content pipeline for this stuff"

desert pagoda
#

Does using the content pipeline make stuff easier

uncut viper
#

(this is just semantics though i just have a slight "ehhh" reaction personally whenever someone says content patcher ate things lol)

fervent horizon
#

ok, while we are on the subject of frameworks, I have finally got my mod that allows for a user to configure the skins of all of the horses that are present in a save to be different, with support for NPCMapLocataion. I would like to release it in a way that people could make their own horse textures that My Mod would add to the list of available textures, but I am not real sure how to do it best.

royal stump
#

using CP for everything makes it easier for pack makers who know how CP works, and allows some conveniences compared to unique pack formats

indigo yoke
#

Also while not dealing with it being one mod or multiple mods, they are open source (hopefully) so people can review and help improve the code. Like I've spent time submitting PRs to the skill code of spacecore. even if it was it's own mod, with how split Casey has been, I doubt it would be "better" if it was just a skill framework.

fervent horizon
#

I have read that so many times

#

I kinda get it, and kinda don't

tiny zealot
urban crest
#

guys, why are farmer bodies "cursed"? ded

uncut viper
#

basically you just wanna let people use, say, Content Patcher to Load something into an asset name you define
and then you grab that asset from the content pipeline like you wouyld a vanilla asset

#

and do what you want with it

brittle pasture
#

just an asset of string keys to data about a horse texture would be sufficient

#

said data can have 2 fields, one for the horse texture and one for the map icon texture

royal stump
uncut viper
urban crest
#

if I were to try to convert only the legs, what would that require?

tiny zealot
#

quick somebody post the pants image

fervent horizon
#

ok, I am going to dive back in and see what I can come up with

brittle pasture
#

when you see your farmer perform a walk cycle on screen, you're actually seeing a locomoting flesh homunculus whose body parts are only kept together with sheer unholy magic

fervent horizon
#

Oh, another question, can minecarts target the inside of buildings?

brittle pasture
#

said homunculus has 300 legs that fade in and out of existence with every step

urban crest
#

I have the body template for Fashion sense, but I don't know what to do with it, or how to add my own modifications or how to edit the json file

rancid temple
#

Minecarts can go anywhere you want

#

They're just a warp with a dialogue box

fervent horizon
#

I thought I was targeting a building, but it ended up creating a fresh map of the building instead

rancid temple
#

Though if you're trying to warp to an instanced interior that might be a lot harder

fervent horizon
#

Yeh, that

brittle pasture
#

are you making a minecart inside a farm building?

#

yeah what roku said

fervent horizon
#

yeah, If possible

tiny zealot
#

thinking once again about male farmer, who is 2 pixels taller in his swimsuit

uncut viper
#

instanced interiors dont really have predictable names, is the problem

fervent horizon
#

I am able to leave the building from the minecart fine

rancid temple
#

I guess you could probably add one to an existing building?

fervent horizon
#

it is the getting back to the building that is the problem

uncut viper
#

like the inside of a single coop is actually called like Coop3458_25235-364874356-2523656 or whatever

urban crest
fervent horizon
rancid temple
#

But it would only be useful for that one save

fervent horizon
#

I may just make the warp back go to in front of the door to the building

uncut viper
#

you'd need to edit the minecarts data every time a building with a minecart inside it is constructed to grab the uniqueid of that building
and even then im not actually sure if minecarts can go to those? do those count as "Locations"?

#

like theres no Coop entry in Data/Locations they just bring you to a map

fervent horizon
#

yeah, they are not in locations

royal stump
#

I think the minecart code would "get" the coop if it was set to a specific ID like that, but getting those in CP is the tricky part

rancid temple
#

I guess I'll have to revise my minecart sales pitch

royal stump
#

a token could be made to output all of them with indices, I guess

rancid temple
#

It's a shame they generate with such wild numbers, seems like a simple appended incrementing number would have been fine lol

royal stump
#

yeah, the game uses GUIDs in odd places occasionally SDVpufferdizzy

royal stump
#

...actually nevermind, I think minecarts don't check for dynamic structure locations SDVpuffersquint

fervent horizon
royal stump
#
public void MinecartWarp(MinecartDestinationData destination)
{
    GameLocation targetLocation = Game1.RequireLocation(destination.TargetLocation);
//...
public static GameLocation RequireLocation(string name, bool isStructure = false)```
brittle pasture
#

theoretically is it possible to add a C# mod that runs on day start and dynamically adds - ah nvm

uncut viper
#

i just followed that string of function calls too and i think they do find it

fervent horizon
#

ok, so definitly not something that can be done without c#

royal stump
#

it could be prefixed to flip that, but I think get loc from name cares about that in the call

uncut viper
#

at some point it calls Game1.findStructure

#

regardless of isStructure

#

and if it still doesnt return, then... it just calls the same chain of functions but with isStructure set to true lol

royal stump
#

confusing, but good to know SDVpufferdizzy

uncut viper
#

in Game1.getLocationFromNameInLocationsList

royal stump
#

ah SDVpuffersquee

if (!isStructure)
{
    return Game1.getLocationFromName(name, isStructure: true);
}```
uncut viper
#

i guess setting it to true just makes it a little faster if you know its a structure, i guess

#

even though if its set to false it just does a cache lookup anyway

royal stump
#

so yeah, if you could get the instanced location IDs into the minecart data with a custom token or something, it should let you go to/from
(still a C# requirement, I'm not sure if anyone currently makes a token like that)

uncut viper
#

id be very surprised

fervent horizon
#

but, this is an idea that has the potential to work?

uncut viper
#

anything has the potential to work with C#

#

this is on the easier side though

royal stump
#

as is, you should be able to use CP to put working minecarts in buildings, but to make the minecart network send you to buildings, a C# mod would need to add a CP token

fervent horizon
#

Yeah, I have the Minecart working inside the building to send you out

uncut viper
#

if you're going with C# though you could also just do it entirely in the C#

#

might be easier to just loop over all the buildings and make entries for each

royal stump
#

yeah, swapping out a special location ID or something might make more sense SDVpufferdizzy

#

CP has valueAt for list tokens, but I'm not sure how you'd go about formatting "add an entry for however many buildings exist"

uncut viper
#

you would need to handle invalidation and buildings being added/removed ofc, but you'd need to anyway

#

and there is that too yeah

fervent horizon
#

Thank y'all for the help and ideas, I think for now it will go on the back burner till I feel more confident in my abilities.

rancid musk
#

Yay, I have diagnostics.

teal bridge
calm nebula
gray linden
#

could anyone help me getting my custom Map.tmx file into the game?

rancid musk
#

I mean I could add something like that, though that'd get tricky as soon as you don't have an IModHelper reference if I wanted to support [IfModLoaded()] on all the things it has

tender bloom
desert pagoda
#

Does anyone have a template to design mods? not coding wise but like knowing what it is supposed to do.

tender bloom
#

It's hard to have a template when there's so many things a mod can do

#

I drew a picture of how to choose what frameworks to look at back in 1.5, but it's mostly out of date now

tiny zealot
gray linden
desert pagoda
#

My issue is that I have no idea what my mod is

ocean sailBOT
#

If you want to make mods that add or edit maps:

  1. Use Tiled to edit .tmx or .tbin files.

  2. Refer to the Maps wiki page for details on how maps work in Stardew Valley.

  3. Content Patcher allows you to create custom locations through editing Data/Locations

  4. Vanilla Maps can be edited via Content Patcher as well: EditMap

tender bloom
#

If you want help debugging, I would start by posting a log link and a parsed json link

#

!log

ocean sailBOT
#

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

Please share your SMAPI log file. To do so:

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

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

tender bloom
#

!json

ocean sailBOT
#

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

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

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

desert pagoda
#

Can someone point me torwards the list of mod concepts in github?

tiny zealot
#

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

fervent horizon
#

* `LocationName` and `LocationUniqueName` are identical except inside constructed buildings, cabins, and farmhand cellars. For example, a coop might have `LocationName` "Deluxe Coop" and `LocationUniqueName` "Coop7379e3db-1c12-4963-bb93-23a1323a25f7". The `LocationUniqueName` can be used as the target location for warp properties.

Would LocationUniqueName work for something with the minecarts?

uncut viper
#

no, because it only shows the location name of the location you are in

fervent horizon
#

ok, that makes sense

gray linden
# tender bloom !mapmaking

so to add a custom map in my mod i make a Locations.json file in my mod folder and just copy one of the locations attributes from Locations.json from the real game and just change the path for map and the name?

rancid temple
#

Nah, you can do it in your content.json unless you have a reason to put it in its own json

#

Usually the reason is for organizing a large mod

#

You also wouldn't just copy from the base game

#

You need to EditData Data/Locations

tender bloom
#

You would want to set up a normal content patcher content pack

#

And do an EditData on Data/Locations plus a Load for your tmx file (and any custom tilesheets you might have made)

#

Please note that you should make sure to Load into Maps/ so it can pull from the vanilla tilesheets, and to name your map file something somewhat unqiue to prevent name collisions

rancid temple
#

Maybe I should make a tutorial for this, it's pretty straightforward

rancid temple
#

It'll take some time, so it won't help you right now unfortunately lol

gray linden
lucid iron
#

Yep, edit Data/Locations and add new entry

gray linden
rancid temple
#

It doesn't work like that

gray linden
#

im lost

#

just gonna wait for the tutorial ig lmao 😭

#

thank you guys for trying to help but theres something ive missed and or misunderstood

ivory plume
#

(Hold on, I'll add an example to the wiki.)

desert pagoda
#

My god I have realized that my issues werent one of skill but of lack of knowing what mod I was making, turns out you cant make a mod you dont know what you are going to make

desert pagoda
# gray linden im lost

I was in your situation 3 days ago, I just downloaded a random mod and saw what they did

gray linden
desert pagoda
# gray linden man i tried doing that but i just couldnt make it work
  "Action": "Load",
  "Target": "Maps/IRSOffice",
  "FromFile": "assets/Maps/IRSOffice.tmx" 
},
{
  "Action": "EditData",
  "Target": "Data/Locations",
  "Entries": {
    "IRSOffice": { 
      "DisplayName": "IRS Office",
      "CreateOnLoad": {
        "MapPath": "Maps/IRSOffice",
        "AlwaysActive": "true"
      },
      "Music": [],
      "MusicDefault": null,
      "MusicContext": "Default",
      "MusicIgnoredInRain": true,
      "MusicIgnoredInSpring": false,
      "MusicIgnoredInSummer": false,
      "MusicIgnoredInFall": false,
      "MusicIgnoredInFallDebris": false,
      "MusicIgnoredInWinter": false,
      "MusicIsTownTheme": false,
      "CustomFields": {}
    }
  }
} ``` Something like this worked for me
gray linden
#

so just put that in the content.json file in ur mod folder?

desert pagoda
gray linden
#

no clue what that means but i have an assets folder with my tmx and pngs i used

#

they are copies of the pngs the game uses should i add z_ infront of the name or does that not matter

rancid temple
#

If they're copies of the base game ones, you just delete/move them when you're done editing

#

You only need to ship custom tilesheets with your mod

#

Unless they're custom tilesheets from another mod that already loads them to Maps

#

The rules around map creation can be a bit finnicky

desert pagoda
ivory plume
desert pagoda
#

Thank you!

dreamy cedar
#

So I wrote some code that ran Game1.playSound("junimoMeep1");" every 200ms for 2 seconds. I would have thought I would have heard exactly the same sound played 10 times. But nope, each meep sounds a little different. That's actually what I was going to try and make happen by twiddling the optional "pitch" parameter, but it seems I don't have to. Anybody know why junimo magic is happening here?

brittle pasture
#

Many audio cues have variations that are automatically selected

ivory plume
dreamy cedar
#

Thanks!

rancid musk
# rancid musk Yay, I have diagnostics.

And now I also have, based on the code in that screenshot, this: ```csharp
//-----------------------------------------------------------------------------
// <auto-generated>
// This code was generated by the Leclair.StardewDelegateHelper source generator.
// Changes to this file may cause incorrect behavior and will be lost if the code is regenerated for any reason.
// </auto-generated>
//-----------------------------------------------------------------------------
#nullable enable
namespace TestMod;
public partial class ModEntry {
public void RegisterEvents(StardewModdingAPI.IModHelper? helper) {
helper ??= Helper;
helper.Events.Content.AssetRequested += OnAssetRequested;
helper.Events.GameLoop.GameLaunched += OnGameStarted;
}
}

#

It's getting there

faint ingot
#

Can you make a bed sleep-able in a CP mod?

grand lantern
#

Im hunting for a mod similar to an animal journal.
Simply I want something that says
Barn 1: 3/8
Contains: Animal A, Animal B, Animal C

Barn 2 : 1/4
Contains: Animal D

Coop 1 : 4/4
Contains: Animal E, Animal F, Animal G, Animal H

Or A rework of the Animal page possibly to add this info?

I dont think one exists and I'm not sure where to start to develop it myself. Does someone have the know-how and patience to teach me or let me comission them to make it?

rancid temple
#

!commissions if you want to go that route

ocean sailBOT
grand lantern
#

Thank you

rancid temple
#

!startmodding if you wanna try your hand at it yourself

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.

rancid temple
#

Something like that will definitely be C#

grand lantern
#

Thank you - my next question lmao

faint ingot
rancid temple
#

I think you also need a Back TileData Bed T

faint ingot
#

thank you, and I put that in the 'Back' object layer in Tiled, right?

rancid temple
#

Yep

tardy adder
#

Today I discovered Calcifer does TileAction :3

#

For furniture ><

#

I am excited

#

Imma bout to break stuff (lovingly)

coarse pasture
#

Hi, I'm looking for some way to enable a custom item to be found when using hoe (similar as finding clay)... I'm looking to use CP but I couldn't figure out what target should I use to include this behaviour... any tips?

brittle pasture
#

if from hoeing dirt in general, that'd require C# and a patch to checkForBuriedItem

brittle pasture
#

that kind of mod can't be discussed on this server

slim inlet
brittle pasture
#

dunno, but not here 🤷
it's in the rules

slim inlet
#

Okay

deep cypress
#

Someone is posting an error log (on Nexus, not here), wherein there are numerous very weird game base code errors, and a warning about base game components being corrupted. Is this a symptom of piracy? (It's on my mod, but I don't especially feel like helping people pirate this game at all, but on the flip side, don't want to wrongfully judge someone who isnt).

latent mauve
#

The game path at the top of the log will be a pretty clear indication if you want to share it

tardy adder
#

Could be someone did an xnb oops too

#

Also yeah game path

deep cypress
#

D:\Games\Stardew Valley

#

That seems not Steam or Gog!!!

brittle pasture
#

well it could be a DRM free GOG copy

rancid temple
#

You can install Steam games wherever you want also

uncut viper
#

you can also just copy stardews folder wherever after a steam install

brittle pasture
#

wouldn't be able to tell otherwise (shoutout to the couple users putting their games in a folder named PiratedGames in mod help lol)

uncut viper
latent mauve
#

Simplest way if you are not sure, tell them they need to reset their game files. If they can't, well...

deep cypress
#

Will do, thanks!!!!

latent mauve
#

Both GOG and Steam provide ways to verify file integrity/reset the files if it's legit, so there is no excuse for why they can't if it's a legit copy

rancid temple
#

And it won't bust their saves so it costs them nothing

brittle pasture
# latent mauve Both GOG and Steam provide ways to verify file integrity/reset the files if it's...

hey, since your here I have a quick question: would you mind if I remove the "furniture machines can stack to 999" feature from Furniture Machine and just make them only stackable to 1 like vanilla? that one feature is responsible for a disproportionate amount of patches and transpilers, and removing it would greatly reduce the chance of unforseen bugs as well as the mod breaking in future updates

deep cypress
#

Fine by me!

grizzled thorn
#

sorry late reply, trying to make a custom skill. probably out of reach initially but would be what I am aiming for eventually

rancid temple
#

Ah, well SpaceCore would probably be your best bet for adding custom skills, not something I've done so I'm not sure exactly what all goes into it but there's at least a few skills that use it

grizzled thorn
#

yeah! I know of love of cooking and the socialization skill that do this. I was poking around their code initially. long ways out for me for sure

royal stump
ocean sailBOT
#

Log Info: SMAPI 4.1.8 with SDV 1.6.14 build 24317 on Microsoft Windows 11 Pro, with 13 C# mods and 2 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

royal stump
rancid temple
#

Also yeah, looks like they probably have a bunch of xnb portrait mods lol

royal stump
#

...ah, I skimmed over those SDVpufferdizzy

#

so reset files and fix their audio

latent mauve
#

I have literally never tried to put more than one in my inventory at a time anyway and my mod isn't launched yet 🙂

rancid musk
#

I am hitting my source generator groove I think.```csharp
public partial class ModEntry : Mod {
public override void Entry(IModHelper helper) {
RegisterTriggerActions();
}

[TriggerAction]
[TriggerAction("My_DoSomething", includePrefix: false)]
private bool DoSomething(string[] args, TriggerActionContext context, out string? error) {
    error = null;
    return false;
}

}generates:csharp
public partial class ModEntry {
internal void RegisterTriggerActions(string? prefix = null) {
prefix ??= $"{ModManifest.UniqueID}_";
StardewValley.Triggers.TriggerActionManager.RegisterAction(prefix + nameof(DoSomething), DoSomething);
StardewValley.Triggers.TriggerActionManager.RegisterAction("My_DoSomething", DoSomething);
}
}

#

And if the class doesn't have an IManifest to read, then prefix becomes mandatory.

novel jay
#

Would this be the right channel to ask for help with a mod I'm trying to make?

uncut viper
#

yes

novel jay
#

Sweet

#

I'm trying to make a mod that replaces all of Gunther's dialogue with just "Wenk" (To pair with another mod that should turn his sprite and portrait into Gunther the penguin from Adventure Time)

I'm currently testing it on Pierre first, and it's not working

I have SMAPI 4.1.9, and the only mods I have enabled are Content Patcher 2.4.4, Gunther as Gunter from Adventure Time (also not working, possibly old mod that I might have to ask creator about later), and my Wenk Gunther mod

This is my manifest.json file right now:


{
    "Format": 1,
    "Name": "Wenk Gunther",
    "Author": "Squimthesquire",
    "Version": "1.0.0",
    "Description": "Makes Gunther say Wenk.",
/*
Add later  "UniqueID": "squimthesquire.wenkgunther",
Add later  "UpdateKeys": ["Nexus:0000"],
*/
    "ContentPatches": [
        {
            "Patcher": "ContentPatcher.Patches.ReplaceDialogue",
            "TargetAsset": "Characters\\Pierre",
            "Entries": [
                {
                    "Entries": ".*",
                    "Replacement": "Wenk"
                }
            ]
        }
    ]
}

lucid iron
#

Not sure where you got ContentPatches from

brittle pasture
#

is this AI generated

calm nebula
#

(Or, he'll, any of that )

lucid iron
#

And yea if you used ai stop right now cus it's all nonsense sleep

rancid temple
#

There's very little about that manifest that's right lol

novel jay
#

...yeahhh
I haven't written code in a few years so after trying to mess with the files myself for a bit I tried messing with Gemini to be lazy

#

Not my finest moment

brittle pasture
#

Yeah literally all of it is wrong

lucid iron
#

But also the mod that makes gunter say wenk and the mod that turns gunter into a PenguThug can all be 1 thing

rancid temple
#

Is Gemini Googles thing?

lucid iron
#

Content patcher can do multiple kinds of edits

#

Pls read the docs, try things, and ask if u got questions Dokkan

novel jay
#

Alright, thank you all! A lesson learned in trying to take the lazy route

brave fable
#

also i wrote the original skill implementation in an hour between drinks and it's a huge mess and not to be looked at

lucid iron
#

But blueberry I think every mod should have a book flip animation

uncut viper
#

(i wonder if the person who made 2 fake mod pages just to pad the numbers to get id 30,000 knows that its public info that they did so...)

brave fable
#

also LOC has the skill behaviours split between like a dozen different files (skill, api, modentry, utils, craftingpagepatches, interfaces, craftingrecipepatches)

#

don't look

lucid iron
#

Button did u miss 30k SDVpufferpensive

uncut viper
#

i did, but i dont count it as a miss cuz of that

brave fable
#

it adds professions in a nested ternary with modulo index divided for pairs. do NOT look

lucid iron
#

I got a nice number Dokkan

#

If you don't want us to look why is it on github

brave fable
#

really i don't know why anyone cares about mod update key numbers. the only person who has a legit excuse is 6480. you are all posers

uncut viper
#

i like having nice numbers so i can remember what my mod ids are

#

so i can search them in here

lucid iron
brittle pasture
#

22256 22975 29991 25328 26443 27432

#

those are the numbers seared into my brain

lucid iron
#

(JA)(PFM) Upgraded Artisan Machines

uncut viper
#

22256 is nice

tender bloom
#

That’s too many numbers to memorize lol

calm nebula
#

I'm amused

lucid iron
#

Your primary cache is massive selph

brave fable
#

loc's nexus id is 6830 so i misread 6480s name a lot

calm nebula
uncut viper
#

21526, 22300, 27100, and 28284 are the main ones i memorize cuz those are the important ones

brittle pasture
#

22991 not 29991

#

I'll chalk that to a bit flip

brave fable
uncut viper
#

for you maybe

lucid iron
#

Huh 29991 looks interesting

#

It's wack that nexus does not hide page titles on unpublished mods

#

Webbed site

brittle pasture
#

Ooh it's kath's new mod

#

spoilers lol

uncut viper
#

is it spoilers when you can just see it

brittle pasture
#

I mean how Nexus spoils it by showing the title

brave fable
#

it's wild that my mod ids jump from 11k to 28k. i'm still making mods with 4k ids lol

uncut viper
#

you can also get the uploader from the api though it doesnt show it in the title bar

lucid iron
#

I don't make mod pages until I'm ready to publish

rancid temple
lucid iron
#

Except today which is special occasion

uncut viper
#

whats the occasion

tender bloom
lucid iron
#

I wanted to check numbers blobcatgooglyblep

tender bloom
#

Though occasionally I get bogged down writing a description or something

brave fable
rancid temple
#

I don't make mod pages until I've had the code done for a week and I've just been putting it off

uncut viper
#

in my defense, the mod i was aiming for 30,000 with is almost ready to publish i think, if i can finish it over break

brave fable
#

small project, in and out, 1 month tops

tender bloom
#

Is this the one with the fun lanterns?

lucid iron
#

But I am looking forward to the Bug mod

brave fable
#

incredibly it's both of those

lucid iron
#

And the speedboat mod

brave fable
#

and that one

lucid iron
#

And the sunset mod, and the crow nest mod

brave fable
#

you can see why it's not out yet lol

lucid iron
#

The creep has you by the neck

brittle ledge
#

just as long as they actually post mods to all those IDs they grabbed SDVpuffersquee

tender bloom
#

And the pretty buildings?

uncut viper
#

well 29998 and 29999 wont—

lucid iron
#

Oh but the mod with long artemis isn't the Mod right

uncut viper
#

chu really wants the long artemis

lucid iron
#

I yearn for it, covet it

tender bloom
#

I want the pretty buildings

brave fable
#

chu i've moved house twice since i posted a nice looking house that people wanted

#

you're not getting that long cat

tender bloom
#

Caaaaaaaaaaat

uncut viper
#

wasnt that like. 2 days ago

tender bloom
#

However, I also moved a lot in the last decade or so

#

I was complaining about how I hate moving and then realized I’ve moved every 1-2 years for a decade

brave fable
#

thusly

long jungle
#

Sorry for the late reply.

No custom nodes. Just need a standalone custom item with a custom recipe.

And I wanna look at lots of samples so I am looking for a mod that does this, if ever there are any.

lucid iron
brave fable
#

well the house sprite is lol

#

unfortunately the mod is more than 1 house sprite

#

weird to think i remember when i penned down the chara schedules to pass time during my grad project, and to this day i still haven't actually put them ingame lol

brittle pasture
long jungle
#

Thanks for the link.

I've already read those and succesfully changed the sprite and added a crafting recipe for a vanilla item.

#

I wanna move up a level and I believe seeing a mod with actual examples would help me a lot.

brittle pasture
long jungle
#

But wow

#

That looks nice and detailed

#

I believe it will help me a lot!

#

Thank you so much

drowsy pewter
#

I should change those to block comments at some point

#

Organization is definitely not one of my skills 😂

long jungle
#

Is there a guide somewhere for possible values/strings I can use for

"Condition":?

rancid temple
long jungle
#

Thanks!

gentle rose
#

does anyone know how to open a text input box in a c# mod? like for example the animal naming box

brittle pasture
#

look at NamingMenu

gentle rose
proud scaffold
#

Does anyone know how to modify existing Flavor properties? Specifically, I'm trying to change the color of smoked fish (to be pink instead of a dark gray) and change their particle effects (to be sparkles instead of smoke)

#

I looked around all the unpacked files, but nothing there seems to be wha tI'm looking for

drowsy pewter
#

You'll need to make a C# mod for that (so decompiled game)

hard fern
#

Every day i get closer and closer to seriously thinking about making a custom tool 😔

proud scaffold
tender bloom
#

The look would be static

#

But other than that yes

proud scaffold
#

I wouldn't be able to apply a tint?

tender bloom
#

The animations for the smoke are custom, but flavored items like honey and juice are normal

drowsy pewter
#

Again you need C# to do that

#

for any special effects being applied to items

proud scaffold
#

Got it

brittle pasture
#

(spritepatcher pls)

tender bloom
#

I would reference wine or jelly if you’re interested in colors

proud scaffold
#

Sigh
Time to get cracking, I suppose

drowsy pewter
#

spritepatcher requires you to write C# 😛

gilded elm
#

hii

proud scaffold
#

My GF, bless her soul, loves fish with all her heart, and I know for a fact she wouldn't smoke them bc "then they'd die"
So I want to make a "Glitter Machine" that just makes them sparkly instead.

hard fern
#

That, or i just make a custom crafting table

drowsy pewter
#

Go away

proud scaffold
brave fable
#

how very stardew valley of you

gilded elm
hard fern
#

Thats 4 more than me XD

gilded elm
drowsy pewter
#

This isnt relevant and also who are you

proud scaffold
#

This isn't really the place to discuss this s-
yeah

brave fable
rancid temple
#

This is the wrong channel for this

brittle pasture
#

(I have been thinking about a custom item effect thing either as a framework or part of EMC)
(just thinking though, no plans, and not before Feb at the latest)
(And I'd still prefer sprite patcher to be a thing)

hard fern
#

This is the making mod channel -

gilded elm
#

my gf killed me cuz i said gm to a girl in Facebook 💀

proud scaffold
drowsy pewter
#

spritepatcher isnt an actual mod

#

it fell onto the wip pile

hard fern
#

Does spri- i thought so lol

proud scaffold
#

Ah, damn

drowsy pewter
#

It would work though

proud scaffold
#

Hm? I'm a bit confused

drowsy pewter
#

It would work, if it existed, I mean 😆

rancid temple
#

Conceptually it would work lol

uncut viper
#

its not released yet, but if it was it would solve your problem

proud scaffold
#

Ohh

uncut viper
#

unfortunately it does not exist yet

#

so it was just idle musing

hard fern
#

If only 😔

drowsy pewter
#

But yeah for what you want to do I can only see a C# mod workting

proud scaffold
#

Gotcha, okay

brittle pasture
#

yeah just a bunch of modders fantasizing about a WIP mod that would solve many pressing problems

drowsy pewter
#

But hey, you dont actually need to smoke fish. So you could make a simple mod that removes the smoker from the game, that would just be CP I think

tender bloom
#

You could do something much simpler like override the fish smoking machine rule perhaps

hallow prism
#

you do, for raccoon

brittle pasture
#

Might mess with perfection/raccoon quest though

drowsy pewter
#

Sigh

tender bloom
#

And make a new “Smoked Fish” item?

#

Idk how much of it it’s possible to get rid of

drowsy pewter
#

That damn raccoon

tender bloom
#

Given that some of this is done in C#

proud scaffold
#

Yeah, but I want to replace it with something functionally the same, y'know?

tender bloom
#

Like you can still have flavored items

drowsy pewter
#

Well you could use Selph's EMC to make it copy the fish sprite (without changing it) and add something to the name?

tender bloom
#

They just can’t sparkle or smoke

drowsy pewter
#

Maybe increase it in quality instead of makign it glitter?

#

fish cask

latent mauve
#

out of curiosity, do we know why attempting to add hairstyles via HairData results in bald hair?

#

There's literally nothing on the wiki to imply that we can add new hair that way instead of replacing but I was curious and tried just to see.

drowsy pewter
#

you can add new hair though?

latent mauve
#

Just through CP?

#

I'm just trying to find out why my attempts went bald

calm nebula
#

Do you have customize anywhere

latent mauve
#

nope

calm nebula
#

Well it at least used to work SDVpufferthumbsup

latent mauve
#

ok, so that seems to require another dependency according to the tutorial, which is what I was trying to see if I could do without. xD

calm nebula
#

It's not. It's just a template

latent mauve
#

hmm

#

alright I'll just reattempt the code again then and skip that part

calm nebula
#

God that coils do with a compiler macro

tender bloom
#

I’m guessing the bald means that something went wrong along the way

#

Maybe it lost the tilesheet

gentle rose
#

This is a very specific question but in case anyone knows, in C# I can get the top player pet using Game1.player.getPet(), but it returns a pet not a collection. Since 1.6 allows multiple pets, what are the other pets tied to? the farm?

latent mauve
#

...ignore me, I did a dumb

#

I forgot to make sure it loaded the png inside Characters/Farmer

#

As soon as I did that it fixed

brave fable
#

yeah that's one of the hairstyles gotchas haha

drowsy pewter
#

(whoever owns the mod page, if you're reading this I will pay youe 1000 dollars)

brittle pasture
tender bloom
#

I was going to say, what if rain

gentle rose
pseudo roost
#

What code string do I use in "Tiled" for inspecting an item?

deep cypress
gentle rose
#

now just to come up with a way for the player to select a specific pet lmao

uncut viper
hallow prism
#

i would say maybe you don't mean an item, but an element of the map

#

in which case you'd use one of the message thing to read a string

pseudo roost
#

the one with them agnifying glass, yeah

lucid iron
#

Hm what if u make like

rancid temple
#

You can open a map that you know has one of the actions

lucid iron
#

Pet selection powder

#

Then u just go up to ur kot and turn em into a doog

velvet narwhal
#

A secret note...? Secret note framework

rancid temple
#

Oh right, I guess secret notes do require you to get the magnifying glass, I don't actually know if message actions cause a magnifying glass to pop up

#

I use hardware cursor lol

uncut viper
#

note that the messagekey doesnt actually have to be in StringsFromMaps

#

(so long as you do provide the full translation key string)

rancid temple
#

So Strings/UI:Confirm?

#

For example

uncut viper
#

thatd probably work. dunno if the slash direction or amount matters for the games string path parsing function

rancid temple
#

Might need to be \

#

\\

drowsy pewter
#

doesnt matter iirc

#

i use 1 forward slash

#

oh wait, we're talking about in map properties

latent mauve
#

Slash Delimited lists need the \\ so that you don't break the list piece with an errant /

drowsy pewter
#

also dont think it matters then if backslashes arent involved

latent mauve
#

Otherwise, it shouldn't care

rancid temple
#

Yeah the only reason I was thinking it might is because AdventureGuild has a LockedDoorMessage with Strings\\\\1_6_Strings:guild_door

latent mauve
#

I mean, I couldn't ever get Action Message to show me the actual parsed text, so I ultimately gave up on it, I think.

drowsy pewter
#

if \ are involved then they need special counting in order to pass it through each level of implementation, but / can be used fine in Strings/etc filepath strings and it has no consideration for that issue

lucid iron
#

If you want u can use MEEP for those close up photos

calm nebula
gentle rose
#

I am starting to realise that editing menus is definitely above my stardew modding ability level rn unfortunately (or at least that it will require me to spend more than five minutes skimming the source code) 😭 might have a look at doing things through GMCM

calm nebula
#

It should work fien without issue with both slashes

#

Either Slash. Slash slasb

#

Slassshhhhhhh

#

(In and out was good)

lucid iron
hallow prism
lucid iron
#

Do a lil harmony patching to do ur effect on item used

latent mauve
#

and I got it, dang typo in StringsFromMaps (I forgot to make Maps plural)

ruby rapids
#

Can anyone help me with CP code for Passerby Cemetery? I am trying to create a CP that changes the portraits. I've been able to change the Seasonal portraits but not the festival ones. I am wondering if the fact that the festival portraits are in an inner folder inside portraits is what is giving me issues.

rancid temple
#

You'll have to patch your portraits into where the InternalAssetKey's are

ruby rapids
#

Ah! LOL. Okay let me double check that.

gentle rose
rancid musk
#

After an enjoyable dinner, the source generators continue: csharp [GSQCondition] [GSQCondition("WHEW")] [GSQCondition("some_TEST", includePrefix: false)] private bool TEST(string[] args, GameStateQueryContext context) { return false; } generates: csharp public partial class ModEntry { internal void RegisterGSQConditions(string? prefix = null) { prefix ??= $"{ModManifest.UniqueID}_"; string baseName; baseName = prefix + nameof(TEST); StardewValley.GameStateQuery.Register(baseName, TEST); StardewValley.GameStateQuery.RegisterAlias(prefix + "WHEW", baseName); StardewValley.GameStateQuery.RegisterAlias("some_TEST", baseName); } }

lucid iron
gentle rose
# lucid iron Yeah, you don't have to deal with menu then

I'll have a look at adding a usable item later, thanks. I forgot how frustrated I get figuring out how to do things when modding sometimes and it's 1am here haha. The butterfly powder's function is hardcoded so I may end up just harmony patching a new item I add via content patcher or something.

lucid iron
#

Yeah there's no content way of doing this, C# is a given

#

You can add item directly in C#

ruby rapids
#

Okay, I got it to kind of work. The test portrait loads like a charm, but for some reason it's loading the spring sprite and not the festival sprite. Sigh... Can anyone send me documentation where I can learn about InternalAssetKeys? I kind of get the concept, but I kind of don't.

lucid iron
#

Just don't use them AquaThumbsup

#

You can Load the asset to a proper target and then use that everywhere else

ruby rapids
#

@lucid iron What do you mean load them to a proper target? I was told that I had to use the InteralAssetKeys because of how Passerby coded their mod. (I am also a overall newbie trying to learn the lingo.)

lucid iron
#

You can't access another mod's internal asset keys

ruby rapids
#

welp now I am confused.

lucid iron
#

But if they did a Load to somewhere then you would be able to EditImage it

#

For portraits what you can do in case of internal asset key on base mod is to Load your portrait to wherever then do EditData on the Data/Characters entry

#

To make it use your loaded target

#

I don't have passerby cemetery mod on hand, so I don't have more specific info

drowsy pewter
#

might be better to have someone examine the code in detail and give specific steps

#

you can also ask clown directly

devout otter
#

Passerby uses InternalAssetKey instead of loading an asset name, so if you want to do patch a portrait for it you'd need to set up your own InternalAssetKey.

lucid iron
#

Why would you need to do that yggy

#

A internal asset key is private

#

You can't touch another mod's internal asset key with your own internal asset key afaik

uncut viper
#

you cannot

#

you can only potentially load it yourself but cannot alter it

devout otter
#

No, you edit their apperance data to use your own InternalAssetKey.

lucid iron
#

You can do this with a regular load too

uncut viper
#

you dont need to use an internalassetkey

lucid iron
#

That was my rec earlier

#

But I think it'd be good if clown just change stuff to use Load

#

So that portrait mods don't need this song and dance

ruby rapids
#

Yes, like dolphin stated. Someone helped me with the code to edit the appearance data (whatever that means)

#

I was staring at the code, like kind of understanding it, but kind of not.

#

Issue is when clown updated and added festivals... well I've been having issues because I am not completely sure how this code works. But I am trying to figure it out. LOL.

devout otter
uncut viper
#

its not much more work, and it means someone else can edit your loads later if they need to, but beyond that i believe the reason chu and i both responded to that specifically is because you said they'd need to do internalassetkey, which they do not

lucid iron
#

Internal asset key is just making smapi do a Load equiv for you, implicitly

#

To a secret place

uncut viper
#

correct

devout otter
uncut viper
#

theres no reason you need to do that

lucid iron
#

But anyway I think asking clown to just add loads would be best

uncut viper
#

if you want to, sure, but you dont need to

ruby rapids
#

Any chance you guys can look at the code to tell me what I did wrong (and why the spring sprite is loading for the egg festival instead of the correct one?)

devout otter
lucid iron
#

@golden basin hello sorry for ping, someone is making a portrait mod for passerby cemetery but it's inconvenient because of the internal asset key usage, do you think it's possible to change those to Load so that they can target the texture asset directly?

ruby rapids
#

(Do I post the code here? I don't want to take up too much space.

lucid iron
#

Use the json validator and send link

uncut viper
#

!json if you have a significant chunk of code to post, you can upload it here

ocean sailBOT
#

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

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

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

golden basin
ruby rapids
#

Thanks button

#

No worries Fellowclown. I am kinda of figuring this out.

lucid iron
#

Yeah no worries, it's not a hard blocker just good practice type thing Dokkan

uncut viper
#

did you get EVENT_ID in the condition line from somewhere in particular?

golden basin
#

im glad its not a hard block im just, I want to get switched over but since i do it all myself and ive issues with my health im just oofx2

ruby rapids
#

@Button Honestly, I can't remember. But it's the only way to get the portrait to load. I think I was looking through clowns coded and found it?

calm nebula
#

It's funny but it is correct lil

#

Festivals are evenrs

uncut viper
#

EVENT_ID isnt a vanilla GSQ, is why i was asking

calm nebula
#

It isnt?

uncut viper
#

it is not

calm nebula
#

I swear there is one of that type

#

Something that is similar

golden basin
calm nebula
#

!gsq

lucid iron
#

You don't have to edit the whole entry, can use TargetField

uncut viper
#

there is IS_EVENT

lucid iron
#

To only change the portrait part

calm nebula
#

Oh come on I was close

#

Lol

ruby rapids
#

So the egg festival portrait loads, but the sprite is spring.

calm nebula
#

Is event, event id

#

One little letter 😛

uncut viper
#

you were close! but like, when trying to figure out why an appearance isnt working, i had to ask about it lol

calm nebula
#

Sowwy

devout otter
uncut viper
#

if its present in the original mod though im gonna assume its some dependency or another, i dont feel like checking all of them

devout otter
#

Try to use that instead of {{ModId}}.Barronspring13.

ruby rapids
#

Thanks Dolphin. I am testing that right now. Also, just so I can learn how to do this without hassling you all, where did you find that?

golden basin
ruby rapids
#

Fuuuuu there is no God. Still no good.

#

I wonder if I load them in a different order?

devout otter
#

Oh, do you mean to only change the portrait and not the sprite?

ruby rapids
#

Yeah.

golden basin
#

It ....it would bb Fellowclown.PC.Barronspring13

uncut viper
# calm nebula Sowwy

take back your apology, bc apparently IS_EVENT has an alias of EVENT_ID, its just not listed on the wiki

golden basin
#

Modid means my id

devout otter
ruby rapids
#

Testing it now. 🤞🏼

devout otter
#

OH wait, that's right, huh.

#

😅

golden basin
#

For real though i am open to getting help switching to the load method I tried to do it before but got overwhelmed due to have like 20 npcs

devout otter
#

Sorry, Clown, I missed what you said.

golden basin
#

It's fine

devout otter
golden basin
#

I'd really really appreciate the help dolphin

#

If it helps ppl do things easily I'd want it done I just have a lot I'm dealing with irl so I've not been able

#

Mostly narcolepsy flares and family matters SDVpufferwaaah

devout otter
#

Alright! I'll DM you the altered disposition files. Do you have any other .json that takes care of portraits besides those?

golden basin
#

My loadables file

#

Loadables is in data/technical/loadables

#

Character files are in data/characters/npcname

ruby rapids
#

Was I suppose to replace the png name as well?

golden basin
#

Removed modId

#

It's only Fellowcown.PC

ruby rapids
#

Ah okay. Thanks. Testing again.

golden basin
#

{{ModID}} is a cp token that tell my mod to put my mod Id in place of the token. So in your mod having the same token tells the mod hey put in my id or well your id

ruby rapids
#

Ahhh that makes sense

devout otter
golden basin
#

❤️ I'm sure it will

ruby rapids
#

By the way Fellow, I really like your mod. Great work btw.

#

Welp, that didn't work. I am going to try to rename my png again... If that doesn't work... I'll try to remove spring and see if that is doing something.

devout otter
#

You may want to try this format?

ruby rapids
#

👍🏼 will do. Be back in a few while I edit and test.

golden basin
ruby rapids
#

@golden basin I don't mind. I am learning a lot. 😄

golden basin
#

What's the art you've done for your mod look like I'm so curious

devout otter
ruby rapids
#

I can show you if you like. Would you like me to dm or post a few here?

golden basin
#

So to do it a easier way you just ....load the art traditionally huh

#

You can post here if you want!

urban crest
#

hey guys, some help??
so I have converted some hairs to Content Patcher additive to the original tilesheet, but some of them are not showing up on the create-a-farmer screen

golden basin
#

The new appearance stuff is so rough too having to load each seasonal is hell on earth

urban crest
#

everything in the code is ok, but there's nothing showing up 😦

#

a converted hair pack before

#

the other pack

golden basin
#

Are the pngs the correct size

urban crest
#

then it only shows packs from other creator later down the line

#

yeah, I used a ruler for it that I found on imgur

golden basin
#

Hmm maybe compare to the other packs pngs and code?

ruby rapids
golden basin
#

Having a visual might help you find mistakes

#

Oooh those are so cute!!!

devout otter
#

Oh god no so cute. 😭

golden basin
#

I've bad news tho.....

#

She's fully seasonal now

#

Gosh though the art is so gorgeous

latent mauve
#

Well, that can be worked around by just reusing one of two portraits for the missing seasons

urban crest
urban crest
#

the conversion tutorial I mean, just copy paste and substitute

#

they're all right, idk what's happening

golden basin
#

With 1.6 a lot has changed. I would still compare your code. But that's me I guess

latent mauve
urban crest
#

I jus tdid them today cryign

#

the code is wrong?
but why does the first two (same thing) show up then?

latent mauve
#

oh, the - is a problem, I think

#

that should be a -1 most likely.

ruby rapids
#

@golden basin I am glad you like her. I had fun creating them in nyapu style. Since I am doing ALL the seasonal Nyapu-style portraits... it's taking a while since I have so many mods. LOL. I want to make them all.

golden basin
#

Oh gosh that's very exciting honestly

#

I can't wait to see Lyell in this style hehe

urban crest
latent mauve
#

between your two false values

urban crest
#

really?! huh

ruby rapids
urban crest
#

all of them are like that though

#

OH WAIT

golden basin
#

OH GOODNESS

urban crest
#

they're not!

golden basin
#

he's so cute img

urban crest
#

you're right

#

thank you!

latent mauve
#

No problem, I thankfully just had to fight with CP Hair earlier today and got help from folks here xD

#

so it's fresh in my mind

ruby rapids
#

@devout otter I could kiss you. It worked!

golden basin
#

I like his hair in this i never thought to give him like braids

urban crest
#

hopefully I can distribute

golden basin
#

And your gun is masterful

urban crest
#

it's an unofficial conversion of a bunch of hairs but I don't know who are the authors, though :\

golden basin
#

Can I dm you I'd love to see the rest SDVpufferwow

latent mauve
#

Unfortunately, it's generally a no-go to publicly distribute something if you can't find the mod permissions / can't get permission from the original creators.

ruby rapids
#

@golden basin I am glad you like him. Yeah, I'll show you all the ones I've done so far.

urban crest
#

I wouldn't like to distribute/redistribute like that tbh

latent mauve
urban crest
#

I don't

#

I got a mixed tilesheet, the only pack I was able to identify was Coi's hairstyles

latent mauve
#

where'd the mixed tilesheet come from?

urban crest
#

I found it online lol

#

the rest I have absolutely no idea, since it was a tilesheet

#

the coi's hairstyles were also cut

#

(the original mod has male and female hairstyles) and the tilehseet had only the female ones

#

there's some that are absolutely gorgeous and I've been using them for years now

#

it was an xbn mod when I found it, a long time ago

#

is there a place I can post them online so people can recognize them???

#

especially bc I don't know if there are official versions of them, since I don't know which mod they belong to

devout otter
ruby rapids
#

@devout otter Thanks again. This helps so much.

urban crest
#

it's showing up!! thanks again!! ❤️

#

now onto doing a hosiery conversion for fashion sense!

acoustic lintel
#

Hey guys 🙂 sorry to interrupt. I’m making my first mod with demon slayer characters 😄 currently figuring things out as I go along. With NPCgifttastes, what do the minus values mean? At first I thought it was the amount of friendship lost relative to the specified item number, but looking at the responses some entries don’t have any item numbers at all, just minus values and sometimes more than one so I don’t know what they’re for. I couldn’t find anything about the minus figures specifically online. Can anyone tell me how it works?

tiny zealot
#

negative values are categories

acoustic lintel
#

Ohh ok that makes sense thank you!!

tiny zealot
#

you can use the context tags listed in the context tag column instead of the negative numbers (those tags are automatically added to any item in the matching category). context tags are great and i recommend using them when it makes sense; in this case it's much easier to understand category_milk than it is to understand -6

latent mauve
#

(It also incentivizes food mod authors to use context tags that are fairly standardized, so, yes please!)

tiny zealot
#

obligatory "context tags my beloved"

acoustic lintel
#

Yeah I get that, that’s really helpful advice thank you so much!

sinful portal
#

hi! i'm making a content patcher mod with a custom ring that gives the player a defense buff as its effect. i have the ring in-game already, but i'm unsure which field i should add to it to give it that effect

tardy adder
#

Tbh I just made the pages so I force myself to work on the mods in the WIP folder

lucid iron
#

well u better make good use of 30000

tardy adder
#

I aimed it for Cosmos a little astrology mod :3

#

I am making a telescope where you can see astrological phenomena (watch me struggle with the art)

#

And adding some fantasy space rocks

#

Still debating if I should make them museum donate

#

29998 is a little event mod for Christmas/New Years
29999 is a continuation for CAG kinda with animals :3

#

But 29991 is my main focus now

#

furniture struggles

#

SDVpufferlurk ahem sorry I gots excited, I go to my modding cave now

brittle pasture
sinful portal
#

oh really

#

okay i'll look into that

#

thank you

tardy adder
#

True Perfection

brave fable
#

well you don't need spacecore, you can just c# it easily enough

#

oh, that's true perfection huh? prove to me you've cooked every recipe 📝

lucid iron
#

best i can do is 1 singular omlette

bleak pewter
#

I'm unsure if this exist

#

But I was wondering if there was a mod that made it so that you can marry people of the same sex... without marrying them. Essentially having them as a roommate.

drowsy pewter
#

they know more about existing mods than us

bleak pewter
#

Oh, ok.

#

Thanks!

tardy adder
calm nebula
hard fern
#

Macaroons, or macaron

rancid musk
#

The nonsense continues csharp [TileAction] private bool Test(GameLocation loc, string[] args, Farmer who, Point where) { return false; } generates: csharp internal void RegisterTileActions(string? prefix = null) { prefix ??= $"{ModManifest.UniqueID}_"; StardewValley.GameLocation.RegisterTileAction(prefix + nameof(Test), Test); }

#

And I also refactored the whole thing after noticing emerging patterns in the code

hard fern
#

Fascinating

rain flax
#

Does anyone know why a modded artisan good wouldn't be able to be sold via the shipping bin? You can sell it at Pierre's just fine. It's for a mod I made, and I can't figure out why the artisan good is grayed out when I go to sell it. Is there a specific code that you need to designate that something can be sold in the shipping bin vs. not?

#

I've looked at other custom artisan goods that people have made for a frame of reference, and I'm not finding anything specifically different.

#

Sorry if this is a very obvious or silly question, I am very new to modding still.

#

This is what I see when I try to sell it. SMAPI is not giving any error codes, either.

brittle pasture
#

you didnt add type

#

that's mandatory now

rain flax
#

OH!

#

Thank you omg this was driving me nuts

royal stump
#

yeah, assuming it's not a custom subclass or something, "can be shipped" is true:
if it's not a BC, type isn't null, Type isn't "Quest", it CAN be trashed, it's not furniture, and it's not wallpaper

rain flax
#

Thank you so much, I didn't have Type at all in the content file. That's exactly what I was missing.

grand agate
#

I can't find where's the crops xnb file, can someone help me

#

planted crops

brittle pasture
grand agate
#

ah found it, thank you@brittle pasture

outer cedar
#

with question forks it can only have two branching paths right?

#

So if a question fork has 3 answers two of them just lead to the same answer?

rancid musk
#

This generation has gotten a bit silly, but atra might be happy. ```csharp
[SMAPIEvent]
[IfModLoaded("spacechase0.SpaceCore")]
[IfNotModLoaded("some.OtherMod")]
private void OnAssetRequested(object? sender, AssetRequestedEventArgs e) {

}generates:csharp
internal void RegisterEvents(StardewModdingAPI.IModHelper? helper = null) {
helper ??= Helper;
if (Leclair.StardewDelegateHelper.StardewDelegateHelperHelpers.CheckModVersions(helper, new Leclair.StardewDelegateHelper.StardewDelegateHelperModData("spacechase0.SpaceCore",null,null,false), new Leclair.StardewDelegateHelper.StardewDelegateHelperModData("some.OtherMod",null,null,true)))
helper.Events.Content.AssetRequested += OnAssetRequested;
helper.Events.GameLoop.GameLaunched += OnGameStarted;
}```

#

I should probably just move the helper class into a different namespace than the namespace the attributes are in. The goal is to pollute the namespace / tab-completion less so just naming it "Helpers" was out. Same with "ModData"

#

Also supports things like csharp [IfModLoaded("some.OtherMod", minVersion: "1.20")]

quaint moss
#

Is it safe to create an Artifact-type item NOT acquired via dig spots or is there some weird obscure behavior I should expect?

faint ingot
#

ummm, so is it a boolean, or isn't it? SDVpufferdizzy

shadow pagoda
#

I am trying to get the number a times a cooking recipe has crafted. I asked a similar question in the replied message about crafting recipes. I was able to get timesCrafted by doing the following

new CraftingRecipe("Chest").timesCrafted

I tried to do the same thing with an omelet, but that did not seem to work. I also tried the following

new CraftingRecipe("Omelet", true).timesCrafted; //0
Game1.player.cookingRecipes.TryGetValue("Omelet", out int timesCrafted) //0

Both print out 0 even though I have made the item twice. Here's some debug logs I have tried in order to figure this out along with a screenshot of what they print out (ignoring the FPS and Craft Omelet lines). I'm at a lost to figure out what to do next

Log($"Crafted Omelet (with boolean): {new CraftingRecipe("Omelet", true).timesCrafted}");
Log($"Crafted Omelet: {new CraftingRecipe("Omelet").timesCrafted}");
Log($"Crafted Chest: {new CraftingRecipe("Chest").timesCrafted}");
Log($"Crafted Chest (with boolean): {new CraftingRecipe("Chest", true).timesCrafted}");
Game1.player.cookingRecipes.TryGetValue("Omelet", out int timesCrafted);
Log("" + timesCrafted);
hard fern
#

(if you want to have 3 different responses that lead to different answers, maybe you want quick Question instead)

brittle pasture
#

not the recipe name

outer cedar
hard fern
#

Forks r really rigid

#

😔 speaking of forks

latent mauve
hard fern
#

I'd wondered at some point if it were possible to shenanigan events into functioning as a "choose your own adventure" type story

faint ingot
brave fable
brittle pasture
#

doesnt that straight up spawn a custom minigame

latent mauve
brittle pasture
brave fable
faint ingot
latent mauve
brittle pasture
#

but yeah that syntax is 100% cleaner

shadow pagoda
brittle pasture
#

unqualified item ids

#

remove the (O)

faint ingot
shadow pagoda
brittle pasture
#

hmm hold on
try Game1.player.recipesCooked instead

rancid musk
#

Technically it might not be an unqualified item Id, it's just whatever the first output item is specified as. In a really awkward way because crafting recipes are super janky.

brave fable
#

ah yeah you do want recipescooked

#

if you log this:```cs
string.Join(' ', Game1.player.recipesCooked.Keys.Select(key => $"({key} x{Game1.player.recipesCooked[key]})"))

you'll see the key format is unqualified item ids
shadow pagoda
rancid musk
#

If you have a CraftingRecipe instance you can do craftingRecipe.getIndexOfMenuView() to get the proper key for any given cooking recipe.

brave fable
#

why oh why didnt ca just use cookingRecipes

brittle pasture
#

It seems cookingRecipes just keep track of the recipes the player knows, the int value isnt used anywhere

faint ingot
brittle pasture
#

yeah it's weird; for crafting the game keeps track of times a recipe is crafted, while for cooking the game keeps track of times an output is made

#

For perfection purposes you need to have crafted with every recipe, and cooked every item (that has a recipe)

latent mauve
#

Don't suppose anyone with access to the code/decompile wants to check the actual arguments accepted for broadcastEvent?

brave fable
#
public virtual void broadcastEvent(Event evt, GameLocation location, Vector2 positionBeforeEvent, bool use_local_farmer = true, bool notify_when_done = false)
faint ingot
#

so not only is it yes a boolean but its also true by default.

rancid temple
#

Easy enough to test, it's false by default

#

This is the delegate

#

Despite the actual method being true by default, the delegate that actual event scripts use sets it false by default

calm nebula
#

Now can one of y'all fix the wiki 😛

candid stirrup
#

How do I find out the exact pixel size of an object because I'm having trouble working on something after copying it from the sprite sheet as there is so much empty space around it plus I have to keep moving to find it again after looking at another page for something that was in a different spot.

I did try to google this but all I can find is for portraits.

This is what I mean.

rancid temple
#

Does that program not offer size info for selection boxes?

latent mauve
rancid temple
#

If you can set up an extra grid, I usually try to do that to make it easier to tell at a glance

latent mauve
brave fable
#

i like to work on spritesheets with some patterns and backgrounds in the doc to set an ambient colour and visualise the tile space for furniture and stuff

#

much less obtrusive than a grid. i never use an outline

latent mauve
#

Furniture is weird, there is no consistent "pixel size" like portraits, because every tile increments the sprite index by 1, and you define the furniture by the tile size in the data, and the top left tile of your sprite as the index.

rancid temple
latent mauve
#

Krita doesn't have a tool to show mouse hover coordinates, so you have to work around it by either selecting the size of the area before the top left corner and then do math, or you have to turn on the grid and count boxes.

rancid temple
brave fable
#

so why does the ingame hud take the time to draw an extra 1px of hud between the date and cashometer SDVdemetriums

#

those 2 pixels make all the difference

#

daytimemoneybox is a funny menu. move the mouse? updatePosition(). rightclick? also updatePosition(). every draw tick? believe it or not, also updatePosition().

long jungle
#

This doesn't seem to work... how can I convert the "Condition": into a "When": to test if it can work?

{
"Action": "EditData",
"Target": "aedenthorn.BuffFramework/dictionary",
"Entries": {
"FjorlagRond.MWBM/FarAwayStone": {
"Id": "FjorlagRond.MWBM/FarAwayStone",
"Name": "Interdimensional Eyes",
"Source": "Far Away Stone",
"IconSheetIndex": 14,
"InventoryContains": "Far Away Stone",
"glow": {
"R": 144,
"G": 238,
"B": 144,
"A": 255
},
"Condition": "LOCATION_NAME Target Forest Woods WizardHouse WizardHouseBasement _customWizardBasement"
}
},
},

rancid temple
#

Conditions are a specific field provided by a set of data

long jungle
#

The whole thing works, except for the condition. As of now, it occurs in all locations.

Also, I might be doing something wrong so please do enlighten me.

rancid temple
#

When is for CP patches, it goes on the same level as Action

#

A When decides if a patch exists at all

#

If you set up a When and it isn't satisfied, your patch will simply not be in the game until it is satisfied

long jungle
#

Hmm, I see. A "When" would be better then

rancid temple
#

I don't know anything about the BuffFramework so I don't know if it even has a Condition field

long jungle
#

Yep I don't think it has one too

#

So, is there any way for this to trigger only when the player has brought the item once to a certain location?

blissful panther
#

I mean you could target the glow field of that buff entry with a CP patch that has a when condition that updates on location change, but... I don't know how the buff framework would interact with that.

rancid temple
#

Chances are good the timing of editing that data won't align well

blissful panther
#

I suspect it wouldn't do anything, because it likely just loads them at startup and never reads from them again.

rancid temple
#

At best maybe it re-reads daily

long jungle
#

Thank you for the help. I will play around with When

#

Hopefully, I find something that works SDVpufferchickmorning

blissful panther
#

There isn't a single usage of the AssetsInvalidated event in the unofficial fix version of the mod, so it's definitely not checking whenever there's an update to the asset...

#

Yeah, it doesn't even load from the asset every day. It's just once per play session, or when something called the UpdateBuffs() method in the API.

rancid temple
#

Oof

long jungle
#

It worked! SDVpufferheart

}, "When": {"locationname": "Forest"}, "Update": "OnLocationChange" },

#

The glow buff only activates when the player is in the forest and disappears after leaving the forest

#

Now, is there an easier less cluttered way to make this activate in multiple locations or do I just make multiple entries with different locationname requirements?

calm nebula
proud wyvern
brave fable
#

looks like it's pretty static SDVpufferthinkblob

#

naturally, drawMoneyBox() also calls updatePosition();

candid stirrup
#

Thank you for the help it was very helpful but yay now I have to do math 😅

long jungle
simple spoke
#

Heyho can someone explain to me how to make the custom Messages for my Mod translatable. I tried it myself with the Guides but i still dont understand what to do

brave fable
#

how is this even giving j = -1 SDVpufferthinkblob stloc.s 6 exists at index 654 and i < 0 is false

#

oh 6 isn't an int. of course

#
j = i < 0 ? i : ilOut.FindIndex(i, op => op.opcode == OpCodes.Stloc_S && op.operand is LocalBuilder local && local.LocalIndex is 6)

naturally

brave fable
#

why did i make this SDVpufferchickluau

hard fern
#

why is it in the middle

#

what have you done

lucid iron
#

The horror

brave fable
#

wonder if i can make it [date] ( sundial ) [time]

#

transpiler hell

unreal spoke
#

It’s not exactly a match, but it reminds me of Majora’s Mask. "Dawn of the Final Day"… and stuff.

fossil osprey
true coyote
#

this is prob an obvious and/or amateurish question, but where would I begin on getting https://www.postype.com/@kayainsdv/post/10290915 to be compatible with fish pondering? currently its only compatible with smaller fish ponds, and the janky work around I've been attempting only gets me to a broken textured pond

KAYA in SDV

Smaller Fish Ponds 모드의 작은 물고기연못을 Gwen님의 중세풍 리텍에 맞춰 리텍했습니다. Smaller Fish Ponds seasonal skin for match with Gweniaczek's Medieval buildings/Fish Ponds. ▼ 필수 선행모드 (Must need for use it) Content Patcher, Smaller Fish Ponds ▼ 설치법 Install

#

fish pondering does say its compatible with all pond replacer mods, however further in their comments the mod author says this one in particular is not compatible because it was built for [the return of] smaller fish ponds

#

I could continue to use gwen's medieval pond which is where kaya's was made from/for, however I'm just not a huge fan of the scaled down assets of gwen's pond from the full sized asset

drowsy pewter
#

So if you look at fish pondering you'll notice that it actually uses the full res pond image

#

like the pixel sizes are different from other stuff

#

it's downscaling whatever image you give it, so an already scaled image wouldnt work

drowsy pewter
#

you can ask them to add a feature for hand drawn smaller ponds?

#

@lucid iron

true coyote
#

I see.

#

I guess thats why it wouldn't even load the base mod? it just gave me vanilla if I turned gwen's off completely (I had to do some weird janky stuff adding it through gwen's just to see if it would work)

lucid iron
#

The transpiler for fixing draw was either change source rect OR change scale, I went with scale cus that works with more stuff

drowsy pewter
#

honestly i thought u redrew the sprites at a smaller size, i cant believe i didnt notice the scale haha

lucid iron
#

I did think about a separate 3x3 fish building but that is a pie in the sky rn

true coyote
#

ah yeah the reason i went with pondering was because it wasnt a separate building tbh

lucid iron
#

Anyways I suppose u can like

#

Scale that 3x3 pond sprite up to 5x5 so that it get scaled back down to 3x3 in game

#

blobcatgooglyblep shenanigans

drowsy pewter
#

oh god

#

the pixel sizes

frigid hollow
#

remember to use nearest neighbor when scaling up...

#

SDVpufferclueless surely the pixel sizes won't be that bad

lucid iron
#

Yeah quake in fear ppl who notice this stuff PecoSmile

frigid hollow
#

technically wouldn't they end up at vanilla size pixels at the end

drowsy pewter
#

well at that size you'll be getting a lot of rectangle pixels

#

so when you downscale it back to 3x3 in the game a bunch of pixels are still the size they are now, but theres also a bunch of rectangle and pixels that are twice as big as other pixels

#

LOL

lucid iron
#

You could use this early build I guess, it did just use a manually scaled down sprite

#

No warranty and I think the netting is broken

drowsy pewter
#

here's leah from 3x3 to 5x5

frigid hollow
lucid iron
#

Leah from the evil rectangle dimension

tiny zealot
frigid hollow
#

portrait mod that just does that to everyone

blissful panther
#

...patching SpriteBatch.Draw() to slightly skew the scale of everything drawn to the screen? SDVkrobusnaughty

tiny zealot
#

toy nightshade filter that does it to the whole game

frigid hollow
#

oh my god.......

tiny zealot
#

DH's way would probably be more cursed, but maybe slower

#

(early nightshade concept patched sb.draw but had to do some reflection. the performance was... poor)

proud wyvern
#

just emit some IL, easy

blissful panther
calm nebula
#

What did you do

blissful panther
#

return new Random().NextDouble() > 0.01f;

lucid iron
#

Hm nice horror game concept

tardy adder
#

I am sorry my dear SpaceCore

calm nebula
blissful panther
#

Sometimes the player's limbs, too!

tiny zealot
#

please explain the chicken

gray bear
#

the chicken is just vibing, observing universe gliches, as one does

light bramble
#

Ok so I am using the i18nifier app and am hella confused on something, can I get clarification? I put in my config schema and I am still confused on what it is I need to do. Like it spat out stuff like this:

"config.Animal Crossing Dig Spot.description": "Changes the worm artifact spot with the digspot from Animal Crossing.",```
But like what do I do with it now?
drowsy pewter
#

thats all you need to do

uncut viper
#

that goes in your i18n file

drowsy pewter
#

ah yes

#

it goes into your i18n file and then thats all you need to do, because config i18n is set up differently

uncut viper
#

(idk if the i18nifier is just a website or if it actually converts the files on ur computer so if it already put them in a file ignore me)

light bramble
#

But then...what goes in lou if the config schema portion of my mod?

drowsy pewter
#

nothing

#

keep it the same

uncut viper
#

if you put in the config schema you already had then dont change it

light bramble
#

but? wait

#

I'm confused?

uncut viper
#

Content Patcher looks for specific things for config i18n

#

so the i18nifier put it in the format content patcher will look for by default

drowsy pewter
#

only for configs in content patcher, you don't need to use any tokens or refer to the i18n in your code at all. It's set up like that by default

light bramble
#

Ok...so I will say the config schema is in my content.json. but it still would be ok to just...not do tokens/refer to the i18n????

drowsy pewter
#

Yes

light bramble
#

I'm so sorry for asking dumb questions..

drowsy pewter
#

Dont change anything you have for your config

uncut viper
#

you dont touch the config schema at all

#

you just put the i18n in the default.json

drowsy pewter
#

You can add a new language and try it out to see

light bramble
#

One final question. If I am reading the wiki correctly. my files should look like this?

#

And then put default.json in the i18n folder?

uncut viper
#

yes

light bramble
#

Is there a translation thing for the manifest at all or no?

uncut viper
#

there is not

light bramble
#

ok

#

thank you. and again sorry for stupid questions

uncut viper
#

no one knows everything!

light bramble
#

Well this is 100% gonna help me with making some of my mods translation friendly....Though I now have another question. I have a string that is edited for a different mod a farm mod...is there a way to make that i18nified?

#
            "Action": "EditData",
            "Target": "Strings/UI",
            "Entries": {
                "n3rdgirl_FarmExpanded": "Farm Expanded_An expanded farm for more room to do stuff!" // tip: use {{i18n}} to translate it
            }```
uncut viper
#

just use an i18n token for it instead

light bramble
#

OH WAIT

#

LOL I just noticed the comment there left over from the template

#

But, enlighten me...How would I go about doing the token?

#

Sorry I just feel so dumb

uncut viper
#

you add a line in your default.json with whatever key you want, lets say "FarmExpandedUI" for example, like this:

{
 "FarmExpandedUI": "Farm Expanded_An expanded farm for more room to do stuff!"
}

then in your EditData stuff, do this:

"Entries": {
  "n3rdgirl_FarmExpanded": "{{i18n: FarmExpandedUI}}"
}
light bramble
#

Ok

light bramble
#

Thank you for putting up with my dumbary

#

where do I get headders like this? Like is there a generator for them?

round dock
#

Scroll generator gives you headers like that

#

(or something of that nature)

light bramble
#

Ok ok!

teal bridge
#

(Although I don't think it'll do the chick for you, that's custom)

light bramble
#

That's fine, I don't want the chick lol XD

rain oracle
#

Aloe, peeps.
It's been a bit since I did any map work, so I wanted to ask. Where is the 1.6 tiles located in Maps? (The waterfall and new grass/water tiles)

#

nvm, found it

rain oracle
#

Did the map size limit increase?

fervent horizon
#

So, after much testing and messing around, I can confirm that if you can get the location with GUID of indoor buildings, you can set that location as a Minecart destination. I was able to find my interior GUID in a log file and tested with that, and it worked perfectly.

My issue is that I have tried many different ways to set a token to the guid and I am coming up short. If this can be figured out, it could be very useful for Minecart mods

lucid iron
#

The guid is generated at runtime so it would have to be implemented as a token

uncut viper
#

you can't really "set" a value in a token at runtime from the CP side of things either

lucid iron
#

Can you remind me what the "minecart in instanced buildings" is supposed to solve

lucid iron
uncut viper
#

oh I know, that was more in response to them saying they were trying to set a token to the guid, and I wasn't sure if they meant in CP

fervent horizon
#

no, in C#

uncut viper
#

i think the main problem with the token thing is still just the fact that you can't iterate over a token in CP, though

fervent horizon
uncut viper
#

so even if the token returns a list of locations you can't use them all automatically

lucid iron
#

You can do that

#

The issue is exclusive to instanced destination

fervent horizon
#

right

lucid iron
#

There's a few pif rooms that have minecart and they work by making it not instanced

#

But let's say you make a building that has a minecart inside

#

Then build 10 of those on ur farm

#

Are u going to display all 10 of those as destinations?

fervent horizon
#

That would be the intended idea I suppose

lucid iron
#

That's a lot for the menu to handle monS

uncut viper
#

do minecart menus not paginate automatically

fervent horizon
#

Have you not used integrated minecarts 😆

rancid temple
#

They do

lucid iron
#

I don't use it for this precise reason

fervent horizon
#

they are up to like 108 destinations

rancid temple
#

The dialogue box page system sucks, but it does work

uncut viper
#

that seems untenable

blissful panther
#

Ha, I ran into the instanced interiors thing with the old teleporter mod that never got released.

lucid iron
#

But anyways I think there is a better way than dealing with instanced interior maps

fervent horizon
#

Cool, how were you pullig the instanced location name

lucid iron
#

You should see if you can get the building's exterior action to work for minecart

uncut viper
#

GameLocation.NameOrUniqueName

blissful panther
#

This was in 2022, so I have no current recollection!

rancid temple
#

Minecart from an instanced location has no problem

lucid iron
#

So that u can make a obelisk type thing that is a minecart

uncut viper
#

i still think the easiest way to do what you want is just store a list of interiors you want as destinations as they are constructed and make changes in the AssetRequested event in C# as necessary though

rancid temple
#

Not really a reason to make the exterior of the building the minecart unless you're just intending to put all the cart logic outside, so arriving outside as well

lucid iron
#

Yeah 1 less warp screen Dokkan

rancid temple
#

I thought that was the agreed upon solution yesterday, what happened?

#

(fixing the instance system, basically lol)

lucid iron
#

If u r set on doing minecart to interior then I agree with button, do the whole mod in C#

blissful panther
#

From a decompile, but it looks like thisis what I was doing:

foreach (GameLocation location in Game1.locations)
{
    locations.Add(location);
}
foreach (Building building in ((BuildableGameLocation)Game1.getFarm()).buildings)
{
    if (building.indoors.Value != null)
    {
        locations.Add(building.indoors.Value);
    }
}
GameLocation foundLocation = Utility.fuzzyLocationSearch(Game1.currentLocation.NameOrUniqueName);
if (foundLocation != null)
{
    currentLocation = locations.IndexOf(foundLocation);
}
fervent horizon
#

ok, how would you set a Token like this onGameLaunched, when it requires the save to be loaded?

uncut viper
#

the token is not a viable way to do this