#archived-modding-development

1 messages · Page 515 of 1

jovial gazelle
#

Uh no, I prefer text tutorials. I don't mind going off of HellMod, I just figured there might be a dedicated example mod instead that I was missing.

pseudo pond
jovial gazelle
pseudo pond
#

alrighty

jovial gazelle
#

Alright, first extremely short mod written, hope it works lol

#

Annndd errors

cedar hemlock
#

What are you doing?

jovial gazelle
#

I just chose a hook that looked interesting, in this case SoulGain, and doubled the amount, but Hollow Knight crashed before getting to the main menu

#

Might be unrelated

cedar hemlock
#

Try without your mod

jovial gazelle
#

I will in a sec, things are loading

#

Ay didn't crash this time, with the mod still on

#

Oh wait it failed to load

vocal spire
jovial gazelle
vocal spire
#

*ModLog.txt

#

?saves

finite forumBOT
#

Saves


Windows File Paths: (Assumes Default Steam Install Path, Adjust accordingly for DRM Free or Non-Standard Steam Path)

Game Files: C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight\```
** **
Mac File Paths:
```Save Files: ~/Library/Application Support/unity.Team Cherry.Hollow Knight/
Game Files: ~/Library/Application Support/Steam/steamapps/common/Hollow Knight/hollow_knight.app/```
** **
Linux File Paths:
```Save Files: ~/.config/unity3d/Team Cherry/Hollow Knight/
Game Files: ~/.local/share/Steam/steamapps/common/Hollow Knight/```
vocal spire
#

It’s in your save files path

jovial gazelle
#

Ok

vocal spire
#

70% of the time I’ve found the problem without modlog though

jovial gazelle
#

k

jolly oriole
#

imagine not needing output_log for your problems 🥴

jovial gazelle
#

Target framework is .NET core 3.1, is that good?

jolly oriole
#

it should be .net framework 3.5

jovial gazelle
#

Ok

jolly oriole
#

unless you want to make a mod for the 1.5 beta, in which case it should be 4.7.2 i think

jovial gazelle
#

I need to install that then, cause it's not listed lol

jolly oriole
#

are you using rider or visual studio?

jovial gazelle
#

visual studio

jolly oriole
#

well, shouldn't matter, i think both have a completely seperate project template for .net framework DLLs instead of .net core ones

jovial gazelle
#

huh

jolly oriole
#

if this piece of garbage would stop lagging, i could make a screenshot

jovial gazelle
#

On the microsoft download page theres only 3.5 SP1, is that fine? It also is only available for runtime, not developer apparently

jolly oriole
#

screenshot is in german though

jovial gazelle
#

ohhh

#

So I need to make a new project ig?

jolly oriole
#

you could also edit the .csproj file, but creating a new project is probably easier

jovial gazelle
#

Yeah, especially given I have like 10 lines of code lol

#

The frameworks only go down to 4 in the drop down

vocal spire
#

Then you made the wrong project

#

Or you need to install 3.5 framework

jovial gazelle
vocal spire
#

Yeah

jovial gazelle
#

Do you know where I can install 3.5?

vocal spire
#

Can’t link atm

jovial gazelle
#

What should I google then?

vocal spire
#

You can just do it from add/remove windows features iirc

jovial gazelle
#

k

young walrus
jolly oriole
#

should be sufficient (in the visual studio installer)

jovial gazelle
#

k

jolly oriole
#

no

vocal spire
#

Wouldn’t it be a shame if I accidentally edited a reply message

jolly oriole
vocal spire
#

Well

#

Gg

jovial gazelle
#

Well I must say just from reading the docs hooks look very nice to use.

vocal spire
#

Imma go annoy someone now bye

jovial gazelle
#

Have fun

jovial gazelle
jolly oriole
#

hm

jovial gazelle
#

I googled and it said to check the turn windows features on and off, which I'm trying now

pseudo pond
pseudo pond
jovial gazelle
#

I want to finish trying this first but after that sure

#

Maybe idk

pseudo pond
jovial gazelle
#

And then "enable .net framework 3.5" is the first item on the windows features list so I figured I'd give that a shot

pseudo pond
#

hmm

jovial gazelle
#

I'm waiting for that to download right now

pseudo pond
#

i figured it was probably what SFGrenade was saying but if you already checked that idk what it is

jovial gazelle
#

I think it was because in the visual studio installer there was targetting packs for all the 4+ frameworks, but the thing for 3.5 was dev tools, not a targetting pack

pseudo pond
#

That could be it

jovial path
#

how would I go about making my own mod?

pseudo pond
#

?pins

finite forumBOT
jovial path
#

Thanks

pseudo pond
#

specifically the radiancehost link

vocal spire
jovial gazelle
#

Well I restarted my computer after changing that thing in windows features, and I think I'm just gonna give framework 4 a shot, does that have anychance of working?

#

Wait nevermind it finally showed up!

#

Finally lol

pseudo pond
#

nice

vocal spire
jovial gazelle
vocal spire
#

Nice

jovial gazelle
#

And it works! hooray

jovial gazelle
#

Why does directly setting the fields in PlayerData cause potential conflict as opposed to using something like SetInt or a varient?

deep wave
#

if stuff is hooked to setint then it wont be called when you change playerdata directly

jovial gazelle
#

k

runic wind
#

using the OnEnemyEnabled hook, duplicate enemies have numbers after their names. Is there a property that shows the base name, or a way to convert the enemy object to a string so I can see all the properties?

#

if not I can just use a substring, but that's gross

steady comet
#

I don’t think so for your question Staxis, but maybe you could think of a property that that enemy has? E.g. if your enemy is the only one in the game with a FSM with a particular name, you could check if the enemy has that FSM?

That said just looking for the start of the enemy name (or maybe just strip off numbers and (clone)) is probably the most sensible

runic wind
#

alright, thanks

#

also, what's the best way to wait a bit in a hook function?

#

yield return new WaitWhatever doesn't work

steady comet
#

Uhh

#

I think you can only do that in a coroutine

runic wind
#

I just need to delay a little for fps to stabilize

#

maybe there's a more useful hook, I'll look later

runic wind
#

can a value in an fsm be replaced with a function?

#

ChaseObject in the vengefly (Buzzer) fsm has speedMax and acceleration, both of which I want to multiply by (200 / Time.DeltaTime)

steady comet
#

Is Tme,DeltaTime constant?

jolly oriole
#

or constant

steady comet
#

Otherwise you can just set those fields at the start of the state

jolly oriole
runic wind
#

Oh weird

#

I still need to know how to change acceleration each frame though

steady comet
#

You could add a hook to the ChaseObject.OnFixedUpdate to set its acceleration whenever it's called - I don't know what that'd do for performance though

runic wind
#

Hmm

#

You can add functions into fsms, so maybe I could create a new fsm variable, update it with the custom function and set the acceleration to that?

steady comet
#

Yeah, something like that was my original suggestion

runic wind
#

I’d expect it to be faster than adding hooks but idrk

#

I don’t think execution time should be a problem here anyway

#

And even if it is, the mod will compensate for it monomonteehee

steady comet
#

If you don't do it every update then it won't work if they change FPS, that's the only issue

runic wind
#

Yeah it def needs to be every frame or every few frames

#

Even a second after loading in my FPS isn’t stable

#

I mean tbh my FPS is never totally stable

steady comet
#

(That's why I suggested OnFixedUpdate)

runic wind
#

What is OnFixedUpdate?

steady comet
#

I think it's the code in the ChaseObject action that runs every frame?

#

Actually probably you have to look into the ChaseObject action a bit more (in DNSPY)

jolly oriole
#

idk if it has it, but FixedUpdate runs every physics tick, exactly 50 times a second in the case of hk

runic wind
#

Ah ok

jolly oriole
#

just read that ms is apparently changing parts of their store, so modding the ms store version of hk should be easier at some point in time

fair rampart
#

can someone look at modding help pls

runic wind
#

how do I make a hook to ChaseObject.OnFixedUpdate()? The docs don't seem to say anything about using other hooks

#

in dnSpy I see what I think is the hook being added and then removed? I'm not totally sure how it's all set up

steady comet
#

In general write the full path of the thing, but add On to the start

#

So it'd be On.HutongGames.PlayMaker.Actions.ChaseObject.OnFixedUpdate

runic wind
#

do you mean like ModHooks.Instance.On.HutongGames.PlayMaker.Actions.ChaseObject.OnFixedUpdate?

steady comet
#

No

runic wind
#

oh remove the modhooks.instance

steady comet
#

AFAIK ModHooks.Instance.... hooks were placed manually by 56/whoever, and On.... hooks were placed automatically by the monomod

runic wind
#

ok wtf is this signature

#

private void FixedUpdate(On.HutongGames.PlayMaker.Actions.ChaseObject.orig_OnFixedUpdate orig, ChaseObject self)

#

what on earth is that input type

steady comet
#

Something created by monomod tamershrug

#

(You also have to remember to put orig(self) somewhere so the original function runs)

runic wind
#

I'm not sure I fully understand how hooks work

#

the idea is that instead of the normal function running, my function will be run instead, right?

steady comet
#

Uhh

#

Well it depends on the hook

runic wind
#

ok

steady comet
#

I just mimic examples from other people's code lurkersweat

runic wind
#

ok well now I'm way more confused

#

it seems like the acceleration is being done in the onFixedUpdate

#

so idek why it's fps dependant

#

do you happen to know the internal name of soul sanctum?

steady comet
#

As in room names?

#

They're all Ruins1_XX

cedar hemlock
#

get debug mod and go to that room

runic wind
#

yeah didn't have hk open

steady comet
runic wind
#

alright I'll try to figure out the fps dependency tomorrow

#

thanks for all your help Flib mathulLove

steady comet
#

Good luck with that 😛

fair rampart
#

does anyone know where the attack sprites for boss attacks like pure vessel are

#

is there a way to obtain that

#

like this one

#

but transparent

#

(pls ping me i'll be offline)

cedar hemlock
#

@fair rampart

fair rampart
#

ayyy thanks

#

the image quality isn't super high though

cedar hemlock
#

its whats used in the game

#

download it and maybe the quality is higher??

fair rampart
#

i need a better quality of this?

#

lemme download the pp mod.

jolly oriole
#

i think there are also seperate sprites just for that focus effect

cedar hemlock
#

i'll look

fair rampart
#

wait hold on when i downloaded from discord it is high enough

#

thanks

fair rampart
#

this one

jolly oriole
#

i'm at work, so i can't look for them

cedar hemlock
#

not stuff like "atlas0_xxx"?

jolly oriole
#

no, that animation is also split in like 13 different singular image files

fair rampart
#

man, i'm just trying to make abyssshrek and we have 13 images

jolly oriole
#

grimm is also amazing, made of 2 spritesheets and the godseeker bow is also a row of like 13 images

cedar hemlock
#

i can only find 7

jolly jungle
#

Oh I see

#

Click the spritesheet, do "open original", and then download

cedar hemlock
jolly jungle
jolly jungle
cedar hemlock
jolly oriole
#

possible actually 7, just thought of a random number to say

jolly jungle
#

Oh huh

#

Where is it listed in the ripped sprites folder?

cedar hemlock
#

oh wait lemme ping @fair rampart

jolly jungle
#

Next to PV, or?

fair rampart
#

thanks

fair rampart
#

but anyway i resolved the issue

#

thanks for the sprites ruttie

#

new soulorb

jolly jungle
#

Nice hollowknice

#

What's the rest of the skin gonna be?

cedar hemlock
#

pv skin

arctic dragon
#

how bad of an idea would it be to make a custom knight

arctic dragon
fair rampart
#

gonna make the sprite smaller

#

everyone uses knight's cloak shape (even the private skin) which is sad

#

but understandable

#

it looks like i have to draw in some things myself

jolly jungle
#

It's a shame we can't really do the actual PV horn size

jolly jungle
#

Or seomthing

#

Not sure

cedar hemlock
#

no make the body smaller

#

so theres more room for horns

jolly jungle
#

What I meant was that the Knight has hitbox only up to top of head

#

this'll have hitbox on the horns too a bit

cedar hemlock
#

eh doesnt rly matter

#

people will get used to it

arctic dragon
#

wait, the horns aren’t counted in the hitbox? neat!

fair rampart
#

the hitbox is just part of the body by default and it'll be a bit of the head when i make it smaller

#

wait no

#

sorry memory bad

#

anyway, i had to edit it a bit but it's some good work i have here

#

not very neat because contrast increase but yeah

#

i'm probably gonna put this over the smaller orbs

vocal spire
jolly jungle
#

that's... marvelous

jolly jungle
cedar hemlock
jolly jungle
#

My bad

#

I knew something seemed off in that name but couldn't figure out what

#

Thanks

vocal spire
jolly jungle
#

Nah

#

just gonna wait for you to release it in a year and a half and then I'll see what it does

pseudo pond
#

So for some odd reason using the SetPlayerIntHook broke the game

#
private void OnSetPlayerIntHook(string intName, int value)
        {
            //Ensures the player can only have a maximum of 3 slots even when aquiring a charm notch
           PlayerData.instance.SetIntInternal(nameof(PlayerData.charmSlots), 3);
        }*/
#

This segment gave me unlimited soul, dunno how that works

copper nacelle
#

bro

jolly oriole
#

Bro

jovial gazelle
#

Bro

copper nacelle
#

you are ignoring every int set

pseudo pond
#

wdym

#

oh do i have to make it actually change the things it's trying to set

copper nacelle
#

you're supposed to like check the intName and call SetIntInternal/set it directly with a different value when it would set something that you want to change

#

and if it's not what you want to change you just call SetIntInternal with the stuff you get

#

this delegate really should be like trygetvalue imo

#

but i also don't want to break every mod in existence

pseudo pond
#

tbh i thought that it'd set the player int like normal while also running the line of code i added

#

i guess i just misunderstood the way the hook worked

jolly oriole
pseudo pond
jolly oriole
#

then let it be PlayerGetIntHook, if the target string is the same as charmSlots, return 3, otherwise getintinternal

pseudo pond
#

👍

pseudo pond
#

thank you 🙂

#

sorry for asking so many questions, you guys are very helpful

jovial gazelle
#

Random unrelated tip thingy, you can edit your build settings in visual studio to copy your built .dll to your mods folder by going from Project > Properties > Build Events, and then in the Post-Build textbox you can put copy [Your built .dll path here] [Your mods folder here] so then you don't have to move your updated build file every time you change something. I thought this might be useful for some people, maybe not idk.

pseudo pond
#

that is a nice tip, thanks

#

ill just have to remember to change it if i ever do anything non-hollowknight related

#

or is it just per project

jovial gazelle
#

Per project

pseudo pond
#

ah okay

#

definitely nice then

jovial gazelle
#

Unless visual studio does something really weird lol

jolly oriole
light zodiac
#

i tried using the Reflection to call private functions but its causing a System.NullReferenceException error when i use the mod.
My code is:```cs
private bool CanDash()
{
BindingFlags private_instance_flags = BindingFlags.NonPublic | BindingFlags.Instance;
MethodInfo m;
HeroController instance = new HeroController();

        m = typeof(HeroController).GetMethod("CanDash", private_instance_flags);
        bool CanIDash = (bool) m.Invoke(instance, new object[] { });
        return CanIDash;
    }```
#

I'm trying to call this function from HeroController

steady comet
#

Uhh

#

This doesn't answer your question, but why can't you just use the reflectionhelper?

copper nacelle
#

new HeroController

jolly oriole
#

additionally, instead of new object[] { } i personally do either null or new object[0]

copper nacelle
#

do null

light zodiac
light zodiac
light zodiac
jolly oriole
copper nacelle
#

should be caching the method info

#

you can get a fast reflection delegate using the monomod extension too

light zodiac
copper nacelle
#

bro

#

it's a property not a type

jolly oriole
#
private bool CanDash()
{
    return (bool) typeof(HeroController).GetMethod("CanDash", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(HeroController.instance, null);
}

how i'd do it

light zodiac
#

it works thanks

copper nacelle
#

wtf

#

no cache

#

using invoke

jolly oriole
#

if it works, don't change it

pseudo pond
pseudo pond
#

where can i find my hollow knight save files if they're not in my appdata folder

light zodiac
#

Press win + r and then paste this

%AppData%\..\LocalLow\Team Cherry\Hollow Knight

pseudo pond
#

i tried

#

only brings me here:

cedar hemlock
#

go back one folder

#

then locallow

#

team cherry

pseudo pond
#

ok cool

cedar hemlock
#

and hollow knight

pseudo pond
#

i found it 🤦‍♂️ '

#

im bafflingly incompetent sometimes

vocal spire
#

deleted messages

pseudo pond
#

huh?

safe hamlet
#

when there is literally a lib for fast reflection and no one uses it

copper nacelle
#

true

jolly oriole
#

is the vasi reflection helper different from the one directly in the mapi?

copper nacelle
#

a bit

#

there's some stuff i changed because i don't have the restrictions on not breaking old things

jolly oriole
#

break old things in the 1.5 mapi :v

copper nacelle
#

true

runic wind
#

I need some help understanding how fsms work

#

I'm looking at the vengefly fsm, and two relevant states have the action "ChaseObject"

#

the important part of ChaseObject is doBuzz(), which is being called through OnFixedUpdate() as well as OnEnter()

#

What is the fsm really doing with ChaseObject? I don't understand how it can be a class instead of a method

#

And is OnFixedUpdate() even being used? ChaseObject is being called once per graphics frame as far as I can tell

#

oh, and I'm assuming OnEnter() is called automatically- when does that happen?

steady comet
#

You're right that OnFixedUpdate should be called every physics frame, except if the FSM leaves the state that the ChaseObject action is in then it won't be called any more... that might be why it's not behaving as you'd expect

runic wind
#

Wow, at this point instead of the intended quick fix it looks like I should just fix tcs broken code

steady comet
#

:tcarrivewithspaghetti:

silent marsh
#

Hi,
I just want to share a small theory that I have: I think the dream nail is an hallucination we collectively had, there has never been a dream nail in Hollow Knight:
I didn't find any hook related to it (unlike dash for example), I didn't find anything related to dreamnail usage in HeroController.instance.cState (unlike C-dash for example), I didn't tind any FSM related to it in HeroController.instance (unlike spells for example), and I didn't find anything related to it by listening to every single {Get/Set}Player{Int/Bool} (unlike bench state for example)

Only reasonable conclusion is that dream nail doesn't exist

copper nacelle
#

there's an fsm

#

it's just not referenced in code

silent marsh
#

Where ? 😮

copper nacelle
#

You can use the FSM Viewer to look at it

silent marsh
#

Hmmm I'll try that thanks, I thought I could find everything by looking at the code

copper nacelle
#

I wish

silent marsh
#

Code for dream nail must be in the dream dimension, it all makes sense

runic wind
silent marsh
# copper nacelle You can use the FSM Viewer to look at it

(Obviously) you were right, I think I found it, thanks a lot. Now I just need to figure how to interact with it in my code, but it seems that radiance.host has some tips regarding that
Edit: I figured it out, thank you again for your help 56 🙂

runic wind
#

can you create and remove entire states in FSMs? It's not required for what I want, I just think it would be cleaner

copper nacelle
#

Yeah

runic wind
#

how? the docs only mention adding/removing actions within states and changing the current state

copper nacelle
#

You just remove it from the array and update transitions to not point to it

runic wind
#

ok, but how do I make a new one

copper nacelle
#

new FsmState()?

runic wind
#

ok, thanks

steady comet
#

Unless you want to remove the init state palehmm

copper nacelle
#

I mean you don't have to

#

I don't know why you wouldn't though

#

Leaving garbage lying around x5fiftPrime

steady comet
#

IDK I learned to code by reading TC code

fair rampart
#

mrmmm, remade howling wraiths i have
remake abyssshrek i must

runic wind
#

it suggests FsmState(Fsm.StepFsm) but idk what Fsm.StepFsm is

fair rampart
#

5 min abyss shrek customknight spell, feel free to use it

copper nacelle
#

not cutting the head smh

weak lodge
#

we dont need to make any more custom knight skins

#

this one peaked them

safe hamlet
#

you should remove the background and it will be perfect

fair rampart
#

nah, the "abyss" is in the background as well

safe hamlet
#

i don't care what you think, remove it

weak lodge
#

toxic

fair rampart
#

remove it yourself i have 2 exams on wed

#

need to stop making sustomknight stuff

runic wind
#

ok this is perhaps the dumbest possible problem to have

#

as far as I can tell, fsms have BoolAllTrue, BoolAnyTrue, and BoolNoneTrue

#

but I need BoolAnyFalse (or something) and can't find that one

#

and I'd rather not use a bunch of BoolFlipEveryFrames if possible

copper nacelle
#

Is there not a not

runic wind
#

idk, does that work for fsms? I can try it

#

a weird exclusion regardless

fair rampart
runic wind
#

how do I get an fsm event as an FsmEvent type?

runic wind
#

hmm

#

I think I can just use a workaround

steady comet
#

Yeah probably

runic wind
#

ok what the fuck

#

how do I even see if an fsmBool is true or false

#

it can't go in if statements and such

steady comet
#

Usually .Value

#

so like myFsmBool.Value should have the bool type probably

steel badger
fair rampart
runic wind
#

is there a way to insert a method into an fsm that runs every frame?

fair rampart
pale plover
#

nice

steady comet
arctic dragon
steady comet
#

What is the etiquette on how good/useful/polished a mod has to be before it can go on modinstaller?

cedar hemlock
#

working

#

not too much updates after adding

#

not breaking everything

vocal spire
cedar hemlock
#

i mean, even with breaking everything it still gets on the modinstaller and the fix doesn't get merged

cedar hemlock
#

i love how 91 gets merged but the rest gets skipped

jolly oriole
#

91 is an issue

cedar hemlock
#

learned smth new: issues and pr's share that id thingie

tawny onyx
#

what i found! jngo comming back?

jolly oriole
#

maybe ¯_(ツ)_/¯

tawny onyx
floral blade
jovial gazelle
pseudo pond
#

i might just be formatting it incorectly

jovial gazelle
#

Spaces in folder names mess some stuff up, but you should be able to fix it my putting quotes around the path in your command

pseudo pond
#

i think i see the issue

#

ill try that

#

yep that worked, thanks

jovial gazelle
#

🙂

pseudo pond
#

i think it was the space in Program Files (x86)

jovial gazelle
#

That would do it

runic wind
#

is "FINISHED" the only fsm event that will automatically trigger if the state reaches the end?

#

it seems to be happening with other events, when I don't want it to

#

if it's supposed to happen with all events, how do I keep the fsm in one state until some conditions are met?

steady comet
runic wind
#

hmm, I probably fucked up indexes then

steady comet
#

Maybe

runic wind
#

when an event is sent it will immediately stop executing the state instructions, right?

#

e.g. nothing after the send instruction is done

steady comet
#

I believe that nothing will happen unless the state has a transition for that event

runic wind
#

but if it does

steady comet
#

AFAIK when it receives the event it stops everything in the current state, moves to the new state and starts doing the actions in the new state

runic wind
#

cool, that's the behavior I want

#

but I'm using log debugging and it's reaching the end of one state and then immediately the start of the next state and I have no idea why

#

there's two events, one is completely unused and the other is not "FINISHED"

steady comet
#

Are you sure there's no FINISHED transition? That's all I can think of

runic wind
#

I thought of something else that's actually probably happening

#

the insertMethods I'm using to debug are only being run the first time

#

yep got it

#

forgot to set something to run every frame and my debug logs were also running only once so I didn't see it

#

it's actually working now!

#

and 50 fps vengeflys are hilarious

jolly jungle
#

Guess who's gonna create brand new attacks (with animations) for a boss for the first time?

#

Wish me luck

jolly oriole
#

gl ig

jolly jungle
#

My luck acquisition techniques are brilliant shadeshades

#

Wait how do I create new states shadecry

#

Regarding states there's only "change state" and "current state" in the docs

#

Can I just add in a random name into "state2" and it'll go to a new state called that?

jolly oriole
#

some fsmutil versions have a pfsm.copyState method to copy a state, its actions and transitions to a new state with a name you provide

jolly jungle
#

Will transitions to the state also be copied?
They shouldn't, but...

jolly oriole
#

no

jolly jungle
#

Aight, good

#

So I can copy it over, and then change all the actions and transitions as I please

#

Cool

#

Thanks hollowknice

jolly oriole
#

i think in the fsmutil of dev versions of sfcore i have a method to create empty states

jolly jungle
#

I mean if it's short and doesn't need anything else I guess I can copy it over? But I don't see why bother, least not right now

#

Thanks though

jolly jungle
#

What happens if I remove a transition but I don't change the action that leads to it?

jolly oriole
#

it just continues with the current state

jolly jungle
#

Oh, alright

#

Thanks

#

Well I'm done for today

vague venture
#

i'm looking to commission someone to make a little mod that lets me kill grubs. dm me for more info if you're capable/interested

merry lotus
#

That is the most upsetting commission request I've ever seen grubcry

jolly oriole
#

weird way to spell 'blessed'

copper nacelle
#

TRUE

steel badger
jolly oriole
#

but those aren't grubs

steel badger
copper nacelle
#

mimics

steel badger
copper nacelle
#

bro it's easy

#

kill a real grub

steel badger
copper nacelle
#

you mean more based

steel badger
copper nacelle
#

nah you don't

steel badger
copper nacelle
#

based

#

why are you pinging me every reply

ornate rivet
steel badger
fair rampart
#

anyway what's the fastest way i can test birthplace cutscene for a customknight multiple times (this is just some intermediate testing, it's incomplete)

copper nacelle
#

get a savestate

#

or set a dgate with debug

fair rampart
#

how to get savestate

#

wait actually i can just save edit

#

i have a throwaway save with not a lot of abilities

fair rampart
#

i'm not done with the knight, in this customknight you basically play as the hollow knight

#

so like new storyline (inspired by lazycat's mod), hollow knight realised what it needed to do to destroy the radiance and save hallownest, and it was given another chance

#

the birthplace cutscene is basically its regret

#

so like there weren't 2 young hks present in the scene, it's just thk reliving its regret of what went wrong

#

but the sprite position be like shermaU
this is already my 3rd attempt

copper nacelle
#

you know there's like a thing which like cuts it into individual images yeah?

fair rampart
#

wait legit

#

where

deep wave
fair rampart
#

thanks

copper nacelle
#

the skin stuff is modding-discussion usually

#

this is more for like code

fair rampart
#

thanks

midnight narwhal
#

to preload flukmarm, would i want it to be ("Waterways_12", "Fluke Mother") or ("Waterways_12_boss", "Fluke Mother")

#

(its gameobject dump was in Waterways_12_boss.txt)

midnight narwhal
#

((it was "Waterways_12_boss"))

worn eagle
cedar hemlock
#

heh

midnight narwhal
#

trolled

jolly jungle
copper nacelle
jolly jungle
#

Hahaa

#

Yessss

cedar hemlock
#

heh

jolly jungle
#

For me the first time I watched it it froze right at the kill

#

Perfectly cut

light zodiac
#

how would i make both of them "FALSE"

steady comet
#

Maybe something like myAction.trueEvent.Value = myAction.falseEvent.Value ?

#

Or just make the transition for TRUE be the same as the transition for FALSE, if that doesn't mess with the rest of the state

#

Or replace the action with your own action that just goes to the target of the FALSE transition

#

Probably at least one of those will work, not sure what the best stylistically is though

light zodiac
steady comet
#

You might just be able to yeet the .Values so it's just .trueEvent = .falseEvent

jolly jungle
cedar hemlock
#

do <> around the link

#

<link>

steady comet
#

I guess you could do that and then add a transition on FINISHED instead of TRUE if you prefer

light zodiac
jolly jungle
#

But will it do the FALSE transition or do nothing?

#

Or is there only TRUE and FALSE palehmm

#

In which case you should just rewire TRUE to do the same as FALSE

light zodiac
#

so i would use fsm.ChangeTransition?

steady comet
#

Is that an extension method? It might depend on if you're using an FSM extension library or not

light zodiac
#

also, how do i preload

#

the scene was GG_Hollow_Knight so i did ("GG_Hollow_Knight", "Dream Entry")

#

but then my mod failed to load

#

where would i find the full name for "Dream Entry"

steady comet
light zodiac
#

Thank you

potent dirge
#

what're you trying to do btw, mulhima? just from a glance I want to guess skip the dream entry standing up animation?

#

but honestly Ive barely a clue what I'm even doing myself 🥴

jolly oriole
#
Input
[{
    "name": "mod2",
    "deps": []
},
{
    "name": "mod3",
    "deps": [ "mod2" ]
},
{
    "name": "mod1",
    "deps": [ "mod2", "mod3" ]
}]

Output
{
    "mod2": 0,
    "mod3": 1,
    "mod1": 2
}

now to just make this in c# for the mapi and there is no need anymore for the library/mod check

deep wave
#

would this theoretically eliminate the need to dictate load order?

jolly oriole
light zodiac
steady comet
#

Is there a good way to undo my changes to an FSM? I'm thinking for the unload method of an IToggleableMod

jolly oriole
#

or you make your mod not toggleable

steady comet
#

The third option seems better than the second for sure, I'll see if the init one works tho

jolly oriole
#

the first thing i'd say first check if the fsm has a template though, there's like 5 total that have a template

#

i know of like 2 or 3

steady comet
#

Oh how do I check that?

jolly oriole
#

let me open dnspy and i can check

#

if (pfsm.FsmTemplate != null)

steady comet
#

Oh I see

#

I'll test that, thanls

steady comet
#

BTW Option 3 won

jolly oriole
#

👍

solar fern
#

Are we allowed to post an idea of a mod for someone else to make

merry lotus
solar fern
#

ok

jolly jungle
#

Any idea why this changes Launch?

#

I don't even have any transition to "State2" yet

copper nacelle
#

.x is probably an fsmfloat then

jolly jungle
#

Nah, it's just a part of the action

#

And isn't in the float list

copper nacelle
#

uh huh

jolly jungle
#

Oh I see what you meant now

jolly oriole
jolly jungle
#

?

#

Wait

#

Are the x,y pointers to that thing there

#

or to something anyways

jolly oriole
#

the Value = thing directly edited the value of the fsmfloat (also the one in variables, as that is the same fsmfloat)

#

yes

jolly jungle
#

Welp

#

What solutions are there?

#

Will using a blank state work?

jolly oriole
#

you could .x = 5, though idk if that also just changes the value itself

jolly jungle
#

But x is an fsmfloat, not a float palehmm

#

No?

#

Or can you use a float in there directly?

jolly oriole
#

you can just directly assign a float, but idk if it's shorthand to just adjust the value

copper nacelle
#

no it's an implicit new

#

it's static it can't affect an instance in the first place

jolly oriole
#

nice

copper nacelle
#

i mean it technically could if you had a shit global but that'd be awful

jolly jungle
#

But ok

jolly oriole
#

assinging a float creates a new FsmFloat instead of changing the value of the existing fsmfloat

jolly jungle
#

Ohhh I see

#

Well, it worked, anyways

#

Thanks mylajoy

jolly jungle
#

Nothing is working

#

Entirely unrelated to that, I'm done for today with this

fair rampart
#

any way to open .assets file without unity?

jolly oriole
#

UABE or assetsview can open them

vocal spire
#

🤔

normal patio
#

So, someone is making a OneShot skin pack, and wants make the soul yellow. But when they looked at the sprites, they couldn't find any way to make the soul gauge yellow. they're talking about making the soul inside of the gauge yellow, not just the full meter

arctic dragon
#

afaik there’s no known way to do this? i certainly haven’t seen any other customknight do it

copper nacelle
#

Not using CustomKnight no

#

You could mod it in yourself fairly easily I think

normal patio
#

okay I'll pass the info along. thank you grublove

#

is there an sheet or png that shows the order of the knight sprites in knight.png?

vocal spire
#

Use godump

midnight narwhal
copper nacelle
#

Infinite recursion

#

Is what I'd guess

midnight narwhal
#

so should i stop the coroutine before starting it again?

copper nacelle
#

idk why you're not just looping

midnight narwhal
#

ah

#

that could work

#

it still crashes

copper nacelle
#

hmm

#

is it invoking the coroutine which crashes the game

midnight narwhal
#

wdym

#

it crashes after a bit

#

the coroutine runs for a bit and everything is fine

#

then it freezes after a bit

copper nacelle
#

if you don't run the coroutine I assume it never crashes?

midnight narwhal
#

yeah

#

the coroutine also seems to drop my frames

#

i think

#

although that may just be because of the 6 marmus at once

light zodiac
midnight narwhal
#

i can confirm it gradually drops my frames from around 260 to about 150 after all 6 marmus are spawned

#

and then crashes

#

it incrementally drops after frame spikes

light zodiac
#

What's your code with the loop?

copper nacelle
#

did you check output log

midnight narwhal
#

(fps drop example)

charred topaz
#

The times where I had a coroutine freeze the game is usually because it never runs a yield statement

midnight narwhal
#

what should i be looking for

copper nacelle
#

I mean if the game crashes there's gonna be something at the end of it

midnight narwhal
#

the only mention of the marmus is

FSM not Preprocessed: MiniMarmu : Control
 
(Filename: C:\buildslave\unity\build\artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
#

(that occurs 6 times right at the end

#

)

copper nacelle
#

is that all

#

with the game having crashed

midnight narwhal
#

yeah i think

copper nacelle
#

I think x5fiftM

midnight narwhal
#

ill crash it again

copper nacelle
#

do me a favor and add a log with the count before the if

midnight narwhal
#

ok

#

(btw i changed the counting thing to var objects = Resources.FindObjectsOfTypeAll<GameObject>().Where(obj => obj.name == "MiniMarmu");)

copper nacelle
#

Oh god why

#

You went from slow to even slower

midnight narwhal
#

should i change it back

copper nacelle
#

Just tag it and find objects with tag

midnight narwhal
#

ah

#

how do i add a tag

#

or more specifically define a tag

copper nacelle
#

it's just a string

#

you just do marmu.tag = "MMarmu" or whatever

light zodiac
#

marmu.tag = "tag"?

midnight narwhal
#

but just doing that gives me the error

[ERROR]:[UNITY] - UnityException: Tag: FlukemarmuSpawn is not defined.
[ERROR]:[UNITY] - Flukemarmu.FlukemarmuControl+<SpawnMiniMarmus>d__11.MoveNext ()
[ERROR]:[UNITY] - UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress)
[ERROR]:[UNITY] - 
light zodiac
#

how are you searching for the tag?

midnight narwhal
#

GameObject[] marmus = GameObject.FindGameObjectsWithTag("FlukemarmuSpawn");

copper nacelle
#

It appears you cannot create tags at runtime

#

Fun

#

Could use a list or something

midnight narwhal
#

yeah

#

well my fps no longer drops but it still crashes

light zodiac
#

What's your code?

midnight narwhal
#

MarmuOnDeath() is just

private void MarmuOnDeath()
        {
            marmuCount--;
        }
light zodiac
#

Did you do StartCouroutine( SpawnMiniMarmus()) or
Gamemanager.instance.StartCouroutine( SpawnMiniMarmus())

midnight narwhal
#

im currently doing the first

#

should i be doing the second?

light zodiac
#

If you do the first, the wait seconds will make the whole game wait

copper nacelle
#

what

light zodiac
#

I tried it out

copper nacelle
#

lost it

#

no

#

what the fuck

midnight narwhal
#

that didnt happen to me

#

(also it still crashes with the gamemanger StartCoroutine)

worn eagle
runic wind
#

Nice job, I hate it

vocal spire
rough pulsar
#

ima do it

ornate rivet
#

it's beautiful

arctic dragon
#

GUB NO

primal latch
#

How would I go about setting the knight’s default speed to the same speed as dashmaster?

arctic dragon
#

you mean sprintmaster? iirc dashmaster doesn’t increase regular run speed

arctic dragon
#

i’m not that much of a coder but my best guess is finding something named or tagged with speed, and mess with the value
probably something like varBaseSpeed for the well, base speed, and check wherever the charm stuff is stored on the speed value sprintmaster uses

steady comet
#

Just ctrl+f for "equippedCharm_37" in the HeroController file in DnSpy to see what you need to hook

light zodiac
primal latch
light zodiac
#

idk heroupdatehook?

primal latch
#

Ok

light zodiac
#

nvm, this is what the game doescs this.rb2d.velocity = new Vector2(move_direction * this.RUN_SPEED, this.rb2d.velocity.y);

#

so it doesnt need to be in a update hook

arctic dragon
#

looks like spaghetti to me but it functions

primal latch
light zodiac
#

no

primal latch
light zodiac
primal latch
#

Ah. Like that.

#

Ok. Thanks.

#

What is the difference between runspeed and walkspeed?

light zodiac
#

walk speed is like dirthmouth. run speed is normal speed

primal latch
#

Ok.

worn eagle
#

Any reason why ExtraDamageable works w spore cloud but not w crest's passive?

vocal spire
#

I think crest has a different extra damage type

#

Might change something

#

Been a while since I checked

jolly oriole
#

I'd look at how crystal guardian gets damaged

worn eagle
#

it's weird cause OnTriggerEnter2D isn't registering a trigger w a Knight Dung Trail go

jolly oriole
#

probably layer shenenigans then

worn eagle
#

my extradamageable is on 11

jolly oriole
#

hm, layer 11 should work fine

#

in theory

worn eagle
#

would Fungus2_15_boss: Mantis Lord be a good candidate for a fast preload for uninfected stuff?

#

ideally I would have no preloads but I'm not about to recreate 8 prefabs from scratch

jolly oriole
#

initially i'd say yes because it's only a boss, but seeing this maybe there's a better one, but for now i'd still go with it
(these are dependencies of the scene)

bitter fern
#

Italy why grubsad

cedar hemlock
#

lol

jolly jungle
#

Anyways beautiful work Italy

jolly oriole
copper nacelle
#

i will look at when i do not have 4 projects and 2 ap exams

jolly oriole
#

valid

runic wind
#

ChaseObjectV2 and Wait are effectively commented out, right?

#

at this point it feels like TC actively tried to make their code nonsensical

rose cedar
#

really now

runic wind
#

how does this ^ work? ChaseObject and ChaseObjectV2 both have onFixedUpdates that set the rb2d's velocity. Which one is overwriting the other?

steady comet
runic wind
#

I realized I actually don't need to figure out how it works to fix it

#

Also is it known how they (follies) move while you're paused?

#

if not I'll try to figure it out

jolly jungle
#

What fsm is this?

runic wind
#

this is the follies fsm

#

it's also used in vengeflys though

jolly oriole
balmy sphinx
#

Anyone has any news on the pale court mod?

jolly oriole
#

it's pulling a silksong

balmy sphinx
#

For now i found NOTHING except the trailer of the mod

jolly oriole
#

yea, sounds about right

amber loom
#

Hey, I've an issue regarding TASing tool for HK

#

I would like to trace calls to UnityEngine.Random.Range() from the game, but I'm not sure what is the best method

#

I want to know the returned values

vocal spire
#

It might be UnityEngine.CoreModule.dll

amber loom
#

UnityEngine.dll only shows the interface for the critical methods (Range(), but also InitState()), I don't know if I can insert code there

#

(using dnspy, I forgot)

vocal spire
#

Ah, I don’t know then

jolly oriole
#

there may be a possibility with 'interesting' Reflection, though idk if it really works

stone elm
#

Harmony patch it

copper nacelle
#

There's also the option of NativeDetour

#

I believe Katie had some code which just overwrote the asm for a native function too

primal latch
copper nacelle
#

InternalCall is for the jit/clr to handle

primal latch
#

Wdym?

copper nacelle
#

it's implemented in c++

#

meme

worn eagle
copper nacelle
#

yo sick

vocal spire
#

Awesome!

jolly oriole
#

did you make the pfsm in unity? (i can't get playmaker to work so i'd do it pepega-style in code lol)

ornate rivet
#

That looks so coool

#

the idle movements should be slowed down a little but other than that I love it!

vocal spire
#

I’ll try making a pfsm for hk in unity at some point, it seems really fun, plus I already have playmaker

jolly oriole
vocal spire
#

I thought I tried that one, and it worked, but idk, prob remembering wrong

worn eagle
#

there's stuff I don't remember I had to do to fix compiler errors, maybe I could create a sort of "template project"

jolly oriole
#

*_*

rough pulsar
#

What framework version was 1.5 using again

jolly oriole
#

472

rough pulsar
#

Excellent

#

Im waiting for its full release

#

No more suffering after that

worn eagle
#

is RecordJournalEntry in FrogCore causing hollow knight to die a known issue

merry lotus
worn eagle
cedar hemlock
jolly jungle
#

I don't think it's what I need but I'll take a look at it

#

I should look at Mistakes too, actually, they're more similar

jolly jungle
#

Who made the graphics and can you help me get them to help me

#

Also I'd love to look at how you made this

worn eagle
#

I made them

jolly jungle
#

Ah, nice

#

How long did it take

#

Also how does the process of making a new enemy actually work

worn eagle
#

Took me a day to draw 39 sprites and about a day and a half to implement them in unity/mod them into the game

#

I used the same tools that tc used, playmaker and tk2d, to create most of the behaviors and visuals, then I assetbundled them and loaded that into a mod to apply game specific attributes like HealthManager, EnenyDeathEffects, etc.

#

I'm working on a totally legal template Unity project with pfsm and tk2d integrated already; not sure if it'll work on other systems

fair rampart
#

how do you replace white palace spike sprites

#

where to find

vocal spire
#

Once I update it I’ll probably take uuwuu down from the installer since it has problems with the frogcore update, the update I’m making for uuwuu is far from done though

vocal spire
#

I already bought playmaker

jolly oriole
#

bruh, can't replace the unityengine.random.range methods

worn eagle
floral blade
#

Can anybody update a mod on modinstaller by raising a PR ? Or does it need to be the mod author ?thkshadeidk

floral blade
#

But I assume it's verified before being merged ?

copper nacelle
#

yeah

#

i look at it

#

and then i press the green button

floral blade
#

Like for the scenario where a dll is added and it "claims" to be a dll of a certain mod, but is not submitted by its author, or like it's an update to an existing mod

copper nacelle
#

what

#

if someone has made a legit update and the orig author is ok with it i'll update it

floral blade
#

Right, so if the original author is not really super active but they give their go ahead anyone can put out a legit update. Makes sense.

jolly oriole
#

yea

steady comet
#

C sharp question - is there a good reason why structs shouldn't have methods in them?

jolly oriole
#

i mean, i don't really care if you have methods in your struct, it's just that IMO structs only represent structures (duh) and therefore don't have methods, but that is basically just C-level. in c# it is nearly irrelevant if you use structs or classes

rough pulsar
#

structs are structs shroompog

stone elm
copper nacelle
#

structs vs classes are plenty relevant

#

classes are reference types

steady comet
stone elm
#

That's fine

#

As long as you get the semantics of the type, it doesn't matter much. Like 56 said, classes are reference types and structs are value types. That's why I suggested you keep your structs immutable if possible. (Your example isn't, but I figured it's just an example.)

steady comet
#

When you say keep the struct immutable, does that just mean to replace

    public int x;

with something like

    private readonly int _x;
    public int x => _x;

or something like that?

#

(Or could you just say public readonly int x;?)

stone elm
#

Just put readonly in on the public fields.

jolly oriole
#

oh my goodness, first thing to do is clean up the layout

jolly oriole
copper nacelle
#

true

charred topaz
#

Yeah, it was either that or using a whole bunch of /n characters to properly format it in the settings menu

jolly oriole
charred topaz
copper nacelle
#

yeah

#

is the release on gh too

charred topaz
#

yeah, I can link you those too

copper nacelle
#

the gh links are nicer because gdrive doesn't send content sizes so the progress is indeterminate

jolly oriole
#

not the zip, only the direct dll is on github

copper nacelle
#

Sick

#

does ikg have an update then

#

or is that just github links

jolly oriole
#

ikg appears to have had an update

charred topaz
#

All three mods have updates to them

copper nacelle
#

alright cool

#

fwiw you can pr the modinstaller to add entries but I can add it

copper nacelle
#

is there any chance you have a zip

#

modinstaller1 just kinda hates raw dlls

#

I can put the dlls up but the old installer will have a fit

#

questionable

charred topaz
#

I can do that, just give me a moment

#

Does the zip need to contain the dll and README?

jolly oriole
#

yes

copper nacelle
#

yeah

#

if you want short desc text lmk what it is

charred topaz
#

Pretty sure for a quick summary it can be "Corrupted Kin : Turns Lost Kin into a two phase boss fight and makes it harder. Requires WeaverCore"

copper nacelle
#

alright

charred topaz
jolly oriole
#

i think it would be great to also have them part of the github releases (yes, you can just edit the zips in), is not prone to be suddenly deleted (unless github deletes the entire repo for whatever reason)

charred topaz
#

It seems like attempting to install WeaverCore is crashing the installer. The other two mods don't seem to have this problem, I could install them just fine

copper nacelle
#

put the zip on gh

charred topaz
#

should I just modify the release page for WeaverCore and put it there?

copper nacelle
#

yeah

charred topaz
copper nacelle
#

should work now

charred topaz
#

The installer did crash when starting it up, but after removing IKG and Corrupted Kin manually, it looks like it working now

fair rampart
#

how to change prologue text
the elegy for hallownest one

#

(pls ping me I'll be away)

ornate rivet
#

ok

#

@fair rampart

runic wind
#

(I know nothing about the intro cutscenes but) are they even stored as text? there's some chance it's just a video file

fair rampart
deep wave
#

it's likely doable through a language get hook, just check the key for the text and replace that key

jolly oriole
#

I'd guess a language key like "PROLOGUE_TEXT"

jolly oriole
#

PROLOGUE_EXCERPT_01 to PROLOGUE_EXCERPT_04 and PROLOGUE_EXCERPT_AUTHOR

cedar hemlock
#

why not use language support

#

oh nvm then you need to give the users a zip and a new dependecy

jolly oriole
#

language support doesn't overwrite existing text afaik

fair rampart
vocal spire
fair rampart
#

not really that's why i'm asking

vocal spire
#

Ok

#

Do you want to code one or make a settings file for the mod Mulhima made

fair rampart
#

doesn't make a difference

#

as long as it works

cedar hemlock
vocal spire
#

Extremely big difference zote

fair rampart
#

what?

vocal spire
#

You should probably decide, code a mod, or edit a text file for Mulhima’s mod

fair rampart
#

if i wanna make it public is coding a mod worth it for changing the prologue alone

vocal spire
#

Idk

fair rampart
#

as an add-on to my customknight (upcoming) project

cedar hemlock
#

if you make it public, code

vocal spire
#

Your choice

fair rampart
#

i shall look into the code

vocal spire
cedar hemlock
#

it isn't easy to tell people they need to download and place there and there...

#

hmm maybe it doesnt matter much as the skin works without the text

fair rampart
#

yeah it's a free additional thing, i'll probably tell them to get it if they want but it's not necessary for the skin alone

#

btw can cutscenes be changed

vocal spire
#

Yes

#

But you need your own mod for that

fair rampart
#

i know, which type of mod can do that

vocal spire
#

Wdym which type of mod

cedar hemlock
#

"type"?

#

what Someone means is that you need to code your own mod for that

fair rampart
#

under which section does that kind of mod go under

vocal spire
#

There aren’t types of mods....

#

It isn’t explained there

fair rampart
#

so i can quickly get into figuring out how to make it

cedar hemlock
#

its a guide

#

but yeah it doesnt cover cutscenes

vocal spire
#

It’s documents on how modding works and a guide to getting a basic mod format down

#

But you’ll need some prior knowledge of c# for that

fair rampart
vocal spire
#

A bit

#

You need c# knowledge, some unity knowledge, and then you need to remember that stack overflow is key to success and go there every 5 minutes

fair rampart
#

lmao i do some coding but not c#

vocal spire
#

If you want an example of how to do it, redwing does it

fair rampart
#

i have a mod sample

#

but what is redwing

vocal spire
#

A mod

cedar hemlock
fair rampart
#

thanks

elder radish
#

I'm using a particle system in one of my scenes. It should be effected from the slash but it seems like the collision does not work.

#

AttackLayer(17)

#

Has anyone experienced something similar?

jolly oriole
#

i have no clue what you're trying to achieve, but if you want things to collide, the pins have a layer collision matrix, maybe that can help

#

oh, you probably want the particles to be flung around by the slash?

#

that won't work as the slash hitbox

  1. is a trigger
  2. doesn't move (just gets activated and deactivated)
#

so you'd need to make the 'particles' have scripts that react to nailswings and fly accordingly

#

possibly, haven't tested such a thing yet

elder radish
#

oh you say the slash does not collide it just triggers oncollision

jolly oriole
#

yes

elder radish
#

this is probably the reason :/

#

thanks a lot

jolly oriole
light zodiac
#

Is there a modding api for 1424?

vocal spire
jolly oriole
#

though idk why one would need it

light zodiac
#

i have my reasons

worn eagle
#

So I built the beta api on windows and it worked fine but on Linux I get float whenever I use a nail art

vocal spire
copper nacelle
worn eagle
#

yep

copper nacelle
#

that's what happens when the fsm gets interrupted

#

very easy to do with like map but it's fucked that it's happening by itself

jolly oriole
#

and considering everything nailart is handled by FSMs idk what the mapi does to kill the fsm

jolly oriole
jolly oriole
#

custom 'particle' system

ornate rivet
#

this is not pale court zaliant smh

jolly oriole
#

no, this is a washing machine

floral blade
#

This is not strictly a mod development discussion but, I've been thinking of possible ways to give players some control over their skins and while something like a vessel maker for actual in game sprites would be amazing, it's a herculean task to undertake (especially with limited art skills ). But even with just some masking and blending we can allow players some level of customisation to remix cloak colors & try different effects / knight combinations, linked is the POC of that concept.

https://prashantmohta.github.io/HollowKnight.SkinRemixer/

perhaps with more detailed masks for horns/eyes for example, we could reach closer to the goal of anybody being able to customise their own skins.

would like any thoughts/ suggestions on the concept.

pale crest
#

making your own skin requires making custom sprites

#

requires a bit of BTS knowledge

floral blade
#

That's the concept anyways

#

At the very least it makes recoloring default sprite super easy

#

For example I could recolour this on my phone

slender osprey
#

Hi ! Sorry, noob question : I'm trying to compile the api (https://github.com/HollowKnight-Modding/HollowKnight.Modding), I followed the instructions up to step 4, but there's an error in the compile step : warning MSB3245: Could not resolve this reference. Could not locate the assembly "UnityEngine.InputLegacyModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".
with Visual Studio 2019.

I have also tried using Rider which (after updating the C# version) gives me a different, more specific error in ModLoader.cs, ligne 305 on the "in":
ModLoader.cs(305, 66): [CS1061] 'KeyValuePair<string, List<string>>' does not contain a definition for 'Deconstruct' and no accessible extension method 'Deconstruct' accepting a first argument of type 'KeyValuePair<string, List<string>>' could be found (are you missing a using directive or an assembly reference?).

Do you have leads on either of these ?

#

(I can confirm I copied the Managed dir contents into a Vanilla directory from the last, up-to-date version)

worn eagle
#

I ran into the latter issue and solved it by changing the deconstructed params to KeyValuePairs and then getting the params using .Key and .Value

slender osprey
#

oh so this is a code issue ? I should probably open an issue on Github then

copper nacelle
#

Are you compiling against the beta

vocal spire
slender osprey
vocal spire
#

If you got the code from 56’s repo then you have the code for the hk beta

#

It needs to be compiled with the beta

#

The opposite is also true

copper nacelle
#

the main repo is literally ahead of my fork

slender osprey
#

Don't I have to compile it ?